[{"data":1,"prerenderedAt":175145},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch16-pin-you-gou-xiang-mu-xia-pian-zhu-ti-yu-ye-mian-kai-fa":3,"wiki-doc-nav":2554},{"id":4,"title":5,"body":6,"description":2546,"extension":2547,"meta":2548,"navigation":2549,"path":2550,"seo":2551,"stem":2552,"__hash__":2553},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":8,"toc":2523},"minimark",[9,13,18,23,39,44,47,50,63,66,111,114,138,144,147,149,194,196,232,235,240,243,246,249,292,299,302,312,314,356,359,393,399,419,421,463,465,501,506,534,536,563,565,589,596,599,667,669,714,716,756,763,768,770,800,802,832,836,839,846,858,860,887,889,913,916,918,942,948,958,960,990,992,1022,1029,1070,1072,1108,1110,1146,1150,1153,1156,1159,1165,1170,1173,1198,1201,1225,1228,1252,1257,1260,1263,1266,1269,1272,1346,1348,1378,1380,1410,1413,1416,1448,1452,1456,1470,1481,1484,1489,1491,1610,1612,1706,1729,1731,1755,1757,1781,1788,1791,1801,1803,1827,1832,1840,1842,1872,1877,1917,1919,1949,1951,1977,1981,1984,1990,1993,1997,2005,2012,2020,2022,2052,2054,2084,2092,2095,2098,2100,2137,2139,2169,2172,2177,2179,2203,2205,2229,2232,2319,2321,2345,2347,2371,2375,2377,2401,2403,2437,2441,2455,2458,2463,2466,2471,2474,2511,2519],[10,11,5],"h1",{"id":12},"_16-品优购项目下篇-主体与页面开发",[14,15,17],"h2",{"id":16},"_161-项目主体模块制作","16.1 项目主体模块制作",[19,20,22],"h3",{"id":21},"_1611-首页制作","16.1.1 首页制作",[24,25,26,30,31,34,35,38],"p",{},[27,28,29],"strong",{},"main"," 主体模块是 ",[27,32,33],{},"index"," 里面专有的，注意需要新的样式文件 ",[27,36,37],{},"index.css，"," 就不要写在common.css中了",[40,41],"img",{"style":42,"src":43},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[40,45],{"style":42,"src":46},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[24,48,49],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[51,52,53,57,60],"ul",{},[54,55,56],"li",{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[54,58,59],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[54,61,62],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[24,64,65],{},"结构实例代码：",[67,68,73],"pre",{"className":69,"code":70,"language":71,"meta":72,"style":72},"language-Css shiki shiki-themes github-light github-dark",".box {\n  float: left;\n}\n","Css","",[74,75,76,89,105],"code",{"__ignoreMap":72},[77,78,81,85],"span",{"class":79,"line":80},"line",1,[77,82,84],{"class":83},"sScJk",".box",[77,86,88],{"class":87},"sVt8B"," {\n",[77,90,92,96,99,102],{"class":79,"line":91},2,[77,93,95],{"class":94},"sj4cs","  float",[77,97,98],{"class":87},": ",[77,100,101],{"class":94},"left",[77,103,104],{"class":87},";\n",[77,106,108],{"class":79,"line":107},3,[77,109,110],{"class":87},"}\n",[24,112,113],{},"样式实例代码：",[67,115,116],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,117,118,124,134],{"__ignoreMap":72},[77,119,120,122],{"class":79,"line":80},[77,121,84],{"class":83},[77,123,88],{"class":87},[77,125,126,128,130,132],{"class":79,"line":91},[77,127,95],{"class":94},[77,129,98],{"class":87},[77,131,101],{"class":94},[77,133,104],{"class":87},[77,135,136],{"class":79,"line":107},[77,137,110],{"class":87},[139,140,141],"ol",{},[54,142,143],{},"左侧focus模块制作",[40,145],{"style":42,"src":146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[24,148,65],{},[67,150,152],{"className":69,"code":151,"language":71,"meta":72,"style":72},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[74,153,154,165,177,189],{"__ignoreMap":72},[77,155,156,160,163],{"class":79,"line":80},[77,157,159],{"class":158},"s9eBZ","input",[77,161,162],{"class":83},":focus",[77,164,88],{"class":87},[77,166,167,170,172,175],{"class":79,"line":91},[77,168,169],{"class":94},"  border-color",[77,171,98],{"class":87},[77,173,174],{"class":94},"skyblue",[77,176,104],{"class":87},[77,178,179,182,184,187],{"class":79,"line":107},[77,180,181],{"class":94},"  outline",[77,183,98],{"class":87},[77,185,186],{"class":94},"none",[77,188,104],{"class":87},[77,190,192],{"class":79,"line":191},4,[77,193,110],{"class":87},[24,195,113],{},[67,197,198],{"className":69,"code":151,"language":71,"meta":72,"style":72},[74,199,200,208,218,228],{"__ignoreMap":72},[77,201,202,204,206],{"class":79,"line":80},[77,203,159],{"class":158},[77,205,162],{"class":83},[77,207,88],{"class":87},[77,209,210,212,214,216],{"class":79,"line":91},[77,211,169],{"class":94},[77,213,98],{"class":87},[77,215,174],{"class":94},[77,217,104],{"class":87},[77,219,220,222,224,226],{"class":79,"line":107},[77,221,181],{"class":94},[77,223,98],{"class":87},[77,225,186],{"class":94},[77,227,104],{"class":87},[77,229,230],{"class":79,"line":191},[77,231,110],{"class":87},[24,233,234],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[139,236,237],{"start":91},[54,238,239],{},"右侧newsflash模块制作",[40,241],{"style":42,"src":242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[24,244,245],{},"右侧的模块 分为上中下三个盒子",[24,247,248],{},"结构代码：",[67,250,254],{"className":251,"code":252,"language":253,"meta":72,"style":72},"language-Html shiki shiki-themes github-light github-dark","\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n","Html",[74,255,256],{"__ignoreMap":72},[77,257,258,261,263,266,269,273,276,278,281,284,286,289],{"class":79,"line":80},[77,259,260],{"class":87},"\u003C",[77,262,40],{"class":158},[77,264,265],{"class":83}," src",[77,267,268],{"class":87},"=",[77,270,272],{"class":271},"sZZnC","\"images\u002Fpic.jpg\"",[77,274,275],{"class":83}," alt",[77,277,268],{"class":87},[77,279,280],{"class":271},"\"描述文字\"",[77,282,283],{"class":83}," title",[77,285,268],{"class":87},[77,287,288],{"class":271},"\"悬停提示\"",[77,290,291],{"class":87},">\n",[24,293,294,295,298],{},"1 号盒子为 ",[74,296,297],{},"news"," 新闻模块 高度为 165px",[40,300],{"style":42,"src":301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[24,303,304,305,308,309],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[74,306,307],{},"news-hd","，下面是 ",[74,310,311],{},"news-bd",[24,313,248],{},[67,315,317],{"className":251,"code":316,"language":253,"meta":72,"style":72},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[74,318,319,325,342,347],{"__ignoreMap":72},[77,320,321],{"class":79,"line":80},[77,322,324],{"class":323},"sJ8bj","\u003C!-- HTML 代码示例 -->\n",[77,326,327,329,332,335,337,340],{"class":79,"line":91},[77,328,260],{"class":87},[77,330,331],{"class":158},"div",[77,333,334],{"class":83}," class",[77,336,268],{"class":87},[77,338,339],{"class":271},"\"example\"",[77,341,291],{"class":87},[77,343,344],{"class":79,"line":107},[77,345,346],{"class":87},"  示例内容\n",[77,348,349,352,354],{"class":79,"line":191},[77,350,351],{"class":87},"\u003C\u002F",[77,353,331],{"class":158},[77,355,291],{"class":87},[24,357,358],{},"样式代码：",[67,360,361],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,362,363,367,381,385],{"__ignoreMap":72},[77,364,365],{"class":79,"line":80},[77,366,324],{"class":323},[77,368,369,371,373,375,377,379],{"class":79,"line":91},[77,370,260],{"class":87},[77,372,331],{"class":158},[77,374,334],{"class":83},[77,376,268],{"class":87},[77,378,339],{"class":271},[77,380,291],{"class":87},[77,382,383],{"class":79,"line":107},[77,384,346],{"class":87},[77,386,387,389,391],{"class":79,"line":191},[77,388,351],{"class":87},[77,390,331],{"class":158},[77,392,291],{"class":87},[24,394,395,396,398],{},"上面是",[74,397,307],{},"，设置高度是 33px，设置下边框",[51,400,401,408],{},[54,402,403,404,407],{},"里面放一个",[74,405,406],{},"h5"," 标题",[54,409,410,411,414,415,418],{},"放一个a",[74,412,413],{},"标签","，内容是 更多，然后让 ",[74,416,417],{},"a"," 进行右浮动，三角用伪元素设置字体图标就好",[24,420,248],{},[67,422,424],{"className":69,"code":423,"language":71,"meta":72,"style":72},"div::before {\n  content: \"\";\n  display: block;\n}\n",[74,425,426,435,447,459],{"__ignoreMap":72},[77,427,428,430,433],{"class":79,"line":80},[77,429,331],{"class":158},[77,431,432],{"class":83},"::before",[77,434,88],{"class":87},[77,436,437,440,442,445],{"class":79,"line":91},[77,438,439],{"class":94},"  content",[77,441,98],{"class":87},[77,443,444],{"class":271},"\"\"",[77,446,104],{"class":87},[77,448,449,452,454,457],{"class":79,"line":107},[77,450,451],{"class":94},"  display",[77,453,98],{"class":87},[77,455,456],{"class":94},"block",[77,458,104],{"class":87},[77,460,461],{"class":79,"line":191},[77,462,110],{"class":87},[24,464,358],{},[67,466,467],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,468,469,477,487,497],{"__ignoreMap":72},[77,470,471,473,475],{"class":79,"line":80},[77,472,331],{"class":158},[77,474,432],{"class":83},[77,476,88],{"class":87},[77,478,479,481,483,485],{"class":79,"line":91},[77,480,439],{"class":94},[77,482,98],{"class":87},[77,484,444],{"class":271},[77,486,104],{"class":87},[77,488,489,491,493,495],{"class":79,"line":107},[77,490,451],{"class":94},[77,492,98],{"class":87},[77,494,456],{"class":94},[77,496,104],{"class":87},[77,498,499],{"class":79,"line":191},[77,500,110],{"class":87},[24,502,503,504],{},"下面是",[74,505,311],{},[51,507,508,517],{},[54,509,510,511,513,514,516],{},"里面包含 ",[74,512,51],{}," 和 ",[74,515,54],{}," 还有链接",[54,518,519,520,522,523,526,527,530,531],{},"给",[74,521,54],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[74,524,525],{},"overflow: hidden;"," 2.设置 ",[74,528,529],{},"white-space: nowrap;"," 3. 设置 ",[74,532,533],{},"text-overflow: ellipsis;",[24,535,248],{},[67,537,539],{"className":69,"code":538,"language":71,"meta":72,"style":72},"div {\n  overflow: hidden;\n}\n",[74,540,541,547,559],{"__ignoreMap":72},[77,542,543,545],{"class":79,"line":80},[77,544,331],{"class":158},[77,546,88],{"class":87},[77,548,549,552,554,557],{"class":79,"line":91},[77,550,551],{"class":94},"  overflow",[77,553,98],{"class":87},[77,555,556],{"class":94},"hidden",[77,558,104],{"class":87},[77,560,561],{"class":79,"line":107},[77,562,110],{"class":87},[24,564,358],{},[67,566,567],{"className":69,"code":538,"language":71,"meta":72,"style":72},[74,568,569,575,585],{"__ignoreMap":72},[77,570,571,573],{"class":79,"line":80},[77,572,331],{"class":158},[77,574,88],{"class":87},[77,576,577,579,581,583],{"class":79,"line":91},[77,578,551],{"class":94},[77,580,98],{"class":87},[77,582,556],{"class":94},[77,584,104],{"class":87},[77,586,587],{"class":79,"line":107},[77,588,110],{"class":87},[24,590,591,592,595],{},"2 号盒子为 ",[74,593,594],{},"lifeservice"," 生活服务模块 高度为 209px",[40,597],{"style":42,"src":598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[51,600,601,604,614,638,651],{},[54,602,603],{},"设置边框（左右下边框）",[54,605,606,607,610,611,613],{},"里面的内容 是 ",[74,608,609],{},"ul > 12*li","，给",[74,612,54],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[54,615,616,617],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[51,618,619,624,633],{},[54,620,621,623],{},[74,622,594],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[54,625,626,627,629,630,632],{},"可以让 ",[74,628,594],{}," 里面的 ",[74,631,51],{}," 宽度为 252，就可以装的下 4 个 小 li",[54,634,635,637],{},[74,636,594],{}," 盒子 overflow 隐藏多余的部分就可以了",[54,639,640,641,643,644,647,648,650],{},"在 ",[74,642,54],{}," 里面放一个 ",[74,645,646],{},"i","（里面放图标），下面的文本用 ",[74,649,24],{}," 标签包裹",[54,652,653,654,656,657,659,660,662,663,666],{},"给 ",[74,655,646],{}," 设置 24px宽和28px的高（注意 ",[74,658,646],{}," 是行内元素， 转成行内块），给 ",[74,661,54],{}," 设置 ",[74,664,665],{},"text-align:center"," 让里面内容居中显示",[24,668,248],{},[67,670,672],{"className":69,"code":671,"language":71,"meta":72,"style":72},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[74,673,674,694,699,710],{"__ignoreMap":72},[77,675,676,678,681,683,685,688,690,692],{"class":79,"line":80},[77,677,77],{"class":158},[77,679,680],{"class":87},", ",[77,682,417],{"class":158},[77,684,680],{"class":87},[77,686,687],{"class":158},"em",[77,689,680],{"class":87},[77,691,27],{"class":158},[77,693,88],{"class":87},[77,695,696],{"class":79,"line":91},[77,697,698],{"class":323},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[77,700,701,703,705,708],{"class":79,"line":107},[77,702,451],{"class":94},[77,704,98],{"class":87},[77,706,707],{"class":94},"inline",[77,709,104],{"class":87},[77,711,712],{"class":79,"line":191},[77,713,110],{"class":87},[24,715,358],{},[67,717,718],{"className":69,"code":671,"language":71,"meta":72,"style":72},[74,719,720,738,742,752],{"__ignoreMap":72},[77,721,722,724,726,728,730,732,734,736],{"class":79,"line":80},[77,723,77],{"class":158},[77,725,680],{"class":87},[77,727,417],{"class":158},[77,729,680],{"class":87},[77,731,687],{"class":158},[77,733,680],{"class":87},[77,735,27],{"class":158},[77,737,88],{"class":87},[77,739,740],{"class":79,"line":91},[77,741,698],{"class":323},[77,743,744,746,748,750],{"class":79,"line":107},[77,745,451],{"class":94},[77,747,98],{"class":87},[77,749,707],{"class":94},[77,751,104],{"class":87},[77,753,754],{"class":79,"line":191},[77,755,110],{"class":87},[24,757,758,759,762],{},"3 号盒子为 ",[74,760,761],{},"bargain"," 特价商品",[51,764,765],{},[54,766,767],{},"这个比较简单，直接插入一张图片即可",[24,769,248],{},[67,771,772],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,773,774],{"__ignoreMap":72},[77,775,776,778,780,782,784,786,788,790,792,794,796,798],{"class":79,"line":80},[77,777,260],{"class":87},[77,779,40],{"class":158},[77,781,265],{"class":83},[77,783,268],{"class":87},[77,785,272],{"class":271},[77,787,275],{"class":83},[77,789,268],{"class":87},[77,791,280],{"class":271},[77,793,283],{"class":83},[77,795,268],{"class":87},[77,797,288],{"class":271},[77,799,291],{"class":87},[24,801,358],{},[67,803,804],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,805,806],{"__ignoreMap":72},[77,807,808,810,812,814,816,818,820,822,824,826,828,830],{"class":79,"line":80},[77,809,260],{"class":87},[77,811,40],{"class":158},[77,813,265],{"class":83},[77,815,268],{"class":87},[77,817,272],{"class":271},[77,819,275],{"class":83},[77,821,268],{"class":87},[77,823,280],{"class":271},[77,825,283],{"class":83},[77,827,268],{"class":87},[77,829,288],{"class":271},[77,831,291],{"class":87},[19,833,835],{"id":834},"_1612-推荐模块制作","16.1.2 推荐模块制作",[40,837],{"style":42,"src":838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[24,840,841,842,845],{},"大盒子 ",[74,843,844],{},"recom"," 推荐模块 recommend",[51,847,848],{},[54,849,850,851,853,854,857],{},"给这个 ",[74,852,844],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[74,855,856],{},"#ebebeb","），设置距离上边 12px",[24,859,248],{},[67,861,863],{"className":69,"code":862,"language":71,"meta":72,"style":72},"div {\n  background-color: #f0f0f0;\n}\n",[74,864,865,871,883],{"__ignoreMap":72},[77,866,867,869],{"class":79,"line":80},[77,868,331],{"class":158},[77,870,88],{"class":87},[77,872,873,876,878,881],{"class":79,"line":91},[77,874,875],{"class":94},"  background-color",[77,877,98],{"class":87},[77,879,880],{"class":94},"#f0f0f0",[77,882,104],{"class":87},[77,884,885],{"class":79,"line":107},[77,886,110],{"class":87},[24,888,358],{},[67,890,891],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,892,893,899,909],{"__ignoreMap":72},[77,894,895,897],{"class":79,"line":80},[77,896,331],{"class":158},[77,898,88],{"class":87},[77,900,901,903,905,907],{"class":79,"line":91},[77,902,875],{"class":94},[77,904,98],{"class":87},[77,906,880],{"class":94},[77,908,104],{"class":87},[77,910,911],{"class":79,"line":107},[77,912,110],{"class":87},[24,914,915],{},"里面包含 2 个盒子， 浮动即可",[24,917,248],{},[67,919,920],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,921,922,928,938],{"__ignoreMap":72},[77,923,924,926],{"class":79,"line":80},[77,925,84],{"class":83},[77,927,88],{"class":87},[77,929,930,932,934,936],{"class":79,"line":91},[77,931,95],{"class":94},[77,933,98],{"class":87},[77,935,101],{"class":94},[77,937,104],{"class":87},[77,939,940],{"class":79,"line":107},[77,941,110],{"class":87},[24,943,944,945],{},"1 号盒子 ",[74,946,947],{},"recom_hd",[51,949,950,953],{},[54,951,952],{},"设置宽度205px，高度163px",[54,954,403,955,957],{},[74,956,40],{},"标签，插入图片即可",[24,959,248],{},[67,961,962],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,963,964],{"__ignoreMap":72},[77,965,966,968,970,972,974,976,978,980,982,984,986,988],{"class":79,"line":80},[77,967,260],{"class":87},[77,969,40],{"class":158},[77,971,265],{"class":83},[77,973,268],{"class":87},[77,975,272],{"class":271},[77,977,275],{"class":83},[77,979,268],{"class":87},[77,981,280],{"class":271},[77,983,283],{"class":83},[77,985,268],{"class":87},[77,987,288],{"class":271},[77,989,291],{"class":87},[24,991,358],{},[67,993,994],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,995,996],{"__ignoreMap":72},[77,997,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020],{"class":79,"line":80},[77,999,260],{"class":87},[77,1001,40],{"class":158},[77,1003,265],{"class":83},[77,1005,268],{"class":87},[77,1007,272],{"class":271},[77,1009,275],{"class":83},[77,1011,268],{"class":87},[77,1013,280],{"class":271},[77,1015,283],{"class":83},[77,1017,268],{"class":87},[77,1019,288],{"class":271},[77,1021,291],{"class":87},[24,1023,1024,1025,1028],{},"2 号盒子 ",[74,1026,1027],{},"recom_bd"," ，注意里面的小竖线",[51,1030,1031,1042,1045,1050,1055],{},[54,1032,1033,1034,1036,1037,1039,1040],{},"右侧结构里面放 ",[74,1035,51],{}," 包含 4个 ",[74,1038,54],{},"，每个li里面包含一个",[74,1041,40],{},[54,1043,1044],{},"直接利用切片工具把里面的内容当成一张图片",[54,1046,653,1047,1049],{},[74,1048,54],{}," 设置浮动",[54,1051,653,1052,1054],{},[74,1053,40],{}," 设置宽高，宽度 248px，高度 163px",[54,1056,1057,1058,610,1061,1063,1064,1066,1067],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[74,1059,1060],{},"top 10px",[74,1062,54],{},"设置相对定位（注意，最后一个",[74,1065,54],{},"不用设置伪元素），可以利用 ",[74,1068,1069],{},"nth-child(-n+3){...}",[24,1071,248],{},[67,1073,1074],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,1075,1076,1084,1094,1104],{"__ignoreMap":72},[77,1077,1078,1080,1082],{"class":79,"line":80},[77,1079,331],{"class":158},[77,1081,432],{"class":83},[77,1083,88],{"class":87},[77,1085,1086,1088,1090,1092],{"class":79,"line":91},[77,1087,439],{"class":94},[77,1089,98],{"class":87},[77,1091,444],{"class":271},[77,1093,104],{"class":87},[77,1095,1096,1098,1100,1102],{"class":79,"line":107},[77,1097,451],{"class":94},[77,1099,98],{"class":87},[77,1101,456],{"class":94},[77,1103,104],{"class":87},[77,1105,1106],{"class":79,"line":191},[77,1107,110],{"class":87},[24,1109,358],{},[67,1111,1112],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,1113,1114,1122,1132,1142],{"__ignoreMap":72},[77,1115,1116,1118,1120],{"class":79,"line":80},[77,1117,331],{"class":158},[77,1119,432],{"class":83},[77,1121,88],{"class":87},[77,1123,1124,1126,1128,1130],{"class":79,"line":91},[77,1125,439],{"class":94},[77,1127,98],{"class":87},[77,1129,444],{"class":271},[77,1131,104],{"class":87},[77,1133,1134,1136,1138,1140],{"class":79,"line":107},[77,1135,451],{"class":94},[77,1137,98],{"class":87},[77,1139,456],{"class":94},[77,1141,104],{"class":87},[77,1143,1144],{"class":79,"line":191},[77,1145,110],{"class":87},[19,1147,1149],{"id":1148},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[40,1151],{"style":42,"src":1152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[24,1154,1155],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[24,1157,1158],{},"第一楼是家用电器模块： 里面包含两个盒子",[24,1160,1161,1164],{},[74,1162,1163],{},"box_hd"," 制作",[24,1166,944,1167,1169],{},[74,1168,1163],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[40,1171],{"style":42,"src":1172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[51,1174,1175,1180,1186,1189],{},[54,1176,1177,1179],{},[74,1178,1163],{}," 给 30px 的高度，2个像素的下边框",[54,1181,1182,1183],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[74,1184,1185],{},"ul > li > a",[54,1187,1188],{},"左侧盒左浮动，右侧盒子右浮动",[54,1190,1191,1193,1194,1197],{},[74,1192,417],{},"标签之间的距离用左右的",[74,1195,1196],{},"padding","撑开即可",[24,1199,1200],{},"结构代码",[67,1202,1203],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,1204,1205,1211,1221],{"__ignoreMap":72},[77,1206,1207,1209],{"class":79,"line":80},[77,1208,84],{"class":83},[77,1210,88],{"class":87},[77,1212,1213,1215,1217,1219],{"class":79,"line":91},[77,1214,95],{"class":94},[77,1216,98],{"class":87},[77,1218,101],{"class":94},[77,1220,104],{"class":87},[77,1222,1223],{"class":79,"line":107},[77,1224,110],{"class":87},[24,1226,1227],{},"样式代码",[67,1229,1230],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,1231,1232,1238,1248],{"__ignoreMap":72},[77,1233,1234,1236],{"class":79,"line":80},[77,1235,84],{"class":83},[77,1237,88],{"class":87},[77,1239,1240,1242,1244,1246],{"class":79,"line":91},[77,1241,95],{"class":94},[77,1243,98],{"class":87},[77,1245,101],{"class":94},[77,1247,104],{"class":87},[77,1249,1250],{"class":79,"line":107},[77,1251,110],{"class":87},[24,1253,1254,1164],{},[74,1255,1256],{},"box_bd",[24,1258,1259],{},"2 号盒子 box_bd，不要给高度",[40,1261],{"style":42,"src":1262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[24,1264,1265],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[24,1267,1268],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[24,1270,1271],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[51,1273,1274,1286,1302],{},[54,1275,1276,1278,1279,1282,1283,1285],{},[74,1277,1256],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[74,1280,1281],{},"tab_content","，在",[74,1284,1281],{}," 里面包裹tab选项卡对应的内容",[54,1287,1288,1289,1292,1293,1295,1296,1298,1299,1301],{},"内容被一个大盒子包裹（",[74,1290,1291],{},"tab_list_item","），里面是 ",[74,1294,51],{}," 包裹 5个 ",[74,1297,54],{},"，每个",[74,1300,54],{},"设置对应的宽度，然后设置浮动",[54,1303,1304,1305,1307,1308,1310,1311],{},"而这5个",[74,1306,54],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[74,1309,54],{},"设置",[51,1312,1313,1331,1334],{},[54,1314,1315,1316,1318,1319,1321,1322,1324,1325,1327,1328,1330],{},"第一个小 ",[74,1317,54],{}," 分为上下结构，上面是 ",[74,1320,51],{}," 包裹 ",[74,1323,54],{}," ，",[74,1326,54],{},"里面包裹 ",[74,1329,417],{},"，下面插入一张图片",[54,1332,1333],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[54,1335,1336,1337,1339,1340,1342,1343,1345],{},"后面的小 ",[74,1338,54],{}," 里面先放一个",[74,1341,417],{},"标签，然后在",[74,1344,417],{},"标签里面插入图片即可",[24,1347,1200],{},[67,1349,1350],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,1351,1352],{"__ignoreMap":72},[77,1353,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376],{"class":79,"line":80},[77,1355,260],{"class":87},[77,1357,40],{"class":158},[77,1359,265],{"class":83},[77,1361,268],{"class":87},[77,1363,272],{"class":271},[77,1365,275],{"class":83},[77,1367,268],{"class":87},[77,1369,280],{"class":271},[77,1371,283],{"class":83},[77,1373,268],{"class":87},[77,1375,288],{"class":271},[77,1377,291],{"class":87},[24,1379,1227],{},[67,1381,1382],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,1383,1384],{"__ignoreMap":72},[77,1385,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408],{"class":79,"line":80},[77,1387,260],{"class":87},[77,1389,40],{"class":158},[77,1391,265],{"class":83},[77,1393,268],{"class":87},[77,1395,272],{"class":271},[77,1397,275],{"class":83},[77,1399,268],{"class":87},[77,1401,280],{"class":271},[77,1403,283],{"class":83},[77,1405,268],{"class":87},[77,1407,288],{"class":271},[77,1409,291],{"class":87},[24,1411,1412],{},"tab栏切换需求！！！！！！介绍：",[40,1414],{"style":42,"src":1415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[51,1417,1418,1426,1432,1435],{},[54,1419,1420,1423,1424],{},[74,1421,1422],{},"tab","栏的布局是 ",[74,1425,1185],{},[54,1427,1428,1429,1431],{},"有多少个",[74,1430,1422],{},"选项卡，那么对应就有多少个内容",[54,1433,1434],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[54,1436,1437,1438,1441,1442,1444,1445,1447],{},"等后面我们学习了",[74,1439,1440],{},"js","之后，我们就会配合",[74,1443,1440],{},"来实现，",[74,1446,1422],{},"栏的切换",[14,1449,1451],{"id":1450},"_162-列表制作","16.2 列表制作",[19,1453,1455],{"id":1454},"_1621-准备工作","16.2.1 准备工作",[51,1457,1458,1461,1464,1467],{},[54,1459,1460],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[54,1462,1463],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[54,1465,1466],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[54,1468,1469],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[19,1471,1473,1474,513,1477,1480],{"id":1472},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[74,1475,1476],{},"header",[74,1478,1479],{},"nav"," 修改",[40,1482],{"style":42,"src":1483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[51,1485,1486],{},[54,1487,1488],{},"秒杀盒子 sk（ second kill ） 定位即可",[24,1490,248],{},[67,1492,1494],{"className":69,"code":1493,"language":71,"meta":72,"style":72},"\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",[74,1495,1496,1501,1520,1525,1541,1547,1564,1570,1587,1593],{"__ignoreMap":72},[77,1497,1498],{"class":79,"line":80},[77,1499,1500],{"class":323},"\u002F* 静态定位（默认） *\u002F\n",[77,1502,1503,1506,1509,1512,1514,1517],{"class":79,"line":91},[77,1504,1505],{"class":83},".static",[77,1507,1508],{"class":87}," { ",[77,1510,1511],{"class":94},"position",[77,1513,98],{"class":87},[77,1515,1516],{"class":94},"static",[77,1518,1519],{"class":87},"; }\n",[77,1521,1522],{"class":79,"line":107},[77,1523,1524],{"class":323},"\u002F* 相对定位 *\u002F\n",[77,1526,1527,1530,1532,1534,1536,1539],{"class":79,"line":191},[77,1528,1529],{"class":83},".relative",[77,1531,1508],{"class":87},[77,1533,1511],{"class":94},[77,1535,98],{"class":87},[77,1537,1538],{"class":94},"relative",[77,1540,1519],{"class":87},[77,1542,1544],{"class":79,"line":1543},5,[77,1545,1546],{"class":323},"\u002F* 绝对定位 *\u002F\n",[77,1548,1550,1553,1555,1557,1559,1562],{"class":79,"line":1549},6,[77,1551,1552],{"class":83},".absolute",[77,1554,1508],{"class":87},[77,1556,1511],{"class":94},[77,1558,98],{"class":87},[77,1560,1561],{"class":94},"absolute",[77,1563,1519],{"class":87},[77,1565,1567],{"class":79,"line":1566},7,[77,1568,1569],{"class":323},"\u002F* 固定定位 *\u002F\n",[77,1571,1573,1576,1578,1580,1582,1585],{"class":79,"line":1572},8,[77,1574,1575],{"class":83},".fixed",[77,1577,1508],{"class":87},[77,1579,1511],{"class":94},[77,1581,98],{"class":87},[77,1583,1584],{"class":94},"fixed",[77,1586,1519],{"class":87},[77,1588,1590],{"class":79,"line":1589},9,[77,1591,1592],{"class":323},"\u002F* 粘性定位 *\u002F\n",[77,1594,1596,1599,1601,1603,1605,1608],{"class":79,"line":1595},10,[77,1597,1598],{"class":83},".sticky",[77,1600,1508],{"class":87},[77,1602,1511],{"class":94},[77,1604,98],{"class":87},[77,1606,1607],{"class":94},"sticky",[77,1609,1519],{"class":87},[24,1611,358],{},[67,1613,1614],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,1615,1616,1620,1634,1638,1652,1656,1670,1674,1688,1692],{"__ignoreMap":72},[77,1617,1618],{"class":79,"line":80},[77,1619,1500],{"class":323},[77,1621,1622,1624,1626,1628,1630,1632],{"class":79,"line":91},[77,1623,1505],{"class":83},[77,1625,1508],{"class":87},[77,1627,1511],{"class":94},[77,1629,98],{"class":87},[77,1631,1516],{"class":94},[77,1633,1519],{"class":87},[77,1635,1636],{"class":79,"line":107},[77,1637,1524],{"class":323},[77,1639,1640,1642,1644,1646,1648,1650],{"class":79,"line":191},[77,1641,1529],{"class":83},[77,1643,1508],{"class":87},[77,1645,1511],{"class":94},[77,1647,98],{"class":87},[77,1649,1538],{"class":94},[77,1651,1519],{"class":87},[77,1653,1654],{"class":79,"line":1543},[77,1655,1546],{"class":323},[77,1657,1658,1660,1662,1664,1666,1668],{"class":79,"line":1549},[77,1659,1552],{"class":83},[77,1661,1508],{"class":87},[77,1663,1511],{"class":94},[77,1665,98],{"class":87},[77,1667,1561],{"class":94},[77,1669,1519],{"class":87},[77,1671,1672],{"class":79,"line":1566},[77,1673,1569],{"class":323},[77,1675,1676,1678,1680,1682,1684,1686],{"class":79,"line":1572},[77,1677,1575],{"class":83},[77,1679,1508],{"class":87},[77,1681,1511],{"class":94},[77,1683,98],{"class":87},[77,1685,1584],{"class":94},[77,1687,1519],{"class":87},[77,1689,1690],{"class":79,"line":1589},[77,1691,1592],{"class":323},[77,1693,1694,1696,1698,1700,1702,1704],{"class":79,"line":1595},[77,1695,1598],{"class":83},[77,1697,1508],{"class":87},[77,1699,1511],{"class":94},[77,1701,98],{"class":87},[77,1703,1607],{"class":94},[77,1705,1519],{"class":87},[51,1707,1708,1719],{},[54,1709,1710,1711,1714,1715,513,1717],{},"1 号盒子左侧浮动 ",[74,1712,1713],{},"sk_list"," 里面包含 ",[74,1716,51],{},[74,1718,54],{},[54,1720,1721,1722,1714,1725,513,1727],{},"2 号盒子左侧浮动 ",[74,1723,1724],{},"sk_con",[74,1726,51],{},[74,1728,54],{},[24,1730,248],{},[67,1732,1733],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,1734,1735,1741,1751],{"__ignoreMap":72},[77,1736,1737,1739],{"class":79,"line":80},[77,1738,84],{"class":83},[77,1740,88],{"class":87},[77,1742,1743,1745,1747,1749],{"class":79,"line":91},[77,1744,95],{"class":94},[77,1746,98],{"class":87},[77,1748,101],{"class":94},[77,1750,104],{"class":87},[77,1752,1753],{"class":79,"line":107},[77,1754,110],{"class":87},[24,1756,358],{},[67,1758,1759],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,1760,1761,1767,1777],{"__ignoreMap":72},[77,1762,1763,1765],{"class":79,"line":80},[77,1764,84],{"class":83},[77,1766,88],{"class":87},[77,1768,1769,1771,1773,1775],{"class":79,"line":91},[77,1770,95],{"class":94},[77,1772,98],{"class":87},[77,1774,101],{"class":94},[77,1776,104],{"class":87},[77,1778,1779],{"class":79,"line":107},[77,1780,110],{"class":87},[19,1782,1784,1785],{"id":1783},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[74,1786,1787],{},"sk_container",[40,1789],{"style":42,"src":1790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[51,1792,1793,1798],{},[54,1794,944,1795,1797],{},[74,1796,1787],{}," 给宽度 1200，不要给高度",[54,1799,1800],{},"一定不要忘记清除浮动",[24,1802,248],{},[67,1804,1805],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,1806,1807,1813,1823],{"__ignoreMap":72},[77,1808,1809,1811],{"class":79,"line":80},[77,1810,84],{"class":83},[77,1812,88],{"class":87},[77,1814,1815,1817,1819,1821],{"class":79,"line":91},[77,1816,95],{"class":94},[77,1818,98],{"class":87},[77,1820,101],{"class":94},[77,1822,104],{"class":87},[77,1824,1825],{"class":79,"line":107},[77,1826,110],{"class":87},[139,1828,1829],{},[54,1830,1831],{},"sk_hd制作",[51,1833,1834],{},[54,1835,1024,1836,1839],{},[74,1837,1838],{},"sk_hd"," ，插入图片即可",[24,1841,248],{},[67,1843,1844],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,1845,1846],{"__ignoreMap":72},[77,1847,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868,1870],{"class":79,"line":80},[77,1849,260],{"class":87},[77,1851,40],{"class":158},[77,1853,265],{"class":83},[77,1855,268],{"class":87},[77,1857,272],{"class":271},[77,1859,275],{"class":83},[77,1861,268],{"class":87},[77,1863,280],{"class":271},[77,1865,283],{"class":83},[77,1867,268],{"class":87},[77,1869,288],{"class":271},[77,1871,291],{"class":87},[139,1873,1874],{"start":91},[54,1875,1876],{},"sk_bd制作",[51,1878,1879],{},[54,1880,1881,1882,1885,1886,513,1888,1890],{},"3 号盒子 ",[74,1883,1884],{},"sk_bd"," ，里面包含很多的 ",[74,1887,51],{},[74,1889,54],{},[51,1891,1892,1901],{},[54,1893,1894,1895,1897,1898,1900],{},"当鼠标移入到 ",[74,1896,54],{}," 上面的时候显示红色的边框，在这里先给 ",[74,1899,54],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[54,1902,1903,1904,1906,1907,1909,1910,1913,1914,1916],{},"由于给每个 ",[74,1905,54],{}," 都设置了外边距，导致一行的最后一个 ",[74,1908,54],{}," 掉了下来，在这里我们利用 ",[74,1911,1912],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[74,1915,54],{},"，去掉外边距就好了",[24,1918,248],{},[67,1920,1922],{"className":69,"code":1921,"language":71,"meta":72,"style":72},"div {\n  margin: 0 auto;\n}\n",[74,1923,1924,1930,1945],{"__ignoreMap":72},[77,1925,1926,1928],{"class":79,"line":80},[77,1927,331],{"class":158},[77,1929,88],{"class":87},[77,1931,1932,1935,1937,1940,1943],{"class":79,"line":91},[77,1933,1934],{"class":94},"  margin",[77,1936,98],{"class":87},[77,1938,1939],{"class":94},"0",[77,1941,1942],{"class":94}," auto",[77,1944,104],{"class":87},[77,1946,1947],{"class":79,"line":107},[77,1948,110],{"class":87},[24,1950,358],{},[67,1952,1953],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,1954,1955,1961,1973],{"__ignoreMap":72},[77,1956,1957,1959],{"class":79,"line":80},[77,1958,331],{"class":158},[77,1960,88],{"class":87},[77,1962,1963,1965,1967,1969,1971],{"class":79,"line":91},[77,1964,1934],{"class":94},[77,1966,98],{"class":87},[77,1968,1939],{"class":94},[77,1970,1942],{"class":94},[77,1972,104],{"class":87},[77,1974,1975],{"class":79,"line":107},[77,1976,110],{"class":87},[14,1978,1980],{"id":1979},"_163-注册页面制作","16.3 注册页面制作",[40,1982],{"style":42,"src":1983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[24,1985,1986,1989],{},[27,1987,1988],{},"注意："," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[40,1991],{"style":42,"src":1992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[19,1994,1996],{"id":1995},"_1631-准备工作","16.3.1 准备工作",[51,1998,1999,2002],{},[54,2000,2001],{},"创建register.html，引入 base.css，引入favicon图标",[54,2003,2004],{},"创建register.css ，在html页面进行引入",[19,2006,2008,2009,2011],{"id":2007},"_1632-header-头部实现","16.3.2 ",[74,2010,1476],{}," 头部实现",[51,2013,2014,2017],{},[54,2015,2016],{},"整个内容用 版心 进行包裹",[54,2018,2019],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[24,2021,248],{},[67,2023,2024],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,2025,2026],{"__ignoreMap":72},[77,2027,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050],{"class":79,"line":80},[77,2029,260],{"class":87},[77,2031,40],{"class":158},[77,2033,265],{"class":83},[77,2035,268],{"class":87},[77,2037,272],{"class":271},[77,2039,275],{"class":83},[77,2041,268],{"class":87},[77,2043,280],{"class":271},[77,2045,283],{"class":83},[77,2047,268],{"class":87},[77,2049,288],{"class":271},[77,2051,291],{"class":87},[24,2053,358],{},[67,2055,2056],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,2057,2058],{"__ignoreMap":72},[77,2059,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082],{"class":79,"line":80},[77,2061,260],{"class":87},[77,2063,40],{"class":158},[77,2065,265],{"class":83},[77,2067,268],{"class":87},[77,2069,272],{"class":271},[77,2071,275],{"class":83},[77,2073,268],{"class":87},[77,2075,280],{"class":271},[77,2077,283],{"class":83},[77,2079,268],{"class":87},[77,2081,288],{"class":271},[77,2083,291],{"class":87},[19,2085,2087,2088,2091],{"id":2086},"_1633-registerarea-主体模块实现","16.3.3 ",[74,2089,2090],{},"registerarea"," 主体模块实现",[40,2093],{"style":42,"src":2094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[24,2096,2097],{},"整个大盒子 高度为 522px，设置4个边框",[24,2099,248],{},[67,2101,2103],{"className":69,"code":2102,"language":71,"meta":72,"style":72},"div {\n  border: 1px solid #ccc;\n}\n",[74,2104,2105,2111,2133],{"__ignoreMap":72},[77,2106,2107,2109],{"class":79,"line":80},[77,2108,331],{"class":158},[77,2110,88],{"class":87},[77,2112,2113,2116,2118,2121,2125,2128,2131],{"class":79,"line":91},[77,2114,2115],{"class":94},"  border",[77,2117,98],{"class":87},[77,2119,2120],{"class":94},"1",[77,2122,2124],{"class":2123},"szBVR","px",[77,2126,2127],{"class":94}," solid",[77,2129,2130],{"class":94}," #ccc",[77,2132,104],{"class":87},[77,2134,2135],{"class":79,"line":107},[77,2136,110],{"class":87},[24,2138,358],{},[67,2140,2141],{"className":69,"code":2102,"language":71,"meta":72,"style":72},[74,2142,2143,2149,2165],{"__ignoreMap":72},[77,2144,2145,2147],{"class":79,"line":80},[77,2146,331],{"class":158},[77,2148,88],{"class":87},[77,2150,2151,2153,2155,2157,2159,2161,2163],{"class":79,"line":91},[77,2152,2115],{"class":94},[77,2154,98],{"class":87},[77,2156,2120],{"class":94},[77,2158,2124],{"class":2123},[77,2160,2127],{"class":94},[77,2162,2130],{"class":94},[77,2164,104],{"class":87},[77,2166,2167],{"class":79,"line":107},[77,2168,110],{"class":87},[24,2170,2171],{},"1号盒子 是一个 h3 标签，放标题",[51,2173,2174],{},[54,2175,2176],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[24,2178,248],{},[67,2180,2181],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,2182,2183,2189,2199],{"__ignoreMap":72},[77,2184,2185,2187],{"class":79,"line":80},[77,2186,84],{"class":83},[77,2188,88],{"class":87},[77,2190,2191,2193,2195,2197],{"class":79,"line":91},[77,2192,95],{"class":94},[77,2194,98],{"class":87},[77,2196,101],{"class":94},[77,2198,104],{"class":87},[77,2200,2201],{"class":79,"line":107},[77,2202,110],{"class":87},[24,2204,358],{},[67,2206,2207],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,2208,2209,2215,2225],{"__ignoreMap":72},[77,2210,2211,2213],{"class":79,"line":80},[77,2212,84],{"class":83},[77,2214,88],{"class":87},[77,2216,2217,2219,2221,2223],{"class":79,"line":91},[77,2218,95],{"class":94},[77,2220,98],{"class":87},[77,2222,101],{"class":94},[77,2224,104],{"class":87},[77,2226,2227],{"class":79,"line":107},[77,2228,110],{"class":87},[24,2230,2231],{},"2号盒子 里面放注册的内容",[51,2233,2234,2237,2246,2262,2275,2278,2281,2299,2313],{},[54,2235,2236],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[54,2238,2239,2240,2242,2243,2245],{},"里面的内容利用 ",[74,2241,51],{}," 包含 ",[74,2244,54],{}," 来实现的（不需要用表格）",[54,2247,2248,2249,2251,2252,2255,2256,2258,2259,2261],{},"每个 ",[74,2250,54],{}," 里面，左侧放 ",[74,2253,2254],{},"label"," 标签， 中间放",[74,2257,159],{}," 标签， 右侧放 ",[74,2260,77],{}," 提示信息",[54,2263,2264,2265,2267,2268,2270,2271,2274],{},"左侧 ",[74,2266,2254],{},"里面的文字都是右对齐，我们可以给",[74,2269,2254],{},"设置一个宽度（88px），然后利用",[74,2272,2273],{},"text-align"," 来设置右对齐",[54,2276,2277],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[54,2279,2280],{},"右侧 span修饰一下文字颜色",[54,2282,2283,2284],{},"提示信息的样式优化",[51,2285,2286,2289,2292],{},[54,2287,2288],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[54,2290,2291],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[54,2293,2294,2295,2298],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[74,2296,2297],{},"vertical-algin"," 来设置 图片与文字对齐方式",[54,2300,2301,2302],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[51,2303,2304,2310],{},[54,2305,2306,2307,2309],{},"设置 ",[74,2308,687],{}," 的 左右 12px 的内边距，设置一下文字颜色",[54,2311,2312],{},"分别设置 背景颜色",[54,2314,2315,2316,2318],{},"同意协议 和 完成注册 都是用 ",[74,2317,54],{}," 进行包裹",[24,2320,248],{},[67,2322,2323],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,2324,2325,2331,2341],{"__ignoreMap":72},[77,2326,2327,2329],{"class":79,"line":80},[77,2328,331],{"class":158},[77,2330,88],{"class":87},[77,2332,2333,2335,2337,2339],{"class":79,"line":91},[77,2334,875],{"class":94},[77,2336,98],{"class":87},[77,2338,880],{"class":94},[77,2340,104],{"class":87},[77,2342,2343],{"class":79,"line":107},[77,2344,110],{"class":87},[24,2346,358],{},[67,2348,2349],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,2350,2351,2357,2367],{"__ignoreMap":72},[77,2352,2353,2355],{"class":79,"line":80},[77,2354,331],{"class":158},[77,2356,88],{"class":87},[77,2358,2359,2361,2363,2365],{"class":79,"line":91},[77,2360,875],{"class":94},[77,2362,98],{"class":87},[77,2364,880],{"class":94},[77,2366,104],{"class":87},[77,2368,2369],{"class":79,"line":107},[77,2370,110],{"class":87},[19,2372,2374],{"id":2373},"_1634-底部实现","16.3.4 底部实现",[24,2376,248],{},[67,2378,2379],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,2380,2381,2387,2397],{"__ignoreMap":72},[77,2382,2383,2385],{"class":79,"line":80},[77,2384,331],{"class":158},[77,2386,88],{"class":87},[77,2388,2389,2391,2393,2395],{"class":79,"line":91},[77,2390,875],{"class":94},[77,2392,98],{"class":87},[77,2394,880],{"class":94},[77,2396,104],{"class":87},[77,2398,2399],{"class":79,"line":107},[77,2400,110],{"class":87},[24,2402,358],{},[67,2404,2405],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,2406,2407,2411,2425,2429],{"__ignoreMap":72},[77,2408,2409],{"class":79,"line":80},[77,2410,324],{"class":323},[77,2412,2413,2415,2417,2419,2421,2423],{"class":79,"line":91},[77,2414,260],{"class":87},[77,2416,331],{"class":158},[77,2418,334],{"class":83},[77,2420,268],{"class":87},[77,2422,339],{"class":271},[77,2424,291],{"class":87},[77,2426,2427],{"class":79,"line":107},[77,2428,346],{"class":87},[77,2430,2431,2433,2435],{"class":79,"line":191},[77,2432,351],{"class":87},[77,2434,331],{"class":158},[77,2436,291],{"class":87},[14,2438,2440],{"id":2439},"_164-项目总结","16.4 项目总结",[139,2442,2443,2446,2449,2452],{},[54,2444,2445],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[54,2447,2448],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[54,2450,2451],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[54,2453,2454],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[40,2456],{"style":42,"src":2457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[139,2459,2460],{"start":1543},[54,2461,2462],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[40,2464],{"style":42,"src":2465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[139,2467,2468],{"start":1549},[54,2469,2470],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[40,2472],{"style":42,"src":2473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[67,2475,2477],{"className":251,"code":2476,"language":253,"meta":72,"style":72},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[74,2478,2479],{"__ignoreMap":72},[77,2480,2481,2483,2485,2488,2490,2493,2496,2498,2501,2504,2506,2509],{"class":79,"line":80},[77,2482,260],{"class":87},[77,2484,159],{"class":158},[77,2486,2487],{"class":83}," type",[77,2489,268],{"class":87},[77,2491,2492],{"class":271},"\"text\"",[77,2494,2495],{"class":83}," name",[77,2497,268],{"class":87},[77,2499,2500],{"class":271},"\"username\"",[77,2502,2503],{"class":83}," placeholder",[77,2505,268],{"class":87},[77,2507,2508],{"class":271},"\"请输入用户名\"",[77,2510,291],{"class":87},[139,2512,2513,2516],{"start":1566},[54,2514,2515],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[54,2517,2518],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2520,2521,2522],"style",{},"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":72,"searchDepth":91,"depth":91,"links":2524},[2525,2530,2537,2545],{"id":16,"depth":91,"text":17,"children":2526},[2527,2528,2529],{"id":21,"depth":107,"text":22},{"id":834,"depth":107,"text":835},{"id":1148,"depth":107,"text":1149},{"id":1450,"depth":91,"text":1451,"children":2531},[2532,2533,2535],{"id":1454,"depth":107,"text":1455},{"id":1472,"depth":107,"text":2534},"16.2.2 列表页 header 和 nav 修改",{"id":1783,"depth":107,"text":2536},"16.2.3 列表页主体 sk_container",{"id":1979,"depth":91,"text":1980,"children":2538},[2539,2540,2542,2544],{"id":1995,"depth":107,"text":1996},{"id":2007,"depth":107,"text":2541},"16.3.2 header 头部实现",{"id":2086,"depth":107,"text":2543},"16.3.3 registerarea 主体模块实现",{"id":2373,"depth":107,"text":2374},{"id":2439,"depth":91,"text":2440},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":5,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",[2555,7637,8745,10164,13152,14503,15991,17080,25840,25852,26449,26475,26599,26840,26905,26923,26936,26983,27107,27276,27475,27655,27860,27996,28091,28128,28141,28451,29192,29900,29921,30941,32572,32723,32736,32748,33049,52859,52874,52891,52924,55788,79116,95259,95280,95393,95514,96284,96947,97308,97346,97452,97552,97595,97621,97682,99336,99437,99462,99953,100453,101533,101816,102558,103060,103072,105086,106749,108252,109950,111867,113786,115808,119277,119709,120172,120921,123865,124213,124235,124591,127898,127910,128313,128336,128483,128650,128854,129153,129710,130363,132290,133879,134514,136008,137434,138669,140358,142100,144230,144346,145281,145492,146377,147612,147840,147853,149008,151420,153788,157109,159586,161230,163007,165020,168072,170252,172779,174973],{"id":2556,"title":2557,"body":2558,"description":72,"extension":2547,"meta":7632,"navigation":2549,"path":7633,"seo":7634,"stem":7635,"__hash__":7636},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2559,"toc":7604},[2560,2563,2567,2570,2574,2585,2589,2593,2596,2599,2602,2605,2608,2636,2640,2643,2646,2649,2652,2702,2706,2724,2726,2740,2743,2751,2754,3611,3618,3634,3638,3724,3728,3734,3819,3823,3861,3865,3929,3933,3937,3943,3954,3958,3963,3967,3972,3976,3981,3985,3989,3994,4263,4268,4406,4411,4667,4670,4678,4682,4687,4790,4793,5099,5108,5209,5212,5215,5218,5221,5481,5486,5626,5629,5808,5811,5939,5942,6094,6098,6103,6106,6117,6125,6128,6235,6239,6243,6248,6298,6303,6308,6332,6337,6390,6393,6398,6575,6580,6865,6870,7267,7271,7276,7333,7338,7346,7349,7489,7492,7601],[10,2561,2557],{"id":2562},"_1基础入门",[14,2564,2566],{"id":2565},"_11注释","1.1注释",[24,2568,2569],{},"\u002F\u002F或者\u002F* *\u002F",[14,2571,2573],{"id":2572},"_12命名","1.2命名",[139,2575,2576,2579,2582],{},[54,2577,2578],{},"字母数字下划线",[54,2580,2581],{},"开头必须是字母或_",[54,2583,2584],{},"不能使用关键词",[14,2586,2588],{"id":2587},"_13数据类型","1.3数据类型",[19,2590,2592],{"id":2591},"_131整形","1.3.1整形",[24,2594,2595],{},"short 短整形 2",[24,2597,2598],{},"int 整形 4",[24,2600,2601],{},"long 长整形 win4 linux32位4 linux64位8",[24,2603,2604],{},"long long 长长整形 8",[24,2606,2607],{},"利用sizeof可以求数据类型占用的内存空间大小",[67,2609,2613],{"className":2610,"code":2611,"language":2612,"meta":72,"style":72},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[74,2614,2615,2629],{"__ignoreMap":72},[77,2616,2617,2620,2623,2626],{"class":79,"line":80},[77,2618,2619],{"class":2123},"sizeof",[77,2621,2622],{"class":87},"(",[77,2624,2625],{"class":2123},"int",[77,2627,2628],{"class":87},")\n",[77,2630,2631,2633],{"class":79,"line":91},[77,2632,2619],{"class":2123},[77,2634,2635],{"class":87},"(num)\n",[19,2637,2639],{"id":2638},"_132浮点型","1.3.2浮点型",[24,2641,2642],{},"float 单精度 4节 7位有效数字",[24,2644,2645],{},"double 双精度 8节 15-16有效数字",[24,2647,2648],{},"默认情况下，输出一个小数，会显示6位有效数字",[24,2650,2651],{},"注意点：",[67,2653,2655],{"className":2610,"code":2654,"language":2612,"meta":72,"style":72},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[74,2656,2657,2679],{"__ignoreMap":72},[77,2658,2659,2662,2665,2667,2670,2673,2676],{"class":79,"line":80},[77,2660,2661],{"class":2123},"float",[77,2663,2664],{"class":87}," f1",[77,2666,268],{"class":2123},[77,2668,2669],{"class":94},"3.14",[77,2671,2672],{"class":2123},"f",[77,2674,2675],{"class":87},";",[77,2677,2678],{"class":323}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[77,2680,2681,2683,2686,2688,2691,2694,2697,2699],{"class":79,"line":91},[77,2682,2661],{"class":2123},[77,2684,2685],{"class":87}," f2",[77,2687,268],{"class":2123},[77,2689,2690],{"class":94},"3",[77,2692,2693],{"class":2123},"e",[77,2695,2696],{"class":94},"2",[77,2698,2675],{"class":87},[77,2700,2701],{"class":323}," \u002F\u002F科学记数法\n",[19,2703,2705],{"id":2704},"_133字符型","1.3.3字符型",[67,2707,2709],{"className":2610,"code":2708,"language":2612,"meta":72,"style":72},"char ch='a'\n",[74,2710,2711],{"__ignoreMap":72},[77,2712,2713,2716,2719,2721],{"class":79,"line":80},[77,2714,2715],{"class":2123},"char",[77,2717,2718],{"class":87}," ch",[77,2720,268],{"class":2123},[77,2722,2723],{"class":271},"'a'\n",[24,2725,2651],{},[139,2727,2728,2731,2734,2737],{},[54,2729,2730],{},"在显示字符型变量时，只能单引号，双引号x",[54,2732,2733],{},"单引号内只能一个字符，不能字符串",[54,2735,2736],{},"c和c++字符型变量只占用一个字符",[54,2738,2739],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[24,2741,2742],{},"ASCII码大致由以下两部分组成：",[139,2744,2745,2748],{},[54,2746,2747],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[54,2749,2750],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[24,2752,2753],{},"ASCII码表格：",[2755,2756,2757,2800],"table",{},[2758,2759,2760],"thead",{},[2761,2762,2763,2770,2775,2779,2784,2788,2792,2796],"tr",{},[2764,2765,2766,2769],"th",{},[27,2767,2768],{},"ASCII","值",[2764,2771,2772],{},[27,2773,2774],{},"控制字符",[2764,2776,2777,2769],{},[27,2778,2768],{},[2764,2780,2781],{},[27,2782,2783],{},"字符",[2764,2785,2786,2769],{},[27,2787,2768],{},[2764,2789,2790],{},[27,2791,2783],{},[2764,2793,2794,2769],{},[27,2795,2768],{},[2764,2797,2798],{},[27,2799,2783],{},[2801,2802,2803,2829,2853,2878,2903,2929,2954,2979,3005,3030,3055,3081,3107,3132,3158,3184,3210,3234,3259,3284,3309,3334,3359,3384,3409,3434,3459,3485,3510,3534,3559,3585],"tbody",{},[2761,2804,2805,2808,2811,2814,2817,2820,2823,2826],{},[2806,2807,1939],"td",{},[2806,2809,2810],{},"NUT",[2806,2812,2813],{},"32",[2806,2815,2816],{},"(space)",[2806,2818,2819],{},"64",[2806,2821,2822],{},"@",[2806,2824,2825],{},"96",[2806,2827,2828],{},"、",[2761,2830,2831,2833,2836,2839,2842,2845,2848,2851],{},[2806,2832,2120],{},[2806,2834,2835],{},"SOH",[2806,2837,2838],{},"33",[2806,2840,2841],{},"!",[2806,2843,2844],{},"65",[2806,2846,2847],{},"A",[2806,2849,2850],{},"97",[2806,2852,417],{},[2761,2854,2855,2857,2860,2863,2866,2869,2872,2875],{},[2806,2856,2696],{},[2806,2858,2859],{},"STX",[2806,2861,2862],{},"34",[2806,2864,2865],{},"\"",[2806,2867,2868],{},"66",[2806,2870,2871],{},"B",[2806,2873,2874],{},"98",[2806,2876,2877],{},"b",[2761,2879,2880,2882,2885,2888,2891,2894,2897,2900],{},[2806,2881,2690],{},[2806,2883,2884],{},"ETX",[2806,2886,2887],{},"35",[2806,2889,2890],{},"#",[2806,2892,2893],{},"67",[2806,2895,2896],{},"C",[2806,2898,2899],{},"99",[2806,2901,2902],{},"c",[2761,2904,2905,2908,2911,2914,2917,2920,2923,2926],{},[2806,2906,2907],{},"4",[2806,2909,2910],{},"EOT",[2806,2912,2913],{},"36",[2806,2915,2916],{},"$",[2806,2918,2919],{},"68",[2806,2921,2922],{},"D",[2806,2924,2925],{},"100",[2806,2927,2928],{},"d",[2761,2930,2931,2934,2937,2940,2943,2946,2949,2952],{},[2806,2932,2933],{},"5",[2806,2935,2936],{},"ENQ",[2806,2938,2939],{},"37",[2806,2941,2942],{},"%",[2806,2944,2945],{},"69",[2806,2947,2948],{},"E",[2806,2950,2951],{},"101",[2806,2953,2693],{},[2761,2955,2956,2959,2962,2965,2968,2971,2974,2977],{},[2806,2957,2958],{},"6",[2806,2960,2961],{},"ACK",[2806,2963,2964],{},"38",[2806,2966,2967],{},"&",[2806,2969,2970],{},"70",[2806,2972,2973],{},"F",[2806,2975,2976],{},"102",[2806,2978,2672],{},[2761,2980,2981,2984,2987,2990,2993,2996,2999,3002],{},[2806,2982,2983],{},"7",[2806,2985,2986],{},"BEL",[2806,2988,2989],{},"39",[2806,2991,2992],{},",",[2806,2994,2995],{},"71",[2806,2997,2998],{},"G",[2806,3000,3001],{},"103",[2806,3003,3004],{},"g",[2761,3006,3007,3010,3013,3016,3018,3021,3024,3027],{},[2806,3008,3009],{},"8",[2806,3011,3012],{},"BS",[2806,3014,3015],{},"40",[2806,3017,2622],{},[2806,3019,3020],{},"72",[2806,3022,3023],{},"H",[2806,3025,3026],{},"104",[2806,3028,3029],{},"h",[2761,3031,3032,3035,3038,3041,3044,3047,3050,3053],{},[2806,3033,3034],{},"9",[2806,3036,3037],{},"HT",[2806,3039,3040],{},"41",[2806,3042,3043],{},")",[2806,3045,3046],{},"73",[2806,3048,3049],{},"I",[2806,3051,3052],{},"105",[2806,3054,646],{},[2761,3056,3057,3060,3063,3066,3069,3072,3075,3078],{},[2806,3058,3059],{},"10",[2806,3061,3062],{},"LF",[2806,3064,3065],{},"42",[2806,3067,3068],{},"*",[2806,3070,3071],{},"74",[2806,3073,3074],{},"J",[2806,3076,3077],{},"106",[2806,3079,3080],{},"j",[2761,3082,3083,3086,3089,3092,3095,3098,3101,3104],{},[2806,3084,3085],{},"11",[2806,3087,3088],{},"VT",[2806,3090,3091],{},"43",[2806,3093,3094],{},"+",[2806,3096,3097],{},"75",[2806,3099,3100],{},"K",[2806,3102,3103],{},"107",[2806,3105,3106],{},"k",[2761,3108,3109,3112,3115,3118,3120,3123,3126,3129],{},[2806,3110,3111],{},"12",[2806,3113,3114],{},"FF",[2806,3116,3117],{},"44",[2806,3119,2992],{},[2806,3121,3122],{},"76",[2806,3124,3125],{},"L",[2806,3127,3128],{},"108",[2806,3130,3131],{},"l",[2761,3133,3134,3137,3140,3143,3146,3149,3152,3155],{},[2806,3135,3136],{},"13",[2806,3138,3139],{},"CR",[2806,3141,3142],{},"45",[2806,3144,3145],{},"-",[2806,3147,3148],{},"77",[2806,3150,3151],{},"M",[2806,3153,3154],{},"109",[2806,3156,3157],{},"m",[2761,3159,3160,3163,3166,3169,3172,3175,3178,3181],{},[2806,3161,3162],{},"14",[2806,3164,3165],{},"SO",[2806,3167,3168],{},"46",[2806,3170,3171],{},".",[2806,3173,3174],{},"78",[2806,3176,3177],{},"N",[2806,3179,3180],{},"110",[2806,3182,3183],{},"n",[2761,3185,3186,3189,3192,3195,3198,3201,3204,3207],{},[2806,3187,3188],{},"15",[2806,3190,3191],{},"SI",[2806,3193,3194],{},"47",[2806,3196,3197],{},"\u002F",[2806,3199,3200],{},"79",[2806,3202,3203],{},"O",[2806,3205,3206],{},"111",[2806,3208,3209],{},"o",[2761,3211,3212,3215,3218,3221,3223,3226,3229,3232],{},[2806,3213,3214],{},"16",[2806,3216,3217],{},"DLE",[2806,3219,3220],{},"48",[2806,3222,1939],{},[2806,3224,3225],{},"80",[2806,3227,3228],{},"P",[2806,3230,3231],{},"112",[2806,3233,24],{},[2761,3235,3236,3239,3242,3245,3247,3250,3253,3256],{},[2806,3237,3238],{},"17",[2806,3240,3241],{},"DCI",[2806,3243,3244],{},"49",[2806,3246,2120],{},[2806,3248,3249],{},"81",[2806,3251,3252],{},"Q",[2806,3254,3255],{},"113",[2806,3257,3258],{},"q",[2761,3260,3261,3264,3267,3270,3272,3275,3278,3281],{},[2806,3262,3263],{},"18",[2806,3265,3266],{},"DC2",[2806,3268,3269],{},"50",[2806,3271,2696],{},[2806,3273,3274],{},"82",[2806,3276,3277],{},"R",[2806,3279,3280],{},"114",[2806,3282,3283],{},"r",[2761,3285,3286,3289,3292,3295,3297,3300,3303,3306],{},[2806,3287,3288],{},"19",[2806,3290,3291],{},"DC3",[2806,3293,3294],{},"51",[2806,3296,2690],{},[2806,3298,3299],{},"83",[2806,3301,3302],{},"S",[2806,3304,3305],{},"115",[2806,3307,3308],{},"s",[2761,3310,3311,3314,3317,3320,3322,3325,3328,3331],{},[2806,3312,3313],{},"20",[2806,3315,3316],{},"DC4",[2806,3318,3319],{},"52",[2806,3321,2907],{},[2806,3323,3324],{},"84",[2806,3326,3327],{},"T",[2806,3329,3330],{},"116",[2806,3332,3333],{},"t",[2761,3335,3336,3339,3342,3345,3347,3350,3353,3356],{},[2806,3337,3338],{},"21",[2806,3340,3341],{},"NAK",[2806,3343,3344],{},"53",[2806,3346,2933],{},[2806,3348,3349],{},"85",[2806,3351,3352],{},"U",[2806,3354,3355],{},"117",[2806,3357,3358],{},"u",[2761,3360,3361,3364,3367,3370,3372,3375,3378,3381],{},[2806,3362,3363],{},"22",[2806,3365,3366],{},"SYN",[2806,3368,3369],{},"54",[2806,3371,2958],{},[2806,3373,3374],{},"86",[2806,3376,3377],{},"V",[2806,3379,3380],{},"118",[2806,3382,3383],{},"v",[2761,3385,3386,3389,3392,3395,3397,3400,3403,3406],{},[2806,3387,3388],{},"23",[2806,3390,3391],{},"TB",[2806,3393,3394],{},"55",[2806,3396,2983],{},[2806,3398,3399],{},"87",[2806,3401,3402],{},"W",[2806,3404,3405],{},"119",[2806,3407,3408],{},"w",[2761,3410,3411,3414,3417,3420,3422,3425,3428,3431],{},[2806,3412,3413],{},"24",[2806,3415,3416],{},"CAN",[2806,3418,3419],{},"56",[2806,3421,3009],{},[2806,3423,3424],{},"88",[2806,3426,3427],{},"X",[2806,3429,3430],{},"120",[2806,3432,3433],{},"x",[2761,3435,3436,3439,3442,3445,3447,3450,3453,3456],{},[2806,3437,3438],{},"25",[2806,3440,3441],{},"EM",[2806,3443,3444],{},"57",[2806,3446,3034],{},[2806,3448,3449],{},"89",[2806,3451,3452],{},"Y",[2806,3454,3455],{},"121",[2806,3457,3458],{},"y",[2761,3460,3461,3464,3467,3470,3473,3476,3479,3482],{},[2806,3462,3463],{},"26",[2806,3465,3466],{},"SUB",[2806,3468,3469],{},"58",[2806,3471,3472],{},":",[2806,3474,3475],{},"90",[2806,3477,3478],{},"Z",[2806,3480,3481],{},"122",[2806,3483,3484],{},"z",[2761,3486,3487,3490,3493,3496,3498,3501,3504,3507],{},[2806,3488,3489],{},"27",[2806,3491,3492],{},"ESC",[2806,3494,3495],{},"59",[2806,3497,2675],{},[2806,3499,3500],{},"91",[2806,3502,3503],{},"[",[2806,3505,3506],{},"123",[2806,3508,3509],{},"{",[2761,3511,3512,3515,3518,3521,3523,3526,3528,3531],{},[2806,3513,3514],{},"28",[2806,3516,3517],{},"FS",[2806,3519,3520],{},"60",[2806,3522,260],{},[2806,3524,3525],{},"92",[2806,3527,3197],{},[2806,3529,3530],{},"124",[2806,3532,3533],{},"|",[2761,3535,3536,3539,3542,3545,3547,3550,3553,3556],{},[2806,3537,3538],{},"29",[2806,3540,3541],{},"GS",[2806,3543,3544],{},"61",[2806,3546,268],{},[2806,3548,3549],{},"93",[2806,3551,3552],{},"]",[2806,3554,3555],{},"125",[2806,3557,3558],{},"}",[2761,3560,3561,3564,3567,3570,3573,3576,3579,3582],{},[2806,3562,3563],{},"30",[2806,3565,3566],{},"RS",[2806,3568,3569],{},"62",[2806,3571,3572],{},">",[2806,3574,3575],{},"94",[2806,3577,3578],{},"^",[2806,3580,3581],{},"126",[2806,3583,3584],{},"`",[2761,3586,3587,3590,3593,3596,3599,3602,3605,3608],{},[2806,3588,3589],{},"31",[2806,3591,3592],{},"US",[2806,3594,3595],{},"63",[2806,3597,3598],{},"?",[2806,3600,3601],{},"95",[2806,3603,3604],{},"_",[2806,3606,3607],{},"127",[2806,3609,3610],{},"DEL",[24,3612,3613,3614,3617],{},"ASCII 码大致由以下",[27,3615,3616],{},"两部分组","成：",[51,3619,3620,3627],{},[54,3621,3622,3623,3626],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[27,3624,3625],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[54,3628,3629,3630,3633],{},"ASCII 打印字符：数字 ",[27,3631,3632],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[19,3635,3637],{"id":3636},"_134转义字符","1.3.4转义字符",[67,3639,3641],{"className":2610,"code":3640,"language":2612,"meta":72,"style":72},"\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",[74,3642,3643,3648,3664,3678,3683,3696,3701],{"__ignoreMap":72},[77,3644,3645],{"class":79,"line":80},[77,3646,3647],{"class":323},"\u002F\u002F换行符\n",[77,3649,3650,3653,3656,3659,3661],{"class":79,"line":91},[77,3651,3652],{"class":87},"cout ",[77,3654,3655],{"class":2123},"\u003C\u003C",[77,3657,3658],{"class":271},"\"hello world\u002Fn\"",[77,3660,2675],{"class":87},[77,3662,3663],{"class":323}," \u002F\u002F就等同于如下：\n",[77,3665,3666,3668,3670,3673,3675],{"class":79,"line":107},[77,3667,3652],{"class":87},[77,3669,3655],{"class":2123},[77,3671,3672],{"class":271},"\"hello world\"",[77,3674,3655],{"class":2123},[77,3676,3677],{"class":87},"endl;\n",[77,3679,3680],{"class":79,"line":191},[77,3681,3682],{"class":323},"\u002F\u002F反斜杠\n",[77,3684,3685,3687,3689,3692,3694],{"class":79,"line":1543},[77,3686,3652],{"class":87},[77,3688,3655],{"class":2123},[77,3690,3691],{"class":271},"\"\u002F\u002F\"",[77,3693,3655],{"class":2123},[77,3695,3677],{"class":87},[77,3697,3698],{"class":79,"line":1549},[77,3699,3700],{"class":323},"\u002F\u002F水平制表符\n",[77,3702,3703,3705,3707,3710,3713,3716,3718,3721],{"class":79,"line":1566},[77,3704,3652],{"class":87},[77,3706,3655],{"class":2123},[77,3708,3709],{"class":271},"\"aaaa",[77,3711,3712],{"class":94},"\\t",[77,3714,3715],{"class":271},"helloworld\"",[77,3717,3655],{"class":2123},[77,3719,3720],{"class":87},"endl;",[77,3722,3723],{"class":323}," \u002F\u002F输出窗口时有对齐效果\n",[19,3725,3727],{"id":3726},"_135字符串型","1.3.5字符串型",[24,3729,3730,3731,3733],{},"char 变量名",[77,3732],{},"=\"字符串值\"",[67,3735,3737],{"className":2610,"code":3736,"language":2612,"meta":72,"style":72},"\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",[74,3738,3739,3744,3749,3754,3759,3772,3785,3790,3795,3806],{"__ignoreMap":72},[77,3740,3741],{"class":79,"line":80},[77,3742,3743],{"class":323},"\u002F\u002Fc风格字符串\n",[77,3745,3746],{"class":79,"line":91},[77,3747,3748],{"class":323},"\u002F\u002F注意事项：\n",[77,3750,3751],{"class":79,"line":107},[77,3752,3753],{"class":323},"\u002F\u002F1.char字符串名[]\n",[77,3755,3756],{"class":79,"line":191},[77,3757,3758],{"class":323},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[77,3760,3761,3763,3766,3768,3770],{"class":79,"line":1543},[77,3762,2715],{"class":2123},[77,3764,3765],{"class":87}," str[]",[77,3767,268],{"class":2123},[77,3769,3672],{"class":271},[77,3771,104],{"class":87},[77,3773,3774,3776,3778,3781,3783],{"class":79,"line":1549},[77,3775,3652],{"class":87},[77,3777,3655],{"class":2123},[77,3779,3780],{"class":87},"str",[77,3782,3655],{"class":2123},[77,3784,3677],{"class":87},[77,3786,3787],{"class":79,"line":1566},[77,3788,3789],{"class":323},"\u002F\u002Fc++风格字符串\n",[77,3791,3792],{"class":79,"line":1572},[77,3793,3794],{"class":323},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[77,3796,3797,3800,3802,3804],{"class":79,"line":1589},[77,3798,3799],{"class":87},"string str2",[77,3801,268],{"class":2123},[77,3803,3672],{"class":271},[77,3805,104],{"class":87},[77,3807,3808,3810,3812,3815,3817],{"class":79,"line":1595},[77,3809,3652],{"class":87},[77,3811,3655],{"class":2123},[77,3813,3814],{"class":87},"str2",[77,3816,3655],{"class":2123},[77,3818,3677],{"class":87},[19,3820,3822],{"id":3821},"_136布尔类型bool","1.3.6布尔类型bool",[67,3824,3826],{"className":2610,"code":3825,"language":2612,"meta":72,"style":72},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[74,3827,3828,3843],{"__ignoreMap":72},[77,3829,3830,3833,3836,3838,3841],{"class":79,"line":80},[77,3831,3832],{"class":2123},"bool",[77,3834,3835],{"class":87}," flag",[77,3837,268],{"class":2123},[77,3839,3840],{"class":94},"true",[77,3842,104],{"class":87},[77,3844,3845,3848,3851,3854,3856,3858],{"class":79,"line":91},[77,3846,3847],{"class":87},"cout",[77,3849,3850],{"class":2123},"\u003C\u003Csizeof",[77,3852,3853],{"class":87},"(flag)",[77,3855,3655],{"class":2123},[77,3857,3720],{"class":87},[77,3859,3860],{"class":323}," \u002F\u002F查看布尔占内存空间\n",[14,3862,3864],{"id":3863},"_14键盘输入cin","1.4键盘输入cin",[67,3866,3868],{"className":2610,"code":3867,"language":2612,"meta":72,"style":72},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[74,3869,3870,3883,3900,3911],{"__ignoreMap":72},[77,3871,3872,3874,3877,3879,3881],{"class":79,"line":80},[77,3873,2625],{"class":2123},[77,3875,3876],{"class":87}," a",[77,3878,268],{"class":2123},[77,3880,1939],{"class":94},[77,3882,104],{"class":87},[77,3884,3885,3887,3889,3892,3894,3896,3898],{"class":79,"line":91},[77,3886,3847],{"class":87},[77,3888,3655],{"class":2123},[77,3890,3891],{"class":271},"\"请给整型变量a赋值\"",[77,3893,3655],{"class":2123},[77,3895,417],{"class":87},[77,3897,3655],{"class":2123},[77,3899,3677],{"class":87},[77,3901,3902,3905,3908],{"class":79,"line":107},[77,3903,3904],{"class":87},"cin ",[77,3906,3907],{"class":2123},">>",[77,3909,3910],{"class":87}," a;\n",[77,3912,3913,3915,3917,3920,3923,3925,3927],{"class":79,"line":191},[77,3914,3652],{"class":87},[77,3916,3655],{"class":2123},[77,3918,3919],{"class":271}," \"整型变量a=\"",[77,3921,3922],{"class":2123}," \u003C\u003C",[77,3924,417],{"class":87},[77,3926,3655],{"class":2123},[77,3928,3677],{"class":87},[14,3930,3932],{"id":3931},"_15运算符","1.5运算符",[19,3934,3936],{"id":3935},"_151算术运算符","1.5.1算术运算符",[24,3938,3939,3942],{},[40,3940],{"alt":72,"src":3941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[139,3944,3945,3948,3951],{},[54,3946,3947],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[54,3949,3950],{},"两个小数不可以做取模运算",[54,3952,3953],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[19,3955,3957],{"id":3956},"_152赋值运算符","1.5.2赋值运算符",[24,3959,3960],{},[40,3961],{"alt":72,"src":3962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[19,3964,3966],{"id":3965},"_153比较运算符","1.5.3比较运算符",[24,3968,3969],{},[40,3970],{"alt":72,"src":3971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[19,3973,3975],{"id":3974},"_154逻辑运算符","1.5.4逻辑运算符",[24,3977,3978],{},[40,3979],{"alt":72,"src":3980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3982,3984],{"id":3983},"_16程序流程结构","1.6程序流程结构",[19,3986,3988],{"id":3987},"_161选择结构","1.6.1选择结构",[139,3990,3991],{},[54,3992,3993],{},"if语句\n单行、多行、多条件if语句",[67,3995,3997],{"className":2610,"code":3996,"language":2612,"meta":72,"style":72},"\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",[74,3998,3999,4004,4019,4024,4038,4042,4047,4056,4069,4073,4086,4091,4097,4102,4116,4121,4127,4148,4153,4167,4172,4201,4206,4223,4228,4233,4238,4252,4257],{"__ignoreMap":72},[77,4000,4001],{"class":79,"line":80},[77,4002,4003],{"class":323},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[77,4005,4006,4009,4012,4014,4017],{"class":79,"line":91},[77,4007,4008],{"class":2123},"if",[77,4010,4011],{"class":87},"(score",[77,4013,3572],{"class":2123},[77,4015,4016],{"class":94},"600",[77,4018,2628],{"class":87},[77,4020,4021],{"class":79,"line":107},[77,4022,4023],{"class":87},"{\n",[77,4025,4026,4029,4031,4034,4036],{"class":79,"line":191},[77,4027,4028],{"class":87},"    cout",[77,4030,3655],{"class":2123},[77,4032,4033],{"class":271},"'这是单行if语句'",[77,4035,3655],{"class":2123},[77,4037,3677],{"class":87},[77,4039,4040],{"class":79,"line":1543},[77,4041,110],{"class":87},[77,4043,4044],{"class":79,"line":1549},[77,4045,4046],{"class":323},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[77,4048,4049,4051,4053],{"class":79,"line":1566},[77,4050,3904],{"class":87},[77,4052,3907],{"class":2123},[77,4054,4055],{"class":87}," score\n",[77,4057,4058,4060,4062,4065,4067],{"class":79,"line":1572},[77,4059,4008],{"class":2123},[77,4061,4011],{"class":87},[77,4063,4064],{"class":2123},"\u003C=",[77,4066,4016],{"class":94},[77,4068,2628],{"class":87},[77,4070,4071],{"class":79,"line":1589},[77,4072,4023],{"class":87},[77,4074,4075,4077,4079,4082,4084],{"class":79,"line":1595},[77,4076,4028],{"class":87},[77,4078,3907],{"class":2123},[77,4080,4081],{"class":271},"\"小于等于600\"",[77,4083,3655],{"class":2123},[77,4085,3677],{"class":87},[77,4087,4089],{"class":79,"line":4088},11,[77,4090,110],{"class":87},[77,4092,4094],{"class":79,"line":4093},12,[77,4095,4096],{"class":2123},"else\n",[77,4098,4100],{"class":79,"line":4099},13,[77,4101,4023],{"class":87},[77,4103,4105,4107,4109,4112,4114],{"class":79,"line":4104},14,[77,4106,4028],{"class":87},[77,4108,3907],{"class":2123},[77,4110,4111],{"class":271},"\"大于600\"",[77,4113,3907],{"class":2123},[77,4115,3677],{"class":87},[77,4117,4119],{"class":79,"line":4118},15,[77,4120,110],{"class":87},[77,4122,4124],{"class":79,"line":4123},16,[77,4125,4126],{"class":323},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[77,4128,4130,4132,4135,4137,4139,4142,4144,4146],{"class":79,"line":4129},17,[77,4131,4008],{"class":2123},[77,4133,4134],{"class":87}," (",[77,4136,1939],{"class":94},[77,4138,260],{"class":2123},[77,4140,4141],{"class":87},"num",[77,4143,260],{"class":2123},[77,4145,2925],{"class":94},[77,4147,2628],{"class":87},[77,4149,4151],{"class":79,"line":4150},18,[77,4152,4023],{"class":87},[77,4154,4156,4158,4160,4163,4165],{"class":79,"line":4155},19,[77,4157,4028],{"class":87},[77,4159,3655],{"class":2123},[77,4161,4162],{"class":271},"\"小于100\"",[77,4164,3655],{"class":2123},[77,4166,3677],{"class":87},[77,4168,4170],{"class":79,"line":4169},20,[77,4171,110],{"class":87},[77,4173,4175,4178,4181,4184,4187,4189,4192,4194,4196,4199],{"class":79,"line":4174},21,[77,4176,4177],{"class":2123},"else",[77,4179,4180],{"class":2123}," if",[77,4182,4183],{"class":87}," (nmu",[77,4185,4186],{"class":2123},">=",[77,4188,2925],{"class":94},[77,4190,4191],{"class":2123},"&&",[77,4193,4141],{"class":87},[77,4195,260],{"class":2123},[77,4197,4198],{"class":94},"200",[77,4200,2628],{"class":87},[77,4202,4204],{"class":79,"line":4203},22,[77,4205,4023],{"class":87},[77,4207,4209,4211,4213,4216,4218,4220],{"class":79,"line":4208},23,[77,4210,4028],{"class":87},[77,4212,3655],{"class":2123},[77,4214,4215],{"class":271},"\"不小于100且小于200\"",[77,4217,3655],{"class":2123},[77,4219,3720],{"class":87},[77,4221,4222],{"class":323}," \u002F\u002F可以无限else if,python中是elif：\n",[77,4224,4226],{"class":79,"line":4225},24,[77,4227,110],{"class":87},[77,4229,4231],{"class":79,"line":4230},25,[77,4232,4096],{"class":2123},[77,4234,4236],{"class":79,"line":4235},26,[77,4237,4023],{"class":87},[77,4239,4241,4243,4245,4248,4250],{"class":79,"line":4240},27,[77,4242,4028],{"class":87},[77,4244,3655],{"class":2123},[77,4246,4247],{"class":271},"\"不小于200\"",[77,4249,3655],{"class":2123},[77,4251,3677],{"class":87},[77,4253,4255],{"class":79,"line":4254},28,[77,4256,110],{"class":87},[77,4258,4260],{"class":79,"line":4259},29,[77,4261,4262],{"class":323},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[139,4264,4265],{"start":91},[54,4266,4267],{},"三目运算符",[67,4269,4271],{"className":2610,"code":4270,"language":2612,"meta":72,"style":72},"\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",[74,4272,4273,4278,4283,4309,4331,4348,4353,4376,4391],{"__ignoreMap":72},[77,4274,4275],{"class":79,"line":80},[77,4276,4277],{"class":323},"\u002F\u002F创建三个变量a,b,c\n",[77,4279,4280],{"class":79,"line":91},[77,4281,4282],{"class":323},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[77,4284,4285,4287,4289,4291,4293,4296,4298,4300,4303,4305,4307],{"class":79,"line":107},[77,4286,2625],{"class":2123},[77,4288,3876],{"class":87},[77,4290,268],{"class":2123},[77,4292,3313],{"class":94},[77,4294,4295],{"class":87},",b",[77,4297,268],{"class":2123},[77,4299,3059],{"class":94},[77,4301,4302],{"class":87},",c",[77,4304,268],{"class":2123},[77,4306,1939],{"class":94},[77,4308,104],{"class":87},[77,4310,4311,4313,4315,4318,4320,4322,4324,4326,4328],{"class":79,"line":191},[77,4312,2902],{"class":87},[77,4314,268],{"class":2123},[77,4316,4317],{"class":87},"(a",[77,4319,3572],{"class":2123},[77,4321,2877],{"class":87},[77,4323,3598],{"class":2123},[77,4325,417],{"class":87},[77,4327,3472],{"class":2123},[77,4329,4330],{"class":87},"b)\n",[77,4332,4333,4335,4337,4340,4342,4344,4346],{"class":79,"line":1543},[77,4334,3847],{"class":87},[77,4336,3655],{"class":2123},[77,4338,4339],{"class":271},"\"c=\"",[77,4341,3655],{"class":2123},[77,4343,2902],{"class":87},[77,4345,3655],{"class":2123},[77,4347,3677],{"class":87},[77,4349,4350],{"class":79,"line":1549},[77,4351,4352],{"class":323},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[77,4354,4355,4357,4359,4361,4363,4365,4367,4370,4372,4374],{"class":79,"line":1566},[77,4356,4317],{"class":87},[77,4358,3572],{"class":2123},[77,4360,2877],{"class":87},[77,4362,3598],{"class":2123},[77,4364,417],{"class":87},[77,4366,3472],{"class":2123},[77,4368,4369],{"class":87},"b)",[77,4371,268],{"class":2123},[77,4373,2925],{"class":94},[77,4375,104],{"class":87},[77,4377,4378,4380,4382,4384,4386,4388],{"class":79,"line":1572},[77,4379,3847],{"class":87},[77,4381,3655],{"class":2123},[77,4383,417],{"class":87},[77,4385,3655],{"class":2123},[77,4387,3720],{"class":87},[77,4389,4390],{"class":323}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[77,4392,4393,4395,4397,4399,4401,4403],{"class":79,"line":1589},[77,4394,3847],{"class":87},[77,4396,3655],{"class":2123},[77,4398,2877],{"class":87},[77,4400,3655],{"class":2123},[77,4402,3720],{"class":87},[77,4404,4405],{"class":323}," \u002F\u002F10   a>b,b还是原值\n",[139,4407,4408],{"start":107},[54,4409,4410],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[67,4412,4414],{"className":2610,"code":4413,"language":2612,"meta":72,"style":72},"\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",[74,4415,4416,4421,4429,4442,4452,4456,4470,4483,4493,4501,4506,4531,4552,4574,4595,4617,4638,4658,4663],{"__ignoreMap":72},[77,4417,4418],{"class":79,"line":80},[77,4419,4420],{"class":323},"\u002F\u002F案例-电影打分\n",[77,4422,4423,4426],{"class":79,"line":91},[77,4424,4425],{"class":2123},"#include",[77,4427,4428],{"class":271},"\u003Ciostream>\n",[77,4430,4431,4434,4437,4440],{"class":79,"line":107},[77,4432,4433],{"class":2123},"using",[77,4435,4436],{"class":2123}," namespace",[77,4438,4439],{"class":83}," std",[77,4441,104],{"class":87},[77,4443,4444,4446,4449],{"class":79,"line":191},[77,4445,2625],{"class":2123},[77,4447,4448],{"class":83}," main",[77,4450,4451],{"class":87},"()\n",[77,4453,4454],{"class":79,"line":1543},[77,4455,4023],{"class":87},[77,4457,4458,4461,4464,4466,4468],{"class":79,"line":1549},[77,4459,4460],{"class":2123},"    int",[77,4462,4463],{"class":87}," score",[77,4465,268],{"class":2123},[77,4467,1939],{"class":94},[77,4469,104],{"class":87},[77,4471,4472,4474,4476,4479,4481],{"class":79,"line":1566},[77,4473,4028],{"class":87},[77,4475,3655],{"class":2123},[77,4477,4478],{"class":271},"\"电影打分：\"",[77,4480,3655],{"class":2123},[77,4482,3677],{"class":87},[77,4484,4485,4488,4490],{"class":79,"line":1572},[77,4486,4487],{"class":87},"    cin",[77,4489,3907],{"class":2123},[77,4491,4492],{"class":87},"score;\n",[77,4494,4495,4498],{"class":79,"line":1589},[77,4496,4497],{"class":2123},"    switch",[77,4499,4500],{"class":87},"(score)\n",[77,4502,4503],{"class":79,"line":1595},[77,4504,4505],{"class":87},"    {\n",[77,4507,4508,4511,4514,4517,4519,4522,4524,4526,4529],{"class":79,"line":4088},[77,4509,4510],{"class":2123},"        case",[77,4512,4513],{"class":94}," 10",[77,4515,4516],{"class":87},":cout",[77,4518,3655],{"class":2123},[77,4520,4521],{"class":271},"\"经典\"",[77,4523,3655],{"class":2123},[77,4525,3720],{"class":87},[77,4527,4528],{"class":2123},"break",[77,4530,104],{"class":87},[77,4532,4533,4535,4538,4540,4542,4544,4546,4548,4550],{"class":79,"line":4093},[77,4534,4510],{"class":2123},[77,4536,4537],{"class":94}," 9",[77,4539,4516],{"class":87},[77,4541,3655],{"class":2123},[77,4543,4521],{"class":271},[77,4545,3655],{"class":2123},[77,4547,3720],{"class":87},[77,4549,4528],{"class":2123},[77,4551,104],{"class":87},[77,4553,4554,4556,4559,4561,4563,4566,4568,4570,4572],{"class":79,"line":4099},[77,4555,4510],{"class":2123},[77,4557,4558],{"class":94}," 8",[77,4560,4516],{"class":87},[77,4562,3655],{"class":2123},[77,4564,4565],{"class":271},"\"非常好\"",[77,4567,3655],{"class":2123},[77,4569,3720],{"class":87},[77,4571,4528],{"class":2123},[77,4573,104],{"class":87},[77,4575,4576,4578,4581,4583,4585,4587,4589,4591,4593],{"class":79,"line":4104},[77,4577,4510],{"class":2123},[77,4579,4580],{"class":94}," 7",[77,4582,4516],{"class":87},[77,4584,3655],{"class":2123},[77,4586,4565],{"class":271},[77,4588,3655],{"class":2123},[77,4590,3720],{"class":87},[77,4592,4528],{"class":2123},[77,4594,104],{"class":87},[77,4596,4597,4599,4602,4604,4606,4609,4611,4613,4615],{"class":79,"line":4118},[77,4598,4510],{"class":2123},[77,4600,4601],{"class":94}," 6",[77,4603,4516],{"class":87},[77,4605,3655],{"class":2123},[77,4607,4608],{"class":271},"\"一般\"",[77,4610,3655],{"class":2123},[77,4612,3720],{"class":87},[77,4614,4528],{"class":2123},[77,4616,104],{"class":87},[77,4618,4619,4621,4624,4626,4628,4630,4632,4634,4636],{"class":79,"line":4123},[77,4620,4510],{"class":2123},[77,4622,4623],{"class":94}," 5",[77,4625,4516],{"class":87},[77,4627,3655],{"class":2123},[77,4629,4608],{"class":271},[77,4631,3655],{"class":2123},[77,4633,3720],{"class":87},[77,4635,4528],{"class":2123},[77,4637,104],{"class":87},[77,4639,4640,4643,4645,4647,4650,4652,4654,4656],{"class":79,"line":4129},[77,4641,4642],{"class":2123},"        default",[77,4644,4516],{"class":87},[77,4646,3655],{"class":2123},[77,4648,4649],{"class":271},"\"烂片\"",[77,4651,3655],{"class":2123},[77,4653,3720],{"class":87},[77,4655,4528],{"class":2123},[77,4657,104],{"class":87},[77,4659,4660],{"class":79,"line":4150},[77,4661,4662],{"class":87},"    }\n",[77,4664,4665],{"class":79,"line":4155},[77,4666,110],{"class":87},[24,4668,4669],{},"if和switch区别：",[51,4671,4672,4675],{},[54,4673,4674],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[54,4676,4677],{},"switch优点：结构清晰，执行效率高",[19,4679,4681],{"id":4680},"_162循环结构","1.6.2循环结构",[139,4683,4684],{},[54,4685,4686],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[67,4688,4690],{"className":2610,"code":4689,"language":2612,"meta":72,"style":72},"\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",[74,4691,4692,4697,4705,4709,4722,4736,4740,4760,4770,4774,4786],{"__ignoreMap":72},[77,4693,4694],{"class":79,"line":80},[77,4695,4696],{"class":323},"\u002F\u002F打印0-9数字\n",[77,4698,4699,4701,4703],{"class":79,"line":91},[77,4700,2625],{"class":2123},[77,4702,4448],{"class":83},[77,4704,4451],{"class":87},[77,4706,4707],{"class":79,"line":107},[77,4708,4023],{"class":87},[77,4710,4711,4713,4716,4718,4720],{"class":79,"line":191},[77,4712,4460],{"class":2123},[77,4714,4715],{"class":87}," num",[77,4717,268],{"class":2123},[77,4719,1939],{"class":94},[77,4721,104],{"class":87},[77,4723,4724,4727,4730,4732,4734],{"class":79,"line":1543},[77,4725,4726],{"class":2123},"    while",[77,4728,4729],{"class":87},"(num",[77,4731,260],{"class":2123},[77,4733,3059],{"class":94},[77,4735,2628],{"class":87},[77,4737,4738],{"class":79,"line":1549},[77,4739,4505],{"class":87},[77,4741,4742,4745,4748,4750,4752,4754,4757],{"class":79,"line":1566},[77,4743,4744],{"class":83},"       std",[77,4746,4747],{"class":87},"::cout",[77,4749,3655],{"class":2123},[77,4751,4141],{"class":87},[77,4753,3655],{"class":2123},[77,4755,4756],{"class":83},"std",[77,4758,4759],{"class":87},"::endl;\n",[77,4761,4762,4765,4768],{"class":79,"line":1572},[77,4763,4764],{"class":87},"        num",[77,4766,4767],{"class":2123},"++",[77,4769,104],{"class":87},[77,4771,4772],{"class":79,"line":1589},[77,4773,4662],{"class":87},[77,4775,4776,4779,4781,4784],{"class":79,"line":1595},[77,4777,4778],{"class":83},"    system",[77,4780,2622],{"class":87},[77,4782,4783],{"class":271},"\"pause\"",[77,4785,2628],{"class":87},[77,4787,4788],{"class":79,"line":4088},[77,4789,110],{"class":87},[24,4791,4792],{},"注意：写好循环条件，避免死循环情况",[67,4794,4796],{"className":2610,"code":4795,"language":2612,"meta":72,"style":72},"\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",[74,4797,4798,4803,4810,4817,4827,4835,4839,4844,4871,4876,4881,4889,4916,4921,4926,4939,4949,4953,4963,4968,4981,4986,5000,5005,5020,5024,5037,5041,5046,5050,5064,5072,5077,5083,5089,5094],{"__ignoreMap":72},[77,4799,4800],{"class":79,"line":80},[77,4801,4802],{"class":323},"\u002F\u002F循环结构-猜数字\n",[77,4804,4805,4807],{"class":79,"line":91},[77,4806,4425],{"class":2123},[77,4808,4809],{"class":271}," \u003Ciostream>\n",[77,4811,4812,4814],{"class":79,"line":107},[77,4813,4425],{"class":2123},[77,4815,4816],{"class":271}," \u003Cctime>\n",[77,4818,4819,4821,4823,4825],{"class":79,"line":191},[77,4820,4433],{"class":2123},[77,4822,4436],{"class":2123},[77,4824,4439],{"class":83},[77,4826,104],{"class":87},[77,4828,4829,4831,4833],{"class":79,"line":1543},[77,4830,2625],{"class":2123},[77,4832,4448],{"class":83},[77,4834,4451],{"class":87},[77,4836,4837],{"class":79,"line":1549},[77,4838,4023],{"class":87},[77,4840,4841],{"class":79,"line":1566},[77,4842,4843],{"class":323},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[77,4845,4846,4849,4852,4855,4858,4860,4863,4865,4868],{"class":79,"line":1572},[77,4847,4848],{"class":83},"    srand",[77,4850,4851],{"class":87},"((",[77,4853,4854],{"class":2123},"unsigned",[77,4856,4857],{"class":2123}," int",[77,4859,3043],{"class":87},[77,4861,4862],{"class":83},"time",[77,4864,2622],{"class":87},[77,4866,4867],{"class":94},"NULL",[77,4869,4870],{"class":87},"));\n",[77,4872,4873],{"class":79,"line":1589},[77,4874,4875],{"emptyLinePlaceholder":2549},"\n",[77,4877,4878],{"class":79,"line":1595},[77,4879,4880],{"class":323},"    \u002F\u002F1.系统生成随机数\n",[77,4882,4883,4886],{"class":79,"line":4088},[77,4884,4885],{"class":323},"    \u002F\u002Frand()%100",[77,4887,4888],{"class":323}," \u002F\u002F生成0-99的随机数\n",[77,4890,4891,4893,4895,4897,4900,4903,4905,4907,4909,4911,4913],{"class":79,"line":4093},[77,4892,4460],{"class":2123},[77,4894,4715],{"class":87},[77,4896,268],{"class":2123},[77,4898,4899],{"class":83},"rand",[77,4901,4902],{"class":87},"()",[77,4904,2942],{"class":2123},[77,4906,2925],{"class":94},[77,4908,3094],{"class":2123},[77,4910,2120],{"class":94},[77,4912,2675],{"class":87},[77,4914,4915],{"class":323}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[77,4917,4918],{"class":79,"line":4099},[77,4919,4920],{"class":323},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[77,4922,4923],{"class":79,"line":4104},[77,4924,4925],{"class":323},"    \u002F\u002F2.玩家猜测\n",[77,4927,4928,4930,4933,4935,4937],{"class":79,"line":4118},[77,4929,4460],{"class":2123},[77,4931,4932],{"class":87}," val",[77,4934,268],{"class":2123},[77,4936,1939],{"class":94},[77,4938,104],{"class":87},[77,4940,4941,4943,4945,4947],{"class":79,"line":4123},[77,4942,4726],{"class":2123},[77,4944,4134],{"class":87},[77,4946,2120],{"class":94},[77,4948,2628],{"class":87},[77,4950,4951],{"class":79,"line":4129},[77,4952,4505],{"class":87},[77,4954,4955,4958,4960],{"class":79,"line":4150},[77,4956,4957],{"class":87},"        cin",[77,4959,3907],{"class":2123},[77,4961,4962],{"class":87},"val;\n",[77,4964,4965],{"class":79,"line":4155},[77,4966,4967],{"class":323},"        \u002F\u002F3.判断玩家猜测\n",[77,4969,4970,4973,4976,4978],{"class":79,"line":4169},[77,4971,4972],{"class":2123},"        if",[77,4974,4975],{"class":87},"(val",[77,4977,260],{"class":2123},[77,4979,4980],{"class":87},"num) \n",[77,4982,4983],{"class":79,"line":4174},[77,4984,4985],{"class":87},"        {\n",[77,4987,4988,4991,4993,4996,4998],{"class":79,"line":4203},[77,4989,4990],{"class":87},"            cout",[77,4992,3655],{"class":2123},[77,4994,4995],{"class":271},"\"猜小了！\"",[77,4997,3655],{"class":2123},[77,4999,3677],{"class":87},[77,5001,5002],{"class":79,"line":4208},[77,5003,5004],{"class":87},"        }\n",[77,5006,5007,5010,5012,5015,5017],{"class":79,"line":4225},[77,5008,5009],{"class":2123},"        else",[77,5011,4180],{"class":2123},[77,5013,5014],{"class":87}," (val",[77,5016,3572],{"class":2123},[77,5018,5019],{"class":87},"num)\n",[77,5021,5022],{"class":79,"line":4230},[77,5023,4985],{"class":87},[77,5025,5026,5028,5030,5033,5035],{"class":79,"line":4235},[77,5027,4990],{"class":87},[77,5029,3655],{"class":2123},[77,5031,5032],{"class":271},"\"猜大了！\"",[77,5034,3655],{"class":2123},[77,5036,3677],{"class":87},[77,5038,5039],{"class":79,"line":4240},[77,5040,5004],{"class":87},[77,5042,5043],{"class":79,"line":4254},[77,5044,5045],{"class":2123},"        else\n",[77,5047,5048],{"class":79,"line":4259},[77,5049,4985],{"class":87},[77,5051,5053,5055,5057,5060,5062],{"class":79,"line":5052},30,[77,5054,4990],{"class":87},[77,5056,3655],{"class":2123},[77,5058,5059],{"class":271},"\"猜对了！\"",[77,5061,3655],{"class":2123},[77,5063,3677],{"class":87},[77,5065,5067,5070],{"class":79,"line":5066},31,[77,5068,5069],{"class":2123},"            break",[77,5071,104],{"class":87},[77,5073,5075],{"class":79,"line":5074},32,[77,5076,5004],{"class":87},[77,5078,5080],{"class":79,"line":5079},33,[77,5081,5082],{"class":323},"        \u002F\u002F猜对 退出游戏\n",[77,5084,5086],{"class":79,"line":5085},34,[77,5087,5088],{"class":323},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[77,5090,5092],{"class":79,"line":5091},35,[77,5093,4662],{"class":87},[77,5095,5097],{"class":79,"line":5096},36,[77,5098,110],{"class":87},[139,5100,5101],{"start":91},[54,5102,5103,5104,5107],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[27,5105,5106],{},"do...while会先执行一次循环语句","，在判断循环语句",[67,5109,5111],{"className":2610,"code":5110,"language":2612,"meta":72,"style":72},"\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",[74,5112,5113,5118,5126,5130,5142,5150,5154,5171,5178,5182,5195,5205],{"__ignoreMap":72},[77,5114,5115],{"class":79,"line":80},[77,5116,5117],{"class":323},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[77,5119,5120,5122,5124],{"class":79,"line":91},[77,5121,2625],{"class":2123},[77,5123,4448],{"class":83},[77,5125,4451],{"class":87},[77,5127,5128],{"class":79,"line":107},[77,5129,4023],{"class":87},[77,5131,5132,5134,5136,5138,5140],{"class":79,"line":191},[77,5133,4460],{"class":2123},[77,5135,4715],{"class":87},[77,5137,268],{"class":2123},[77,5139,1939],{"class":94},[77,5141,104],{"class":87},[77,5143,5144,5147],{"class":79,"line":1543},[77,5145,5146],{"class":2123},"    do",[77,5148,5149],{"class":87}," \n",[77,5151,5152],{"class":79,"line":1549},[77,5153,4505],{"class":87},[77,5155,5156,5159,5161,5163,5165,5167,5169],{"class":79,"line":1566},[77,5157,5158],{"class":83},"        std",[77,5160,4747],{"class":87},[77,5162,3655],{"class":2123},[77,5164,4141],{"class":87},[77,5166,3655],{"class":2123},[77,5168,4756],{"class":83},[77,5170,4759],{"class":87},[77,5172,5173,5175],{"class":79,"line":1572},[77,5174,4764],{"class":87},[77,5176,5177],{"class":2123},"++\n",[77,5179,5180],{"class":79,"line":1589},[77,5181,4662],{"class":87},[77,5183,5184,5186,5188,5190,5192],{"class":79,"line":1595},[77,5185,4726],{"class":2123},[77,5187,4729],{"class":87},[77,5189,260],{"class":2123},[77,5191,3059],{"class":94},[77,5193,5194],{"class":87},");\n",[77,5196,5197,5199,5201,5203],{"class":79,"line":4088},[77,5198,4778],{"class":83},[77,5200,2622],{"class":87},[77,5202,4783],{"class":271},[77,5204,5194],{"class":87},[77,5206,5207],{"class":79,"line":4093},[77,5208,110],{"class":87},[24,5210,5211],{},"案例-水仙花数",[24,5213,5214],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[24,5216,5217],{},"例如：1^3+5^3+3^3=153",[24,5219,5220],{},"请用do...while语句，求出所有3位数的水仙花数",[67,5222,5224],{"className":2610,"code":5223,"language":2612,"meta":72,"style":72},"#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",[74,5225,5226,5232,5242,5250,5254,5259,5271,5277,5281,5286,5302,5318,5334,5349,5368,5383,5431,5435,5447,5451,5459,5463,5477],{"__ignoreMap":72},[77,5227,5228,5230],{"class":79,"line":80},[77,5229,4425],{"class":2123},[77,5231,4809],{"class":271},[77,5233,5234,5236,5238,5240],{"class":79,"line":91},[77,5235,4433],{"class":2123},[77,5237,4436],{"class":2123},[77,5239,4439],{"class":83},[77,5241,104],{"class":87},[77,5243,5244,5246,5248],{"class":79,"line":107},[77,5245,2625],{"class":2123},[77,5247,4448],{"class":83},[77,5249,4451],{"class":87},[77,5251,5252],{"class":79,"line":191},[77,5253,4023],{"class":87},[77,5255,5256],{"class":79,"line":1543},[77,5257,5258],{"class":323},"    \u002F\u002F1.先打印所有三位数字\n",[77,5260,5261,5263,5265,5267,5269],{"class":79,"line":1549},[77,5262,4460],{"class":2123},[77,5264,4715],{"class":87},[77,5266,268],{"class":2123},[77,5268,2925],{"class":94},[77,5270,104],{"class":87},[77,5272,5273,5275],{"class":79,"line":1566},[77,5274,5146],{"class":2123},[77,5276,5149],{"class":87},[77,5278,5279],{"class":79,"line":1572},[77,5280,4505],{"class":87},[77,5282,5283],{"class":79,"line":1589},[77,5284,5285],{"class":323},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[77,5287,5288,5291,5293,5295,5297,5299],{"class":79,"line":1595},[77,5289,5290],{"class":2123},"        int",[77,5292,3876],{"class":87},[77,5294,268],{"class":2123},[77,5296,1939],{"class":94},[77,5298,2675],{"class":87},[77,5300,5301],{"class":323}," \u002F\u002F个位\n",[77,5303,5304,5306,5309,5311,5313,5315],{"class":79,"line":4088},[77,5305,5290],{"class":2123},[77,5307,5308],{"class":87}," b",[77,5310,268],{"class":2123},[77,5312,1939],{"class":94},[77,5314,2675],{"class":87},[77,5316,5317],{"class":323}," \u002F\u002F十位\n",[77,5319,5320,5322,5325,5327,5329,5331],{"class":79,"line":4093},[77,5321,5290],{"class":2123},[77,5323,5324],{"class":87}," c",[77,5326,268],{"class":2123},[77,5328,1939],{"class":94},[77,5330,2675],{"class":87},[77,5332,5333],{"class":323}," \u002F\u002F百位\n",[77,5335,5336,5339,5341,5343,5345,5347],{"class":79,"line":4099},[77,5337,5338],{"class":87},"        a",[77,5340,268],{"class":2123},[77,5342,4141],{"class":87},[77,5344,2942],{"class":2123},[77,5346,3059],{"class":94},[77,5348,104],{"class":87},[77,5350,5351,5354,5356,5358,5360,5362,5364,5366],{"class":79,"line":4104},[77,5352,5353],{"class":87},"        b",[77,5355,268],{"class":2123},[77,5357,4141],{"class":87},[77,5359,3197],{"class":2123},[77,5361,3059],{"class":94},[77,5363,2942],{"class":2123},[77,5365,3059],{"class":94},[77,5367,104],{"class":87},[77,5369,5370,5373,5375,5377,5379,5381],{"class":79,"line":4118},[77,5371,5372],{"class":87},"        c",[77,5374,268],{"class":2123},[77,5376,4141],{"class":87},[77,5378,3197],{"class":2123},[77,5380,2925],{"class":94},[77,5382,104],{"class":87},[77,5384,5385,5387,5389,5391,5393,5395,5397,5399,5401,5403,5405,5407,5409,5411,5413,5415,5417,5419,5422,5425,5428],{"class":79,"line":4123},[77,5386,4972],{"class":2123},[77,5388,4317],{"class":87},[77,5390,3068],{"class":2123},[77,5392,417],{"class":87},[77,5394,3068],{"class":2123},[77,5396,417],{"class":87},[77,5398,3094],{"class":2123},[77,5400,2877],{"class":87},[77,5402,3068],{"class":2123},[77,5404,2877],{"class":87},[77,5406,3068],{"class":2123},[77,5408,2877],{"class":87},[77,5410,3094],{"class":2123},[77,5412,2902],{"class":87},[77,5414,3068],{"class":2123},[77,5416,2902],{"class":87},[77,5418,3068],{"class":2123},[77,5420,5421],{"class":87},"c ",[77,5423,5424],{"class":2123},"==",[77,5426,5427],{"class":87}," num)",[77,5429,5430],{"class":323}," \u002F\u002F如果是水仙花数，才打印\n",[77,5432,5433],{"class":79,"line":4129},[77,5434,4985],{"class":87},[77,5436,5437,5439,5441,5443,5445],{"class":79,"line":4150},[77,5438,4990],{"class":87},[77,5440,3655],{"class":2123},[77,5442,4141],{"class":87},[77,5444,3655],{"class":2123},[77,5446,3677],{"class":87},[77,5448,5449],{"class":79,"line":4155},[77,5450,5004],{"class":87},[77,5452,5453,5455,5457],{"class":79,"line":4169},[77,5454,4764],{"class":87},[77,5456,4767],{"class":2123},[77,5458,104],{"class":87},[77,5460,5461],{"class":79,"line":4174},[77,5462,4662],{"class":87},[77,5464,5465,5467,5470,5472,5475],{"class":79,"line":4203},[77,5466,4726],{"class":2123},[77,5468,5469],{"class":87}," (num ",[77,5471,260],{"class":2123},[77,5473,5474],{"class":94}," 1000",[77,5476,5194],{"class":87},[77,5478,5479],{"class":79,"line":4208},[77,5480,110],{"class":87},[139,5482,5483],{"start":107},[54,5484,5485],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[67,5487,5489],{"className":2610,"code":5488,"language":2612,"meta":72,"style":72},"\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",[74,5490,5491,5496,5525,5529,5541,5545,5550,5561,5568,5572,5586,5590,5597,5601,5613,5622],{"__ignoreMap":72},[77,5492,5493],{"class":79,"line":80},[77,5494,5495],{"class":323},"\u002F\u002F从数字0-9打印\n",[77,5497,5498,5501,5503,5505,5508,5510,5512,5515,5517,5519,5521,5523],{"class":79,"line":91},[77,5499,5500],{"class":2123},"for",[77,5502,2622],{"class":87},[77,5504,2625],{"class":2123},[77,5506,5507],{"class":87}," i",[77,5509,268],{"class":2123},[77,5511,1939],{"class":94},[77,5513,5514],{"class":87},";i",[77,5516,260],{"class":2123},[77,5518,3059],{"class":94},[77,5520,5514],{"class":87},[77,5522,4767],{"class":2123},[77,5524,2628],{"class":87},[77,5526,5527],{"class":79,"line":107},[77,5528,4023],{"class":87},[77,5530,5531,5533,5535,5537,5539],{"class":79,"line":191},[77,5532,4028],{"class":87},[77,5534,3655],{"class":2123},[77,5536,646],{"class":87},[77,5538,3655],{"class":2123},[77,5540,3677],{"class":87},[77,5542,5543],{"class":79,"line":1543},[77,5544,110],{"class":87},[77,5546,5547],{"class":79,"line":1549},[77,5548,5549],{"class":323},"\u002F\u002F上式可以进行拆分\n",[77,5551,5552,5554,5556,5558],{"class":79,"line":1566},[77,5553,2625],{"class":2123},[77,5555,5507],{"class":87},[77,5557,268],{"class":2123},[77,5559,5560],{"class":94},"0\n",[77,5562,5563,5565],{"class":79,"line":1572},[77,5564,5500],{"class":2123},[77,5566,5567],{"class":87},"(;;;)\n",[77,5569,5570],{"class":79,"line":1589},[77,5571,4023],{"class":87},[77,5573,5574,5577,5580,5582,5584],{"class":79,"line":1595},[77,5575,5576],{"class":2123},"    if",[77,5578,5579],{"class":87},"(i",[77,5581,4186],{"class":2123},[77,5583,3059],{"class":94},[77,5585,2628],{"class":87},[77,5587,5588],{"class":79,"line":4088},[77,5589,4505],{"class":87},[77,5591,5592,5595],{"class":79,"line":4093},[77,5593,5594],{"class":2123},"        break",[77,5596,104],{"class":87},[77,5598,5599],{"class":79,"line":4099},[77,5600,4662],{"class":87},[77,5602,5603,5605,5607,5609,5611],{"class":79,"line":4104},[77,5604,4028],{"class":87},[77,5606,3655],{"class":2123},[77,5608,646],{"class":87},[77,5610,3655],{"class":2123},[77,5612,3677],{"class":87},[77,5614,5615,5618,5620],{"class":79,"line":4118},[77,5616,5617],{"class":87},"    i",[77,5619,4767],{"class":2123},[77,5621,104],{"class":87},[77,5623,5624],{"class":79,"line":4123},[77,5625,110],{"class":87},[24,5627,5628],{},"小练习",[67,5630,5632],{"className":2610,"code":5631,"language":2612,"meta":72,"style":72},"#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",[74,5633,5634,5640,5650,5658,5662,5667,5672,5700,5704,5709,5714,5755,5759,5772,5776,5780,5784,5796,5800,5804],{"__ignoreMap":72},[77,5635,5636,5638],{"class":79,"line":80},[77,5637,4425],{"class":2123},[77,5639,4428],{"class":271},[77,5641,5642,5644,5646,5648],{"class":79,"line":91},[77,5643,4433],{"class":2123},[77,5645,4436],{"class":2123},[77,5647,4439],{"class":83},[77,5649,104],{"class":87},[77,5651,5652,5654,5656],{"class":79,"line":107},[77,5653,2625],{"class":2123},[77,5655,4448],{"class":83},[77,5657,4451],{"class":87},[77,5659,5660],{"class":79,"line":191},[77,5661,4023],{"class":87},[77,5663,5664],{"class":79,"line":1543},[77,5665,5666],{"class":323},"    \u002F\u002F敲桌子案例\n",[77,5668,5669],{"class":79,"line":1549},[77,5670,5671],{"class":323},"    \u002F\u002F1.先输出1-100的数字\n",[77,5673,5674,5677,5679,5681,5683,5685,5687,5690,5692,5694,5696,5698],{"class":79,"line":1566},[77,5675,5676],{"class":2123},"    for",[77,5678,2622],{"class":87},[77,5680,2625],{"class":2123},[77,5682,5507],{"class":87},[77,5684,268],{"class":2123},[77,5686,2120],{"class":94},[77,5688,5689],{"class":87},"; i",[77,5691,4064],{"class":2123},[77,5693,2925],{"class":94},[77,5695,5689],{"class":87},[77,5697,4767],{"class":2123},[77,5699,2628],{"class":87},[77,5701,5702],{"class":79,"line":1572},[77,5703,4505],{"class":87},[77,5705,5706],{"class":79,"line":1589},[77,5707,5708],{"class":323},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[77,5710,5711],{"class":79,"line":1595},[77,5712,5713],{"class":323},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[77,5715,5716,5718,5720,5722,5724,5726,5728,5731,5733,5735,5737,5739,5741,5743,5745,5747,5749,5751,5753],{"class":79,"line":4088},[77,5717,4972],{"class":2123},[77,5719,5579],{"class":87},[77,5721,2942],{"class":2123},[77,5723,2983],{"class":94},[77,5725,5424],{"class":2123},[77,5727,1939],{"class":94},[77,5729,5730],{"class":2123}," ||",[77,5732,5507],{"class":87},[77,5734,2942],{"class":2123},[77,5736,3059],{"class":94},[77,5738,5424],{"class":2123},[77,5740,2983],{"class":94},[77,5742,5730],{"class":2123},[77,5744,5507],{"class":87},[77,5746,3197],{"class":2123},[77,5748,3059],{"class":94},[77,5750,5424],{"class":2123},[77,5752,2983],{"class":94},[77,5754,2628],{"class":87},[77,5756,5757],{"class":79,"line":4093},[77,5758,4985],{"class":87},[77,5760,5761,5763,5765,5768,5770],{"class":79,"line":4099},[77,5762,4990],{"class":87},[77,5764,3655],{"class":2123},[77,5766,5767],{"class":271},"\"敲桌子\"",[77,5769,3655],{"class":2123},[77,5771,3677],{"class":87},[77,5773,5774],{"class":79,"line":4104},[77,5775,5004],{"class":87},[77,5777,5778],{"class":79,"line":4118},[77,5779,5045],{"class":2123},[77,5781,5782],{"class":79,"line":4123},[77,5783,4985],{"class":87},[77,5785,5786,5788,5790,5792,5794],{"class":79,"line":4129},[77,5787,4990],{"class":87},[77,5789,3655],{"class":2123},[77,5791,646],{"class":87},[77,5793,3655],{"class":2123},[77,5795,3677],{"class":87},[77,5797,5798],{"class":79,"line":4150},[77,5799,5004],{"class":87},[77,5801,5802],{"class":79,"line":4155},[77,5803,4662],{"class":87},[77,5805,5806],{"class":79,"line":4169},[77,5807,110],{"class":87},[24,5809,5810],{},"嵌套实现星图",[67,5812,5814],{"className":2610,"code":5813,"language":2612,"meta":72,"style":72},"#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",[74,5815,5816,5822,5832,5840,5844,5870,5874,5903,5907,5918,5922,5931,5935],{"__ignoreMap":72},[77,5817,5818,5820],{"class":79,"line":80},[77,5819,4425],{"class":2123},[77,5821,4428],{"class":271},[77,5823,5824,5826,5828,5830],{"class":79,"line":91},[77,5825,4433],{"class":2123},[77,5827,4436],{"class":2123},[77,5829,4439],{"class":83},[77,5831,104],{"class":87},[77,5833,5834,5836,5838],{"class":79,"line":107},[77,5835,2625],{"class":2123},[77,5837,4448],{"class":83},[77,5839,4451],{"class":87},[77,5841,5842],{"class":79,"line":191},[77,5843,4023],{"class":87},[77,5845,5846,5848,5850,5852,5854,5856,5858,5860,5862,5864,5866,5868],{"class":79,"line":1543},[77,5847,5676],{"class":2123},[77,5849,4134],{"class":87},[77,5851,2625],{"class":2123},[77,5853,5507],{"class":87},[77,5855,268],{"class":2123},[77,5857,1939],{"class":94},[77,5859,5514],{"class":87},[77,5861,260],{"class":2123},[77,5863,3059],{"class":94},[77,5865,5514],{"class":87},[77,5867,4767],{"class":2123},[77,5869,2628],{"class":87},[77,5871,5872],{"class":79,"line":1549},[77,5873,4505],{"class":87},[77,5875,5876,5879,5881,5883,5886,5888,5890,5893,5895,5897,5899,5901],{"class":79,"line":1566},[77,5877,5878],{"class":2123},"        for",[77,5880,4134],{"class":87},[77,5882,2625],{"class":2123},[77,5884,5885],{"class":87}," j",[77,5887,268],{"class":2123},[77,5889,1939],{"class":94},[77,5891,5892],{"class":87},";j",[77,5894,260],{"class":2123},[77,5896,3059],{"class":94},[77,5898,5892],{"class":87},[77,5900,4767],{"class":2123},[77,5902,2628],{"class":87},[77,5904,5905],{"class":79,"line":1572},[77,5906,4985],{"class":87},[77,5908,5909,5911,5913,5916],{"class":79,"line":1589},[77,5910,4990],{"class":87},[77,5912,3655],{"class":2123},[77,5914,5915],{"class":271},"\"*\"",[77,5917,104],{"class":87},[77,5919,5920],{"class":79,"line":1595},[77,5921,5004],{"class":87},[77,5923,5924,5927,5929],{"class":79,"line":4088},[77,5925,5926],{"class":87},"        cout",[77,5928,3655],{"class":2123},[77,5930,3677],{"class":87},[77,5932,5933],{"class":79,"line":4093},[77,5934,4662],{"class":87},[77,5936,5937],{"class":79,"line":4099},[77,5938,110],{"class":87},[24,5940,5941],{},"乘法口诀表",[67,5943,5945],{"className":2610,"code":5944,"language":2612,"meta":72,"style":72},"#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",[74,5946,5947,5953,5963,5971,5975,6001,6005,6030,6034,6074,6078,6086,6090],{"__ignoreMap":72},[77,5948,5949,5951],{"class":79,"line":80},[77,5950,4425],{"class":2123},[77,5952,4809],{"class":271},[77,5954,5955,5957,5959,5961],{"class":79,"line":91},[77,5956,4433],{"class":2123},[77,5958,4436],{"class":2123},[77,5960,4439],{"class":83},[77,5962,104],{"class":87},[77,5964,5965,5967,5969],{"class":79,"line":107},[77,5966,2625],{"class":2123},[77,5968,4448],{"class":83},[77,5970,4451],{"class":87},[77,5972,5973],{"class":79,"line":191},[77,5974,4023],{"class":87},[77,5976,5977,5979,5981,5983,5985,5987,5989,5991,5993,5995,5997,5999],{"class":79,"line":1543},[77,5978,5676],{"class":2123},[77,5980,2622],{"class":87},[77,5982,2625],{"class":2123},[77,5984,5507],{"class":87},[77,5986,268],{"class":2123},[77,5988,2120],{"class":94},[77,5990,5514],{"class":87},[77,5992,260],{"class":2123},[77,5994,3059],{"class":94},[77,5996,5514],{"class":87},[77,5998,4767],{"class":2123},[77,6000,2628],{"class":87},[77,6002,6003],{"class":79,"line":1549},[77,6004,4505],{"class":87},[77,6006,6007,6009,6011,6013,6015,6017,6019,6021,6023,6026,6028],{"class":79,"line":1566},[77,6008,5878],{"class":2123},[77,6010,2622],{"class":87},[77,6012,2625],{"class":2123},[77,6014,5885],{"class":87},[77,6016,268],{"class":2123},[77,6018,2120],{"class":94},[77,6020,5892],{"class":87},[77,6022,4064],{"class":2123},[77,6024,6025],{"class":87},"i;j",[77,6027,4767],{"class":2123},[77,6029,2628],{"class":87},[77,6031,6032],{"class":79,"line":1572},[77,6033,4985],{"class":87},[77,6035,6036,6038,6040,6042,6044,6046,6048,6050,6052,6055,6057,6059,6061,6063,6065,6068,6070,6072],{"class":79,"line":1589},[77,6037,4990],{"class":87},[77,6039,3655],{"class":2123},[77,6041,3080],{"class":87},[77,6043,3655],{"class":2123},[77,6045,5915],{"class":271},[77,6047,3655],{"class":2123},[77,6049,646],{"class":87},[77,6051,3655],{"class":2123},[77,6053,6054],{"class":271},"\"=\"",[77,6056,3655],{"class":2123},[77,6058,646],{"class":87},[77,6060,3068],{"class":2123},[77,6062,3080],{"class":87},[77,6064,3655],{"class":2123},[77,6066,6067],{"class":271},"'",[77,6069,3712],{"class":94},[77,6071,6067],{"class":271},[77,6073,104],{"class":87},[77,6075,6076],{"class":79,"line":1595},[77,6077,5004],{"class":87},[77,6079,6080,6082,6084],{"class":79,"line":4088},[77,6081,5926],{"class":87},[77,6083,3655],{"class":2123},[77,6085,3677],{"class":87},[77,6087,6088],{"class":79,"line":4093},[77,6089,4662],{"class":87},[77,6091,6092],{"class":79,"line":4099},[77,6093,110],{"class":87},[19,6095,6097],{"id":6096},"_163跳出语句","1.6.3跳出语句",[139,6099,6100],{},[54,6101,6102],{},"break语句\n作用：用于跳出选择结构或者循环结构",[24,6104,6105],{},"break使用时机：",[51,6107,6108,6111,6114],{},[54,6109,6110],{},"出现在switch条件语句中，作用是终止case并跳出switch",[54,6112,6113],{},"出现在循环结构中，作用是跳出当前的循环结构",[54,6115,6116],{},"出现在嵌套循环中，跳出最近的内层循环语句",[139,6118,6119,6122],{"start":91},[54,6120,6121],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[54,6123,6124],{},"goto语句\n语法：goto 标记;",[24,6126,6127],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[67,6129,6131],{"className":2610,"code":6130,"language":2612,"meta":72,"style":72},"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",[74,6132,6133,6141,6145,6158,6168,6181,6194,6207,6215,6231],{"__ignoreMap":72},[77,6134,6135,6137,6139],{"class":79,"line":80},[77,6136,2625],{"class":2123},[77,6138,4448],{"class":83},[77,6140,4451],{"class":87},[77,6142,6143],{"class":79,"line":91},[77,6144,4023],{"class":87},[77,6146,6147,6149,6151,6154,6156],{"class":79,"line":107},[77,6148,4028],{"class":87},[77,6150,3655],{"class":2123},[77,6152,6153],{"class":271},"\"1\"",[77,6155,3655],{"class":2123},[77,6157,3677],{"class":87},[77,6159,6160,6163,6166],{"class":79,"line":191},[77,6161,6162],{"class":2123},"    goto",[77,6164,6165],{"class":83}," FLAG",[77,6167,104],{"class":87},[77,6169,6170,6172,6174,6177,6179],{"class":79,"line":1543},[77,6171,4028],{"class":87},[77,6173,3655],{"class":2123},[77,6175,6176],{"class":271},"\"2\"",[77,6178,3655],{"class":2123},[77,6180,3677],{"class":87},[77,6182,6183,6185,6187,6190,6192],{"class":79,"line":1549},[77,6184,4028],{"class":87},[77,6186,3655],{"class":2123},[77,6188,6189],{"class":271},"\"3\"",[77,6191,3655],{"class":2123},[77,6193,3677],{"class":87},[77,6195,6196,6198,6200,6203,6205],{"class":79,"line":1566},[77,6197,4028],{"class":87},[77,6199,3655],{"class":2123},[77,6201,6202],{"class":271},"\"4\"",[77,6204,3655],{"class":2123},[77,6206,3677],{"class":87},[77,6208,6209,6212],{"class":79,"line":1572},[77,6210,6211],{"class":83},"    FLAG",[77,6213,6214],{"class":87},":\n",[77,6216,6217,6219,6221,6224,6226,6228],{"class":79,"line":1589},[77,6218,4028],{"class":87},[77,6220,3655],{"class":2123},[77,6222,6223],{"class":271},"\"5\"",[77,6225,3655],{"class":2123},[77,6227,3720],{"class":87},[77,6229,6230],{"class":323},"\u002F\u002F跳过了2,3,4,直接到5\n",[77,6232,6233],{"class":79,"line":1595},[77,6234,110],{"class":87},[14,6236,6238],{"id":6237},"_17数组","1.7数组",[19,6240,6242],{"id":6241},"_171一维数组","1.7.1一维数组",[139,6244,6245],{},[54,6246,6247],{},"一维数组定义方式",[2755,6249,6250,6260],{},[2758,6251,6252],{},[2761,6253,6254,6257],{},[2764,6255,6256],{},"方式",[2764,6258,6259],{},"注意事项",[2801,6261,6262,6276,6286],{},[2761,6263,6264,6270],{},[2806,6265,6266,6267,2675],{},"数据类型 数组名",[77,6268,6269],{},"数组长度",[2806,6271,6272,6273,6275],{},"这种方式是先定义再arr",[77,6274,646],{},"赋值",[2761,6277,6278,6283],{},[2806,6279,6266,6280,6282],{},[77,6281,6269],{},"={值1,值2....};",[2806,6284,6285],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2761,6287,6288,6292],{},[2806,6289,6266,6290,6282],{},[77,6291],{},[2806,6293,6294,6295,6297],{},"int arr",[77,6296],{},";这是不正确的，按照这样的方式定义必须有初始长度",[139,6299,6300],{"start":91},[54,6301,6302],{},"一维数组数组名\n用途：",[51,6304,6305],{},[54,6306,6307],{},"1.可以统计整个数组在内存中的长度：",[67,6309,6311],{"className":2610,"code":6310,"language":2612,"meta":72,"style":72},"sizeof(arr);\nsizeof(arr[0]);\n",[74,6312,6313,6320],{"__ignoreMap":72},[77,6314,6315,6317],{"class":79,"line":80},[77,6316,2619],{"class":2123},[77,6318,6319],{"class":87},"(arr);\n",[77,6321,6322,6324,6327,6329],{"class":79,"line":91},[77,6323,2619],{"class":2123},[77,6325,6326],{"class":87},"(arr[",[77,6328,1939],{"class":94},[77,6330,6331],{"class":87},"]);\n",[51,6333,6334],{},[54,6335,6336],{},"2.可以获取数组在内存中的首地址:",[67,6338,6340],{"className":2610,"code":6339,"language":2612,"meta":72,"style":72},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[74,6341,6342,6347,6360,6365],{"__ignoreMap":72},[77,6343,6344],{"class":79,"line":80},[77,6345,6346],{"class":323},"\u002F\u002F查看16进制的首地址\n",[77,6348,6349,6351,6353,6356,6358],{"class":79,"line":91},[77,6350,3847],{"class":87},[77,6352,3655],{"class":2123},[77,6354,6355],{"class":87},"arr",[77,6357,3655],{"class":2123},[77,6359,3677],{"class":87},[77,6361,6362],{"class":79,"line":107},[77,6363,6364],{"class":323},"\u002F\u002F看10进制数\n",[77,6366,6367,6369,6371,6373,6375,6377,6379,6382,6384,6386,6388],{"class":79,"line":191},[77,6368,3847],{"class":87},[77,6370,3655],{"class":2123},[77,6372,2622],{"class":87},[77,6374,2625],{"class":2123},[77,6376,3043],{"class":87},[77,6378,2967],{"class":2123},[77,6380,6381],{"class":87},"arr[",[77,6383,1939],{"class":94},[77,6385,3552],{"class":87},[77,6387,3655],{"class":2123},[77,6389,3677],{"class":87},[24,6391,6392],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[51,6394,6395],{},[54,6396,6397],{},"1️⃣五只小猪称体重",[67,6399,6401],{"className":2610,"code":6400,"language":2612,"meta":72,"style":72},"#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",[74,6402,6403,6409,6419,6427,6431,6471,6484,6510,6514,6526,6530,6540,6544,6548,6561,6571],{"__ignoreMap":72},[77,6404,6405,6407],{"class":79,"line":80},[77,6406,4425],{"class":2123},[77,6408,4428],{"class":271},[77,6410,6411,6413,6415,6417],{"class":79,"line":91},[77,6412,4433],{"class":2123},[77,6414,4436],{"class":2123},[77,6416,4439],{"class":83},[77,6418,104],{"class":87},[77,6420,6421,6423,6425],{"class":79,"line":107},[77,6422,2625],{"class":2123},[77,6424,4448],{"class":83},[77,6426,4451],{"class":87},[77,6428,6429],{"class":79,"line":191},[77,6430,4023],{"class":87},[77,6432,6433,6435,6438,6440,6442,6444,6446,6449,6451,6454,6456,6458,6460,6463,6465,6468],{"class":79,"line":1543},[77,6434,4460],{"class":2123},[77,6436,6437],{"class":87}," arr[",[77,6439,2933],{"class":94},[77,6441,3552],{"class":87},[77,6443,268],{"class":2123},[77,6445,3509],{"class":87},[77,6447,6448],{"class":94},"300",[77,6450,2992],{"class":87},[77,6452,6453],{"class":94},"350",[77,6455,2992],{"class":87},[77,6457,4198],{"class":94},[77,6459,2992],{"class":87},[77,6461,6462],{"class":94},"400",[77,6464,2992],{"class":87},[77,6466,6467],{"class":94},"250",[77,6469,6470],{"class":87},"};\n",[77,6472,6473,6475,6478,6480,6482],{"class":79,"line":1549},[77,6474,4460],{"class":2123},[77,6476,6477],{"class":87}," tmp",[77,6479,268],{"class":2123},[77,6481,1939],{"class":94},[77,6483,104],{"class":87},[77,6485,6486,6488,6490,6492,6494,6496,6498,6500,6502,6504,6506,6508],{"class":79,"line":1566},[77,6487,5676],{"class":2123},[77,6489,4134],{"class":87},[77,6491,2625],{"class":2123},[77,6493,5507],{"class":87},[77,6495,268],{"class":2123},[77,6497,1939],{"class":94},[77,6499,5514],{"class":87},[77,6501,260],{"class":2123},[77,6503,2933],{"class":94},[77,6505,5514],{"class":87},[77,6507,4767],{"class":2123},[77,6509,2628],{"class":87},[77,6511,6512],{"class":79,"line":1572},[77,6513,4505],{"class":87},[77,6515,6516,6518,6521,6523],{"class":79,"line":1589},[77,6517,4972],{"class":2123},[77,6519,6520],{"class":87},"(tmp",[77,6522,260],{"class":2123},[77,6524,6525],{"class":87},"arr[i])\n",[77,6527,6528],{"class":79,"line":1595},[77,6529,4985],{"class":87},[77,6531,6532,6535,6537],{"class":79,"line":4088},[77,6533,6534],{"class":87},"            tmp",[77,6536,268],{"class":2123},[77,6538,6539],{"class":87},"arr[i];\n",[77,6541,6542],{"class":79,"line":4093},[77,6543,5004],{"class":87},[77,6545,6546],{"class":79,"line":4099},[77,6547,4662],{"class":87},[77,6549,6550,6552,6554,6557,6559],{"class":79,"line":4104},[77,6551,4028],{"class":87},[77,6553,3655],{"class":2123},[77,6555,6556],{"class":87},"tmp",[77,6558,3655],{"class":2123},[77,6560,3677],{"class":87},[77,6562,6563,6566,6569],{"class":79,"line":4118},[77,6564,6565],{"class":2123},"    return",[77,6567,6568],{"class":94}," 0",[77,6570,104],{"class":87},[77,6572,6573],{"class":79,"line":4123},[77,6574,110],{"class":87},[51,6576,6577],{},[54,6578,6579],{},"2️⃣数组元素逆置",[67,6581,6583],{"className":2610,"code":6582,"language":2612,"meta":72,"style":72},"\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",[74,6584,6585,6590,6596,6606,6614,6618,6653,6669,6701,6714,6719,6724,6736,6746,6756,6761,6770,6780,6785,6790,6817,6821,6837,6841,6852,6861],{"__ignoreMap":72},[77,6586,6587],{"class":79,"line":80},[77,6588,6589],{"class":323},"\u002F\u002F元素逆置\n",[77,6591,6592,6594],{"class":79,"line":91},[77,6593,4425],{"class":2123},[77,6595,4428],{"class":271},[77,6597,6598,6600,6602,6604],{"class":79,"line":107},[77,6599,4433],{"class":2123},[77,6601,4436],{"class":2123},[77,6603,4439],{"class":83},[77,6605,104],{"class":87},[77,6607,6608,6610,6612],{"class":79,"line":191},[77,6609,2625],{"class":2123},[77,6611,4448],{"class":83},[77,6613,4451],{"class":87},[77,6615,6616],{"class":79,"line":1543},[77,6617,4023],{"class":87},[77,6619,6620,6623,6625,6627,6629,6631,6633,6635,6637,6639,6641,6643,6645,6647,6649,6651],{"class":79,"line":1549},[77,6621,6622],{"class":2123},"   int",[77,6624,6437],{"class":87},[77,6626,2933],{"class":94},[77,6628,3552],{"class":87},[77,6630,268],{"class":2123},[77,6632,3509],{"class":87},[77,6634,2120],{"class":94},[77,6636,2992],{"class":87},[77,6638,2696],{"class":94},[77,6640,2992],{"class":87},[77,6642,2690],{"class":94},[77,6644,2992],{"class":87},[77,6646,2907],{"class":94},[77,6648,2992],{"class":87},[77,6650,2933],{"class":94},[77,6652,6470],{"class":87},[77,6654,6655,6657,6660,6662,6664,6666],{"class":79,"line":1566},[77,6656,6622],{"class":2123},[77,6658,6659],{"class":87}," start",[77,6661,268],{"class":2123},[77,6663,1939],{"class":94},[77,6665,2675],{"class":87},[77,6667,6668],{"class":323},"\u002F\u002F起始下标\n",[77,6670,6671,6673,6676,6679,6682,6685,6687,6689,6692,6694,6696,6698],{"class":79,"line":1572},[77,6672,6622],{"class":2123},[77,6674,6675],{"class":87}," end",[77,6677,6678],{"class":2123},"=sizeof",[77,6680,6681],{"class":87},"(arr)",[77,6683,6684],{"class":2123},"\u002Fsizeof",[77,6686,6326],{"class":87},[77,6688,1939],{"class":94},[77,6690,6691],{"class":87},"])",[77,6693,3145],{"class":2123},[77,6695,2120],{"class":94},[77,6697,2675],{"class":87},[77,6699,6700],{"class":323},"\u002F\u002F结束下标\n",[77,6702,6703,6706,6709,6711],{"class":79,"line":1589},[77,6704,6705],{"class":2123},"   while",[77,6707,6708],{"class":87}," (start",[77,6710,260],{"class":2123},[77,6712,6713],{"class":87},"end)\n",[77,6715,6716],{"class":79,"line":1595},[77,6717,6718],{"class":87},"   {\n",[77,6720,6721],{"class":79,"line":4088},[77,6722,6723],{"class":323},"    \u002F\u002F实现元素互换代码\n",[77,6725,6726,6728,6731,6733],{"class":79,"line":4093},[77,6727,4460],{"class":2123},[77,6729,6730],{"class":87}," temp",[77,6732,268],{"class":2123},[77,6734,6735],{"class":87},"arr[start];\n",[77,6737,6738,6741,6743],{"class":79,"line":4099},[77,6739,6740],{"class":87},"    arr[start]",[77,6742,268],{"class":2123},[77,6744,6745],{"class":87},"arr[end];\n",[77,6747,6748,6751,6753],{"class":79,"line":4104},[77,6749,6750],{"class":87},"    arr[end]",[77,6752,268],{"class":2123},[77,6754,6755],{"class":87},"temp;\n",[77,6757,6758],{"class":79,"line":4118},[77,6759,6760],{"class":323},"    \u002F\u002F下标更新\n",[77,6762,6763,6766,6768],{"class":79,"line":4123},[77,6764,6765],{"class":87},"    start",[77,6767,4767],{"class":2123},[77,6769,104],{"class":87},[77,6771,6772,6775,6778],{"class":79,"line":4129},[77,6773,6774],{"class":87},"    end",[77,6776,6777],{"class":2123},"--",[77,6779,104],{"class":87},[77,6781,6782],{"class":79,"line":4150},[77,6783,6784],{"class":87},"   }\n",[77,6786,6787],{"class":79,"line":4155},[77,6788,6789],{"class":323},"   \u002F\u002F输出逆置后的数组\n",[77,6791,6792,6795,6797,6799,6801,6803,6805,6807,6809,6811,6813,6815],{"class":79,"line":4169},[77,6793,6794],{"class":2123},"   for",[77,6796,4134],{"class":87},[77,6798,2625],{"class":2123},[77,6800,5507],{"class":87},[77,6802,268],{"class":2123},[77,6804,1939],{"class":94},[77,6806,5514],{"class":87},[77,6808,260],{"class":2123},[77,6810,2933],{"class":94},[77,6812,5514],{"class":87},[77,6814,4767],{"class":2123},[77,6816,2628],{"class":87},[77,6818,6819],{"class":79,"line":4174},[77,6820,6718],{"class":87},[77,6822,6823,6825,6827,6830,6832,6835],{"class":79,"line":4203},[77,6824,4028],{"class":87},[77,6826,3655],{"class":2123},[77,6828,6829],{"class":87},"arr[i]",[77,6831,3655],{"class":2123},[77,6833,6834],{"class":271},"\" \"",[77,6836,104],{"class":87},[77,6838,6839],{"class":79,"line":4208},[77,6840,6784],{"class":87},[77,6842,6843,6846,6848,6850],{"class":79,"line":4225},[77,6844,6845],{"class":83},"   system",[77,6847,2622],{"class":87},[77,6849,4783],{"class":271},[77,6851,5194],{"class":87},[77,6853,6854,6857,6859],{"class":79,"line":4230},[77,6855,6856],{"class":2123},"   return",[77,6858,6568],{"class":94},[77,6860,104],{"class":87},[77,6862,6863],{"class":79,"line":4235},[77,6864,110],{"class":87},[51,6866,6867],{},[54,6868,6869],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[67,6871,6873],{"className":2610,"code":6872,"language":2612,"meta":72,"style":72},"\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",[74,6874,6875,6880,6886,6896,6904,6908,6960,6973,6999,7003,7017,7021,7026,7031,7061,7065,7070,7104,7108,7113,7133,7138,7150,7166,7181,7186,7190,7194,7207,7233,7237,7251,7255,7263],{"__ignoreMap":72},[77,6876,6877],{"class":79,"line":80},[77,6878,6879],{"class":323},"\u002F\u002F冒泡排序,升序\n",[77,6881,6882,6884],{"class":79,"line":91},[77,6883,4425],{"class":2123},[77,6885,4428],{"class":271},[77,6887,6888,6890,6892,6894],{"class":79,"line":107},[77,6889,4433],{"class":2123},[77,6891,4436],{"class":2123},[77,6893,4439],{"class":83},[77,6895,104],{"class":87},[77,6897,6898,6900,6902],{"class":79,"line":191},[77,6899,2625],{"class":2123},[77,6901,4448],{"class":83},[77,6903,4451],{"class":87},[77,6905,6906],{"class":79,"line":1543},[77,6907,4023],{"class":87},[77,6909,6910,6912,6914,6916,6919,6921,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944,6946,6948,6950,6952,6954,6956,6958],{"class":79,"line":1549},[77,6911,4460],{"class":2123},[77,6913,6437],{"class":87},[77,6915,3034],{"class":94},[77,6917,6918],{"class":87},"] ",[77,6920,268],{"class":2123},[77,6922,6923],{"class":87}," {",[77,6925,2907],{"class":94},[77,6927,2992],{"class":87},[77,6929,2696],{"class":94},[77,6931,2992],{"class":87},[77,6933,3009],{"class":94},[77,6935,2992],{"class":87},[77,6937,1939],{"class":94},[77,6939,2992],{"class":87},[77,6941,2933],{"class":94},[77,6943,2992],{"class":87},[77,6945,2983],{"class":94},[77,6947,2992],{"class":87},[77,6949,2120],{"class":94},[77,6951,2992],{"class":87},[77,6953,2690],{"class":94},[77,6955,2992],{"class":87},[77,6957,3034],{"class":94},[77,6959,6470],{"class":87},[77,6961,6962,6964,6966,6969,6971],{"class":79,"line":1566},[77,6963,4028],{"class":87},[77,6965,3655],{"class":2123},[77,6967,6968],{"class":271},"\"排序前：\"",[77,6970,3655],{"class":2123},[77,6972,3677],{"class":87},[77,6974,6975,6977,6979,6981,6983,6985,6987,6989,6991,6993,6995,6997],{"class":79,"line":1572},[77,6976,5676],{"class":2123},[77,6978,4134],{"class":87},[77,6980,2625],{"class":2123},[77,6982,5507],{"class":87},[77,6984,268],{"class":2123},[77,6986,1939],{"class":94},[77,6988,5514],{"class":87},[77,6990,260],{"class":2123},[77,6992,3034],{"class":94},[77,6994,5514],{"class":87},[77,6996,4767],{"class":2123},[77,6998,2628],{"class":87},[77,7000,7001],{"class":79,"line":1589},[77,7002,4505],{"class":87},[77,7004,7005,7007,7009,7011,7013,7015],{"class":79,"line":1595},[77,7006,5926],{"class":87},[77,7008,3655],{"class":2123},[77,7010,6829],{"class":87},[77,7012,3655],{"class":2123},[77,7014,6834],{"class":271},[77,7016,104],{"class":87},[77,7018,7019],{"class":79,"line":4088},[77,7020,4662],{"class":87},[77,7022,7023],{"class":79,"line":4093},[77,7024,7025],{"class":323},"    \u002F\u002F开始冒泡排序\n",[77,7027,7028],{"class":79,"line":4099},[77,7029,7030],{"class":323},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[77,7032,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053,7055,7057,7059],{"class":79,"line":4104},[77,7034,5676],{"class":2123},[77,7036,4134],{"class":87},[77,7038,2625],{"class":2123},[77,7040,5507],{"class":87},[77,7042,268],{"class":2123},[77,7044,1939],{"class":94},[77,7046,5514],{"class":87},[77,7048,260],{"class":2123},[77,7050,3034],{"class":94},[77,7052,3145],{"class":2123},[77,7054,2120],{"class":94},[77,7056,5514],{"class":87},[77,7058,4767],{"class":2123},[77,7060,2628],{"class":87},[77,7062,7063],{"class":79,"line":4118},[77,7064,4505],{"class":87},[77,7066,7067],{"class":79,"line":4123},[77,7068,7069],{"class":323},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[77,7071,7072,7074,7076,7078,7080,7082,7084,7086,7088,7090,7092,7094,7096,7098,7100,7102],{"class":79,"line":4129},[77,7073,5878],{"class":2123},[77,7075,4134],{"class":87},[77,7077,2625],{"class":2123},[77,7079,5885],{"class":87},[77,7081,268],{"class":2123},[77,7083,1939],{"class":94},[77,7085,5892],{"class":87},[77,7087,260],{"class":2123},[77,7089,3034],{"class":94},[77,7091,3145],{"class":2123},[77,7093,646],{"class":87},[77,7095,3145],{"class":2123},[77,7097,2120],{"class":94},[77,7099,5892],{"class":87},[77,7101,4767],{"class":2123},[77,7103,2628],{"class":87},[77,7105,7106],{"class":79,"line":4150},[77,7107,4985],{"class":87},[77,7109,7110],{"class":79,"line":4155},[77,7111,7112],{"class":323},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[77,7114,7115,7118,7121,7123,7126,7128,7130],{"class":79,"line":4169},[77,7116,7117],{"class":2123},"            if",[77,7119,7120],{"class":87},"(arr[j]",[77,7122,3572],{"class":2123},[77,7124,7125],{"class":87},"arr[j",[77,7127,3094],{"class":2123},[77,7129,2120],{"class":94},[77,7131,7132],{"class":87},"])\n",[77,7134,7135],{"class":79,"line":4174},[77,7136,7137],{"class":87},"            {\n",[77,7139,7140,7143,7145,7147],{"class":79,"line":4203},[77,7141,7142],{"class":2123},"                int",[77,7144,6730],{"class":87},[77,7146,268],{"class":2123},[77,7148,7149],{"class":87},"arr[j];\n",[77,7151,7152,7155,7157,7159,7161,7163],{"class":79,"line":4208},[77,7153,7154],{"class":87},"                arr[j]",[77,7156,268],{"class":2123},[77,7158,7125],{"class":87},[77,7160,3094],{"class":2123},[77,7162,2120],{"class":94},[77,7164,7165],{"class":87},"];\n",[77,7167,7168,7171,7173,7175,7177,7179],{"class":79,"line":4225},[77,7169,7170],{"class":87},"                arr[j",[77,7172,3094],{"class":2123},[77,7174,2120],{"class":94},[77,7176,3552],{"class":87},[77,7178,268],{"class":2123},[77,7180,6755],{"class":87},[77,7182,7183],{"class":79,"line":4230},[77,7184,7185],{"class":87},"            }\n",[77,7187,7188],{"class":79,"line":4235},[77,7189,5004],{"class":87},[77,7191,7192],{"class":79,"line":4240},[77,7193,4662],{"class":87},[77,7195,7196,7198,7200,7203,7205],{"class":79,"line":4254},[77,7197,4028],{"class":87},[77,7199,3655],{"class":2123},[77,7201,7202],{"class":271},"\"排序后：\"",[77,7204,3655],{"class":2123},[77,7206,3677],{"class":87},[77,7208,7209,7211,7213,7215,7217,7219,7221,7223,7225,7227,7229,7231],{"class":79,"line":4259},[77,7210,5676],{"class":2123},[77,7212,4134],{"class":87},[77,7214,2625],{"class":2123},[77,7216,5507],{"class":87},[77,7218,268],{"class":2123},[77,7220,1939],{"class":94},[77,7222,5514],{"class":87},[77,7224,260],{"class":2123},[77,7226,3034],{"class":94},[77,7228,5514],{"class":87},[77,7230,4767],{"class":2123},[77,7232,2628],{"class":87},[77,7234,7235],{"class":79,"line":5052},[77,7236,4505],{"class":87},[77,7238,7239,7241,7243,7245,7247,7249],{"class":79,"line":5066},[77,7240,5926],{"class":87},[77,7242,3655],{"class":2123},[77,7244,6829],{"class":87},[77,7246,3655],{"class":2123},[77,7248,6834],{"class":271},[77,7250,104],{"class":87},[77,7252,7253],{"class":79,"line":5074},[77,7254,4662],{"class":87},[77,7256,7257,7259,7261],{"class":79,"line":5079},[77,7258,6565],{"class":2123},[77,7260,6568],{"class":94},[77,7262,104],{"class":87},[77,7264,7265],{"class":79,"line":5085},[77,7266,110],{"class":87},[19,7268,7270],{"id":7269},"_172二维数组","1.7.2二维数组",[139,7272,7273],{},[54,7274,7275],{},"二维数组的四种定义方式",[2755,7277,7278,7287],{},[2758,7279,7280],{},[2761,7281,7282,7285],{},[2764,7283,7284],{},"序号",[2764,7286,6256],{},[2801,7288,7289,7299,7308,7317,7326],{},[2761,7290,7291,7293],{},[2806,7292,2120],{},[2806,7294,7295,7296,2675],{},"数据类型 数组名[行数]",[77,7297,7298],{},"列数",[2761,7300,7301,7303],{},[2806,7302,2696],{},[2806,7304,7295,7305,7307],{},[77,7306,7298],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2761,7309,7310,7312],{},[2806,7311,2690],{},[2806,7313,7295,7314,7316],{},[77,7315,7298],{},"={数据1,数据2,数据3...}",[2761,7318,7319,7321],{},[2806,7320,2907],{},[2806,7322,7323,7324,7316],{},"数据类型 数组名[]",[77,7325,7298],{},[2761,7327,7328,7331],{},[2806,7329,7330],{},"注意：不能只省略列数",[2806,7332],{},[139,7334,7335],{"start":91},[54,7336,7337],{},"二维数组数组名",[51,7339,7340,7343],{},[54,7341,7342],{},"1.查看二维数组所占内存空间",[54,7344,7345],{},"2.获取二维数组首地址",[24,7347,7348],{},"已知二维数组，求二维数组的行数与列数",[67,7350,7352],{"className":2610,"code":7351,"language":2612,"meta":72,"style":72},"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",[74,7353,7354,7362,7366,7384,7388,7406,7422,7427,7452,7485],{"__ignoreMap":72},[77,7355,7356,7358,7360],{"class":79,"line":80},[77,7357,2625],{"class":2123},[77,7359,4448],{"class":83},[77,7361,4451],{"class":87},[77,7363,7364],{"class":79,"line":91},[77,7365,4023],{"class":87},[77,7367,7368,7370,7372,7374,7377,7379,7381],{"class":79,"line":107},[77,7369,4460],{"class":2123},[77,7371,6437],{"class":87},[77,7373,2696],{"class":94},[77,7375,7376],{"class":87},"][",[77,7378,2690],{"class":94},[77,7380,3552],{"class":87},[77,7382,7383],{"class":2123},"=\n",[77,7385,7386],{"class":79,"line":191},[77,7387,4505],{"class":87},[77,7389,7390,7393,7395,7397,7399,7401,7403],{"class":79,"line":1543},[77,7391,7392],{"class":87},"        {",[77,7394,2120],{"class":94},[77,7396,2992],{"class":87},[77,7398,2696],{"class":94},[77,7400,2992],{"class":87},[77,7402,2690],{"class":94},[77,7404,7405],{"class":87},"},\n",[77,7407,7408,7410,7412,7414,7416,7418,7420],{"class":79,"line":1549},[77,7409,7392],{"class":87},[77,7411,2907],{"class":94},[77,7413,2992],{"class":87},[77,7415,2933],{"class":94},[77,7417,2992],{"class":87},[77,7419,2958],{"class":94},[77,7421,110],{"class":87},[77,7423,7424],{"class":79,"line":1566},[77,7425,7426],{"class":87},"    };\n",[77,7428,7429,7431,7433,7436,7438,7440,7442,7444,7446,7448,7450],{"class":79,"line":1572},[77,7430,4028],{"class":87},[77,7432,3655],{"class":2123},[77,7434,7435],{"class":271},"\"二维数组的行数\"",[77,7437,3850],{"class":2123},[77,7439,6681],{"class":87},[77,7441,6684],{"class":2123},[77,7443,6326],{"class":87},[77,7445,1939],{"class":94},[77,7447,6691],{"class":87},[77,7449,3655],{"class":2123},[77,7451,3677],{"class":87},[77,7453,7454,7456,7458,7461,7463,7465,7467,7469,7471,7473,7475,7477,7479,7481,7483],{"class":79,"line":1589},[77,7455,4028],{"class":87},[77,7457,3655],{"class":2123},[77,7459,7460],{"class":271},"\"二维数组的列数\"",[77,7462,3850],{"class":2123},[77,7464,6326],{"class":87},[77,7466,1939],{"class":94},[77,7468,6691],{"class":87},[77,7470,6684],{"class":2123},[77,7472,6326],{"class":87},[77,7474,1939],{"class":94},[77,7476,7376],{"class":87},[77,7478,1939],{"class":94},[77,7480,6691],{"class":87},[77,7482,3655],{"class":2123},[77,7484,3677],{"class":87},[77,7486,7487],{"class":79,"line":1595},[77,7488,110],{"class":87},[24,7490,7491],{},"查看二维数组首地址",[67,7493,7495],{"className":2610,"code":7494,"language":2612,"meta":72,"style":72},"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",[74,7496,7497,7514,7540,7565],{"__ignoreMap":72},[77,7498,7499,7501,7503,7506,7508,7510,7512],{"class":79,"line":80},[77,7500,3847],{"class":87},[77,7502,3655],{"class":2123},[77,7504,7505],{"class":271},"\"二维数组首地址：\"",[77,7507,3655],{"class":2123},[77,7509,6355],{"class":87},[77,7511,3655],{"class":2123},[77,7513,3677],{"class":87},[77,7515,7516,7518,7520,7523,7525,7527,7529,7532,7534,7536,7538],{"class":79,"line":91},[77,7517,3847],{"class":87},[77,7519,3655],{"class":2123},[77,7521,7522],{"class":271},"\"二维数组第一行的首地址：\"",[77,7524,3655],{"class":2123},[77,7526,2622],{"class":87},[77,7528,2625],{"class":2123},[77,7530,7531],{"class":87},")arr[",[77,7533,1939],{"class":94},[77,7535,3552],{"class":87},[77,7537,3655],{"class":2123},[77,7539,3677],{"class":87},[77,7541,7542,7544,7546,7549,7551,7553,7555,7557,7559,7561,7563],{"class":79,"line":107},[77,7543,3847],{"class":87},[77,7545,3655],{"class":2123},[77,7547,7548],{"class":271},"\"二维数组第二行的首地址：\"",[77,7550,3655],{"class":2123},[77,7552,2622],{"class":87},[77,7554,2625],{"class":2123},[77,7556,7531],{"class":87},[77,7558,2120],{"class":94},[77,7560,3552],{"class":87},[77,7562,3655],{"class":2123},[77,7564,3677],{"class":87},[77,7566,7567,7569,7571,7574,7576,7578,7580,7582,7584,7586,7588,7590,7592,7594,7596,7598],{"class":79,"line":191},[77,7568,3847],{"class":87},[77,7570,3655],{"class":2123},[77,7572,7573],{"class":271},"\"二维数组第一个元素的首地址:\"",[77,7575,3655],{"class":2123},[77,7577,2622],{"class":87},[77,7579,2625],{"class":2123},[77,7581,3043],{"class":87},[77,7583,2967],{"class":2123},[77,7585,6381],{"class":87},[77,7587,1939],{"class":94},[77,7589,7376],{"class":87},[77,7591,1939],{"class":94},[77,7593,3552],{"class":87},[77,7595,3655],{"class":2123},[77,7597,3720],{"class":87},[77,7599,7600],{"class":323},"\u002F\u002F对于数，要加取址符\n",[2520,7602,7603],{},"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":72,"searchDepth":91,"depth":91,"links":7605},[7606,7607,7608,7616,7617,7623,7628],{"id":2565,"depth":91,"text":2566},{"id":2572,"depth":91,"text":2573},{"id":2587,"depth":91,"text":2588,"children":7609},[7610,7611,7612,7613,7614,7615],{"id":2591,"depth":107,"text":2592},{"id":2638,"depth":107,"text":2639},{"id":2704,"depth":107,"text":2705},{"id":3636,"depth":107,"text":3637},{"id":3726,"depth":107,"text":3727},{"id":3821,"depth":107,"text":3822},{"id":3863,"depth":91,"text":3864},{"id":3931,"depth":91,"text":3932,"children":7618},[7619,7620,7621,7622],{"id":3935,"depth":107,"text":3936},{"id":3956,"depth":107,"text":3957},{"id":3965,"depth":107,"text":3966},{"id":3974,"depth":107,"text":3975},{"id":3983,"depth":91,"text":3984,"children":7624},[7625,7626,7627],{"id":3987,"depth":107,"text":3988},{"id":4680,"depth":107,"text":4681},{"id":6096,"depth":107,"text":6097},{"id":6237,"depth":91,"text":6238,"children":7629},[7630,7631],{"id":6241,"depth":107,"text":6242},{"id":7269,"depth":107,"text":7270},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2557,"description":72},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7638,"title":7639,"body":7640,"description":72,"extension":2547,"meta":8740,"navigation":2549,"path":8741,"seo":8742,"stem":8743,"__hash__":8744},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7641,"toc":8732},[7642,7645,7649,7657,7665,7668,7734,7738,7741,7817,7821,7824,7827,7830,8043,8047,8052,8116,8121,8188,8193,8284,8287,8392,8396,8399,8405,8549,8553,8556,8570,8573,8618,8621,8729],[10,7643,7639],{"id":7644},"_2函数",[14,7646,7648],{"id":7647},"_21函数概述","2.1函数概述",[139,7650,7651,7654],{},[54,7652,7653],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[54,7655,7656],{},"语法：",[67,7658,7663],{"className":7659,"code":7661,"language":7662,"meta":72},[7660],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[74,7664,7661],{"__ignoreMap":72},[24,7666,7667],{},"小案例",[67,7669,7671],{"className":2610,"code":7670,"language":2612,"meta":72,"style":72},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[74,7672,7673,7678,7702,7706,7723,7730],{"__ignoreMap":72},[77,7674,7675],{"class":79,"line":80},[77,7676,7677],{"class":323},"\u002F\u002Fnum1,num2形参\n",[77,7679,7680,7682,7685,7687,7689,7693,7695,7697,7700],{"class":79,"line":91},[77,7681,2625],{"class":2123},[77,7683,7684],{"class":83}," add",[77,7686,2622],{"class":87},[77,7688,2625],{"class":2123},[77,7690,7692],{"class":7691},"s4XuR"," num1",[77,7694,2992],{"class":87},[77,7696,2625],{"class":2123},[77,7698,7699],{"class":7691}," num2",[77,7701,2628],{"class":87},[77,7703,7704],{"class":79,"line":107},[77,7705,4023],{"class":87},[77,7707,7708,7710,7713,7715,7718,7720],{"class":79,"line":191},[77,7709,4460],{"class":2123},[77,7711,7712],{"class":87}," sum",[77,7714,268],{"class":2123},[77,7716,7717],{"class":87},"num1",[77,7719,3094],{"class":2123},[77,7721,7722],{"class":87},"num2;\n",[77,7724,7725,7727],{"class":79,"line":1543},[77,7726,6565],{"class":2123},[77,7728,7729],{"class":87}," sum;\n",[77,7731,7732],{"class":79,"line":1549},[77,7733,110],{"class":87},[14,7735,7737],{"id":7736},"_22函数调用","2.2函数调用",[24,7739,7740],{},"调用刚刚写的求和函数",[67,7742,7744],{"className":2610,"code":7743,"language":2612,"meta":72,"style":72},"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",[74,7745,7746,7754,7758,7763,7775,7787,7796,7801,7813],{"__ignoreMap":72},[77,7747,7748,7750,7752],{"class":79,"line":80},[77,7749,2625],{"class":2123},[77,7751,4448],{"class":83},[77,7753,4451],{"class":87},[77,7755,7756],{"class":79,"line":91},[77,7757,4023],{"class":87},[77,7759,7760],{"class":79,"line":107},[77,7761,7762],{"class":323},"    \u002F\u002Fa,b实参\n",[77,7764,7765,7767,7769,7771,7773],{"class":79,"line":191},[77,7766,4460],{"class":2123},[77,7768,3876],{"class":87},[77,7770,268],{"class":2123},[77,7772,1939],{"class":94},[77,7774,104],{"class":87},[77,7776,7777,7779,7781,7783,7785],{"class":79,"line":1543},[77,7778,4460],{"class":2123},[77,7780,5308],{"class":87},[77,7782,268],{"class":2123},[77,7784,1939],{"class":94},[77,7786,104],{"class":87},[77,7788,7789,7791,7793],{"class":79,"line":1549},[77,7790,4487],{"class":87},[77,7792,3907],{"class":2123},[77,7794,7795],{"class":87},"a,b;\n",[77,7797,7798],{"class":79,"line":1566},[77,7799,7800],{"class":323},"    \u002F\u002F调用函数时，实参值传给了形参\n",[77,7802,7803,7805,7807,7810],{"class":79,"line":1572},[77,7804,4028],{"class":87},[77,7806,3655],{"class":2123},[77,7808,7809],{"class":83},"add",[77,7811,7812],{"class":87},"(a,b);\n",[77,7814,7815],{"class":79,"line":1589},[77,7816,110],{"class":87},[14,7818,7820],{"id":7819},"_23值传递","2.3值传递",[24,7822,7823],{},"值传递就是函数调用时实参将数值传给形参",[24,7825,7826],{},"值传递时，如果形参发生任何改变，不会影响实参",[24,7828,7829],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[67,7831,7833],{"className":2610,"code":7832,"language":2612,"meta":72,"style":72},"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",[74,7834,7835,7857,7861,7874,7891,7909,7920,7929,7938,7951,7967,7983,7992,7996,8004,8008,8020,8032,8039],{"__ignoreMap":72},[77,7836,7837,7840,7843,7845,7847,7849,7851,7853,7855],{"class":79,"line":80},[77,7838,7839],{"class":2123},"void",[77,7841,7842],{"class":83}," swap",[77,7844,2622],{"class":87},[77,7846,2625],{"class":2123},[77,7848,7692],{"class":7691},[77,7850,2992],{"class":87},[77,7852,2625],{"class":2123},[77,7854,7699],{"class":7691},[77,7856,2628],{"class":87},[77,7858,7859],{"class":79,"line":91},[77,7860,4023],{"class":87},[77,7862,7863,7865,7867,7870,7872],{"class":79,"line":107},[77,7864,4028],{"class":87},[77,7866,3655],{"class":2123},[77,7868,7869],{"class":271},"\"交换前：\"",[77,7871,3655],{"class":2123},[77,7873,3677],{"class":87},[77,7875,7876,7878,7880,7883,7885,7887,7889],{"class":79,"line":191},[77,7877,4028],{"class":87},[77,7879,3655],{"class":2123},[77,7881,7882],{"class":271},"\"num1=\"",[77,7884,3655],{"class":2123},[77,7886,7717],{"class":87},[77,7888,3655],{"class":2123},[77,7890,3677],{"class":87},[77,7892,7893,7895,7897,7900,7902,7905,7907],{"class":79,"line":1543},[77,7894,4028],{"class":87},[77,7896,3655],{"class":2123},[77,7898,7899],{"class":271},"\"num2=\"",[77,7901,3655],{"class":2123},[77,7903,7904],{"class":87},"num2",[77,7906,3655],{"class":2123},[77,7908,3677],{"class":87},[77,7910,7911,7913,7915,7917],{"class":79,"line":1549},[77,7912,4460],{"class":2123},[77,7914,6730],{"class":87},[77,7916,268],{"class":2123},[77,7918,7919],{"class":87},"num1;\n",[77,7921,7922,7925,7927],{"class":79,"line":1566},[77,7923,7924],{"class":87},"    num1",[77,7926,268],{"class":2123},[77,7928,7722],{"class":87},[77,7930,7931,7934,7936],{"class":79,"line":1572},[77,7932,7933],{"class":87},"    num2",[77,7935,268],{"class":2123},[77,7937,6755],{"class":87},[77,7939,7940,7942,7944,7947,7949],{"class":79,"line":1589},[77,7941,4028],{"class":87},[77,7943,3655],{"class":2123},[77,7945,7946],{"class":271},"\"交换后：\"",[77,7948,3655],{"class":2123},[77,7950,3677],{"class":87},[77,7952,7953,7955,7957,7959,7961,7963,7965],{"class":79,"line":1595},[77,7954,4028],{"class":87},[77,7956,3655],{"class":2123},[77,7958,7882],{"class":271},[77,7960,3655],{"class":2123},[77,7962,7717],{"class":87},[77,7964,3655],{"class":2123},[77,7966,3677],{"class":87},[77,7968,7969,7971,7973,7975,7977,7979,7981],{"class":79,"line":4088},[77,7970,4028],{"class":87},[77,7972,3655],{"class":2123},[77,7974,7899],{"class":271},[77,7976,3655],{"class":2123},[77,7978,7904],{"class":87},[77,7980,3655],{"class":2123},[77,7982,3677],{"class":87},[77,7984,7985,7987,7989],{"class":79,"line":4093},[77,7986,6565],{"class":2123},[77,7988,2675],{"class":87},[77,7990,7991],{"class":323},"\u002F\u002F或者不写\n",[77,7993,7994],{"class":79,"line":4099},[77,7995,110],{"class":87},[77,7997,7998,8000,8002],{"class":79,"line":4104},[77,7999,2625],{"class":2123},[77,8001,4448],{"class":83},[77,8003,4451],{"class":87},[77,8005,8006],{"class":79,"line":4118},[77,8007,4023],{"class":87},[77,8009,8010,8012,8014,8016,8018],{"class":79,"line":4123},[77,8011,4460],{"class":2123},[77,8013,3876],{"class":87},[77,8015,268],{"class":2123},[77,8017,3059],{"class":94},[77,8019,104],{"class":87},[77,8021,8022,8024,8026,8028,8030],{"class":79,"line":4129},[77,8023,4460],{"class":2123},[77,8025,5308],{"class":87},[77,8027,268],{"class":2123},[77,8029,3313],{"class":94},[77,8031,104],{"class":87},[77,8033,8034,8037],{"class":79,"line":4150},[77,8035,8036],{"class":83},"    swap",[77,8038,7812],{"class":87},[77,8040,8041],{"class":79,"line":4155},[77,8042,110],{"class":87},[14,8044,8046],{"id":8045},"_24函数的常见形式","2.4函数的常见形式",[139,8048,8049],{},[54,8050,8051],{},"无参无返",[67,8053,8055],{"className":2610,"code":8054,"language":2612,"meta":72,"style":72},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[74,8056,8057,8066,8070,8083,8087,8095,8099,8104,8112],{"__ignoreMap":72},[77,8058,8059,8061,8064],{"class":79,"line":80},[77,8060,7839],{"class":2123},[77,8062,8063],{"class":83}," test01",[77,8065,4451],{"class":87},[77,8067,8068],{"class":79,"line":91},[77,8069,4023],{"class":87},[77,8071,8072,8074,8076,8079,8081],{"class":79,"line":107},[77,8073,4028],{"class":87},[77,8075,3655],{"class":2123},[77,8077,8078],{"class":271},"\"你好\"",[77,8080,3655],{"class":2123},[77,8082,3677],{"class":87},[77,8084,8085],{"class":79,"line":191},[77,8086,110],{"class":87},[77,8088,8089,8091,8093],{"class":79,"line":1543},[77,8090,2625],{"class":2123},[77,8092,4448],{"class":83},[77,8094,4451],{"class":87},[77,8096,8097],{"class":79,"line":1549},[77,8098,4023],{"class":87},[77,8100,8101],{"class":79,"line":1566},[77,8102,8103],{"class":323},"    \u002F\u002F函数调用\n",[77,8105,8106,8109],{"class":79,"line":1572},[77,8107,8108],{"class":83},"    test01",[77,8110,8111],{"class":87},"();\n",[77,8113,8114],{"class":79,"line":1589},[77,8115,110],{"class":87},[139,8117,8118],{"start":91},[54,8119,8120],{},"有参无返",[67,8122,8124],{"className":2610,"code":8123,"language":2612,"meta":72,"style":72},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[74,8125,8126,8141,8145,8157,8161,8169,8173,8184],{"__ignoreMap":72},[77,8127,8128,8130,8133,8135,8137,8139],{"class":79,"line":80},[77,8129,7839],{"class":2123},[77,8131,8132],{"class":83}," test02",[77,8134,2622],{"class":87},[77,8136,2625],{"class":2123},[77,8138,3876],{"class":7691},[77,8140,2628],{"class":87},[77,8142,8143],{"class":79,"line":91},[77,8144,4023],{"class":87},[77,8146,8147,8149,8151,8153,8155],{"class":79,"line":107},[77,8148,4028],{"class":87},[77,8150,3655],{"class":2123},[77,8152,8078],{"class":271},[77,8154,3655],{"class":2123},[77,8156,3677],{"class":87},[77,8158,8159],{"class":79,"line":191},[77,8160,110],{"class":87},[77,8162,8163,8165,8167],{"class":79,"line":1543},[77,8164,2625],{"class":2123},[77,8166,4448],{"class":83},[77,8168,4451],{"class":87},[77,8170,8171],{"class":79,"line":1549},[77,8172,4023],{"class":87},[77,8174,8175,8178,8180,8182],{"class":79,"line":1566},[77,8176,8177],{"class":83},"    test02",[77,8179,2622],{"class":87},[77,8181,2925],{"class":94},[77,8183,5194],{"class":87},[77,8185,8186],{"class":79,"line":1572},[77,8187,110],{"class":87},[139,8189,8190],{"start":107},[54,8191,8192],{},"无参有返",[67,8194,8196],{"className":2610,"code":8195,"language":2612,"meta":72,"style":72},"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",[74,8197,8198,8207,8211,8223,8232,8236,8244,8248,8261,8280],{"__ignoreMap":72},[77,8199,8200,8202,8205],{"class":79,"line":80},[77,8201,2625],{"class":2123},[77,8203,8204],{"class":83}," test03",[77,8206,4451],{"class":87},[77,8208,8209],{"class":79,"line":91},[77,8210,4023],{"class":87},[77,8212,8213,8215,8217,8219,8221],{"class":79,"line":107},[77,8214,4028],{"class":87},[77,8216,3655],{"class":2123},[77,8218,8078],{"class":271},[77,8220,3655],{"class":2123},[77,8222,3677],{"class":87},[77,8224,8225,8227,8230],{"class":79,"line":191},[77,8226,6565],{"class":2123},[77,8228,8229],{"class":94}," 100",[77,8231,104],{"class":87},[77,8233,8234],{"class":79,"line":1543},[77,8235,110],{"class":87},[77,8237,8238,8240,8242],{"class":79,"line":1549},[77,8239,2625],{"class":2123},[77,8241,4448],{"class":83},[77,8243,4451],{"class":87},[77,8245,8246],{"class":79,"line":1566},[77,8247,4023],{"class":87},[77,8249,8250,8252,8254,8256,8259],{"class":79,"line":1572},[77,8251,4460],{"class":2123},[77,8253,7692],{"class":87},[77,8255,268],{"class":2123},[77,8257,8258],{"class":83},"test03",[77,8260,8111],{"class":87},[77,8262,8263,8265,8267,8269,8271,8273,8275,8277],{"class":79,"line":1589},[77,8264,4028],{"class":87},[77,8266,3655],{"class":2123},[77,8268,7882],{"class":271},[77,8270,3655],{"class":2123},[77,8272,7717],{"class":87},[77,8274,3655],{"class":2123},[77,8276,3720],{"class":87},[77,8278,8279],{"class":323}," \u002F\u002F100\n",[77,8281,8282],{"class":79,"line":1595},[77,8283,110],{"class":87},[24,8285,8286],{},"4.有参有返",[67,8288,8290],{"className":2610,"code":8289,"language":2612,"meta":72,"style":72},"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",[74,8291,8292,8307,8311,8324,8330,8334,8343,8347,8359,8373,8388],{"__ignoreMap":72},[77,8293,8294,8296,8299,8301,8303,8305],{"class":79,"line":80},[77,8295,2625],{"class":2123},[77,8297,8298],{"class":83}," test04",[77,8300,2622],{"class":87},[77,8302,2625],{"class":2123},[77,8304,3876],{"class":7691},[77,8306,2628],{"class":87},[77,8308,8309],{"class":79,"line":91},[77,8310,4023],{"class":87},[77,8312,8313,8315,8317,8320,8322],{"class":79,"line":107},[77,8314,4028],{"class":87},[77,8316,3655],{"class":2123},[77,8318,8319],{"class":271},"\"hello\"",[77,8321,3655],{"class":2123},[77,8323,3677],{"class":87},[77,8325,8326,8328],{"class":79,"line":191},[77,8327,6565],{"class":2123},[77,8329,3910],{"class":87},[77,8331,8332],{"class":79,"line":1543},[77,8333,110],{"class":87},[77,8335,8336,8338,8341],{"class":79,"line":1549},[77,8337,2625],{"class":2123},[77,8339,8340],{"class":83}," mian",[77,8342,4451],{"class":87},[77,8344,8345],{"class":79,"line":1566},[77,8346,4023],{"class":87},[77,8348,8349,8351,8353,8355,8357],{"class":79,"line":1572},[77,8350,4460],{"class":2123},[77,8352,5308],{"class":87},[77,8354,268],{"class":2123},[77,8356,2120],{"class":94},[77,8358,104],{"class":87},[77,8360,8361,8363,8365,8367,8370],{"class":79,"line":1589},[77,8362,4460],{"class":2123},[77,8364,5324],{"class":87},[77,8366,268],{"class":2123},[77,8368,8369],{"class":83},"test04",[77,8371,8372],{"class":87},"(b);\n",[77,8374,8375,8377,8379,8381,8383,8385],{"class":79,"line":1595},[77,8376,4028],{"class":87},[77,8378,3655],{"class":2123},[77,8380,2902],{"class":87},[77,8382,3655],{"class":2123},[77,8384,3720],{"class":87},[77,8386,8387],{"class":323}," \u002F\u002F1\n",[77,8389,8390],{"class":79,"line":4088},[77,8391,110],{"class":87},[14,8393,8395],{"id":8394},"_25函数的声明","2.5函数的声明",[24,8397,8398],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[24,8400,8401,8402],{},"函数的",[27,8403,8404],{},"声明可以多次，但是函数的定义只能有一次",[67,8406,8408],{"className":2610,"code":8407,"language":2612,"meta":72,"style":72},"\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",[74,8409,8410,8415,8420,8445,8454,8458,8470,8482,8498,8502,8522,8526,8545],{"__ignoreMap":72},[77,8411,8412],{"class":79,"line":80},[77,8413,8414],{"class":323},"\u002F\u002F函数声明\n",[77,8416,8417],{"class":79,"line":91},[77,8418,8419],{"class":323},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[77,8421,8422,8424,8427,8429,8431,8433,8435,8437,8439,8442],{"class":79,"line":107},[77,8423,2625],{"class":2123},[77,8425,8426],{"class":83}," max",[77,8428,2622],{"class":87},[77,8430,2625],{"class":2123},[77,8432,3876],{"class":7691},[77,8434,2992],{"class":87},[77,8436,2625],{"class":2123},[77,8438,5308],{"class":7691},[77,8440,8441],{"class":87},");",[77,8443,8444],{"class":323},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[77,8446,8447,8449,8451],{"class":79,"line":191},[77,8448,2625],{"class":2123},[77,8450,4448],{"class":83},[77,8452,8453],{"class":87},"() \n",[77,8455,8456],{"class":79,"line":1543},[77,8457,4023],{"class":87},[77,8459,8460,8462,8464,8466,8468],{"class":79,"line":1549},[77,8461,4460],{"class":2123},[77,8463,3876],{"class":87},[77,8465,268],{"class":2123},[77,8467,3059],{"class":94},[77,8469,104],{"class":87},[77,8471,8472,8474,8476,8478,8480],{"class":79,"line":1566},[77,8473,4460],{"class":2123},[77,8475,5308],{"class":87},[77,8477,268],{"class":2123},[77,8479,3313],{"class":94},[77,8481,104],{"class":87},[77,8483,8484,8486,8488,8491,8494,8496],{"class":79,"line":1572},[77,8485,4028],{"class":87},[77,8487,3655],{"class":2123},[77,8489,8490],{"class":83},"max",[77,8492,8493],{"class":87},"(a,b)",[77,8495,3655],{"class":2123},[77,8497,3677],{"class":87},[77,8499,8500],{"class":79,"line":1589},[77,8501,110],{"class":87},[77,8503,8504,8506,8508,8510,8512,8514,8516,8518,8520],{"class":79,"line":1595},[77,8505,2625],{"class":2123},[77,8507,8426],{"class":83},[77,8509,2622],{"class":87},[77,8511,2625],{"class":2123},[77,8513,3876],{"class":7691},[77,8515,2992],{"class":87},[77,8517,2625],{"class":2123},[77,8519,5308],{"class":7691},[77,8521,2628],{"class":87},[77,8523,8524],{"class":79,"line":4088},[77,8525,4023],{"class":87},[77,8527,8528,8530,8532,8534,8536,8538,8540,8542],{"class":79,"line":4093},[77,8529,6565],{"class":2123},[77,8531,3876],{"class":87},[77,8533,3572],{"class":2123},[77,8535,2877],{"class":87},[77,8537,3598],{"class":2123},[77,8539,417],{"class":87},[77,8541,3472],{"class":2123},[77,8543,8544],{"class":87},"b;\n",[77,8546,8547],{"class":79,"line":4099},[77,8548,110],{"class":87},[14,8550,8552],{"id":8551},"_26函数的分文件编写","2.6函数的分文件编写",[24,8554,8555],{},"4个步骤：",[51,8557,8558,8561,8564,8567],{},[54,8559,8560],{},"1.创建后缀名为.h的头文件",[54,8562,8563],{},"2.创建后缀名为.cpp的源文件",[54,8565,8566],{},"3.在头文件中写函数的定义",[54,8568,8569],{},"4.在源文件中写函数的定义\n示例：",[24,8571,8572],{},"头文件：swap.h",[67,8574,8576],{"className":2610,"code":8575,"language":2612,"meta":72,"style":72},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[74,8577,8578,8584,8594,8598],{"__ignoreMap":72},[77,8579,8580,8582],{"class":79,"line":80},[77,8581,4425],{"class":2123},[77,8583,4428],{"class":271},[77,8585,8586,8588,8590,8592],{"class":79,"line":91},[77,8587,4433],{"class":2123},[77,8589,4436],{"class":2123},[77,8591,4439],{"class":83},[77,8593,104],{"class":87},[77,8595,8596],{"class":79,"line":107},[77,8597,8414],{"class":323},[77,8599,8600,8602,8604,8606,8608,8610,8612,8614,8616],{"class":79,"line":191},[77,8601,7839],{"class":2123},[77,8603,7842],{"class":83},[77,8605,2622],{"class":87},[77,8607,2625],{"class":2123},[77,8609,3876],{"class":7691},[77,8611,2992],{"class":87},[77,8613,2625],{"class":2123},[77,8615,5308],{"class":7691},[77,8617,5194],{"class":87},[24,8619,8620],{},"源文件：swap.cpp",[67,8622,8624],{"className":2610,"code":8623,"language":2612,"meta":72,"style":72},"#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",[74,8625,8626,8633,8638,8658,8662,8673,8682,8691,8708,8725],{"__ignoreMap":72},[77,8627,8628,8630],{"class":79,"line":80},[77,8629,4425],{"class":2123},[77,8631,8632],{"class":271}," \"swap.h\"\n",[77,8634,8635],{"class":79,"line":91},[77,8636,8637],{"class":323},"\u002F\u002F函数的定义\n",[77,8639,8640,8642,8644,8646,8648,8650,8652,8654,8656],{"class":79,"line":107},[77,8641,7839],{"class":2123},[77,8643,7842],{"class":83},[77,8645,2622],{"class":87},[77,8647,2625],{"class":2123},[77,8649,3876],{"class":7691},[77,8651,2992],{"class":87},[77,8653,2625],{"class":2123},[77,8655,5308],{"class":7691},[77,8657,2628],{"class":87},[77,8659,8660],{"class":79,"line":191},[77,8661,4023],{"class":87},[77,8663,8664,8666,8668,8670],{"class":79,"line":1543},[77,8665,4460],{"class":2123},[77,8667,6730],{"class":87},[77,8669,268],{"class":2123},[77,8671,8672],{"class":87},"a;\n",[77,8674,8675,8678,8680],{"class":79,"line":1549},[77,8676,8677],{"class":87},"    a",[77,8679,268],{"class":2123},[77,8681,8544],{"class":87},[77,8683,8684,8687,8689],{"class":79,"line":1566},[77,8685,8686],{"class":87},"    b",[77,8688,268],{"class":2123},[77,8690,6755],{"class":87},[77,8692,8693,8695,8697,8700,8702,8704,8706],{"class":79,"line":1572},[77,8694,4028],{"class":87},[77,8696,3655],{"class":2123},[77,8698,8699],{"class":271},"\"a=\"",[77,8701,3655],{"class":2123},[77,8703,417],{"class":87},[77,8705,3655],{"class":2123},[77,8707,3677],{"class":87},[77,8709,8710,8712,8714,8717,8719,8721,8723],{"class":79,"line":1589},[77,8711,4028],{"class":87},[77,8713,3655],{"class":2123},[77,8715,8716],{"class":271},"\"b=\"",[77,8718,3655],{"class":2123},[77,8720,2877],{"class":87},[77,8722,3655],{"class":2123},[77,8724,3677],{"class":87},[77,8726,8727],{"class":79,"line":1595},[77,8728,110],{"class":87},[2520,8730,8731],{},"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":72,"searchDepth":91,"depth":91,"links":8733},[8734,8735,8736,8737,8738,8739],{"id":7647,"depth":91,"text":7648},{"id":7736,"depth":91,"text":7737},{"id":7819,"depth":91,"text":7820},{"id":8045,"depth":91,"text":8046},{"id":8394,"depth":91,"text":8395},{"id":8551,"depth":91,"text":8552},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7639,"description":72},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8746,"title":8747,"body":8748,"description":8755,"extension":2547,"meta":10159,"navigation":2549,"path":10160,"seo":10161,"stem":10162,"__hash__":10163},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8749,"toc":10149},[8750,8753,8756,8760,8922,8926,8929,8932,8935,8938,9078,9082,9085,9088,9091,9156,9160,9165,9232,9235,9239,9242,9253,9258,9278,9281,9286,9305,9308,9312,9331,9334,9338,9573,9577,9580,9583,9586,9748,9751,9755,9758,9764,10146],[10,8751,8747],{"id":8752},"_3指针",[24,8754,8755],{},"通过指针保存一个地址，指针就是个地址",[14,8757,8759],{"id":8758},"_31定义指针","3.1定义指针",[67,8761,8763],{"className":2610,"code":8762,"language":2612,"meta":72,"style":72},"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",[74,8764,8765,8773,8777,8782,8794,8799,8807,8817,8835,8855,8859,8864,8869,8874,8888,8904,8918],{"__ignoreMap":72},[77,8766,8767,8769,8771],{"class":79,"line":80},[77,8768,2625],{"class":2123},[77,8770,4448],{"class":83},[77,8772,4451],{"class":87},[77,8774,8775],{"class":79,"line":91},[77,8776,4023],{"class":87},[77,8778,8779],{"class":79,"line":107},[77,8780,8781],{"class":323},"    \u002F\u002F1.定义指针\n",[77,8783,8784,8786,8788,8790,8792],{"class":79,"line":191},[77,8785,4460],{"class":2123},[77,8787,3876],{"class":87},[77,8789,268],{"class":2123},[77,8791,3059],{"class":94},[77,8793,104],{"class":87},[77,8795,8796],{"class":79,"line":1543},[77,8797,8798],{"class":323},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[77,8800,8801,8804],{"class":79,"line":1549},[77,8802,8803],{"class":2123},"    int*",[77,8805,8806],{"class":87},"p;\n",[77,8808,8809,8812,8815],{"class":79,"line":1566},[77,8810,8811],{"class":87},"    p",[77,8813,8814],{"class":2123},"=&",[77,8816,8672],{"class":87},[77,8818,8819,8821,8823,8826,8829,8831,8833],{"class":79,"line":1572},[77,8820,4028],{"class":87},[77,8822,3655],{"class":2123},[77,8824,8825],{"class":271},"\"a的地址为：\"",[77,8827,8828],{"class":2123},"\u003C\u003C&",[77,8830,417],{"class":87},[77,8832,3655],{"class":2123},[77,8834,3677],{"class":87},[77,8836,8837,8839,8841,8844,8846,8848,8850,8852],{"class":79,"line":1589},[77,8838,4028],{"class":87},[77,8840,3655],{"class":2123},[77,8842,8843],{"class":271},"\"指针p为：\"",[77,8845,3655],{"class":2123},[77,8847,24],{"class":87},[77,8849,3655],{"class":2123},[77,8851,3720],{"class":87},[77,8853,8854],{"class":323},"\u002F\u002F指针p表示的就是a的地址\n",[77,8856,8857],{"class":79,"line":1595},[77,8858,4875],{"emptyLinePlaceholder":2549},[77,8860,8861],{"class":79,"line":4088},[77,8862,8863],{"class":323},"    \u002F\u002F2.使用指针\n",[77,8865,8866],{"class":79,"line":4093},[77,8867,8868],{"class":323},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[77,8870,8871],{"class":79,"line":4099},[77,8872,8873],{"class":323},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[77,8875,8876,8879,8881,8883,8886],{"class":79,"line":4104},[77,8877,8878],{"class":2123},"    *",[77,8880,24],{"class":87},[77,8882,268],{"class":2123},[77,8884,8885],{"class":94},"1000",[77,8887,104],{"class":87},[77,8889,8890,8892,8895,8897,8899,8901],{"class":79,"line":4118},[77,8891,4028],{"class":87},[77,8893,8894],{"class":2123},"\u003C\u003C*",[77,8896,24],{"class":87},[77,8898,3655],{"class":2123},[77,8900,3720],{"class":87},[77,8902,8903],{"class":323},"\u002F\u002F1000\n",[77,8905,8906,8908,8910,8912,8914,8916],{"class":79,"line":4123},[77,8907,4028],{"class":87},[77,8909,3655],{"class":2123},[77,8911,417],{"class":87},[77,8913,3655],{"class":2123},[77,8915,3720],{"class":87},[77,8917,8903],{"class":323},[77,8919,8920],{"class":79,"line":4129},[77,8921,110],{"class":87},[14,8923,8925],{"id":8924},"_32指针所占的内存空间","3.2指针所占的内存空间",[24,8927,8928],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[24,8930,8931],{},"在32位操作系统下：占用4个字节空间",[24,8933,8934],{},"在64位操作系统下：占用8个字节空间",[24,8936,8937],{},"上方是不管啥数据类型的",[67,8939,8941],{"className":2610,"code":8940,"language":2612,"meta":72,"style":72},"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",[74,8942,8943,8951,8955,8960,8972,8977,8982,8987,9000,9022,9048,9074],{"__ignoreMap":72},[77,8944,8945,8947,8949],{"class":79,"line":80},[77,8946,2625],{"class":2123},[77,8948,4448],{"class":83},[77,8950,4451],{"class":87},[77,8952,8953],{"class":79,"line":91},[77,8954,4023],{"class":87},[77,8956,8957],{"class":79,"line":107},[77,8958,8959],{"class":323},"    \u002F\u002F指针所占内存空间\n",[77,8961,8962,8964,8966,8968,8970],{"class":79,"line":191},[77,8963,4460],{"class":2123},[77,8965,3876],{"class":87},[77,8967,268],{"class":2123},[77,8969,3059],{"class":94},[77,8971,104],{"class":87},[77,8973,8974],{"class":79,"line":1543},[77,8975,8976],{"class":323},"    \u002F\u002Fint *p;\n",[77,8978,8979],{"class":79,"line":1549},[77,8980,8981],{"class":323},"    \u002F\u002Fp=&a;\n",[77,8983,8984],{"class":79,"line":1566},[77,8985,8986],{"class":323},"    \u002F\u002F上述可以写为以下：\n",[77,8988,8989,8991,8994,8996,8998],{"class":79,"line":1572},[77,8990,4460],{"class":2123},[77,8992,8993],{"class":2123}," *",[77,8995,24],{"class":87},[77,8997,8814],{"class":2123},[77,8999,8672],{"class":87},[77,9001,9002,9005,9007,9010,9012,9015,9017,9019],{"class":79,"line":1589},[77,9003,9004],{"class":87},"    cout ",[77,9006,3655],{"class":2123},[77,9008,9009],{"class":271},"\"sizeof(int *)\"",[77,9011,3850],{"class":2123},[77,9013,9014],{"class":87},"(p)",[77,9016,3655],{"class":2123},[77,9018,3720],{"class":87},[77,9020,9021],{"class":323},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[77,9023,9024,9026,9028,9030,9032,9034,9036,9038,9040,9042,9045],{"class":79,"line":1595},[77,9025,9004],{"class":87},[77,9027,3655],{"class":2123},[77,9029,9009],{"class":271},[77,9031,3850],{"class":2123},[77,9033,2622],{"class":87},[77,9035,2625],{"class":2123},[77,9037,8993],{"class":2123},[77,9039,3043],{"class":87},[77,9041,3655],{"class":2123},[77,9043,9044],{"class":87},"endl",[77,9046,9047],{"class":323},"  \u002F\u002F4字节(32位的话)\n",[77,9049,9050,9052,9054,9057,9059,9061,9063,9065,9067,9069,9071],{"class":79,"line":4088},[77,9051,9004],{"class":87},[77,9053,3655],{"class":2123},[77,9055,9056],{"class":271},"\"sizeof(char *)\"",[77,9058,3850],{"class":2123},[77,9060,2622],{"class":87},[77,9062,2715],{"class":2123},[77,9064,8993],{"class":2123},[77,9066,3043],{"class":87},[77,9068,3655],{"class":2123},[77,9070,3720],{"class":87},[77,9072,9073],{"class":323}," \u002F\u002F4字节(32位的话)\n",[77,9075,9076],{"class":79,"line":4093},[77,9077,110],{"class":87},[14,9079,9081],{"id":9080},"_33空指针","3.3空指针",[24,9083,9084],{},"空指针：指针变量指向内存中编号为0的空间",[24,9086,9087],{},"用途：初始化指针变量",[24,9089,9090],{},"注意：空指针指向的内存是不可以访问的",[67,9092,9094],{"className":2610,"code":9093,"language":2612,"meta":72,"style":72},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[74,9095,9096,9104,9108,9113,9127,9132,9147,9152],{"__ignoreMap":72},[77,9097,9098,9100,9102],{"class":79,"line":80},[77,9099,2625],{"class":2123},[77,9101,4448],{"class":83},[77,9103,4451],{"class":87},[77,9105,9106],{"class":79,"line":91},[77,9107,4023],{"class":87},[77,9109,9110],{"class":79,"line":107},[77,9111,9112],{"class":323},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[77,9114,9115,9117,9119,9121,9123,9125],{"class":79,"line":191},[77,9116,4460],{"class":2123},[77,9118,8993],{"class":2123},[77,9120,24],{"class":87},[77,9122,268],{"class":2123},[77,9124,4867],{"class":94},[77,9126,104],{"class":87},[77,9128,9129],{"class":79,"line":1543},[77,9130,9131],{"class":323},"    \u002F\u002F2.空指针不能进行访问\n",[77,9133,9134,9136,9138,9140,9142,9144],{"class":79,"line":1549},[77,9135,8878],{"class":2123},[77,9137,24],{"class":87},[77,9139,268],{"class":2123},[77,9141,2925],{"class":94},[77,9143,2675],{"class":87},[77,9145,9146],{"class":323},"\u002F\u002F直接报错，压根不能访问\n",[77,9148,9149],{"class":79,"line":1566},[77,9150,9151],{"class":323},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[77,9153,9154],{"class":79,"line":1572},[77,9155,110],{"class":87},[14,9157,9159],{"id":9158},"_34野指针","3.4野指针",[24,9161,9162],{},[27,9163,9164],{},"指针变量指向非法的内存空间",[67,9166,9168],{"className":2610,"code":9167,"language":2612,"meta":72,"style":72},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[74,9169,9170,9178,9182,9211,9216,9228],{"__ignoreMap":72},[77,9171,9172,9174,9176],{"class":79,"line":80},[77,9173,2625],{"class":2123},[77,9175,4448],{"class":83},[77,9177,4451],{"class":87},[77,9179,9180],{"class":79,"line":91},[77,9181,4023],{"class":87},[77,9183,9184,9186,9188,9190,9192,9194,9196,9198,9200,9203,9206,9208],{"class":79,"line":107},[77,9185,4460],{"class":2123},[77,9187,8993],{"class":2123},[77,9189,24],{"class":87},[77,9191,268],{"class":2123},[77,9193,2622],{"class":87},[77,9195,2625],{"class":2123},[77,9197,8993],{"class":2123},[77,9199,3043],{"class":87},[77,9201,9202],{"class":2123},"0x",[77,9204,9205],{"class":94},"1100",[77,9207,2675],{"class":87},[77,9209,9210],{"class":323}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[77,9212,9213],{"class":79,"line":191},[77,9214,9215],{"class":323},"    \u002F\u002F访问野指针报错\n",[77,9217,9218,9220,9222,9224,9226],{"class":79,"line":1543},[77,9219,4028],{"class":87},[77,9221,8894],{"class":2123},[77,9223,24],{"class":87},[77,9225,3655],{"class":2123},[77,9227,3677],{"class":87},[77,9229,9230],{"class":79,"line":1549},[77,9231,110],{"class":87},[24,9233,9234],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9236,9238],{"id":9237},"_35const修饰指针","3.5const修饰指针",[24,9240,9241],{},"三种情况：",[51,9243,9244,9247,9250],{},[54,9245,9246],{},"const修饰指针 常量指针",[54,9248,9249],{},"const修饰常量 指针常量",[54,9251,9252],{},"const即修饰指针，又修饰常量",[139,9254,9255],{},[54,9256,9257],{},"常量指针",[67,9259,9261],{"className":2610,"code":9260,"language":2612,"meta":72,"style":72},"const int *p=&a;\n",[74,9262,9263],{"__ignoreMap":72},[77,9264,9265,9268,9270,9272,9274,9276],{"class":79,"line":80},[77,9266,9267],{"class":2123},"const",[77,9269,4857],{"class":2123},[77,9271,8993],{"class":2123},[77,9273,24],{"class":87},[77,9275,8814],{"class":2123},[77,9277,8672],{"class":87},[24,9279,9280],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[139,9282,9283],{"start":91},[54,9284,9285],{},"指针常量",[67,9287,9289],{"className":2610,"code":9288,"language":2612,"meta":72,"style":72},"int *const p=&a;\n",[74,9290,9291],{"__ignoreMap":72},[77,9292,9293,9295,9298,9301,9303],{"class":79,"line":80},[77,9294,2625],{"class":2123},[77,9296,9297],{"class":2123}," *const",[77,9299,9300],{"class":87}," p",[77,9302,8814],{"class":2123},[77,9304,8672],{"class":87},[24,9306,9307],{},"指针的指向不可以改，指针指向的值可以改",[139,9309,9310],{"start":107},[54,9311,9252],{},[67,9313,9315],{"className":2610,"code":9314,"language":2612,"meta":72,"style":72},"const int *const p=&a;\n",[74,9316,9317],{"__ignoreMap":72},[77,9318,9319,9321,9323,9325,9327,9329],{"class":79,"line":80},[77,9320,9267],{"class":2123},[77,9322,4857],{"class":2123},[77,9324,9297],{"class":2123},[77,9326,9300],{"class":87},[77,9328,8814],{"class":2123},[77,9330,8672],{"class":87},[24,9332,9333],{},"指针的指向和指针指向的值都不可以改变",[14,9335,9337],{"id":9336},"_36指针和数组","3.6指针和数组",[67,9339,9341],{"className":2610,"code":9340,"language":2612,"meta":72,"style":72},"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",[74,9342,9343,9351,9355,9360,9414,9435,9451,9467,9478,9495,9500,9514,9540,9544,9556,9565,9569],{"__ignoreMap":72},[77,9344,9345,9347,9349],{"class":79,"line":80},[77,9346,2625],{"class":2123},[77,9348,4448],{"class":83},[77,9350,4451],{"class":87},[77,9352,9353],{"class":79,"line":91},[77,9354,4023],{"class":87},[77,9356,9357],{"class":79,"line":107},[77,9358,9359],{"class":323},"    \u002F\u002F利用指针访问数组中的元素\n",[77,9361,9362,9364,9366,9368,9370,9372,9374,9376,9378,9380,9382,9384,9386,9388,9390,9392,9394,9396,9398,9400,9402,9404,9406,9408,9410,9412],{"class":79,"line":191},[77,9363,4460],{"class":2123},[77,9365,6437],{"class":87},[77,9367,3059],{"class":94},[77,9369,3552],{"class":87},[77,9371,268],{"class":2123},[77,9373,3509],{"class":87},[77,9375,2120],{"class":94},[77,9377,2992],{"class":87},[77,9379,2696],{"class":94},[77,9381,2992],{"class":87},[77,9383,2690],{"class":94},[77,9385,2992],{"class":87},[77,9387,2907],{"class":94},[77,9389,2992],{"class":87},[77,9391,2933],{"class":94},[77,9393,2992],{"class":87},[77,9395,2958],{"class":94},[77,9397,2992],{"class":87},[77,9399,2983],{"class":94},[77,9401,2992],{"class":87},[77,9403,3009],{"class":94},[77,9405,2992],{"class":87},[77,9407,3034],{"class":94},[77,9409,2992],{"class":87},[77,9411,3059],{"class":94},[77,9413,6470],{"class":87},[77,9415,9416,9418,9420,9423,9425,9427,9429,9431,9433],{"class":79,"line":1543},[77,9417,4028],{"class":87},[77,9419,3655],{"class":2123},[77,9421,9422],{"class":271},"\"数组的第一个元素为：\"",[77,9424,3655],{"class":2123},[77,9426,6381],{"class":87},[77,9428,1939],{"class":94},[77,9430,3552],{"class":87},[77,9432,3655],{"class":2123},[77,9434,3677],{"class":87},[77,9436,9437,9439,9441,9443,9445,9448],{"class":79,"line":1549},[77,9438,4460],{"class":2123},[77,9440,8993],{"class":2123},[77,9442,24],{"class":87},[77,9444,268],{"class":2123},[77,9446,9447],{"class":87},"arr;",[77,9449,9450],{"class":323},"\u002F\u002F注意数才要加取地址符号&\n",[77,9452,9453,9455,9457,9459,9461,9463,9465],{"class":79,"line":1566},[77,9454,4028],{"class":87},[77,9456,3655],{"class":2123},[77,9458,9422],{"class":271},[77,9460,8894],{"class":2123},[77,9462,24],{"class":87},[77,9464,3655],{"class":2123},[77,9466,3677],{"class":87},[77,9468,9469,9471,9473,9475],{"class":79,"line":1572},[77,9470,8811],{"class":87},[77,9472,4767],{"class":2123},[77,9474,2675],{"class":87},[77,9476,9477],{"class":323}," \u002F\u002F让指针向后偏移4个字节\n",[77,9479,9480,9482,9484,9487,9489,9491,9493],{"class":79,"line":1589},[77,9481,4028],{"class":87},[77,9483,3655],{"class":2123},[77,9485,9486],{"class":271},"\"数组的第二个元素为：\"",[77,9488,8894],{"class":2123},[77,9490,24],{"class":87},[77,9492,3655],{"class":2123},[77,9494,3677],{"class":87},[77,9496,9497],{"class":79,"line":1595},[77,9498,9499],{"class":323},"    \u002F\u002F利用指针遍历数组\n",[77,9501,9502,9504,9506,9509,9511],{"class":79,"line":4088},[77,9503,4460],{"class":2123},[77,9505,8993],{"class":2123},[77,9507,9508],{"class":87},"p2",[77,9510,268],{"class":2123},[77,9512,9513],{"class":87},"arr;\n",[77,9515,9516,9518,9520,9522,9524,9526,9528,9530,9532,9534,9536,9538],{"class":79,"line":4093},[77,9517,5676],{"class":2123},[77,9519,4134],{"class":87},[77,9521,2625],{"class":2123},[77,9523,5507],{"class":87},[77,9525,268],{"class":2123},[77,9527,1939],{"class":94},[77,9529,5514],{"class":87},[77,9531,260],{"class":2123},[77,9533,3059],{"class":94},[77,9535,5514],{"class":87},[77,9537,4767],{"class":2123},[77,9539,2628],{"class":87},[77,9541,9542],{"class":79,"line":4099},[77,9543,4505],{"class":87},[77,9545,9546,9548,9550,9552,9554],{"class":79,"line":4104},[77,9547,5926],{"class":87},[77,9549,8894],{"class":2123},[77,9551,9508],{"class":87},[77,9553,3655],{"class":2123},[77,9555,3677],{"class":87},[77,9557,9558,9561,9563],{"class":79,"line":4118},[77,9559,9560],{"class":87},"        p2",[77,9562,4767],{"class":2123},[77,9564,104],{"class":87},[77,9566,9567],{"class":79,"line":4123},[77,9568,4662],{"class":87},[77,9570,9571],{"class":79,"line":4129},[77,9572,110],{"class":87},[14,9574,9576],{"id":9575},"_37指针和函数","3.7指针和函数",[24,9578,9579],{},"利用指针做函数参数，可以修改实参的值",[24,9581,9582],{},"值传递：只改变形参，不改变实参",[24,9584,9585],{},"地址传递：",[67,9587,9589],{"className":2610,"code":9588,"language":2612,"meta":72,"style":72},"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",[74,9590,9591,9616,9620,9632,9643,9653,9657,9665,9669,9681,9693,9698,9714,9729,9744],{"__ignoreMap":72},[77,9592,9593,9595,9597,9599,9601,9603,9606,9608,9610,9612,9614],{"class":79,"line":80},[77,9594,7839],{"class":2123},[77,9596,7842],{"class":83},[77,9598,2622],{"class":87},[77,9600,2625],{"class":2123},[77,9602,8993],{"class":2123},[77,9604,9605],{"class":7691},"p1",[77,9607,2992],{"class":87},[77,9609,2625],{"class":2123},[77,9611,8993],{"class":2123},[77,9613,9508],{"class":7691},[77,9615,2628],{"class":87},[77,9617,9618],{"class":79,"line":91},[77,9619,4023],{"class":87},[77,9621,9622,9624,9626,9629],{"class":79,"line":107},[77,9623,4460],{"class":2123},[77,9625,6730],{"class":87},[77,9627,9628],{"class":2123},"=*",[77,9630,9631],{"class":87},"p1;\n",[77,9633,9634,9636,9638,9640],{"class":79,"line":191},[77,9635,8878],{"class":2123},[77,9637,9605],{"class":87},[77,9639,9628],{"class":2123},[77,9641,9642],{"class":87},"p2;\n",[77,9644,9645,9647,9649,9651],{"class":79,"line":1543},[77,9646,8878],{"class":2123},[77,9648,9508],{"class":87},[77,9650,268],{"class":2123},[77,9652,6755],{"class":87},[77,9654,9655],{"class":79,"line":1549},[77,9656,110],{"class":87},[77,9658,9659,9661,9663],{"class":79,"line":1566},[77,9660,2625],{"class":2123},[77,9662,4448],{"class":83},[77,9664,4451],{"class":87},[77,9666,9667],{"class":79,"line":1572},[77,9668,4023],{"class":87},[77,9670,9671,9673,9675,9677,9679],{"class":79,"line":1589},[77,9672,4460],{"class":2123},[77,9674,3876],{"class":87},[77,9676,268],{"class":2123},[77,9678,3059],{"class":94},[77,9680,104],{"class":87},[77,9682,9683,9685,9687,9689,9691],{"class":79,"line":1595},[77,9684,4460],{"class":2123},[77,9686,5308],{"class":87},[77,9688,268],{"class":2123},[77,9690,3313],{"class":94},[77,9692,104],{"class":87},[77,9694,9695],{"class":79,"line":4088},[77,9696,9697],{"class":323},"    \u002F\u002F地址传递\n",[77,9699,9700,9702,9704,9706,9709,9711],{"class":79,"line":4093},[77,9701,8036],{"class":83},[77,9703,2622],{"class":87},[77,9705,2967],{"class":2123},[77,9707,9708],{"class":87},"a,",[77,9710,2967],{"class":2123},[77,9712,9713],{"class":87},"b);\n",[77,9715,9716,9718,9720,9722,9724,9726],{"class":79,"line":4099},[77,9717,4028],{"class":87},[77,9719,3655],{"class":2123},[77,9721,417],{"class":87},[77,9723,3655],{"class":2123},[77,9725,3720],{"class":87},[77,9727,9728],{"class":323},"\u002F\u002F20\n",[77,9730,9731,9733,9735,9737,9739,9741],{"class":79,"line":4104},[77,9732,4028],{"class":87},[77,9734,3655],{"class":2123},[77,9736,2877],{"class":87},[77,9738,3655],{"class":2123},[77,9740,3720],{"class":87},[77,9742,9743],{"class":323},"\u002F\u002F10\n",[77,9745,9746],{"class":79,"line":4118},[77,9747,110],{"class":87},[24,9749,9750],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9752,9754],{"id":9753},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[24,9756,9757],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[24,9759,9760,9761,9763],{},"例如数组：int arr",[77,9762,3059],{},"={4,3,6,9,1,2,10,8,7,5}",[67,9765,9767],{"className":2610,"code":9766,"language":2612,"meta":72,"style":72},"#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",[74,9768,9769,9775,9785,9809,9813,9844,9848,9882,9886,9904,9908,9919,9934,9949,9953,9957,9961,9965,9969,9977,9981,9986,10040,10052,10064,10069,10077,10081,10086,10111,10115,10129,10138,10142],{"__ignoreMap":72},[77,9770,9771,9773],{"class":79,"line":80},[77,9772,4425],{"class":2123},[77,9774,4428],{"class":271},[77,9776,9777,9779,9781,9783],{"class":79,"line":91},[77,9778,4433],{"class":2123},[77,9780,4436],{"class":2123},[77,9782,4439],{"class":83},[77,9784,104],{"class":87},[77,9786,9787,9789,9792,9794,9796,9798,9800,9802,9804,9807],{"class":79,"line":107},[77,9788,7839],{"class":2123},[77,9790,9791],{"class":83}," bubbleSort",[77,9793,2622],{"class":87},[77,9795,2625],{"class":2123},[77,9797,8993],{"class":2123},[77,9799,24],{"class":7691},[77,9801,2992],{"class":87},[77,9803,2625],{"class":2123},[77,9805,9806],{"class":7691}," len",[77,9808,2628],{"class":87},[77,9810,9811],{"class":79,"line":191},[77,9812,4023],{"class":87},[77,9814,9815,9817,9819,9821,9823,9825,9827,9829,9831,9834,9836,9838,9840,9842],{"class":79,"line":1543},[77,9816,5676],{"class":2123},[77,9818,2622],{"class":87},[77,9820,2625],{"class":2123},[77,9822,5507],{"class":87},[77,9824,268],{"class":2123},[77,9826,1939],{"class":94},[77,9828,5514],{"class":87},[77,9830,260],{"class":2123},[77,9832,9833],{"class":87},"len",[77,9835,3145],{"class":2123},[77,9837,2120],{"class":94},[77,9839,5514],{"class":87},[77,9841,4767],{"class":2123},[77,9843,2628],{"class":87},[77,9845,9846],{"class":79,"line":1549},[77,9847,4505],{"class":87},[77,9849,9850,9852,9854,9856,9858,9860,9862,9864,9866,9868,9870,9872,9874,9876,9878,9880],{"class":79,"line":1566},[77,9851,5878],{"class":2123},[77,9853,2622],{"class":87},[77,9855,2625],{"class":2123},[77,9857,5885],{"class":87},[77,9859,268],{"class":2123},[77,9861,1939],{"class":94},[77,9863,5892],{"class":87},[77,9865,260],{"class":2123},[77,9867,9833],{"class":87},[77,9869,3145],{"class":2123},[77,9871,646],{"class":87},[77,9873,3145],{"class":2123},[77,9875,2120],{"class":94},[77,9877,5892],{"class":87},[77,9879,4767],{"class":2123},[77,9881,2628],{"class":87},[77,9883,9884],{"class":79,"line":1572},[77,9885,4985],{"class":87},[77,9887,9888,9890,9893,9895,9898,9900,9902],{"class":79,"line":1589},[77,9889,7117],{"class":2123},[77,9891,9892],{"class":87},"(p[j]",[77,9894,3572],{"class":2123},[77,9896,9897],{"class":87},"p[j",[77,9899,3094],{"class":2123},[77,9901,2120],{"class":94},[77,9903,7132],{"class":87},[77,9905,9906],{"class":79,"line":1595},[77,9907,7137],{"class":87},[77,9909,9910,9912,9914,9916],{"class":79,"line":4088},[77,9911,7142],{"class":2123},[77,9913,6730],{"class":87},[77,9915,268],{"class":2123},[77,9917,9918],{"class":87},"p[j];\n",[77,9920,9921,9924,9926,9928,9930,9932],{"class":79,"line":4093},[77,9922,9923],{"class":87},"                p[j]",[77,9925,268],{"class":2123},[77,9927,9897],{"class":87},[77,9929,3094],{"class":2123},[77,9931,2120],{"class":94},[77,9933,7165],{"class":87},[77,9935,9936,9939,9941,9943,9945,9947],{"class":79,"line":4099},[77,9937,9938],{"class":87},"                p[j",[77,9940,3094],{"class":2123},[77,9942,2120],{"class":94},[77,9944,3552],{"class":87},[77,9946,268],{"class":2123},[77,9948,6755],{"class":87},[77,9950,9951],{"class":79,"line":4104},[77,9952,7185],{"class":87},[77,9954,9955],{"class":79,"line":4118},[77,9956,5004],{"class":87},[77,9958,9959],{"class":79,"line":4123},[77,9960,4662],{"class":87},[77,9962,9963],{"class":79,"line":4129},[77,9964,110],{"class":87},[77,9966,9967],{"class":79,"line":4150},[77,9968,4875],{"emptyLinePlaceholder":2549},[77,9970,9971,9973,9975],{"class":79,"line":4155},[77,9972,2625],{"class":2123},[77,9974,4448],{"class":83},[77,9976,4451],{"class":87},[77,9978,9979],{"class":79,"line":4169},[77,9980,4023],{"class":87},[77,9982,9983],{"class":79,"line":4174},[77,9984,9985],{"class":323},"    \u002F\u002F 1.创建数组\n",[77,9987,9988,9990,9992,9994,9996,9998,10000,10002,10004,10006,10008,10010,10012,10014,10016,10018,10020,10022,10024,10026,10028,10030,10032,10034,10036,10038],{"class":79,"line":4203},[77,9989,4460],{"class":2123},[77,9991,6437],{"class":87},[77,9993,3059],{"class":94},[77,9995,3552],{"class":87},[77,9997,268],{"class":2123},[77,9999,3509],{"class":87},[77,10001,2907],{"class":94},[77,10003,2992],{"class":87},[77,10005,2690],{"class":94},[77,10007,2992],{"class":87},[77,10009,2958],{"class":94},[77,10011,2992],{"class":87},[77,10013,3034],{"class":94},[77,10015,2992],{"class":87},[77,10017,2120],{"class":94},[77,10019,2992],{"class":87},[77,10021,2696],{"class":94},[77,10023,2992],{"class":87},[77,10025,3059],{"class":94},[77,10027,2992],{"class":87},[77,10029,3009],{"class":94},[77,10031,2992],{"class":87},[77,10033,2983],{"class":94},[77,10035,2992],{"class":87},[77,10037,2933],{"class":94},[77,10039,6470],{"class":87},[77,10041,10042,10044,10046,10048,10050],{"class":79,"line":4208},[77,10043,4460],{"class":2123},[77,10045,9806],{"class":87},[77,10047,268],{"class":2123},[77,10049,3059],{"class":94},[77,10051,104],{"class":87},[77,10053,10054,10056,10058,10060,10062],{"class":79,"line":4225},[77,10055,4460],{"class":2123},[77,10057,8993],{"class":2123},[77,10059,24],{"class":87},[77,10061,268],{"class":2123},[77,10063,9513],{"class":87},[77,10065,10066],{"class":79,"line":4230},[77,10067,10068],{"class":323},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[77,10070,10071,10074],{"class":79,"line":4235},[77,10072,10073],{"class":83},"    bubbleSort",[77,10075,10076],{"class":87},"(p,len);\n",[77,10078,10079],{"class":79,"line":4240},[77,10080,4875],{"emptyLinePlaceholder":2549},[77,10082,10083],{"class":79,"line":4254},[77,10084,10085],{"class":323},"    \u002F\u002F 3.打印排序后的数组\n",[77,10087,10088,10090,10092,10094,10096,10098,10100,10102,10104,10107,10109],{"class":79,"line":4259},[77,10089,5676],{"class":2123},[77,10091,4134],{"class":87},[77,10093,2625],{"class":2123},[77,10095,5507],{"class":87},[77,10097,268],{"class":2123},[77,10099,1939],{"class":94},[77,10101,5689],{"class":87},[77,10103,260],{"class":2123},[77,10105,10106],{"class":87},"len; i",[77,10108,4767],{"class":2123},[77,10110,2628],{"class":87},[77,10112,10113],{"class":79,"line":5052},[77,10114,4505],{"class":87},[77,10116,10117,10119,10121,10123,10125,10127],{"class":79,"line":5066},[77,10118,5926],{"class":87},[77,10120,8894],{"class":2123},[77,10122,24],{"class":87},[77,10124,3655],{"class":2123},[77,10126,444],{"class":271},[77,10128,104],{"class":87},[77,10130,10131,10134,10136],{"class":79,"line":5074},[77,10132,10133],{"class":87},"        p",[77,10135,4767],{"class":2123},[77,10137,104],{"class":87},[77,10139,10140],{"class":79,"line":5079},[77,10141,4662],{"class":87},[77,10143,10144],{"class":79,"line":5085},[77,10145,110],{"class":87},[2520,10147,10148],{},"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":72,"searchDepth":91,"depth":91,"links":10150},[10151,10152,10153,10154,10155,10156,10157,10158],{"id":8758,"depth":91,"text":8759},{"id":8924,"depth":91,"text":8925},{"id":9080,"depth":91,"text":9081},{"id":9158,"depth":91,"text":9159},{"id":9237,"depth":91,"text":9238},{"id":9336,"depth":91,"text":9337},{"id":9575,"depth":91,"text":9576},{"id":9753,"depth":91,"text":9754},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8747,"description":8755},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10165,"title":10166,"body":10167,"description":10174,"extension":2547,"meta":13147,"navigation":2549,"path":13148,"seo":13149,"stem":13150,"__hash__":13151},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10168,"toc":13138},[10169,10172,10175,10179,10182,10185,10196,10534,10537,10541,10544,10551,10806,10810,10813,10816,10971,10975,10978,10981,11187,11191,11194,11497,11499,11507,11511,11514,11665,11667,11678,11735,11739,11744,12401,12409,12412,12506,12509,13129,13135],[10,10170,10166],{"id":10171},"_4结构体",[24,10173,10174],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10176,10178],{"id":10177},"_41结构体定义与使用","4.1结构体定义与使用",[24,10180,10181],{},"语法：struct 结构体名 {结构体成员列表}；",[24,10183,10184],{},"通过结构体创建变量的方式：",[51,10186,10187,10190,10193],{},[54,10188,10189],{},"struct 结构体名 变量名",[54,10191,10192],{},"struct 结构体名 变量名={成员1值，成员2值...}",[54,10194,10195],{},"定义结构体时顺便创建变量",[67,10197,10199],{"className":2610,"code":10198,"language":2612,"meta":72,"style":72},"#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",[74,10200,10201,10207,10217,10224,10229,10237,10241,10246,10250,10255,10260,10265,10272,10277,10284,10288,10295,10299,10303,10307,10311,10315,10319,10325,10329,10335,10343,10351,10355,10360,10365,10376,10381,10393,10404,10415,10420,10444,10449,10455,10482,10487,10493,10505,10517,10529],{"__ignoreMap":72},[77,10202,10203,10205],{"class":79,"line":80},[77,10204,4425],{"class":2123},[77,10206,4428],{"class":271},[77,10208,10209,10211,10213,10215],{"class":79,"line":91},[77,10210,4433],{"class":2123},[77,10212,4436],{"class":2123},[77,10214,4439],{"class":83},[77,10216,104],{"class":87},[77,10218,10219,10221],{"class":79,"line":107},[77,10220,4425],{"class":2123},[77,10222,10223],{"class":271},"\u003Cstring>\n",[77,10225,10226],{"class":79,"line":191},[77,10227,10228],{"class":323},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[77,10230,10231,10234],{"class":79,"line":1543},[77,10232,10233],{"class":2123},"struct",[77,10235,10236],{"class":83}," Student\n",[77,10238,10239],{"class":79,"line":1549},[77,10240,4023],{"class":87},[77,10242,10243],{"class":79,"line":1566},[77,10244,10245],{"class":323},"    \u002F\u002F成员列表\n",[77,10247,10248],{"class":79,"line":1572},[77,10249,4875],{"emptyLinePlaceholder":2549},[77,10251,10252],{"class":79,"line":1589},[77,10253,10254],{"class":323},"    \u002F\u002F姓名\n",[77,10256,10257],{"class":79,"line":1595},[77,10258,10259],{"class":87},"    string name;\n",[77,10261,10262],{"class":79,"line":4088},[77,10263,10264],{"class":323},"    \u002F\u002F年龄\n",[77,10266,10267,10269],{"class":79,"line":4093},[77,10268,4460],{"class":2123},[77,10270,10271],{"class":87}," age;\n",[77,10273,10274],{"class":79,"line":4099},[77,10275,10276],{"class":323},"    \u002F\u002F分数\n",[77,10278,10279,10281],{"class":79,"line":4104},[77,10280,4460],{"class":2123},[77,10282,10283],{"class":87}," score;\n",[77,10285,10286],{"class":79,"line":4118},[77,10287,6470],{"class":87},[77,10289,10290,10292],{"class":79,"line":4123},[77,10291,10233],{"class":2123},[77,10293,10294],{"class":83}," School\n",[77,10296,10297],{"class":79,"line":4129},[77,10298,4023],{"class":87},[77,10300,10301],{"class":79,"line":4150},[77,10302,10245],{"class":323},[77,10304,10305],{"class":79,"line":4155},[77,10306,4875],{"emptyLinePlaceholder":2549},[77,10308,10309],{"class":79,"line":4169},[77,10310,10254],{"class":323},[77,10312,10313],{"class":79,"line":4174},[77,10314,10259],{"class":87},[77,10316,10317],{"class":79,"line":4203},[77,10318,10264],{"class":323},[77,10320,10321,10323],{"class":79,"line":4208},[77,10322,4460],{"class":2123},[77,10324,10271],{"class":87},[77,10326,10327],{"class":79,"line":4225},[77,10328,10276],{"class":323},[77,10330,10331,10333],{"class":79,"line":4230},[77,10332,4460],{"class":2123},[77,10334,10283],{"class":87},[77,10336,10337,10340],{"class":79,"line":4235},[77,10338,10339],{"class":87},"} s3;",[77,10341,10342],{"class":323}," \u002F\u002F创建结构体时就创建了变量\n",[77,10344,10345,10347,10349],{"class":79,"line":4240},[77,10346,2625],{"class":2123},[77,10348,4448],{"class":83},[77,10350,4451],{"class":87},[77,10352,10353],{"class":79,"line":4254},[77,10354,4023],{"class":87},[77,10356,10357],{"class":79,"line":4259},[77,10358,10359],{"class":323},"    \u002F\u002F2.通过学生类型创建具体学生\n",[77,10361,10362],{"class":79,"line":5052},[77,10363,10364],{"class":323},"    \u002F\u002F2.1 struct Student s1;\n",[77,10366,10367,10370,10373],{"class":79,"line":5066},[77,10368,10369],{"class":2123},"    struct",[77,10371,10372],{"class":83}," Student",[77,10374,10375],{"class":87}," s1;\n",[77,10377,10378],{"class":79,"line":5074},[77,10379,10380],{"class":323},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[77,10382,10383,10386,10388,10391],{"class":79,"line":5079},[77,10384,10385],{"class":87},"    s1.name",[77,10387,268],{"class":2123},[77,10389,10390],{"class":271},"\"张三\"",[77,10392,104],{"class":87},[77,10394,10395,10398,10400,10402],{"class":79,"line":5085},[77,10396,10397],{"class":87},"    s1.age",[77,10399,268],{"class":2123},[77,10401,3263],{"class":94},[77,10403,104],{"class":87},[77,10405,10406,10409,10411,10413],{"class":79,"line":5091},[77,10407,10408],{"class":87},"    s1.score",[77,10410,268],{"class":2123},[77,10412,2868],{"class":94},[77,10414,104],{"class":87},[77,10416,10417],{"class":79,"line":5096},[77,10418,10419],{"class":323},"    \u002F\u002F输出结果\n",[77,10421,10423,10425,10427,10430,10432,10435,10437,10440,10442],{"class":79,"line":10422},37,[77,10424,4028],{"class":87},[77,10426,3655],{"class":2123},[77,10428,10429],{"class":87},"s1.name",[77,10431,3655],{"class":2123},[77,10433,10434],{"class":87},"s1.age",[77,10436,3655],{"class":2123},[77,10438,10439],{"class":87},"s1.score",[77,10441,3655],{"class":2123},[77,10443,3677],{"class":87},[77,10445,10447],{"class":79,"line":10446},38,[77,10448,4875],{"emptyLinePlaceholder":2549},[77,10450,10452],{"class":79,"line":10451},39,[77,10453,10454],{"class":323},"    \u002F\u002F2.2 struct Student s2={...}\n",[77,10456,10458,10460,10462,10465,10467,10469,10472,10474,10476,10478,10480],{"class":79,"line":10457},40,[77,10459,10369],{"class":2123},[77,10461,10372],{"class":83},[77,10463,10464],{"class":87}," s2",[77,10466,268],{"class":2123},[77,10468,3509],{"class":87},[77,10470,10471],{"class":271},"\"王五\"",[77,10473,2992],{"class":87},[77,10475,3263],{"class":94},[77,10477,2992],{"class":87},[77,10479,2868],{"class":94},[77,10481,6470],{"class":87},[77,10483,10485],{"class":79,"line":10484},41,[77,10486,4875],{"emptyLinePlaceholder":2549},[77,10488,10490],{"class":79,"line":10489},42,[77,10491,10492],{"class":323},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[77,10494,10496,10499,10501,10503],{"class":79,"line":10495},43,[77,10497,10498],{"class":87},"    s3.name",[77,10500,268],{"class":2123},[77,10502,6153],{"class":271},[77,10504,104],{"class":87},[77,10506,10508,10511,10513,10515],{"class":79,"line":10507},44,[77,10509,10510],{"class":87},"    s3.age",[77,10512,268],{"class":2123},[77,10514,3263],{"class":94},[77,10516,104],{"class":87},[77,10518,10520,10523,10525,10527],{"class":79,"line":10519},45,[77,10521,10522],{"class":87},"    s3.score",[77,10524,268],{"class":2123},[77,10526,3313],{"class":94},[77,10528,104],{"class":87},[77,10530,10532],{"class":79,"line":10531},46,[77,10533,110],{"class":87},[24,10535,10536],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10538,10540],{"id":10539},"_42结构体数组","4.2结构体数组",[24,10542,10543],{},"将自定义的结构体放入到数组中方便维护",[24,10545,10546,10547,10550],{},"语法：struct 结构体名 数组名",[77,10548,10549],{},"元素个数","={ {}，{},...{} };",[67,10552,10554],{"className":2610,"code":10553,"language":2612,"meta":72,"style":72},"#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",[74,10555,10556,10562,10572,10578,10583,10589,10593,10597,10603,10609,10613,10617,10625,10629,10634,10649,10653,10669,10685,10689,10694,10710,10725,10740,10745,10771,10775,10798,10802],{"__ignoreMap":72},[77,10557,10558,10560],{"class":79,"line":80},[77,10559,4425],{"class":2123},[77,10561,4428],{"class":271},[77,10563,10564,10566,10568,10570],{"class":79,"line":91},[77,10565,4433],{"class":2123},[77,10567,4436],{"class":2123},[77,10569,4439],{"class":83},[77,10571,104],{"class":87},[77,10573,10574,10576],{"class":79,"line":107},[77,10575,4425],{"class":2123},[77,10577,10223],{"class":271},[77,10579,10580],{"class":79,"line":191},[77,10581,10582],{"class":323},"\u002F\u002F1.定义结构体\n",[77,10584,10585,10587],{"class":79,"line":1543},[77,10586,10233],{"class":2123},[77,10588,10236],{"class":83},[77,10590,10591],{"class":79,"line":1549},[77,10592,4023],{"class":87},[77,10594,10595],{"class":79,"line":1566},[77,10596,10259],{"class":87},[77,10598,10599,10601],{"class":79,"line":1572},[77,10600,4460],{"class":2123},[77,10602,10271],{"class":87},[77,10604,10605,10607],{"class":79,"line":1589},[77,10606,4460],{"class":2123},[77,10608,10283],{"class":87},[77,10610,10611],{"class":79,"line":1595},[77,10612,4875],{"emptyLinePlaceholder":2549},[77,10614,10615],{"class":79,"line":4088},[77,10616,6470],{"class":87},[77,10618,10619,10621,10623],{"class":79,"line":4093},[77,10620,2625],{"class":2123},[77,10622,4448],{"class":83},[77,10624,4451],{"class":87},[77,10626,10627],{"class":79,"line":4099},[77,10628,4023],{"class":87},[77,10630,10631],{"class":79,"line":4104},[77,10632,10633],{"class":323},"    \u002F\u002F2.创建结构体数组\n",[77,10635,10636,10638,10640,10643,10645,10647],{"class":79,"line":4118},[77,10637,10369],{"class":2123},[77,10639,10372],{"class":83},[77,10641,10642],{"class":87}," stuArray[",[77,10644,2696],{"class":94},[77,10646,3552],{"class":87},[77,10648,7383],{"class":2123},[77,10650,10651],{"class":79,"line":4123},[77,10652,4505],{"class":87},[77,10654,10655,10657,10659,10661,10663,10665,10667],{"class":79,"line":4129},[77,10656,7392],{"class":87},[77,10658,10390],{"class":271},[77,10660,2992],{"class":87},[77,10662,3263],{"class":94},[77,10664,2992],{"class":87},[77,10666,2925],{"class":94},[77,10668,7405],{"class":87},[77,10670,10671,10673,10675,10677,10679,10681,10683],{"class":79,"line":4150},[77,10672,7392],{"class":87},[77,10674,6153],{"class":271},[77,10676,2992],{"class":87},[77,10678,3188],{"class":94},[77,10680,2992],{"class":87},[77,10682,3188],{"class":94},[77,10684,110],{"class":87},[77,10686,10687],{"class":79,"line":4155},[77,10688,4662],{"class":87},[77,10690,10691],{"class":79,"line":4169},[77,10692,10693],{"class":323},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[77,10695,10696,10699,10701,10704,10706,10708],{"class":79,"line":4174},[77,10697,10698],{"class":87},"    stuArray[",[77,10700,2120],{"class":94},[77,10702,10703],{"class":87},"].name",[77,10705,268],{"class":2123},[77,10707,6176],{"class":271},[77,10709,104],{"class":87},[77,10711,10712,10714,10716,10719,10721,10723],{"class":79,"line":4203},[77,10713,10698],{"class":87},[77,10715,2120],{"class":94},[77,10717,10718],{"class":87},"].age",[77,10720,268],{"class":2123},[77,10722,2696],{"class":94},[77,10724,104],{"class":87},[77,10726,10727,10729,10731,10734,10736,10738],{"class":79,"line":4208},[77,10728,10698],{"class":87},[77,10730,2120],{"class":94},[77,10732,10733],{"class":87},"].score",[77,10735,268],{"class":2123},[77,10737,2696],{"class":94},[77,10739,104],{"class":87},[77,10741,10742],{"class":79,"line":4225},[77,10743,10744],{"class":323},"    \u002F\u002F4.遍历结构体数组\n",[77,10746,10747,10749,10751,10753,10755,10757,10759,10761,10763,10765,10767,10769],{"class":79,"line":4230},[77,10748,5676],{"class":2123},[77,10750,4134],{"class":87},[77,10752,2625],{"class":2123},[77,10754,5507],{"class":87},[77,10756,268],{"class":2123},[77,10758,1939],{"class":94},[77,10760,5514],{"class":87},[77,10762,260],{"class":2123},[77,10764,2696],{"class":94},[77,10766,5514],{"class":87},[77,10768,4767],{"class":2123},[77,10770,2628],{"class":87},[77,10772,10773],{"class":79,"line":4235},[77,10774,4505],{"class":87},[77,10776,10777,10779,10781,10784,10786,10789,10791,10794,10796],{"class":79,"line":4240},[77,10778,5926],{"class":87},[77,10780,3655],{"class":2123},[77,10782,10783],{"class":87},"stuArray[i].name",[77,10785,3655],{"class":2123},[77,10787,10788],{"class":87},"stuArray[i].age",[77,10790,3655],{"class":2123},[77,10792,10793],{"class":87},"stuArray[i].score",[77,10795,3655],{"class":2123},[77,10797,3677],{"class":87},[77,10799,10800],{"class":79,"line":4254},[77,10801,4662],{"class":87},[77,10803,10804],{"class":79,"line":4259},[77,10805,110],{"class":87},[14,10807,10809],{"id":10808},"_43结构体指针","4.3结构体指针",[24,10811,10812],{},"作用：通过指针访问结构体中的成员",[24,10814,10815],{},"利用操作符->可以通过结构体指针访问结构体属性",[67,10817,10819],{"className":2610,"code":10818,"language":2612,"meta":72,"style":72},"#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",[74,10820,10821,10827,10837,10843,10847,10853,10857,10861,10867,10873,10877,10885,10889,10894,10919,10924,10939,10944,10967],{"__ignoreMap":72},[77,10822,10823,10825],{"class":79,"line":80},[77,10824,4425],{"class":2123},[77,10826,4428],{"class":271},[77,10828,10829,10831,10833,10835],{"class":79,"line":91},[77,10830,4433],{"class":2123},[77,10832,4436],{"class":2123},[77,10834,4439],{"class":83},[77,10836,104],{"class":87},[77,10838,10839,10841],{"class":79,"line":107},[77,10840,4425],{"class":2123},[77,10842,10223],{"class":271},[77,10844,10845],{"class":79,"line":191},[77,10846,10582],{"class":323},[77,10848,10849,10851],{"class":79,"line":1543},[77,10850,10233],{"class":2123},[77,10852,10236],{"class":83},[77,10854,10855],{"class":79,"line":1549},[77,10856,4023],{"class":87},[77,10858,10859],{"class":79,"line":1566},[77,10860,10259],{"class":87},[77,10862,10863,10865],{"class":79,"line":1572},[77,10864,4460],{"class":2123},[77,10866,10271],{"class":87},[77,10868,10869,10871],{"class":79,"line":1589},[77,10870,4460],{"class":2123},[77,10872,10283],{"class":87},[77,10874,10875],{"class":79,"line":1595},[77,10876,6470],{"class":87},[77,10878,10879,10881,10883],{"class":79,"line":4088},[77,10880,2625],{"class":2123},[77,10882,4448],{"class":83},[77,10884,4451],{"class":87},[77,10886,10887],{"class":79,"line":4093},[77,10888,4023],{"class":87},[77,10890,10891],{"class":79,"line":4099},[77,10892,10893],{"class":323},"    \u002F\u002F创建学生结构体变量\n",[77,10895,10896,10898,10900,10903,10905,10907,10909,10911,10913,10915,10917],{"class":79,"line":4104},[77,10897,10369],{"class":2123},[77,10899,10372],{"class":83},[77,10901,10902],{"class":87}," s",[77,10904,268],{"class":2123},[77,10906,3509],{"class":87},[77,10908,10390],{"class":271},[77,10910,2992],{"class":87},[77,10912,3263],{"class":94},[77,10914,2992],{"class":87},[77,10916,4198],{"class":94},[77,10918,6470],{"class":87},[77,10920,10921],{"class":79,"line":4118},[77,10922,10923],{"class":323},"    \u002F\u002F通过指针指向结构体变量\n",[77,10925,10926,10928,10930,10932,10934,10936],{"class":79,"line":4123},[77,10927,10369],{"class":2123},[77,10929,10372],{"class":83},[77,10931,8993],{"class":2123},[77,10933,24],{"class":87},[77,10935,8814],{"class":2123},[77,10937,10938],{"class":87},"s\n",[77,10940,10941],{"class":79,"line":4129},[77,10942,10943],{"class":323},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[77,10945,10946,10948,10950,10953,10955,10958,10960,10963,10965],{"class":79,"line":4150},[77,10947,4028],{"class":87},[77,10949,3655],{"class":2123},[77,10951,10952],{"class":87},"p->name",[77,10954,3655],{"class":2123},[77,10956,10957],{"class":87},"p->age",[77,10959,3655],{"class":2123},[77,10961,10962],{"class":87},"p->score",[77,10964,3655],{"class":2123},[77,10966,3677],{"class":87},[77,10968,10969],{"class":79,"line":4155},[77,10970,110],{"class":87},[14,10972,10974],{"id":10973},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[24,10976,10977],{},"作用：结构体中的成员可以是另一个结构体",[24,10979,10980],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[67,10982,10984],{"className":2610,"code":10983,"language":2612,"meta":72,"style":72},"#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",[74,10985,10986,10992,11002,11008,11013,11021,11025,11029,11035,11041,11045,11050,11057,11061,11068,11072,11078,11083,11087,11095,11099,11104,11109,11114,11125,11137,11148,11161,11172,11183],{"__ignoreMap":72},[77,10987,10988,10990],{"class":79,"line":80},[77,10989,4425],{"class":2123},[77,10991,4428],{"class":271},[77,10993,10994,10996,10998,11000],{"class":79,"line":91},[77,10995,4433],{"class":2123},[77,10997,4436],{"class":2123},[77,10999,4439],{"class":83},[77,11001,104],{"class":87},[77,11003,11004,11006],{"class":79,"line":107},[77,11005,4425],{"class":2123},[77,11007,10223],{"class":271},[77,11009,11010],{"class":79,"line":191},[77,11011,11012],{"class":323},"\u002F\u002F定义学生结构体\n",[77,11014,11015,11017,11019],{"class":79,"line":1543},[77,11016,10233],{"class":2123},[77,11018,10372],{"class":83},[77,11020,5149],{"class":87},[77,11022,11023],{"class":79,"line":1549},[77,11024,4023],{"class":87},[77,11026,11027],{"class":79,"line":1566},[77,11028,10259],{"class":87},[77,11030,11031,11033],{"class":79,"line":1572},[77,11032,4460],{"class":2123},[77,11034,10271],{"class":87},[77,11036,11037,11039],{"class":79,"line":1589},[77,11038,4460],{"class":2123},[77,11040,10283],{"class":87},[77,11042,11043],{"class":79,"line":1595},[77,11044,110],{"class":87},[77,11046,11047],{"class":79,"line":4088},[77,11048,11049],{"class":323},"\u002F\u002F定义老师结构体\n",[77,11051,11052,11054],{"class":79,"line":4093},[77,11053,10233],{"class":2123},[77,11055,11056],{"class":83}," Teacher\n",[77,11058,11059],{"class":79,"line":4099},[77,11060,4023],{"class":87},[77,11062,11063,11065],{"class":79,"line":4104},[77,11064,4460],{"class":2123},[77,11066,11067],{"class":87}," id;\n",[77,11069,11070],{"class":79,"line":4118},[77,11071,10259],{"class":87},[77,11073,11074,11076],{"class":79,"line":4123},[77,11075,4460],{"class":2123},[77,11077,10271],{"class":87},[77,11079,11080],{"class":79,"line":4129},[77,11081,11082],{"class":87},"    Student stu;\n",[77,11084,11085],{"class":79,"line":4150},[77,11086,110],{"class":87},[77,11088,11089,11091,11093],{"class":79,"line":4155},[77,11090,2625],{"class":2123},[77,11092,4448],{"class":83},[77,11094,8453],{"class":87},[77,11096,11097],{"class":79,"line":4169},[77,11098,4023],{"class":87},[77,11100,11101],{"class":79,"line":4174},[77,11102,11103],{"class":323},"    \u002F\u002F结构体嵌套结构体\n",[77,11105,11106],{"class":79,"line":4203},[77,11107,11108],{"class":323},"    \u002F\u002F创建老师\n",[77,11110,11111],{"class":79,"line":4208},[77,11112,11113],{"class":87},"    Teacher t;\n",[77,11115,11116,11119,11121,11123],{"class":79,"line":4225},[77,11117,11118],{"class":87},"    t.id",[77,11120,268],{"class":2123},[77,11122,2925],{"class":94},[77,11124,104],{"class":87},[77,11126,11127,11130,11132,11135],{"class":79,"line":4230},[77,11128,11129],{"class":87},"    t.name",[77,11131,268],{"class":2123},[77,11133,11134],{"class":271},"\"老王\"",[77,11136,104],{"class":87},[77,11138,11139,11142,11144,11146],{"class":79,"line":4235},[77,11140,11141],{"class":87},"    t.age",[77,11143,268],{"class":2123},[77,11145,3263],{"class":94},[77,11147,104],{"class":87},[77,11149,11150,11153,11155,11158],{"class":79,"line":4240},[77,11151,11152],{"class":87},"    t.stu.name",[77,11154,268],{"class":2123},[77,11156,11157],{"class":271},"\"小王\"",[77,11159,11160],{"class":87},"；\n",[77,11162,11163,11166,11168,11170],{"class":79,"line":4254},[77,11164,11165],{"class":87},"    t.stu.age",[77,11167,268],{"class":2123},[77,11169,3313],{"class":94},[77,11171,104],{"class":87},[77,11173,11174,11177,11179,11181],{"class":79,"line":4259},[77,11175,11176],{"class":87},"    t.stu.score",[77,11178,268],{"class":2123},[77,11180,2958],{"class":94},[77,11182,104],{"class":87},[77,11184,11185],{"class":79,"line":5052},[77,11186,110],{"class":87},[14,11188,11190],{"id":11189},"_45结构体做函数参数","4.5结构体做函数参数",[24,11192,11193],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[67,11195,11197],{"className":2610,"code":11196,"language":2612,"meta":72,"style":72},"#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",[74,11198,11199,11205,11215,11221,11227,11231,11235,11241,11247,11251,11256,11261,11278,11282,11315,11319,11324,11343,11347,11378,11382,11390,11394,11403,11415,11427,11439,11452,11460,11473,11485,11493],{"__ignoreMap":72},[77,11200,11201,11203],{"class":79,"line":80},[77,11202,4425],{"class":2123},[77,11204,4428],{"class":271},[77,11206,11207,11209,11211,11213],{"class":79,"line":91},[77,11208,4433],{"class":2123},[77,11210,4436],{"class":2123},[77,11212,4439],{"class":83},[77,11214,104],{"class":87},[77,11216,11217,11219],{"class":79,"line":107},[77,11218,4425],{"class":2123},[77,11220,10223],{"class":271},[77,11222,11223,11225],{"class":79,"line":191},[77,11224,10233],{"class":2123},[77,11226,10236],{"class":83},[77,11228,11229],{"class":79,"line":1543},[77,11230,4023],{"class":87},[77,11232,11233],{"class":79,"line":1549},[77,11234,10259],{"class":87},[77,11236,11237,11239],{"class":79,"line":1566},[77,11238,4460],{"class":2123},[77,11240,10271],{"class":87},[77,11242,11243,11245],{"class":79,"line":1572},[77,11244,4460],{"class":2123},[77,11246,10283],{"class":87},[77,11248,11249],{"class":79,"line":1589},[77,11250,6470],{"class":87},[77,11252,11253],{"class":79,"line":1595},[77,11254,11255],{"class":323},"\u002F\u002F打印学生信息的函数\n",[77,11257,11258],{"class":79,"line":4088},[77,11259,11260],{"class":323},"\u002F\u002F值传递\n",[77,11262,11263,11265,11268,11270,11272,11274,11276],{"class":79,"line":4093},[77,11264,7839],{"class":2123},[77,11266,11267],{"class":83}," printStudent1",[77,11269,2622],{"class":87},[77,11271,10233],{"class":2123},[77,11273,10372],{"class":83},[77,11275,10902],{"class":7691},[77,11277,2628],{"class":87},[77,11279,11280],{"class":79,"line":4099},[77,11281,4023],{"class":87},[77,11283,11284,11286,11288,11291,11293,11296,11298,11301,11303,11305,11307,11310,11312],{"class":79,"line":4104},[77,11285,9004],{"class":87},[77,11287,3655],{"class":2123},[77,11289,11290],{"class":87}," s.name ",[77,11292,3655],{"class":2123},[77,11294,11295],{"class":271}," \" \"",[77,11297,3922],{"class":2123},[77,11299,11300],{"class":87}," s.age ",[77,11302,3655],{"class":2123},[77,11304,11295],{"class":271},[77,11306,3922],{"class":2123},[77,11308,11309],{"class":87}," s.score ",[77,11311,3655],{"class":2123},[77,11313,11314],{"class":87}," endl;\n",[77,11316,11317],{"class":79,"line":4118},[77,11318,110],{"class":87},[77,11320,11321],{"class":79,"line":4123},[77,11322,11323],{"class":323},"\u002F\u002F地址传递\n",[77,11325,11326,11328,11331,11333,11335,11337,11339,11341],{"class":79,"line":4129},[77,11327,7839],{"class":2123},[77,11329,11330],{"class":83}," printStudent2",[77,11332,2622],{"class":87},[77,11334,10233],{"class":2123},[77,11336,10372],{"class":83},[77,11338,8993],{"class":2123},[77,11340,3308],{"class":7691},[77,11342,2628],{"class":87},[77,11344,11345],{"class":79,"line":4150},[77,11346,4023],{"class":87},[77,11348,11349,11351,11353,11356,11358,11360,11362,11365,11367,11369,11371,11374,11376],{"class":79,"line":4155},[77,11350,9004],{"class":87},[77,11352,3655],{"class":2123},[77,11354,11355],{"class":87}," s->name ",[77,11357,3655],{"class":2123},[77,11359,11295],{"class":271},[77,11361,3922],{"class":2123},[77,11363,11364],{"class":87}," s->age ",[77,11366,3655],{"class":2123},[77,11368,11295],{"class":271},[77,11370,3922],{"class":2123},[77,11372,11373],{"class":87}," s->score ",[77,11375,3655],{"class":2123},[77,11377,11314],{"class":87},[77,11379,11380],{"class":79,"line":4169},[77,11381,110],{"class":87},[77,11383,11384,11386,11388],{"class":79,"line":4174},[77,11385,2625],{"class":2123},[77,11387,4448],{"class":83},[77,11389,4451],{"class":87},[77,11391,11392],{"class":79,"line":4203},[77,11393,4023],{"class":87},[77,11395,11396,11398,11400],{"class":79,"line":4208},[77,11397,10369],{"class":2123},[77,11399,10372],{"class":83},[77,11401,11402],{"class":87}," s;\n",[77,11404,11405,11408,11410,11413],{"class":79,"line":4225},[77,11406,11407],{"class":87},"    s.name ",[77,11409,268],{"class":2123},[77,11411,11412],{"class":271}," \"张三\"",[77,11414,104],{"class":87},[77,11416,11417,11420,11422,11425],{"class":79,"line":4230},[77,11418,11419],{"class":87},"    s.age ",[77,11421,268],{"class":2123},[77,11423,11424],{"class":94}," 20",[77,11426,104],{"class":87},[77,11428,11429,11432,11434,11437],{"class":79,"line":4235},[77,11430,11431],{"class":87},"    s.score ",[77,11433,268],{"class":2123},[77,11435,11436],{"class":94}," 85",[77,11438,104],{"class":87},[77,11440,11441,11443,11445,11448,11450],{"class":79,"line":4240},[77,11442,4028],{"class":87},[77,11444,3655],{"class":2123},[77,11446,11447],{"class":271},"\"值传递:\"",[77,11449,3655],{"class":2123},[77,11451,3677],{"class":87},[77,11453,11454,11457],{"class":79,"line":4254},[77,11455,11456],{"class":83},"    printStudent1",[77,11458,11459],{"class":87},"(s);\n",[77,11461,11462,11464,11466,11469,11471],{"class":79,"line":4259},[77,11463,4028],{"class":87},[77,11465,3655],{"class":2123},[77,11467,11468],{"class":271},"\"地址传递:\"",[77,11470,3655],{"class":2123},[77,11472,3677],{"class":87},[77,11474,11475,11478,11480,11482],{"class":79,"line":5052},[77,11476,11477],{"class":83},"    printStudent2",[77,11479,2622],{"class":87},[77,11481,2967],{"class":2123},[77,11483,11484],{"class":87},"s); \n",[77,11486,11487,11489,11491],{"class":79,"line":5066},[77,11488,6565],{"class":2123},[77,11490,6568],{"class":94},[77,11492,104],{"class":87},[77,11494,11495],{"class":79,"line":5074},[77,11496,110],{"class":87},[24,11498,1988],{},[51,11500,11501,11504],{},[54,11502,11503],{},"1.先定义结构体，不要在函数中写结构体的定义",[54,11505,11506],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11508,11510],{"id":11509},"_46结构体中const使用场景","4.6结构体中const使用场景",[24,11512,11513],{},"用const防止误操作",[67,11515,11517],{"className":2610,"code":11516,"language":2612,"meta":72,"style":72},"#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",[74,11518,11519,11525,11535,11541,11546,11550,11554,11560,11566,11570,11586,11590,11613,11617,11625,11629,11650,11657,11661],{"__ignoreMap":72},[77,11520,11521,11523],{"class":79,"line":80},[77,11522,4425],{"class":2123},[77,11524,4428],{"class":271},[77,11526,11527,11529,11531,11533],{"class":79,"line":91},[77,11528,4433],{"class":2123},[77,11530,4436],{"class":2123},[77,11532,4439],{"class":83},[77,11534,104],{"class":87},[77,11536,11537,11539],{"class":79,"line":107},[77,11538,4425],{"class":2123},[77,11540,10223],{"class":271},[77,11542,11543],{"class":79,"line":191},[77,11544,11545],{"class":87},"sctuct Student\n",[77,11547,11548],{"class":79,"line":1543},[77,11549,4023],{"class":87},[77,11551,11552],{"class":79,"line":1549},[77,11553,10259],{"class":87},[77,11555,11556,11558],{"class":79,"line":1566},[77,11557,4460],{"class":2123},[77,11559,10271],{"class":87},[77,11561,11562,11564],{"class":79,"line":1572},[77,11563,4460],{"class":2123},[77,11565,10283],{"class":87},[77,11567,11568],{"class":79,"line":1589},[77,11569,6470],{"class":87},[77,11571,11572,11574,11577,11579,11582,11584],{"class":79,"line":1595},[77,11573,7839],{"class":2123},[77,11575,11576],{"class":83}," printStudents",[77,11578,2622],{"class":87},[77,11580,11581],{"class":83},"student",[77,11583,10902],{"class":7691},[77,11585,2628],{"class":87},[77,11587,11588],{"class":79,"line":4088},[77,11589,4023],{"class":87},[77,11591,11592,11594,11596,11599,11601,11604,11606,11609,11611],{"class":79,"line":4093},[77,11593,4028],{"class":87},[77,11595,3655],{"class":2123},[77,11597,11598],{"class":87},"s.name",[77,11600,3655],{"class":2123},[77,11602,11603],{"class":87},"s.age",[77,11605,3655],{"class":2123},[77,11607,11608],{"class":87},"s.score",[77,11610,3655],{"class":2123},[77,11612,3677],{"class":87},[77,11614,11615],{"class":79,"line":4099},[77,11616,110],{"class":87},[77,11618,11619,11621,11623],{"class":79,"line":4104},[77,11620,2625],{"class":2123},[77,11622,4448],{"class":83},[77,11624,8453],{"class":87},[77,11626,11627],{"class":79,"line":4118},[77,11628,4023],{"class":87},[77,11630,11631,11634,11636,11638,11640,11642,11644,11646,11648],{"class":79,"line":4123},[77,11632,11633],{"class":87},"    Student s",[77,11635,268],{"class":2123},[77,11637,3509],{"class":87},[77,11639,10390],{"class":271},[77,11641,2992],{"class":87},[77,11643,3263],{"class":94},[77,11645,2992],{"class":87},[77,11647,3263],{"class":94},[77,11649,6470],{"class":87},[77,11651,11652,11655],{"class":79,"line":4129},[77,11653,11654],{"class":83},"    printStudent",[77,11656,11459],{"class":87},[77,11658,11659],{"class":79,"line":4150},[77,11660,4875],{"emptyLinePlaceholder":2549},[77,11662,11663],{"class":79,"line":4155},[77,11664,110],{"class":87},[24,11666,1988],{},[51,11668,11669,11672,11675],{},[54,11670,11671],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[54,11673,11674],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[54,11676,11677],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[67,11679,11681],{"className":2610,"code":11680,"language":2612,"meta":72,"style":72},"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",[74,11682,11683,11702,11706,11711,11731],{"__ignoreMap":72},[77,11684,11685,11687,11689,11691,11693,11696,11698,11700],{"class":79,"line":80},[77,11686,7839],{"class":2123},[77,11688,11576],{"class":83},[77,11690,2622],{"class":87},[77,11692,9267],{"class":2123},[77,11694,11695],{"class":83}," student",[77,11697,8993],{"class":2123},[77,11699,3308],{"class":7691},[77,11701,2628],{"class":87},[77,11703,11704],{"class":79,"line":91},[77,11705,4023],{"class":87},[77,11707,11708],{"class":79,"line":107},[77,11709,11710],{"class":323},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[77,11712,11713,11715,11717,11719,11721,11723,11725,11727,11729],{"class":79,"line":191},[77,11714,4028],{"class":87},[77,11716,3655],{"class":2123},[77,11718,11598],{"class":87},[77,11720,3655],{"class":2123},[77,11722,11603],{"class":87},[77,11724,3655],{"class":2123},[77,11726,11608],{"class":87},[77,11728,3655],{"class":2123},[77,11730,3677],{"class":87},[77,11732,11733],{"class":79,"line":1543},[77,11734,110],{"class":87},[14,11736,11738],{"id":11737},"_47案例","4.7案例",[139,11740,11741],{},[54,11742,11743],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[67,11745,11747],{"className":2610,"code":11746,"language":2612,"meta":72,"style":72},"#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",[74,11748,11749,11755,11765,11771,11778,11782,11788,11792,11797,11803,11809,11813,11817,11823,11827,11832,11837,11850,11854,11859,11885,11889,11901,11928,11932,11944,11954,11958,11963,11992,11996,12008,12017,12044,12055,12065,12069,12073,12077,12082,12106,12110,12134,12138,12157,12183,12187,12212,12235,12259,12264,12269,12274,12283,12288,12294,12315,12321,12335,12341,12368,12377,12383,12391,12396],{"__ignoreMap":72},[77,11750,11751,11753],{"class":79,"line":80},[77,11752,4425],{"class":2123},[77,11754,4428],{"class":271},[77,11756,11757,11759,11761,11763],{"class":79,"line":91},[77,11758,4433],{"class":2123},[77,11760,4436],{"class":2123},[77,11762,4439],{"class":83},[77,11764,104],{"class":87},[77,11766,11767,11769],{"class":79,"line":107},[77,11768,4425],{"class":2123},[77,11770,10223],{"class":271},[77,11772,11773,11775],{"class":79,"line":191},[77,11774,4425],{"class":2123},[77,11776,11777],{"class":271},"\u003Cctime>\n",[77,11779,11780],{"class":79,"line":1543},[77,11781,11012],{"class":323},[77,11783,11784,11786],{"class":79,"line":1549},[77,11785,10233],{"class":2123},[77,11787,10236],{"class":83},[77,11789,11790],{"class":79,"line":1566},[77,11791,4023],{"class":87},[77,11793,11794],{"class":79,"line":1572},[77,11795,11796],{"class":87},"    string sName;\n",[77,11798,11799,11801],{"class":79,"line":1589},[77,11800,4460],{"class":2123},[77,11802,10271],{"class":87},[77,11804,11805,11807],{"class":79,"line":1595},[77,11806,4460],{"class":2123},[77,11808,10283],{"class":87},[77,11810,11811],{"class":79,"line":4088},[77,11812,6470],{"class":87},[77,11814,11815],{"class":79,"line":4093},[77,11816,11049],{"class":323},[77,11818,11819,11821],{"class":79,"line":4099},[77,11820,10233],{"class":2123},[77,11822,11056],{"class":83},[77,11824,11825],{"class":79,"line":4104},[77,11826,4023],{"class":87},[77,11828,11829],{"class":79,"line":4118},[77,11830,11831],{"class":87},"    string tName;\n",[77,11833,11834],{"class":79,"line":4123},[77,11835,11836],{"class":323},"    \u002F\u002F学生数组\n",[77,11838,11839,11841,11843,11846,11848],{"class":79,"line":4129},[77,11840,10369],{"class":2123},[77,11842,10372],{"class":83},[77,11844,11845],{"class":87}," sArray[",[77,11847,2933],{"class":94},[77,11849,7165],{"class":87},[77,11851,11852],{"class":79,"line":4150},[77,11853,6470],{"class":87},[77,11855,11856],{"class":79,"line":4155},[77,11857,11858],{"class":323},"\u002F\u002F给老师和学生赋值的函数\n",[77,11860,11861,11863,11866,11868,11870,11873,11876,11879,11881,11883],{"class":79,"line":4169},[77,11862,7839],{"class":2123},[77,11864,11865],{"class":83}," allocateSpace",[77,11867,2622],{"class":87},[77,11869,10233],{"class":2123},[77,11871,11872],{"class":83}," Teacher",[77,11874,11875],{"class":7691}," tArray",[77,11877,11878],{"class":87},"[],",[77,11880,2625],{"class":2123},[77,11882,9806],{"class":7691},[77,11884,2628],{"class":87},[77,11886,11887],{"class":79,"line":4174},[77,11888,4023],{"class":87},[77,11890,11891,11894,11896,11899],{"class":79,"line":4203},[77,11892,11893],{"class":87},"    string nameSeed",[77,11895,268],{"class":2123},[77,11897,11898],{"class":271},"\"ABCDE\"",[77,11900,104],{"class":87},[77,11902,11903,11905,11907,11909,11912,11914,11916,11919,11921,11924,11926],{"class":79,"line":4208},[77,11904,5676],{"class":2123},[77,11906,4134],{"class":87},[77,11908,2625],{"class":2123},[77,11910,11911],{"class":87}," i ",[77,11913,268],{"class":2123},[77,11915,6568],{"class":94},[77,11917,11918],{"class":87},"; i ",[77,11920,260],{"class":2123},[77,11922,11923],{"class":87}," len; i",[77,11925,4767],{"class":2123},[77,11927,2628],{"class":87},[77,11929,11930],{"class":79,"line":4225},[77,11931,4505],{"class":87},[77,11933,11934,11937,11939,11942],{"class":79,"line":4230},[77,11935,11936],{"class":87},"        tArray[i].tName ",[77,11938,268],{"class":2123},[77,11940,11941],{"class":271}," \"Teacher_\"",[77,11943,104],{"class":87},[77,11945,11946,11948,11951],{"class":79,"line":4235},[77,11947,11936],{"class":87},[77,11949,11950],{"class":2123},"+=",[77,11952,11953],{"class":87},"nameSeed[i];\n",[77,11955,11956],{"class":79,"line":4240},[77,11957,4875],{"emptyLinePlaceholder":2549},[77,11959,11960],{"class":79,"line":4254},[77,11961,11962],{"class":323},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[77,11964,11965,11967,11969,11971,11974,11976,11978,11981,11983,11985,11988,11990],{"class":79,"line":4259},[77,11966,5878],{"class":2123},[77,11968,4134],{"class":87},[77,11970,2625],{"class":2123},[77,11972,11973],{"class":87}," j ",[77,11975,268],{"class":2123},[77,11977,6568],{"class":94},[77,11979,11980],{"class":87},"; j ",[77,11982,260],{"class":2123},[77,11984,4623],{"class":94},[77,11986,11987],{"class":87},"; j",[77,11989,4767],{"class":2123},[77,11991,2628],{"class":87},[77,11993,11994],{"class":79,"line":5052},[77,11995,4985],{"class":87},[77,11997,11998,12001,12003,12006],{"class":79,"line":5066},[77,11999,12000],{"class":87},"            tArray[i].sArray[j].sName ",[77,12002,268],{"class":2123},[77,12004,12005],{"class":271}," \"Student_\"",[77,12007,104],{"class":87},[77,12009,12010,12012,12014],{"class":79,"line":5074},[77,12011,12000],{"class":87},[77,12013,11950],{"class":2123},[77,12015,12016],{"class":87}," nameSeed[j];\n",[77,12018,12019,12022,12025,12027,12029,12031,12033,12035,12037,12039,12041],{"class":79,"line":5079},[77,12020,12021],{"class":2123},"            int",[77,12023,12024],{"class":87}," random",[77,12026,268],{"class":2123},[77,12028,4899],{"class":83},[77,12030,4902],{"class":87},[77,12032,2942],{"class":2123},[77,12034,3520],{"class":94},[77,12036,3094],{"class":2123},[77,12038,3015],{"class":94},[77,12040,2675],{"class":87},[77,12042,12043],{"class":323},"\u002F\u002F40~99\n",[77,12045,12046,12049,12051,12053],{"class":79,"line":5085},[77,12047,12048],{"class":87},"            tArray[i].sArray[j].age ",[77,12050,268],{"class":2123},[77,12052,11424],{"class":94},[77,12054,104],{"class":87},[77,12056,12057,12060,12062],{"class":79,"line":5091},[77,12058,12059],{"class":87},"            tArray[i].sArray[j].score ",[77,12061,268],{"class":2123},[77,12063,12064],{"class":87}," random;\n",[77,12066,12067],{"class":79,"line":5096},[77,12068,5004],{"class":87},[77,12070,12071],{"class":79,"line":10422},[77,12072,4662],{"class":87},[77,12074,12075],{"class":79,"line":10446},[77,12076,110],{"class":87},[77,12078,12079],{"class":79,"line":10451},[77,12080,12081],{"class":323},"\u002F\u002F打印所有信息的函数\n",[77,12083,12084,12086,12089,12091,12093,12095,12097,12100,12102,12104],{"class":79,"line":10457},[77,12085,7839],{"class":2123},[77,12087,12088],{"class":83}," printInfo",[77,12090,2622],{"class":87},[77,12092,10233],{"class":2123},[77,12094,11872],{"class":83},[77,12096,11875],{"class":7691},[77,12098,12099],{"class":87},"[], ",[77,12101,2625],{"class":2123},[77,12103,9806],{"class":7691},[77,12105,2628],{"class":87},[77,12107,12108],{"class":79,"line":10484},[77,12109,4023],{"class":87},[77,12111,12112,12114,12116,12118,12120,12122,12124,12126,12128,12130,12132],{"class":79,"line":10489},[77,12113,5676],{"class":2123},[77,12115,4134],{"class":87},[77,12117,2625],{"class":2123},[77,12119,11911],{"class":87},[77,12121,268],{"class":2123},[77,12123,6568],{"class":94},[77,12125,11918],{"class":87},[77,12127,260],{"class":2123},[77,12129,11923],{"class":87},[77,12131,4767],{"class":2123},[77,12133,2628],{"class":87},[77,12135,12136],{"class":79,"line":10495},[77,12137,4505],{"class":87},[77,12139,12140,12143,12145,12148,12150,12153,12155],{"class":79,"line":10507},[77,12141,12142],{"class":87},"        cout ",[77,12144,3655],{"class":2123},[77,12146,12147],{"class":271}," \"Teacher: \"",[77,12149,3922],{"class":2123},[77,12151,12152],{"class":87}," tArray[i].tName ",[77,12154,3655],{"class":2123},[77,12156,11314],{"class":87},[77,12158,12159,12161,12163,12165,12167,12169,12171,12173,12175,12177,12179,12181],{"class":79,"line":10519},[77,12160,5878],{"class":2123},[77,12162,4134],{"class":87},[77,12164,2625],{"class":2123},[77,12166,11973],{"class":87},[77,12168,268],{"class":2123},[77,12170,6568],{"class":94},[77,12172,11980],{"class":87},[77,12174,260],{"class":2123},[77,12176,4623],{"class":94},[77,12178,11987],{"class":87},[77,12180,4767],{"class":2123},[77,12182,2628],{"class":87},[77,12184,12185],{"class":79,"line":10531},[77,12186,4985],{"class":87},[77,12188,12190,12193,12195,12198,12200,12203,12205,12208,12210],{"class":79,"line":12189},47,[77,12191,12192],{"class":87},"            cout ",[77,12194,3655],{"class":2123},[77,12196,12197],{"class":271}," \"",[77,12199,3712],{"class":94},[77,12201,12202],{"class":271},"Student: \"",[77,12204,3922],{"class":2123},[77,12206,12207],{"class":87}," tArray[i].sArray[j].sName",[77,12209,3655],{"class":2123},[77,12211,3677],{"class":87},[77,12213,12215,12217,12219,12221,12223,12226,12228,12231,12233],{"class":79,"line":12214},48,[77,12216,12192],{"class":87},[77,12218,3655],{"class":2123},[77,12220,12197],{"class":271},[77,12222,3712],{"class":94},[77,12224,12225],{"class":271},"Age: \"",[77,12227,3922],{"class":2123},[77,12229,12230],{"class":87}," tArray[i].sArray[j].age ",[77,12232,3655],{"class":2123},[77,12234,11314],{"class":87},[77,12236,12238,12240,12242,12244,12246,12249,12251,12254,12256],{"class":79,"line":12237},49,[77,12239,12192],{"class":87},[77,12241,3655],{"class":2123},[77,12243,12197],{"class":271},[77,12245,3712],{"class":94},[77,12247,12248],{"class":271},"Score: \"",[77,12250,3922],{"class":2123},[77,12252,12253],{"class":87}," tArray[i].sArray[j].score ",[77,12255,3655],{"class":2123},[77,12257,12258],{"class":87}," endl;   \n",[77,12260,12262],{"class":79,"line":12261},50,[77,12263,5004],{"class":87},[77,12265,12267],{"class":79,"line":12266},51,[77,12268,4662],{"class":87},[77,12270,12272],{"class":79,"line":12271},52,[77,12273,110],{"class":87},[77,12275,12277,12279,12281],{"class":79,"line":12276},53,[77,12278,2625],{"class":2123},[77,12280,4448],{"class":83},[77,12282,4451],{"class":87},[77,12284,12286],{"class":79,"line":12285},54,[77,12287,4023],{"class":87},[77,12289,12291],{"class":79,"line":12290},55,[77,12292,12293],{"class":323},"    \u002F\u002F随机数种子\n",[77,12295,12297,12299,12301,12303,12305,12307,12309,12311,12313],{"class":79,"line":12296},56,[77,12298,4848],{"class":83},[77,12300,4851],{"class":87},[77,12302,4854],{"class":2123},[77,12304,4857],{"class":2123},[77,12306,3043],{"class":87},[77,12308,4862],{"class":83},[77,12310,2622],{"class":87},[77,12312,4867],{"class":94},[77,12314,4870],{"class":87},[77,12316,12318],{"class":79,"line":12317},57,[77,12319,12320],{"class":323},"    \u002F\u002F1.创建3名老师的数组\n",[77,12322,12324,12326,12328,12331,12333],{"class":79,"line":12323},58,[77,12325,10369],{"class":2123},[77,12327,11872],{"class":83},[77,12329,12330],{"class":87}," tArray[",[77,12332,2690],{"class":94},[77,12334,7165],{"class":87},[77,12336,12338],{"class":79,"line":12337},59,[77,12339,12340],{"class":323},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[77,12342,12344,12346,12349,12351,12354,12357,12359,12361,12364,12366],{"class":79,"line":12343},60,[77,12345,4460],{"class":2123},[77,12347,12348],{"class":87}," len ",[77,12350,268],{"class":2123},[77,12352,12353],{"class":2123}," sizeof",[77,12355,12356],{"class":87},"(tArray) ",[77,12358,3197],{"class":2123},[77,12360,12353],{"class":2123},[77,12362,12363],{"class":87},"(tArray[",[77,12365,1939],{"class":94},[77,12367,6331],{"class":87},[77,12369,12371,12374],{"class":79,"line":12370},61,[77,12372,12373],{"class":83},"    allocateSpace",[77,12375,12376],{"class":87},"(tArray, len);\n",[77,12378,12380],{"class":79,"line":12379},62,[77,12381,12382],{"class":323},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[77,12384,12386,12389],{"class":79,"line":12385},63,[77,12387,12388],{"class":83},"    printInfo",[77,12390,12376],{"class":87},[77,12392,12394],{"class":79,"line":12393},64,[77,12395,4875],{"emptyLinePlaceholder":2549},[77,12397,12399],{"class":79,"line":12398},65,[77,12400,110],{"class":87},[139,12402,12403],{"start":91},[54,12404,12405,12408],{},[27,12406,12407],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[24,12410,12411],{},"五名英雄信息如下：",[67,12413,12417],{"className":12414,"code":12415,"language":12416,"meta":72,"style":72},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[74,12418,12419,12437,12454,12471,12488],{"__ignoreMap":72},[77,12420,12421,12423,12426,12428,12430,12432,12435],{"class":79,"line":80},[77,12422,7392],{"class":87},[77,12424,12425],{"class":271},"\"刘备\"",[77,12427,2992],{"class":87},[77,12429,3388],{"class":94},[77,12431,2992],{"class":87},[77,12433,12434],{"class":271},"\"男\"",[77,12436,7405],{"class":87},[77,12438,12439,12441,12444,12446,12448,12450,12452],{"class":79,"line":91},[77,12440,7392],{"class":87},[77,12442,12443],{"class":271},"\"关羽\"",[77,12445,2992],{"class":87},[77,12447,3363],{"class":94},[77,12449,2992],{"class":87},[77,12451,12434],{"class":271},[77,12453,7405],{"class":87},[77,12455,12456,12458,12461,12463,12465,12467,12469],{"class":79,"line":107},[77,12457,7392],{"class":87},[77,12459,12460],{"class":271},"\"张飞\"",[77,12462,2992],{"class":87},[77,12464,3313],{"class":94},[77,12466,2992],{"class":87},[77,12468,12434],{"class":271},[77,12470,7405],{"class":87},[77,12472,12473,12475,12478,12480,12482,12484,12486],{"class":79,"line":191},[77,12474,7392],{"class":87},[77,12476,12477],{"class":271},"\"赵云\"",[77,12479,2992],{"class":87},[77,12481,3338],{"class":94},[77,12483,2992],{"class":87},[77,12485,12434],{"class":271},[77,12487,7405],{"class":87},[77,12489,12490,12492,12495,12497,12499,12501,12504],{"class":79,"line":1543},[77,12491,7392],{"class":87},[77,12493,12494],{"class":271},"\"貂蝉\"",[77,12496,2992],{"class":87},[77,12498,3288],{"class":94},[77,12500,2992],{"class":87},[77,12502,12503],{"class":271},"\"女\"",[77,12505,7405],{"class":87},[24,12507,12508],{},"代码：",[67,12510,12512],{"className":2610,"code":12511,"language":2612,"meta":72,"style":72},"#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",[74,12513,12514,12520,12530,12536,12543,12547,12551,12557,12562,12566,12571,12594,12598,12623,12627,12660,12665,12694,12699,12714,12740,12760,12765,12770,12774,12778,12783,12805,12809,12833,12837,12899,12903,12907,12915,12919,12924,12935,12939,12955,12971,12987,13003,13019,13023,13043,13065,13070,13083,13090,13095,13101,13106,13119,13125],{"__ignoreMap":72},[77,12515,12516,12518],{"class":79,"line":80},[77,12517,4425],{"class":2123},[77,12519,4428],{"class":271},[77,12521,12522,12524,12526,12528],{"class":79,"line":91},[77,12523,4433],{"class":2123},[77,12525,4436],{"class":2123},[77,12527,4439],{"class":83},[77,12529,104],{"class":87},[77,12531,12532,12534],{"class":79,"line":107},[77,12533,4425],{"class":2123},[77,12535,10223],{"class":271},[77,12537,12538,12540],{"class":79,"line":191},[77,12539,10233],{"class":2123},[77,12541,12542],{"class":83}," Sanguo\n",[77,12544,12545],{"class":79,"line":1543},[77,12546,4023],{"class":87},[77,12548,12549],{"class":79,"line":1549},[77,12550,10259],{"class":87},[77,12552,12553,12555],{"class":79,"line":1566},[77,12554,4460],{"class":2123},[77,12556,10271],{"class":87},[77,12558,12559],{"class":79,"line":1572},[77,12560,12561],{"class":87},"    string gender;\n",[77,12563,12564],{"class":79,"line":1589},[77,12565,6470],{"class":87},[77,12567,12568],{"class":79,"line":1595},[77,12569,12570],{"class":323},"\u002F\u002F定义排序函数\n",[77,12572,12573,12575,12577,12579,12582,12584,12586,12588,12590,12592],{"class":79,"line":4088},[77,12574,7839],{"class":2123},[77,12576,9791],{"class":83},[77,12578,2622],{"class":87},[77,12580,12581],{"class":83},"Sanguo",[77,12583,8993],{"class":2123},[77,12585,3308],{"class":7691},[77,12587,2992],{"class":87},[77,12589,2625],{"class":2123},[77,12591,9806],{"class":7691},[77,12593,2628],{"class":87},[77,12595,12596],{"class":79,"line":4093},[77,12597,4023],{"class":87},[77,12599,12600,12602,12604,12606,12608,12610,12612,12614,12616,12619,12621],{"class":79,"line":4099},[77,12601,5676],{"class":2123},[77,12603,2622],{"class":87},[77,12605,2625],{"class":2123},[77,12607,5507],{"class":87},[77,12609,268],{"class":2123},[77,12611,1939],{"class":94},[77,12613,5514],{"class":87},[77,12615,260],{"class":2123},[77,12617,12618],{"class":87},"len;i",[77,12620,4767],{"class":2123},[77,12622,2628],{"class":87},[77,12624,12625],{"class":79,"line":4104},[77,12626,4505],{"class":87},[77,12628,12629,12632,12634,12636,12638,12640,12642,12644,12646,12648,12650,12652,12654,12656,12658],{"class":79,"line":4118},[77,12630,12631],{"class":2123},"     for",[77,12633,4134],{"class":87},[77,12635,2625],{"class":2123},[77,12637,5885],{"class":87},[77,12639,268],{"class":2123},[77,12641,1939],{"class":94},[77,12643,5892],{"class":87},[77,12645,260],{"class":2123},[77,12647,9833],{"class":87},[77,12649,3145],{"class":2123},[77,12651,2120],{"class":94},[77,12653,3145],{"class":2123},[77,12655,6025],{"class":87},[77,12657,4767],{"class":2123},[77,12659,2628],{"class":87},[77,12661,12662],{"class":79,"line":4123},[77,12663,12664],{"class":87},"     {\n",[77,12666,12667,12670,12673,12675,12678,12680,12683,12685,12687,12689,12691],{"class":79,"line":4129},[77,12668,12669],{"class":2123},"         if",[77,12671,12672],{"class":87}," ((s",[77,12674,3094],{"class":2123},[77,12676,12677],{"class":87},"j)->age ",[77,12679,3572],{"class":2123},[77,12681,12682],{"class":87}," (s",[77,12684,3094],{"class":2123},[77,12686,3080],{"class":87},[77,12688,3094],{"class":2123},[77,12690,2120],{"class":94},[77,12692,12693],{"class":87},")->age)\n",[77,12695,12696],{"class":79,"line":4150},[77,12697,12698],{"class":87},"         {\n",[77,12700,12701,12704,12706,12709,12711],{"class":79,"line":4155},[77,12702,12703],{"class":87},"             Sanguo temp",[77,12705,9628],{"class":2123},[77,12707,12708],{"class":87},"(s",[77,12710,3094],{"class":2123},[77,12712,12713],{"class":87},"j);\n",[77,12715,12716,12719,12721,12723,12726,12728,12730,12732,12734,12736,12738],{"class":79,"line":4169},[77,12717,12718],{"class":2123},"             *",[77,12720,12708],{"class":87},[77,12722,3094],{"class":2123},[77,12724,12725],{"class":87},"j)",[77,12727,9628],{"class":2123},[77,12729,12708],{"class":87},[77,12731,3094],{"class":2123},[77,12733,3080],{"class":87},[77,12735,3094],{"class":2123},[77,12737,2120],{"class":94},[77,12739,5194],{"class":87},[77,12741,12742,12744,12746,12748,12750,12752,12754,12756,12758],{"class":79,"line":4174},[77,12743,12718],{"class":2123},[77,12745,12708],{"class":87},[77,12747,3094],{"class":2123},[77,12749,3080],{"class":87},[77,12751,3094],{"class":2123},[77,12753,2120],{"class":94},[77,12755,3043],{"class":87},[77,12757,268],{"class":2123},[77,12759,6755],{"class":87},[77,12761,12762],{"class":79,"line":4203},[77,12763,12764],{"class":87},"         }\n",[77,12766,12767],{"class":79,"line":4208},[77,12768,12769],{"class":87},"     }\n",[77,12771,12772],{"class":79,"line":4225},[77,12773,4662],{"class":87},[77,12775,12776],{"class":79,"line":4230},[77,12777,110],{"class":87},[77,12779,12780],{"class":79,"line":4235},[77,12781,12782],{"class":323},"\u002F\u002F定义打印函数\n",[77,12784,12785,12787,12789,12791,12793,12795,12797,12799,12801,12803],{"class":79,"line":4240},[77,12786,7839],{"class":2123},[77,12788,12088],{"class":83},[77,12790,2622],{"class":87},[77,12792,12581],{"class":83},[77,12794,8993],{"class":2123},[77,12796,3308],{"class":7691},[77,12798,2992],{"class":87},[77,12800,2625],{"class":2123},[77,12802,9806],{"class":7691},[77,12804,2628],{"class":87},[77,12806,12807],{"class":79,"line":4254},[77,12808,4023],{"class":87},[77,12810,12811,12813,12815,12817,12819,12821,12823,12825,12827,12829,12831],{"class":79,"line":4259},[77,12812,5676],{"class":2123},[77,12814,4134],{"class":87},[77,12816,2625],{"class":2123},[77,12818,5507],{"class":87},[77,12820,268],{"class":2123},[77,12822,1939],{"class":94},[77,12824,5514],{"class":87},[77,12826,260],{"class":2123},[77,12828,12618],{"class":87},[77,12830,4767],{"class":2123},[77,12832,2628],{"class":87},[77,12834,12835],{"class":79,"line":5052},[77,12836,4505],{"class":87},[77,12838,12839,12841,12843,12845,12847,12850,12852,12854,12856,12859,12861,12863,12865,12868,12870,12872,12874,12877,12879,12881,12883,12886,12888,12890,12892,12895,12897],{"class":79,"line":5066},[77,12840,5926],{"class":87},[77,12842,3655],{"class":2123},[77,12844,2865],{"class":271},[77,12846,3712],{"class":94},[77,12848,12849],{"class":271},"姓名：\"",[77,12851,3655],{"class":2123},[77,12853,12708],{"class":87},[77,12855,3094],{"class":2123},[77,12857,12858],{"class":87},"i)->name",[77,12860,3655],{"class":2123},[77,12862,2865],{"class":271},[77,12864,3712],{"class":94},[77,12866,12867],{"class":271},"年龄：\"",[77,12869,3655],{"class":2123},[77,12871,12708],{"class":87},[77,12873,3094],{"class":2123},[77,12875,12876],{"class":87},"i)->age",[77,12878,3655],{"class":2123},[77,12880,2865],{"class":271},[77,12882,3712],{"class":94},[77,12884,12885],{"class":271},"性别：\"",[77,12887,3655],{"class":2123},[77,12889,12708],{"class":87},[77,12891,3094],{"class":2123},[77,12893,12894],{"class":87},"i)->gender",[77,12896,3655],{"class":2123},[77,12898,3677],{"class":87},[77,12900,12901],{"class":79,"line":5074},[77,12902,4662],{"class":87},[77,12904,12905],{"class":79,"line":5079},[77,12906,110],{"class":87},[77,12908,12909,12911,12913],{"class":79,"line":5085},[77,12910,2625],{"class":2123},[77,12912,4448],{"class":83},[77,12914,4451],{"class":87},[77,12916,12917],{"class":79,"line":5091},[77,12918,4023],{"class":87},[77,12920,12921],{"class":79,"line":5096},[77,12922,12923],{"class":323},"    \u002F\u002F定义结构体变量\n",[77,12925,12926,12929,12931,12933],{"class":79,"line":10422},[77,12927,12928],{"class":87},"    Sanguo s1[",[77,12930,2933],{"class":94},[77,12932,3552],{"class":87},[77,12934,7383],{"class":2123},[77,12936,12937],{"class":79,"line":10446},[77,12938,4505],{"class":87},[77,12940,12941,12943,12945,12947,12949,12951,12953],{"class":79,"line":10451},[77,12942,7392],{"class":87},[77,12944,12425],{"class":271},[77,12946,2992],{"class":87},[77,12948,3388],{"class":94},[77,12950,2992],{"class":87},[77,12952,12434],{"class":271},[77,12954,7405],{"class":87},[77,12956,12957,12959,12961,12963,12965,12967,12969],{"class":79,"line":10457},[77,12958,7392],{"class":87},[77,12960,12443],{"class":271},[77,12962,2992],{"class":87},[77,12964,3363],{"class":94},[77,12966,2992],{"class":87},[77,12968,12434],{"class":271},[77,12970,7405],{"class":87},[77,12972,12973,12975,12977,12979,12981,12983,12985],{"class":79,"line":10484},[77,12974,7392],{"class":87},[77,12976,12460],{"class":271},[77,12978,2992],{"class":87},[77,12980,3313],{"class":94},[77,12982,2992],{"class":87},[77,12984,12434],{"class":271},[77,12986,7405],{"class":87},[77,12988,12989,12991,12993,12995,12997,12999,13001],{"class":79,"line":10489},[77,12990,7392],{"class":87},[77,12992,12477],{"class":271},[77,12994,2992],{"class":87},[77,12996,3338],{"class":94},[77,12998,2992],{"class":87},[77,13000,12434],{"class":271},[77,13002,7405],{"class":87},[77,13004,13005,13007,13009,13011,13013,13015,13017],{"class":79,"line":10495},[77,13006,7392],{"class":87},[77,13008,12494],{"class":271},[77,13010,2992],{"class":87},[77,13012,3288],{"class":94},[77,13014,2992],{"class":87},[77,13016,12503],{"class":271},[77,13018,7405],{"class":87},[77,13020,13021],{"class":79,"line":10507},[77,13022,7426],{"class":87},[77,13024,13025,13027,13029,13031,13034,13036,13039,13041],{"class":79,"line":10519},[77,13026,4460],{"class":2123},[77,13028,9806],{"class":87},[77,13030,6678],{"class":2123},[77,13032,13033],{"class":87},"(s1)",[77,13035,6684],{"class":2123},[77,13037,13038],{"class":87},"(s1[",[77,13040,1939],{"class":94},[77,13042,6331],{"class":87},[77,13044,13045,13048,13050,13053,13055,13058,13061,13063],{"class":79,"line":10531},[77,13046,13047],{"class":87},"    Sanguo ",[77,13049,3068],{"class":2123},[77,13051,13052],{"class":87},"s ",[77,13054,268],{"class":2123},[77,13056,13057],{"class":2123}," &",[77,13059,13060],{"class":87},"s1[",[77,13062,1939],{"class":94},[77,13064,7165],{"class":87},[77,13066,13067],{"class":79,"line":12189},[77,13068,13069],{"class":323},"    \u002F\u002F排序前：\n",[77,13071,13072,13074,13076,13079,13081],{"class":79,"line":12214},[77,13073,9004],{"class":87},[77,13075,3655],{"class":2123},[77,13077,13078],{"class":271}," \"排序前：\"",[77,13080,3922],{"class":2123},[77,13082,11314],{"class":87},[77,13084,13085,13087],{"class":79,"line":12237},[77,13086,12388],{"class":83},[77,13088,13089],{"class":87},"(s,len);\n",[77,13091,13092],{"class":79,"line":12261},[77,13093,13094],{"class":323},"    \u002F\u002F调用排序函数\n",[77,13096,13097,13099],{"class":79,"line":12266},[77,13098,10073],{"class":83},[77,13100,13089],{"class":87},[77,13102,13103],{"class":79,"line":12271},[77,13104,13105],{"class":323},"    \u002F\u002F排序后\n",[77,13107,13108,13110,13112,13115,13117],{"class":79,"line":12276},[77,13109,9004],{"class":87},[77,13111,3655],{"class":2123},[77,13113,13114],{"class":271}," \"排序后：\"",[77,13116,3922],{"class":2123},[77,13118,11314],{"class":87},[77,13120,13121,13123],{"class":79,"line":12285},[77,13122,12388],{"class":83},[77,13124,13089],{"class":87},[77,13126,13127],{"class":79,"line":12290},[77,13128,110],{"class":87},[24,13130,13131,13132,13134],{},"注意：使用指针时直接用传首地址**&s",[77,13133,1939],{},"**",[2520,13136,13137],{},"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":72,"searchDepth":91,"depth":91,"links":13139},[13140,13141,13142,13143,13144,13145,13146],{"id":10177,"depth":91,"text":10178},{"id":10539,"depth":91,"text":10540},{"id":10808,"depth":91,"text":10809},{"id":10973,"depth":91,"text":10974},{"id":11189,"depth":91,"text":11190},{"id":11509,"depth":91,"text":11510},{"id":11737,"depth":91,"text":11738},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10166,"description":10174},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13153,"title":13154,"body":13155,"description":72,"extension":2547,"meta":14498,"navigation":2549,"path":14499,"seo":14500,"stem":14501,"__hash__":14502},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13156,"toc":14492},[13157,13160,13164,13170,13184,13189,13192,13196,13203,13209,13212,13219,13225,13230,13233,13236,13239,13803,13806,13820,13824,13829,13845,13985,13988,13994,13997,14002,14010,14118,14121,14126,14129,14134,14137,14143,14146,14489],[10,13158,13154],{"id":13159},"_5程序内存模型",[14,13161,13163],{"id":13162},"_51内存分区模型","5.1内存分区模型",[24,13165,13166,13167],{},"C++程序在执行时，将内存大方向划分为",[27,13168,13169],{},"4个区域",[51,13171,13172,13175,13178,13181],{},[54,13173,13174],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[54,13176,13177],{},"全局区：存放全局变量和静态变量以及常量",[54,13179,13180],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[54,13182,13183],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[24,13185,13186],{},[27,13187,13188],{},"内存四区意义：",[24,13190,13191],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[19,13193,13195],{"id":13194},"_511程序运行前","5.1.1程序运行前",[24,13197,13198,13199,13202],{},"​\t在程序编译后，生成了exe可执行程序，",[27,13200,13201],{},"未执行该程序前","分为两个区域",[24,13204,13205,13206],{},"​\t",[27,13207,13208],{},"代码区：",[24,13210,13211],{},"​\t\t存放 CPU 执行的机器指令",[24,13213,13214,13215,13218],{},"​\t\t代码区是",[27,13216,13217],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[24,13220,13214,13221,13224],{},[27,13222,13223],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[24,13226,13205,13227],{},[27,13228,13229],{},"全局区：",[24,13231,13232],{},"​\t\t全局变量和静态变量存放在此.",[24,13234,13235],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[24,13237,13238],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[67,13240,13242],{"className":2610,"code":13241,"language":2612,"meta":72,"style":72},"\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",[74,13243,13244,13249,13262,13275,13279,13284,13299,13314,13318,13327,13331,13336,13349,13362,13366,13371,13397,13423,13427,13454,13480,13484,13489,13505,13520,13524,13550,13576,13580,13605,13630,13634,13660,13686,13690,13706,13721,13747,13773,13777,13787,13791,13799],{"__ignoreMap":72},[77,13245,13246],{"class":79,"line":80},[77,13247,13248],{"class":323},"\u002F\u002F全局变量\n",[77,13250,13251,13253,13256,13258,13260],{"class":79,"line":91},[77,13252,2625],{"class":2123},[77,13254,13255],{"class":87}," g_a ",[77,13257,268],{"class":2123},[77,13259,4513],{"class":94},[77,13261,104],{"class":87},[77,13263,13264,13266,13269,13271,13273],{"class":79,"line":107},[77,13265,2625],{"class":2123},[77,13267,13268],{"class":87}," g_b ",[77,13270,268],{"class":2123},[77,13272,4513],{"class":94},[77,13274,104],{"class":87},[77,13276,13277],{"class":79,"line":191},[77,13278,4875],{"emptyLinePlaceholder":2549},[77,13280,13281],{"class":79,"line":1543},[77,13282,13283],{"class":323},"\u002F\u002F全局常量\n",[77,13285,13286,13288,13290,13293,13295,13297],{"class":79,"line":1549},[77,13287,9267],{"class":2123},[77,13289,4857],{"class":2123},[77,13291,13292],{"class":87}," c_g_a ",[77,13294,268],{"class":2123},[77,13296,4513],{"class":94},[77,13298,104],{"class":87},[77,13300,13301,13303,13305,13308,13310,13312],{"class":79,"line":1566},[77,13302,9267],{"class":2123},[77,13304,4857],{"class":2123},[77,13306,13307],{"class":87}," c_g_b ",[77,13309,268],{"class":2123},[77,13311,4513],{"class":94},[77,13313,104],{"class":87},[77,13315,13316],{"class":79,"line":1572},[77,13317,4875],{"emptyLinePlaceholder":2549},[77,13319,13320,13322,13324],{"class":79,"line":1589},[77,13321,2625],{"class":2123},[77,13323,4448],{"class":83},[77,13325,13326],{"class":87},"() {\n",[77,13328,13329],{"class":79,"line":1595},[77,13330,4875],{"emptyLinePlaceholder":2549},[77,13332,13333],{"class":79,"line":4088},[77,13334,13335],{"class":323},"    \u002F\u002F局部变量\n",[77,13337,13338,13340,13343,13345,13347],{"class":79,"line":4093},[77,13339,4460],{"class":2123},[77,13341,13342],{"class":87}," a ",[77,13344,268],{"class":2123},[77,13346,4513],{"class":94},[77,13348,104],{"class":87},[77,13350,13351,13353,13356,13358,13360],{"class":79,"line":4099},[77,13352,4460],{"class":2123},[77,13354,13355],{"class":87}," b ",[77,13357,268],{"class":2123},[77,13359,4513],{"class":94},[77,13361,104],{"class":87},[77,13363,13364],{"class":79,"line":4104},[77,13365,4875],{"emptyLinePlaceholder":2549},[77,13367,13368],{"class":79,"line":4118},[77,13369,13370],{"class":323},"    \u002F\u002F打印地址\n",[77,13372,13373,13375,13377,13380,13382,13384,13386,13388,13390,13393,13395],{"class":79,"line":4123},[77,13374,9004],{"class":87},[77,13376,3655],{"class":2123},[77,13378,13379],{"class":271}," \"局部变量a地址为： \"",[77,13381,3922],{"class":2123},[77,13383,4134],{"class":87},[77,13385,2625],{"class":2123},[77,13387,3043],{"class":87},[77,13389,2967],{"class":2123},[77,13391,13392],{"class":87},"a ",[77,13394,3655],{"class":2123},[77,13396,11314],{"class":87},[77,13398,13399,13401,13403,13406,13408,13410,13412,13414,13416,13419,13421],{"class":79,"line":4129},[77,13400,9004],{"class":87},[77,13402,3655],{"class":2123},[77,13404,13405],{"class":271}," \"局部变量b地址为： \"",[77,13407,3922],{"class":2123},[77,13409,4134],{"class":87},[77,13411,2625],{"class":2123},[77,13413,3043],{"class":87},[77,13415,2967],{"class":2123},[77,13417,13418],{"class":87},"b ",[77,13420,3655],{"class":2123},[77,13422,11314],{"class":87},[77,13424,13425],{"class":79,"line":4150},[77,13426,4875],{"emptyLinePlaceholder":2549},[77,13428,13429,13431,13433,13436,13438,13441,13443,13445,13447,13450,13452],{"class":79,"line":4155},[77,13430,9004],{"class":87},[77,13432,3655],{"class":2123},[77,13434,13435],{"class":271}," \"全局变量g_a地址为： \"",[77,13437,3922],{"class":2123},[77,13439,13440],{"class":87},"  (",[77,13442,2625],{"class":2123},[77,13444,3043],{"class":87},[77,13446,2967],{"class":2123},[77,13448,13449],{"class":87},"g_a ",[77,13451,3655],{"class":2123},[77,13453,11314],{"class":87},[77,13455,13456,13458,13460,13463,13465,13467,13469,13471,13473,13476,13478],{"class":79,"line":4169},[77,13457,9004],{"class":87},[77,13459,3655],{"class":2123},[77,13461,13462],{"class":271}," \"全局变量g_b地址为： \"",[77,13464,3922],{"class":2123},[77,13466,13440],{"class":87},[77,13468,2625],{"class":2123},[77,13470,3043],{"class":87},[77,13472,2967],{"class":2123},[77,13474,13475],{"class":87},"g_b ",[77,13477,3655],{"class":2123},[77,13479,11314],{"class":87},[77,13481,13482],{"class":79,"line":4174},[77,13483,4875],{"emptyLinePlaceholder":2549},[77,13485,13486],{"class":79,"line":4203},[77,13487,13488],{"class":323},"    \u002F\u002F静态变量\n",[77,13490,13491,13494,13496,13499,13501,13503],{"class":79,"line":4208},[77,13492,13493],{"class":2123},"    static",[77,13495,4857],{"class":2123},[77,13497,13498],{"class":87}," s_a ",[77,13500,268],{"class":2123},[77,13502,4513],{"class":94},[77,13504,104],{"class":87},[77,13506,13507,13509,13511,13514,13516,13518],{"class":79,"line":4225},[77,13508,13493],{"class":2123},[77,13510,4857],{"class":2123},[77,13512,13513],{"class":87}," s_b ",[77,13515,268],{"class":2123},[77,13517,4513],{"class":94},[77,13519,104],{"class":87},[77,13521,13522],{"class":79,"line":4230},[77,13523,4875],{"emptyLinePlaceholder":2549},[77,13525,13526,13528,13530,13533,13535,13537,13539,13541,13543,13546,13548],{"class":79,"line":4235},[77,13527,9004],{"class":87},[77,13529,3655],{"class":2123},[77,13531,13532],{"class":271}," \"静态变量s_a地址为： \"",[77,13534,3922],{"class":2123},[77,13536,4134],{"class":87},[77,13538,2625],{"class":2123},[77,13540,3043],{"class":87},[77,13542,2967],{"class":2123},[77,13544,13545],{"class":87},"s_a ",[77,13547,3655],{"class":2123},[77,13549,11314],{"class":87},[77,13551,13552,13554,13556,13559,13561,13563,13565,13567,13569,13572,13574],{"class":79,"line":4240},[77,13553,9004],{"class":87},[77,13555,3655],{"class":2123},[77,13557,13558],{"class":271}," \"静态变量s_b地址为： \"",[77,13560,3922],{"class":2123},[77,13562,4134],{"class":87},[77,13564,2625],{"class":2123},[77,13566,3043],{"class":87},[77,13568,2967],{"class":2123},[77,13570,13571],{"class":87},"s_b ",[77,13573,3655],{"class":2123},[77,13575,11314],{"class":87},[77,13577,13578],{"class":79,"line":4254},[77,13579,4875],{"emptyLinePlaceholder":2549},[77,13581,13582,13584,13586,13589,13591,13593,13595,13597,13599,13601,13603],{"class":79,"line":4259},[77,13583,9004],{"class":87},[77,13585,3655],{"class":2123},[77,13587,13588],{"class":271}," \"字符串常量地址为： \"",[77,13590,3922],{"class":2123},[77,13592,4134],{"class":87},[77,13594,2625],{"class":2123},[77,13596,3043],{"class":87},[77,13598,2967],{"class":2123},[77,13600,3672],{"class":271},[77,13602,3922],{"class":2123},[77,13604,11314],{"class":87},[77,13606,13607,13609,13611,13613,13615,13617,13619,13621,13623,13626,13628],{"class":79,"line":5052},[77,13608,9004],{"class":87},[77,13610,3655],{"class":2123},[77,13612,13588],{"class":271},[77,13614,3922],{"class":2123},[77,13616,4134],{"class":87},[77,13618,2625],{"class":2123},[77,13620,3043],{"class":87},[77,13622,2967],{"class":2123},[77,13624,13625],{"class":271},"\"hello world1\"",[77,13627,3922],{"class":2123},[77,13629,11314],{"class":87},[77,13631,13632],{"class":79,"line":5066},[77,13633,4875],{"emptyLinePlaceholder":2549},[77,13635,13636,13638,13640,13643,13645,13647,13649,13651,13653,13656,13658],{"class":79,"line":5074},[77,13637,9004],{"class":87},[77,13639,3655],{"class":2123},[77,13641,13642],{"class":271}," \"全局常量c_g_a地址为： \"",[77,13644,3922],{"class":2123},[77,13646,4134],{"class":87},[77,13648,2625],{"class":2123},[77,13650,3043],{"class":87},[77,13652,2967],{"class":2123},[77,13654,13655],{"class":87},"c_g_a ",[77,13657,3655],{"class":2123},[77,13659,11314],{"class":87},[77,13661,13662,13664,13666,13669,13671,13673,13675,13677,13679,13682,13684],{"class":79,"line":5079},[77,13663,9004],{"class":87},[77,13665,3655],{"class":2123},[77,13667,13668],{"class":271}," \"全局常量c_g_b地址为： \"",[77,13670,3922],{"class":2123},[77,13672,4134],{"class":87},[77,13674,2625],{"class":2123},[77,13676,3043],{"class":87},[77,13678,2967],{"class":2123},[77,13680,13681],{"class":87},"c_g_b ",[77,13683,3655],{"class":2123},[77,13685,11314],{"class":87},[77,13687,13688],{"class":79,"line":5085},[77,13689,4875],{"emptyLinePlaceholder":2549},[77,13691,13692,13695,13697,13700,13702,13704],{"class":79,"line":5091},[77,13693,13694],{"class":2123},"    const",[77,13696,4857],{"class":2123},[77,13698,13699],{"class":87}," c_l_a ",[77,13701,268],{"class":2123},[77,13703,4513],{"class":94},[77,13705,104],{"class":87},[77,13707,13708,13710,13712,13715,13717,13719],{"class":79,"line":5096},[77,13709,13694],{"class":2123},[77,13711,4857],{"class":2123},[77,13713,13714],{"class":87}," c_l_b ",[77,13716,268],{"class":2123},[77,13718,4513],{"class":94},[77,13720,104],{"class":87},[77,13722,13723,13725,13727,13730,13732,13734,13736,13738,13740,13743,13745],{"class":79,"line":10422},[77,13724,9004],{"class":87},[77,13726,3655],{"class":2123},[77,13728,13729],{"class":271}," \"局部常量c_l_a地址为： \"",[77,13731,3922],{"class":2123},[77,13733,4134],{"class":87},[77,13735,2625],{"class":2123},[77,13737,3043],{"class":87},[77,13739,2967],{"class":2123},[77,13741,13742],{"class":87},"c_l_a ",[77,13744,3655],{"class":2123},[77,13746,11314],{"class":87},[77,13748,13749,13751,13753,13756,13758,13760,13762,13764,13766,13769,13771],{"class":79,"line":10446},[77,13750,9004],{"class":87},[77,13752,3655],{"class":2123},[77,13754,13755],{"class":271}," \"局部常量c_l_b地址为： \"",[77,13757,3922],{"class":2123},[77,13759,4134],{"class":87},[77,13761,2625],{"class":2123},[77,13763,3043],{"class":87},[77,13765,2967],{"class":2123},[77,13767,13768],{"class":87},"c_l_b ",[77,13770,3655],{"class":2123},[77,13772,11314],{"class":87},[77,13774,13775],{"class":79,"line":10451},[77,13776,4875],{"emptyLinePlaceholder":2549},[77,13778,13779,13781,13783,13785],{"class":79,"line":10457},[77,13780,4778],{"class":83},[77,13782,2622],{"class":87},[77,13784,4783],{"class":271},[77,13786,5194],{"class":87},[77,13788,13789],{"class":79,"line":10484},[77,13790,4875],{"emptyLinePlaceholder":2549},[77,13792,13793,13795,13797],{"class":79,"line":10489},[77,13794,6565],{"class":2123},[77,13796,6568],{"class":94},[77,13798,104],{"class":87},[77,13800,13801],{"class":79,"line":10495},[77,13802,110],{"class":87},[24,13804,13805],{},"总结：",[51,13807,13808,13811,13814,13817],{},[54,13809,13810],{},"c++中程序运行前分为全局区和代码区",[54,13812,13813],{},"代码区特点是共享和只读",[54,13815,13816],{},"全局区中存放全局变量、静态变量、常量",[54,13818,13819],{},"常量区中存放const修饰的全局常量和字符串常量",[19,13821,13823],{"id":13822},"_512程序运行后","5.1.2程序运行后",[139,13825,13826],{},[54,13827,13828],{},"栈区：",[51,13830,13831,13838],{},[54,13832,13833,13834,13837],{},"由编译器自动分配释放, 存放",[27,13835,13836],{},"函数的参数值,局部变量","等",[54,13839,13840,13841,13844],{},"注意事项：",[27,13842,13843],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[67,13846,13848],{"className":2610,"code":13847,"language":2612,"meta":72,"style":72},"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",[74,13849,13850,13861,13865,13880,13892,13896,13900,13908,13913,13928,13946,13963,13973,13981],{"__ignoreMap":72},[77,13851,13852,13854,13856,13859],{"class":79,"line":80},[77,13853,2625],{"class":2123},[77,13855,8993],{"class":2123},[77,13857,13858],{"class":83}," func",[77,13860,4451],{"class":87},[77,13862,13863],{"class":79,"line":91},[77,13864,4023],{"class":87},[77,13866,13867,13869,13871,13873,13875,13877],{"class":79,"line":107},[77,13868,4460],{"class":2123},[77,13870,13342],{"class":87},[77,13872,268],{"class":2123},[77,13874,4513],{"class":94},[77,13876,2675],{"class":87},[77,13878,13879],{"class":323}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[77,13881,13882,13884,13886,13889],{"class":79,"line":191},[77,13883,6565],{"class":2123},[77,13885,13057],{"class":2123},[77,13887,13888],{"class":87},"a;",[77,13890,13891],{"class":323}," \u002F\u002F放回局部变量的地址\n",[77,13893,13894],{"class":79,"line":1543},[77,13895,110],{"class":87},[77,13897,13898],{"class":79,"line":1549},[77,13899,4875],{"emptyLinePlaceholder":2549},[77,13901,13902,13904,13906],{"class":79,"line":1566},[77,13903,2625],{"class":2123},[77,13905,4448],{"class":83},[77,13907,13326],{"class":87},[77,13909,13910],{"class":79,"line":1572},[77,13911,13912],{"class":323},"    \u002F\u002F接受func的返回值\n",[77,13914,13915,13917,13919,13922,13924,13926],{"class":79,"line":1589},[77,13916,4460],{"class":2123},[77,13918,8993],{"class":2123},[77,13920,13921],{"class":87},"p ",[77,13923,268],{"class":2123},[77,13925,13858],{"class":83},[77,13927,8111],{"class":87},[77,13929,13930,13932,13934,13936,13938,13940,13943],{"class":79,"line":1595},[77,13931,9004],{"class":87},[77,13933,3655],{"class":2123},[77,13935,8993],{"class":2123},[77,13937,13921],{"class":87},[77,13939,3655],{"class":2123},[77,13941,13942],{"class":87}," endl;",[77,13944,13945],{"class":323}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[77,13947,13948,13950,13952,13954,13956,13958,13960],{"class":79,"line":4088},[77,13949,9004],{"class":87},[77,13951,3655],{"class":2123},[77,13953,8993],{"class":2123},[77,13955,13921],{"class":87},[77,13957,3655],{"class":2123},[77,13959,13942],{"class":87},[77,13961,13962],{"class":323}," \u002F\u002F第二次这个数据不再保留\n",[77,13964,13965,13967,13969,13971],{"class":79,"line":4093},[77,13966,4778],{"class":83},[77,13968,2622],{"class":87},[77,13970,4783],{"class":271},[77,13972,5194],{"class":87},[77,13974,13975,13977,13979],{"class":79,"line":4099},[77,13976,6565],{"class":2123},[77,13978,6568],{"class":94},[77,13980,104],{"class":87},[77,13982,13983],{"class":79,"line":4104},[77,13984,110],{"class":87},[24,13986,13987],{},"输出结果：",[24,13989,13990],{},[40,13991],{"alt":13992,"src":13993},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[24,13995,13996],{},"总结：不要返回局部变量的地址",[139,13998,13999],{"start":91},[54,14000,14001],{},"堆区",[51,14003,14004,14007],{},[54,14005,14006],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[54,14008,14009],{},"在c++中主要利用new在堆区开辟内存",[67,14011,14013],{"className":2610,"code":14012,"language":2612,"meta":72,"style":72},"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",[74,14014,14015,14030,14034,14039,14060,14067,14071,14079,14083,14088,14102,14114],{"__ignoreMap":72},[77,14016,14017,14019,14022,14025,14027],{"class":79,"line":80},[77,14018,2625],{"class":2123},[77,14020,14021],{"class":2123},"  *",[77,14023,14024],{"class":83},"func",[77,14026,4902],{"class":87},[77,14028,14029],{"class":323},"  \u002F\u002F函数返回指针\n",[77,14031,14032],{"class":79,"line":91},[77,14033,4023],{"class":87},[77,14035,14036],{"class":79,"line":107},[77,14037,14038],{"class":323},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[77,14040,14041,14043,14045,14047,14049,14052,14054,14056,14058],{"class":79,"line":191},[77,14042,6622],{"class":2123},[77,14044,8993],{"class":2123},[77,14046,24],{"class":87},[77,14048,268],{"class":2123},[77,14050,14051],{"class":2123}," new",[77,14053,4857],{"class":2123},[77,14055,2622],{"class":87},[77,14057,3059],{"class":94},[77,14059,5194],{"class":87},[77,14061,14062,14064],{"class":79,"line":1543},[77,14063,6856],{"class":2123},[77,14065,14066],{"class":87}," p;\n",[77,14068,14069],{"class":79,"line":1549},[77,14070,110],{"class":87},[77,14072,14073,14075,14077],{"class":79,"line":1566},[77,14074,2625],{"class":2123},[77,14076,4448],{"class":83},[77,14078,4451],{"class":87},[77,14080,14081],{"class":79,"line":1572},[77,14082,4023],{"class":87},[77,14084,14085],{"class":79,"line":1589},[77,14086,14087],{"class":323},"    \u002F\u002F在堆区开辟数据\n",[77,14089,14090,14092,14094,14096,14098,14100],{"class":79,"line":1595},[77,14091,4460],{"class":2123},[77,14093,8993],{"class":2123},[77,14095,24],{"class":87},[77,14097,268],{"class":2123},[77,14099,14024],{"class":83},[77,14101,8111],{"class":87},[77,14103,14104,14106,14108,14110,14112],{"class":79,"line":4088},[77,14105,4028],{"class":87},[77,14107,8894],{"class":2123},[77,14109,24],{"class":87},[77,14111,3655],{"class":2123},[77,14113,3677],{"class":87},[77,14115,14116],{"class":79,"line":4093},[77,14117,110],{"class":87},[24,14119,14120],{},"图片展示：",[24,14122,14123],{},[40,14124],{"alt":13992,"src":14125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[24,14127,14128],{},"堆区内存由程序员管生死！！！",[139,14130,14131],{"start":107},[54,14132,14133],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[24,14135,14136],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[24,14138,14139,14140],{},"​语法：",[74,14141,14142],{}," new 数据类型",[24,14144,14145],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[67,14147,14149],{"className":2610,"code":14148,"language":2612,"meta":72,"style":72},"\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",[74,14150,14151,14156,14166,14170,14175,14180,14202,14206,14214,14218,14232,14244,14256,14268,14273,14278,14289,14293,14298,14306,14310,14315,14337,14363,14367,14385,14389,14415,14419,14431,14435,14440,14445,14453,14457,14461,14469,14473,14479,14485],{"__ignoreMap":72},[77,14152,14153],{"class":79,"line":80},[77,14154,14155],{"class":323},"\u002F\u002F1.new的基本语法\n",[77,14157,14158,14160,14162,14164],{"class":79,"line":91},[77,14159,2625],{"class":2123},[77,14161,8993],{"class":2123},[77,14163,14024],{"class":83},[77,14165,4451],{"class":87},[77,14167,14168],{"class":79,"line":107},[77,14169,4023],{"class":87},[77,14171,14172],{"class":79,"line":191},[77,14173,14174],{"class":323},"    \u002F\u002F在堆区创建整型数据\n",[77,14176,14177],{"class":79,"line":1543},[77,14178,14179],{"class":323},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[77,14181,14182,14184,14186,14188,14191,14193,14195,14197,14199],{"class":79,"line":1549},[77,14183,4460],{"class":2123},[77,14185,8993],{"class":2123},[77,14187,24],{"class":87},[77,14189,14190],{"class":2123},"=new",[77,14192,4857],{"class":2123},[77,14194,2622],{"class":87},[77,14196,3059],{"class":94},[77,14198,8441],{"class":87},[77,14200,14201],{"class":323},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[77,14203,14204],{"class":79,"line":1566},[77,14205,110],{"class":87},[77,14207,14208,14210,14212],{"class":79,"line":1572},[77,14209,7839],{"class":2123},[77,14211,8063],{"class":83},[77,14213,4451],{"class":87},[77,14215,14216],{"class":79,"line":1589},[77,14217,4023],{"class":87},[77,14219,14220,14222,14224,14226,14228,14230],{"class":79,"line":1595},[77,14221,4460],{"class":2123},[77,14223,8993],{"class":2123},[77,14225,24],{"class":87},[77,14227,268],{"class":2123},[77,14229,14024],{"class":83},[77,14231,8111],{"class":87},[77,14233,14234,14236,14238,14240,14242],{"class":79,"line":4088},[77,14235,4028],{"class":87},[77,14237,8894],{"class":2123},[77,14239,24],{"class":87},[77,14241,3655],{"class":2123},[77,14243,3677],{"class":87},[77,14245,14246,14248,14250,14252,14254],{"class":79,"line":4093},[77,14247,4028],{"class":87},[77,14249,8894],{"class":2123},[77,14251,24],{"class":87},[77,14253,3655],{"class":2123},[77,14255,3677],{"class":87},[77,14257,14258,14260,14262,14264,14266],{"class":79,"line":4099},[77,14259,4028],{"class":87},[77,14261,8894],{"class":2123},[77,14263,24],{"class":87},[77,14265,3655],{"class":2123},[77,14267,3677],{"class":87},[77,14269,14270],{"class":79,"line":4104},[77,14271,14272],{"class":323},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[77,14274,14275],{"class":79,"line":4118},[77,14276,14277],{"class":323},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[77,14279,14280,14283,14286],{"class":79,"line":4123},[77,14281,14282],{"class":2123},"    delete",[77,14284,14285],{"class":87}," p;",[77,14287,14288],{"class":323},"\u002F\u002F删除这块地址\n",[77,14290,14291],{"class":79,"line":4129},[77,14292,110],{"class":87},[77,14294,14295],{"class":79,"line":4150},[77,14296,14297],{"class":323},"\u002F\u002F2.在堆区利用new开辟数组\n",[77,14299,14300,14302,14304],{"class":79,"line":4155},[77,14301,7839],{"class":2123},[77,14303,8132],{"class":83},[77,14305,4451],{"class":87},[77,14307,14308],{"class":79,"line":4169},[77,14309,4023],{"class":87},[77,14311,14312],{"class":79,"line":4174},[77,14313,14314],{"class":323},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[77,14316,14317,14319,14321,14323,14325,14327,14329,14331,14334],{"class":79,"line":4203},[77,14318,4460],{"class":2123},[77,14320,8993],{"class":2123},[77,14322,6355],{"class":87},[77,14324,14190],{"class":2123},[77,14326,4857],{"class":2123},[77,14328,3503],{"class":87},[77,14330,3059],{"class":94},[77,14332,14333],{"class":87},"];",[77,14335,14336],{"class":323},"\u002F\u002F10代表数组有10个元素\n",[77,14338,14339,14341,14343,14345,14347,14349,14351,14353,14355,14357,14359,14361],{"class":79,"line":4208},[77,14340,5676],{"class":2123},[77,14342,4134],{"class":87},[77,14344,2625],{"class":2123},[77,14346,5507],{"class":87},[77,14348,268],{"class":2123},[77,14350,1939],{"class":94},[77,14352,5514],{"class":87},[77,14354,260],{"class":2123},[77,14356,3059],{"class":94},[77,14358,5514],{"class":87},[77,14360,4767],{"class":2123},[77,14362,2628],{"class":87},[77,14364,14365],{"class":79,"line":4225},[77,14366,4505],{"class":87},[77,14368,14369,14372,14374,14376,14378,14380,14382],{"class":79,"line":4230},[77,14370,14371],{"class":87},"        arr[i]",[77,14373,268],{"class":2123},[77,14375,646],{"class":87},[77,14377,3094],{"class":2123},[77,14379,2925],{"class":94},[77,14381,2675],{"class":87},[77,14383,14384],{"class":323},"\u002F\u002F给10个元素赋值100～109\n",[77,14386,14387],{"class":79,"line":4235},[77,14388,4662],{"class":87},[77,14390,14391,14393,14395,14397,14399,14401,14403,14405,14407,14409,14411,14413],{"class":79,"line":4240},[77,14392,5676],{"class":2123},[77,14394,4134],{"class":87},[77,14396,2625],{"class":2123},[77,14398,5507],{"class":87},[77,14400,268],{"class":2123},[77,14402,1939],{"class":94},[77,14404,5514],{"class":87},[77,14406,260],{"class":2123},[77,14408,3059],{"class":94},[77,14410,5514],{"class":87},[77,14412,4767],{"class":2123},[77,14414,2628],{"class":87},[77,14416,14417],{"class":79,"line":4254},[77,14418,4505],{"class":87},[77,14420,14421,14423,14425,14427,14429],{"class":79,"line":4259},[77,14422,5926],{"class":87},[77,14424,3655],{"class":2123},[77,14426,6829],{"class":87},[77,14428,3655],{"class":2123},[77,14430,3677],{"class":87},[77,14432,14433],{"class":79,"line":5052},[77,14434,4662],{"class":87},[77,14436,14437],{"class":79,"line":5066},[77,14438,14439],{"class":323},"    \u002F\u002F释放堆区数组\n",[77,14441,14442],{"class":79,"line":5074},[77,14443,14444],{"class":323},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[77,14446,14447,14450],{"class":79,"line":5079},[77,14448,14449],{"class":2123},"    delete[]",[77,14451,14452],{"class":87}," arr;\n",[77,14454,14455],{"class":79,"line":5085},[77,14456,110],{"class":87},[77,14458,14459],{"class":79,"line":5091},[77,14460,4875],{"emptyLinePlaceholder":2549},[77,14462,14463,14465,14467],{"class":79,"line":5096},[77,14464,2625],{"class":2123},[77,14466,4448],{"class":83},[77,14468,4451],{"class":87},[77,14470,14471],{"class":79,"line":10422},[77,14472,4023],{"class":87},[77,14474,14475,14477],{"class":79,"line":10446},[77,14476,8108],{"class":83},[77,14478,8111],{"class":87},[77,14480,14481,14483],{"class":79,"line":10451},[77,14482,8177],{"class":83},[77,14484,8111],{"class":87},[77,14486,14487],{"class":79,"line":10457},[77,14488,110],{"class":87},[2520,14490,14491],{},"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":72,"searchDepth":91,"depth":91,"links":14493},[14494],{"id":13162,"depth":91,"text":13163,"children":14495},[14496,14497],{"id":13194,"depth":107,"text":13195},{"id":13822,"depth":107,"text":13823},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13154,"description":72},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14504,"title":14505,"body":14506,"description":72,"extension":2547,"meta":15986,"navigation":2549,"path":15987,"seo":15988,"stem":15989,"__hash__":15990},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14507,"toc":15978},[14508,14511,14515,14518,14521,14690,14694,14699,14716,14721,14873,14877,14880,14883,15276,15280,15283,15288,15291,15603,15607,15613,15773,15775,15783,15787,15790,15797,15975],[10,14509,14505],{"id":14510},"_6引用",[14,14512,14514],{"id":14513},"_61引用基本用法","6.1引用基本用法",[24,14516,14517],{},"引用的本质：给变量起别名",[24,14519,14520],{},"语法：数据类型 &别名=原名",[67,14522,14524],{"className":2610,"code":14523,"language":2612,"meta":72,"style":72},"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",[74,14525,14526,14534,14538,14550,14562,14566,14585,14604,14608,14619,14623,14642,14660,14664,14674,14678,14686],{"__ignoreMap":72},[77,14527,14528,14530,14532],{"class":79,"line":80},[77,14529,2625],{"class":2123},[77,14531,4448],{"class":83},[77,14533,13326],{"class":87},[77,14535,14536],{"class":79,"line":91},[77,14537,4875],{"emptyLinePlaceholder":2549},[77,14539,14540,14542,14544,14546,14548],{"class":79,"line":107},[77,14541,4460],{"class":2123},[77,14543,13342],{"class":87},[77,14545,268],{"class":2123},[77,14547,4513],{"class":94},[77,14549,104],{"class":87},[77,14551,14552,14554,14556,14558,14560],{"class":79,"line":191},[77,14553,4460],{"class":2123},[77,14555,13057],{"class":2123},[77,14557,13418],{"class":87},[77,14559,268],{"class":2123},[77,14561,3910],{"class":87},[77,14563,14564],{"class":79,"line":1543},[77,14565,4875],{"emptyLinePlaceholder":2549},[77,14567,14568,14570,14572,14575,14577,14579,14581,14583],{"class":79,"line":1549},[77,14569,9004],{"class":87},[77,14571,3655],{"class":2123},[77,14573,14574],{"class":271}," \"a = \"",[77,14576,3922],{"class":2123},[77,14578,13342],{"class":87},[77,14580,3655],{"class":2123},[77,14582,13942],{"class":87},[77,14584,9743],{"class":323},[77,14586,14587,14589,14591,14594,14596,14598,14600,14602],{"class":79,"line":1566},[77,14588,9004],{"class":87},[77,14590,3655],{"class":2123},[77,14592,14593],{"class":271}," \"b = \"",[77,14595,3922],{"class":2123},[77,14597,13355],{"class":87},[77,14599,3655],{"class":2123},[77,14601,13942],{"class":87},[77,14603,9743],{"class":323},[77,14605,14606],{"class":79,"line":1572},[77,14607,4875],{"emptyLinePlaceholder":2549},[77,14609,14610,14613,14615,14617],{"class":79,"line":1589},[77,14611,14612],{"class":87},"    b ",[77,14614,268],{"class":2123},[77,14616,8229],{"class":94},[77,14618,104],{"class":87},[77,14620,14621],{"class":79,"line":1595},[77,14622,4875],{"emptyLinePlaceholder":2549},[77,14624,14625,14627,14629,14631,14633,14635,14637,14639],{"class":79,"line":4088},[77,14626,9004],{"class":87},[77,14628,3655],{"class":2123},[77,14630,14574],{"class":271},[77,14632,3922],{"class":2123},[77,14634,13342],{"class":87},[77,14636,3655],{"class":2123},[77,14638,13942],{"class":87},[77,14640,14641],{"class":323},"\u002F\u002F100\n",[77,14643,14644,14646,14648,14650,14652,14654,14656,14658],{"class":79,"line":4093},[77,14645,9004],{"class":87},[77,14647,3655],{"class":2123},[77,14649,14593],{"class":271},[77,14651,3922],{"class":2123},[77,14653,13355],{"class":87},[77,14655,3655],{"class":2123},[77,14657,13942],{"class":87},[77,14659,14641],{"class":323},[77,14661,14662],{"class":79,"line":4099},[77,14663,4875],{"emptyLinePlaceholder":2549},[77,14665,14666,14668,14670,14672],{"class":79,"line":4104},[77,14667,4778],{"class":83},[77,14669,2622],{"class":87},[77,14671,4783],{"class":271},[77,14673,5194],{"class":87},[77,14675,14676],{"class":79,"line":4118},[77,14677,4875],{"emptyLinePlaceholder":2549},[77,14679,14680,14682,14684],{"class":79,"line":4123},[77,14681,6565],{"class":2123},[77,14683,6568],{"class":94},[77,14685,104],{"class":87},[77,14687,14688],{"class":79,"line":4129},[77,14689,110],{"class":87},[14,14691,14693],{"id":14692},"_62引用的注意事项","6.2引用的注意事项",[139,14695,14696],{},[54,14697,14698],{},"引用必须要初始化",[67,14700,14702],{"className":2610,"code":14701,"language":2612,"meta":72,"style":72},"int &b;\u002F\u002F非常错误！\n",[74,14703,14704],{"__ignoreMap":72},[77,14705,14706,14708,14710,14713],{"class":79,"line":80},[77,14707,2625],{"class":2123},[77,14709,13057],{"class":2123},[77,14711,14712],{"class":87},"b;",[77,14714,14715],{"class":323},"\u002F\u002F非常错误！\n",[139,14717,14718],{"start":91},[54,14719,14720],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[67,14722,14724],{"className":2610,"code":14723,"language":2612,"meta":72,"style":72},"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",[74,14725,14726,14734,14746,14758,14766,14782,14795,14813,14831,14851,14861,14869],{"__ignoreMap":72},[77,14727,14728,14730,14732],{"class":79,"line":80},[77,14729,2625],{"class":2123},[77,14731,4448],{"class":83},[77,14733,13326],{"class":87},[77,14735,14736,14738,14740,14742,14744],{"class":79,"line":91},[77,14737,4460],{"class":2123},[77,14739,13342],{"class":87},[77,14741,268],{"class":2123},[77,14743,4513],{"class":94},[77,14745,104],{"class":87},[77,14747,14748,14750,14752,14754,14756],{"class":79,"line":107},[77,14749,4460],{"class":2123},[77,14751,13355],{"class":87},[77,14753,268],{"class":2123},[77,14755,11424],{"class":94},[77,14757,104],{"class":87},[77,14759,14760,14763],{"class":79,"line":191},[77,14761,14762],{"class":323},"    \u002F\u002Fint &c;",[77,14764,14765],{"class":323}," \u002F\u002F错误，引用必须初始化\n",[77,14767,14768,14770,14772,14774,14776,14779],{"class":79,"line":1543},[77,14769,4460],{"class":2123},[77,14771,13057],{"class":2123},[77,14773,5421],{"class":87},[77,14775,268],{"class":2123},[77,14777,14778],{"class":87}," a;",[77,14780,14781],{"class":323}," \u002F\u002F一旦初始化后，就不可以更改\n",[77,14783,14784,14787,14789,14792],{"class":79,"line":1549},[77,14785,14786],{"class":87},"    c ",[77,14788,268],{"class":2123},[77,14790,14791],{"class":87}," b;",[77,14793,14794],{"class":323}," \u002F\u002F这是赋值操作，不是更改引用\n",[77,14796,14797,14799,14801,14803,14805,14807,14809,14811],{"class":79,"line":1566},[77,14798,9004],{"class":87},[77,14800,3655],{"class":2123},[77,14802,14574],{"class":271},[77,14804,3922],{"class":2123},[77,14806,13342],{"class":87},[77,14808,3655],{"class":2123},[77,14810,13942],{"class":87},[77,14812,9728],{"class":323},[77,14814,14815,14817,14819,14821,14823,14825,14827,14829],{"class":79,"line":1572},[77,14816,9004],{"class":87},[77,14818,3655],{"class":2123},[77,14820,14593],{"class":271},[77,14822,3922],{"class":2123},[77,14824,13355],{"class":87},[77,14826,3655],{"class":2123},[77,14828,13942],{"class":87},[77,14830,9728],{"class":323},[77,14832,14833,14835,14837,14840,14842,14845,14847,14849],{"class":79,"line":1589},[77,14834,9004],{"class":87},[77,14836,3655],{"class":2123},[77,14838,14839],{"class":271}," \"c = \"",[77,14841,3922],{"class":2123},[77,14843,14844],{"class":87}," c ",[77,14846,3655],{"class":2123},[77,14848,13942],{"class":87},[77,14850,9728],{"class":323},[77,14852,14853,14855,14857,14859],{"class":79,"line":1595},[77,14854,4778],{"class":83},[77,14856,2622],{"class":87},[77,14858,4783],{"class":271},[77,14860,5194],{"class":87},[77,14862,14863,14865,14867],{"class":79,"line":4088},[77,14864,6565],{"class":2123},[77,14866,6568],{"class":94},[77,14868,104],{"class":87},[77,14870,14871],{"class":79,"line":4093},[77,14872,110],{"class":87},[14,14874,14876],{"id":14875},"_63引用做函数参数","6.3引用做函数参数",[24,14878,14879],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[24,14881,14882],{},"优点：可以简化指针修改实参",[67,14884,14886],{"className":2610,"code":14885,"language":2612,"meta":72,"style":72},"\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",[74,14887,14888,14893,14915,14926,14936,14945,14949,14953,14958,14980,14992,15004,15014,15018,15022,15027,15049,15059,15067,15075,15079,15083,15091,15095,15107,15119,15123,15134,15160,15164,15184,15208,15212,15222,15246,15250,15260,15264,15272],{"__ignoreMap":72},[77,14889,14890],{"class":79,"line":80},[77,14891,14892],{"class":323},"\u002F\u002F1. 值传递\n",[77,14894,14895,14897,14900,14902,14904,14906,14908,14910,14912],{"class":79,"line":91},[77,14896,7839],{"class":2123},[77,14898,14899],{"class":83}," mySwap01",[77,14901,2622],{"class":87},[77,14903,2625],{"class":2123},[77,14905,3876],{"class":7691},[77,14907,680],{"class":87},[77,14909,2625],{"class":2123},[77,14911,5308],{"class":7691},[77,14913,14914],{"class":87},") {\n",[77,14916,14917,14919,14922,14924],{"class":79,"line":107},[77,14918,4460],{"class":2123},[77,14920,14921],{"class":87}," temp ",[77,14923,268],{"class":2123},[77,14925,3910],{"class":87},[77,14927,14928,14931,14933],{"class":79,"line":191},[77,14929,14930],{"class":87},"    a ",[77,14932,268],{"class":2123},[77,14934,14935],{"class":87}," b;\n",[77,14937,14938,14940,14942],{"class":79,"line":1543},[77,14939,14612],{"class":87},[77,14941,268],{"class":2123},[77,14943,14944],{"class":87}," temp;\n",[77,14946,14947],{"class":79,"line":1549},[77,14948,110],{"class":87},[77,14950,14951],{"class":79,"line":1566},[77,14952,4875],{"emptyLinePlaceholder":2549},[77,14954,14955],{"class":79,"line":1572},[77,14956,14957],{"class":323},"\u002F\u002F2. 地址传递\n",[77,14959,14960,14962,14965,14967,14970,14972,14974,14976,14978],{"class":79,"line":1589},[77,14961,7839],{"class":2123},[77,14963,14964],{"class":83}," mySwap02",[77,14966,2622],{"class":87},[77,14968,14969],{"class":2123},"int*",[77,14971,3876],{"class":7691},[77,14973,680],{"class":87},[77,14975,14969],{"class":2123},[77,14977,5308],{"class":7691},[77,14979,14914],{"class":87},[77,14981,14982,14984,14986,14988,14990],{"class":79,"line":1595},[77,14983,4460],{"class":2123},[77,14985,14921],{"class":87},[77,14987,268],{"class":2123},[77,14989,8993],{"class":2123},[77,14991,8672],{"class":87},[77,14993,14994,14996,14998,15000,15002],{"class":79,"line":4088},[77,14995,8878],{"class":2123},[77,14997,13392],{"class":87},[77,14999,268],{"class":2123},[77,15001,8993],{"class":2123},[77,15003,8544],{"class":87},[77,15005,15006,15008,15010,15012],{"class":79,"line":4093},[77,15007,8878],{"class":2123},[77,15009,13418],{"class":87},[77,15011,268],{"class":2123},[77,15013,14944],{"class":87},[77,15015,15016],{"class":79,"line":4099},[77,15017,110],{"class":87},[77,15019,15020],{"class":79,"line":4104},[77,15021,4875],{"emptyLinePlaceholder":2549},[77,15023,15024],{"class":79,"line":4118},[77,15025,15026],{"class":323},"\u002F\u002F3. 引用传递\n",[77,15028,15029,15031,15034,15036,15039,15041,15043,15045,15047],{"class":79,"line":4123},[77,15030,7839],{"class":2123},[77,15032,15033],{"class":83}," mySwap03",[77,15035,2622],{"class":87},[77,15037,15038],{"class":2123},"int&",[77,15040,3876],{"class":7691},[77,15042,680],{"class":87},[77,15044,15038],{"class":2123},[77,15046,5308],{"class":7691},[77,15048,14914],{"class":87},[77,15050,15051,15053,15055,15057],{"class":79,"line":4129},[77,15052,4460],{"class":2123},[77,15054,14921],{"class":87},[77,15056,268],{"class":2123},[77,15058,3910],{"class":87},[77,15060,15061,15063,15065],{"class":79,"line":4150},[77,15062,14930],{"class":87},[77,15064,268],{"class":2123},[77,15066,14935],{"class":87},[77,15068,15069,15071,15073],{"class":79,"line":4155},[77,15070,14612],{"class":87},[77,15072,268],{"class":2123},[77,15074,14944],{"class":87},[77,15076,15077],{"class":79,"line":4169},[77,15078,110],{"class":87},[77,15080,15081],{"class":79,"line":4174},[77,15082,4875],{"emptyLinePlaceholder":2549},[77,15084,15085,15087,15089],{"class":79,"line":4203},[77,15086,2625],{"class":2123},[77,15088,4448],{"class":83},[77,15090,13326],{"class":87},[77,15092,15093],{"class":79,"line":4208},[77,15094,4875],{"emptyLinePlaceholder":2549},[77,15096,15097,15099,15101,15103,15105],{"class":79,"line":4225},[77,15098,4460],{"class":2123},[77,15100,13342],{"class":87},[77,15102,268],{"class":2123},[77,15104,4513],{"class":94},[77,15106,104],{"class":87},[77,15108,15109,15111,15113,15115,15117],{"class":79,"line":4230},[77,15110,4460],{"class":2123},[77,15112,13355],{"class":87},[77,15114,268],{"class":2123},[77,15116,11424],{"class":94},[77,15118,104],{"class":87},[77,15120,15121],{"class":79,"line":4235},[77,15122,4875],{"emptyLinePlaceholder":2549},[77,15124,15125,15128,15131],{"class":79,"line":4240},[77,15126,15127],{"class":83},"    mySwap01",[77,15129,15130],{"class":87},"(a, b);",[77,15132,15133],{"class":323},"\u002F\u002F值传递，形参不会修饰实参\n",[77,15135,15136,15138,15140,15143,15145,15147,15149,15152,15154,15156,15158],{"class":79,"line":4254},[77,15137,9004],{"class":87},[77,15139,3655],{"class":2123},[77,15141,15142],{"class":271}," \"a:\"",[77,15144,3922],{"class":2123},[77,15146,13342],{"class":87},[77,15148,3655],{"class":2123},[77,15150,15151],{"class":271}," \" b:\"",[77,15153,3922],{"class":2123},[77,15155,13355],{"class":87},[77,15157,3655],{"class":2123},[77,15159,11314],{"class":87},[77,15161,15162],{"class":79,"line":4259},[77,15163,4875],{"emptyLinePlaceholder":2549},[77,15165,15166,15169,15171,15173,15176,15178,15181],{"class":79,"line":5052},[77,15167,15168],{"class":83},"    mySwap02",[77,15170,2622],{"class":87},[77,15172,2967],{"class":2123},[77,15174,15175],{"class":87},"a, ",[77,15177,2967],{"class":2123},[77,15179,15180],{"class":87},"b);",[77,15182,15183],{"class":323},"\u002F\u002F地址传递，形参会修饰实参\n",[77,15185,15186,15188,15190,15192,15194,15196,15198,15200,15202,15204,15206],{"class":79,"line":5066},[77,15187,9004],{"class":87},[77,15189,3655],{"class":2123},[77,15191,15142],{"class":271},[77,15193,3922],{"class":2123},[77,15195,13342],{"class":87},[77,15197,3655],{"class":2123},[77,15199,15151],{"class":271},[77,15201,3922],{"class":2123},[77,15203,13355],{"class":87},[77,15205,3655],{"class":2123},[77,15207,11314],{"class":87},[77,15209,15210],{"class":79,"line":5074},[77,15211,4875],{"emptyLinePlaceholder":2549},[77,15213,15214,15217,15219],{"class":79,"line":5079},[77,15215,15216],{"class":83},"    mySwap03",[77,15218,15130],{"class":87},[77,15220,15221],{"class":323},"\u002F\u002F引用传递，形参会修饰实参\n",[77,15223,15224,15226,15228,15230,15232,15234,15236,15238,15240,15242,15244],{"class":79,"line":5085},[77,15225,9004],{"class":87},[77,15227,3655],{"class":2123},[77,15229,15142],{"class":271},[77,15231,3922],{"class":2123},[77,15233,13342],{"class":87},[77,15235,3655],{"class":2123},[77,15237,15151],{"class":271},[77,15239,3922],{"class":2123},[77,15241,13355],{"class":87},[77,15243,3655],{"class":2123},[77,15245,11314],{"class":87},[77,15247,15248],{"class":79,"line":5091},[77,15249,4875],{"emptyLinePlaceholder":2549},[77,15251,15252,15254,15256,15258],{"class":79,"line":5096},[77,15253,4778],{"class":83},[77,15255,2622],{"class":87},[77,15257,4783],{"class":271},[77,15259,5194],{"class":87},[77,15261,15262],{"class":79,"line":10422},[77,15263,4875],{"emptyLinePlaceholder":2549},[77,15265,15266,15268,15270],{"class":79,"line":10446},[77,15267,6565],{"class":2123},[77,15269,6568],{"class":94},[77,15271,104],{"class":87},[77,15273,15274],{"class":79,"line":10451},[77,15275,110],{"class":87},[14,15277,15279],{"id":15278},"_64引用做函数的返回值","6.4引用做函数的返回值",[24,15281,15282],{},"作用：引用是可以作为函数的返回值存在的",[24,15284,1988,15285],{},[27,15286,15287],{},"不要返回局部变量引用",[24,15289,15290],{},"用法：函数调用作为左值",[67,15292,15294],{"className":12414,"code":15293,"language":12416,"meta":72,"style":72},"\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",[74,15295,15296,15301,15309,15324,15330,15334,15338,15343,15351,15368,15374,15378,15382,15390,15394,15399,15413,15433,15452,15456,15461,15474,15494,15512,15516,15532,15536,15555,15573,15577,15587,15591,15599],{"__ignoreMap":72},[77,15297,15298],{"class":79,"line":80},[77,15299,15300],{"class":323},"\u002F\u002F返回局部变量引用\n",[77,15302,15303,15305,15307],{"class":79,"line":91},[77,15304,15038],{"class":2123},[77,15306,8063],{"class":83},[77,15308,13326],{"class":87},[77,15310,15311,15313,15315,15317,15319,15321],{"class":79,"line":107},[77,15312,4460],{"class":2123},[77,15314,13342],{"class":87},[77,15316,268],{"class":2123},[77,15318,4513],{"class":94},[77,15320,2675],{"class":87},[77,15322,15323],{"class":323}," \u002F\u002F局部变量\n",[77,15325,15326,15328],{"class":79,"line":191},[77,15327,6565],{"class":2123},[77,15329,3910],{"class":87},[77,15331,15332],{"class":79,"line":1543},[77,15333,110],{"class":87},[77,15335,15336],{"class":79,"line":1549},[77,15337,4875],{"emptyLinePlaceholder":2549},[77,15339,15340],{"class":79,"line":1566},[77,15341,15342],{"class":323},"\u002F\u002F返回静态变量引用\n",[77,15344,15345,15347,15349],{"class":79,"line":1572},[77,15346,15038],{"class":2123},[77,15348,8132],{"class":83},[77,15350,13326],{"class":87},[77,15352,15353,15355,15357,15359,15361,15363,15365],{"class":79,"line":1589},[77,15354,13493],{"class":2123},[77,15356,4857],{"class":2123},[77,15358,13342],{"class":87},[77,15360,268],{"class":2123},[77,15362,11424],{"class":94},[77,15364,2675],{"class":87},[77,15366,15367],{"class":323},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[77,15369,15370,15372],{"class":79,"line":1595},[77,15371,6565],{"class":2123},[77,15373,3910],{"class":87},[77,15375,15376],{"class":79,"line":4088},[77,15377,110],{"class":87},[77,15379,15380],{"class":79,"line":4093},[77,15381,4875],{"emptyLinePlaceholder":2549},[77,15383,15384,15386,15388],{"class":79,"line":4099},[77,15385,2625],{"class":2123},[77,15387,4448],{"class":83},[77,15389,13326],{"class":87},[77,15391,15392],{"class":79,"line":4104},[77,15393,4875],{"emptyLinePlaceholder":2549},[77,15395,15396],{"class":79,"line":4118},[77,15397,15398],{"class":323},"    \u002F\u002F不能返回局部变量的引用\n",[77,15400,15401,15404,15407,15409,15411],{"class":79,"line":4123},[77,15402,15403],{"class":2123},"    int&",[77,15405,15406],{"class":87}," ref ",[77,15408,268],{"class":2123},[77,15410,8063],{"class":83},[77,15412,8111],{"class":87},[77,15414,15415,15417,15419,15422,15424,15426,15428,15430],{"class":79,"line":4129},[77,15416,9004],{"class":87},[77,15418,3655],{"class":2123},[77,15420,15421],{"class":271}," \"ref = \"",[77,15423,3922],{"class":2123},[77,15425,15406],{"class":87},[77,15427,3655],{"class":2123},[77,15429,13942],{"class":87},[77,15431,15432],{"class":323},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[77,15434,15435,15437,15439,15441,15443,15445,15447,15449],{"class":79,"line":4150},[77,15436,9004],{"class":87},[77,15438,3655],{"class":2123},[77,15440,15421],{"class":271},[77,15442,3922],{"class":2123},[77,15444,15406],{"class":87},[77,15446,3655],{"class":2123},[77,15448,13942],{"class":87},[77,15450,15451],{"class":323},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[77,15453,15454],{"class":79,"line":4155},[77,15455,4875],{"emptyLinePlaceholder":2549},[77,15457,15458],{"class":79,"line":4169},[77,15459,15460],{"class":323},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[77,15462,15463,15465,15468,15470,15472],{"class":79,"line":4174},[77,15464,15403],{"class":2123},[77,15466,15467],{"class":87}," ref2 ",[77,15469,268],{"class":2123},[77,15471,8132],{"class":83},[77,15473,8111],{"class":87},[77,15475,15476,15478,15480,15483,15485,15487,15489,15491],{"class":79,"line":4203},[77,15477,9004],{"class":87},[77,15479,3655],{"class":2123},[77,15481,15482],{"class":271}," \"ref2 = \"",[77,15484,3922],{"class":2123},[77,15486,15467],{"class":87},[77,15488,3655],{"class":2123},[77,15490,13942],{"class":87},[77,15492,15493],{"class":323}," \u002F\u002F20\n",[77,15495,15496,15498,15500,15502,15504,15506,15508,15510],{"class":79,"line":4208},[77,15497,9004],{"class":87},[77,15499,3655],{"class":2123},[77,15501,15482],{"class":271},[77,15503,3922],{"class":2123},[77,15505,15467],{"class":87},[77,15507,3655],{"class":2123},[77,15509,13942],{"class":87},[77,15511,15493],{"class":323},[77,15513,15514],{"class":79,"line":4225},[77,15515,4875],{"emptyLinePlaceholder":2549},[77,15517,15518,15520,15523,15525,15527,15529],{"class":79,"line":4230},[77,15519,8177],{"class":83},[77,15521,15522],{"class":87},"() ",[77,15524,268],{"class":2123},[77,15526,5474],{"class":94},[77,15528,2675],{"class":87},[77,15530,15531],{"class":323},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[77,15533,15534],{"class":79,"line":4235},[77,15535,4875],{"emptyLinePlaceholder":2549},[77,15537,15538,15540,15542,15544,15546,15548,15550,15552],{"class":79,"line":4240},[77,15539,9004],{"class":87},[77,15541,3655],{"class":2123},[77,15543,15482],{"class":271},[77,15545,3922],{"class":2123},[77,15547,15467],{"class":87},[77,15549,3655],{"class":2123},[77,15551,13942],{"class":87},[77,15553,15554],{"class":323}," \u002F\u002F1000\n",[77,15556,15557,15559,15561,15563,15565,15567,15569,15571],{"class":79,"line":4254},[77,15558,9004],{"class":87},[77,15560,3655],{"class":2123},[77,15562,15482],{"class":271},[77,15564,3922],{"class":2123},[77,15566,15467],{"class":87},[77,15568,3655],{"class":2123},[77,15570,13942],{"class":87},[77,15572,15554],{"class":323},[77,15574,15575],{"class":79,"line":4259},[77,15576,4875],{"emptyLinePlaceholder":2549},[77,15578,15579,15581,15583,15585],{"class":79,"line":5052},[77,15580,4778],{"class":83},[77,15582,2622],{"class":87},[77,15584,4783],{"class":271},[77,15586,5194],{"class":87},[77,15588,15589],{"class":79,"line":5066},[77,15590,4875],{"emptyLinePlaceholder":2549},[77,15592,15593,15595,15597],{"class":79,"line":5074},[77,15594,6565],{"class":2123},[77,15596,6568],{"class":94},[77,15598,104],{"class":87},[77,15600,15601],{"class":79,"line":5079},[77,15602,110],{"class":87},[14,15604,15606],{"id":15605},"_65引用的本质","6.5引用的本质",[24,15608,15609,15610],{},"本质：",[27,15611,15612],{},"引用的本质在c++内部实现是一个指针常量.",[67,15614,15616],{"className":2610,"code":15615,"language":2612,"meta":72,"style":72},"\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",[74,15617,15618,15623,15639,15653,15657,15666,15678,15683,15688,15699,15712,15716,15732,15749,15753,15761,15769],{"__ignoreMap":72},[77,15619,15620],{"class":79,"line":80},[77,15621,15622],{"class":323},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[77,15624,15625,15627,15629,15631,15633,15636],{"class":79,"line":91},[77,15626,7839],{"class":2123},[77,15628,13858],{"class":83},[77,15630,2622],{"class":87},[77,15632,15038],{"class":2123},[77,15634,15635],{"class":7691}," ref",[77,15637,15638],{"class":87},"){\n",[77,15640,15641,15644,15646,15648,15650],{"class":79,"line":107},[77,15642,15643],{"class":87},"    ref ",[77,15645,268],{"class":2123},[77,15647,8229],{"class":94},[77,15649,2675],{"class":87},[77,15651,15652],{"class":323}," \u002F\u002F ref是引用，转换为*ref = 100\n",[77,15654,15655],{"class":79,"line":191},[77,15656,110],{"class":87},[77,15658,15659,15661,15663],{"class":79,"line":1543},[77,15660,2625],{"class":2123},[77,15662,4448],{"class":83},[77,15664,15665],{"class":87},"(){\n",[77,15667,15668,15670,15672,15674,15676],{"class":79,"line":1549},[77,15669,4460],{"class":2123},[77,15671,13342],{"class":87},[77,15673,268],{"class":2123},[77,15675,4513],{"class":94},[77,15677,104],{"class":87},[77,15679,15680],{"class":79,"line":1566},[77,15681,15682],{"class":87},"    \n",[77,15684,15685],{"class":79,"line":1572},[77,15686,15687],{"class":323},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[77,15689,15690,15692,15694,15696],{"class":79,"line":1589},[77,15691,15403],{"class":2123},[77,15693,15406],{"class":87},[77,15695,268],{"class":2123},[77,15697,15698],{"class":87}," a; \n",[77,15700,15701,15703,15705,15707,15709],{"class":79,"line":1595},[77,15702,15643],{"class":87},[77,15704,268],{"class":2123},[77,15706,11424],{"class":94},[77,15708,2675],{"class":87},[77,15710,15711],{"class":323}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[77,15713,15714],{"class":79,"line":4088},[77,15715,15682],{"class":87},[77,15717,15718,15720,15722,15724,15726,15728,15730],{"class":79,"line":4093},[77,15719,9004],{"class":87},[77,15721,3655],{"class":2123},[77,15723,15142],{"class":271},[77,15725,3922],{"class":2123},[77,15727,13342],{"class":87},[77,15729,3655],{"class":2123},[77,15731,11314],{"class":87},[77,15733,15734,15736,15738,15741,15743,15745,15747],{"class":79,"line":4099},[77,15735,9004],{"class":87},[77,15737,3655],{"class":2123},[77,15739,15740],{"class":271}," \"ref:\"",[77,15742,3922],{"class":2123},[77,15744,15406],{"class":87},[77,15746,3655],{"class":2123},[77,15748,11314],{"class":87},[77,15750,15751],{"class":79,"line":4104},[77,15752,15682],{"class":87},[77,15754,15755,15758],{"class":79,"line":4118},[77,15756,15757],{"class":83},"    func",[77,15759,15760],{"class":87},"(a);\n",[77,15762,15763,15765,15767],{"class":79,"line":4123},[77,15764,6565],{"class":2123},[77,15766,6568],{"class":94},[77,15768,104],{"class":87},[77,15770,15771],{"class":79,"line":4129},[77,15772,110],{"class":87},[24,15774,13805],{},[139,15776,15777,15780],{},[54,15778,15779],{},"引用的本质，就是一个指针常量",[54,15781,15782],{},"引用一旦初始化，就不可以发生改变",[14,15784,15786],{"id":15785},"_66常量引用","6.6常量引用",[24,15788,15789],{},"作用：常量引用主要用来修饰形参",[24,15791,15792,15793,15796],{},"在函数形参列表中，可以加",[27,15794,15795],{},"const修饰形参","，防止形参改变实参",[67,15798,15800],{"className":2610,"code":15799,"language":2612,"meta":72,"style":72},"\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",[74,15801,15802,15807,15812,15831,15836,15849,15853,15857,15865,15869,15874,15879,15893,15897,15905,15917,15921,15926,15938,15945,15949,15959,15963,15971],{"__ignoreMap":72},[77,15803,15804],{"class":79,"line":80},[77,15805,15806],{"class":323},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[77,15808,15809],{"class":79,"line":91},[77,15810,15811],{"class":323},"\u002F\u002F加上const就不能修改实参的\n",[77,15813,15814,15816,15819,15821,15823,15826,15829],{"class":79,"line":107},[77,15815,7839],{"class":2123},[77,15817,15818],{"class":83}," showValue",[77,15820,2622],{"class":87},[77,15822,9267],{"class":2123},[77,15824,15825],{"class":2123}," int&",[77,15827,15828],{"class":7691}," v",[77,15830,14914],{"class":87},[77,15832,15833],{"class":79,"line":191},[77,15834,15835],{"class":323},"    \u002F\u002Fv += 100;\n",[77,15837,15838,15840,15842,15845,15847],{"class":79,"line":1543},[77,15839,9004],{"class":87},[77,15841,3655],{"class":2123},[77,15843,15844],{"class":87}," v ",[77,15846,3655],{"class":2123},[77,15848,11314],{"class":87},[77,15850,15851],{"class":79,"line":1549},[77,15852,110],{"class":87},[77,15854,15855],{"class":79,"line":1566},[77,15856,4875],{"emptyLinePlaceholder":2549},[77,15858,15859,15861,15863],{"class":79,"line":1572},[77,15860,2625],{"class":2123},[77,15862,4448],{"class":83},[77,15864,13326],{"class":87},[77,15866,15867],{"class":79,"line":1589},[77,15868,4875],{"emptyLinePlaceholder":2549},[77,15870,15871],{"class":79,"line":1595},[77,15872,15873],{"class":323},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[77,15875,15876],{"class":79,"line":4088},[77,15877,15878],{"class":323},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[77,15880,15881,15883,15885,15887,15889,15891],{"class":79,"line":4093},[77,15882,13694],{"class":2123},[77,15884,15825],{"class":2123},[77,15886,15406],{"class":87},[77,15888,268],{"class":2123},[77,15890,4513],{"class":94},[77,15892,104],{"class":87},[77,15894,15895],{"class":79,"line":4099},[77,15896,4875],{"emptyLinePlaceholder":2549},[77,15898,15899,15902],{"class":79,"line":4104},[77,15900,15901],{"class":323},"    \u002F\u002Fref = 100;",[77,15903,15904],{"class":323},"  \u002F\u002F加入const后不可以修改变量\n",[77,15906,15907,15909,15911,15913,15915],{"class":79,"line":4118},[77,15908,9004],{"class":87},[77,15910,3655],{"class":2123},[77,15912,15406],{"class":87},[77,15914,3655],{"class":2123},[77,15916,11314],{"class":87},[77,15918,15919],{"class":79,"line":4123},[77,15920,4875],{"emptyLinePlaceholder":2549},[77,15922,15923],{"class":79,"line":4129},[77,15924,15925],{"class":323},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[77,15927,15928,15930,15932,15934,15936],{"class":79,"line":4150},[77,15929,4460],{"class":2123},[77,15931,13342],{"class":87},[77,15933,268],{"class":2123},[77,15935,4513],{"class":94},[77,15937,104],{"class":87},[77,15939,15940,15943],{"class":79,"line":4155},[77,15941,15942],{"class":83},"    showValue",[77,15944,15760],{"class":87},[77,15946,15947],{"class":79,"line":4169},[77,15948,4875],{"emptyLinePlaceholder":2549},[77,15950,15951,15953,15955,15957],{"class":79,"line":4174},[77,15952,4778],{"class":83},[77,15954,2622],{"class":87},[77,15956,4783],{"class":271},[77,15958,5194],{"class":87},[77,15960,15961],{"class":79,"line":4203},[77,15962,4875],{"emptyLinePlaceholder":2549},[77,15964,15965,15967,15969],{"class":79,"line":4208},[77,15966,6565],{"class":2123},[77,15968,6568],{"class":94},[77,15970,104],{"class":87},[77,15972,15973],{"class":79,"line":4225},[77,15974,110],{"class":87},[2520,15976,15977],{},"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":72,"searchDepth":91,"depth":91,"links":15979},[15980,15981,15982,15983,15984,15985],{"id":14513,"depth":91,"text":14514},{"id":14692,"depth":91,"text":14693},{"id":14875,"depth":91,"text":14876},{"id":15278,"depth":91,"text":15279},{"id":15605,"depth":91,"text":15606},{"id":15785,"depth":91,"text":15786},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14505,"description":72},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15992,"title":15993,"body":15994,"description":72,"extension":2547,"meta":17075,"navigation":2549,"path":17076,"seo":17077,"stem":17078,"__hash__":17079},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15995,"toc":17067},[15996,15999,16003,16006,16011,16243,16245,16256,16260,16263,16271,16375,16378,16382,16385,16389,16392,16397,16419,16425,16752,16755,16759,16767,17064],[10,15997,15993],{"id":15998},"_7函数高级部分",[14,16000,16002],{"id":16001},"_71函数默认参数","7.1函数默认参数",[24,16004,16005],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[24,16007,7656,16008],{},[74,16009,16010],{}," 返回值类型  函数名 （参数= 默认值）{}",[67,16012,16014],{"className":2610,"code":16013,"language":2612,"meta":72,"style":72},"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",[74,16015,16016,16051,16066,16070,16074,16079,16084,16113,16133,16143,16147,16151,16159,16163,16191,16213,16217,16227,16231,16239],{"__ignoreMap":72},[77,16017,16018,16020,16022,16024,16026,16028,16030,16032,16034,16037,16039,16041,16043,16045,16047,16049],{"class":79,"line":80},[77,16019,2625],{"class":2123},[77,16021,13858],{"class":83},[77,16023,2622],{"class":87},[77,16025,2625],{"class":2123},[77,16027,3876],{"class":7691},[77,16029,680],{"class":87},[77,16031,2625],{"class":2123},[77,16033,5308],{"class":7691},[77,16035,16036],{"class":2123}," =",[77,16038,4513],{"class":94},[77,16040,680],{"class":87},[77,16042,2625],{"class":2123},[77,16044,5324],{"class":7691},[77,16046,16036],{"class":2123},[77,16048,4513],{"class":94},[77,16050,14914],{"class":87},[77,16052,16053,16055,16057,16059,16061,16063],{"class":79,"line":91},[77,16054,6565],{"class":2123},[77,16056,13342],{"class":87},[77,16058,3094],{"class":2123},[77,16060,13355],{"class":87},[77,16062,3094],{"class":2123},[77,16064,16065],{"class":87}," c;\n",[77,16067,16068],{"class":79,"line":107},[77,16069,110],{"class":87},[77,16071,16072],{"class":79,"line":191},[77,16073,4875],{"emptyLinePlaceholder":2549},[77,16075,16076],{"class":79,"line":1543},[77,16077,16078],{"class":323},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[77,16080,16081],{"class":79,"line":1549},[77,16082,16083],{"class":323},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[77,16085,16086,16088,16091,16093,16095,16097,16099,16101,16103,16105,16107,16109,16111],{"class":79,"line":1566},[77,16087,2625],{"class":2123},[77,16089,16090],{"class":83}," func2",[77,16092,2622],{"class":87},[77,16094,2625],{"class":2123},[77,16096,3876],{"class":7691},[77,16098,16036],{"class":2123},[77,16100,4513],{"class":94},[77,16102,680],{"class":87},[77,16104,2625],{"class":2123},[77,16106,5308],{"class":7691},[77,16108,16036],{"class":2123},[77,16110,4513],{"class":94},[77,16112,5194],{"class":87},[77,16114,16115,16117,16119,16121,16123,16125,16127,16129,16131],{"class":79,"line":1572},[77,16116,2625],{"class":2123},[77,16118,16090],{"class":83},[77,16120,2622],{"class":87},[77,16122,2625],{"class":2123},[77,16124,3876],{"class":7691},[77,16126,680],{"class":87},[77,16128,2625],{"class":2123},[77,16130,5308],{"class":7691},[77,16132,14914],{"class":87},[77,16134,16135,16137,16139,16141],{"class":79,"line":1589},[77,16136,6565],{"class":2123},[77,16138,13342],{"class":87},[77,16140,3094],{"class":2123},[77,16142,14935],{"class":87},[77,16144,16145],{"class":79,"line":1595},[77,16146,110],{"class":87},[77,16148,16149],{"class":79,"line":4088},[77,16150,4875],{"emptyLinePlaceholder":2549},[77,16152,16153,16155,16157],{"class":79,"line":4093},[77,16154,2625],{"class":2123},[77,16156,4448],{"class":83},[77,16158,13326],{"class":87},[77,16160,16161],{"class":79,"line":4099},[77,16162,4875],{"emptyLinePlaceholder":2549},[77,16164,16165,16167,16169,16172,16174,16176,16178,16180,16182,16184,16187,16189],{"class":79,"line":4104},[77,16166,9004],{"class":87},[77,16168,3655],{"class":2123},[77,16170,16171],{"class":271}," \"ret = \"",[77,16173,3922],{"class":2123},[77,16175,13858],{"class":83},[77,16177,2622],{"class":87},[77,16179,3313],{"class":94},[77,16181,680],{"class":87},[77,16183,3313],{"class":94},[77,16185,16186],{"class":87},") ",[77,16188,3655],{"class":2123},[77,16190,11314],{"class":87},[77,16192,16193,16195,16197,16199,16201,16203,16205,16207,16209,16211],{"class":79,"line":4118},[77,16194,9004],{"class":87},[77,16196,3655],{"class":2123},[77,16198,16171],{"class":271},[77,16200,3922],{"class":2123},[77,16202,13858],{"class":83},[77,16204,2622],{"class":87},[77,16206,2925],{"class":94},[77,16208,16186],{"class":87},[77,16210,3655],{"class":2123},[77,16212,11314],{"class":87},[77,16214,16215],{"class":79,"line":4123},[77,16216,4875],{"emptyLinePlaceholder":2549},[77,16218,16219,16221,16223,16225],{"class":79,"line":4129},[77,16220,4778],{"class":83},[77,16222,2622],{"class":87},[77,16224,4783],{"class":271},[77,16226,5194],{"class":87},[77,16228,16229],{"class":79,"line":4150},[77,16230,4875],{"emptyLinePlaceholder":2549},[77,16232,16233,16235,16237],{"class":79,"line":4155},[77,16234,6565],{"class":2123},[77,16236,6568],{"class":94},[77,16238,104],{"class":87},[77,16240,16241],{"class":79,"line":4169},[77,16242,110],{"class":87},[24,16244,13805],{},[139,16246,16247,16250,16253],{},[54,16248,16249],{},"我传就用我；没传就用你",[54,16251,16252],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[54,16254,16255],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16257,16259],{"id":16258},"_72函数的占位参数","7.2函数的占位参数",[24,16261,16262],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[24,16264,16265,16267,16268],{},[27,16266,7656],{}," ",[74,16269,16270],{},"返回值类型 函数名 (数据类型){}",[67,16272,16274],{"className":2610,"code":16273,"language":2612,"meta":72,"style":72},"\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",[74,16275,16276,16281,16299,16312,16316,16324,16328,16345,16349,16359,16363,16371],{"__ignoreMap":72},[77,16277,16278],{"class":79,"line":80},[77,16279,16280],{"class":323},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[77,16282,16283,16285,16287,16289,16291,16293,16295,16297],{"class":79,"line":91},[77,16284,7839],{"class":2123},[77,16286,13858],{"class":83},[77,16288,2622],{"class":87},[77,16290,2625],{"class":2123},[77,16292,3876],{"class":7691},[77,16294,680],{"class":87},[77,16296,2625],{"class":2123},[77,16298,14914],{"class":87},[77,16300,16301,16303,16305,16308,16310],{"class":79,"line":107},[77,16302,9004],{"class":87},[77,16304,3655],{"class":2123},[77,16306,16307],{"class":271}," \"this is func\"",[77,16309,3922],{"class":2123},[77,16311,11314],{"class":87},[77,16313,16314],{"class":79,"line":191},[77,16315,110],{"class":87},[77,16317,16318,16320,16322],{"class":79,"line":1543},[77,16319,2625],{"class":2123},[77,16321,4448],{"class":83},[77,16323,13326],{"class":87},[77,16325,16326],{"class":79,"line":1549},[77,16327,4875],{"emptyLinePlaceholder":2549},[77,16329,16330,16332,16334,16336,16338,16340,16342],{"class":79,"line":1566},[77,16331,15757],{"class":83},[77,16333,2622],{"class":87},[77,16335,3059],{"class":94},[77,16337,2992],{"class":87},[77,16339,3059],{"class":94},[77,16341,8441],{"class":87},[77,16343,16344],{"class":323}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[77,16346,16347],{"class":79,"line":1572},[77,16348,4875],{"emptyLinePlaceholder":2549},[77,16350,16351,16353,16355,16357],{"class":79,"line":1589},[77,16352,4778],{"class":83},[77,16354,2622],{"class":87},[77,16356,4783],{"class":271},[77,16358,5194],{"class":87},[77,16360,16361],{"class":79,"line":1595},[77,16362,4875],{"emptyLinePlaceholder":2549},[77,16364,16365,16367,16369],{"class":79,"line":4088},[77,16366,6565],{"class":2123},[77,16368,6568],{"class":94},[77,16370,104],{"class":87},[77,16372,16373],{"class":79,"line":4093},[77,16374,110],{"class":87},[24,16376,16377],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16379,16381],{"id":16380},"_73函数重载","7.3函数重载",[24,16383,16384],{},"意思是函数名是可以相同的",[19,16386,16388],{"id":16387},"_731基本语法","7.3.1基本语法",[24,16390,16391],{},"作用：函数名可以相同，提高复用性",[24,16393,16394],{},[27,16395,16396],{},"函数重载满足条件：",[51,16398,16399,16402,16405],{},[54,16400,16401],{},"同一个作用域下",[54,16403,16404],{},"函数名称相同",[54,16406,16407,16408,16411,16412,16415,16416],{},"函数参数",[27,16409,16410],{},"类型不同","  或者 ",[27,16413,16414],{},"个数不同"," 或者 ",[27,16417,16418],{},"顺序不同",[24,16420,16421,16424],{},[27,16422,16423],{},"注意:","  函数的返回值不可以作为函数重载的条件",[67,16426,16428],{"className":12414,"code":16427,"language":12416,"meta":72,"style":72},"\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",[74,16429,16430,16435,16443,16447,16460,16464,16478,16482,16495,16499,16514,16518,16531,16535,16556,16560,16573,16577,16597,16601,16614,16618,16622,16627,16632,16637,16642,16647,16651,16655,16663,16667,16673,16683,16693,16707,16722,16726,16736,16740,16748],{"__ignoreMap":72},[77,16431,16432],{"class":79,"line":80},[77,16433,16434],{"class":323},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[77,16436,16437,16439,16441],{"class":79,"line":91},[77,16438,7839],{"class":2123},[77,16440,13858],{"class":83},[77,16442,4451],{"class":87},[77,16444,16445],{"class":79,"line":107},[77,16446,4023],{"class":87},[77,16448,16449,16451,16453,16456,16458],{"class":79,"line":191},[77,16450,9004],{"class":87},[77,16452,3655],{"class":2123},[77,16454,16455],{"class":271}," \"func 的调用！\"",[77,16457,3922],{"class":2123},[77,16459,11314],{"class":87},[77,16461,16462],{"class":79,"line":1543},[77,16463,110],{"class":87},[77,16465,16466,16468,16470,16472,16474,16476],{"class":79,"line":1549},[77,16467,7839],{"class":2123},[77,16469,13858],{"class":83},[77,16471,2622],{"class":87},[77,16473,2625],{"class":2123},[77,16475,3876],{"class":7691},[77,16477,2628],{"class":87},[77,16479,16480],{"class":79,"line":1566},[77,16481,4023],{"class":87},[77,16483,16484,16486,16488,16491,16493],{"class":79,"line":1572},[77,16485,9004],{"class":87},[77,16487,3655],{"class":2123},[77,16489,16490],{"class":271}," \"func (int a) 的调用！\"",[77,16492,3922],{"class":2123},[77,16494,11314],{"class":87},[77,16496,16497],{"class":79,"line":1589},[77,16498,110],{"class":87},[77,16500,16501,16503,16505,16507,16510,16512],{"class":79,"line":1595},[77,16502,7839],{"class":2123},[77,16504,13858],{"class":83},[77,16506,2622],{"class":87},[77,16508,16509],{"class":2123},"double",[77,16511,3876],{"class":7691},[77,16513,2628],{"class":87},[77,16515,16516],{"class":79,"line":4088},[77,16517,4023],{"class":87},[77,16519,16520,16522,16524,16527,16529],{"class":79,"line":4093},[77,16521,9004],{"class":87},[77,16523,3655],{"class":2123},[77,16525,16526],{"class":271}," \"func (double a)的调用！\"",[77,16528,3922],{"class":2123},[77,16530,11314],{"class":87},[77,16532,16533],{"class":79,"line":4099},[77,16534,110],{"class":87},[77,16536,16537,16539,16541,16543,16545,16547,16550,16552,16554],{"class":79,"line":4104},[77,16538,7839],{"class":2123},[77,16540,13858],{"class":83},[77,16542,2622],{"class":87},[77,16544,2625],{"class":2123},[77,16546,3876],{"class":7691},[77,16548,16549],{"class":87}," ,",[77,16551,16509],{"class":2123},[77,16553,5308],{"class":7691},[77,16555,2628],{"class":87},[77,16557,16558],{"class":79,"line":4118},[77,16559,4023],{"class":87},[77,16561,16562,16564,16566,16569,16571],{"class":79,"line":4123},[77,16563,9004],{"class":87},[77,16565,3655],{"class":2123},[77,16567,16568],{"class":271}," \"func (int a ,double b) 的调用！\"",[77,16570,3922],{"class":2123},[77,16572,11314],{"class":87},[77,16574,16575],{"class":79,"line":4129},[77,16576,110],{"class":87},[77,16578,16579,16581,16583,16585,16587,16589,16591,16593,16595],{"class":79,"line":4150},[77,16580,7839],{"class":2123},[77,16582,13858],{"class":83},[77,16584,2622],{"class":87},[77,16586,16509],{"class":2123},[77,16588,3876],{"class":7691},[77,16590,16549],{"class":87},[77,16592,2625],{"class":2123},[77,16594,5308],{"class":7691},[77,16596,2628],{"class":87},[77,16598,16599],{"class":79,"line":4155},[77,16600,4023],{"class":87},[77,16602,16603,16605,16607,16610,16612],{"class":79,"line":4169},[77,16604,9004],{"class":87},[77,16606,3655],{"class":2123},[77,16608,16609],{"class":271}," \"func (double a ,int b)的调用！\"",[77,16611,3922],{"class":2123},[77,16613,11314],{"class":87},[77,16615,16616],{"class":79,"line":4174},[77,16617,110],{"class":87},[77,16619,16620],{"class":79,"line":4203},[77,16621,4875],{"emptyLinePlaceholder":2549},[77,16623,16624],{"class":79,"line":4208},[77,16625,16626],{"class":323},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[77,16628,16629],{"class":79,"line":4225},[77,16630,16631],{"class":323},"\u002F\u002Fint func(double a, int b)\n",[77,16633,16634],{"class":79,"line":4230},[77,16635,16636],{"class":323},"\u002F\u002F{\n",[77,16638,16639],{"class":79,"line":4235},[77,16640,16641],{"class":323},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[77,16643,16644],{"class":79,"line":4240},[77,16645,16646],{"class":323},"\u002F\u002F}\n",[77,16648,16649],{"class":79,"line":4254},[77,16650,4875],{"emptyLinePlaceholder":2549},[77,16652,16653],{"class":79,"line":4259},[77,16654,4875],{"emptyLinePlaceholder":2549},[77,16656,16657,16659,16661],{"class":79,"line":5052},[77,16658,2625],{"class":2123},[77,16660,4448],{"class":83},[77,16662,13326],{"class":87},[77,16664,16665],{"class":79,"line":5066},[77,16666,4875],{"emptyLinePlaceholder":2549},[77,16668,16669,16671],{"class":79,"line":5074},[77,16670,15757],{"class":83},[77,16672,8111],{"class":87},[77,16674,16675,16677,16679,16681],{"class":79,"line":5079},[77,16676,15757],{"class":83},[77,16678,2622],{"class":87},[77,16680,3059],{"class":94},[77,16682,5194],{"class":87},[77,16684,16685,16687,16689,16691],{"class":79,"line":5085},[77,16686,15757],{"class":83},[77,16688,2622],{"class":87},[77,16690,2669],{"class":94},[77,16692,5194],{"class":87},[77,16694,16695,16697,16699,16701,16703,16705],{"class":79,"line":5091},[77,16696,15757],{"class":83},[77,16698,2622],{"class":87},[77,16700,3059],{"class":94},[77,16702,2992],{"class":87},[77,16704,2669],{"class":94},[77,16706,5194],{"class":87},[77,16708,16709,16711,16713,16715,16718,16720],{"class":79,"line":5096},[77,16710,15757],{"class":83},[77,16712,2622],{"class":87},[77,16714,2669],{"class":94},[77,16716,16717],{"class":87}," , ",[77,16719,3059],{"class":94},[77,16721,5194],{"class":87},[77,16723,16724],{"class":79,"line":10422},[77,16725,15682],{"class":87},[77,16727,16728,16730,16732,16734],{"class":79,"line":10446},[77,16729,4778],{"class":83},[77,16731,2622],{"class":87},[77,16733,4783],{"class":271},[77,16735,5194],{"class":87},[77,16737,16738],{"class":79,"line":10451},[77,16739,4875],{"emptyLinePlaceholder":2549},[77,16741,16742,16744,16746],{"class":79,"line":10457},[77,16743,6565],{"class":2123},[77,16745,6568],{"class":94},[77,16747,104],{"class":87},[77,16749,16750],{"class":79,"line":10484},[77,16751,110],{"class":87},[24,16753,16754],{},"重点：函数返回值不可以作为函数重载条件！",[19,16756,16758],{"id":16757},"_732注意事项","7.3.2注意事项",[51,16760,16761,16764],{},[54,16762,16763],{},"引用作为重载条件!!!",[54,16765,16766],{},"函数重载碰到函数默认参数",[67,16768,16770],{"className":2610,"code":16769,"language":2612,"meta":72,"style":72},"\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",[74,16771,16772,16777,16782,16786,16802,16806,16819,16823,16827,16845,16849,16862,16866,16870,16874,16879,16883,16907,16911,16924,16928,16932,16946,16950,16963,16967,16971,16979,16983,16995,17005,17018,17022,17026,17034,17038,17048,17052,17060],{"__ignoreMap":72},[77,16773,16774],{"class":79,"line":80},[77,16775,16776],{"class":323},"\u002F\u002F函数重载注意事项\n",[77,16778,16779],{"class":79,"line":91},[77,16780,16781],{"class":323},"\u002F\u002F1、引用作为重载条件\n",[77,16783,16784],{"class":79,"line":107},[77,16785,4875],{"emptyLinePlaceholder":2549},[77,16787,16788,16790,16792,16794,16796,16798,16800],{"class":79,"line":191},[77,16789,7839],{"class":2123},[77,16791,13858],{"class":83},[77,16793,2622],{"class":87},[77,16795,2625],{"class":2123},[77,16797,13057],{"class":2123},[77,16799,417],{"class":7691},[77,16801,2628],{"class":87},[77,16803,16804],{"class":79,"line":1543},[77,16805,4023],{"class":87},[77,16807,16808,16810,16812,16815,16817],{"class":79,"line":1549},[77,16809,9004],{"class":87},[77,16811,3655],{"class":2123},[77,16813,16814],{"class":271}," \"func (int &a) 调用 \"",[77,16816,3922],{"class":2123},[77,16818,11314],{"class":87},[77,16820,16821],{"class":79,"line":1566},[77,16822,110],{"class":87},[77,16824,16825],{"class":79,"line":1572},[77,16826,4875],{"emptyLinePlaceholder":2549},[77,16828,16829,16831,16833,16835,16837,16839,16841,16843],{"class":79,"line":1589},[77,16830,7839],{"class":2123},[77,16832,13858],{"class":83},[77,16834,2622],{"class":87},[77,16836,9267],{"class":2123},[77,16838,4857],{"class":2123},[77,16840,13057],{"class":2123},[77,16842,417],{"class":7691},[77,16844,2628],{"class":87},[77,16846,16847],{"class":79,"line":1595},[77,16848,4023],{"class":87},[77,16850,16851,16853,16855,16858,16860],{"class":79,"line":4088},[77,16852,9004],{"class":87},[77,16854,3655],{"class":2123},[77,16856,16857],{"class":271}," \"func (const int &a) 调用 \"",[77,16859,3922],{"class":2123},[77,16861,11314],{"class":87},[77,16863,16864],{"class":79,"line":4093},[77,16865,110],{"class":87},[77,16867,16868],{"class":79,"line":4099},[77,16869,4875],{"emptyLinePlaceholder":2549},[77,16871,16872],{"class":79,"line":4104},[77,16873,4875],{"emptyLinePlaceholder":2549},[77,16875,16876],{"class":79,"line":4118},[77,16877,16878],{"class":323},"\u002F\u002F2、函数重载碰到函数默认参数\n",[77,16880,16881],{"class":79,"line":4123},[77,16882,4875],{"emptyLinePlaceholder":2549},[77,16884,16885,16887,16889,16891,16893,16895,16897,16899,16901,16903,16905],{"class":79,"line":4129},[77,16886,7839],{"class":2123},[77,16888,16090],{"class":83},[77,16890,2622],{"class":87},[77,16892,2625],{"class":2123},[77,16894,3876],{"class":7691},[77,16896,680],{"class":87},[77,16898,2625],{"class":2123},[77,16900,5308],{"class":7691},[77,16902,16036],{"class":2123},[77,16904,4513],{"class":94},[77,16906,2628],{"class":87},[77,16908,16909],{"class":79,"line":4150},[77,16910,4023],{"class":87},[77,16912,16913,16915,16917,16920,16922],{"class":79,"line":4155},[77,16914,9004],{"class":87},[77,16916,3655],{"class":2123},[77,16918,16919],{"class":271}," \"func2(int a, int b = 10) 调用\"",[77,16921,3922],{"class":2123},[77,16923,11314],{"class":87},[77,16925,16926],{"class":79,"line":4169},[77,16927,110],{"class":87},[77,16929,16930],{"class":79,"line":4174},[77,16931,4875],{"emptyLinePlaceholder":2549},[77,16933,16934,16936,16938,16940,16942,16944],{"class":79,"line":4203},[77,16935,7839],{"class":2123},[77,16937,16090],{"class":83},[77,16939,2622],{"class":87},[77,16941,2625],{"class":2123},[77,16943,3876],{"class":7691},[77,16945,2628],{"class":87},[77,16947,16948],{"class":79,"line":4208},[77,16949,4023],{"class":87},[77,16951,16952,16954,16956,16959,16961],{"class":79,"line":4225},[77,16953,9004],{"class":87},[77,16955,3655],{"class":2123},[77,16957,16958],{"class":271}," \"func2(int a) 调用\"",[77,16960,3922],{"class":2123},[77,16962,11314],{"class":87},[77,16964,16965],{"class":79,"line":4230},[77,16966,110],{"class":87},[77,16968,16969],{"class":79,"line":4235},[77,16970,4875],{"emptyLinePlaceholder":2549},[77,16972,16973,16975,16977],{"class":79,"line":4240},[77,16974,2625],{"class":2123},[77,16976,4448],{"class":83},[77,16978,13326],{"class":87},[77,16980,16981],{"class":79,"line":4254},[77,16982,15682],{"class":87},[77,16984,16985,16987,16989,16991,16993],{"class":79,"line":4259},[77,16986,4460],{"class":2123},[77,16988,13342],{"class":87},[77,16990,268],{"class":2123},[77,16992,4513],{"class":94},[77,16994,104],{"class":87},[77,16996,16997,16999,17002],{"class":79,"line":5052},[77,16998,15757],{"class":83},[77,17000,17001],{"class":87},"(a);",[77,17003,17004],{"class":323}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[77,17006,17007,17009,17011,17013,17015],{"class":79,"line":5066},[77,17008,15757],{"class":83},[77,17010,2622],{"class":87},[77,17012,3059],{"class":94},[77,17014,8441],{"class":87},[77,17016,17017],{"class":323},"\u002F\u002F调用有const   10是个常量\n",[77,17019,17020],{"class":79,"line":5074},[77,17021,4875],{"emptyLinePlaceholder":2549},[77,17023,17024],{"class":79,"line":5079},[77,17025,4875],{"emptyLinePlaceholder":2549},[77,17027,17028,17031],{"class":79,"line":5085},[77,17029,17030],{"class":323},"    \u002F\u002Ffunc2(10);",[77,17032,17033],{"class":323}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[77,17035,17036],{"class":79,"line":5091},[77,17037,4875],{"emptyLinePlaceholder":2549},[77,17039,17040,17042,17044,17046],{"class":79,"line":5096},[77,17041,4778],{"class":83},[77,17043,2622],{"class":87},[77,17045,4783],{"class":271},[77,17047,5194],{"class":87},[77,17049,17050],{"class":79,"line":10422},[77,17051,4875],{"emptyLinePlaceholder":2549},[77,17053,17054,17056,17058],{"class":79,"line":10446},[77,17055,6565],{"class":2123},[77,17057,6568],{"class":94},[77,17059,104],{"class":87},[77,17061,17062],{"class":79,"line":10451},[77,17063,110],{"class":87},[2520,17065,17066],{},"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":72,"searchDepth":91,"depth":91,"links":17068},[17069,17070,17071],{"id":16001,"depth":91,"text":16002},{"id":16258,"depth":91,"text":16259},{"id":16380,"depth":91,"text":16381,"children":17072},[17073,17074],{"id":16387,"depth":107,"text":16388},{"id":16757,"depth":107,"text":16758},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15993,"description":72},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17081,"title":17082,"body":17083,"description":25834,"extension":2547,"meta":25835,"navigation":2549,"path":25836,"seo":25837,"stem":25838,"__hash__":25839},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17084,"toc":25815},[17085,17088,17094,17101,17106,17109,17112,17115,17119,17123,17126,17129,17137,17142,17145,17152,17157,17316,17319,17571,17574,17577,17580,17585,17588,17591,17602,17607,17843,17847,17857,17860,17868,18015,18019,18022,18025,18029,18473,18477,18485,18493,19405,19412,19417,20045,20048,20051,20054,20173,20176,20263,20266,20392,20395,20489,20492,20845,20849,20857,20861,20868,20871,20874,20885,20891,20896,20908,20916,20936,20944,20961,21147,21150,21154,21157,21160,21163,21166,21169,21172,21175,21635,21641,21645,21648,21659,22246,22249,22738,22742,22745,22748,22751,22754,22757,22765,23161,23165,23168,23171,23618,23621,23624,23629,23632,23637,23640,23644,23647,23649,23655,23658,23964,23974,24015,24019,24022,24024,24057,24060,24367,24369,24384,24387,24410,24419,24425,24428,24432,24435,24438,24443,24454,24459,24467,24472,24602,24605,24608,24783,24788,25000,25004,25007,25121,25126,25365,25369,25373,25376,25379,25383,25488,25491,25494,25497,25501,25612,25615,25618,25623,25675,25678,25681,25686,25732,25735,25740,25808,25810,25813],[10,17086,17082],{"id":17087},"_8类和对象",[24,17089,17090,17091],{},"C++面向对象的三大特性为",[27,17092,17093],{},"封装、继承、多态",[24,17095,17096,17097,17100],{},"C++认为",[27,17098,17099],{},"万事万物都皆为对象","，对象上有其属性和行为",[24,17102,17103],{},[27,17104,17105],{},"例如：",[24,17107,17108],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[24,17110,17111],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[24,17113,17114],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17116,17118],{"id":17117},"_81封装","8.1封装",[19,17120,17122],{"id":17121},"_811封装的意义","8.1.1封装的意义",[24,17124,17125],{},"封装是C++面向对象三大特性之一",[24,17127,17128],{},"封装的意义：",[51,17130,17131,17134],{},[54,17132,17133],{},"将属性和行为作为一个整体，表现生活中的事物",[54,17135,17136],{},"将属性和行为加以权限控制",[24,17138,17139],{},[27,17140,17141],{},"封装意义一：",[24,17143,17144],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[24,17146,17147,16267,17149],{},[27,17148,7656],{},[74,17150,17151],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[139,17153,17154],{},[54,17155,17156],{},"**示例1：**设计一个圆类，求圆的周长",[67,17158,17160],{"className":2610,"code":17159,"language":2612,"meta":72,"style":72},"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",[74,17161,17162,17170,17174,17179,17184,17189,17194,17201,17206,17216,17220,17238,17242,17246,17254,17258,17263,17268,17273,17278,17289,17312],{"__ignoreMap":72},[77,17163,17164,17167],{"class":79,"line":80},[77,17165,17166],{"class":2123},"class",[77,17168,17169],{"class":83}," Circle\n",[77,17171,17172],{"class":79,"line":91},[77,17173,4023],{"class":87},[77,17175,17176],{"class":79,"line":107},[77,17177,17178],{"class":323},"    \u002F\u002F访问权限\n",[77,17180,17181],{"class":79,"line":191},[77,17182,17183],{"class":323},"    \u002F\u002F公共权限\n",[77,17185,17186],{"class":79,"line":1543},[77,17187,17188],{"class":2123},"public:\n",[77,17190,17191],{"class":79,"line":1549},[77,17192,17193],{"class":323},"    \u002F\u002F属性\n",[77,17195,17196,17198],{"class":79,"line":1566},[77,17197,4460],{"class":2123},[77,17199,17200],{"class":87}," m_r;\n",[77,17202,17203],{"class":79,"line":1572},[77,17204,17205],{"class":323},"    \u002F\u002F行为\n",[77,17207,17208,17211,17214],{"class":79,"line":1589},[77,17209,17210],{"class":2123},"    double",[77,17212,17213],{"class":83}," calculateZC",[77,17215,4451],{"class":87},[77,17217,17218],{"class":79,"line":1595},[77,17219,4505],{"class":87},[77,17221,17222,17225,17228,17230,17233,17235],{"class":79,"line":4088},[77,17223,17224],{"class":2123},"        return",[77,17226,17227],{"class":94}," 2",[77,17229,3068],{"class":2123},[77,17231,17232],{"class":87},"PI",[77,17234,3068],{"class":2123},[77,17236,17237],{"class":87},"m_r;\n",[77,17239,17240],{"class":79,"line":4093},[77,17241,4662],{"class":87},[77,17243,17244],{"class":79,"line":4099},[77,17245,6470],{"class":87},[77,17247,17248,17250,17252],{"class":79,"line":4104},[77,17249,2625],{"class":2123},[77,17251,4448],{"class":83},[77,17253,4451],{"class":87},[77,17255,17256],{"class":79,"line":4118},[77,17257,4023],{"class":87},[77,17259,17260],{"class":79,"line":4123},[77,17261,17262],{"class":323},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[77,17264,17265],{"class":79,"line":4129},[77,17266,17267],{"class":323},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[77,17269,17270],{"class":79,"line":4150},[77,17271,17272],{"class":87},"    Circle c1;\n",[77,17274,17275],{"class":79,"line":4155},[77,17276,17277],{"class":323},"    \u002F\u002F给圆对象 的属性进行赋值\n",[77,17279,17280,17283,17285,17287],{"class":79,"line":4169},[77,17281,17282],{"class":87},"    c1.m_r",[77,17284,268],{"class":2123},[77,17286,3059],{"class":94},[77,17288,104],{"class":87},[77,17290,17291,17293,17295,17298,17300,17303,17306,17308,17310],{"class":79,"line":4174},[77,17292,4028],{"class":87},[77,17294,3655],{"class":2123},[77,17296,17297],{"class":271},"\"圆的周长\"",[77,17299,3655],{"class":2123},[77,17301,17302],{"class":87},"c1.",[77,17304,17305],{"class":83},"calculateZC",[77,17307,4902],{"class":87},[77,17309,3655],{"class":2123},[77,17311,3677],{"class":87},[77,17313,17314],{"class":79,"line":4203},[77,17315,110],{"class":87},[24,17317,17318],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[67,17320,17322],{"className":2610,"code":17321,"language":2612,"meta":72,"style":72},"#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",[74,17323,17324,17330,17340,17346,17352,17356,17360,17365,17372,17377,17394,17398,17408,17412,17417,17433,17437,17447,17451,17456,17464,17468,17500,17504,17508,17516,17520,17525,17530,17544,17558,17567],{"__ignoreMap":72},[77,17325,17326,17328],{"class":79,"line":80},[77,17327,4425],{"class":2123},[77,17329,4428],{"class":271},[77,17331,17332,17334,17336,17338],{"class":79,"line":91},[77,17333,4433],{"class":2123},[77,17335,4436],{"class":2123},[77,17337,4439],{"class":83},[77,17339,104],{"class":87},[77,17341,17342,17344],{"class":79,"line":107},[77,17343,4425],{"class":2123},[77,17345,10223],{"class":271},[77,17347,17348,17350],{"class":79,"line":191},[77,17349,17166],{"class":2123},[77,17351,10236],{"class":83},[77,17353,17354],{"class":79,"line":1543},[77,17355,4023],{"class":87},[77,17357,17358],{"class":79,"line":1549},[77,17359,17188],{"class":2123},[77,17361,17362],{"class":79,"line":1566},[77,17363,17364],{"class":87},"    string m_name;\n",[77,17366,17367,17369],{"class":79,"line":1572},[77,17368,4460],{"class":2123},[77,17370,17371],{"class":87}," m_id;\n",[77,17373,17374],{"class":79,"line":1589},[77,17375,17376],{"class":323},"    \u002F\u002F赋值姓名\n",[77,17378,17379,17382,17385,17387,17390,17392],{"class":79,"line":1595},[77,17380,17381],{"class":2123},"    void",[77,17383,17384],{"class":83}," setName",[77,17386,2622],{"class":87},[77,17388,17389],{"class":83},"string",[77,17391,2495],{"class":7691},[77,17393,2628],{"class":87},[77,17395,17396],{"class":79,"line":4088},[77,17397,4505],{"class":87},[77,17399,17400,17403,17405],{"class":79,"line":4093},[77,17401,17402],{"class":87},"        m_name",[77,17404,268],{"class":2123},[77,17406,17407],{"class":87},"name;\n",[77,17409,17410],{"class":79,"line":4099},[77,17411,4662],{"class":87},[77,17413,17414],{"class":79,"line":4104},[77,17415,17416],{"class":323},"    \u002F\u002F赋值学号\n",[77,17418,17419,17421,17424,17426,17428,17431],{"class":79,"line":4118},[77,17420,17381],{"class":2123},[77,17422,17423],{"class":83}," setId",[77,17425,2622],{"class":87},[77,17427,2625],{"class":2123},[77,17429,17430],{"class":7691}," id",[77,17432,2628],{"class":87},[77,17434,17435],{"class":79,"line":4123},[77,17436,4505],{"class":87},[77,17438,17439,17442,17444],{"class":79,"line":4129},[77,17440,17441],{"class":87},"        m_id",[77,17443,268],{"class":2123},[77,17445,17446],{"class":87},"id;\n",[77,17448,17449],{"class":79,"line":4150},[77,17450,4662],{"class":87},[77,17452,17453],{"class":79,"line":4155},[77,17454,17455],{"class":323},"    \u002F\u002F打印学生信息\n",[77,17457,17458,17460,17462],{"class":79,"line":4169},[77,17459,17381],{"class":2123},[77,17461,12088],{"class":83},[77,17463,4451],{"class":87},[77,17465,17466],{"class":79,"line":4174},[77,17467,4505],{"class":87},[77,17469,17470,17472,17474,17477,17479,17482,17484,17486,17488,17491,17493,17496,17498],{"class":79,"line":4203},[77,17471,5926],{"class":87},[77,17473,3655],{"class":2123},[77,17475,17476],{"class":271},"\"姓名：\"",[77,17478,3655],{"class":2123},[77,17480,17481],{"class":87},"m_name",[77,17483,3655],{"class":2123},[77,17485,6834],{"class":271},[77,17487,3655],{"class":2123},[77,17489,17490],{"class":271},"\"学号：\"",[77,17492,3655],{"class":2123},[77,17494,17495],{"class":87},"m_id",[77,17497,3655],{"class":2123},[77,17499,3677],{"class":87},[77,17501,17502],{"class":79,"line":4208},[77,17503,4662],{"class":87},[77,17505,17506],{"class":79,"line":4225},[77,17507,6470],{"class":87},[77,17509,17510,17512,17514],{"class":79,"line":4230},[77,17511,2625],{"class":2123},[77,17513,4448],{"class":83},[77,17515,4451],{"class":87},[77,17517,17518],{"class":79,"line":4235},[77,17519,4023],{"class":87},[77,17521,17522],{"class":79,"line":4240},[77,17523,17524],{"class":323},"    \u002F\u002F实例化\n",[77,17526,17527],{"class":79,"line":4254},[77,17528,17529],{"class":87},"    Student s1;\n",[77,17531,17532,17535,17538,17540,17542],{"class":79,"line":4259},[77,17533,17534],{"class":87},"    s1.",[77,17536,17537],{"class":83},"setName",[77,17539,2622],{"class":87},[77,17541,10390],{"class":271},[77,17543,5194],{"class":87},[77,17545,17546,17548,17551,17553,17556],{"class":79,"line":5052},[77,17547,17534],{"class":87},[77,17549,17550],{"class":83},"setId",[77,17552,2622],{"class":87},[77,17554,17555],{"class":94},"123456",[77,17557,5194],{"class":87},[77,17559,17560,17562,17565],{"class":79,"line":5066},[77,17561,17534],{"class":87},[77,17563,17564],{"class":83},"printInfo",[77,17566,8111],{"class":87},[77,17568,17569],{"class":79,"line":5074},[77,17570,110],{"class":87},[24,17572,17573],{},"类中的属性和行为统称为成员",[24,17575,17576],{},"属性：成员属性(成员变量)",[24,17578,17579],{},"方法：成员函数(成员方法)",[24,17581,17582],{},[27,17583,17584],{},"封装意义二：",[24,17586,17587],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[24,17589,17590],{},"访问权限有三种：",[139,17592,17593,17596,17599],{},[54,17594,17595],{},"public        公共权限",[54,17597,17598],{},"protected 保护权限",[54,17600,17601],{},"private      私有权限",[24,17603,17604],{},[27,17605,17606],{},"示例：",[67,17608,17610],{"className":12414,"code":17609,"language":12416,"meta":72,"style":72},"\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",[74,17611,17612,17617,17622,17627,17632,17636,17643,17647,17652,17656,17661,17665,17670,17675,17680,17684,17689,17694,17701,17705,17709,17717,17721,17732,17744,17756,17760,17764,17768,17776,17780,17785,17797,17805,17813,17817,17827,17831,17839],{"__ignoreMap":72},[77,17613,17614],{"class":79,"line":80},[77,17615,17616],{"class":323},"\u002F\u002F三种权限\n",[77,17618,17619],{"class":79,"line":91},[77,17620,17621],{"class":323},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[77,17623,17624],{"class":79,"line":107},[77,17625,17626],{"class":323},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[77,17628,17629],{"class":79,"line":191},[77,17630,17631],{"class":323},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[77,17633,17634],{"class":79,"line":1543},[77,17635,4875],{"emptyLinePlaceholder":2549},[77,17637,17638,17640],{"class":79,"line":1549},[77,17639,17166],{"class":2123},[77,17641,17642],{"class":83}," Person\n",[77,17644,17645],{"class":79,"line":1566},[77,17646,4023],{"class":87},[77,17648,17649],{"class":79,"line":1572},[77,17650,17651],{"class":323},"    \u002F\u002F姓名  公共权限\n",[77,17653,17654],{"class":79,"line":1589},[77,17655,17188],{"class":2123},[77,17657,17658],{"class":79,"line":1595},[77,17659,17660],{"class":87},"    string m_Name;\n",[77,17662,17663],{"class":79,"line":4088},[77,17664,4875],{"emptyLinePlaceholder":2549},[77,17666,17667],{"class":79,"line":4093},[77,17668,17669],{"class":323},"    \u002F\u002F汽车  保护权限\n",[77,17671,17672],{"class":79,"line":4099},[77,17673,17674],{"class":2123},"protected:\n",[77,17676,17677],{"class":79,"line":4104},[77,17678,17679],{"class":87},"    string m_Car;\n",[77,17681,17682],{"class":79,"line":4118},[77,17683,4875],{"emptyLinePlaceholder":2549},[77,17685,17686],{"class":79,"line":4123},[77,17687,17688],{"class":323},"    \u002F\u002F银行卡密码  私有权限\n",[77,17690,17691],{"class":79,"line":4129},[77,17692,17693],{"class":2123},"private:\n",[77,17695,17696,17698],{"class":79,"line":4150},[77,17697,4460],{"class":2123},[77,17699,17700],{"class":87}," m_Password;\n",[77,17702,17703],{"class":79,"line":4155},[77,17704,4875],{"emptyLinePlaceholder":2549},[77,17706,17707],{"class":79,"line":4169},[77,17708,17188],{"class":2123},[77,17710,17711,17713,17715],{"class":79,"line":4174},[77,17712,17381],{"class":2123},[77,17714,13858],{"class":83},[77,17716,4451],{"class":87},[77,17718,17719],{"class":79,"line":4203},[77,17720,4505],{"class":87},[77,17722,17723,17726,17728,17730],{"class":79,"line":4208},[77,17724,17725],{"class":87},"        m_Name ",[77,17727,268],{"class":2123},[77,17729,11412],{"class":271},[77,17731,104],{"class":87},[77,17733,17734,17737,17739,17742],{"class":79,"line":4225},[77,17735,17736],{"class":87},"        m_Car ",[77,17738,268],{"class":2123},[77,17740,17741],{"class":271}," \"拖拉机\"",[77,17743,104],{"class":87},[77,17745,17746,17749,17751,17754],{"class":79,"line":4230},[77,17747,17748],{"class":87},"        m_Password ",[77,17750,268],{"class":2123},[77,17752,17753],{"class":94}," 123456",[77,17755,104],{"class":87},[77,17757,17758],{"class":79,"line":4235},[77,17759,4662],{"class":87},[77,17761,17762],{"class":79,"line":4240},[77,17763,6470],{"class":87},[77,17765,17766],{"class":79,"line":4254},[77,17767,4875],{"emptyLinePlaceholder":2549},[77,17769,17770,17772,17774],{"class":79,"line":4259},[77,17771,2625],{"class":2123},[77,17773,4448],{"class":83},[77,17775,13326],{"class":87},[77,17777,17778],{"class":79,"line":5052},[77,17779,4875],{"emptyLinePlaceholder":2549},[77,17781,17782],{"class":79,"line":5066},[77,17783,17784],{"class":87},"    Person p;\n",[77,17786,17787,17790,17792,17795],{"class":79,"line":5074},[77,17788,17789],{"class":87},"    p.m_Name ",[77,17791,268],{"class":2123},[77,17793,17794],{"class":271}," \"李四\"",[77,17796,104],{"class":87},[77,17798,17799,17802],{"class":79,"line":5079},[77,17800,17801],{"class":323},"    \u002F\u002Fp.m_Car = \"奔驰\";",[77,17803,17804],{"class":323},"  \u002F\u002F保护权限类外访问不到\n",[77,17806,17807,17810],{"class":79,"line":5085},[77,17808,17809],{"class":323},"    \u002F\u002Fp.m_Password = 123;",[77,17811,17812],{"class":323}," \u002F\u002F私有权限类外访问不到\n",[77,17814,17815],{"class":79,"line":5091},[77,17816,4875],{"emptyLinePlaceholder":2549},[77,17818,17819,17821,17823,17825],{"class":79,"line":5096},[77,17820,4778],{"class":83},[77,17822,2622],{"class":87},[77,17824,4783],{"class":271},[77,17826,5194],{"class":87},[77,17828,17829],{"class":79,"line":10422},[77,17830,4875],{"emptyLinePlaceholder":2549},[77,17832,17833,17835,17837],{"class":79,"line":10446},[77,17834,6565],{"class":2123},[77,17836,6568],{"class":94},[77,17838,104],{"class":87},[77,17840,17841],{"class":79,"line":10451},[77,17842,110],{"class":87},[19,17844,17846],{"id":17845},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[24,17848,17849,17850,17853,17854],{},"在C++中 struct和class唯一的",[27,17851,17852],{},"区别","就在于 ",[27,17855,17856],{},"默认的访问权限不同",[24,17858,17859],{},"区别：",[51,17861,17862,17865],{},[54,17863,17864],{},"struct 默认权限为公共",[54,17866,17867],{},"class   默认权限为私有",[67,17869,17871],{"className":12414,"code":17870,"language":12416,"meta":72,"style":72},"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",[74,17872,17873,17880,17884,17894,17898,17902,17909,17913,17923,17927,17931,17939,17943,17948,17962,17966,17971,17985,17989,17999,18003,18011],{"__ignoreMap":72},[77,17874,17875,17877],{"class":79,"line":80},[77,17876,17166],{"class":2123},[77,17878,17879],{"class":83}," C1\n",[77,17881,17882],{"class":79,"line":91},[77,17883,4023],{"class":87},[77,17885,17886,17888,17891],{"class":79,"line":107},[77,17887,4460],{"class":2123},[77,17889,17890],{"class":87},"  m_A;",[77,17892,17893],{"class":323}," \u002F\u002F默认是私有权限\n",[77,17895,17896],{"class":79,"line":191},[77,17897,6470],{"class":87},[77,17899,17900],{"class":79,"line":1543},[77,17901,4875],{"emptyLinePlaceholder":2549},[77,17903,17904,17906],{"class":79,"line":1549},[77,17905,10233],{"class":2123},[77,17907,17908],{"class":83}," C2\n",[77,17910,17911],{"class":79,"line":1566},[77,17912,4023],{"class":87},[77,17914,17915,17917,17920],{"class":79,"line":1572},[77,17916,4460],{"class":2123},[77,17918,17919],{"class":87}," m_A;",[77,17921,17922],{"class":323},"  \u002F\u002F默认是公共权限\n",[77,17924,17925],{"class":79,"line":1589},[77,17926,6470],{"class":87},[77,17928,17929],{"class":79,"line":1595},[77,17930,4875],{"emptyLinePlaceholder":2549},[77,17932,17933,17935,17937],{"class":79,"line":4088},[77,17934,2625],{"class":2123},[77,17936,4448],{"class":83},[77,17938,13326],{"class":87},[77,17940,17941],{"class":79,"line":4093},[77,17942,4875],{"emptyLinePlaceholder":2549},[77,17944,17945],{"class":79,"line":4099},[77,17946,17947],{"class":87},"    C1 c1;\n",[77,17949,17950,17953,17955,17957,17959],{"class":79,"line":4104},[77,17951,17952],{"class":87},"    c1.m_A ",[77,17954,268],{"class":2123},[77,17956,4513],{"class":94},[77,17958,2675],{"class":87},[77,17960,17961],{"class":323}," \u002F\u002F错误，访问权限是私有\n",[77,17963,17964],{"class":79,"line":4118},[77,17965,4875],{"emptyLinePlaceholder":2549},[77,17967,17968],{"class":79,"line":4123},[77,17969,17970],{"class":87},"    C2 c2;\n",[77,17972,17973,17976,17978,17980,17982],{"class":79,"line":4129},[77,17974,17975],{"class":87},"    c2.m_A ",[77,17977,268],{"class":2123},[77,17979,4513],{"class":94},[77,17981,2675],{"class":87},[77,17983,17984],{"class":323}," \u002F\u002F正确，访问权限是公共\n",[77,17986,17987],{"class":79,"line":4150},[77,17988,4875],{"emptyLinePlaceholder":2549},[77,17990,17991,17993,17995,17997],{"class":79,"line":4155},[77,17992,4778],{"class":83},[77,17994,2622],{"class":87},[77,17996,4783],{"class":271},[77,17998,5194],{"class":87},[77,18000,18001],{"class":79,"line":4169},[77,18002,4875],{"emptyLinePlaceholder":2549},[77,18004,18005,18007,18009],{"class":79,"line":4174},[77,18006,6565],{"class":2123},[77,18008,6568],{"class":94},[77,18010,104],{"class":87},[77,18012,18013],{"class":79,"line":4203},[77,18014,110],{"class":87},[19,18016,18018],{"id":18017},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[24,18020,18021],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[24,18023,18024],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[24,18026,18027],{},[27,18028,17606],{},[67,18030,18032],{"className":12414,"code":18031,"language":12416,"meta":72,"style":72},"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",[74,18033,18034,18043,18047,18051,18056,18070,18079,18083,18093,18097,18104,18108,18112,18116,18121,18130,18137,18141,18146,18162,18185,18198,18205,18209,18218,18222,18226,18231,18247,18257,18261,18265,18269,18277,18281,18291,18295,18303,18307,18311,18319,18323,18327,18332,18345,18368,18372,18377,18390,18412,18416,18421,18435,18443,18447,18457,18461,18469],{"__ignoreMap":72},[77,18035,18036,18038,18041],{"class":79,"line":80},[77,18037,17166],{"class":2123},[77,18039,18040],{"class":83}," Person",[77,18042,88],{"class":87},[77,18044,18045],{"class":79,"line":91},[77,18046,17188],{"class":2123},[77,18048,18049],{"class":79,"line":107},[77,18050,4875],{"emptyLinePlaceholder":2549},[77,18052,18053],{"class":79,"line":191},[77,18054,18055],{"class":323},"    \u002F\u002F姓名设置可读可写\n",[77,18057,18058,18060,18062,18064,18066,18068],{"class":79,"line":1543},[77,18059,17381],{"class":2123},[77,18061,17384],{"class":83},[77,18063,2622],{"class":87},[77,18065,17389],{"class":83},[77,18067,2495],{"class":7691},[77,18069,14914],{"class":87},[77,18071,18072,18074,18076],{"class":79,"line":1549},[77,18073,17725],{"class":87},[77,18075,268],{"class":2123},[77,18077,18078],{"class":87}," name;\n",[77,18080,18081],{"class":79,"line":1566},[77,18082,4662],{"class":87},[77,18084,18085,18088,18091],{"class":79,"line":1572},[77,18086,18087],{"class":83},"    string",[77,18089,18090],{"class":83}," getName",[77,18092,4451],{"class":87},[77,18094,18095],{"class":79,"line":1589},[77,18096,4505],{"class":87},[77,18098,18099,18101],{"class":79,"line":1595},[77,18100,17224],{"class":2123},[77,18102,18103],{"class":87}," m_Name;\n",[77,18105,18106],{"class":79,"line":4088},[77,18107,4662],{"class":87},[77,18109,18110],{"class":79,"line":4093},[77,18111,4875],{"emptyLinePlaceholder":2549},[77,18113,18114],{"class":79,"line":4099},[77,18115,4875],{"emptyLinePlaceholder":2549},[77,18117,18118],{"class":79,"line":4104},[77,18119,18120],{"class":323},"    \u002F\u002F获取年龄 \n",[77,18122,18123,18125,18128],{"class":79,"line":4118},[77,18124,4460],{"class":2123},[77,18126,18127],{"class":83}," getAge",[77,18129,13326],{"class":87},[77,18131,18132,18134],{"class":79,"line":4123},[77,18133,17224],{"class":2123},[77,18135,18136],{"class":87}," m_Age;\n",[77,18138,18139],{"class":79,"line":4129},[77,18140,4662],{"class":87},[77,18142,18143],{"class":79,"line":4150},[77,18144,18145],{"class":323},"    \u002F\u002F设置年龄\n",[77,18147,18148,18150,18153,18155,18157,18160],{"class":79,"line":4155},[77,18149,17381],{"class":2123},[77,18151,18152],{"class":83}," setAge",[77,18154,2622],{"class":87},[77,18156,2625],{"class":2123},[77,18158,18159],{"class":7691}," age",[77,18161,14914],{"class":87},[77,18163,18164,18166,18169,18171,18173,18175,18178,18180,18183],{"class":79,"line":4169},[77,18165,4972],{"class":2123},[77,18167,18168],{"class":87}," (age ",[77,18170,260],{"class":2123},[77,18172,6568],{"class":94},[77,18174,5730],{"class":2123},[77,18176,18177],{"class":87}," age ",[77,18179,3572],{"class":2123},[77,18181,18182],{"class":94}," 150",[77,18184,14914],{"class":87},[77,18186,18187,18189,18191,18194,18196],{"class":79,"line":4174},[77,18188,12192],{"class":87},[77,18190,3655],{"class":2123},[77,18192,18193],{"class":271}," \"你个老妖精!\"",[77,18195,3922],{"class":2123},[77,18197,11314],{"class":87},[77,18199,18200,18203],{"class":79,"line":4203},[77,18201,18202],{"class":2123},"            return",[77,18204,104],{"class":87},[77,18206,18207],{"class":79,"line":4208},[77,18208,5004],{"class":87},[77,18210,18211,18214,18216],{"class":79,"line":4225},[77,18212,18213],{"class":87},"        m_Age ",[77,18215,268],{"class":2123},[77,18217,10271],{"class":87},[77,18219,18220],{"class":79,"line":4230},[77,18221,4662],{"class":87},[77,18223,18224],{"class":79,"line":4235},[77,18225,4875],{"emptyLinePlaceholder":2549},[77,18227,18228],{"class":79,"line":4240},[77,18229,18230],{"class":323},"    \u002F\u002F情人设置为只写\n",[77,18232,18233,18235,18238,18240,18242,18245],{"class":79,"line":4254},[77,18234,17381],{"class":2123},[77,18236,18237],{"class":83}," setLover",[77,18239,2622],{"class":87},[77,18241,17389],{"class":83},[77,18243,18244],{"class":7691}," lover",[77,18246,14914],{"class":87},[77,18248,18249,18252,18254],{"class":79,"line":4259},[77,18250,18251],{"class":87},"        m_Lover ",[77,18253,268],{"class":2123},[77,18255,18256],{"class":87}," lover;\n",[77,18258,18259],{"class":79,"line":5052},[77,18260,4662],{"class":87},[77,18262,18263],{"class":79,"line":5066},[77,18264,4875],{"emptyLinePlaceholder":2549},[77,18266,18267],{"class":79,"line":5074},[77,18268,17693],{"class":2123},[77,18270,18271,18274],{"class":79,"line":5079},[77,18272,18273],{"class":87},"    string m_Name;",[77,18275,18276],{"class":323}," \u002F\u002F可读可写  姓名\n",[77,18278,18279],{"class":79,"line":5085},[77,18280,15682],{"class":87},[77,18282,18283,18285,18288],{"class":79,"line":5091},[77,18284,4460],{"class":2123},[77,18286,18287],{"class":87}," m_Age;",[77,18289,18290],{"class":323}," \u002F\u002F只读  年龄\n",[77,18292,18293],{"class":79,"line":5096},[77,18294,4875],{"emptyLinePlaceholder":2549},[77,18296,18297,18300],{"class":79,"line":10422},[77,18298,18299],{"class":87},"    string m_Lover;",[77,18301,18302],{"class":323}," \u002F\u002F只写  情人\n",[77,18304,18305],{"class":79,"line":10446},[77,18306,6470],{"class":87},[77,18308,18309],{"class":79,"line":10451},[77,18310,4875],{"emptyLinePlaceholder":2549},[77,18312,18313,18315,18317],{"class":79,"line":10457},[77,18314,2625],{"class":2123},[77,18316,4448],{"class":83},[77,18318,13326],{"class":87},[77,18320,18321],{"class":79,"line":10484},[77,18322,4875],{"emptyLinePlaceholder":2549},[77,18324,18325],{"class":79,"line":10489},[77,18326,17784],{"class":87},[77,18328,18329],{"class":79,"line":10495},[77,18330,18331],{"class":323},"    \u002F\u002F姓名设置\n",[77,18333,18334,18337,18339,18341,18343],{"class":79,"line":10507},[77,18335,18336],{"class":87},"    p.",[77,18338,17537],{"class":83},[77,18340,2622],{"class":87},[77,18342,10390],{"class":271},[77,18344,5194],{"class":87},[77,18346,18347,18349,18351,18354,18356,18359,18362,18364,18366],{"class":79,"line":10519},[77,18348,9004],{"class":87},[77,18350,3655],{"class":2123},[77,18352,18353],{"class":271}," \"姓名： \"",[77,18355,3922],{"class":2123},[77,18357,18358],{"class":87}," p.",[77,18360,18361],{"class":83},"getName",[77,18363,15522],{"class":87},[77,18365,3655],{"class":2123},[77,18367,11314],{"class":87},[77,18369,18370],{"class":79,"line":10531},[77,18371,4875],{"emptyLinePlaceholder":2549},[77,18373,18374],{"class":79,"line":12189},[77,18375,18376],{"class":323},"    \u002F\u002F年龄设置\n",[77,18378,18379,18381,18384,18386,18388],{"class":79,"line":12214},[77,18380,18336],{"class":87},[77,18382,18383],{"class":83},"setAge",[77,18385,2622],{"class":87},[77,18387,3269],{"class":94},[77,18389,5194],{"class":87},[77,18391,18392,18394,18396,18399,18401,18403,18406,18408,18410],{"class":79,"line":12237},[77,18393,9004],{"class":87},[77,18395,3655],{"class":2123},[77,18397,18398],{"class":271}," \"年龄： \"",[77,18400,3922],{"class":2123},[77,18402,18358],{"class":87},[77,18404,18405],{"class":83},"getAge",[77,18407,15522],{"class":87},[77,18409,3655],{"class":2123},[77,18411,11314],{"class":87},[77,18413,18414],{"class":79,"line":12261},[77,18415,4875],{"emptyLinePlaceholder":2549},[77,18417,18418],{"class":79,"line":12266},[77,18419,18420],{"class":323},"    \u002F\u002F情人设置\n",[77,18422,18423,18425,18428,18430,18433],{"class":79,"line":12271},[77,18424,18336],{"class":87},[77,18426,18427],{"class":83},"setLover",[77,18429,2622],{"class":87},[77,18431,18432],{"class":271},"\"苍井\"",[77,18434,5194],{"class":87},[77,18436,18437,18440],{"class":79,"line":12276},[77,18438,18439],{"class":323},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[77,18441,18442],{"class":323},"  \u002F\u002F只写属性，不可以读取\n",[77,18444,18445],{"class":79,"line":12285},[77,18446,4875],{"emptyLinePlaceholder":2549},[77,18448,18449,18451,18453,18455],{"class":79,"line":12290},[77,18450,4778],{"class":83},[77,18452,2622],{"class":87},[77,18454,4783],{"class":271},[77,18456,5194],{"class":87},[77,18458,18459],{"class":79,"line":12296},[77,18460,4875],{"emptyLinePlaceholder":2549},[77,18462,18463,18465,18467],{"class":79,"line":12317},[77,18464,6565],{"class":2123},[77,18466,6568],{"class":94},[77,18468,104],{"class":87},[77,18470,18471],{"class":79,"line":12323},[77,18472,110],{"class":87},[19,18474,18476],{"id":18475},"_814封装案例","8.1.4封装案例",[139,18478,18479],{},[54,18480,18481,18484],{},[27,18482,18483],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[51,18486,18487,18490],{},[54,18488,18489],{},"求出立方体的面积和体积",[54,18491,18492],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[67,18494,18496],{"className":2610,"code":18495,"language":2612,"meta":72,"style":72},"#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",[74,18497,18498,18504,18514,18521,18525,18529,18534,18564,18568,18578,18588,18598,18602,18611,18615,18651,18655,18664,18668,18684,18688,18693,18702,18706,18713,18717,18726,18730,18737,18741,18750,18754,18761,18765,18770,18787,18791,18837,18841,18850,18854,18858,18862,18871,18875,18879,18884,18888,18894,18900,18906,18910,18914,18919,18941,18945,18999,19003,19011,19015,19020,19025,19038,19045,19061,19072,19078,19101,19107,19130,19144,19164,19170,19181,19204,19226,19231,19237,19251,19264,19269,19283,19288,19294,19299,19313,19318,19323,19337,19349,19354,19367,19372,19377,19382,19395,19400],{"__ignoreMap":72},[77,18499,18500,18502],{"class":79,"line":80},[77,18501,4425],{"class":2123},[77,18503,4428],{"class":271},[77,18505,18506,18508,18510,18512],{"class":79,"line":91},[77,18507,4433],{"class":2123},[77,18509,4436],{"class":2123},[77,18511,4439],{"class":83},[77,18513,104],{"class":87},[77,18515,18516,18518],{"class":79,"line":107},[77,18517,17166],{"class":2123},[77,18519,18520],{"class":83}," Cube\n",[77,18522,18523],{"class":79,"line":191},[77,18524,4023],{"class":87},[77,18526,18527],{"class":79,"line":1543},[77,18528,17188],{"class":2123},[77,18530,18531],{"class":79,"line":1549},[77,18532,18533],{"class":323},"    \u002F\u002F输入长宽高\n",[77,18535,18536,18538,18541,18543,18545,18548,18550,18552,18555,18557,18559,18562],{"class":79,"line":1566},[77,18537,17381],{"class":2123},[77,18539,18540],{"class":83}," setLwh",[77,18542,2622],{"class":87},[77,18544,2625],{"class":2123},[77,18546,18547],{"class":7691}," l",[77,18549,2992],{"class":87},[77,18551,2625],{"class":2123},[77,18553,18554],{"class":7691}," w",[77,18556,2992],{"class":87},[77,18558,2625],{"class":2123},[77,18560,18561],{"class":7691}," h",[77,18563,2628],{"class":87},[77,18565,18566],{"class":79,"line":1572},[77,18567,4505],{"class":87},[77,18569,18570,18573,18575],{"class":79,"line":1589},[77,18571,18572],{"class":87},"        m_L",[77,18574,268],{"class":2123},[77,18576,18577],{"class":87},"l;\n",[77,18579,18580,18583,18585],{"class":79,"line":1595},[77,18581,18582],{"class":87},"        m_W",[77,18584,268],{"class":2123},[77,18586,18587],{"class":87},"w;\n",[77,18589,18590,18593,18595],{"class":79,"line":4088},[77,18591,18592],{"class":87},"        m_H",[77,18594,268],{"class":2123},[77,18596,18597],{"class":87},"h;\n",[77,18599,18600],{"class":79,"line":4093},[77,18601,4662],{"class":87},[77,18603,18604,18606,18609],{"class":79,"line":4099},[77,18605,4460],{"class":2123},[77,18607,18608],{"class":83}," mianji",[77,18610,4451],{"class":87},[77,18612,18613],{"class":79,"line":4104},[77,18614,4505],{"class":87},[77,18616,18617,18619,18621,18623,18626,18628,18631,18633,18636,18638,18641,18643,18646,18648],{"class":79,"line":4118},[77,18618,17224],{"class":2123},[77,18620,17227],{"class":94},[77,18622,3068],{"class":2123},[77,18624,18625],{"class":87},"(m_L",[77,18627,3068],{"class":2123},[77,18629,18630],{"class":87},"m_W ",[77,18632,3094],{"class":2123},[77,18634,18635],{"class":87}," m_L",[77,18637,3068],{"class":2123},[77,18639,18640],{"class":87},"m_H ",[77,18642,3094],{"class":2123},[77,18644,18645],{"class":87}," m_W",[77,18647,3068],{"class":2123},[77,18649,18650],{"class":87},"m_H);\n",[77,18652,18653],{"class":79,"line":4123},[77,18654,4662],{"class":87},[77,18656,18657,18659,18662],{"class":79,"line":4129},[77,18658,4460],{"class":2123},[77,18660,18661],{"class":83}," tiji",[77,18663,4451],{"class":87},[77,18665,18666],{"class":79,"line":4150},[77,18667,4505],{"class":87},[77,18669,18670,18672,18674,18676,18679,18681],{"class":79,"line":4155},[77,18671,17224],{"class":2123},[77,18673,18635],{"class":87},[77,18675,3068],{"class":2123},[77,18677,18678],{"class":87},"m_W",[77,18680,3068],{"class":2123},[77,18682,18683],{"class":87},"m_H;\n",[77,18685,18686],{"class":79,"line":4169},[77,18687,4662],{"class":87},[77,18689,18690],{"class":79,"line":4174},[77,18691,18692],{"class":323},"    \u002F\u002F获取长宽高\n",[77,18694,18695,18697,18700],{"class":79,"line":4203},[77,18696,4460],{"class":2123},[77,18698,18699],{"class":83}," getLength",[77,18701,4451],{"class":87},[77,18703,18704],{"class":79,"line":4208},[77,18705,4505],{"class":87},[77,18707,18708,18710],{"class":79,"line":4225},[77,18709,17224],{"class":2123},[77,18711,18712],{"class":87}," m_L;\n",[77,18714,18715],{"class":79,"line":4230},[77,18716,4662],{"class":87},[77,18718,18719,18721,18724],{"class":79,"line":4235},[77,18720,4460],{"class":2123},[77,18722,18723],{"class":83}," getWidth",[77,18725,4451],{"class":87},[77,18727,18728],{"class":79,"line":4240},[77,18729,4505],{"class":87},[77,18731,18732,18734],{"class":79,"line":4254},[77,18733,17224],{"class":2123},[77,18735,18736],{"class":87}," m_W;\n",[77,18738,18739],{"class":79,"line":4259},[77,18740,4662],{"class":87},[77,18742,18743,18745,18748],{"class":79,"line":5052},[77,18744,4460],{"class":2123},[77,18746,18747],{"class":83}," getHeight",[77,18749,4451],{"class":87},[77,18751,18752],{"class":79,"line":5066},[77,18753,4505],{"class":87},[77,18755,18756,18758],{"class":79,"line":5074},[77,18757,17224],{"class":2123},[77,18759,18760],{"class":87}," m_H;\n",[77,18762,18763],{"class":79,"line":5079},[77,18764,4662],{"class":87},[77,18766,18767],{"class":79,"line":5085},[77,18768,18769],{"class":323},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[77,18771,18772,18775,18778,18780,18783,18785],{"class":79,"line":5091},[77,18773,18774],{"class":2123},"    bool",[77,18776,18777],{"class":83}," isEqual",[77,18779,2622],{"class":87},[77,18781,18782],{"class":83},"Cube",[77,18784,5324],{"class":7691},[77,18786,2628],{"class":87},[77,18788,18789],{"class":79,"line":5096},[77,18790,4505],{"class":87},[77,18792,18793,18795,18798,18801,18803,18805,18808,18810,18813,18816,18818,18820,18823,18825,18827,18830,18832,18834],{"class":79,"line":10422},[77,18794,4972],{"class":2123},[77,18796,18797],{"class":87}," (c.",[77,18799,18800],{"class":83},"getLength",[77,18802,15522],{"class":87},[77,18804,5424],{"class":2123},[77,18806,18807],{"class":87}," m_L ",[77,18809,4191],{"class":2123},[77,18811,18812],{"class":87}," c.",[77,18814,18815],{"class":83},"getWidth",[77,18817,15522],{"class":87},[77,18819,5424],{"class":2123},[77,18821,18822],{"class":87}," m_W ",[77,18824,4191],{"class":2123},[77,18826,18812],{"class":87},[77,18828,18829],{"class":83},"getHeight",[77,18831,15522],{"class":87},[77,18833,5424],{"class":2123},[77,18835,18836],{"class":87}," m_H)\n",[77,18838,18839],{"class":79,"line":10446},[77,18840,4985],{"class":87},[77,18842,18843,18845,18848],{"class":79,"line":10451},[77,18844,18202],{"class":2123},[77,18846,18847],{"class":94}," true",[77,18849,104],{"class":87},[77,18851,18852],{"class":79,"line":10457},[77,18853,5004],{"class":87},[77,18855,18856],{"class":79,"line":10484},[77,18857,5045],{"class":2123},[77,18859,18860],{"class":79,"line":10489},[77,18861,4985],{"class":87},[77,18863,18864,18866,18869],{"class":79,"line":10495},[77,18865,18202],{"class":2123},[77,18867,18868],{"class":94}," false",[77,18870,104],{"class":87},[77,18872,18873],{"class":79,"line":10507},[77,18874,5004],{"class":87},[77,18876,18877],{"class":79,"line":10519},[77,18878,4662],{"class":87},[77,18880,18881],{"class":79,"line":10531},[77,18882,18883],{"class":323},"    \u002F\u002F私有属性\n",[77,18885,18886],{"class":79,"line":12189},[77,18887,17693],{"class":2123},[77,18889,18890,18892],{"class":79,"line":12214},[77,18891,4460],{"class":2123},[77,18893,18712],{"class":87},[77,18895,18896,18898],{"class":79,"line":12237},[77,18897,4460],{"class":2123},[77,18899,18736],{"class":87},[77,18901,18902,18904],{"class":79,"line":12261},[77,18903,4460],{"class":2123},[77,18905,18760],{"class":87},[77,18907,18908],{"class":79,"line":12266},[77,18909,4875],{"emptyLinePlaceholder":2549},[77,18911,18912],{"class":79,"line":12271},[77,18913,6470],{"class":87},[77,18915,18916],{"class":79,"line":12276},[77,18917,18918],{"class":323},"\u002F\u002F全局函数判断两个立方体是否相等\n",[77,18920,18921,18923,18925,18927,18929,18932,18934,18936,18939],{"class":79,"line":12285},[77,18922,3832],{"class":2123},[77,18924,18777],{"class":83},[77,18926,2622],{"class":87},[77,18928,18782],{"class":83},[77,18930,18931],{"class":7691}," c1",[77,18933,2992],{"class":87},[77,18935,18782],{"class":83},[77,18937,18938],{"class":7691}," c2",[77,18940,2628],{"class":87},[77,18942,18943],{"class":79,"line":12290},[77,18944,4023],{"class":87},[77,18946,18947,18949,18952,18954,18956,18958,18961,18963,18966,18968,18970,18972,18974,18976,18978,18980,18982,18984,18986,18988,18990,18992,18994,18996],{"class":79,"line":12296},[77,18948,6565],{"class":2123},[77,18950,18951],{"class":87}," (c1.",[77,18953,18800],{"class":83},[77,18955,15522],{"class":87},[77,18957,5424],{"class":2123},[77,18959,18960],{"class":87}," c2.",[77,18962,18800],{"class":83},[77,18964,18965],{"class":87},"()) ",[77,18967,4191],{"class":2123},[77,18969,18951],{"class":87},[77,18971,18815],{"class":83},[77,18973,15522],{"class":87},[77,18975,5424],{"class":2123},[77,18977,18960],{"class":87},[77,18979,18815],{"class":83},[77,18981,18965],{"class":87},[77,18983,4191],{"class":2123},[77,18985,18951],{"class":87},[77,18987,18829],{"class":83},[77,18989,15522],{"class":87},[77,18991,5424],{"class":2123},[77,18993,18960],{"class":87},[77,18995,18829],{"class":83},[77,18997,18998],{"class":87},"());\n",[77,19000,19001],{"class":79,"line":12317},[77,19002,110],{"class":87},[77,19004,19005,19007,19009],{"class":79,"line":12323},[77,19006,2625],{"class":2123},[77,19008,4448],{"class":83},[77,19010,4451],{"class":87},[77,19012,19013],{"class":79,"line":12337},[77,19014,4023],{"class":87},[77,19016,19017],{"class":79,"line":12343},[77,19018,19019],{"class":87},"    Cube c1;\n",[77,19021,19022],{"class":79,"line":12370},[77,19023,19024],{"class":323},"    \u002F\u002F输入立方体的长宽高\n",[77,19026,19027,19029,19031,19034,19036],{"class":79,"line":12379},[77,19028,4028],{"class":87},[77,19030,3655],{"class":2123},[77,19032,19033],{"class":271},"\"请输入第一个立方体的长、宽、高：\"",[77,19035,3655],{"class":2123},[77,19037,3677],{"class":87},[77,19039,19040,19042],{"class":79,"line":12385},[77,19041,4460],{"class":2123},[77,19043,19044],{"class":87}," l,w,h,l1,w1,h1;\n",[77,19046,19047,19049,19051,19053,19055,19057,19059],{"class":79,"line":12393},[77,19048,4487],{"class":87},[77,19050,3907],{"class":2123},[77,19052,3131],{"class":87},[77,19054,3907],{"class":2123},[77,19056,3408],{"class":87},[77,19058,3907],{"class":2123},[77,19060,18597],{"class":87},[77,19062,19063,19066,19069],{"class":79,"line":12398},[77,19064,19065],{"class":87},"    c1.",[77,19067,19068],{"class":83},"setLwh",[77,19070,19071],{"class":87},"(l,w,h);\n",[77,19073,19075],{"class":79,"line":19074},66,[77,19076,19077],{"class":323},"    \u002F\u002F面积\n",[77,19079,19081,19083,19085,19088,19090,19092,19095,19097,19099],{"class":79,"line":19080},67,[77,19082,4028],{"class":87},[77,19084,3655],{"class":2123},[77,19086,19087],{"class":271},"\"立方体的表面积为：\"",[77,19089,3655],{"class":2123},[77,19091,17302],{"class":87},[77,19093,19094],{"class":83},"mianji",[77,19096,4902],{"class":87},[77,19098,3655],{"class":2123},[77,19100,3677],{"class":87},[77,19102,19104],{"class":79,"line":19103},68,[77,19105,19106],{"class":323},"    \u002F\u002F体积\n",[77,19108,19110,19112,19114,19117,19119,19121,19124,19126,19128],{"class":79,"line":19109},69,[77,19111,4028],{"class":87},[77,19113,3655],{"class":2123},[77,19115,19116],{"class":271},"\"立方体的体积为：\"",[77,19118,3655],{"class":2123},[77,19120,17302],{"class":87},[77,19122,19123],{"class":83},"tiji",[77,19125,4902],{"class":87},[77,19127,3655],{"class":2123},[77,19129,3677],{"class":87},[77,19131,19133,19135,19137,19140,19142],{"class":79,"line":19132},70,[77,19134,4028],{"class":87},[77,19136,3655],{"class":2123},[77,19138,19139],{"class":271},"\"请输入第二个立方体的长、宽、高：\"",[77,19141,3655],{"class":2123},[77,19143,3677],{"class":87},[77,19145,19147,19149,19151,19154,19156,19159,19161],{"class":79,"line":19146},71,[77,19148,4487],{"class":87},[77,19150,3907],{"class":2123},[77,19152,19153],{"class":87},"l1",[77,19155,3907],{"class":2123},[77,19157,19158],{"class":87},"w1",[77,19160,3907],{"class":2123},[77,19162,19163],{"class":87},"h1;\n",[77,19165,19167],{"class":79,"line":19166},72,[77,19168,19169],{"class":87},"    Cube c2;\n",[77,19171,19173,19176,19178],{"class":79,"line":19172},73,[77,19174,19175],{"class":87},"    c2.",[77,19177,19068],{"class":83},[77,19179,19180],{"class":87},"(l1,w1,h1);\n",[77,19182,19184,19186,19188,19191,19193,19196,19198,19200,19202],{"class":79,"line":19183},74,[77,19185,4028],{"class":87},[77,19187,3655],{"class":2123},[77,19189,19190],{"class":271},"\"第二个立方体的表面积为：\"",[77,19192,3655],{"class":2123},[77,19194,19195],{"class":87},"c2.",[77,19197,19094],{"class":83},[77,19199,4902],{"class":87},[77,19201,3655],{"class":2123},[77,19203,3677],{"class":87},[77,19205,19207,19209,19211,19214,19216,19218,19220,19222,19224],{"class":79,"line":19206},75,[77,19208,4028],{"class":87},[77,19210,3655],{"class":2123},[77,19212,19213],{"class":271},"\"第二个立方体的体积为：\"",[77,19215,3655],{"class":2123},[77,19217,19195],{"class":87},[77,19219,19123],{"class":83},[77,19221,4902],{"class":87},[77,19223,3655],{"class":2123},[77,19225,3677],{"class":87},[77,19227,19229],{"class":79,"line":19228},76,[77,19230,4875],{"emptyLinePlaceholder":2549},[77,19232,19234],{"class":79,"line":19233},77,[77,19235,19236],{"class":323},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[77,19238,19240,19242,19244,19247,19249],{"class":79,"line":19239},78,[77,19241,4028],{"class":87},[77,19243,3655],{"class":2123},[77,19245,19246],{"class":271},"\"内部函数判断结果：\"",[77,19248,3655],{"class":2123},[77,19250,3677],{"class":87},[77,19252,19254,19256,19258,19261],{"class":79,"line":19253},79,[77,19255,5576],{"class":2123},[77,19257,18951],{"class":87},[77,19259,19260],{"class":83},"isEqual",[77,19262,19263],{"class":87},"(c2))\n",[77,19265,19267],{"class":79,"line":19266},80,[77,19268,4505],{"class":87},[77,19270,19272,19274,19276,19279,19281],{"class":79,"line":19271},81,[77,19273,5926],{"class":87},[77,19275,3655],{"class":2123},[77,19277,19278],{"class":271},"\"两个立方体相等\"",[77,19280,3655],{"class":2123},[77,19282,3677],{"class":87},[77,19284,19286],{"class":79,"line":19285},82,[77,19287,4662],{"class":87},[77,19289,19291],{"class":79,"line":19290},83,[77,19292,19293],{"class":2123},"    else\n",[77,19295,19297],{"class":79,"line":19296},84,[77,19298,4505],{"class":87},[77,19300,19302,19304,19306,19309,19311],{"class":79,"line":19301},85,[77,19303,5926],{"class":87},[77,19305,3655],{"class":2123},[77,19307,19308],{"class":271},"\"两个立方体不相等\"",[77,19310,3655],{"class":2123},[77,19312,3677],{"class":87},[77,19314,19316],{"class":79,"line":19315},86,[77,19317,4662],{"class":87},[77,19319,19321],{"class":79,"line":19320},87,[77,19322,4875],{"emptyLinePlaceholder":2549},[77,19324,19326,19328,19330,19333,19335],{"class":79,"line":19325},88,[77,19327,4028],{"class":87},[77,19329,3655],{"class":2123},[77,19331,19332],{"class":271},"\"全局函数判断结果：\"",[77,19334,3655],{"class":2123},[77,19336,3677],{"class":87},[77,19338,19340,19342,19344,19346],{"class":79,"line":19339},89,[77,19341,5576],{"class":2123},[77,19343,4134],{"class":87},[77,19345,19260],{"class":83},[77,19347,19348],{"class":87},"(c1, c2))\n",[77,19350,19352],{"class":79,"line":19351},90,[77,19353,4505],{"class":87},[77,19355,19357,19359,19361,19363,19365],{"class":79,"line":19356},91,[77,19358,5926],{"class":87},[77,19360,3655],{"class":2123},[77,19362,19278],{"class":271},[77,19364,3655],{"class":2123},[77,19366,3677],{"class":87},[77,19368,19370],{"class":79,"line":19369},92,[77,19371,4662],{"class":87},[77,19373,19375],{"class":79,"line":19374},93,[77,19376,19293],{"class":2123},[77,19378,19380],{"class":79,"line":19379},94,[77,19381,4505],{"class":87},[77,19383,19385,19387,19389,19391,19393],{"class":79,"line":19384},95,[77,19386,5926],{"class":87},[77,19388,3655],{"class":2123},[77,19390,19308],{"class":271},[77,19392,3655],{"class":2123},[77,19394,3677],{"class":87},[77,19396,19398],{"class":79,"line":19397},96,[77,19399,4662],{"class":87},[77,19401,19403],{"class":79,"line":19402},97,[77,19404,110],{"class":87},[139,19406,19407],{"start":91},[54,19408,19409],{},[27,19410,19411],{},"练习案例2：点和圆的关系",[51,19413,19414],{},[54,19415,19416],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[67,19418,19420],{"className":2610,"code":19419,"language":2612,"meta":72,"style":72},"#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",[74,19421,19422,19428,19438,19445,19452,19456,19460,19465,19499,19504,19520,19534,19538,19542,19549,19556,19560,19566,19570,19574,19578,19600,19623,19628,19642,19657,19661,19665,19671,19676,19681,19685,19711,19715,19745,19773,19801,19818,19822,19835,19839,19843,19847,19860,19864,19868,19876,19880,19884,19888,19893,19897,19908,19915,19924,19934,19945,19952,19965,19976,19986,19997,20004,20018,20023,20033,20041],{"__ignoreMap":72},[77,19423,19424,19426],{"class":79,"line":80},[77,19425,4425],{"class":2123},[77,19427,4428],{"class":271},[77,19429,19430,19432,19434,19436],{"class":79,"line":91},[77,19431,4433],{"class":2123},[77,19433,4436],{"class":2123},[77,19435,4439],{"class":83},[77,19437,104],{"class":87},[77,19439,19440,19442],{"class":79,"line":107},[77,19441,4425],{"class":2123},[77,19443,19444],{"class":271},"\u003Ccmath>\n",[77,19446,19447,19449],{"class":79,"line":191},[77,19448,17166],{"class":2123},[77,19450,19451],{"class":83}," Point\n",[77,19453,19454],{"class":79,"line":1543},[77,19455,4023],{"class":87},[77,19457,19458],{"class":79,"line":1549},[77,19459,17188],{"class":2123},[77,19461,19462],{"class":79,"line":1566},[77,19463,19464],{"class":323},"    \u002F\u002F赋值\n",[77,19466,19467,19469,19472,19474,19476,19479,19481,19483,19486,19489,19491,19494,19496],{"class":79,"line":1572},[77,19468,17381],{"class":2123},[77,19470,19471],{"class":83}," setPoint",[77,19473,2622],{"class":87},[77,19475,16509],{"class":2123},[77,19477,19478],{"class":7691}," x",[77,19480,680],{"class":87},[77,19482,16509],{"class":2123},[77,19484,19485],{"class":7691}," y",[77,19487,19488],{"class":87},") { m_x ",[77,19490,268],{"class":2123},[77,19492,19493],{"class":87}," x; m_y ",[77,19495,268],{"class":2123},[77,19497,19498],{"class":87}," y; }\n",[77,19500,19501],{"class":79,"line":1589},[77,19502,19503],{"class":323},"    \u002F\u002F获取坐标\n",[77,19505,19506,19508,19511,19514,19517],{"class":79,"line":1595},[77,19507,17210],{"class":2123},[77,19509,19510],{"class":83}," getX",[77,19512,19513],{"class":87},"() { ",[77,19515,19516],{"class":2123},"return",[77,19518,19519],{"class":87}," m_x; }\n",[77,19521,19522,19524,19527,19529,19531],{"class":79,"line":4088},[77,19523,17210],{"class":2123},[77,19525,19526],{"class":83}," getY",[77,19528,19513],{"class":87},[77,19530,19516],{"class":2123},[77,19532,19533],{"class":87}," m_y; }\n",[77,19535,19536],{"class":79,"line":4093},[77,19537,4875],{"emptyLinePlaceholder":2549},[77,19539,19540],{"class":79,"line":4099},[77,19541,17693],{"class":2123},[77,19543,19544,19546],{"class":79,"line":4104},[77,19545,17210],{"class":2123},[77,19547,19548],{"class":87}," m_x;\n",[77,19550,19551,19553],{"class":79,"line":4118},[77,19552,17210],{"class":2123},[77,19554,19555],{"class":87}," m_y;\n",[77,19557,19558],{"class":79,"line":4123},[77,19559,6470],{"class":87},[77,19561,19562,19564],{"class":79,"line":4129},[77,19563,17166],{"class":2123},[77,19565,17169],{"class":83},[77,19567,19568],{"class":79,"line":4150},[77,19569,4023],{"class":87},[77,19571,19572],{"class":79,"line":4155},[77,19573,17188],{"class":2123},[77,19575,19576],{"class":79,"line":4169},[77,19577,19464],{"class":323},[77,19579,19580,19582,19585,19587,19589,19592,19595,19597],{"class":79,"line":4174},[77,19581,17381],{"class":2123},[77,19583,19584],{"class":83}," setRadius",[77,19586,2622],{"class":87},[77,19588,16509],{"class":2123},[77,19590,19591],{"class":7691}," r",[77,19593,19594],{"class":87},") { m_r ",[77,19596,268],{"class":2123},[77,19598,19599],{"class":87}," r; }\n",[77,19601,19602,19604,19607,19609,19612,19615,19618,19620],{"class":79,"line":4203},[77,19603,17381],{"class":2123},[77,19605,19606],{"class":83}," setCenter",[77,19608,2622],{"class":87},[77,19610,19611],{"class":83},"Point",[77,19613,19614],{"class":7691}," center",[77,19616,19617],{"class":87},") { m_center ",[77,19619,268],{"class":2123},[77,19621,19622],{"class":87}," center; }\n",[77,19624,19625],{"class":79,"line":4208},[77,19626,19627],{"class":323},"    \u002F\u002F获取属性\n",[77,19629,19630,19632,19635,19637,19639],{"class":79,"line":4225},[77,19631,17210],{"class":2123},[77,19633,19634],{"class":83}," getRadius",[77,19636,19513],{"class":87},[77,19638,19516],{"class":2123},[77,19640,19641],{"class":87}," m_r; }\n",[77,19643,19644,19647,19650,19652,19654],{"class":79,"line":4230},[77,19645,19646],{"class":83},"    Point",[77,19648,19649],{"class":83}," getCenter",[77,19651,19513],{"class":87},[77,19653,19516],{"class":2123},[77,19655,19656],{"class":87}," m_center; }\n",[77,19658,19659],{"class":79,"line":4235},[77,19660,4875],{"emptyLinePlaceholder":2549},[77,19662,19663],{"class":79,"line":4240},[77,19664,17693],{"class":2123},[77,19666,19667,19669],{"class":79,"line":4254},[77,19668,17210],{"class":2123},[77,19670,17200],{"class":87},[77,19672,19673],{"class":79,"line":4259},[77,19674,19675],{"class":323},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[77,19677,19678],{"class":79,"line":5052},[77,19679,19680],{"class":87},"    Point m_center;\n",[77,19682,19683],{"class":79,"line":5066},[77,19684,6470],{"class":87},[77,19686,19687,19689,19692,19694,19697,19699,19701,19703,19705,19707,19709],{"class":79,"line":5074},[77,19688,7839],{"class":2123},[77,19690,19691],{"class":83}," isInCircle",[77,19693,2622],{"class":87},[77,19695,19696],{"class":83},"Circle",[77,19698,13057],{"class":2123},[77,19700,2902],{"class":7691},[77,19702,2992],{"class":87},[77,19704,19611],{"class":83},[77,19706,13057],{"class":2123},[77,19708,24],{"class":7691},[77,19710,2628],{"class":87},[77,19712,19713],{"class":79,"line":5079},[77,19714,4023],{"class":87},[77,19716,19717,19719,19722,19724,19726,19729,19732,19735,19737,19739,19741,19743],{"class":79,"line":5085},[77,19718,17210],{"class":2123},[77,19720,19721],{"class":87}," dx ",[77,19723,268],{"class":2123},[77,19725,18812],{"class":87},[77,19727,19728],{"class":83},"getCenter",[77,19730,19731],{"class":87},"().",[77,19733,19734],{"class":83},"getX",[77,19736,15522],{"class":87},[77,19738,3145],{"class":2123},[77,19740,18358],{"class":87},[77,19742,19734],{"class":83},[77,19744,8111],{"class":87},[77,19746,19747,19749,19752,19754,19756,19758,19760,19763,19765,19767,19769,19771],{"class":79,"line":5091},[77,19748,17210],{"class":2123},[77,19750,19751],{"class":87}," dy ",[77,19753,268],{"class":2123},[77,19755,18812],{"class":87},[77,19757,19728],{"class":83},[77,19759,19731],{"class":87},[77,19761,19762],{"class":83},"getY",[77,19764,15522],{"class":87},[77,19766,3145],{"class":2123},[77,19768,18358],{"class":87},[77,19770,19762],{"class":83},[77,19772,8111],{"class":87},[77,19774,19775,19777,19780,19782,19785,19788,19790,19792,19794,19796,19798],{"class":79,"line":5096},[77,19776,17210],{"class":2123},[77,19778,19779],{"class":87}," distance ",[77,19781,268],{"class":2123},[77,19783,19784],{"class":83}," sqrt",[77,19786,19787],{"class":87},"(dx ",[77,19789,3068],{"class":2123},[77,19791,19721],{"class":87},[77,19793,3094],{"class":2123},[77,19795,19751],{"class":87},[77,19797,3068],{"class":2123},[77,19799,19800],{"class":87}," dy);\n",[77,19802,19803,19805,19808,19810,19812,19815],{"class":79,"line":10422},[77,19804,5576],{"class":2123},[77,19806,19807],{"class":87}," (distance ",[77,19809,260],{"class":2123},[77,19811,18812],{"class":87},[77,19813,19814],{"class":83},"getRadius",[77,19816,19817],{"class":87},"())\n",[77,19819,19820],{"class":79,"line":10446},[77,19821,4505],{"class":87},[77,19823,19824,19826,19828,19831,19833],{"class":79,"line":10451},[77,19825,12142],{"class":87},[77,19827,3655],{"class":2123},[77,19829,19830],{"class":271}," \"点在圆内\"",[77,19832,3922],{"class":2123},[77,19834,11314],{"class":87},[77,19836,19837],{"class":79,"line":10457},[77,19838,4662],{"class":87},[77,19840,19841],{"class":79,"line":10484},[77,19842,19293],{"class":2123},[77,19844,19845],{"class":79,"line":10489},[77,19846,4505],{"class":87},[77,19848,19849,19851,19853,19856,19858],{"class":79,"line":10495},[77,19850,12142],{"class":87},[77,19852,3655],{"class":2123},[77,19854,19855],{"class":271}," \"点在圆外\"",[77,19857,3922],{"class":2123},[77,19859,11314],{"class":87},[77,19861,19862],{"class":79,"line":10507},[77,19863,4662],{"class":87},[77,19865,19866],{"class":79,"line":10519},[77,19867,110],{"class":87},[77,19869,19870,19872,19874],{"class":79,"line":10531},[77,19871,2625],{"class":2123},[77,19873,4448],{"class":83},[77,19875,4451],{"class":87},[77,19877,19878],{"class":79,"line":12189},[77,19879,4023],{"class":87},[77,19881,19882],{"class":79,"line":12214},[77,19883,17524],{"class":323},[77,19885,19886],{"class":79,"line":12237},[77,19887,17272],{"class":87},[77,19889,19890],{"class":79,"line":12261},[77,19891,19892],{"class":87},"    Point p1;\n",[77,19894,19895],{"class":79,"line":12266},[77,19896,19464],{"class":323},[77,19898,19899,19901,19903,19906],{"class":79,"line":12271},[77,19900,4028],{"class":87},[77,19902,3655],{"class":2123},[77,19904,19905],{"class":271},"\"请输入圆的半径：\"",[77,19907,104],{"class":87},[77,19909,19910,19912],{"class":79,"line":12276},[77,19911,17210],{"class":2123},[77,19913,19914],{"class":87}," r;\n",[77,19916,19917,19919,19921],{"class":79,"line":12285},[77,19918,4487],{"class":87},[77,19920,3907],{"class":2123},[77,19922,19923],{"class":87},"r;\n",[77,19925,19926,19928,19931],{"class":79,"line":12290},[77,19927,19065],{"class":87},[77,19929,19930],{"class":83},"setRadius",[77,19932,19933],{"class":87},"(r);\n",[77,19935,19936,19938,19940,19943],{"class":79,"line":12296},[77,19937,4028],{"class":87},[77,19939,3655],{"class":2123},[77,19941,19942],{"class":271},"\"请输入圆心坐标：\"",[77,19944,104],{"class":87},[77,19946,19947,19949],{"class":79,"line":12317},[77,19948,17210],{"class":2123},[77,19950,19951],{"class":87}," x, y;\n",[77,19953,19954,19956,19958,19960,19962],{"class":79,"line":12323},[77,19955,4487],{"class":87},[77,19957,3907],{"class":2123},[77,19959,3433],{"class":87},[77,19961,3907],{"class":2123},[77,19963,19964],{"class":87},"y;\n",[77,19966,19967,19970,19973],{"class":79,"line":12337},[77,19968,19969],{"class":87},"    p1.",[77,19971,19972],{"class":83},"setPoint",[77,19974,19975],{"class":87},"(x, y);\n",[77,19977,19978,19980,19983],{"class":79,"line":12343},[77,19979,19065],{"class":87},[77,19981,19982],{"class":83},"setCenter",[77,19984,19985],{"class":87},"(p1);\n",[77,19987,19988,19990,19992,19995],{"class":79,"line":12370},[77,19989,4028],{"class":87},[77,19991,3655],{"class":2123},[77,19993,19994],{"class":271},"\"请输入测试点坐标：\"",[77,19996,104],{"class":87},[77,19998,19999,20001],{"class":79,"line":12379},[77,20000,17210],{"class":2123},[77,20002,20003],{"class":87}," x1, y1;\n",[77,20005,20006,20008,20010,20013,20015],{"class":79,"line":12385},[77,20007,4487],{"class":87},[77,20009,3907],{"class":2123},[77,20011,20012],{"class":87},"x1",[77,20014,3907],{"class":2123},[77,20016,20017],{"class":87},"y1;\n",[77,20019,20020],{"class":79,"line":12393},[77,20021,20022],{"class":87},"    Point p2;\n",[77,20024,20025,20028,20030],{"class":79,"line":12398},[77,20026,20027],{"class":87},"    p2.",[77,20029,19972],{"class":83},[77,20031,20032],{"class":87},"(x1, y1);\n",[77,20034,20035,20038],{"class":79,"line":19074},[77,20036,20037],{"class":83},"    isInCircle",[77,20039,20040],{"class":87},"(c1, p2);\n",[77,20042,20043],{"class":79,"line":19080},[77,20044,110],{"class":87},[24,20046,20047],{},"在类中可以让另一个类作为本来的成员",[24,20049,20050],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[24,20052,20053],{},"创建point.h",[67,20055,20057],{"className":2610,"code":20056,"language":2612,"meta":72,"style":72},"#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",[74,20058,20059,20070,20076,20086,20092,20096,20101,20105,20109,20129,20133,20141,20149,20153,20157,20163,20169],{"__ignoreMap":72},[77,20060,20061,20064,20067],{"class":79,"line":80},[77,20062,20063],{"class":2123},"#pragma",[77,20065,20066],{"class":83}," once",[77,20068,20069],{"class":323}," \u002F\u002F防止头文件重复包含\n",[77,20071,20072,20074],{"class":79,"line":91},[77,20073,4425],{"class":2123},[77,20075,4428],{"class":271},[77,20077,20078,20080,20082,20084],{"class":79,"line":107},[77,20079,4433],{"class":2123},[77,20081,4436],{"class":2123},[77,20083,4439],{"class":83},[77,20085,104],{"class":87},[77,20087,20088,20090],{"class":79,"line":191},[77,20089,17166],{"class":2123},[77,20091,19451],{"class":83},[77,20093,20094],{"class":79,"line":1543},[77,20095,4023],{"class":87},[77,20097,20098],{"class":79,"line":1549},[77,20099,20100],{"class":323},"\u002F\u002F做好声明与变量定义就可以\n",[77,20102,20103],{"class":79,"line":1566},[77,20104,17188],{"class":2123},[77,20106,20107],{"class":79,"line":1572},[77,20108,19464],{"class":323},[77,20110,20111,20113,20115,20117,20119,20121,20123,20125,20127],{"class":79,"line":1589},[77,20112,17381],{"class":2123},[77,20114,19471],{"class":83},[77,20116,2622],{"class":87},[77,20118,16509],{"class":2123},[77,20120,19478],{"class":7691},[77,20122,680],{"class":87},[77,20124,16509],{"class":2123},[77,20126,19485],{"class":7691},[77,20128,5194],{"class":87},[77,20130,20131],{"class":79,"line":1595},[77,20132,19503],{"class":323},[77,20134,20135,20137,20139],{"class":79,"line":4088},[77,20136,17210],{"class":2123},[77,20138,19510],{"class":83},[77,20140,8111],{"class":87},[77,20142,20143,20145,20147],{"class":79,"line":4093},[77,20144,17210],{"class":2123},[77,20146,19526],{"class":83},[77,20148,8111],{"class":87},[77,20150,20151],{"class":79,"line":4099},[77,20152,4875],{"emptyLinePlaceholder":2549},[77,20154,20155],{"class":79,"line":4104},[77,20156,17693],{"class":2123},[77,20158,20159,20161],{"class":79,"line":4118},[77,20160,17210],{"class":2123},[77,20162,19548],{"class":87},[77,20164,20165,20167],{"class":79,"line":4123},[77,20166,17210],{"class":2123},[77,20168,19555],{"class":87},[77,20170,20171],{"class":79,"line":4129},[77,20172,6470],{"class":87},[24,20174,20175],{},"创建point.cpp",[67,20177,20179],{"className":2610,"code":20178,"language":2612,"meta":72,"style":72},"#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",[74,20180,20181,20188,20193,20227,20231,20247],{"__ignoreMap":72},[77,20182,20183,20185],{"class":79,"line":80},[77,20184,4425],{"class":2123},[77,20186,20187],{"class":271},"\u003Cpoint.h>\n",[77,20189,20190],{"class":79,"line":91},[77,20191,20192],{"class":323},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[77,20194,20195,20197,20200,20203,20205,20207,20209,20211,20213,20215,20217,20219,20221,20223,20225],{"class":79,"line":107},[77,20196,17381],{"class":2123},[77,20198,20199],{"class":83}," Point",[77,20201,20202],{"class":87},"::",[77,20204,19972],{"class":83},[77,20206,2622],{"class":87},[77,20208,16509],{"class":2123},[77,20210,19478],{"class":7691},[77,20212,680],{"class":87},[77,20214,16509],{"class":2123},[77,20216,19485],{"class":7691},[77,20218,19488],{"class":87},[77,20220,268],{"class":2123},[77,20222,19493],{"class":87},[77,20224,268],{"class":2123},[77,20226,19498],{"class":87},[77,20228,20229],{"class":79,"line":191},[77,20230,19503],{"class":323},[77,20232,20233,20235,20237,20239,20241,20243,20245],{"class":79,"line":1543},[77,20234,17210],{"class":2123},[77,20236,20199],{"class":83},[77,20238,20202],{"class":87},[77,20240,19734],{"class":83},[77,20242,19513],{"class":87},[77,20244,19516],{"class":2123},[77,20246,19519],{"class":87},[77,20248,20249,20251,20253,20255,20257,20259,20261],{"class":79,"line":1549},[77,20250,17210],{"class":2123},[77,20252,20199],{"class":83},[77,20254,20202],{"class":87},[77,20256,19762],{"class":83},[77,20258,19513],{"class":87},[77,20260,19516],{"class":2123},[77,20262,19533],{"class":87},[24,20264,20265],{},"创建circle.h",[67,20267,20269],{"className":2610,"code":20268,"language":2612,"meta":72,"style":72},"#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",[74,20270,20271,20278,20284,20294,20300,20306,20310,20314,20318,20332,20346,20350,20358,20366,20370,20374,20380,20384,20388],{"__ignoreMap":72},[77,20272,20273,20275],{"class":79,"line":80},[77,20274,20063],{"class":2123},[77,20276,20277],{"class":83}," once\n",[77,20279,20280,20282],{"class":79,"line":91},[77,20281,4425],{"class":2123},[77,20283,4428],{"class":271},[77,20285,20286,20288,20290,20292],{"class":79,"line":107},[77,20287,4433],{"class":2123},[77,20289,4436],{"class":2123},[77,20291,4439],{"class":83},[77,20293,104],{"class":87},[77,20295,20296,20298],{"class":79,"line":191},[77,20297,4425],{"class":2123},[77,20299,20187],{"class":271},[77,20301,20302,20304],{"class":79,"line":1543},[77,20303,17166],{"class":2123},[77,20305,17169],{"class":83},[77,20307,20308],{"class":79,"line":1549},[77,20309,4023],{"class":87},[77,20311,20312],{"class":79,"line":1566},[77,20313,17188],{"class":2123},[77,20315,20316],{"class":79,"line":1572},[77,20317,19464],{"class":323},[77,20319,20320,20322,20324,20326,20328,20330],{"class":79,"line":1589},[77,20321,17381],{"class":2123},[77,20323,19584],{"class":83},[77,20325,2622],{"class":87},[77,20327,16509],{"class":2123},[77,20329,19591],{"class":7691},[77,20331,5194],{"class":87},[77,20333,20334,20336,20338,20340,20342,20344],{"class":79,"line":1595},[77,20335,17381],{"class":2123},[77,20337,19606],{"class":83},[77,20339,2622],{"class":87},[77,20341,19611],{"class":83},[77,20343,19614],{"class":7691},[77,20345,5194],{"class":87},[77,20347,20348],{"class":79,"line":4088},[77,20349,19627],{"class":323},[77,20351,20352,20354,20356],{"class":79,"line":4093},[77,20353,17210],{"class":2123},[77,20355,19634],{"class":83},[77,20357,8111],{"class":87},[77,20359,20360,20362,20364],{"class":79,"line":4099},[77,20361,19646],{"class":83},[77,20363,19649],{"class":83},[77,20365,8111],{"class":87},[77,20367,20368],{"class":79,"line":4104},[77,20369,4875],{"emptyLinePlaceholder":2549},[77,20371,20372],{"class":79,"line":4118},[77,20373,17693],{"class":2123},[77,20375,20376,20378],{"class":79,"line":4123},[77,20377,17210],{"class":2123},[77,20379,17200],{"class":87},[77,20381,20382],{"class":79,"line":4129},[77,20383,19675],{"class":323},[77,20385,20386],{"class":79,"line":4150},[77,20387,19680],{"class":87},[77,20389,20390],{"class":79,"line":4155},[77,20391,6470],{"class":87},[24,20393,20394],{},"创建circle.cpp",[67,20396,20398],{"className":2610,"code":20397,"language":2612,"meta":72,"style":72},"#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",[74,20399,20400,20407,20430,20452,20457,20473],{"__ignoreMap":72},[77,20401,20402,20404],{"class":79,"line":80},[77,20403,4425],{"class":2123},[77,20405,20406],{"class":271},"\u003Ccircle.h>\n",[77,20408,20409,20411,20414,20416,20418,20420,20422,20424,20426,20428],{"class":79,"line":91},[77,20410,7839],{"class":2123},[77,20412,20413],{"class":83}," Circle",[77,20415,20202],{"class":87},[77,20417,19930],{"class":83},[77,20419,2622],{"class":87},[77,20421,16509],{"class":2123},[77,20423,19591],{"class":7691},[77,20425,19594],{"class":87},[77,20427,268],{"class":2123},[77,20429,19599],{"class":87},[77,20431,20432,20434,20436,20438,20440,20442,20444,20446,20448,20450],{"class":79,"line":107},[77,20433,7839],{"class":2123},[77,20435,20413],{"class":83},[77,20437,20202],{"class":87},[77,20439,19982],{"class":83},[77,20441,2622],{"class":87},[77,20443,19611],{"class":83},[77,20445,19614],{"class":7691},[77,20447,19617],{"class":87},[77,20449,268],{"class":2123},[77,20451,19622],{"class":87},[77,20453,20454],{"class":79,"line":191},[77,20455,20456],{"class":323},"\u002F\u002F获取属性\n",[77,20458,20459,20461,20463,20465,20467,20469,20471],{"class":79,"line":1543},[77,20460,16509],{"class":2123},[77,20462,20413],{"class":83},[77,20464,20202],{"class":87},[77,20466,19814],{"class":83},[77,20468,19513],{"class":87},[77,20470,19516],{"class":2123},[77,20472,19641],{"class":87},[77,20474,20475,20477,20479,20481,20483,20485,20487],{"class":79,"line":1549},[77,20476,19611],{"class":83},[77,20478,20413],{"class":83},[77,20480,20202],{"class":87},[77,20482,19728],{"class":83},[77,20484,19513],{"class":87},[77,20486,19516],{"class":2123},[77,20488,19656],{"class":87},[24,20490,20491],{},"使用封装的类",[67,20493,20495],{"className":2610,"code":20494,"language":2612,"meta":72,"style":72},"#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",[74,20496,20497,20503,20513,20519,20525,20549,20553,20579,20605,20629,20643,20647,20659,20663,20667,20671,20683,20687,20691,20699,20703,20707,20711,20715,20719,20729,20735,20743,20751,20761,20767,20779,20787,20795,20805,20811,20823,20827,20835,20841],{"__ignoreMap":72},[77,20498,20499,20501],{"class":79,"line":80},[77,20500,4425],{"class":2123},[77,20502,4428],{"class":271},[77,20504,20505,20507,20509,20511],{"class":79,"line":91},[77,20506,4433],{"class":2123},[77,20508,4436],{"class":2123},[77,20510,4439],{"class":83},[77,20512,104],{"class":87},[77,20514,20515,20517],{"class":79,"line":107},[77,20516,4425],{"class":2123},[77,20518,20406],{"class":271},[77,20520,20521,20523],{"class":79,"line":191},[77,20522,4425],{"class":2123},[77,20524,20187],{"class":271},[77,20526,20527,20529,20531,20533,20535,20537,20539,20541,20543,20545,20547],{"class":79,"line":1543},[77,20528,7839],{"class":2123},[77,20530,19691],{"class":83},[77,20532,2622],{"class":87},[77,20534,19696],{"class":83},[77,20536,13057],{"class":2123},[77,20538,2902],{"class":7691},[77,20540,2992],{"class":87},[77,20542,19611],{"class":83},[77,20544,13057],{"class":2123},[77,20546,24],{"class":7691},[77,20548,2628],{"class":87},[77,20550,20551],{"class":79,"line":1549},[77,20552,4023],{"class":87},[77,20554,20555,20557,20559,20561,20563,20565,20567,20569,20571,20573,20575,20577],{"class":79,"line":1566},[77,20556,17210],{"class":2123},[77,20558,19721],{"class":87},[77,20560,268],{"class":2123},[77,20562,18812],{"class":87},[77,20564,19728],{"class":83},[77,20566,19731],{"class":87},[77,20568,19734],{"class":83},[77,20570,15522],{"class":87},[77,20572,3145],{"class":2123},[77,20574,18358],{"class":87},[77,20576,19734],{"class":83},[77,20578,8111],{"class":87},[77,20580,20581,20583,20585,20587,20589,20591,20593,20595,20597,20599,20601,20603],{"class":79,"line":1572},[77,20582,17210],{"class":2123},[77,20584,19751],{"class":87},[77,20586,268],{"class":2123},[77,20588,18812],{"class":87},[77,20590,19728],{"class":83},[77,20592,19731],{"class":87},[77,20594,19762],{"class":83},[77,20596,15522],{"class":87},[77,20598,3145],{"class":2123},[77,20600,18358],{"class":87},[77,20602,19762],{"class":83},[77,20604,8111],{"class":87},[77,20606,20607,20609,20611,20613,20615,20617,20619,20621,20623,20625,20627],{"class":79,"line":1589},[77,20608,17210],{"class":2123},[77,20610,19779],{"class":87},[77,20612,268],{"class":2123},[77,20614,19784],{"class":83},[77,20616,19787],{"class":87},[77,20618,3068],{"class":2123},[77,20620,19721],{"class":87},[77,20622,3094],{"class":2123},[77,20624,19751],{"class":87},[77,20626,3068],{"class":2123},[77,20628,19800],{"class":87},[77,20630,20631,20633,20635,20637,20639,20641],{"class":79,"line":1595},[77,20632,5576],{"class":2123},[77,20634,19807],{"class":87},[77,20636,260],{"class":2123},[77,20638,18812],{"class":87},[77,20640,19814],{"class":83},[77,20642,19817],{"class":87},[77,20644,20645],{"class":79,"line":4088},[77,20646,4505],{"class":87},[77,20648,20649,20651,20653,20655,20657],{"class":79,"line":4093},[77,20650,12142],{"class":87},[77,20652,3655],{"class":2123},[77,20654,19830],{"class":271},[77,20656,3922],{"class":2123},[77,20658,11314],{"class":87},[77,20660,20661],{"class":79,"line":4099},[77,20662,4662],{"class":87},[77,20664,20665],{"class":79,"line":4104},[77,20666,19293],{"class":2123},[77,20668,20669],{"class":79,"line":4118},[77,20670,4505],{"class":87},[77,20672,20673,20675,20677,20679,20681],{"class":79,"line":4123},[77,20674,12142],{"class":87},[77,20676,3655],{"class":2123},[77,20678,19855],{"class":271},[77,20680,3922],{"class":2123},[77,20682,11314],{"class":87},[77,20684,20685],{"class":79,"line":4129},[77,20686,4662],{"class":87},[77,20688,20689],{"class":79,"line":4150},[77,20690,110],{"class":87},[77,20692,20693,20695,20697],{"class":79,"line":4155},[77,20694,2625],{"class":2123},[77,20696,4448],{"class":83},[77,20698,4451],{"class":87},[77,20700,20701],{"class":79,"line":4169},[77,20702,4023],{"class":87},[77,20704,20705],{"class":79,"line":4174},[77,20706,17524],{"class":323},[77,20708,20709],{"class":79,"line":4203},[77,20710,17272],{"class":87},[77,20712,20713],{"class":79,"line":4208},[77,20714,19892],{"class":87},[77,20716,20717],{"class":79,"line":4225},[77,20718,19464],{"class":323},[77,20720,20721,20723,20725,20727],{"class":79,"line":4230},[77,20722,4028],{"class":87},[77,20724,3655],{"class":2123},[77,20726,19905],{"class":271},[77,20728,104],{"class":87},[77,20730,20731,20733],{"class":79,"line":4235},[77,20732,17210],{"class":2123},[77,20734,19914],{"class":87},[77,20736,20737,20739,20741],{"class":79,"line":4240},[77,20738,4487],{"class":87},[77,20740,3907],{"class":2123},[77,20742,19923],{"class":87},[77,20744,20745,20747,20749],{"class":79,"line":4254},[77,20746,19065],{"class":87},[77,20748,19930],{"class":83},[77,20750,19933],{"class":87},[77,20752,20753,20755,20757,20759],{"class":79,"line":4259},[77,20754,4028],{"class":87},[77,20756,3655],{"class":2123},[77,20758,19942],{"class":271},[77,20760,104],{"class":87},[77,20762,20763,20765],{"class":79,"line":5052},[77,20764,17210],{"class":2123},[77,20766,19951],{"class":87},[77,20768,20769,20771,20773,20775,20777],{"class":79,"line":5066},[77,20770,4487],{"class":87},[77,20772,3907],{"class":2123},[77,20774,3433],{"class":87},[77,20776,3907],{"class":2123},[77,20778,19964],{"class":87},[77,20780,20781,20783,20785],{"class":79,"line":5074},[77,20782,19969],{"class":87},[77,20784,19972],{"class":83},[77,20786,19975],{"class":87},[77,20788,20789,20791,20793],{"class":79,"line":5079},[77,20790,19065],{"class":87},[77,20792,19982],{"class":83},[77,20794,19985],{"class":87},[77,20796,20797,20799,20801,20803],{"class":79,"line":5085},[77,20798,4028],{"class":87},[77,20800,3655],{"class":2123},[77,20802,19994],{"class":271},[77,20804,104],{"class":87},[77,20806,20807,20809],{"class":79,"line":5091},[77,20808,17210],{"class":2123},[77,20810,20003],{"class":87},[77,20812,20813,20815,20817,20819,20821],{"class":79,"line":5096},[77,20814,4487],{"class":87},[77,20816,3907],{"class":2123},[77,20818,20012],{"class":87},[77,20820,3907],{"class":2123},[77,20822,20017],{"class":87},[77,20824,20825],{"class":79,"line":10422},[77,20826,20022],{"class":87},[77,20828,20829,20831,20833],{"class":79,"line":10446},[77,20830,20027],{"class":87},[77,20832,19972],{"class":83},[77,20834,20032],{"class":87},[77,20836,20837,20839],{"class":79,"line":10451},[77,20838,20037],{"class":83},[77,20840,20040],{"class":87},[77,20842,20843],{"class":79,"line":10457},[77,20844,110],{"class":87},[14,20846,20848],{"id":20847},"_82对象的初始化清理","8.2对象的初始化清理",[51,20850,20851,20854],{},[54,20852,20853],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[54,20855,20856],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[19,20858,20860],{"id":20859},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[24,20862,20863,20864,20867],{},"对象的",[27,20865,20866],{},"初始化和清理","也是两个非常重要的安全问题",[24,20869,20870],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[24,20872,20873],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[24,20875,20876,20877,20880,20881,20884],{},"c++利用了",[27,20878,20879],{},"构造函数","和",[27,20882,20883],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[24,20886,20887,20888],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[27,20889,20890],{},"我们不提供构造和析构，编译器会提供",[24,20892,20893],{},[27,20894,20895],{},"编译器提供的构造函数和析构函数是空实现。",[51,20897,20898,20901],{},[54,20899,20900],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[54,20902,20903,20904,20907],{},"析构函数：主要作用在于对象",[27,20905,20906],{},"销毁前","系统自动调用，执行一些清理工作。",[24,20909,20910,20913],{},[27,20911,20912],{},"构造函数语法：",[74,20914,20915],{},"类名(){}",[139,20917,20918,20921,20924,20927,20930],{},[54,20919,20920],{},"构造函数，没有返回值也不写void",[54,20922,20923],{},"函数名称与类名相同",[54,20925,20926],{},"构造函数可以有参数，因此可以发生重载",[54,20928,20929],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[54,20931,20932,20933,3043],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[74,20934,20935],{},"Person(){}",[24,20937,20938,16267,20941],{},[27,20939,20940],{},"析构函数语法：",[74,20942,20943],{},"~类名(){}",[139,20945,20946,20949,20952,20958],{},[54,20947,20948],{},"析构函数，没有返回值也不写void",[54,20950,20951],{},"函数名称与类名相同,在名称前加上符号  ~",[54,20953,20954,20955],{},"析构函数不可以有参数，因此",[27,20956,20957],{},"不可以发生重载",[54,20959,20960],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[67,20962,20964],{"className":2610,"code":20963,"language":2612,"meta":72,"style":72},"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",[74,20965,20966,20972,20976,20980,20985,20992,20996,21009,21013,21018,21025,21029,21042,21046,21050,21054,21058,21066,21070,21078,21082,21086,21094,21098,21103,21107,21114,21118,21131,21135,21143],{"__ignoreMap":72},[77,20967,20968,20970],{"class":79,"line":80},[77,20969,17166],{"class":2123},[77,20971,17642],{"class":83},[77,20973,20974],{"class":79,"line":91},[77,20975,4023],{"class":87},[77,20977,20978],{"class":79,"line":107},[77,20979,17188],{"class":2123},[77,20981,20982],{"class":79,"line":191},[77,20983,20984],{"class":323},"    \u002F\u002F构造函数\n",[77,20986,20987,20990],{"class":79,"line":1543},[77,20988,20989],{"class":83},"    Person",[77,20991,4451],{"class":87},[77,20993,20994],{"class":79,"line":1549},[77,20995,4505],{"class":87},[77,20997,20998,21000,21002,21005,21007],{"class":79,"line":1566},[77,20999,12142],{"class":87},[77,21001,3655],{"class":2123},[77,21003,21004],{"class":271}," \"Person的构造函数调用\"",[77,21006,3922],{"class":2123},[77,21008,11314],{"class":87},[77,21010,21011],{"class":79,"line":1572},[77,21012,4662],{"class":87},[77,21014,21015],{"class":79,"line":1589},[77,21016,21017],{"class":323},"    \u002F\u002F析构函数\n",[77,21019,21020,21023],{"class":79,"line":1595},[77,21021,21022],{"class":83},"    ~Person",[77,21024,4451],{"class":87},[77,21026,21027],{"class":79,"line":4088},[77,21028,4505],{"class":87},[77,21030,21031,21033,21035,21038,21040],{"class":79,"line":4093},[77,21032,12142],{"class":87},[77,21034,3655],{"class":2123},[77,21036,21037],{"class":271}," \"Person的析构函数调用\"",[77,21039,3922],{"class":2123},[77,21041,11314],{"class":87},[77,21043,21044],{"class":79,"line":4099},[77,21045,4662],{"class":87},[77,21047,21048],{"class":79,"line":4104},[77,21049,4875],{"emptyLinePlaceholder":2549},[77,21051,21052],{"class":79,"line":4118},[77,21053,6470],{"class":87},[77,21055,21056],{"class":79,"line":4123},[77,21057,4875],{"emptyLinePlaceholder":2549},[77,21059,21060,21062,21064],{"class":79,"line":4129},[77,21061,7839],{"class":2123},[77,21063,8063],{"class":83},[77,21065,4451],{"class":87},[77,21067,21068],{"class":79,"line":4150},[77,21069,4023],{"class":87},[77,21071,21072,21075],{"class":79,"line":4155},[77,21073,21074],{"class":87},"    Person p;",[77,21076,21077],{"class":323},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[77,21079,21080],{"class":79,"line":4169},[77,21081,110],{"class":87},[77,21083,21084],{"class":79,"line":4174},[77,21085,4875],{"emptyLinePlaceholder":2549},[77,21087,21088,21090,21092],{"class":79,"line":4203},[77,21089,2625],{"class":2123},[77,21091,4448],{"class":83},[77,21093,13326],{"class":87},[77,21095,21096],{"class":79,"line":4208},[77,21097,15682],{"class":87},[77,21099,21100],{"class":79,"line":4225},[77,21101,21102],{"class":323},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[77,21104,21105],{"class":79,"line":4230},[77,21106,4875],{"emptyLinePlaceholder":2549},[77,21108,21109,21111],{"class":79,"line":4235},[77,21110,21074],{"class":87},[77,21112,21113],{"class":323},"\u002F\u002F只有构造函数\n",[77,21115,21116],{"class":79,"line":4240},[77,21117,4875],{"emptyLinePlaceholder":2549},[77,21119,21120,21122,21124,21126,21128],{"class":79,"line":4254},[77,21121,4778],{"class":83},[77,21123,2622],{"class":87},[77,21125,4783],{"class":271},[77,21127,8441],{"class":87},[77,21129,21130],{"class":323},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[77,21132,21133],{"class":79,"line":4259},[77,21134,4875],{"emptyLinePlaceholder":2549},[77,21136,21137,21139,21141],{"class":79,"line":5052},[77,21138,6565],{"class":2123},[77,21140,6568],{"class":94},[77,21142,104],{"class":87},[77,21144,21145],{"class":79,"line":5066},[77,21146,110],{"class":87},[24,21148,21149],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[19,21151,21153],{"id":21152},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[24,21155,21156],{},"两种分类方式：",[24,21158,21159],{},"​\t按参数分为： 有参构造和无参构造",[24,21161,21162],{},"​\t按类型分为： 普通构造和拷贝构造",[24,21164,21165],{},"三种调用方式：",[24,21167,21168],{},"​\t括号法",[24,21170,21171],{},"​\t显示法",[24,21173,21174],{},"​\t隐式转换法",[67,21176,21178],{"className":2610,"code":21177,"language":2612,"meta":72,"style":72},"#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",[74,21179,21180,21186,21196,21201,21206,21211,21216,21220,21228,21232,21236,21240,21246,21250,21263,21267,21279,21283,21292,21305,21309,21313,21319,21323,21336,21340,21345,21361,21365,21370,21379,21392,21396,21402,21406,21411,21419,21423,21428,21432,21440,21444,21449,21454,21459,21464,21469,21473,21478,21483,21488,21493,21497,21502,21507,21523,21535,21540,21544,21549,21554,21559,21563,21568,21582,21595,21599,21607,21611,21617,21623,21631],{"__ignoreMap":72},[77,21181,21182,21184],{"class":79,"line":80},[77,21183,4425],{"class":2123},[77,21185,4428],{"class":271},[77,21187,21188,21190,21192,21194],{"class":79,"line":91},[77,21189,4433],{"class":2123},[77,21191,4436],{"class":2123},[77,21193,4439],{"class":83},[77,21195,104],{"class":87},[77,21197,21198],{"class":79,"line":107},[77,21199,21200],{"class":323},"\u002F\u002F1.构造函数的分类及调用\n",[77,21202,21203],{"class":79,"line":191},[77,21204,21205],{"class":323},"\u002F\u002F分类\n",[77,21207,21208],{"class":79,"line":1543},[77,21209,21210],{"class":323},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[77,21212,21213],{"class":79,"line":1549},[77,21214,21215],{"class":323},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[77,21217,21218],{"class":79,"line":1566},[77,21219,4875],{"emptyLinePlaceholder":2549},[77,21221,21222,21224,21226],{"class":79,"line":1572},[77,21223,17166],{"class":2123},[77,21225,18040],{"class":83},[77,21227,5149],{"class":87},[77,21229,21230],{"class":79,"line":1589},[77,21231,4023],{"class":87},[77,21233,21234],{"class":79,"line":1595},[77,21235,17188],{"class":2123},[77,21237,21238],{"class":79,"line":4088},[77,21239,20984],{"class":323},[77,21241,21242,21244],{"class":79,"line":4093},[77,21243,20989],{"class":83},[77,21245,4451],{"class":87},[77,21247,21248],{"class":79,"line":4099},[77,21249,4505],{"class":87},[77,21251,21252,21254,21256,21259,21261],{"class":79,"line":4104},[77,21253,5926],{"class":87},[77,21255,3655],{"class":2123},[77,21257,21258],{"class":271},"\"Person构造函数无参构造\"",[77,21260,3655],{"class":2123},[77,21262,3677],{"class":87},[77,21264,21265],{"class":79,"line":4118},[77,21266,4662],{"class":87},[77,21268,21269,21271,21273,21275,21277],{"class":79,"line":4123},[77,21270,20989],{"class":83},[77,21272,2622],{"class":87},[77,21274,2625],{"class":2123},[77,21276,3876],{"class":7691},[77,21278,2628],{"class":87},[77,21280,21281],{"class":79,"line":4129},[77,21282,4505],{"class":87},[77,21284,21285,21288,21290],{"class":79,"line":4150},[77,21286,21287],{"class":87},"        age",[77,21289,268],{"class":2123},[77,21291,8672],{"class":87},[77,21293,21294,21296,21298,21301,21303],{"class":79,"line":4155},[77,21295,5926],{"class":87},[77,21297,3655],{"class":2123},[77,21299,21300],{"class":271},"\"Person构造函数有参构造\"",[77,21302,3655],{"class":2123},[77,21304,3677],{"class":87},[77,21306,21307],{"class":79,"line":4169},[77,21308,4662],{"class":87},[77,21310,21311],{"class":79,"line":4174},[77,21312,21017],{"class":323},[77,21314,21315,21317],{"class":79,"line":4203},[77,21316,21022],{"class":83},[77,21318,4451],{"class":87},[77,21320,21321],{"class":79,"line":4208},[77,21322,4505],{"class":87},[77,21324,21325,21327,21329,21332,21334],{"class":79,"line":4225},[77,21326,5926],{"class":87},[77,21328,3655],{"class":2123},[77,21330,21331],{"class":271},"\"Person析构函数被调用\"",[77,21333,3655],{"class":2123},[77,21335,3677],{"class":87},[77,21337,21338],{"class":79,"line":4230},[77,21339,4662],{"class":87},[77,21341,21342],{"class":79,"line":4235},[77,21343,21344],{"class":323},"    \u002F\u002F拷贝构造函数\n",[77,21346,21347,21349,21351,21353,21355,21357,21359],{"class":79,"line":4240},[77,21348,20989],{"class":83},[77,21350,2622],{"class":87},[77,21352,9267],{"class":2123},[77,21354,18040],{"class":83},[77,21356,13057],{"class":2123},[77,21358,24],{"class":7691},[77,21360,2628],{"class":87},[77,21362,21363],{"class":79,"line":4254},[77,21364,4505],{"class":87},[77,21366,21367],{"class":79,"line":4259},[77,21368,21369],{"class":323},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[77,21371,21372,21374,21376],{"class":79,"line":5052},[77,21373,21287],{"class":87},[77,21375,268],{"class":2123},[77,21377,21378],{"class":87},"p.age;\n",[77,21380,21381,21383,21385,21388,21390],{"class":79,"line":5066},[77,21382,5926],{"class":87},[77,21384,3655],{"class":2123},[77,21386,21387],{"class":271},"\"Person拷贝构造函数被调用\"",[77,21389,3655],{"class":2123},[77,21391,3677],{"class":87},[77,21393,21394],{"class":79,"line":5074},[77,21395,4662],{"class":87},[77,21397,21398,21400],{"class":79,"line":5079},[77,21399,4460],{"class":2123},[77,21401,10271],{"class":87},[77,21403,21404],{"class":79,"line":5085},[77,21405,6470],{"class":87},[77,21407,21408],{"class":79,"line":5091},[77,21409,21410],{"class":323},"\u002F\u002F调用\n",[77,21412,21413,21415,21417],{"class":79,"line":5096},[77,21414,7839],{"class":2123},[77,21416,8063],{"class":83},[77,21418,4451],{"class":87},[77,21420,21421],{"class":79,"line":10422},[77,21422,4023],{"class":87},[77,21424,21425],{"class":79,"line":10446},[77,21426,21427],{"class":323},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[77,21429,21430],{"class":79,"line":10451},[77,21431,110],{"class":87},[77,21433,21434,21436,21438],{"class":79,"line":10457},[77,21435,7839],{"class":2123},[77,21437,8132],{"class":83},[77,21439,4451],{"class":87},[77,21441,21442],{"class":79,"line":10484},[77,21443,4023],{"class":87},[77,21445,21446],{"class":79,"line":10489},[77,21447,21448],{"class":323},"    \u002F\u002F1.括号法\n",[77,21450,21451],{"class":79,"line":10495},[77,21452,21453],{"class":323},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[77,21455,21456],{"class":79,"line":10507},[77,21457,21458],{"class":323},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[77,21460,21461],{"class":79,"line":10519},[77,21462,21463],{"class":323},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[77,21465,21466],{"class":79,"line":10531},[77,21467,21468],{"class":323},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[77,21470,21471],{"class":79,"line":12189},[77,21472,4875],{"emptyLinePlaceholder":2549},[77,21474,21475],{"class":79,"line":12214},[77,21476,21477],{"class":323},"    \u002F\u002F注意事项\n",[77,21479,21480],{"class":79,"line":12237},[77,21481,21482],{"class":323},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[77,21484,21485],{"class":79,"line":12261},[77,21486,21487],{"class":323},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[77,21489,21490],{"class":79,"line":12266},[77,21491,21492],{"class":323},"    \u002F\u002F Person p4();\n",[77,21494,21495],{"class":79,"line":12271},[77,21496,4875],{"emptyLinePlaceholder":2549},[77,21498,21499],{"class":79,"line":12276},[77,21500,21501],{"class":323},"    \u002F\u002F2.显示法\n",[77,21503,21504],{"class":79,"line":12285},[77,21505,21506],{"class":87},"    Person p1;\n",[77,21508,21509,21512,21514,21517,21519,21521],{"class":79,"line":12290},[77,21510,21511],{"class":87},"    Person p2",[77,21513,268],{"class":2123},[77,21515,21516],{"class":83},"Person",[77,21518,2622],{"class":87},[77,21520,3059],{"class":94},[77,21522,5194],{"class":87},[77,21524,21525,21528,21530,21532],{"class":79,"line":12296},[77,21526,21527],{"class":87},"    Person p3",[77,21529,268],{"class":2123},[77,21531,21516],{"class":83},[77,21533,21534],{"class":87},"(p2);\n",[77,21536,21537],{"class":79,"line":12317},[77,21538,21539],{"class":323},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[77,21541,21542],{"class":79,"line":12323},[77,21543,4875],{"emptyLinePlaceholder":2549},[77,21545,21546],{"class":79,"line":12337},[77,21547,21548],{"class":323},"    \u002F\u002F 注意事项2\n",[77,21550,21551],{"class":79,"line":12343},[77,21552,21553],{"class":323},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[77,21555,21556],{"class":79,"line":12370},[77,21557,21558],{"class":323},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[77,21560,21561],{"class":79,"line":12379},[77,21562,4875],{"emptyLinePlaceholder":2549},[77,21564,21565],{"class":79,"line":12385},[77,21566,21567],{"class":323},"    \u002F\u002F3.隐士转换法\n",[77,21569,21570,21573,21575,21577,21579],{"class":79,"line":12393},[77,21571,21572],{"class":87},"    Person p4",[77,21574,268],{"class":2123},[77,21576,3059],{"class":94},[77,21578,2675],{"class":87},[77,21580,21581],{"class":323},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[77,21583,21584,21587,21589,21592],{"class":79,"line":12398},[77,21585,21586],{"class":87},"    Person p5",[77,21588,268],{"class":2123},[77,21590,21591],{"class":87},"p4;",[77,21593,21594],{"class":323}," \u002F\u002F 这里会调用拷贝构造函数\n",[77,21596,21597],{"class":79,"line":19074},[77,21598,110],{"class":87},[77,21600,21601,21603,21605],{"class":79,"line":19080},[77,21602,2625],{"class":2123},[77,21604,4448],{"class":83},[77,21606,4451],{"class":87},[77,21608,21609],{"class":79,"line":19103},[77,21610,4023],{"class":87},[77,21612,21613,21615],{"class":79,"line":19109},[77,21614,8108],{"class":83},[77,21616,8111],{"class":87},[77,21618,21619,21621],{"class":79,"line":19132},[77,21620,8177],{"class":83},[77,21622,8111],{"class":87},[77,21624,21625,21627,21629],{"class":79,"line":19146},[77,21626,6565],{"class":2123},[77,21628,6568],{"class":94},[77,21630,104],{"class":87},[77,21632,21633],{"class":79,"line":19166},[77,21634,110],{"class":87},[24,21636,21637,21640],{},[27,21638,21639],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[19,21642,21644],{"id":21643},"_823拷贝构造函数","8.2.3拷贝构造函数",[24,21646,21647],{},"C++中拷贝构造函数调用时机通常有三种情况",[51,21649,21650,21653,21656],{},[54,21651,21652],{},"使用一个已经创建完毕的对象来初始化一个新对象",[54,21654,21655],{},"值传递的方式给函数参数传值",[54,21657,21658],{},"以值方式返回局部对象",[67,21660,21662],{"className":2610,"code":21661,"language":2612,"meta":72,"style":72},"#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",[74,21663,21664,21670,21680,21684,21689,21693,21698,21703,21708,21714,21718,21722,21728,21732,21745,21749,21754,21766,21770,21778,21791,21795,21799,21815,21819,21828,21841,21845,21851,21855,21867,21871,21877,21881,21885,21893,21897,21910,21918,21936,21940,21945,21950,21965,21969,21982,21986,21994,21998,22002,22010,22014,22019,22028,22032,22036,22061,22071,22075,22083,22087,22098,22123,22127,22131,22135,22143,22147,22152,22157,22164,22169,22174,22179,22184,22188,22193,22197,22202,22206,22211,22216,22220,22224,22229,22234,22242],{"__ignoreMap":72},[77,21665,21666,21668],{"class":79,"line":80},[77,21667,4425],{"class":2123},[77,21669,4428],{"class":271},[77,21671,21672,21674,21676,21678],{"class":79,"line":91},[77,21673,4433],{"class":2123},[77,21675,4436],{"class":2123},[77,21677,4439],{"class":83},[77,21679,104],{"class":87},[77,21681,21682],{"class":79,"line":107},[77,21683,4875],{"emptyLinePlaceholder":2549},[77,21685,21686],{"class":79,"line":191},[77,21687,21688],{"class":323},"\u002F\u002F拷贝构造函数调用时机\n",[77,21690,21691],{"class":79,"line":1543},[77,21692,4875],{"emptyLinePlaceholder":2549},[77,21694,21695],{"class":79,"line":1549},[77,21696,21697],{"class":323},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[77,21699,21700],{"class":79,"line":1566},[77,21701,21702],{"class":323},"\u002F\u002F2.值传递的方式给函数参数传值\n",[77,21704,21705],{"class":79,"line":1572},[77,21706,21707],{"class":323},"\u002F\u002F3.以值方式返回局部对象\n",[77,21709,21710,21712],{"class":79,"line":1589},[77,21711,17166],{"class":2123},[77,21713,17642],{"class":83},[77,21715,21716],{"class":79,"line":1595},[77,21717,4023],{"class":87},[77,21719,21720],{"class":79,"line":4088},[77,21721,17188],{"class":2123},[77,21723,21724,21726],{"class":79,"line":4093},[77,21725,20989],{"class":83},[77,21727,4451],{"class":87},[77,21729,21730],{"class":79,"line":4099},[77,21731,4505],{"class":87},[77,21733,21734,21736,21738,21741,21743],{"class":79,"line":4104},[77,21735,12142],{"class":87},[77,21737,3655],{"class":2123},[77,21739,21740],{"class":271}," \"Person的默认构造函数调用\"",[77,21742,3922],{"class":2123},[77,21744,11314],{"class":87},[77,21746,21747],{"class":79,"line":4118},[77,21748,4662],{"class":87},[77,21750,21751],{"class":79,"line":4123},[77,21752,21753],{"class":323},"    \u002F\u002F有参构造\n",[77,21755,21756,21758,21760,21762,21764],{"class":79,"line":4129},[77,21757,20989],{"class":83},[77,21759,2622],{"class":87},[77,21761,2625],{"class":2123},[77,21763,18159],{"class":7691},[77,21765,2628],{"class":87},[77,21767,21768],{"class":79,"line":4150},[77,21769,4505],{"class":87},[77,21771,21772,21774,21776],{"class":79,"line":4155},[77,21773,18213],{"class":87},[77,21775,268],{"class":2123},[77,21777,10271],{"class":87},[77,21779,21780,21782,21784,21787,21789],{"class":79,"line":4169},[77,21781,12142],{"class":87},[77,21783,3655],{"class":2123},[77,21785,21786],{"class":271}," \"Person的有参构造函数调用\"",[77,21788,3922],{"class":2123},[77,21790,11314],{"class":87},[77,21792,21793],{"class":79,"line":4174},[77,21794,4662],{"class":87},[77,21796,21797],{"class":79,"line":4203},[77,21798,21344],{"class":323},[77,21800,21801,21803,21805,21807,21809,21811,21813],{"class":79,"line":4208},[77,21802,20989],{"class":83},[77,21804,2622],{"class":87},[77,21806,9267],{"class":2123},[77,21808,18040],{"class":83},[77,21810,13057],{"class":2123},[77,21812,24],{"class":7691},[77,21814,2628],{"class":87},[77,21816,21817],{"class":79,"line":4225},[77,21818,4505],{"class":87},[77,21820,21821,21823,21825],{"class":79,"line":4230},[77,21822,18213],{"class":87},[77,21824,268],{"class":2123},[77,21826,21827],{"class":87}," p.m_Age;\n",[77,21829,21830,21832,21834,21837,21839],{"class":79,"line":4235},[77,21831,12142],{"class":87},[77,21833,3655],{"class":2123},[77,21835,21836],{"class":271}," \"Person的拷贝构造函数调用\"",[77,21838,3922],{"class":2123},[77,21840,11314],{"class":87},[77,21842,21843],{"class":79,"line":4240},[77,21844,4662],{"class":87},[77,21846,21847,21849],{"class":79,"line":4254},[77,21848,21022],{"class":83},[77,21850,4451],{"class":87},[77,21852,21853],{"class":79,"line":4259},[77,21854,4505],{"class":87},[77,21856,21857,21859,21861,21863,21865],{"class":79,"line":5052},[77,21858,12142],{"class":87},[77,21860,3655],{"class":2123},[77,21862,21037],{"class":271},[77,21864,3922],{"class":2123},[77,21866,11314],{"class":87},[77,21868,21869],{"class":79,"line":5066},[77,21870,4662],{"class":87},[77,21872,21873,21875],{"class":79,"line":5074},[77,21874,4460],{"class":2123},[77,21876,18136],{"class":87},[77,21878,21879],{"class":79,"line":5079},[77,21880,6470],{"class":87},[77,21882,21883],{"class":79,"line":5085},[77,21884,21697],{"class":323},[77,21886,21887,21889,21891],{"class":79,"line":5091},[77,21888,7839],{"class":2123},[77,21890,8063],{"class":83},[77,21892,4451],{"class":87},[77,21894,21895],{"class":79,"line":5096},[77,21896,4023],{"class":87},[77,21898,21899,21902,21904,21906,21908],{"class":79,"line":10422},[77,21900,21901],{"class":87},"    Person ",[77,21903,9605],{"class":83},[77,21905,2622],{"class":87},[77,21907,3313],{"class":94},[77,21909,5194],{"class":87},[77,21911,21912,21914,21916],{"class":79,"line":10446},[77,21913,21901],{"class":87},[77,21915,9508],{"class":83},[77,21917,19985],{"class":87},[77,21919,21920,21922,21924,21927,21929,21932,21934],{"class":79,"line":10451},[77,21921,4028],{"class":87},[77,21923,3655],{"class":2123},[77,21925,21926],{"class":271},"\"P2的年龄为：\"",[77,21928,3655],{"class":2123},[77,21930,21931],{"class":87},"p2.m_Age",[77,21933,3655],{"class":2123},[77,21935,3677],{"class":87},[77,21937,21938],{"class":79,"line":10457},[77,21939,110],{"class":87},[77,21941,21942],{"class":79,"line":10484},[77,21943,21944],{"class":323},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[77,21946,21947],{"class":79,"line":10489},[77,21948,21949],{"class":323},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[77,21951,21952,21954,21957,21959,21961,21963],{"class":79,"line":10495},[77,21953,7839],{"class":2123},[77,21955,21956],{"class":83}," doWork",[77,21958,2622],{"class":87},[77,21960,21516],{"class":83},[77,21962,9300],{"class":7691},[77,21964,2628],{"class":87},[77,21966,21967],{"class":79,"line":10507},[77,21968,4023],{"class":87},[77,21970,21971,21973,21975,21978,21980],{"class":79,"line":10519},[77,21972,9004],{"class":87},[77,21974,3655],{"class":2123},[77,21976,21977],{"class":271}," \"doWork函数调用\"",[77,21979,3922],{"class":2123},[77,21981,11314],{"class":87},[77,21983,21984],{"class":79,"line":10531},[77,21985,110],{"class":87},[77,21987,21988,21990,21992],{"class":79,"line":12189},[77,21989,7839],{"class":2123},[77,21991,8132],{"class":83},[77,21993,4451],{"class":87},[77,21995,21996],{"class":79,"line":12214},[77,21997,4023],{"class":87},[77,21999,22000],{"class":79,"line":12237},[77,22001,17784],{"class":87},[77,22003,22004,22007],{"class":79,"line":12261},[77,22005,22006],{"class":83},"    doWork",[77,22008,22009],{"class":87},"(p);\n",[77,22011,22012],{"class":79,"line":12266},[77,22013,110],{"class":87},[77,22015,22016],{"class":79,"line":12271},[77,22017,22018],{"class":323},"\u002F\u002F 3.以值方式返回局部对象\n",[77,22020,22021,22023,22026],{"class":79,"line":12276},[77,22022,21516],{"class":83},[77,22024,22025],{"class":83}," doWork2",[77,22027,4451],{"class":87},[77,22029,22030],{"class":79,"line":12285},[77,22031,4023],{"class":87},[77,22033,22034],{"class":79,"line":12290},[77,22035,21506],{"class":87},[77,22037,22038,22040,22042,22044,22046,22048,22050,22052,22054,22056,22058],{"class":79,"line":12296},[77,22039,4028],{"class":87},[77,22041,3655],{"class":2123},[77,22043,2622],{"class":87},[77,22045,2625],{"class":2123},[77,22047,8993],{"class":2123},[77,22049,3043],{"class":87},[77,22051,2967],{"class":2123},[77,22053,9605],{"class":87},[77,22055,3655],{"class":2123},[77,22057,3720],{"class":87},[77,22059,22060],{"class":323},"\u002F\u002F打印p1的地址\n",[77,22062,22063,22065,22068],{"class":79,"line":12317},[77,22064,6565],{"class":2123},[77,22066,22067],{"class":87}," p1;",[77,22069,22070],{"class":323},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[77,22072,22073],{"class":79,"line":12323},[77,22074,110],{"class":87},[77,22076,22077,22079,22081],{"class":79,"line":12337},[77,22078,7839],{"class":2123},[77,22080,8204],{"class":83},[77,22082,4451],{"class":87},[77,22084,22085],{"class":79,"line":12343},[77,22086,4023],{"class":87},[77,22088,22089,22092,22094,22096],{"class":79,"line":12370},[77,22090,22091],{"class":87},"    Person p ",[77,22093,268],{"class":2123},[77,22095,22025],{"class":83},[77,22097,8111],{"class":87},[77,22099,22100,22102,22104,22106,22108,22110,22112,22114,22116,22118,22120],{"class":79,"line":12379},[77,22101,4028],{"class":87},[77,22103,3655],{"class":2123},[77,22105,2622],{"class":87},[77,22107,2625],{"class":2123},[77,22109,8993],{"class":2123},[77,22111,3043],{"class":87},[77,22113,2967],{"class":2123},[77,22115,24],{"class":87},[77,22117,3655],{"class":2123},[77,22119,3720],{"class":87},[77,22121,22122],{"class":323},"\u002F\u002F打印p的地址\n",[77,22124,22125],{"class":79,"line":12385},[77,22126,110],{"class":87},[77,22128,22129],{"class":79,"line":12393},[77,22130,4875],{"emptyLinePlaceholder":2549},[77,22132,22133],{"class":79,"line":12398},[77,22134,4875],{"emptyLinePlaceholder":2549},[77,22136,22137,22139,22141],{"class":79,"line":19074},[77,22138,2625],{"class":2123},[77,22140,4448],{"class":83},[77,22142,4451],{"class":87},[77,22144,22145],{"class":79,"line":19080},[77,22146,4023],{"class":87},[77,22148,22149],{"class":79,"line":19103},[77,22150,22151],{"class":323},"    \u002F\u002F test01();\n",[77,22153,22154],{"class":79,"line":19109},[77,22155,22156],{"class":323},"    \u002F\u002F test02();\n",[77,22158,22159,22162],{"class":79,"line":19132},[77,22160,22161],{"class":83},"    test03",[77,22163,8111],{"class":87},[77,22165,22166],{"class":79,"line":19146},[77,22167,22168],{"class":323},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[77,22170,22171],{"class":79,"line":19166},[77,22172,22173],{"class":323},"\u002F\u002F 输出结果如下：\n",[77,22175,22176],{"class":79,"line":19172},[77,22177,22178],{"class":323},"\u002F\u002F Person的默认构造函数调用\n",[77,22180,22181],{"class":79,"line":19183},[77,22182,22183],{"class":323},"\u002F\u002F 0x7fffffffceec\n",[77,22185,22186],{"class":79,"line":19206},[77,22187,22183],{"class":323},[77,22189,22190],{"class":79,"line":19228},[77,22191,22192],{"class":323},"\u002F\u002F Person的析构函数调用\n",[77,22194,22195],{"class":79,"line":19233},[77,22196,4875],{"emptyLinePlaceholder":2549},[77,22198,22199],{"class":79,"line":19239},[77,22200,22201],{"class":323},"\u002F\u002F 之前的输出结果如下：\n",[77,22203,22204],{"class":79,"line":19253},[77,22205,22178],{"class":323},[77,22207,22208],{"class":79,"line":19266},[77,22209,22210],{"class":323},"\u002F\u002F 地址\n",[77,22212,22213],{"class":79,"line":19271},[77,22214,22215],{"class":323},"\u002F\u002F Person的拷贝构造函数调用\n",[77,22217,22218],{"class":79,"line":19285},[77,22219,22192],{"class":323},[77,22221,22222],{"class":79,"line":19290},[77,22223,22210],{"class":323},[77,22225,22226],{"class":79,"line":19296},[77,22227,22228],{"class":323},"\u002F\u002F (这两次输出的地址也是不同的) \n",[77,22230,22231],{"class":79,"line":19301},[77,22232,22233],{"class":323},"\u002F\u002F Person的析构函数调用     \n",[77,22235,22236,22238,22240],{"class":79,"line":19315},[77,22237,6565],{"class":2123},[77,22239,6568],{"class":94},[77,22241,104],{"class":87},[77,22243,22244],{"class":79,"line":19320},[77,22245,110],{"class":87},[24,22247,22248],{},"简化版理解",[67,22250,22252],{"className":2610,"code":22251,"language":2612,"meta":72,"style":72},"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",[74,22253,22254,22262,22266,22272,22285,22296,22300,22312,22325,22333,22337,22353,22366,22375,22379,22384,22390,22403,22407,22411,22418,22422,22426,22431,22439,22443,22459,22472,22485,22489,22494,22502,22506,22510,22515,22520,22536,22544,22551,22557,22561,22565,22570,22578,22582,22586,22609,22616,22620,22624,22632,22636,22646,22668,22672,22676,22680,22688,22692,22697,22702,22708,22712,22722,22726,22734],{"__ignoreMap":72},[77,22255,22256,22258,22260],{"class":79,"line":80},[77,22257,17166],{"class":2123},[77,22259,18040],{"class":83},[77,22261,88],{"class":87},[77,22263,22264],{"class":79,"line":91},[77,22265,17188],{"class":2123},[77,22267,22268,22270],{"class":79,"line":107},[77,22269,20989],{"class":83},[77,22271,13326],{"class":87},[77,22273,22274,22276,22278,22281,22283],{"class":79,"line":191},[77,22275,12142],{"class":87},[77,22277,3655],{"class":2123},[77,22279,22280],{"class":271}," \"无参构造函数!\"",[77,22282,3922],{"class":2123},[77,22284,11314],{"class":87},[77,22286,22287,22290,22292,22294],{"class":79,"line":1543},[77,22288,22289],{"class":87},"        mAge ",[77,22291,268],{"class":2123},[77,22293,6568],{"class":94},[77,22295,104],{"class":87},[77,22297,22298],{"class":79,"line":1549},[77,22299,4662],{"class":87},[77,22301,22302,22304,22306,22308,22310],{"class":79,"line":1566},[77,22303,20989],{"class":83},[77,22305,2622],{"class":87},[77,22307,2625],{"class":2123},[77,22309,18159],{"class":7691},[77,22311,14914],{"class":87},[77,22313,22314,22316,22318,22321,22323],{"class":79,"line":1572},[77,22315,12142],{"class":87},[77,22317,3655],{"class":2123},[77,22319,22320],{"class":271}," \"有参构造函数!\"",[77,22322,3922],{"class":2123},[77,22324,11314],{"class":87},[77,22326,22327,22329,22331],{"class":79,"line":1589},[77,22328,22289],{"class":87},[77,22330,268],{"class":2123},[77,22332,10271],{"class":87},[77,22334,22335],{"class":79,"line":1595},[77,22336,4662],{"class":87},[77,22338,22339,22341,22343,22345,22347,22349,22351],{"class":79,"line":4088},[77,22340,20989],{"class":83},[77,22342,2622],{"class":87},[77,22344,9267],{"class":2123},[77,22346,18040],{"class":83},[77,22348,2967],{"class":2123},[77,22350,9300],{"class":7691},[77,22352,14914],{"class":87},[77,22354,22355,22357,22359,22362,22364],{"class":79,"line":4093},[77,22356,12142],{"class":87},[77,22358,3655],{"class":2123},[77,22360,22361],{"class":271}," \"拷贝构造函数!\"",[77,22363,3922],{"class":2123},[77,22365,11314],{"class":87},[77,22367,22368,22370,22372],{"class":79,"line":4099},[77,22369,22289],{"class":87},[77,22371,268],{"class":2123},[77,22373,22374],{"class":87}," p.mAge;\n",[77,22376,22377],{"class":79,"line":4104},[77,22378,4662],{"class":87},[77,22380,22381],{"class":79,"line":4118},[77,22382,22383],{"class":323},"    \u002F\u002F析构函数在释放内存之前调用\n",[77,22385,22386,22388],{"class":79,"line":4123},[77,22387,21022],{"class":83},[77,22389,13326],{"class":87},[77,22391,22392,22394,22396,22399,22401],{"class":79,"line":4129},[77,22393,12142],{"class":87},[77,22395,3655],{"class":2123},[77,22397,22398],{"class":271}," \"析构函数!\"",[77,22400,3922],{"class":2123},[77,22402,11314],{"class":87},[77,22404,22405],{"class":79,"line":4150},[77,22406,4662],{"class":87},[77,22408,22409],{"class":79,"line":4155},[77,22410,17188],{"class":2123},[77,22412,22413,22415],{"class":79,"line":4169},[77,22414,4460],{"class":2123},[77,22416,22417],{"class":87}," mAge;\n",[77,22419,22420],{"class":79,"line":4174},[77,22421,6470],{"class":87},[77,22423,22424],{"class":79,"line":4203},[77,22425,4875],{"emptyLinePlaceholder":2549},[77,22427,22428],{"class":79,"line":4208},[77,22429,22430],{"class":323},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[77,22432,22433,22435,22437],{"class":79,"line":4225},[77,22434,7839],{"class":2123},[77,22436,8063],{"class":83},[77,22438,13326],{"class":87},[77,22440,22441],{"class":79,"line":4230},[77,22442,4875],{"emptyLinePlaceholder":2549},[77,22444,22445,22447,22450,22452,22454,22456],{"class":79,"line":4235},[77,22446,21901],{"class":87},[77,22448,22449],{"class":83},"man",[77,22451,2622],{"class":87},[77,22453,2925],{"class":94},[77,22455,8441],{"class":87},[77,22457,22458],{"class":323}," \u002F\u002Fp对象已经创建完毕\n",[77,22460,22461,22463,22466,22469],{"class":79,"line":4240},[77,22462,21901],{"class":87},[77,22464,22465],{"class":83},"newman",[77,22467,22468],{"class":87},"(man);",[77,22470,22471],{"class":323}," \u002F\u002F调用拷贝构造函数\n",[77,22473,22474,22477,22479,22482],{"class":79,"line":4254},[77,22475,22476],{"class":87},"    Person newman2 ",[77,22478,268],{"class":2123},[77,22480,22481],{"class":87}," man;",[77,22483,22484],{"class":323}," \u002F\u002F拷贝构造\n",[77,22486,22487],{"class":79,"line":4259},[77,22488,4875],{"emptyLinePlaceholder":2549},[77,22490,22491],{"class":79,"line":5052},[77,22492,22493],{"class":323},"    \u002F\u002FPerson newman3;\n",[77,22495,22496,22499],{"class":79,"line":5066},[77,22497,22498],{"class":323},"    \u002F\u002Fnewman3 = man;",[77,22500,22501],{"class":323}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[77,22503,22504],{"class":79,"line":5074},[77,22505,110],{"class":87},[77,22507,22508],{"class":79,"line":5079},[77,22509,4875],{"emptyLinePlaceholder":2549},[77,22511,22512],{"class":79,"line":5085},[77,22513,22514],{"class":323},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[77,22516,22517],{"class":79,"line":5091},[77,22518,22519],{"class":323},"\u002F\u002F相当于Person p1 = p;\n",[77,22521,22522,22524,22526,22528,22530,22533],{"class":79,"line":5096},[77,22523,7839],{"class":2123},[77,22525,21956],{"class":83},[77,22527,2622],{"class":87},[77,22529,21516],{"class":83},[77,22531,22532],{"class":7691}," p1",[77,22534,22535],{"class":87},") {}\n",[77,22537,22538,22540,22542],{"class":79,"line":10422},[77,22539,7839],{"class":2123},[77,22541,8132],{"class":83},[77,22543,13326],{"class":87},[77,22545,22546,22548],{"class":79,"line":10446},[77,22547,21074],{"class":87},[77,22549,22550],{"class":323}," \u002F\u002F无参构造函数\n",[77,22552,22553,22555],{"class":79,"line":10451},[77,22554,22006],{"class":83},[77,22556,22009],{"class":87},[77,22558,22559],{"class":79,"line":10457},[77,22560,110],{"class":87},[77,22562,22563],{"class":79,"line":10484},[77,22564,4875],{"emptyLinePlaceholder":2549},[77,22566,22567],{"class":79,"line":10489},[77,22568,22569],{"class":323},"\u002F\u002F3. 以值方式返回局部对象\n",[77,22571,22572,22574,22576],{"class":79,"line":10495},[77,22573,21516],{"class":83},[77,22575,22025],{"class":83},[77,22577,4451],{"class":87},[77,22579,22580],{"class":79,"line":10507},[77,22581,4023],{"class":87},[77,22583,22584],{"class":79,"line":10519},[77,22585,21506],{"class":87},[77,22587,22588,22590,22592,22594,22596,22598,22600,22602,22605,22607],{"class":79,"line":10531},[77,22589,9004],{"class":87},[77,22591,3655],{"class":2123},[77,22593,4134],{"class":87},[77,22595,2625],{"class":2123},[77,22597,8993],{"class":2123},[77,22599,3043],{"class":87},[77,22601,2967],{"class":2123},[77,22603,22604],{"class":87},"p1 ",[77,22606,3655],{"class":2123},[77,22608,11314],{"class":87},[77,22610,22611,22613],{"class":79,"line":12189},[77,22612,6565],{"class":2123},[77,22614,22615],{"class":87}," p1;\n",[77,22617,22618],{"class":79,"line":12214},[77,22619,110],{"class":87},[77,22621,22622],{"class":79,"line":12237},[77,22623,4875],{"emptyLinePlaceholder":2549},[77,22625,22626,22628,22630],{"class":79,"line":12261},[77,22627,7839],{"class":2123},[77,22629,8204],{"class":83},[77,22631,4451],{"class":87},[77,22633,22634],{"class":79,"line":12266},[77,22635,4023],{"class":87},[77,22637,22638,22640,22642,22644],{"class":79,"line":12271},[77,22639,22091],{"class":87},[77,22641,268],{"class":2123},[77,22643,22025],{"class":83},[77,22645,8111],{"class":87},[77,22647,22648,22650,22652,22654,22656,22658,22660,22662,22664,22666],{"class":79,"line":12276},[77,22649,9004],{"class":87},[77,22651,3655],{"class":2123},[77,22653,4134],{"class":87},[77,22655,2625],{"class":2123},[77,22657,8993],{"class":2123},[77,22659,3043],{"class":87},[77,22661,2967],{"class":2123},[77,22663,13921],{"class":87},[77,22665,3655],{"class":2123},[77,22667,11314],{"class":87},[77,22669,22670],{"class":79,"line":12285},[77,22671,110],{"class":87},[77,22673,22674],{"class":79,"line":12290},[77,22675,4875],{"emptyLinePlaceholder":2549},[77,22677,22678],{"class":79,"line":12296},[77,22679,4875],{"emptyLinePlaceholder":2549},[77,22681,22682,22684,22686],{"class":79,"line":12317},[77,22683,2625],{"class":2123},[77,22685,4448],{"class":83},[77,22687,13326],{"class":87},[77,22689,22690],{"class":79,"line":12323},[77,22691,4875],{"emptyLinePlaceholder":2549},[77,22693,22694],{"class":79,"line":12337},[77,22695,22696],{"class":323},"    \u002F\u002Ftest01();\n",[77,22698,22699],{"class":79,"line":12343},[77,22700,22701],{"class":323},"    \u002F\u002Ftest02();\n",[77,22703,22704,22706],{"class":79,"line":12370},[77,22705,22161],{"class":83},[77,22707,8111],{"class":87},[77,22709,22710],{"class":79,"line":12379},[77,22711,4875],{"emptyLinePlaceholder":2549},[77,22713,22714,22716,22718,22720],{"class":79,"line":12385},[77,22715,4778],{"class":83},[77,22717,2622],{"class":87},[77,22719,4783],{"class":271},[77,22721,5194],{"class":87},[77,22723,22724],{"class":79,"line":12393},[77,22725,4875],{"emptyLinePlaceholder":2549},[77,22727,22728,22730,22732],{"class":79,"line":12398},[77,22729,6565],{"class":2123},[77,22731,6568],{"class":94},[77,22733,104],{"class":87},[77,22735,22736],{"class":79,"line":19074},[77,22737,110],{"class":87},[19,22739,22741],{"id":22740},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[24,22743,22744],{},"默认情况下，c++编译器至少给一个类添加3个函数",[24,22746,22747],{},"1．默认构造函数(无参，函数体为空)",[24,22749,22750],{},"2．默认析构函数(无参，函数体为空)",[24,22752,22753],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[24,22755,22756],{},"构造函数调用规则如下：",[51,22758,22759,22762],{},[54,22760,22761],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[54,22763,22764],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[67,22766,22768],{"className":2610,"code":22767,"language":2612,"meta":72,"style":72},"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",[74,22769,22770,22778,22782,22787,22793,22805,22809,22814,22826,22835,22847,22851,22855,22871,22880,22892,22896,22900,22906,22918,22922,22926,22932,22936,22940,22948,22952,22964,22969,22977,22981,22999,23003,23007,23015,23019,23024,23032,23047,23060,23064,23069,23076,23092,23105,23109,23113,23121,23125,23131,23135,23145,23149,23157],{"__ignoreMap":72},[77,22771,22772,22774,22776],{"class":79,"line":80},[77,22773,17166],{"class":2123},[77,22775,18040],{"class":83},[77,22777,88],{"class":87},[77,22779,22780],{"class":79,"line":91},[77,22781,17188],{"class":2123},[77,22783,22784],{"class":79,"line":107},[77,22785,22786],{"class":323},"    \u002F\u002F无参（默认）构造函数\n",[77,22788,22789,22791],{"class":79,"line":191},[77,22790,20989],{"class":83},[77,22792,13326],{"class":87},[77,22794,22795,22797,22799,22801,22803],{"class":79,"line":1543},[77,22796,12142],{"class":87},[77,22798,3655],{"class":2123},[77,22800,22280],{"class":271},[77,22802,3922],{"class":2123},[77,22804,11314],{"class":87},[77,22806,22807],{"class":79,"line":1549},[77,22808,4662],{"class":87},[77,22810,22811],{"class":79,"line":1566},[77,22812,22813],{"class":323},"    \u002F\u002F有参构造函数\n",[77,22815,22816,22818,22820,22822,22824],{"class":79,"line":1572},[77,22817,20989],{"class":83},[77,22819,2622],{"class":87},[77,22821,2625],{"class":2123},[77,22823,3876],{"class":7691},[77,22825,14914],{"class":87},[77,22827,22828,22831,22833],{"class":79,"line":1589},[77,22829,22830],{"class":87},"        age ",[77,22832,268],{"class":2123},[77,22834,3910],{"class":87},[77,22836,22837,22839,22841,22843,22845],{"class":79,"line":1595},[77,22838,12142],{"class":87},[77,22840,3655],{"class":2123},[77,22842,22320],{"class":271},[77,22844,3922],{"class":2123},[77,22846,11314],{"class":87},[77,22848,22849],{"class":79,"line":4088},[77,22850,4662],{"class":87},[77,22852,22853],{"class":79,"line":4093},[77,22854,21344],{"class":323},[77,22856,22857,22859,22861,22863,22865,22867,22869],{"class":79,"line":4099},[77,22858,20989],{"class":83},[77,22860,2622],{"class":87},[77,22862,9267],{"class":2123},[77,22864,18040],{"class":83},[77,22866,2967],{"class":2123},[77,22868,9300],{"class":7691},[77,22870,14914],{"class":87},[77,22872,22873,22875,22877],{"class":79,"line":4104},[77,22874,22830],{"class":87},[77,22876,268],{"class":2123},[77,22878,22879],{"class":87}," p.age;\n",[77,22881,22882,22884,22886,22888,22890],{"class":79,"line":4118},[77,22883,12142],{"class":87},[77,22885,3655],{"class":2123},[77,22887,22361],{"class":271},[77,22889,3922],{"class":2123},[77,22891,11314],{"class":87},[77,22893,22894],{"class":79,"line":4123},[77,22895,4662],{"class":87},[77,22897,22898],{"class":79,"line":4129},[77,22899,21017],{"class":323},[77,22901,22902,22904],{"class":79,"line":4150},[77,22903,21022],{"class":83},[77,22905,13326],{"class":87},[77,22907,22908,22910,22912,22914,22916],{"class":79,"line":4155},[77,22909,12142],{"class":87},[77,22911,3655],{"class":2123},[77,22913,22398],{"class":271},[77,22915,3922],{"class":2123},[77,22917,11314],{"class":87},[77,22919,22920],{"class":79,"line":4169},[77,22921,4662],{"class":87},[77,22923,22924],{"class":79,"line":4174},[77,22925,17188],{"class":2123},[77,22927,22928,22930],{"class":79,"line":4203},[77,22929,4460],{"class":2123},[77,22931,10271],{"class":87},[77,22933,22934],{"class":79,"line":4208},[77,22935,6470],{"class":87},[77,22937,22938],{"class":79,"line":4225},[77,22939,4875],{"emptyLinePlaceholder":2549},[77,22941,22942,22944,22946],{"class":79,"line":4230},[77,22943,7839],{"class":2123},[77,22945,8063],{"class":83},[77,22947,4451],{"class":87},[77,22949,22950],{"class":79,"line":4235},[77,22951,4023],{"class":87},[77,22953,22954,22956,22958,22960,22962],{"class":79,"line":4240},[77,22955,21901],{"class":87},[77,22957,9605],{"class":83},[77,22959,2622],{"class":87},[77,22961,3263],{"class":94},[77,22963,5194],{"class":87},[77,22965,22966],{"class":79,"line":4254},[77,22967,22968],{"class":323},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[77,22970,22971,22973,22975],{"class":79,"line":4259},[77,22972,21901],{"class":87},[77,22974,9508],{"class":83},[77,22976,19985],{"class":87},[77,22978,22979],{"class":79,"line":5052},[77,22980,4875],{"emptyLinePlaceholder":2549},[77,22982,22983,22985,22987,22990,22992,22995,22997],{"class":79,"line":5066},[77,22984,9004],{"class":87},[77,22986,3655],{"class":2123},[77,22988,22989],{"class":271}," \"p2的年龄为： \"",[77,22991,3922],{"class":2123},[77,22993,22994],{"class":87}," p2.age ",[77,22996,3655],{"class":2123},[77,22998,11314],{"class":87},[77,23000,23001],{"class":79,"line":5074},[77,23002,110],{"class":87},[77,23004,23005],{"class":79,"line":5079},[77,23006,4875],{"emptyLinePlaceholder":2549},[77,23008,23009,23011,23013],{"class":79,"line":5085},[77,23010,7839],{"class":2123},[77,23012,8132],{"class":83},[77,23014,4451],{"class":87},[77,23016,23017],{"class":79,"line":5091},[77,23018,4023],{"class":87},[77,23020,23021],{"class":79,"line":5096},[77,23022,23023],{"class":323},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[77,23025,23026,23029],{"class":79,"line":10422},[77,23027,23028],{"class":87},"    Person p1;",[77,23030,23031],{"class":323}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[77,23033,23034,23036,23038,23040,23042,23044],{"class":79,"line":10446},[77,23035,21901],{"class":87},[77,23037,9508],{"class":83},[77,23039,2622],{"class":87},[77,23041,3059],{"class":94},[77,23043,8441],{"class":87},[77,23045,23046],{"class":323}," \u002F\u002F用户提供的有参\n",[77,23048,23049,23051,23054,23057],{"class":79,"line":10451},[77,23050,21901],{"class":87},[77,23052,23053],{"class":83},"p3",[77,23055,23056],{"class":87},"(p2);",[77,23058,23059],{"class":323}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[77,23061,23062],{"class":79,"line":10457},[77,23063,4875],{"emptyLinePlaceholder":2549},[77,23065,23066],{"class":79,"line":10484},[77,23067,23068],{"class":323},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[77,23070,23071,23074],{"class":79,"line":10489},[77,23072,23073],{"class":87},"    Person p4;",[77,23075,23031],{"class":323},[77,23077,23078,23080,23083,23085,23087,23089],{"class":79,"line":10495},[77,23079,21901],{"class":87},[77,23081,23082],{"class":83},"p5",[77,23084,2622],{"class":87},[77,23086,3059],{"class":94},[77,23088,8441],{"class":87},[77,23090,23091],{"class":323}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[77,23093,23094,23096,23099,23102],{"class":79,"line":10507},[77,23095,21901],{"class":87},[77,23097,23098],{"class":83},"p6",[77,23100,23101],{"class":87},"(p5);",[77,23103,23104],{"class":323}," \u002F\u002F用户自己提供拷贝构造\n",[77,23106,23107],{"class":79,"line":10519},[77,23108,110],{"class":87},[77,23110,23111],{"class":79,"line":10531},[77,23112,4875],{"emptyLinePlaceholder":2549},[77,23114,23115,23117,23119],{"class":79,"line":12189},[77,23116,2625],{"class":2123},[77,23118,4448],{"class":83},[77,23120,13326],{"class":87},[77,23122,23123],{"class":79,"line":12214},[77,23124,4875],{"emptyLinePlaceholder":2549},[77,23126,23127,23129],{"class":79,"line":12237},[77,23128,8108],{"class":83},[77,23130,8111],{"class":87},[77,23132,23133],{"class":79,"line":12261},[77,23134,4875],{"emptyLinePlaceholder":2549},[77,23136,23137,23139,23141,23143],{"class":79,"line":12266},[77,23138,4778],{"class":83},[77,23140,2622],{"class":87},[77,23142,4783],{"class":271},[77,23144,5194],{"class":87},[77,23146,23147],{"class":79,"line":12271},[77,23148,4875],{"emptyLinePlaceholder":2549},[77,23150,23151,23153,23155],{"class":79,"line":12276},[77,23152,6565],{"class":2123},[77,23154,6568],{"class":94},[77,23156,104],{"class":87},[77,23158,23159],{"class":79,"line":12285},[77,23160,110],{"class":87},[19,23162,23164],{"id":23163},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[24,23166,23167],{},"浅拷贝：简单的赋值拷贝操作",[24,23169,23170],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[67,23172,23174],{"className":2610,"code":23173,"language":2612,"meta":72,"style":72},"#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",[74,23175,23176,23182,23192,23198,23202,23206,23211,23217,23221,23234,23238,23242,23249,23253,23263,23278,23291,23295,23300,23305,23321,23325,23338,23343,23348,23353,23362,23367,23382,23386,23390,23394,23400,23404,23409,23424,23428,23439,23453,23457,23466,23470,23476,23488,23492,23500,23504,23521,23552,23560,23588,23592,23596,23604,23608,23614],{"__ignoreMap":72},[77,23177,23178,23180],{"class":79,"line":80},[77,23179,4425],{"class":2123},[77,23181,4428],{"class":271},[77,23183,23184,23186,23188,23190],{"class":79,"line":91},[77,23185,4433],{"class":2123},[77,23187,4436],{"class":2123},[77,23189,4439],{"class":83},[77,23191,104],{"class":87},[77,23193,23194,23196],{"class":79,"line":107},[77,23195,17166],{"class":2123},[77,23197,17642],{"class":83},[77,23199,23200],{"class":79,"line":191},[77,23201,4023],{"class":87},[77,23203,23204],{"class":79,"line":1543},[77,23205,17188],{"class":2123},[77,23207,23208],{"class":79,"line":1549},[77,23209,23210],{"class":323},"    \u002F\u002F默认构造函数\n",[77,23212,23213,23215],{"class":79,"line":1566},[77,23214,20989],{"class":83},[77,23216,4451],{"class":87},[77,23218,23219],{"class":79,"line":1572},[77,23220,4505],{"class":87},[77,23222,23223,23225,23227,23230,23232],{"class":79,"line":1589},[77,23224,5926],{"class":87},[77,23226,3655],{"class":2123},[77,23228,23229],{"class":271},"\"默认构造函数\"",[77,23231,3655],{"class":2123},[77,23233,3677],{"class":87},[77,23235,23236],{"class":79,"line":1595},[77,23237,4662],{"class":87},[77,23239,23240],{"class":79,"line":4088},[77,23241,22813],{"class":323},[77,23243,23244,23246],{"class":79,"line":4093},[77,23245,21022],{"class":83},[77,23247,23248],{"class":87},"(int age,int height)\n",[77,23250,23251],{"class":79,"line":4099},[77,23252,4505],{"class":87},[77,23254,23255,23258,23260],{"class":79,"line":4104},[77,23256,23257],{"class":87},"        m_Age",[77,23259,268],{"class":2123},[77,23261,23262],{"class":87},"age;\n",[77,23264,23265,23268,23270,23272,23275],{"class":79,"line":4118},[77,23266,23267],{"class":87},"        m_Height",[77,23269,14190],{"class":2123},[77,23271,4857],{"class":2123},[77,23273,23274],{"class":87},"(height);",[77,23276,23277],{"class":323},"\u002F\u002F放到堆区\n",[77,23279,23280,23282,23284,23287,23289],{"class":79,"line":4123},[77,23281,5926],{"class":87},[77,23283,3655],{"class":2123},[77,23285,23286],{"class":271},"\"有参构造函数\"",[77,23288,3655],{"class":2123},[77,23290,3677],{"class":87},[77,23292,23293],{"class":79,"line":4129},[77,23294,4662],{"class":87},[77,23296,23297],{"class":79,"line":4150},[77,23298,23299],{"class":323},"    \u002F\u002F深拷贝解决上述问题\n",[77,23301,23302],{"class":79,"line":4155},[77,23303,23304],{"class":323},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[77,23306,23307,23309,23311,23313,23315,23317,23319],{"class":79,"line":4169},[77,23308,20989],{"class":83},[77,23310,2622],{"class":87},[77,23312,9267],{"class":2123},[77,23314,18040],{"class":83},[77,23316,13057],{"class":2123},[77,23318,24],{"class":7691},[77,23320,2628],{"class":87},[77,23322,23323],{"class":79,"line":4174},[77,23324,4505],{"class":87},[77,23326,23327,23329,23331,23334,23336],{"class":79,"line":4203},[77,23328,5926],{"class":87},[77,23330,3655],{"class":2123},[77,23332,23333],{"class":271},"\"拷贝构造函数\"",[77,23335,3655],{"class":2123},[77,23337,3677],{"class":87},[77,23339,23340],{"class":79,"line":4208},[77,23341,23342],{"class":323},"        \u002F\u002F编译器默认的写如下注释部分\n",[77,23344,23345],{"class":79,"line":4225},[77,23346,23347],{"class":323},"        \u002F\u002Fm_Age=p.m_Age;\n",[77,23349,23350],{"class":79,"line":4230},[77,23351,23352],{"class":323},"        \u002F\u002Fm_Height=p.m_Height;\n",[77,23354,23355,23357,23359],{"class":79,"line":4235},[77,23356,23257],{"class":87},[77,23358,268],{"class":2123},[77,23360,23361],{"class":87},"p.m_Age;\n",[77,23363,23364],{"class":79,"line":4240},[77,23365,23366],{"class":323},"        \u002F\u002F深拷贝操作\n",[77,23368,23369,23371,23373,23375,23377,23379],{"class":79,"line":4254},[77,23370,23267],{"class":87},[77,23372,14190],{"class":2123},[77,23374,4857],{"class":2123},[77,23376,2622],{"class":87},[77,23378,3068],{"class":2123},[77,23380,23381],{"class":87},"p.m_Height);\n",[77,23383,23384],{"class":79,"line":4259},[77,23385,4662],{"class":87},[77,23387,23388],{"class":79,"line":5052},[77,23389,4875],{"emptyLinePlaceholder":2549},[77,23391,23392],{"class":79,"line":5066},[77,23393,21017],{"class":323},[77,23395,23396,23398],{"class":79,"line":5074},[77,23397,21022],{"class":83},[77,23399,4451],{"class":87},[77,23401,23402],{"class":79,"line":5079},[77,23403,4505],{"class":87},[77,23405,23406],{"class":79,"line":5085},[77,23407,23408],{"class":323},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[77,23410,23411,23413,23416,23419,23422],{"class":79,"line":5091},[77,23412,4972],{"class":2123},[77,23414,23415],{"class":87},"(m_Height ",[77,23417,23418],{"class":2123},"!=",[77,23420,23421],{"class":94}," NULL",[77,23423,2628],{"class":87},[77,23425,23426],{"class":79,"line":5096},[77,23427,4985],{"class":87},[77,23429,23430,23433,23436],{"class":79,"line":10422},[77,23431,23432],{"class":2123},"            delete",[77,23434,23435],{"class":87}," m_Height;",[77,23437,23438],{"class":323}," \u002F\u002F释放堆区内存\n",[77,23440,23441,23444,23446,23448,23450],{"class":79,"line":10446},[77,23442,23443],{"class":87},"            m_Height",[77,23445,268],{"class":2123},[77,23447,4867],{"class":94},[77,23449,2675],{"class":87},[77,23451,23452],{"class":323}," \u002F\u002F防止野指针\n",[77,23454,23455],{"class":79,"line":10451},[77,23456,5004],{"class":87},[77,23458,23459,23461,23463],{"class":79,"line":10457},[77,23460,5926],{"class":87},[77,23462,3655],{"class":2123},[77,23464,23465],{"class":271},"\"Person的析构函数调用\"\n",[77,23467,23468],{"class":79,"line":10484},[77,23469,4662],{"class":87},[77,23471,23472,23474],{"class":79,"line":10489},[77,23473,4460],{"class":2123},[77,23475,18136],{"class":87},[77,23477,23478,23480,23482,23485],{"class":79,"line":10495},[77,23479,4460],{"class":2123},[77,23481,8993],{"class":2123},[77,23483,23484],{"class":87},"m_Height;",[77,23486,23487],{"class":323}," \u002F\u002F定义一个指针，指向身高\n",[77,23489,23490],{"class":79,"line":10507},[77,23491,6470],{"class":87},[77,23493,23494,23496,23498],{"class":79,"line":10519},[77,23495,7839],{"class":2123},[77,23497,8063],{"class":83},[77,23499,4451],{"class":87},[77,23501,23502],{"class":79,"line":10531},[77,23503,4023],{"class":87},[77,23505,23506,23508,23510,23512,23514,23516,23519],{"class":79,"line":12189},[77,23507,21901],{"class":87},[77,23509,9605],{"class":83},[77,23511,2622],{"class":87},[77,23513,3263],{"class":94},[77,23515,2992],{"class":87},[77,23517,23518],{"class":94},"160",[77,23520,5194],{"class":87},[77,23522,23523,23525,23527,23530,23532,23535,23537,23540,23542,23545,23547,23549],{"class":79,"line":12214},[77,23524,4028],{"class":87},[77,23526,3655],{"class":2123},[77,23528,23529],{"class":271},"\"p1的年龄为:\"",[77,23531,3655],{"class":2123},[77,23533,23534],{"class":87},"p1.m_Age",[77,23536,3655],{"class":2123},[77,23538,23539],{"class":271},"\"身高为：\"",[77,23541,8894],{"class":2123},[77,23543,23544],{"class":87},"p1.m_Height",[77,23546,3655],{"class":2123},[77,23548,3720],{"class":87},[77,23550,23551],{"class":323},"  \u002F\u002F18\n",[77,23553,23554,23556,23558],{"class":79,"line":12237},[77,23555,21901],{"class":87},[77,23557,9508],{"class":83},[77,23559,19985],{"class":87},[77,23561,23562,23564,23566,23569,23571,23573,23575,23577,23579,23582,23584,23586],{"class":79,"line":12261},[77,23563,4028],{"class":87},[77,23565,3655],{"class":2123},[77,23567,23568],{"class":271},"\"p2的年龄为：\"",[77,23570,3655],{"class":2123},[77,23572,21931],{"class":87},[77,23574,3655],{"class":2123},[77,23576,23539],{"class":271},[77,23578,8894],{"class":2123},[77,23580,23581],{"class":87},"p2.m_Height",[77,23583,3655],{"class":2123},[77,23585,3720],{"class":87},[77,23587,23551],{"class":323},[77,23589,23590],{"class":79,"line":12266},[77,23591,15682],{"class":87},[77,23593,23594],{"class":79,"line":12271},[77,23595,110],{"class":87},[77,23597,23598,23600,23602],{"class":79,"line":12276},[77,23599,2625],{"class":2123},[77,23601,4448],{"class":83},[77,23603,4451],{"class":87},[77,23605,23606],{"class":79,"line":12285},[77,23607,4023],{"class":87},[77,23609,23610,23612],{"class":79,"line":12290},[77,23611,8108],{"class":83},[77,23613,8111],{"class":87},[77,23615,23616],{"class":79,"line":12296},[77,23617,110],{"class":87},[24,23619,23620],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[24,23622,23623],{},"浅拷贝带来的问题是堆区的内存重复释放",[24,23625,23626],{},[40,23627],{"alt":72,"src":23628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[24,23630,23631],{},"浅拷贝问题要使用深拷贝来解决",[24,23633,23634],{},[40,23635],{"alt":72,"src":23636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[24,23638,23639],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[19,23641,23643],{"id":23642},"_826初始化列表","8.2.6初始化列表",[24,23645,23646],{},"作用：初始化属性",[24,23648,7656],{},[67,23650,23653],{"className":23651,"code":23652,"language":7662},[7660],"构造函数():属性1(值1),属性2(值2).....{}\n",[74,23654,23652],{"__ignoreMap":72},[24,23656,23657],{},"例子",[67,23659,23661],{"className":2610,"code":23660,"language":2612,"meta":72,"style":72},"#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",[74,23662,23663,23669,23679,23685,23689,23694,23698,23703,23708,23713,23718,23723,23728,23732,23737,23742,23785,23794,23812,23830,23848,23852,23856,23863,23870,23877,23881,23885,23893,23897,23901,23921,23930,23934,23938,23948,23952,23960],{"__ignoreMap":72},[77,23664,23665,23667],{"class":79,"line":80},[77,23666,4425],{"class":2123},[77,23668,4428],{"class":271},[77,23670,23671,23673,23675,23677],{"class":79,"line":91},[77,23672,4433],{"class":2123},[77,23674,4436],{"class":2123},[77,23676,4439],{"class":83},[77,23678,104],{"class":87},[77,23680,23681,23683],{"class":79,"line":107},[77,23682,17166],{"class":2123},[77,23684,17642],{"class":83},[77,23686,23687],{"class":79,"line":191},[77,23688,4023],{"class":87},[77,23690,23691],{"class":79,"line":1543},[77,23692,23693],{"class":2123},"    public:\n",[77,23695,23696],{"class":79,"line":1549},[77,23697,4875],{"emptyLinePlaceholder":2549},[77,23699,23700],{"class":79,"line":1566},[77,23701,23702],{"class":323},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[77,23704,23705],{"class":79,"line":1572},[77,23706,23707],{"class":323},"    \u002F\u002FPerson(int a, int b, int c) {\n",[77,23709,23710],{"class":79,"line":1589},[77,23711,23712],{"class":323},"    \u002F\u002F  m_A = a;\n",[77,23714,23715],{"class":79,"line":1595},[77,23716,23717],{"class":323},"    \u002F\u002F  m_B = b;\n",[77,23719,23720],{"class":79,"line":4088},[77,23721,23722],{"class":323},"    \u002F\u002F  m_C = c;\n",[77,23724,23725],{"class":79,"line":4093},[77,23726,23727],{"class":323},"    \u002F\u002F}\n",[77,23729,23730],{"class":79,"line":4099},[77,23731,4875],{"emptyLinePlaceholder":2549},[77,23733,23734],{"class":79,"line":4104},[77,23735,23736],{"class":323},"    \u002F\u002F初始化列表方式初始化\n",[77,23738,23739],{"class":79,"line":4118},[77,23740,23741],{"class":323},"    \u002F\u002F使用有参构造函数\n",[77,23743,23744,23746,23748,23750,23752,23754,23756,23758,23760,23762,23764,23767,23770,23773,23776,23779,23782],{"class":79,"line":4123},[77,23745,20989],{"class":83},[77,23747,2622],{"class":87},[77,23749,2625],{"class":2123},[77,23751,3876],{"class":7691},[77,23753,680],{"class":87},[77,23755,2625],{"class":2123},[77,23757,5308],{"class":7691},[77,23759,680],{"class":87},[77,23761,2625],{"class":2123},[77,23763,5324],{"class":7691},[77,23765,23766],{"class":87},") :",[77,23768,23769],{"class":83},"m_A",[77,23771,23772],{"class":87},"(a), ",[77,23774,23775],{"class":83},"m_B",[77,23777,23778],{"class":87},"(b), ",[77,23780,23781],{"class":83},"m_C",[77,23783,23784],{"class":87},"(c) {}\n",[77,23786,23787,23789,23792],{"class":79,"line":4129},[77,23788,17381],{"class":2123},[77,23790,23791],{"class":83}," PrintPerson",[77,23793,13326],{"class":87},[77,23795,23796,23798,23800,23803,23805,23808,23810],{"class":79,"line":4150},[77,23797,12142],{"class":87},[77,23799,3655],{"class":2123},[77,23801,23802],{"class":271}," \"mA:\"",[77,23804,3922],{"class":2123},[77,23806,23807],{"class":87}," m_A ",[77,23809,3655],{"class":2123},[77,23811,11314],{"class":87},[77,23813,23814,23816,23818,23821,23823,23826,23828],{"class":79,"line":4155},[77,23815,12142],{"class":87},[77,23817,3655],{"class":2123},[77,23819,23820],{"class":271}," \"mB:\"",[77,23822,3922],{"class":2123},[77,23824,23825],{"class":87}," m_B ",[77,23827,3655],{"class":2123},[77,23829,11314],{"class":87},[77,23831,23832,23834,23836,23839,23841,23844,23846],{"class":79,"line":4169},[77,23833,12142],{"class":87},[77,23835,3655],{"class":2123},[77,23837,23838],{"class":271}," \"mC:\"",[77,23840,3922],{"class":2123},[77,23842,23843],{"class":87}," m_C ",[77,23845,3655],{"class":2123},[77,23847,11314],{"class":87},[77,23849,23850],{"class":79,"line":4174},[77,23851,4662],{"class":87},[77,23853,23854],{"class":79,"line":4203},[77,23855,17693],{"class":2123},[77,23857,23858,23860],{"class":79,"line":4208},[77,23859,4460],{"class":2123},[77,23861,23862],{"class":87}," m_A;\n",[77,23864,23865,23867],{"class":79,"line":4225},[77,23866,4460],{"class":2123},[77,23868,23869],{"class":87}," m_B;\n",[77,23871,23872,23874],{"class":79,"line":4230},[77,23873,4460],{"class":2123},[77,23875,23876],{"class":87}," m_C;\n",[77,23878,23879],{"class":79,"line":4235},[77,23880,6470],{"class":87},[77,23882,23883],{"class":79,"line":4240},[77,23884,4875],{"emptyLinePlaceholder":2549},[77,23886,23887,23889,23891],{"class":79,"line":4254},[77,23888,2625],{"class":2123},[77,23890,4448],{"class":83},[77,23892,8453],{"class":87},[77,23894,23895],{"class":79,"line":4259},[77,23896,4023],{"class":87},[77,23898,23899],{"class":79,"line":5052},[77,23900,4875],{"emptyLinePlaceholder":2549},[77,23902,23903,23905,23907,23909,23911,23913,23915,23917,23919],{"class":79,"line":5066},[77,23904,21901],{"class":87},[77,23906,24],{"class":83},[77,23908,2622],{"class":87},[77,23910,2120],{"class":94},[77,23912,680],{"class":87},[77,23914,2696],{"class":94},[77,23916,680],{"class":87},[77,23918,2690],{"class":94},[77,23920,5194],{"class":87},[77,23922,23923,23925,23928],{"class":79,"line":5074},[77,23924,18336],{"class":87},[77,23926,23927],{"class":83},"PrintPerson",[77,23929,8111],{"class":87},[77,23931,23932],{"class":79,"line":5079},[77,23933,4875],{"emptyLinePlaceholder":2549},[77,23935,23936],{"class":79,"line":5085},[77,23937,4875],{"emptyLinePlaceholder":2549},[77,23939,23940,23942,23944,23946],{"class":79,"line":5091},[77,23941,4778],{"class":83},[77,23943,2622],{"class":87},[77,23945,4783],{"class":271},[77,23947,5194],{"class":87},[77,23949,23950],{"class":79,"line":5096},[77,23951,4875],{"emptyLinePlaceholder":2549},[77,23953,23954,23956,23958],{"class":79,"line":10422},[77,23955,6565],{"class":2123},[77,23957,6568],{"class":94},[77,23959,104],{"class":87},[77,23961,23962],{"class":79,"line":10446},[77,23963,110],{"class":87},[24,23965,23966,23967,23970,23971],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[27,23968,23969],{},"参数名就是定义的对象属性","，",[27,23972,23973],{},"属性后面的值为有参构造函数的形参",[67,23975,23977],{"className":2610,"code":23976,"language":2612,"meta":72,"style":72},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[74,23978,23979],{"__ignoreMap":72},[77,23980,23981,23983,23985,23987,23990,23992,23995,23997,24000,24002,24005,24007,24010,24012],{"class":79,"line":80},[77,23982,21516],{"class":83},[77,23984,2622],{"class":87},[77,23986,2625],{"class":2123},[77,23988,23989],{"class":87}," a.",[77,23991,2625],{"class":2123},[77,23993,23994],{"class":87}," b,",[77,23996,2625],{"class":2123},[77,23998,23999],{"class":87}," b):",[77,24001,23769],{"class":83},[77,24003,24004],{"class":87},"(a),",[77,24006,23775],{"class":83},[77,24008,24009],{"class":87},"(c),",[77,24011,23781],{"class":83},[77,24013,24014],{"class":87},"(b) {}\n",[19,24016,24018],{"id":24017},"_827类对象作为类成员","8.2.7类对象作为类成员",[24,24020,24021],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[24,24023,17105],{},[67,24025,24027],{"className":2610,"code":24026,"language":2612,"meta":72,"style":72},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[74,24028,24029,24034,24039,24043,24048,24052],{"__ignoreMap":72},[77,24030,24031],{"class":79,"line":80},[77,24032,24033],{"class":87},"A{};\n",[77,24035,24036],{"class":79,"line":91},[77,24037,24038],{"class":87},"B\n",[77,24040,24041],{"class":79,"line":107},[77,24042,4023],{"class":87},[77,24044,24045],{"class":79,"line":191},[77,24046,24047],{"class":87},"    A a;\n",[77,24049,24050],{"class":79,"line":1543},[77,24051,110],{"class":87},[77,24053,24054],{"class":79,"line":1549},[77,24055,24056],{"class":323},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[24,24058,24059],{},"案例",[67,24061,24063],{"className":2610,"code":24062,"language":2612,"meta":72,"style":72},"\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",[74,24064,24065,24070,24077,24081,24086,24091,24105,24109,24119,24130,24134,24141,24145,24158,24162,24167,24172,24176,24182,24186,24190,24194,24225,24229,24240,24244,24250,24254,24267,24271,24275,24279,24284,24289,24293,24301,24305,24322,24341,24345,24353,24357,24363],{"__ignoreMap":72},[77,24066,24067],{"class":79,"line":80},[77,24068,24069],{"class":323},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[77,24071,24072,24074],{"class":79,"line":91},[77,24073,17166],{"class":2123},[77,24075,24076],{"class":83}," Phone\n",[77,24078,24079],{"class":79,"line":107},[77,24080,4023],{"class":87},[77,24082,24083],{"class":79,"line":191},[77,24084,24085],{"class":87},"public：\n",[77,24087,24088],{"class":79,"line":1543},[77,24089,24090],{"class":323},"    \u002F\u002F 赋值(构造函数)\n",[77,24092,24093,24096,24098,24100,24103],{"class":79,"line":1549},[77,24094,24095],{"class":83},"    Phone",[77,24097,2622],{"class":87},[77,24099,17389],{"class":83},[77,24101,24102],{"class":7691}," pName",[77,24104,2628],{"class":87},[77,24106,24107],{"class":79,"line":1566},[77,24108,4505],{"class":87},[77,24110,24111,24114,24116],{"class":79,"line":1572},[77,24112,24113],{"class":87},"        m_pName",[77,24115,268],{"class":2123},[77,24117,24118],{"class":87},"pName;\n",[77,24120,24121,24123,24125,24128],{"class":79,"line":1589},[77,24122,5926],{"class":87},[77,24124,3655],{"class":2123},[77,24126,24127],{"class":271},"\"Phone的构造函数调用\"",[77,24129,104],{"class":87},[77,24131,24132],{"class":79,"line":1595},[77,24133,4662],{"class":87},[77,24135,24136,24139],{"class":79,"line":4088},[77,24137,24138],{"class":83},"    ~Phone",[77,24140,4451],{"class":87},[77,24142,24143],{"class":79,"line":4093},[77,24144,4505],{"class":87},[77,24146,24147,24149,24151,24154,24156],{"class":79,"line":4099},[77,24148,5926],{"class":87},[77,24150,3655],{"class":2123},[77,24152,24153],{"class":271},"\"Phone析构函数调用\"",[77,24155,3655],{"class":2123},[77,24157,3677],{"class":87},[77,24159,24160],{"class":79,"line":4104},[77,24161,4662],{"class":87},[77,24163,24164],{"class":79,"line":4118},[77,24165,24166],{"class":323},"    \u002F\u002F\n",[77,24168,24169],{"class":79,"line":4123},[77,24170,24171],{"class":87},"    string m_PName;\n",[77,24173,24174],{"class":79,"line":4129},[77,24175,6470],{"class":87},[77,24177,24178,24180],{"class":79,"line":4150},[77,24179,17166],{"class":2123},[77,24181,17642],{"class":83},[77,24183,24184],{"class":79,"line":4155},[77,24185,4023],{"class":87},[77,24187,24188],{"class":79,"line":4169},[77,24189,17188],{"class":2123},[77,24191,24192],{"class":79,"line":4174},[77,24193,19464],{"class":323},[77,24195,24196,24198,24200,24202,24204,24206,24208,24211,24214,24216,24219,24222],{"class":79,"line":4203},[77,24197,20989],{"class":83},[77,24199,2622],{"class":87},[77,24201,17389],{"class":83},[77,24203,2495],{"class":7691},[77,24205,2992],{"class":87},[77,24207,17389],{"class":83},[77,24209,24210],{"class":7691}," pname",[77,24212,24213],{"class":87},"):",[77,24215,17481],{"class":83},[77,24217,24218],{"class":87},"(name),m_phone.",[77,24220,24221],{"class":83},"m_PName",[77,24223,24224],{"class":87},"(pname) \n",[77,24226,24227],{"class":79,"line":4208},[77,24228,4505],{"class":87},[77,24230,24231,24233,24235,24238],{"class":79,"line":4225},[77,24232,5926],{"class":87},[77,24234,3655],{"class":2123},[77,24236,24237],{"class":271},"\"Person的构造函数调用\"",[77,24239,104],{"class":87},[77,24241,24242],{"class":79,"line":4230},[77,24243,4662],{"class":87},[77,24245,24246,24248],{"class":79,"line":4235},[77,24247,21022],{"class":83},[77,24249,4451],{"class":87},[77,24251,24252],{"class":79,"line":4240},[77,24253,4505],{"class":87},[77,24255,24256,24258,24260,24263,24265],{"class":79,"line":4254},[77,24257,5926],{"class":87},[77,24259,3655],{"class":2123},[77,24261,24262],{"class":271},"\"Person析构函数调用\"",[77,24264,3655],{"class":2123},[77,24266,3677],{"class":87},[77,24268,24269],{"class":79,"line":4259},[77,24270,4662],{"class":87},[77,24272,24273],{"class":79,"line":5052},[77,24274,10254],{"class":323},[77,24276,24277],{"class":79,"line":5066},[77,24278,17364],{"class":87},[77,24280,24281],{"class":79,"line":5074},[77,24282,24283],{"class":323},"    \u002F\u002F手机\n",[77,24285,24286],{"class":79,"line":5079},[77,24287,24288],{"class":87},"    Phone m_Phone;\n",[77,24290,24291],{"class":79,"line":5085},[77,24292,6470],{"class":87},[77,24294,24295,24297,24299],{"class":79,"line":5091},[77,24296,7839],{"class":2123},[77,24298,8063],{"class":83},[77,24300,4451],{"class":87},[77,24302,24303],{"class":79,"line":5096},[77,24304,4023],{"class":87},[77,24306,24307,24309,24311,24313,24315,24317,24320],{"class":79,"line":10422},[77,24308,21901],{"class":87},[77,24310,24],{"class":83},[77,24312,2622],{"class":87},[77,24314,10390],{"class":271},[77,24316,2992],{"class":87},[77,24318,24319],{"class":271},"\"安卓\"",[77,24321,5194],{"class":87},[77,24323,24324,24326,24328,24331,24333,24336,24338],{"class":79,"line":10446},[77,24325,4028],{"class":87},[77,24327,3655],{"class":2123},[77,24329,24330],{"class":87},"p.Name",[77,24332,3655],{"class":2123},[77,24334,24335],{"class":271},"\"拿着：\"",[77,24337,3655],{"class":2123},[77,24339,24340],{"class":87},"p.m_phone.m_PName;\n",[77,24342,24343],{"class":79,"line":10451},[77,24344,110],{"class":87},[77,24346,24347,24349,24351],{"class":79,"line":10457},[77,24348,2625],{"class":2123},[77,24350,4448],{"class":83},[77,24352,4451],{"class":87},[77,24354,24355],{"class":79,"line":10484},[77,24356,4023],{"class":87},[77,24358,24359,24361],{"class":79,"line":10489},[77,24360,8108],{"class":83},[77,24362,8111],{"class":87},[77,24364,24365],{"class":79,"line":10495},[77,24366,110],{"class":87},[24,24368,1988],{},[67,24370,24372],{"className":2610,"code":24371,"language":2612,"meta":72,"style":72},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[74,24373,24374,24379],{"__ignoreMap":72},[77,24375,24376],{"class":79,"line":80},[77,24377,24378],{"class":323},"    \u002F\u002F不需要写这个：\n",[77,24380,24381],{"class":79,"line":91},[77,24382,24383],{"class":323},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[24,24385,24386],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[67,24388,24390],{"className":2610,"code":24389,"language":2612,"meta":72,"style":72},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[74,24391,24392],{"__ignoreMap":72},[77,24393,24394,24396,24399,24401,24404,24407],{"class":79,"line":80},[77,24395,21516],{"class":83},[77,24397,24398],{"class":87},"(string name.string pname):",[77,24400,17481],{"class":83},[77,24402,24403],{"class":87},"(name),",[77,24405,24406],{"class":83},"m_phone",[77,24408,24409],{"class":87},"(pname) {}\n",[24,24411,24412,24413,268,24416],{},"采用的是隐式转换法，实际为如下：\n",[74,24414,24415],{},"m_phone(pname)",[74,24417,24418],{},"Phone m_phone=pname",[24,24420,24421,24424],{},[27,24422,24423],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[24,24426,24427],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[19,24429,24431],{"id":24430},"_828静态对象","8.2.8静态对象",[24,24433,24434],{},"静态对象在成员对象前static，称为静态对象",[24,24436,24437],{},"静态对象分为两类：",[139,24439,24440],{},[54,24441,24442],{},"静态成员变量",[51,24444,24445,24448,24451],{},[54,24446,24447],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[54,24449,24450],{},"②在编译阶段分配内存",[54,24452,24453],{},"③类内声明，类外初始化",[139,24455,24456],{"start":91},[54,24457,24458],{},"静态成员函数",[51,24460,24461,24464],{},[54,24462,24463],{},"①所有对象共享同一个函数",[54,24465,24466],{},"②静态成员函数只能访问静态成员变量",[24468,24469,24471],"h4",{"id":24470},"_8281静态成员变量","8.2.8.1静态成员变量",[67,24473,24475],{"className":2610,"code":24474,"language":2612,"meta":72,"style":72},"#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",[74,24476,24477,24483,24493,24499,24503,24507,24512,24517,24522,24530,24534,24538,24542,24550,24554,24558,24563,24576,24580,24588,24592,24598],{"__ignoreMap":72},[77,24478,24479,24481],{"class":79,"line":80},[77,24480,4425],{"class":2123},[77,24482,4428],{"class":271},[77,24484,24485,24487,24489,24491],{"class":79,"line":91},[77,24486,4433],{"class":2123},[77,24488,4436],{"class":2123},[77,24490,4439],{"class":83},[77,24492,104],{"class":87},[77,24494,24495,24497],{"class":79,"line":107},[77,24496,17166],{"class":2123},[77,24498,17642],{"class":83},[77,24500,24501],{"class":79,"line":191},[77,24502,4023],{"class":87},[77,24504,24505],{"class":79,"line":1543},[77,24506,17188],{"class":2123},[77,24508,24509],{"class":79,"line":1549},[77,24510,24511],{"class":323},"    \u002F\u002F非静态成员变量\n",[77,24513,24514],{"class":79,"line":1566},[77,24515,24516],{"class":323},"    \u002F\u002F int m_A;\n",[77,24518,24519],{"class":79,"line":1572},[77,24520,24521],{"class":323},"    \u002F\u002F定义静态成员变量\n",[77,24523,24524,24526,24528],{"class":79,"line":1589},[77,24525,13493],{"class":2123},[77,24527,4857],{"class":2123},[77,24529,23862],{"class":87},[77,24531,24532],{"class":79,"line":1595},[77,24533,4875],{"emptyLinePlaceholder":2549},[77,24535,24536],{"class":79,"line":4088},[77,24537,4875],{"emptyLinePlaceholder":2549},[77,24539,24540],{"class":79,"line":4093},[77,24541,6470],{"class":87},[77,24543,24544,24546,24548],{"class":79,"line":4099},[77,24545,7839],{"class":2123},[77,24547,8063],{"class":83},[77,24549,4451],{"class":87},[77,24551,24552],{"class":79,"line":4104},[77,24553,4023],{"class":87},[77,24555,24556],{"class":79,"line":4118},[77,24557,17784],{"class":87},[77,24559,24560],{"class":79,"line":4123},[77,24561,24562],{"class":323},"    \u002F\u002F输出类成员变量这块内存\n",[77,24564,24565,24567,24569,24572,24574],{"class":79,"line":4129},[77,24566,4028],{"class":87},[77,24568,3655],{"class":2123},[77,24570,24571],{"class":87},"p.m_A",[77,24573,3655],{"class":2123},[77,24575,3677],{"class":87},[77,24577,24578],{"class":79,"line":4150},[77,24579,110],{"class":87},[77,24581,24582,24584,24586],{"class":79,"line":4155},[77,24583,2625],{"class":2123},[77,24585,4448],{"class":83},[77,24587,4451],{"class":87},[77,24589,24590],{"class":79,"line":4169},[77,24591,4023],{"class":87},[77,24593,24594,24596],{"class":79,"line":4174},[77,24595,8108],{"class":83},[77,24597,4451],{"class":87},[77,24599,24600],{"class":79,"line":4203},[77,24601,110],{"class":87},[24,24603,24604],{},"此时输出是报错的：无法解析外部命令",[24,24606,24607],{},"解决这一问题：必须用到类内声明，类外初始化操作",[67,24609,24611],{"className":2610,"code":24610,"language":2612,"meta":72,"style":72},"#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",[74,24612,24613,24619,24629,24635,24639,24643,24648,24656,24660,24665,24680,24688,24692,24696,24701,24706,24718,24723,24734,24739,24744,24757,24761,24769,24773,24779],{"__ignoreMap":72},[77,24614,24615,24617],{"class":79,"line":80},[77,24616,4425],{"class":2123},[77,24618,4428],{"class":271},[77,24620,24621,24623,24625,24627],{"class":79,"line":91},[77,24622,4433],{"class":2123},[77,24624,4436],{"class":2123},[77,24626,4439],{"class":83},[77,24628,104],{"class":87},[77,24630,24631,24633],{"class":79,"line":107},[77,24632,17166],{"class":2123},[77,24634,17642],{"class":83},[77,24636,24637],{"class":79,"line":191},[77,24638,4023],{"class":87},[77,24640,24641],{"class":79,"line":1543},[77,24642,17188],{"class":2123},[77,24644,24645],{"class":79,"line":1549},[77,24646,24647],{"class":323},"    \u002F\u002F类内声明\n",[77,24649,24650,24652,24654],{"class":79,"line":1566},[77,24651,13493],{"class":2123},[77,24653,4857],{"class":2123},[77,24655,23862],{"class":87},[77,24657,24658],{"class":79,"line":1572},[77,24659,6470],{"class":87},[77,24661,24662],{"class":79,"line":1589},[77,24663,24664],{"class":323},"\u002F\u002F类外初始化\n",[77,24666,24667,24669,24671,24674,24676,24678],{"class":79,"line":1595},[77,24668,2625],{"class":2123},[77,24670,18040],{"class":83},[77,24672,24673],{"class":87},"::m_A",[77,24675,268],{"class":2123},[77,24677,3059],{"class":94},[77,24679,104],{"class":87},[77,24681,24682,24684,24686],{"class":79,"line":4088},[77,24683,7839],{"class":2123},[77,24685,8063],{"class":83},[77,24687,4451],{"class":87},[77,24689,24690],{"class":79,"line":4093},[77,24691,4023],{"class":87},[77,24693,24694],{"class":79,"line":4099},[77,24695,17784],{"class":87},[77,24697,24698],{"class":79,"line":4104},[77,24699,24700],{"class":323},"    \u002F\u002F访问变量的原内存空间\n",[77,24702,24703],{"class":79,"line":4118},[77,24704,24705],{"class":323},"    \u002F\u002F100\n",[77,24707,24708,24710,24712,24714,24716],{"class":79,"line":4123},[77,24709,4028],{"class":87},[77,24711,3655],{"class":2123},[77,24713,24571],{"class":87},[77,24715,3655],{"class":2123},[77,24717,3677],{"class":87},[77,24719,24720],{"class":79,"line":4129},[77,24721,24722],{"class":87},"    Person p2;\n",[77,24724,24725,24728,24730,24732],{"class":79,"line":4150},[77,24726,24727],{"class":87},"    p2.m_A",[77,24729,268],{"class":2123},[77,24731,4198],{"class":94},[77,24733,104],{"class":87},[77,24735,24736],{"class":79,"line":4155},[77,24737,24738],{"class":323},"    \u002F\u002F继续访问这片空间\n",[77,24740,24741],{"class":79,"line":4169},[77,24742,24743],{"class":323},"    \u002F\u002F200\n",[77,24745,24746,24748,24750,24753,24755],{"class":79,"line":4174},[77,24747,4028],{"class":87},[77,24749,3655],{"class":2123},[77,24751,24752],{"class":87},"p2.m_A",[77,24754,3655],{"class":2123},[77,24756,3677],{"class":87},[77,24758,24759],{"class":79,"line":4203},[77,24760,110],{"class":87},[77,24762,24763,24765,24767],{"class":79,"line":4208},[77,24764,2625],{"class":2123},[77,24766,4448],{"class":83},[77,24768,4451],{"class":87},[77,24770,24771],{"class":79,"line":4225},[77,24772,4023],{"class":87},[77,24774,24775,24777],{"class":79,"line":4230},[77,24776,8108],{"class":83},[77,24778,8111],{"class":87},[77,24780,24781],{"class":79,"line":4235},[77,24782,110],{"class":87},[24,24784,24785],{},[27,24786,24787],{},"静态变量的访问",[67,24789,24791],{"className":2610,"code":24790,"language":2612,"meta":72,"style":72},"#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",[74,24792,24793,24799,24809,24815,24819,24823,24827,24835,24839,24844,24852,24856,24860,24874,24889,24897,24901,24906,24911,24916,24921,24933,24938,24943,24957,24974,24978,24986,24990,24996],{"__ignoreMap":72},[77,24794,24795,24797],{"class":79,"line":80},[77,24796,4425],{"class":2123},[77,24798,4428],{"class":271},[77,24800,24801,24803,24805,24807],{"class":79,"line":91},[77,24802,4433],{"class":2123},[77,24804,4436],{"class":2123},[77,24806,4439],{"class":83},[77,24808,104],{"class":87},[77,24810,24811,24813],{"class":79,"line":107},[77,24812,17166],{"class":2123},[77,24814,17642],{"class":83},[77,24816,24817],{"class":79,"line":191},[77,24818,4023],{"class":87},[77,24820,24821],{"class":79,"line":1543},[77,24822,17188],{"class":2123},[77,24824,24825],{"class":79,"line":1549},[77,24826,24647],{"class":323},[77,24828,24829,24831,24833],{"class":79,"line":1566},[77,24830,13493],{"class":2123},[77,24832,4857],{"class":2123},[77,24834,23862],{"class":87},[77,24836,24837],{"class":79,"line":1572},[77,24838,17693],{"class":2123},[77,24840,24841],{"class":79,"line":1589},[77,24842,24843],{"class":323},"    \u002F\u002F静态成员变量也是有访问权限的\n",[77,24845,24846,24848,24850],{"class":79,"line":1595},[77,24847,13493],{"class":2123},[77,24849,4857],{"class":2123},[77,24851,23869],{"class":87},[77,24853,24854],{"class":79,"line":4088},[77,24855,6470],{"class":87},[77,24857,24858],{"class":79,"line":4093},[77,24859,24664],{"class":323},[77,24861,24862,24864,24866,24868,24870,24872],{"class":79,"line":4099},[77,24863,2625],{"class":2123},[77,24865,18040],{"class":83},[77,24867,24673],{"class":87},[77,24869,268],{"class":2123},[77,24871,3059],{"class":94},[77,24873,104],{"class":87},[77,24875,24876,24878,24880,24883,24885,24887],{"class":79,"line":4104},[77,24877,2625],{"class":2123},[77,24879,18040],{"class":83},[77,24881,24882],{"class":87},"::m_B",[77,24884,268],{"class":2123},[77,24886,3313],{"class":94},[77,24888,104],{"class":87},[77,24890,24891,24893,24895],{"class":79,"line":4118},[77,24892,7839],{"class":2123},[77,24894,8132],{"class":83},[77,24896,4451],{"class":87},[77,24898,24899],{"class":79,"line":4123},[77,24900,4023],{"class":87},[77,24902,24903],{"class":79,"line":4129},[77,24904,24905],{"class":323},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[77,24907,24908],{"class":79,"line":4150},[77,24909,24910],{"class":323},"    \u002F\u002F静态成员变量有两种访问方式：\n",[77,24912,24913],{"class":79,"line":4155},[77,24914,24915],{"class":323},"    \u002F\u002F1.通过对象进行访问\n",[77,24917,24918],{"class":79,"line":4169},[77,24919,24920],{"class":87},"    Person p;  \n",[77,24922,24923,24925,24927,24929,24931],{"class":79,"line":4174},[77,24924,4028],{"class":87},[77,24926,3655],{"class":2123},[77,24928,24571],{"class":87},[77,24930,3655],{"class":2123},[77,24932,3677],{"class":87},[77,24934,24935],{"class":79,"line":4203},[77,24936,24937],{"class":323},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[77,24939,24940],{"class":79,"line":4208},[77,24941,24942],{"class":323},"    \u002F\u002F2.通过类名进行访问\n",[77,24944,24945,24947,24949,24951,24953,24955],{"class":79,"line":4225},[77,24946,4028],{"class":87},[77,24948,3655],{"class":2123},[77,24950,21516],{"class":83},[77,24952,24673],{"class":87},[77,24954,3655],{"class":2123},[77,24956,3677],{"class":87},[77,24958,24959,24961,24963,24965,24967,24969,24971],{"class":79,"line":4230},[77,24960,4028],{"class":87},[77,24962,3655],{"class":2123},[77,24964,21516],{"class":83},[77,24966,24882],{"class":87},[77,24968,3655],{"class":2123},[77,24970,3720],{"class":87},[77,24972,24973],{"class":323}," \u002F\u002F没有访问权限，报错\n",[77,24975,24976],{"class":79,"line":4235},[77,24977,110],{"class":87},[77,24979,24980,24982,24984],{"class":79,"line":4240},[77,24981,2625],{"class":2123},[77,24983,4448],{"class":83},[77,24985,4451],{"class":87},[77,24987,24988],{"class":79,"line":4254},[77,24989,4023],{"class":87},[77,24991,24992,24994],{"class":79,"line":4259},[77,24993,8177],{"class":83},[77,24995,8111],{"class":87},[77,24997,24998],{"class":79,"line":5052},[77,24999,110],{"class":87},[24468,25001,25003],{"id":25002},"_8282静态成员函数","8.2.8.2静态成员函数",[24,25005,25006],{},"1.静态成员函数定义与访问",[67,25008,25010],{"className":2610,"code":25009,"language":2612,"meta":72,"style":72},"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",[74,25011,25012,25018,25022,25026,25031,25042,25046,25060,25064,25068,25076,25080,25085,25090,25094,25102,25107,25117],{"__ignoreMap":72},[77,25013,25014,25016],{"class":79,"line":80},[77,25015,17166],{"class":2123},[77,25017,17642],{"class":83},[77,25019,25020],{"class":79,"line":91},[77,25021,4023],{"class":87},[77,25023,25024],{"class":79,"line":107},[77,25025,17188],{"class":2123},[77,25027,25028],{"class":79,"line":191},[77,25029,25030],{"class":323},"    \u002F\u002F在公共权限下定义静态成员函数\n",[77,25032,25033,25035,25038,25040],{"class":79,"line":1543},[77,25034,13493],{"class":2123},[77,25036,25037],{"class":2123}," void",[77,25039,13858],{"class":83},[77,25041,4451],{"class":87},[77,25043,25044],{"class":79,"line":1549},[77,25045,4505],{"class":87},[77,25047,25048,25051,25053,25056,25058],{"class":79,"line":1566},[77,25049,25050],{"class":87},"        coout",[77,25052,3655],{"class":2123},[77,25054,25055],{"class":271},"\"静态成员函数的调用\"",[77,25057,3655],{"class":2123},[77,25059,3677],{"class":87},[77,25061,25062],{"class":79,"line":1572},[77,25063,4662],{"class":87},[77,25065,25066],{"class":79,"line":1589},[77,25067,6470],{"class":87},[77,25069,25070,25072,25074],{"class":79,"line":1595},[77,25071,7839],{"class":2123},[77,25073,8063],{"class":83},[77,25075,4451],{"class":87},[77,25077,25078],{"class":79,"line":4088},[77,25079,4023],{"class":87},[77,25081,25082],{"class":79,"line":4093},[77,25083,25084],{"class":323},"    \u002F\u002F静态成员函数的调用方式:\n",[77,25086,25087],{"class":79,"line":4099},[77,25088,25089],{"class":323},"    \u002F\u002F1.通过对象访问\n",[77,25091,25092],{"class":79,"line":4104},[77,25093,17784],{"class":87},[77,25095,25096,25098,25100],{"class":79,"line":4118},[77,25097,18336],{"class":87},[77,25099,14024],{"class":83},[77,25101,8111],{"class":87},[77,25103,25104],{"class":79,"line":4123},[77,25105,25106],{"class":323},"    \u002F\u002F2.通过类名访问\n",[77,25108,25109,25111,25113,25115],{"class":79,"line":4129},[77,25110,20989],{"class":83},[77,25112,20202],{"class":87},[77,25114,14024],{"class":83},[77,25116,8111],{"class":87},[77,25118,25119],{"class":79,"line":4150},[77,25120,110],{"class":87},[139,25122,25123],{"start":91},[54,25124,25125],{},"静态成员函数只能访问静态成员变量",[67,25127,25129],{"className":2610,"code":25128,"language":2612,"meta":72,"style":72},"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",[74,25130,25131,25137,25141,25145,25149,25159,25163,25177,25182,25194,25198,25209,25219,25223,25227,25231,25241,25245,25258,25262,25266,25270,25274,25288,25296,25300,25304,25308,25312,25320,25324,25334,25339,25343,25351,25355,25361],{"__ignoreMap":72},[77,25132,25133,25135],{"class":79,"line":80},[77,25134,17166],{"class":2123},[77,25136,17642],{"class":83},[77,25138,25139],{"class":79,"line":91},[77,25140,4023],{"class":87},[77,25142,25143],{"class":79,"line":107},[77,25144,17188],{"class":2123},[77,25146,25147],{"class":79,"line":191},[77,25148,25030],{"class":323},[77,25150,25151,25153,25155,25157],{"class":79,"line":1543},[77,25152,13493],{"class":2123},[77,25154,25037],{"class":2123},[77,25156,13858],{"class":83},[77,25158,4451],{"class":87},[77,25160,25161],{"class":79,"line":1549},[77,25162,4505],{"class":87},[77,25164,25165,25168,25170,25172,25174],{"class":79,"line":1566},[77,25166,25167],{"class":87},"        m_A",[77,25169,268],{"class":2123},[77,25171,2925],{"class":94},[77,25173,2675],{"class":87},[77,25175,25176],{"class":323}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[77,25178,25179],{"class":79,"line":1572},[77,25180,25181],{"class":323},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[77,25183,25184,25186,25188,25190,25192],{"class":79,"line":1589},[77,25185,25050],{"class":87},[77,25187,3655],{"class":2123},[77,25189,25055],{"class":271},[77,25191,3655],{"class":2123},[77,25193,3677],{"class":87},[77,25195,25196],{"class":79,"line":1595},[77,25197,4662],{"class":87},[77,25199,25200,25202,25204,25206],{"class":79,"line":4088},[77,25201,13493],{"class":2123},[77,25203,4857],{"class":2123},[77,25205,17919],{"class":87},[77,25207,25208],{"class":323}," \u002F\u002F静态成员变量\n",[77,25210,25211,25213,25216],{"class":79,"line":4093},[77,25212,4460],{"class":2123},[77,25214,25215],{"class":87}," m_B;",[77,25217,25218],{"class":323}," \u002F\u002F非静态成员变量\n",[77,25220,25221],{"class":79,"line":4099},[77,25222,4875],{"emptyLinePlaceholder":2549},[77,25224,25225],{"class":79,"line":4104},[77,25226,17693],{"class":2123},[77,25228,25229],{"class":79,"line":4118},[77,25230,24843],{"class":323},[77,25232,25233,25235,25237,25239],{"class":79,"line":4123},[77,25234,13493],{"class":2123},[77,25236,25037],{"class":2123},[77,25238,16090],{"class":83},[77,25240,4451],{"class":87},[77,25242,25243],{"class":79,"line":4129},[77,25244,4505],{"class":87},[77,25246,25247,25249,25251,25254,25256],{"class":79,"line":4150},[77,25248,5926],{"class":87},[77,25250,3655],{"class":2123},[77,25252,25253],{"class":271},"\"这是私有权限下的静态函数调用\"",[77,25255,3655],{"class":2123},[77,25257,3677],{"class":87},[77,25259,25260],{"class":79,"line":4155},[77,25261,4662],{"class":87},[77,25263,25264],{"class":79,"line":4169},[77,25265,4875],{"emptyLinePlaceholder":2549},[77,25267,25268],{"class":79,"line":4174},[77,25269,4875],{"emptyLinePlaceholder":2549},[77,25271,25272],{"class":79,"line":4203},[77,25273,6470],{"class":87},[77,25275,25276,25278,25280,25282,25284,25286],{"class":79,"line":4208},[77,25277,2625],{"class":2123},[77,25279,18040],{"class":83},[77,25281,24673],{"class":87},[77,25283,268],{"class":2123},[77,25285,1939],{"class":94},[77,25287,104],{"class":87},[77,25289,25290,25292,25294],{"class":79,"line":4225},[77,25291,7839],{"class":2123},[77,25293,8063],{"class":83},[77,25295,4451],{"class":87},[77,25297,25298],{"class":79,"line":4230},[77,25299,4023],{"class":87},[77,25301,25302],{"class":79,"line":4235},[77,25303,25084],{"class":323},[77,25305,25306],{"class":79,"line":4240},[77,25307,25089],{"class":323},[77,25309,25310],{"class":79,"line":4254},[77,25311,17784],{"class":87},[77,25313,25314,25316,25318],{"class":79,"line":4259},[77,25315,18336],{"class":87},[77,25317,14024],{"class":83},[77,25319,8111],{"class":87},[77,25321,25322],{"class":79,"line":5052},[77,25323,25106],{"class":323},[77,25325,25326,25328,25330,25332],{"class":79,"line":5066},[77,25327,20989],{"class":83},[77,25329,20202],{"class":87},[77,25331,14024],{"class":83},[77,25333,8111],{"class":87},[77,25335,25336],{"class":79,"line":5074},[77,25337,25338],{"class":323},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[77,25340,25341],{"class":79,"line":5079},[77,25342,110],{"class":87},[77,25344,25345,25347,25349],{"class":79,"line":5085},[77,25346,2625],{"class":2123},[77,25348,4448],{"class":83},[77,25350,4451],{"class":87},[77,25352,25353],{"class":79,"line":5091},[77,25354,4023],{"class":87},[77,25356,25357,25359],{"class":79,"line":5096},[77,25358,8108],{"class":83},[77,25360,8111],{"class":87},[77,25362,25363],{"class":79,"line":10422},[77,25364,110],{"class":87},[19,25366,25368],{"id":25367},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24468,25370,25372],{"id":25371},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[24,25374,25375],{},"在c++中，类内的成员变量和成员函数分开存储",[24,25377,25378],{},"只有非静态成员变量才属于类的对象上",[406,25380,25382],{"id":25381},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[67,25384,25386],{"className":2610,"code":25385,"language":2612,"meta":72,"style":72},"#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",[74,25387,25388,25395,25405,25411,25415,25419,25423,25431,25435,25439,25462,25466,25474,25478,25484],{"__ignoreMap":72},[77,25389,25390,25392],{"class":79,"line":80},[77,25391,4425],{"class":2123},[77,25393,25394],{"class":271},"\u003Ciostraem>\n",[77,25396,25397,25399,25401,25403],{"class":79,"line":91},[77,25398,4433],{"class":2123},[77,25400,4436],{"class":2123},[77,25402,4439],{"class":83},[77,25404,104],{"class":87},[77,25406,25407,25409],{"class":79,"line":107},[77,25408,17166],{"class":2123},[77,25410,17642],{"class":83},[77,25412,25413],{"class":79,"line":191},[77,25414,4023],{"class":87},[77,25416,25417],{"class":79,"line":1543},[77,25418,4875],{"emptyLinePlaceholder":2549},[77,25420,25421],{"class":79,"line":1549},[77,25422,6470],{"class":87},[77,25424,25425,25427,25429],{"class":79,"line":1566},[77,25426,7839],{"class":2123},[77,25428,8063],{"class":83},[77,25430,4451],{"class":87},[77,25432,25433],{"class":79,"line":1572},[77,25434,4023],{"class":87},[77,25436,25437],{"class":79,"line":1589},[77,25438,17784],{"class":87},[77,25440,25441,25443,25445,25448,25450,25453,25455,25457,25459],{"class":79,"line":1595},[77,25442,4028],{"class":87},[77,25444,3655],{"class":2123},[77,25446,25447],{"class":271},"\"size of p=\"",[77,25449,3655],{"class":2123},[77,25451,25452],{"class":83},"sizeoif",[77,25454,9014],{"class":87},[77,25456,3655],{"class":2123},[77,25458,3720],{"class":87},[77,25460,25461],{"class":323}," \u002F\u002F查看这个空类的占用的内存空间\n",[77,25463,25464],{"class":79,"line":4088},[77,25465,110],{"class":87},[77,25467,25468,25470,25472],{"class":79,"line":4093},[77,25469,2625],{"class":2123},[77,25471,4448],{"class":83},[77,25473,4451],{"class":87},[77,25475,25476],{"class":79,"line":4099},[77,25477,4023],{"class":87},[77,25479,25480,25482],{"class":79,"line":4104},[77,25481,8108],{"class":83},[77,25483,8111],{"class":87},[77,25485,25486],{"class":79,"line":4118},[77,25487,110],{"class":87},[24,25489,25490],{},"输出结果为：size of p=1",[24,25492,25493],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[24,25495,25496],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[406,25498,25500],{"id":25499},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[67,25502,25504],{"className":2610,"code":25503,"language":2612,"meta":72,"style":72},"#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",[74,25505,25506,25512,25522,25530,25534,25543,25547,25555,25559,25563,25582,25586,25590,25598,25602,25608],{"__ignoreMap":72},[77,25507,25508,25510],{"class":79,"line":80},[77,25509,4425],{"class":2123},[77,25511,4428],{"class":271},[77,25513,25514,25516,25518,25520],{"class":79,"line":91},[77,25515,4433],{"class":2123},[77,25517,4436],{"class":2123},[77,25519,4439],{"class":83},[77,25521,104],{"class":87},[77,25523,25524,25526,25528],{"class":79,"line":107},[77,25525,17166],{"class":2123},[77,25527,18040],{"class":83},[77,25529,5149],{"class":87},[77,25531,25532],{"class":79,"line":191},[77,25533,4023],{"class":87},[77,25535,25536,25538,25540],{"class":79,"line":1543},[77,25537,4460],{"class":2123},[77,25539,17919],{"class":87},[77,25541,25542],{"class":323},"\u002F\u002F非静态成员变量\n",[77,25544,25545],{"class":79,"line":1549},[77,25546,6470],{"class":87},[77,25548,25549,25551,25553],{"class":79,"line":1566},[77,25550,7839],{"class":2123},[77,25552,8063],{"class":83},[77,25554,4451],{"class":87},[77,25556,25557],{"class":79,"line":1572},[77,25558,4023],{"class":87},[77,25560,25561],{"class":79,"line":1589},[77,25562,17784],{"class":87},[77,25564,25565,25567,25569,25571,25573,25575,25577,25579],{"class":79,"line":1595},[77,25566,4028],{"class":87},[77,25568,3655],{"class":2123},[77,25570,25447],{"class":271},[77,25572,3850],{"class":2123},[77,25574,9014],{"class":87},[77,25576,3655],{"class":2123},[77,25578,3720],{"class":87},[77,25580,25581],{"class":323}," \u002F\u002F查看不是空对象时占用多少内存\n",[77,25583,25584],{"class":79,"line":4088},[77,25585,4875],{"emptyLinePlaceholder":2549},[77,25587,25588],{"class":79,"line":4093},[77,25589,110],{"class":87},[77,25591,25592,25594,25596],{"class":79,"line":4099},[77,25593,2625],{"class":2123},[77,25595,4448],{"class":83},[77,25597,4451],{"class":87},[77,25599,25600],{"class":79,"line":4104},[77,25601,4023],{"class":87},[77,25603,25604,25606],{"class":79,"line":4118},[77,25605,8108],{"class":83},[77,25607,8111],{"class":87},[77,25609,25610],{"class":79,"line":4123},[77,25611,110],{"class":87},[24,25613,25614],{},"输出结果：size of p=4",[24,25616,25617],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[139,25619,25620],{},[54,25621,25622],{},"如果加上非静态成员变量，Person类修改如下",[67,25624,25626],{"className":2610,"code":25625,"language":2612,"meta":72,"style":72},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[74,25627,25628,25634,25638,25644,25652,25656,25661],{"__ignoreMap":72},[77,25629,25630,25632],{"class":79,"line":80},[77,25631,17166],{"class":2123},[77,25633,17642],{"class":83},[77,25635,25636],{"class":79,"line":91},[77,25637,4023],{"class":87},[77,25639,25640,25642],{"class":79,"line":107},[77,25641,4460],{"class":2123},[77,25643,23862],{"class":87},[77,25645,25646,25648,25650],{"class":79,"line":191},[77,25647,13493],{"class":2123},[77,25649,4857],{"class":2123},[77,25651,23869],{"class":87},[77,25653,25654],{"class":79,"line":1543},[77,25655,6470],{"class":87},[77,25657,25658],{"class":79,"line":1549},[77,25659,25660],{"class":323},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[77,25662,25663,25665,25667,25669,25671,25673],{"class":79,"line":1566},[77,25664,2625],{"class":2123},[77,25666,18040],{"class":83},[77,25668,24882],{"class":87},[77,25670,268],{"class":2123},[77,25672,1939],{"class":94},[77,25674,104],{"class":87},[24,25676,25677],{},"输出结果：4",[24,25679,25680],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[139,25682,25683],{"start":91},[54,25684,25685],{},"加上非静态成员函数",[67,25687,25689],{"className":2610,"code":25688,"language":2612,"meta":72,"style":72},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[74,25690,25691,25698,25702,25708,25716,25720,25724,25728],{"__ignoreMap":72},[77,25692,25693,25695],{"class":79,"line":80},[77,25694,17166],{"class":2123},[77,25696,25697],{"class":83},"  Person\n",[77,25699,25700],{"class":79,"line":91},[77,25701,4023],{"class":87},[77,25703,25704,25706],{"class":79,"line":107},[77,25705,4460],{"class":2123},[77,25707,23862],{"class":87},[77,25709,25710,25712,25714],{"class":79,"line":191},[77,25711,17381],{"class":2123},[77,25713,13858],{"class":83},[77,25715,4451],{"class":87},[77,25717,25718],{"class":79,"line":1543},[77,25719,4505],{"class":87},[77,25721,25722],{"class":79,"line":1549},[77,25723,4875],{"emptyLinePlaceholder":2549},[77,25725,25726],{"class":79,"line":1566},[77,25727,4662],{"class":87},[77,25729,25730],{"class":79,"line":1572},[77,25731,6470],{"class":87},[24,25733,25734],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[139,25736,25737],{"start":107},[54,25738,25739],{},"加上静态成员函数",[67,25741,25743],{"className":2610,"code":25742,"language":2612,"meta":72,"style":72},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[74,25744,25745,25751,25755,25761,25769,25773,25777,25781,25792,25796,25800,25804],{"__ignoreMap":72},[77,25746,25747,25749],{"class":79,"line":80},[77,25748,17166],{"class":2123},[77,25750,25697],{"class":83},[77,25752,25753],{"class":79,"line":91},[77,25754,4023],{"class":87},[77,25756,25757,25759],{"class":79,"line":107},[77,25758,4460],{"class":2123},[77,25760,23862],{"class":87},[77,25762,25763,25765,25767],{"class":79,"line":191},[77,25764,17381],{"class":2123},[77,25766,13858],{"class":83},[77,25768,4451],{"class":87},[77,25770,25771],{"class":79,"line":1543},[77,25772,4505],{"class":87},[77,25774,25775],{"class":79,"line":1549},[77,25776,4875],{"emptyLinePlaceholder":2549},[77,25778,25779],{"class":79,"line":1566},[77,25780,4662],{"class":87},[77,25782,25783,25785,25787,25790],{"class":79,"line":1572},[77,25784,13493],{"class":2123},[77,25786,25037],{"class":2123},[77,25788,25789],{"class":83}," func1",[77,25791,4451],{"class":87},[77,25793,25794],{"class":79,"line":1589},[77,25795,4505],{"class":87},[77,25797,25798],{"class":79,"line":1595},[77,25799,4875],{"emptyLinePlaceholder":2549},[77,25801,25802],{"class":79,"line":4088},[77,25803,4662],{"class":87},[77,25805,25806],{"class":79,"line":4093},[77,25807,6470],{"class":87},[24,25809,25677],{},[24,25811,25812],{},"解释：静态成员函数也不属于类上",[2520,25814,10148],{},{"title":72,"searchDepth":91,"depth":91,"links":25816},[25817,25823],{"id":17117,"depth":91,"text":17118,"children":25818},[25819,25820,25821,25822],{"id":17121,"depth":107,"text":17122},{"id":17845,"depth":107,"text":17846},{"id":18017,"depth":107,"text":18018},{"id":18475,"depth":107,"text":18476},{"id":20847,"depth":91,"text":20848,"children":25824},[25825,25826,25827,25828,25829,25830,25831,25832,25833],{"id":20859,"depth":107,"text":20860},{"id":21152,"depth":107,"text":21153},{"id":21643,"depth":107,"text":21644},{"id":22740,"depth":107,"text":22741},{"id":23163,"depth":107,"text":23164},{"id":23642,"depth":107,"text":23643},{"id":24017,"depth":107,"text":24018},{"id":24430,"depth":107,"text":24431},{"id":25367,"depth":107,"text":25368},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17082,"description":25834},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25841,"title":2612,"body":25842,"description":2546,"extension":2547,"meta":25846,"navigation":2549,"path":25848,"seo":25849,"stem":25850,"__hash__":25851},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25843,"toc":25844},[],{"title":72,"searchDepth":91,"depth":91,"links":25845},[],{"category":25847},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2612,"description":2546},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25853,"title":25854,"body":25855,"description":72,"extension":2547,"meta":26444,"navigation":2549,"path":26445,"seo":26446,"stem":26447,"__hash__":26448},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25856,"toc":26426},[25857,25860,25864,25867,25870,25873,25891,25896,25899,25902,25905,25908,25913,25916,25921,25924,25927,25931,25934,25937,25943,25946,25964,25968,25972,25975,25980,25983,25987,25990,26003,26006,26010,26013,26016,26019,26043,26046,26055,26066,26081,26113,26117,26124,26132,26136,26139,26142,26147,26151,26154,26157,26162,26165,26169,26172,26175,26180,26183,26187,26192,26196,26262,26266,26269,26272,26275,26278,26281,26287,26308,26311,26325,26334,26338,26341,26344,26349,26352,26357,26362,26365,26368,26373,26378,26381,26386,26391,26394,26399,26404,26407,26410,26415,26418,26423],[10,25858,25854],{"id":25859},"_1强化学习基本认识",[14,25861,25863],{"id":25862},"_11什么是强化学习","1.1.什么是强化学习",[24,25865,25866],{},"强化学习有两部分组成：智能体和环境；",[24,25868,25869],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[24,25871,25872],{},"强化学习与监督学习的区别:",[139,25874,25875,25878,25881,25884],{},[54,25876,25877],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[54,25879,25880],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[54,25882,25883],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[54,25885,25886,25887,25890],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[27,25888,25889],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[24,25892,25893],{},[40,25894],{"alt":72,"src":25895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[24,25897,25898],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[24,25900,25901],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[24,25903,25904],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[24,25906,25907],{},"获取奖励",[24,25909,25910],{},[40,25911],{"alt":72,"src":25912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[24,25914,25915],{},"强化学习可以分成标准强化学习和深度强化学习",[24,25917,25918],{},[40,25919],{"alt":72,"src":25920},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[24,25922,25923],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[24,25925,25926],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25928,25930],{"id":25929},"_12强化学习应用场景","1.2.强化学习应用场景",[24,25932,25933],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[24,25935,25936],{},"具身智能中的应用",[24,25938,25939,25942],{},[27,25940,25941],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[24,25944,25945],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[24,25947,25948,25949,25952,25953,25956,25957,25960,25961],{},"机器人是",[27,25950,25951],{},"躯体","，深度学习是",[27,25954,25955],{},"神经元****网络","，VLA是",[27,25958,25959],{},"通用的行为逻辑","，而强化学习是",[27,25962,25963],{},"教练",[14,25965,25967],{"id":25966},"_13序列决策","1.3.序列决策",[19,25969,25971],{"id":25970},"_131智能体与环境","1.3.1.智能体与环境",[24,25973,25974],{},"强化学习研究的问题是智能体agent与环境交互的问题",[24,25976,25977],{},[40,25978],{"alt":72,"src":25979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[24,25981,25982],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[19,25984,25986],{"id":25985},"_132奖励","1.3.2.奖励",[24,25988,25989],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[24,25991,25992,25993,26002],{},"取某个策略的表现如何。强化学习的目的就是",[27,25994,25995,25996,26001],{},"最大化",[27,25997,25998],{},[27,25999,26000],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[24,26004,26005],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[19,26007,26009],{"id":26008},"_133序列决策","1.3.3.序列决策",[24,26011,26012],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[24,26014,26015],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[24,26017,26018],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[24,26020,26021,26024,26025,26027,26028,26030,26031,26033,26034,16267,26037,16267,26040],{},[687,26022,26023],{},"Ht"," = ",[687,26026,3209],{},"1*, a",[687,26029,2120],{},", r",[687,26032,2120],{},", . . . ,* ",[687,26035,26036],{},"ot",[687,26038,26039],{},", at ,",[687,26041,26042],{},"rt",[24,26044,26045],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[24,26047,26048,26024,26051,4134,26053,3043],{},[687,26049,26050],{},"st",[687,26052,2672],{},[687,26054,26023],{},[24,26056,26057,26058,26061,26062,26065],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[27,26059,26060],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[27,26063,26064],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[24,26067,26068,26069,26072,26073,26076,26077,26080],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[27,26070,26071],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[27,26074,26075],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[687,26078,26079],{},"S, A, T, R, Ω, O, γ",")。",[24,26082,26083,26084,26086,26087,26089,26090,2622,26092,26095,26096,26098,26099,2622,26102,26105,26106,26108,26109,26112],{},"其中 ",[687,26085,3302],{}," 表示状态空间，为隐变量，",[687,26088,2847],{}," 为动作空间，",[687,26091,3327],{},[687,26093,26094],{},"s ′ |s, a",") 为状态转移概率，",[687,26097,3277],{}," 为奖励函数，",[687,26100,26101],{},"Ω",[687,26103,26104],{},"o|s, a",") 为观测概率，",[687,26107,3203],{}," 为观测空间，",[687,26110,26111],{},"γ"," 为折扣因子。",[14,26114,26116],{"id":26115},"_14动作空间","1.4.动作空间",[24,26118,26119,26120,26123],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[27,26121,26122],{},"动作空间"," ，动作空间分为:",[139,26125,26126,26129],{},[54,26127,26128],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[54,26130,26131],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26133,26135],{"id":26134},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[24,26137,26138],{},"由策略、价值函数、模型三部分组成",[24,26140,26141],{},"这三者组成马尔可夫决策过程",[24,26143,26144],{},[40,26145],{"alt":72,"src":26146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[19,26148,26150],{"id":26149},"_151策略","1.5.1.策略",[24,26152,26153],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[24,26155,26156],{},"策略可分为两种：",[24,26158,26159],{},[40,26160],{"alt":72,"src":26161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[24,26163,26164],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[19,26166,26168],{"id":26167},"_152价值函数","1.5.2.价值函数",[24,26170,26171],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[24,26173,26174],{},"价值函数中有一个折扣因子，类似于存款利息",[24,26176,26177],{},[40,26178],{"alt":72,"src":26179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[24,26181,26182],{},"进入某个状态采取的最优动作可以通过Q函数得到",[19,26184,26186],{"id":26185},"_153模型","1.5.3.模型",[24,26188,26189],{},[40,26190],{"alt":72,"src":26191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26193,26195],{"id":26194},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2755,26197,26198,26208],{},[2758,26199,26200],{},[2761,26201,26202,26205],{},[2764,26203,26204],{"align":101},"类型",[2764,26206,26207],{"align":101},"特点",[2801,26209,26210,26220,26230,26240,26252],{},[2761,26211,26212,26217],{},[2806,26213,26214],{"align":101},[27,26215,26216],{},"基于价值的智能体",[2806,26218,26219],{"align":101},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2761,26221,26222,26227],{},[2806,26223,26224],{"align":101},[27,26225,26226],{},"基于策略的智能体",[2806,26228,26229],{"align":101},"直接学习策略，没有学习价值函数",[2761,26231,26232,26237],{},[2806,26233,26234],{"align":101},[27,26235,26236],{},"演员-评论员智能体",[2806,26238,26239],{"align":101},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2761,26241,26242,26247],{},[2806,26243,26244],{"align":101},[27,26245,26246],{},"有模型强化学习智能体",[2806,26248,26249],{"align":101},[40,26250],{"alt":72,"src":26251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2761,26253,26254,26259],{},[2806,26255,26256],{"align":101},[27,26257,26258],{},"免模型强化学习智能体",[2806,26260,26261],{"align":101},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26263,26265],{"id":26264},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[24,26267,26268],{},"学习和规划是序列决策的两个基本问题",[24,26270,26271],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[24,26273,26274],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[24,26276,26277],{},"强化学习用到的库：Gym",[24,26279,26280],{},"Gym可以检验强化学习算法的优劣",[24,26282,26283,26286],{},[27,26284,26285],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[67,26288,26292],{"className":26289,"code":26290,"language":26291,"meta":72,"style":72},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[74,26293,26294],{"__ignoreMap":72},[77,26295,26296,26299,26302,26305],{"class":79,"line":80},[77,26297,26298],{"class":83},"pip",[77,26300,26301],{"class":271}," install",[77,26303,26304],{"class":271}," gym==",[77,26306,26307],{"class":94},"0.25.2\n",[24,26309,26310],{},"显示图形界面需要",[67,26312,26314],{"className":26289,"code":26313,"language":26291,"meta":72,"style":72},"pip install pygame\n",[74,26315,26316],{"__ignoreMap":72},[77,26317,26318,26320,26322],{"class":79,"line":80},[77,26319,26298],{"class":83},[77,26321,26301],{"class":271},[77,26323,26324],{"class":271}," pygame\n",[24,26326,26327,26328],{},"有关Gym库的相关文档介绍：",[417,26329,26333],{"href":26330,"rel":26331},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26332],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26335,26337],{"id":26336},"_18一些补充基础概念","1.8.一些补充基础概念",[24,26339,26340],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[24,26342,26343],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[24,26345,26346],{},[40,26347],{"alt":72,"src":26348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[24,26350,26351],{},"折扣率需要自己来设定",[24,26353,26354],{},[40,26355],{"alt":72,"src":26356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[139,26358,26359],{},[54,26360,26361],{},"状态转移函数：",[24,26363,26364],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[24,26366,26367],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[24,26369,26370],{},[40,26371],{"alt":72,"src":26372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[139,26374,26375],{"start":91},[54,26376,26377],{},"动作价值函数：",[24,26379,26380],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[24,26382,26383],{},[40,26384],{"alt":72,"src":26385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[139,26387,26388],{"start":107},[54,26389,26390],{},"最优动作价值函数：",[24,26392,26393],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[24,26395,26396],{},[40,26397],{"alt":72,"src":26398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[139,26400,26401],{"start":191},[54,26402,26403],{},"状态价值函数:",[24,26405,26406],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[24,26408,26409],{},"它衡量的是“一个具体动作”的长期价值",[24,26411,26412],{},[40,26413],{"alt":72,"src":26414},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[24,26416,26417],{},"几个价值函数之间的比较：",[24,26419,26420],{},[40,26421],{"alt":72,"src":26422},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2520,26424,26425],{},"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":72,"searchDepth":91,"depth":91,"links":26427},[26428,26429,26430,26435,26436,26441,26442,26443],{"id":25862,"depth":91,"text":25863},{"id":25929,"depth":91,"text":25930},{"id":25966,"depth":91,"text":25967,"children":26431},[26432,26433,26434],{"id":25970,"depth":107,"text":25971},{"id":25985,"depth":107,"text":25986},{"id":26008,"depth":107,"text":26009},{"id":26115,"depth":91,"text":26116},{"id":26134,"depth":91,"text":26135,"children":26437},[26438,26439,26440],{"id":26149,"depth":107,"text":26150},{"id":26167,"depth":107,"text":26168},{"id":26185,"depth":107,"text":26186},{"id":26194,"depth":91,"text":26195},{"id":26264,"depth":91,"text":26265},{"id":26336,"depth":91,"text":26337},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25854,"description":72},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26450,"title":26451,"body":26452,"description":26459,"extension":2547,"meta":26470,"navigation":2549,"path":26471,"seo":26472,"stem":26473,"__hash__":26474},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26453,"toc":26468},[26454,26457,26460,26465],[10,26455,26451],{"id":26456},"_2马尔可夫决策过程",[24,26458,26459],{},"这是强化学习的基本框架",[24,26461,26462],{},[40,26463],{"alt":72,"src":26464},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[24,26466,26467],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":72,"searchDepth":91,"depth":91,"links":26469},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26451,"description":26459},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26476,"title":26477,"body":26478,"description":72,"extension":2547,"meta":26594,"navigation":2549,"path":26595,"seo":26596,"stem":26597,"__hash__":26598},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26479,"toc":26589},[26480,26483,26487,26490,26495,26500,26503,26508,26511,26516,26519,26523,26528,26531,26536,26541,26546,26549,26553,26558,26561,26566,26571,26576,26581,26584],[10,26481,26477],{"id":26482},"_3动作价值函数",[14,26484,26486],{"id":26485},"_31dqn","3.1.DQN",[24,26488,26489],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[24,26491,26492],{},[40,26493],{"alt":72,"src":26494},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[24,26496,26497],{},[40,26498],{"alt":72,"src":26499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[24,26501,26502],{},"DQN算法的描述：",[24,26504,26505],{},[40,26506],{"alt":72,"src":26507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[24,26509,26510],{},"这里的Dense指的是全连接层",[24,26512,26513],{},[40,26514],{"alt":72,"src":26515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[24,26517,26518],{},"当前观测的状态为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,26520,26522],{"id":26521},"_32dqn的举例","3.2.DQN的举例",[24,26524,26525],{},[40,26526],{"alt":72,"src":26527},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[24,26529,26530],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[24,26532,26533],{},[40,26534],{"alt":72,"src":26535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[24,26537,26538],{},[40,26539],{"alt":72,"src":26540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[24,26542,26543],{},[40,26544],{"alt":72,"src":26545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[24,26547,26548],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26550,26552],{"id":26551},"_33td算法","3.3.TD算法",[24,26554,26555],{},[40,26556],{"alt":72,"src":26557},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[24,26559,26560],{},"强化学习TD算法公式的粗略解释：",[24,26562,26563],{},[40,26564],{"alt":72,"src":26565},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[24,26567,26568],{},[40,26569],{"alt":72,"src":26570},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[24,26572,26573],{},[40,26574],{"alt":72,"src":26575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[24,26577,26578],{},[40,26579],{"alt":72,"src":26580},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[24,26582,26583],{},"TD算法总结：",[24,26585,26586],{},[40,26587],{"alt":72,"src":26588},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":72,"searchDepth":91,"depth":91,"links":26590},[26591,26592,26593],{"id":26485,"depth":91,"text":26486},{"id":26521,"depth":91,"text":26522},{"id":26551,"depth":91,"text":26552},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26477,"description":72},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26600,"title":26601,"body":26602,"description":72,"extension":2547,"meta":26835,"navigation":2549,"path":26836,"seo":26837,"stem":26838,"__hash__":26839},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26603,"toc":26831},[26604,26607,26611,26614,26617,26622,26627,26630,26635,26640,26643,26648,26651,26656,26659,26664,26667,26672,26675,26680,26685,26688,26693,26696,26699,26704,26707,26712,26717,26721,26724,26727,26732,26737,26740,26745,26750,26753,26758,26761,26764,26769,26772,26777,26780,26785,26790,26793,26798,26803,26806,26811,26814,26819,26822],[10,26605,26601],{"id":26606},"_4策略学习",[14,26608,26610],{"id":26609},"_41概念描述","4.1.概念描述",[24,26612,26613],{},"用神经网络（策略网络）近似策略函数",[24,26615,26616],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[24,26618,26619],{},[40,26620],{"alt":72,"src":26621},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[24,26623,26624],{},[40,26625],{"alt":72,"src":26626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[24,26628,26629],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[24,26631,26632],{},[40,26633],{"alt":72,"src":26634},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[24,26636,26637],{},[40,26638],{"alt":72,"src":26639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[24,26641,26642],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[24,26644,26645],{},[40,26646],{"alt":72,"src":26647},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[24,26649,26650],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[24,26652,26653],{},[40,26654],{"alt":72,"src":26655},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[24,26657,26658],{},"改进theta要用到策略梯度算法",[24,26660,26661],{},[40,26662],{"alt":72,"src":26663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[24,26665,26666],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[24,26668,26669],{},[40,26670],{"alt":72,"src":26671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[24,26673,26674],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[24,26676,26677],{},[40,26678],{"alt":72,"src":26679},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[24,26681,26682],{},[40,26683],{"alt":72,"src":26684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[24,26686,26687],{},"梯度公式总结：",[24,26689,26690],{},[40,26691],{"alt":72,"src":26692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[24,26694,26695],{},"两个公式的分别应用场景：",[24,26697,26698],{},"对于离散的动作：",[24,26700,26701],{},[40,26702],{"alt":72,"src":26703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[24,26705,26706],{},"对于连续的动作：",[24,26708,26709],{},[40,26710],{"alt":72,"src":26711},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[24,26713,26714],{},[40,26715],{"alt":72,"src":26716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26718,26720],{"id":26719},"_42概率梯度算法总结","4.2.概率梯度算法总结",[24,26722,26723],{},"使用蒙特卡洛来近似计算策略梯度",[24,26725,26726],{},"蒙特卡洛法的解释如下：",[24,26728,26729],{},[40,26730],{"alt":72,"src":26731},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[24,26733,26734],{},[40,26735],{"alt":72,"src":26736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[24,26738,26739],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[139,26741,26742],{},[54,26743,26744],{},"方法一：reinforce算法",[24,26746,26747],{},[40,26748],{"alt":72,"src":26749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[24,26751,26752],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[139,26754,26755],{"start":91},[54,26756,26757],{},"方法二：actor-critic算法",[24,26759,26760],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[24,26762,26763],{},"两个网络的构建：",[24,26765,26766],{},[40,26767],{"alt":72,"src":26768},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[24,26770,26771],{},"actor网路：",[24,26773,26774],{},[40,26775],{"alt":72,"src":26776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[24,26778,26779],{},"critic网络",[24,26781,26782],{},[40,26783],{"alt":72,"src":26784},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[139,26786,26787],{"start":107},[54,26788,26789],{},"网络的训练",[24,26791,26792],{},"网络描述",[24,26794,26795],{},[40,26796],{"alt":72,"src":26797},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[24,26799,26800],{},[40,26801],{"alt":72,"src":26802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[24,26804,26805],{},"TD算法更新梯度：",[24,26807,26808],{},[40,26809],{"alt":72,"src":26810},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[24,26812,26813],{},"策略网络更新梯度：",[24,26815,26816],{},[40,26817],{"alt":72,"src":26818},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[24,26820,26821],{},"训练整个流程的具体描述：",[24,26823,26824,26827,26828],{},[40,26825],{"alt":72,"src":26826},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[40,26829],{"alt":72,"src":26830},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":72,"searchDepth":91,"depth":91,"links":26832},[26833,26834],{"id":26609,"depth":91,"text":26610},{"id":26719,"depth":91,"text":26720},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26601,"description":72},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26841,"title":26842,"body":26843,"description":26850,"extension":2547,"meta":26900,"navigation":2549,"path":26901,"seo":26902,"stem":26903,"__hash__":26904},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26844,"toc":26896},[26845,26848,26851,26855,26858,26863,26867,26870,26875,26878,26883,26888,26891],[10,26846,26842],{"id":26847},"_5alphago算法",[24,26849,26850],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26852,26854],{"id":26853},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[24,26856,26857],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[24,26859,26860],{},[40,26861],{"alt":72,"src":26862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26864,26866],{"id":26865},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[24,26868,26869],{},"采用强化学习的方式训练策略网络",[24,26871,26872],{},[40,26873],{"alt":72,"src":26874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[24,26876,26877],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[24,26879,26880],{},[40,26881],{"alt":72,"src":26882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[24,26884,26885],{},[40,26886],{"alt":72,"src":26887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[24,26889,26890],{},"强化学习训练策略网络的总结：",[24,26892,26893],{},[40,26894],{"alt":72,"src":26895},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":72,"searchDepth":91,"depth":91,"links":26897},[26898,26899],{"id":26853,"depth":91,"text":26854},{"id":26865,"depth":91,"text":26866},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26842,"description":26850},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26906,"title":26907,"body":26908,"description":26915,"extension":2547,"meta":26918,"navigation":2549,"path":26919,"seo":26920,"stem":26921,"__hash__":26922},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26909,"toc":26916},[26910,26913],[10,26911,26907],{"id":26912},"_6价值网络",[24,26914,26915],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":72,"searchDepth":91,"depth":91,"links":26917},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26907,"description":26915},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26924,"title":26925,"body":26926,"description":26930,"extension":2547,"meta":26931,"navigation":2549,"path":26932,"seo":26933,"stem":26934,"__hash__":26935},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26927,"toc":26928},[],{"title":72,"searchDepth":91,"depth":91,"links":26929},[],"记录自己的强化学习笔记。",{"category":25847},"\u002Fwiki\u002F2025-12-04",{"title":26925,"description":26930},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26937,"title":26938,"body":26939,"description":2546,"extension":2547,"meta":26978,"navigation":2549,"path":26979,"seo":26980,"stem":26981,"__hash__":26982},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26940,"toc":26976},[26941,26944,26947,26953,26956,26962,26965,26970,26973],[10,26942,26938],{"id":26943},"_1-项目概览与官方资源",[24,26945,26946],{},"官方文档：",[24,26948,26949],{},[417,26950,26951],{"href":26951,"rel":26952},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26332],[24,26954,26955],{},"官方代码仓库：",[24,26957,26958],{},[417,26959,26960],{"href":26960,"rel":26961},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26332],[24,26963,26964],{},"复现大体流程：",[24,26966,26967],{},[40,26968],{"alt":72,"src":26969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[24,26971,26972],{},"本教程的目标是打通这条链路：",[24,26974,26975],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":72,"searchDepth":91,"depth":91,"links":26977},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26938,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26984,"title":26985,"body":26986,"description":2546,"extension":2547,"meta":27102,"navigation":2549,"path":27103,"seo":27104,"stem":27105,"__hash__":27106},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26987,"toc":27097},[26988,26991,26995,26998,27005,27009,27012,27021,27031,27035,27065,27068,27094],[10,26989,26985],{"id":26990},"_2-环境准备与设备连接",[14,26992,26994],{"id":26993},"_21-系统与环境","2.1 系统与环境",[24,26996,26997],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[24,26999,27000,27001,27004],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[74,27002,27003],{},"lerobot"," 依赖。",[14,27006,27008],{"id":27007},"_22-机械臂串口识别","2.2 机械臂串口识别",[24,27010,27011],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[67,27013,27015],{"className":26289,"code":27014,"language":26291,"meta":72,"style":72},"lerobot-find-out\n",[74,27016,27017],{"__ignoreMap":72},[77,27018,27019],{"class":79,"line":80},[77,27020,27014],{"class":83},[24,27022,27023,27024,2828,27027,27030],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[74,27025,27026],{},"\u002Fdev\u002FttyACM0",[74,27028,27029],{},"\u002Fdev\u002FttyACM1","）。",[14,27032,27034],{"id":27033},"_23-串口授权","2.3 串口授权",[67,27036,27038],{"className":26289,"code":27037,"language":26291,"meta":72,"style":72},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[74,27039,27040,27054],{"__ignoreMap":72},[77,27041,27042,27045,27048,27051],{"class":79,"line":80},[77,27043,27044],{"class":83},"sudo",[77,27046,27047],{"class":271}," chmod",[77,27049,27050],{"class":94}," 666",[77,27052,27053],{"class":271}," \u002Fdev\u002FttyACM0\n",[77,27055,27056,27058,27060,27062],{"class":79,"line":91},[77,27057,27044],{"class":83},[77,27059,27047],{"class":271},[77,27061,27050],{"class":94},[77,27063,27064],{"class":271}," \u002Fdev\u002FttyACM1\n",[24,27066,27067],{},"说明：",[51,27069,27070,27075,27081,27091],{},[54,27071,27072,27074],{},[74,27073,27044],{},"：以 root 权限执行命令。",[54,27076,27077,27080],{},[74,27078,27079],{},"chmod","：修改设备节点权限。",[54,27082,27083,27086,27087,27090],{},[74,27084,27085],{},"666","：",[74,27088,27089],{},"rw-rw-rw-","，所有用户可读写。",[54,27092,27093],{},"串口号必须替换为你机器上的真实端口。",[2520,27095,27096],{},"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":72,"searchDepth":91,"depth":91,"links":27098},[27099,27100,27101],{"id":26993,"depth":91,"text":26994},{"id":27007,"depth":91,"text":27008},{"id":27033,"depth":91,"text":27034},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26985,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27108,"title":27109,"body":27110,"description":2546,"extension":2547,"meta":27271,"navigation":2549,"path":27272,"seo":27273,"stem":27274,"__hash__":27275},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27111,"toc":27267},[27112,27116,27120,27126,27129,27186,27189,27193,27196,27264],[10,27113,27115],{"id":27114},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27117,27119],{"id":27118},"_31-配置电机-id","3.1 配置电机 ID",[24,27121,27122,27123,27125],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[74,27124,2120],{},"，需要改成机械臂链路里不冲突的编号。",[24,27127,27128],{},"方式一：用 LeRobot 命令逐步写入。",[67,27130,27132],{"className":26289,"code":27131,"language":26291,"meta":72,"style":72},"# 主臂舵机配置 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",[74,27133,27134,27139,27147,27154,27159,27163,27168,27174,27181],{"__ignoreMap":72},[77,27135,27136],{"class":79,"line":80},[77,27137,27138],{"class":323},"# 主臂舵机配置 ID\n",[77,27140,27141,27144],{"class":79,"line":91},[77,27142,27143],{"class":83},"lerobot-setup-motors",[77,27145,27146],{"class":94}," \\\n",[77,27148,27149,27152],{"class":79,"line":107},[77,27150,27151],{"class":94},"  --teleop.type=so101_leader",[77,27153,27146],{"class":94},[77,27155,27156],{"class":79,"line":191},[77,27157,27158],{"class":94},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[77,27160,27161],{"class":79,"line":1543},[77,27162,4875],{"emptyLinePlaceholder":2549},[77,27164,27165],{"class":79,"line":1549},[77,27166,27167],{"class":323},"# 从臂舵机配置 ID\n",[77,27169,27170,27172],{"class":79,"line":1566},[77,27171,27143],{"class":83},[77,27173,27146],{"class":94},[77,27175,27176,27179],{"class":79,"line":1572},[77,27177,27178],{"class":94},"  --robot.type=so101_follower",[77,27180,27146],{"class":94},[77,27182,27183],{"class":79,"line":1589},[77,27184,27185],{"class":94},"  --robot.port=\u002Fdev\u002FttyACM1\n",[24,27187,27188],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27190,27192],{"id":27191},"_32-机械臂校准","3.2 机械臂校准",[24,27194,27195],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[67,27197,27199],{"className":26289,"code":27198,"language":26291,"meta":72,"style":72},"# 主臂校准\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",[74,27200,27201,27206,27213,27219,27226,27231,27235,27240,27246,27252,27259],{"__ignoreMap":72},[77,27202,27203],{"class":79,"line":80},[77,27204,27205],{"class":323},"# 主臂校准\n",[77,27207,27208,27211],{"class":79,"line":91},[77,27209,27210],{"class":83},"lerobot-calibrate",[77,27212,27146],{"class":94},[77,27214,27215,27217],{"class":79,"line":107},[77,27216,27151],{"class":94},[77,27218,27146],{"class":94},[77,27220,27221,27224],{"class":79,"line":191},[77,27222,27223],{"class":94},"  --teleop.port=\u002Fdev\u002FttyACM0",[77,27225,27146],{"class":94},[77,27227,27228],{"class":79,"line":1543},[77,27229,27230],{"class":94},"  --teleop.id=my_awesome_leader_arm\n",[77,27232,27233],{"class":79,"line":1549},[77,27234,4875],{"emptyLinePlaceholder":2549},[77,27236,27237],{"class":79,"line":1566},[77,27238,27239],{"class":323},"# 从臂校准\n",[77,27241,27242,27244],{"class":79,"line":1572},[77,27243,27210],{"class":83},[77,27245,27146],{"class":94},[77,27247,27248,27250],{"class":79,"line":1589},[77,27249,27178],{"class":94},[77,27251,27146],{"class":94},[77,27253,27254,27257],{"class":79,"line":1595},[77,27255,27256],{"class":94},"  --robot.port=\u002Fdev\u002FttyACM1",[77,27258,27146],{"class":94},[77,27260,27261],{"class":79,"line":4088},[77,27262,27263],{"class":94},"  --robot.id=my_awesome_follower_arm\n",[2520,27265,27266],{},"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":72,"searchDepth":91,"depth":91,"links":27268},[27269,27270],{"id":27118,"depth":91,"text":27119},{"id":27191,"depth":91,"text":27192},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27109,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27277,"title":27278,"body":27279,"description":2546,"extension":2547,"meta":27470,"navigation":2549,"path":27471,"seo":27472,"stem":27473,"__hash__":27474},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27280,"toc":27466},[27281,27284,27288,27335,27339,27352,27415,27418,27463],[10,27282,27278],{"id":27283},"_4-遥操与相机接入",[14,27285,27287],{"id":27286},"_41-不带相机遥操","4.1 不带相机遥操",[67,27289,27291],{"className":26289,"code":27290,"language":26291,"meta":72,"style":72},"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",[74,27292,27293,27300,27306,27312,27319,27325,27331],{"__ignoreMap":72},[77,27294,27295,27298],{"class":79,"line":80},[77,27296,27297],{"class":83},"lerobot-teleoperate",[77,27299,27146],{"class":94},[77,27301,27302,27304],{"class":79,"line":91},[77,27303,27178],{"class":94},[77,27305,27146],{"class":94},[77,27307,27308,27310],{"class":79,"line":107},[77,27309,27256],{"class":94},[77,27311,27146],{"class":94},[77,27313,27314,27317],{"class":79,"line":191},[77,27315,27316],{"class":94},"  --robot.id=my_awesome_follower_arm",[77,27318,27146],{"class":94},[77,27320,27321,27323],{"class":79,"line":1543},[77,27322,27151],{"class":94},[77,27324,27146],{"class":94},[77,27326,27327,27329],{"class":79,"line":1549},[77,27328,27223],{"class":94},[77,27330,27146],{"class":94},[77,27332,27333],{"class":79,"line":1566},[77,27334,27230],{"class":94},[14,27336,27338],{"id":27337},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[67,27340,27342],{"className":26289,"code":27341,"language":26291,"meta":72,"style":72},"lerobot-find-cameras opencv\n",[74,27343,27344],{"__ignoreMap":72},[77,27345,27346,27349],{"class":79,"line":80},[77,27347,27348],{"class":83},"lerobot-find-cameras",[77,27350,27351],{"class":271}," opencv\n",[67,27353,27355],{"className":26289,"code":27354,"language":26291,"meta":72,"style":72},"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",[74,27356,27357,27363,27369,27375,27381,27391,27397,27403,27410],{"__ignoreMap":72},[77,27358,27359,27361],{"class":79,"line":80},[77,27360,27297],{"class":83},[77,27362,27146],{"class":94},[77,27364,27365,27367],{"class":79,"line":91},[77,27366,27178],{"class":94},[77,27368,27146],{"class":94},[77,27370,27371,27373],{"class":79,"line":107},[77,27372,27256],{"class":94},[77,27374,27146],{"class":94},[77,27376,27377,27379],{"class":79,"line":191},[77,27378,27316],{"class":94},[77,27380,27146],{"class":94},[77,27382,27383,27386,27389],{"class":79,"line":1543},[77,27384,27385],{"class":94},"  --robot.cameras=",[77,27387,27388],{"class":271},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[77,27390,27146],{"class":94},[77,27392,27393,27395],{"class":79,"line":1549},[77,27394,27151],{"class":94},[77,27396,27146],{"class":94},[77,27398,27399,27401],{"class":79,"line":1566},[77,27400,27223],{"class":94},[77,27402,27146],{"class":94},[77,27404,27405,27408],{"class":79,"line":1572},[77,27406,27407],{"class":94},"  --teleop.id=my_awesome_leader_arm",[77,27409,27146],{"class":94},[77,27411,27412],{"class":79,"line":1589},[77,27413,27414],{"class":94},"  --display_data=true\n",[24,27416,27417],{},"相机参数说明：",[51,27419,27420,27426,27432,27441,27451,27457],{},[54,27421,27422,27425],{},[74,27423,27424],{},"front","：相机名称。",[54,27427,27428,27431],{},[74,27429,27430],{},"type: opencv","：相机驱动类型。",[54,27433,27434,27437,27438,27030],{},[74,27435,27436],{},"index_or_path","：设备编号或设备路径（如 ",[74,27439,27440],{},"\u002Fdev\u002Fvideo4",[54,27442,27443,27446,27447,27450],{},[74,27444,27445],{},"width"," \u002F ",[74,27448,27449],{},"height","：图像分辨率。",[54,27452,27453,27456],{},[74,27454,27455],{},"fps","：采样帧率。",[54,27458,27459,27462],{},[74,27460,27461],{},"--display_data=true","：启用实时可视化。",[2520,27464,27465],{},"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":72,"searchDepth":91,"depth":91,"links":27467},[27468,27469],{"id":27286,"depth":91,"text":27287},{"id":27337,"depth":91,"text":27338},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27278,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27476,"title":27477,"body":27478,"description":2546,"extension":2547,"meta":27650,"navigation":2549,"path":27651,"seo":27652,"stem":27653,"__hash__":27654},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27479,"toc":27645},[27480,27484,27488,27493,27498,27501,27543,27549,27553,27602,27607,27611,27614,27622,27627,27632,27637,27642],[10,27481,27483],{"id":27482},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27485,27487],{"id":27486},"_51-生成访问令牌","5.1 生成访问令牌",[24,27489,27490],{},[40,27491],{"alt":72,"src":27492},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[24,27494,27495],{},[40,27496],{"alt":72,"src":27497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[24,27499,27500],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[67,27502,27504],{"className":26289,"code":27503,"language":26291,"meta":72,"style":72},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[74,27505,27506,27519],{"__ignoreMap":72},[77,27507,27508,27511,27514,27516],{"class":79,"line":80},[77,27509,27510],{"class":2123},"export",[77,27512,27513],{"class":87}," HF_TOKEN",[77,27515,268],{"class":2123},[77,27517,27518],{"class":271},"\"your_huggingface_token\"\n",[77,27520,27521,27524,27527,27530,27533,27535,27538,27540],{"class":79,"line":91},[77,27522,27523],{"class":83},"hf",[77,27525,27526],{"class":271}," auth",[77,27528,27529],{"class":271}," login",[77,27531,27532],{"class":94}," --token",[77,27534,12197],{"class":271},[77,27536,27537],{"class":87},"$HF_TOKEN",[77,27539,2865],{"class":271},[77,27541,27542],{"class":94}," --add-to-git-credential\n",[24,27544,27545,27548],{},[74,27546,27547],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27550,27552],{"id":27551},"_52-验证登录","5.2 验证登录",[67,27554,27556],{"className":26289,"code":27555,"language":26291,"meta":72,"style":72},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[74,27557,27558,27589],{"__ignoreMap":72},[77,27559,27560,27563,27565,27568,27570,27572,27575,27578,27581,27584,27587],{"class":79,"line":80},[77,27561,27562],{"class":87},"HF_USER",[77,27564,268],{"class":2123},[77,27566,27567],{"class":87},"$(",[77,27569,27523],{"class":83},[77,27571,27526],{"class":271},[77,27573,27574],{"class":271}," whoami",[77,27576,27577],{"class":2123}," |",[77,27579,27580],{"class":83}," head",[77,27582,27583],{"class":94}," -n",[77,27585,27586],{"class":94}," 1",[77,27588,2628],{"class":87},[77,27590,27591,27594,27596,27599],{"class":79,"line":91},[77,27592,27593],{"class":94},"echo",[77,27595,12197],{"class":271},[77,27597,27598],{"class":87},"$HF_USER",[77,27600,27601],{"class":271},"\"\n",[24,27603,27604],{},[40,27605],{"alt":72,"src":27606},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27608,27610],{"id":27609},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[24,27612,27613],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[51,27615,27616,27619],{},[54,27617,27618],{},"Dataset Repo（用于上传演示数据）",[54,27620,27621],{},"Model Repo（用于上传训练后的 ACT 权重）",[24,27623,27624],{},[40,27625],{"alt":72,"src":27626},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[24,27628,27629],{},[40,27630],{"alt":72,"src":27631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[24,27633,27634],{},[40,27635],{"alt":72,"src":27636},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[24,27638,27639],{},[40,27640],{"alt":72,"src":27641},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2520,27643,27644],{},"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":72,"searchDepth":91,"depth":91,"links":27646},[27647,27648,27649],{"id":27486,"depth":91,"text":27487},{"id":27551,"depth":91,"text":27552},{"id":27609,"depth":91,"text":27610},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27477,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27656,"title":27657,"body":27658,"description":2546,"extension":2547,"meta":27855,"navigation":2549,"path":27856,"seo":27857,"stem":27858,"__hash__":27859},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27659,"toc":27850},[27660,27664,27668,27764,27772,27777,27781,27797,27800,27804,27847],[10,27661,27663],{"id":27662},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27665,27667],{"id":27666},"_61-录制示教数据","6.1 录制示教数据",[67,27669,27671],{"className":26289,"code":27670,"language":26291,"meta":72,"style":72},"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",[74,27672,27673,27680,27686,27692,27698,27707,27713,27719,27725,27732,27742,27749,27759],{"__ignoreMap":72},[77,27674,27675,27678],{"class":79,"line":80},[77,27676,27677],{"class":83},"lerobot-record",[77,27679,27146],{"class":94},[77,27681,27682,27684],{"class":79,"line":91},[77,27683,27178],{"class":94},[77,27685,27146],{"class":94},[77,27687,27688,27690],{"class":79,"line":107},[77,27689,27256],{"class":94},[77,27691,27146],{"class":94},[77,27693,27694,27696],{"class":79,"line":191},[77,27695,27316],{"class":94},[77,27697,27146],{"class":94},[77,27699,27700,27702,27705],{"class":79,"line":1543},[77,27701,27385],{"class":94},[77,27703,27704],{"class":271},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[77,27706,27146],{"class":94},[77,27708,27709,27711],{"class":79,"line":1549},[77,27710,27151],{"class":94},[77,27712,27146],{"class":94},[77,27714,27715,27717],{"class":79,"line":1566},[77,27716,27223],{"class":94},[77,27718,27146],{"class":94},[77,27720,27721,27723],{"class":79,"line":1572},[77,27722,27407],{"class":94},[77,27724,27146],{"class":94},[77,27726,27727,27730],{"class":79,"line":1589},[77,27728,27729],{"class":94},"  --display_data=true",[77,27731,27146],{"class":94},[77,27733,27734,27737,27740],{"class":79,"line":1595},[77,27735,27736],{"class":94},"  --dataset.repo_id=",[77,27738,27739],{"class":271},"\"Embodied-AI-6\u002Fso101_test\"",[77,27741,27146],{"class":94},[77,27743,27744,27747],{"class":79,"line":4088},[77,27745,27746],{"class":94},"  --dataset.num_episodes=10",[77,27748,27146],{"class":94},[77,27750,27751,27754,27757],{"class":79,"line":4093},[77,27752,27753],{"class":94},"  --dataset.single_task=",[77,27755,27756],{"class":271},"\"Grab the green cube\"",[77,27758,27146],{"class":94},[77,27760,27761],{"class":79,"line":4099},[77,27762,27763],{"class":94},"  --resume=true\n",[51,27765,27766],{},[54,27767,27768,27771],{},[74,27769,27770],{},"--resume=true","：已有同一数据集时继续追加 episode。",[24,27773,27774],{},[40,27775],{"alt":72,"src":27776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27778,27780],{"id":27779},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[67,27782,27784],{"className":26289,"code":27783,"language":26291,"meta":72,"style":72},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[74,27785,27786],{"__ignoreMap":72},[77,27787,27788,27791,27794],{"class":79,"line":80},[77,27789,27790],{"class":83},"rm",[77,27792,27793],{"class":94}," -rf",[77,27795,27796],{"class":271}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[24,27798,27799],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27801,27803],{"id":27802},"_63-回放指定-episode","6.3 回放指定 episode",[67,27805,27807],{"className":26289,"code":27806,"language":26291,"meta":72,"style":72},"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",[74,27808,27809,27816,27822,27828,27834,27842],{"__ignoreMap":72},[77,27810,27811,27814],{"class":79,"line":80},[77,27812,27813],{"class":83},"lerobot-replay",[77,27815,27146],{"class":94},[77,27817,27818,27820],{"class":79,"line":91},[77,27819,27178],{"class":94},[77,27821,27146],{"class":94},[77,27823,27824,27826],{"class":79,"line":107},[77,27825,27256],{"class":94},[77,27827,27146],{"class":94},[77,27829,27830,27832],{"class":79,"line":191},[77,27831,27316],{"class":94},[77,27833,27146],{"class":94},[77,27835,27836,27838,27840],{"class":79,"line":1543},[77,27837,27736],{"class":94},[77,27839,27739],{"class":271},[77,27841,27146],{"class":94},[77,27843,27844],{"class":79,"line":1549},[77,27845,27846],{"class":94},"  --dataset.episode=0\n",[2520,27848,27849],{},"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":72,"searchDepth":91,"depth":91,"links":27851},[27852,27853,27854],{"id":27666,"depth":91,"text":27667},{"id":27779,"depth":91,"text":27780},{"id":27802,"depth":91,"text":27803},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27657,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27861,"title":27862,"body":27863,"description":2546,"extension":2547,"meta":27991,"navigation":2549,"path":27992,"seo":27993,"stem":27994,"__hash__":27995},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27864,"toc":27989},[27865,27869,27932,27935,27982,27987],[10,27866,27868],{"id":27867},"_7-act-模型训练","7. ACT 模型训练",[67,27870,27872],{"className":26289,"code":27871,"language":26291,"meta":72,"style":72},"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",[74,27873,27874,27881,27889,27896,27903,27910,27917,27924],{"__ignoreMap":72},[77,27875,27876,27879],{"class":79,"line":80},[77,27877,27878],{"class":83},"lerobot-train",[77,27880,27146],{"class":94},[77,27882,27883,27885,27887],{"class":79,"line":91},[77,27884,27736],{"class":94},[77,27886,27739],{"class":271},[77,27888,27146],{"class":94},[77,27890,27891,27894],{"class":79,"line":107},[77,27892,27893],{"class":94},"  --policy.type=act",[77,27895,27146],{"class":94},[77,27897,27898,27901],{"class":79,"line":191},[77,27899,27900],{"class":94},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[77,27902,27146],{"class":94},[77,27904,27905,27908],{"class":79,"line":1543},[77,27906,27907],{"class":94},"  --job_name=act_so101_test",[77,27909,27146],{"class":94},[77,27911,27912,27915],{"class":79,"line":1549},[77,27913,27914],{"class":94},"  --policy.device=cuda",[77,27916,27146],{"class":94},[77,27918,27919,27922],{"class":79,"line":1566},[77,27920,27921],{"class":94},"  --wandb.enable=false",[77,27923,27146],{"class":94},[77,27925,27926,27929],{"class":79,"line":1572},[77,27927,27928],{"class":94},"  --policy.repo_id=",[77,27930,27931],{"class":271},"\"Embodied-AI-6\u002Flerobot_new\"\n",[24,27933,27934],{},"参数说明：",[51,27936,27937,27943,27949,27955,27961,27970,27976],{},[54,27938,27939,27942],{},[74,27940,27941],{},"--dataset.repo_id","：训练数据集仓库。",[54,27944,27945,27948],{},[74,27946,27947],{},"--policy.type=act","：策略模型类型为 ACT。",[54,27950,27951,27954],{},[74,27952,27953],{},"--output_dir","：本地训练输出目录。",[54,27956,27957,27960],{},[74,27958,27959],{},"--job_name","：训练任务名称。",[54,27962,27963,27966,27967,27030],{},[74,27964,27965],{},"--policy.device","：训练设备（如 ",[74,27968,27969],{},"cuda",[54,27971,27972,27975],{},[74,27973,27974],{},"--wandb.enable","：是否启用 WandB 可视化。",[54,27977,27978,27981],{},[74,27979,27980],{},"--policy.repo_id","：训练后模型推送目标仓库。",[24,27983,27984],{},[40,27985],{"alt":72,"src":27986},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2520,27988,27849],{},{"title":72,"searchDepth":91,"depth":91,"links":27990},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27862,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27997,"title":27998,"body":27999,"description":2546,"extension":2547,"meta":28086,"navigation":2549,"path":28087,"seo":28088,"stem":28089,"__hash__":28090},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28000,"toc":28084},[28001,28004,28007,28074,28082],[10,28002,27998],{"id":28003},"_8-策略部署与自动采集",[24,28005,28006],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[67,28008,28010],{"className":26289,"code":28009,"language":26291,"meta":72,"style":72},"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",[74,28011,28012,28018,28024,28030,28038,28044,28051,28059,28067],{"__ignoreMap":72},[77,28013,28014,28016],{"class":79,"line":80},[77,28015,27677],{"class":83},[77,28017,27146],{"class":94},[77,28019,28020,28022],{"class":79,"line":91},[77,28021,27178],{"class":94},[77,28023,27146],{"class":94},[77,28025,28026,28028],{"class":79,"line":107},[77,28027,27256],{"class":94},[77,28029,27146],{"class":94},[77,28031,28032,28034,28036],{"class":79,"line":191},[77,28033,27385],{"class":94},[77,28035,27704],{"class":271},[77,28037,27146],{"class":94},[77,28039,28040,28042],{"class":79,"line":1543},[77,28041,27316],{"class":94},[77,28043,27146],{"class":94},[77,28045,28046,28049],{"class":79,"line":1549},[77,28047,28048],{"class":94},"  --display_data=false",[77,28050,27146],{"class":94},[77,28052,28053,28055,28057],{"class":79,"line":1566},[77,28054,27736],{"class":94},[77,28056,27739],{"class":271},[77,28058,27146],{"class":94},[77,28060,28061,28063,28065],{"class":79,"line":1572},[77,28062,27753],{"class":94},[77,28064,27756],{"class":271},[77,28066,27146],{"class":94},[77,28068,28069,28072],{"class":79,"line":1589},[77,28070,28071],{"class":94},"  --policy.path=",[77,28073,27931],{"class":271},[51,28075,28076],{},[54,28077,28078,28081],{},[74,28079,28080],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2520,28083,27849],{},{"title":72,"searchDepth":91,"depth":91,"links":28085},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27998,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28092,"title":28093,"body":28094,"description":2546,"extension":2547,"meta":28123,"navigation":2549,"path":28124,"seo":28125,"stem":28126,"__hash__":28127},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28095,"toc":28121},[28096,28100,28103,28109,28112,28118],[10,28097,28099],{"id":28098},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[24,28101,28102],{},"项目地址：",[24,28104,28105],{},[417,28106,28107],{"href":28107,"rel":28108},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26332],[24,28110,28111],{},"参考教程：",[24,28113,28114],{},[417,28115,28116],{"href":28116,"rel":28117},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26332],[24,28119,28120],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":72,"searchDepth":91,"depth":91,"links":28122},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28093,"description":2546},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28129,"title":28130,"body":28131,"description":28135,"extension":2547,"meta":28136,"navigation":2549,"path":28137,"seo":28138,"stem":28139,"__hash__":28140},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28132,"toc":28133},[],{"title":72,"searchDepth":91,"depth":91,"links":28134},[],"act复现",{"category":25847},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28130,"description":28135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28142,"title":28143,"body":28144,"description":72,"extension":2547,"meta":28446,"navigation":2549,"path":28447,"seo":28448,"stem":28449,"__hash__":28450},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28145,"toc":28438},[28146,28149,28153,28163,28170,28177,28180,28187,28190,28193,28197,28209,28213,28259,28262,28265,28268,28271,28274,28278,28316,28322,28326,28380,28385,28388,28391,28396,28399,28404,28407,28410,28414,28417,28420,28424],[10,28147,28143],{"id":28148},"_1简介",[19,28150,28152],{"id":28151},"_11什么是-docker","1.1什么是 Docker？",[24,28154,28155,28156,28159,28160],{},"Docker 是一个开源的 ",[27,28157,28158],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[27,28161,28162],{},"一次构建，到处运行。",[24,28164,28165,28166,28169],{},"“ ",[27,28167,28168],{},"一次构建，到处运行"," ”也就是说：",[139,28171,28172],{},[54,28173,28174],{},[27,28175,28176],{},"之前：",[24,28178,28179],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[139,28181,28182],{},[54,28183,28184],{},[27,28185,28186],{},"使用docker后：",[24,28188,28189],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[24,28191,28192],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[19,28194,28196],{"id":28195},"_12它是怎么工作的","1.2.它是怎么工作的？",[51,28198,28199,28202],{},[54,28200,28201],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[54,28203,28204,28205,28208],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[27,28206,28207],{},"无论在哪运行都一样稳定"," 。",[19,28210,28212],{"id":28211},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2755,28214,28215,28225],{},[2758,28216,28217],{},[2761,28218,28219,28222],{},[2764,28220,28221],{"align":101},"概念",[2764,28223,28224],{"align":101},"解释",[2801,28226,28227,28235,28243,28251],{},[2761,28228,28229,28232],{},[2806,28230,28231],{"align":101},"镜像",[2806,28233,28234],{"align":101},"Image，运行容器的模板，像是一个应用快照",[2761,28236,28237,28240],{},[2806,28238,28239],{"align":101},"容器",[2806,28241,28242],{"align":101},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2761,28244,28245,28248],{},[2806,28246,28247],{"align":101},"Dockerfile",[2806,28249,28250],{"align":101},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2761,28252,28253,28256],{},[2806,28254,28255],{"align":101},"仓库",[2806,28257,28258],{"align":101},"Registry，存放镜像的地方，比如 Docker Hub",[24,28260,28261],{},"抽象化理解:",[24,28263,28264],{},"Docker镜像≈C++类",[24,28266,28267],{},"Docker容器≈C++类实例(即对象)",[24,28269,28270],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[24,28272,28273],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[19,28275,28277],{"id":28276},"_14类比理解","1.4.类比理解",[2755,28279,28280,28290],{},[2758,28281,28282],{},[2761,28283,28284,28287],{},[2764,28285,28286],{"align":101},"传统部署",[2764,28288,28289],{"align":101},"Docker部署",[2801,28291,28292,28300,28308],{},[2761,28293,28294,28297],{},[2806,28295,28296],{"align":101},"手动安装依赖、调试版本不一致问题",[2806,28298,28299],{"align":101},"一次打包环境和代码",[2761,28301,28302,28305],{},[2806,28303,28304],{"align":101},"程序“裸奔”跑在系统上",[2806,28306,28307],{"align":101},"程序“穿着容器”隔离运行",[2761,28309,28310,28313],{},[2806,28311,28312],{"align":101},"容易“在我电脑上能跑”",[2806,28314,28315],{"align":101},"保证“无论在哪都能跑”",[24,28317,28318,28319],{},"就像快递包裹： ",[27,28320,28321],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[19,28323,28325],{"id":28324},"_15docker-的核心优势","1.5.Docker 的核心优势",[2755,28327,28328,28338],{},[2758,28329,28330],{},[2761,28331,28332,28335],{},[2764,28333,28334],{"align":101},"优势",[2764,28336,28337],{"align":101},"说明",[2801,28339,28340,28348,28356,28364,28372],{},[2761,28341,28342,28345],{},[2806,28343,28344],{"align":101},"轻量级",[2806,28346,28347],{"align":101},"基于系统内核共享，启动速度快，占资源少",[2761,28349,28350,28353],{},[2806,28351,28352],{"align":101},"跨平台",[2806,28354,28355],{"align":101},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2761,28357,28358,28361],{},[2806,28359,28360],{"align":101},"易于迁移部署",[2806,28362,28363],{"align":101},"应用和环境一起封装，不怕依赖不一致",[2761,28365,28366,28369],{},[2806,28367,28368],{"align":101},"易于版本控制",[2806,28370,28371],{"align":101},"镜像版本可控，支持回滚",[2761,28373,28374,28377],{},[2806,28375,28376],{"align":101},"生态丰富",[2806,28378,28379],{"align":101},"Docker Hub 上有成千上万的现成镜像可用",[139,28381,28382],{},[54,28383,28384],{},"在Linux上可以几乎实现无性能损失。",[24,28386,28387],{},"docker里的发行版和本机共用Linux内核。",[24,28389,28390],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[139,28392,28393],{},[54,28394,28395],{},"可以快速部署在绝大多数Linux发行版",[24,28397,28398],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[139,28400,28401],{},[54,28402,28403],{},"配置环境简单",[24,28405,28406],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[24,28408,28409],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[139,28411,28412],{},[54,28413,28376],{},[24,28415,28416],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[24,28418,28419],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[19,28421,28423],{"id":28422},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[51,28425,28426,28429,28432,28435],{},[54,28427,28428],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[54,28430,28431],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[54,28433,28434],{},"微服务架构：每个服务一个容器，灵活组合",[54,28436,28437],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":72,"searchDepth":91,"depth":91,"links":28439},[28440,28441,28442,28443,28444,28445],{"id":28151,"depth":107,"text":28152},{"id":28195,"depth":107,"text":28196},{"id":28211,"depth":107,"text":28212},{"id":28276,"depth":107,"text":28277},{"id":28324,"depth":107,"text":28325},{"id":28422,"depth":107,"text":28423},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28143,"description":72},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28452,"title":28453,"body":28454,"description":72,"extension":2547,"meta":29187,"navigation":2549,"path":29188,"seo":29189,"stem":29190,"__hash__":29191},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28455,"toc":29182},[28456,28459,28463,28466,28469,28475,28481,28485,28494,28497,28554,28557,28608,28611,28694,28697,28734,28738,28749,28762,28769,28772,28852,28855,28905,28908,28931,28935,28942,28945,28961,28967,28970,28986,28992,28995,29011,29025,29031,29051,29057,29060,29072,29078,29081,29095,29101,29104,29124,29129,29132,29135,29139,29142,29145,29148,29155,29158,29161,29164,29169,29174,29179],[10,28457,28453],{"id":28458},"_2安装docker",[19,28460,28462],{"id":28461},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[24,28464,28465],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[24,28467,28468],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[24,28470,28471],{},[417,28472,28473],{"href":28473,"rel":28474},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26332],[24,28476,28477],{},[417,28478,28479],{"href":28479,"rel":28480},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26332],[24468,28482,28484],{"id":28483},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[24,28486,28487,28488,28493],{},"以下内容根据 ",[417,28489,28492],{"href":28490,"rel":28491},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26332],"官方文档"," 修改而来。",[24,28495,28496],{},"如果你过去安装过 docker，先删掉：",[67,28498,28500],{"className":26289,"code":28499,"language":26291,"meta":72,"style":72},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[74,28501,28502],{"__ignoreMap":72},[77,28503,28504,28506,28509,28512,28515,28518,28521,28524,28527,28530,28533,28536,28539,28542,28545,28548,28551],{"class":79,"line":80},[77,28505,5500],{"class":2123},[77,28507,28508],{"class":87}," pkg ",[77,28510,28511],{"class":2123},"in",[77,28513,28514],{"class":271}," docker.io",[77,28516,28517],{"class":271}," docker-doc",[77,28519,28520],{"class":271}," docker-compose",[77,28522,28523],{"class":271}," docker-compose-v2",[77,28525,28526],{"class":271}," podman-docker",[77,28528,28529],{"class":271}," containerd",[77,28531,28532],{"class":271}," runc",[77,28534,28535],{"class":87},"; ",[77,28537,28538],{"class":2123},"do",[77,28540,28541],{"class":83}," sudo",[77,28543,28544],{"class":271}," apt-get",[77,28546,28547],{"class":271}," remove",[77,28549,28550],{"class":87}," $pkg; ",[77,28552,28553],{"class":2123},"done\n",[24,28555,28556],{},"首先安装依赖和GPG：",[67,28558,28562],{"className":28559,"code":28560,"language":28561,"meta":72,"style":72},"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",[74,28563,28564,28569,28574,28579,28584,28589,28594,28598,28603],{"__ignoreMap":72},[77,28565,28566],{"class":79,"line":80},[77,28567,28568],{},"# Add Docker's official GPG key:\n",[77,28570,28571],{"class":79,"line":91},[77,28572,28573],{},"sudo apt-get update\n",[77,28575,28576],{"class":79,"line":107},[77,28577,28578],{},"sudo apt-get install ca-certificates curl\n",[77,28580,28581],{"class":79,"line":191},[77,28582,28583],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[77,28585,28586],{"class":79,"line":1543},[77,28587,28588],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[77,28590,28591],{"class":79,"line":1549},[77,28592,28593],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[77,28595,28596],{"class":79,"line":1566},[77,28597,4875],{"emptyLinePlaceholder":2549},[77,28599,28600],{"class":79,"line":1572},[77,28601,28602],{},"# 如果上面这行报错就弄下面这行\n",[77,28604,28605],{"class":79,"line":1589},[77,28606,28607],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[24,28609,28610],{},"信任 Docker 的 GPG 公钥并添加仓库：",[67,28612,28614],{"className":26289,"code":28613,"language":26291,"meta":72,"style":72},"# 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",[74,28615,28616,28621,28627,28644,28677],{"__ignoreMap":72},[77,28617,28618],{"class":79,"line":80},[77,28619,28620],{"class":323},"# Add the repository to Apt sources:\n",[77,28622,28623,28625],{"class":79,"line":91},[77,28624,27593],{"class":94},[77,28626,27146],{"class":94},[77,28628,28629,28632,28635,28638,28641],{"class":79,"line":107},[77,28630,28631],{"class":271},"  \"deb [arch=$(",[77,28633,28634],{"class":83},"dpkg",[77,28636,28637],{"class":94}," --print-architecture",[77,28639,28640],{"class":271},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[77,28642,28643],{"class":94},"\\\n",[77,28645,28646,28649,28651,28653,28656,28659,28661,28663,28666,28668,28670,28673,28675],{"class":79,"line":191},[77,28647,28648],{"class":271},"  \"",[77,28650,27567],{"class":87},[77,28652,3171],{"class":94},[77,28654,28655],{"class":271}," \u002Fetc\u002Fos-release",[77,28657,28658],{"class":87}," && ",[77,28660,27593],{"class":94},[77,28662,12197],{"class":271},[77,28664,28665],{"class":87},"$VERSION_CODENAME",[77,28667,2865],{"class":271},[77,28669,3043],{"class":87},[77,28671,28672],{"class":271},"\" stable\"",[77,28674,27577],{"class":2123},[77,28676,27146],{"class":94},[77,28678,28679,28682,28685,28688,28691],{"class":79,"line":1543},[77,28680,28681],{"class":83},"  sudo",[77,28683,28684],{"class":271}," tee",[77,28686,28687],{"class":271}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[77,28689,28690],{"class":2123}," >",[77,28692,28693],{"class":271}," \u002Fdev\u002Fnull\n",[24,28695,28696],{},"最后安装",[67,28698,28700],{"className":26289,"code":28699,"language":26291,"meta":72,"style":72},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[74,28701,28702,28711],{"__ignoreMap":72},[77,28703,28704,28706,28708],{"class":79,"line":80},[77,28705,27044],{"class":83},[77,28707,28544],{"class":271},[77,28709,28710],{"class":271}," update\n",[77,28712,28713,28715,28717,28719,28722,28725,28728,28731],{"class":79,"line":91},[77,28714,27044],{"class":83},[77,28716,28544],{"class":271},[77,28718,26301],{"class":271},[77,28720,28721],{"class":271}," docker-ce",[77,28723,28724],{"class":271}," docker-ce-cli",[77,28726,28727],{"class":271}," containerd.io",[77,28729,28730],{"class":271}," docker-buildx-plugin",[77,28732,28733],{"class":271}," docker-compose-plugin\n",[24468,28735,28737],{"id":28736},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[24,28739,28740,28741,28744,28745,28748],{},"查看自己自己包管理工具版本（dnf是 ",[27,28742,28743],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[27,28746,28747],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[67,28750,28752],{"className":26289,"code":28751,"language":26291,"meta":72,"style":72},"dnf --version\n",[74,28753,28754],{"__ignoreMap":72},[77,28755,28756,28759],{"class":79,"line":80},[77,28757,28758],{"class":83},"dnf",[77,28760,28761],{"class":94}," --version\n",[24,28763,28487,28764,28768],{},[417,28765,28492],{"href":28766,"rel":28767},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26332]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[24,28770,28771],{},"如果你之前安装过 docker，请先删掉",[67,28773,28775],{"className":26289,"code":28774,"language":26291,"meta":72,"style":72},"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",[74,28776,28777,28791,28798,28805,28812,28819,28826,28833,28840,28847],{"__ignoreMap":72},[77,28778,28779,28781,28784,28786,28789],{"class":79,"line":80},[77,28780,27044],{"class":83},[77,28782,28783],{"class":271}," dnf",[77,28785,28547],{"class":271},[77,28787,28788],{"class":271}," docker",[77,28790,27146],{"class":94},[77,28792,28793,28796],{"class":79,"line":91},[77,28794,28795],{"class":271},"                  docker-client",[77,28797,27146],{"class":94},[77,28799,28800,28803],{"class":79,"line":107},[77,28801,28802],{"class":271},"                  docker-client-latest",[77,28804,27146],{"class":94},[77,28806,28807,28810],{"class":79,"line":191},[77,28808,28809],{"class":271},"                  docker-common",[77,28811,27146],{"class":94},[77,28813,28814,28817],{"class":79,"line":1543},[77,28815,28816],{"class":271},"                  docker-latest",[77,28818,27146],{"class":94},[77,28820,28821,28824],{"class":79,"line":1549},[77,28822,28823],{"class":271},"                  docker-latest-logrotate",[77,28825,27146],{"class":94},[77,28827,28828,28831],{"class":79,"line":1566},[77,28829,28830],{"class":271},"                  docker-logrotate",[77,28832,27146],{"class":94},[77,28834,28835,28838],{"class":79,"line":1572},[77,28836,28837],{"class":271},"                  docker-selinux",[77,28839,27146],{"class":94},[77,28841,28842,28845],{"class":79,"line":1589},[77,28843,28844],{"class":271},"                  docker-engine-selinux",[77,28846,27146],{"class":94},[77,28848,28849],{"class":79,"line":1595},[77,28850,28851],{"class":271},"                  docker-engine\n",[24,28853,28854],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[67,28856,28858],{"className":26289,"code":28857,"language":26291,"meta":72,"style":72},"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",[74,28859,28860,28874,28889],{"__ignoreMap":72},[77,28861,28862,28864,28866,28869,28871],{"class":79,"line":80},[77,28863,27044],{"class":83},[77,28865,28783],{"class":271},[77,28867,28868],{"class":94}," -y",[77,28870,26301],{"class":271},[77,28872,28873],{"class":271}," dnf-plugins-core\n",[77,28875,28876,28878,28880,28883,28886],{"class":79,"line":91},[77,28877,27044],{"class":83},[77,28879,28783],{"class":271},[77,28881,28882],{"class":271}," config-manager",[77,28884,28885],{"class":271}," addrepo",[77,28887,28888],{"class":94}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[77,28890,28891,28893,28896,28899,28902],{"class":79,"line":107},[77,28892,27044],{"class":83},[77,28894,28895],{"class":271}," sed",[77,28897,28898],{"class":94}," -i",[77,28900,28901],{"class":271}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[77,28903,28904],{"class":271}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[24,28906,28907],{},"最后安装：",[67,28909,28911],{"className":26289,"code":28910,"language":26291,"meta":72,"style":72},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[74,28912,28913],{"__ignoreMap":72},[77,28914,28915,28917,28919,28921,28923,28925,28927,28929],{"class":79,"line":80},[77,28916,27044],{"class":83},[77,28918,28783],{"class":271},[77,28920,26301],{"class":271},[77,28922,28721],{"class":271},[77,28924,28724],{"class":271},[77,28926,28727],{"class":271},[77,28928,28730],{"class":271},[77,28930,28733],{"class":271},[19,28932,28934],{"id":28933},"_22配置环境","2.2.配置环境",[24468,28936,28938,28941],{"id":28937},"_221检查-docker-服务状态",[27,28939,28940],{},"2.2.1.检查 Docker 服务状态"," ：",[24,28943,28944],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[67,28946,28948],{"className":26289,"code":28947,"language":26291,"meta":72,"style":72},"systemctl status docker\n",[74,28949,28950],{"__ignoreMap":72},[77,28951,28952,28955,28958],{"class":79,"line":80},[77,28953,28954],{"class":83},"systemctl",[77,28956,28957],{"class":271}," status",[77,28959,28960],{"class":271}," docker\n",[24468,28962,28964,28941],{"id":28963},"_222启动-docker-服务",[27,28965,28966],{},"2.2.2.启动 Docker 服务",[24,28968,28969],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[67,28971,28973],{"className":26289,"code":28972,"language":26291,"meta":72,"style":72},"sudo systemctl start docker\n",[74,28974,28975],{"__ignoreMap":72},[77,28976,28977,28979,28982,28984],{"class":79,"line":80},[77,28978,27044],{"class":83},[77,28980,28981],{"class":271}," systemctl",[77,28983,6659],{"class":271},[77,28985,28960],{"class":271},[24468,28987,28989,28941],{"id":28988},"_223设置-docker-开机自启",[27,28990,28991],{},"2.2.3.设置 Docker 开机自启",[24,28993,28994],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[67,28996,28998],{"className":26289,"code":28997,"language":26291,"meta":72,"style":72},"sudo systemctl enable docker\n",[74,28999,29000],{"__ignoreMap":72},[77,29001,29002,29004,29006,29009],{"class":79,"line":80},[77,29003,27044],{"class":83},[77,29005,28981],{"class":271},[77,29007,29008],{"class":271}," enable",[77,29010,28960],{"class":271},[24468,29012,29014,16267,29017,16267,29022,28941],{"id":29013},"_224将用户添加到-docker-组",[27,29015,29016],{},"2.2.4.将用户添加到",[27,29018,29019],{},[74,29020,29021],{},"docker",[27,29023,29024],{},"组",[24,29026,29027,29028,29030],{},"使用以下命令将当前用户添加到 ",[74,29029,29021],{}," 组：",[67,29032,29034],{"className":26289,"code":29033,"language":26291,"meta":72,"style":72},"sudo usermod -aG docker $USER\n",[74,29035,29036],{"__ignoreMap":72},[77,29037,29038,29040,29043,29046,29048],{"class":79,"line":80},[77,29039,27044],{"class":83},[77,29041,29042],{"class":271}," usermod",[77,29044,29045],{"class":94}," -aG",[77,29047,28788],{"class":271},[77,29049,29050],{"class":87}," $USER\n",[24468,29052,29054,28941],{"id":29053},"_225退出并重新登录",[27,29055,29056],{},"2.2.5.退出并重新登录",[24,29058,29059],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[67,29061,29063],{"className":26289,"code":29062,"language":26291,"meta":72,"style":72},"newgrp docker\n",[74,29064,29065],{"__ignoreMap":72},[77,29066,29067,29070],{"class":79,"line":80},[77,29068,29069],{"class":83},"newgrp",[77,29071,28960],{"class":271},[24468,29073,29075,28941],{"id":29074},"_226重新启动-docker-服务如果需要",[27,29076,29077],{},"2.2.6.重新启动 Docker 服务（如果需要）",[24,29079,29080],{},"确保 Docker 服务正在运行，可以使用以下命令：",[67,29082,29083],{"className":26289,"code":28972,"language":26291,"meta":72,"style":72},[74,29084,29085],{"__ignoreMap":72},[77,29086,29087,29089,29091,29093],{"class":79,"line":80},[77,29088,27044],{"class":83},[77,29090,28981],{"class":271},[77,29092,6659],{"class":271},[77,29094,28960],{"class":271},[24468,29096,29098,28941],{"id":29097},"_227重启电脑后检查-docker-服务状态",[27,29099,29100],{},"2.2.7.重启电脑后检查 Docker 服务状态",[24,29102,29103],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[67,29105,29107],{"className":26289,"code":29106,"language":26291,"meta":72,"style":72},"sudo reboot\nsystemctl status docker\n",[74,29108,29109,29116],{"__ignoreMap":72},[77,29110,29111,29113],{"class":79,"line":80},[77,29112,27044],{"class":83},[77,29114,29115],{"class":271}," reboot\n",[77,29117,29118,29120,29122],{"class":79,"line":91},[77,29119,28954],{"class":83},[77,29121,28957],{"class":271},[77,29123,28960],{"class":271},[24,29125,29126],{},[40,29127],{"alt":72,"src":29128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[24,29130,29131],{},"第三行显示enabled说明开机自启动成功",[24,29133,29134],{},"按q退出",[19,29136,29138],{"id":29137},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[24,29140,29141],{},"优先使用linux来使用docker是比较好的",[24,29143,29144],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[24,29146,29147],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[24,29149,29150,29151],{},"官方下载安装:",[417,29152,29153],{"href":29153,"rel":29154},"https:\u002F\u002Fwww.docker.com\u002F",[26332],[24,29156,29157],{},"Windows的Docker显卡直通与USB直通:",[24,29159,29160],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[24,29162,29163],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[24,29165,29166],{},[40,29167],{"alt":72,"src":29168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[24,29170,29171],{},[40,29172],{"alt":72,"src":29173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[24,29175,29176],{},[40,29177],{"alt":72,"src":29178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2520,29180,29181],{},"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":72,"searchDepth":91,"depth":91,"links":29183},[29184,29185,29186],{"id":28461,"depth":107,"text":28462},{"id":28933,"depth":107,"text":28934},{"id":29137,"depth":107,"text":29138},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28453,"description":72},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29193,"title":29194,"body":29195,"description":29202,"extension":2547,"meta":29895,"navigation":2549,"path":29896,"seo":29897,"stem":29898,"__hash__":29899},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29196,"toc":29889},[29197,29200,29203,29207,29212,29217,29220,29248,29253,29262,29265,29270,29274,29281,29286,29292,29296,29299,29303,29308,29400,29405,29423,29428,29449,29454,29470,29474,29479,29508,29513,29559,29564,29608,29616,29633,29638,29654,29659,29673,29676,29679,29682,29685,29714,29717,29722,29726,29729,29732,29738,29741,29744,29747,29809,29816,29821,29824,29842,29846,29849,29866,29869,29872,29886],[10,29198,29194],{"id":29199},"_3docker直通",[24,29201,29202],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[19,29204,29206],{"id":29205},"_31usb直通","3.1.USB直通",[24,29208,29209],{},[40,29210],{"alt":72,"src":29211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[139,29213,29214],{},[54,29215,29216],{},"方法一(不是很推荐新手)：",[24,29218,29219],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[67,29221,29223],{"className":26289,"code":29222,"language":26291,"meta":72,"style":72},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[74,29224,29225,29233,29238],{"__ignoreMap":72},[77,29226,29227,29230],{"class":79,"line":80},[77,29228,29229],{"class":83},"ls",[77,29231,29232],{"class":271}," \u002Fdev\n",[77,29234,29235],{"class":79,"line":91},[77,29236,29237],{"class":323},"#例如\n",[77,29239,29240,29243,29245],{"class":79,"line":107},[77,29241,29242],{"class":87},"--device",[77,29244,268],{"class":2123},[77,29246,29247],{"class":271},"\u002Fdev\u002Ftty_USB0\n",[139,29249,29250],{"start":91},[54,29251,29252],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[67,29254,29256],{"className":26289,"code":29255,"language":26291,"meta":72,"style":72},"--privileged\n",[74,29257,29258],{"__ignoreMap":72},[77,29259,29260],{"class":79,"line":80},[77,29261,29255],{"class":83},[24,29263,29264],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[24,29266,29267],{},[40,29268],{"alt":72,"src":29269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[19,29271,29273],{"id":29272},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[24,29275,29276,29277,29280],{},"NVIDIA Container Toolkit使用户 ",[27,29278,29279],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[24,29282,29283],{},[40,29284],{"alt":72,"src":29285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[24,29287,29288],{},[417,29289,29290],{"href":29290,"rel":29291},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26332],[24468,29293,29295],{"id":29294},"_321安装","3.2.1.安装",[24,29297,29298],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[406,29300,29302],{"id":29301},"_3211ubuntu","3.2.1.1.Ubuntu",[139,29304,29305],{},[54,29306,29307],{},"配置存储库 并更新",[67,29309,29311],{"className":26289,"code":29310,"language":26291,"meta":72,"style":72},"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",[74,29312,29313,29342,29362,29374,29386,29392],{"__ignoreMap":72},[77,29314,29315,29318,29321,29324,29326,29328,29331,29334,29337,29340],{"class":79,"line":80},[77,29316,29317],{"class":83},"curl",[77,29319,29320],{"class":94}," -fsSL",[77,29322,29323],{"class":271}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[77,29325,27577],{"class":2123},[77,29327,28541],{"class":83},[77,29329,29330],{"class":271}," gpg",[77,29332,29333],{"class":94}," --dearmor",[77,29335,29336],{"class":94}," -o",[77,29338,29339],{"class":271}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[77,29341,27146],{"class":94},[77,29343,29344,29347,29349,29352,29355,29358,29360],{"class":79,"line":91},[77,29345,29346],{"class":87},"  && ",[77,29348,29317],{"class":83},[77,29350,29351],{"class":94}," -s",[77,29353,29354],{"class":94}," -L",[77,29356,29357],{"class":271}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[77,29359,27577],{"class":2123},[77,29361,27146],{"class":94},[77,29363,29364,29367,29370,29372],{"class":79,"line":107},[77,29365,29366],{"class":83},"    sed",[77,29368,29369],{"class":271}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[77,29371,27577],{"class":2123},[77,29373,27146],{"class":94},[77,29375,29376,29379,29381,29384],{"class":79,"line":191},[77,29377,29378],{"class":83},"    sudo",[77,29380,28684],{"class":271},[77,29382,29383],{"class":271}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[77,29385,27146],{"class":94},[77,29387,29388,29390],{"class":79,"line":1543},[77,29389,29346],{"class":87},[77,29391,28643],{"class":94},[77,29393,29394,29396,29398],{"class":79,"line":1549},[77,29395,29378],{"class":83},[77,29397,28544],{"class":271},[77,29399,28710],{"class":271},[139,29401,29402],{"start":91},[54,29403,29404],{},"安装nvidia-docker2",[67,29406,29408],{"className":26289,"code":29407,"language":26291,"meta":72,"style":72},"sudo apt-get install -y nvidia-docker2\n",[74,29409,29410],{"__ignoreMap":72},[77,29411,29412,29414,29416,29418,29420],{"class":79,"line":80},[77,29413,27044],{"class":83},[77,29415,28544],{"class":271},[77,29417,26301],{"class":271},[77,29419,28868],{"class":94},[77,29421,29422],{"class":271}," nvidia-docker2\n",[139,29424,29425],{"start":107},[54,29426,29427],{},"使用nvidia-ctk命令配置container runtime",[67,29429,29431],{"className":26289,"code":29430,"language":26291,"meta":72,"style":72},"sudo nvidia-ctk runtime configure --runtime=docker\n",[74,29432,29433],{"__ignoreMap":72},[77,29434,29435,29437,29440,29443,29446],{"class":79,"line":80},[77,29436,27044],{"class":83},[77,29438,29439],{"class":271}," nvidia-ctk",[77,29441,29442],{"class":271}," runtime",[77,29444,29445],{"class":271}," configure",[77,29447,29448],{"class":94}," --runtime=docker\n",[139,29450,29451],{"start":191},[54,29452,29453],{},"重启docker服务:",[67,29455,29457],{"className":26289,"code":29456,"language":26291,"meta":72,"style":72},"sudo systemctl restart docker\n",[74,29458,29459],{"__ignoreMap":72},[77,29460,29461,29463,29465,29468],{"class":79,"line":80},[77,29462,27044],{"class":83},[77,29464,28981],{"class":271},[77,29466,29467],{"class":271}," restart",[77,29469,28960],{"class":271},[406,29471,29473],{"id":29472},"_3212fedora","3.2.1.2.Fedora",[139,29475,29476],{},[54,29477,29478],{},"配置存储库",[67,29480,29482],{"className":26289,"code":29481,"language":26291,"meta":72,"style":72},"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",[74,29483,29484,29499],{"__ignoreMap":72},[77,29485,29486,29488,29490,29492,29495,29497],{"class":79,"line":80},[77,29487,29317],{"class":83},[77,29489,29351],{"class":94},[77,29491,29354],{"class":94},[77,29493,29494],{"class":271}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[77,29496,27577],{"class":2123},[77,29498,27146],{"class":94},[77,29500,29501,29503,29505],{"class":79,"line":91},[77,29502,27044],{"class":83},[77,29504,28684],{"class":271},[77,29506,29507],{"class":271}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[139,29509,29510],{"start":91},[54,29511,29512],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[67,29514,29516],{"className":26289,"code":29515,"language":26291,"meta":72,"style":72},"# 如果是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",[74,29517,29518,29523,29537,29541,29546],{"__ignoreMap":72},[77,29519,29520],{"class":79,"line":80},[77,29521,29522],{"class":323},"# 如果是RHEL或者Rocky（DNF4）\n",[77,29524,29525,29527,29529,29531,29534],{"class":79,"line":91},[77,29526,27044],{"class":83},[77,29528,28783],{"class":271},[77,29530,28882],{"class":271},[77,29532,29533],{"class":94}," --add-repo",[77,29535,29536],{"class":271}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[77,29538,29539],{"class":79,"line":107},[77,29540,4875],{"emptyLinePlaceholder":2549},[77,29542,29543],{"class":79,"line":191},[77,29544,29545],{"class":323},"# 如果是Feodra41+（DNF5）\n",[77,29547,29548,29550,29552,29554,29556],{"class":79,"line":1543},[77,29549,27044],{"class":83},[77,29551,28783],{"class":271},[77,29553,28882],{"class":271},[77,29555,28885],{"class":271},[77,29557,29558],{"class":94}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[139,29560,29561],{"start":107},[54,29562,29563],{},"安装NVIDIA Container Toolki包",[67,29565,29567],{"className":26289,"code":29566,"language":26291,"meta":72,"style":72},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[74,29568,29569,29574,29587,29591,29596],{"__ignoreMap":72},[77,29570,29571],{"class":79,"line":80},[77,29572,29573],{"class":323},"# 如果是RHEL或者Rocky\n",[77,29575,29576,29578,29580,29582,29584],{"class":79,"line":91},[77,29577,27044],{"class":83},[77,29579,28783],{"class":271},[77,29581,26301],{"class":271},[77,29583,28868],{"class":94},[77,29585,29586],{"class":271}," nvidia-container-toolkit\n",[77,29588,29589],{"class":79,"line":107},[77,29590,4875],{"emptyLinePlaceholder":2549},[77,29592,29593],{"class":79,"line":191},[77,29594,29595],{"class":323},"# 如果是Fedora\n",[77,29597,29598,29600,29602,29604,29606],{"class":79,"line":1543},[77,29599,27044],{"class":83},[77,29601,28783],{"class":271},[77,29603,26301],{"class":271},[77,29605,28868],{"class":94},[77,29607,29586],{"class":271},[139,29609,29610],{"start":191},[54,29611,29612,29613,29615],{},"安装nvidia-docker2 ： 在Fedora上使用",[74,29614,28758],{},"进行安装",[67,29617,29619],{"className":26289,"code":29618,"language":26291,"meta":72,"style":72},"sudo dnf install -y nvidia-docker2\n",[74,29620,29621],{"__ignoreMap":72},[77,29622,29623,29625,29627,29629,29631],{"class":79,"line":80},[77,29624,27044],{"class":83},[77,29626,28783],{"class":271},[77,29628,26301],{"class":271},[77,29630,28868],{"class":94},[77,29632,29422],{"class":271},[139,29634,29635],{"start":1543},[54,29636,29637],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[67,29639,29640],{"className":26289,"code":29430,"language":26291,"meta":72,"style":72},[74,29641,29642],{"__ignoreMap":72},[77,29643,29644,29646,29648,29650,29652],{"class":79,"line":80},[77,29645,27044],{"class":83},[77,29647,29439],{"class":271},[77,29649,29442],{"class":271},[77,29651,29445],{"class":271},[77,29653,29448],{"class":94},[139,29655,29656],{"start":1549},[54,29657,29658],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[67,29660,29661],{"className":26289,"code":29456,"language":26291,"meta":72,"style":72},[74,29662,29663],{"__ignoreMap":72},[77,29664,29665,29667,29669,29671],{"class":79,"line":80},[77,29666,27044],{"class":83},[77,29668,28981],{"class":271},[77,29670,29467],{"class":271},[77,29672,28960],{"class":271},[24,29674,29675],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[24,29677,29678],{},"方法：",[24,29680,29681],{},"1️⃣nvidia-smi",[24,29683,29684],{},"2️⃣运行nvidia cuda 容器进行测试",[67,29686,29688],{"className":26289,"code":29687,"language":26291,"meta":72,"style":72},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[74,29689,29690],{"__ignoreMap":72},[77,29691,29692,29694,29696,29699,29702,29705,29708,29711],{"class":79,"line":80},[77,29693,27044],{"class":83},[77,29695,28788],{"class":271},[77,29697,29698],{"class":271}," run",[77,29700,29701],{"class":94}," --rm",[77,29703,29704],{"class":94}," --gpus",[77,29706,29707],{"class":271}," all",[77,29709,29710],{"class":271}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[77,29712,29713],{"class":271}," nvidia-smi\n",[24,29715,29716],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[24,29718,29719],{},[40,29720],{"alt":72,"src":29721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[19,29723,29725],{"id":29724},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[24,29727,29728],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[24,29730,29731],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[24,29733,29734],{},[417,29735,29736],{"href":29736,"rel":29737},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26332],[24,29739,29740],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[24,29742,29743],{},"我们只需要找到对应的Docker镜像当底包即可。",[24,29745,29746],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2755,29748,29749,29765],{},[2758,29750,29751],{},[2761,29752,29753,29756,29759,29762],{},[2764,29754,29755],{"align":101},"镜像类型",[2764,29757,29758],{"align":101},"适用场景",[2764,29760,29761],{"align":101},"示例标签",[2764,29763,29764],{"align":101},"大小",[2801,29766,29767,29781,29795],{},[2761,29768,29769,29772,29775,29778],{},[2806,29770,29771],{"align":101},"base",[2806,29773,29774],{"align":101},"仅需 CUDA 运行时库",[2806,29776,29777],{"align":101},"12.4.0-base-ubuntu22.04",[2806,29779,29780],{"align":101},"~240MB",[2761,29782,29783,29786,29789,29792],{},[2806,29784,29785],{"align":101},"runtime",[2806,29787,29788],{"align":101},"部署编译后的应用（含数学库）",[2806,29790,29791],{"align":101},"12.4.0-runtime-ubuntu22.04",[2806,29793,29794],{"align":101},"~2GB",[2761,29796,29797,29800,29803,29806],{},[2806,29798,29799],{"align":101},"devel",[2806,29801,29802],{"align":101},"开发环境（含编译工具）",[2806,29804,29805],{"align":101},"12.4.0-devel-ubuntu22.04",[2806,29807,29808],{"align":101},"~3GB",[24,29810,29811,29812,29815],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[74,29813,29814],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[24,29817,29818],{},[40,29819],{"alt":72,"src":29820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[24,29822,29823],{},"在dockerfile里就可以开头这么写：",[67,29825,29827],{"className":26289,"code":29826,"language":26291,"meta":72,"style":72},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[74,29828,29829,29834],{"__ignoreMap":72},[77,29830,29831],{"class":79,"line":80},[77,29832,29833],{"class":323},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[77,29835,29836,29839],{"class":79,"line":91},[77,29837,29838],{"class":83},"FROM",[77,29840,29841],{"class":271}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[19,29843,29845],{"id":29844},"_34配置以太网","3.4.配置以太网",[24,29847,29848],{},"指定网络模式",[67,29850,29852],{"className":26289,"code":29851,"language":26291,"meta":72,"style":72},"--net=host \\\n",[74,29853,29854],{"__ignoreMap":72},[77,29855,29856,29859,29861,29864],{"class":79,"line":80},[77,29857,29858],{"class":87},"--net",[77,29860,268],{"class":2123},[77,29862,29863],{"class":271},"host",[77,29865,27146],{"class":83},[24,29867,29868],{},"启动参数里加上这行即可。具体在下方",[24,29870,29871],{},"--net选项：指定网络模式，该选项有以下参数可选：",[51,29873,29874,29877,29880,29883],{},[54,29875,29876],{},"--net=bridge:默认选项，表示连接到默认的网桥",[54,29878,29879],{},"--net=host:容器使用宿主机的网络",[54,29881,29882],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[54,29884,29885],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2520,29887,29888],{},"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":72,"searchDepth":91,"depth":91,"links":29890},[29891,29892,29893,29894],{"id":29205,"depth":107,"text":29206},{"id":29272,"depth":107,"text":29273},{"id":29724,"depth":107,"text":29725},{"id":29844,"depth":107,"text":29845},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29194,"description":29202},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29901,"title":29902,"body":29903,"description":29910,"extension":2547,"meta":29916,"navigation":2549,"path":29917,"seo":29918,"stem":29919,"__hash__":29920},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29904,"toc":29914},[29905,29908,29911],[10,29906,29902],{"id":29907},"_4dockerhub换源",[24,29909,29910],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[24,29912,29913],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":72,"searchDepth":91,"depth":91,"links":29915},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29902,"description":29910},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29922,"title":29923,"body":29924,"description":72,"extension":2547,"meta":30936,"navigation":2549,"path":30937,"seo":30938,"stem":30939,"__hash__":30940},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29925,"toc":30931},[29926,29929,29933,29939,29943,29946,30286,30289,30292,30295,30300,30305,30308,30311,30314,30317,30336,30339,30350,30356,30538,30548,30564,30827,30829,30854,30869,30878,30928],[10,29927,29923],{"id":29928},"_5docker命令学习",[19,29930,29932],{"id":29931},"_51参考文档","5.1.参考文档",[24,29934,29935],{},[417,29936,29937],{"href":29937,"rel":29938},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26332],[19,29940,29942],{"id":29941},"_52常用命令","5.2.常用命令",[24,29944,29945],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2755,29947,29948,29961],{},[2758,29949,29950],{},[2761,29951,29952,29955,29958],{},[2764,29953,29954],{"align":101},"命令",[2764,29956,29957],{"align":101},"描述",[2764,29959,29960],{"align":101},"示例",[2801,29962,29963,29974,29985,29996,30007,30018,30029,30040,30050,30061,30072,30083,30093,30104,30115,30126,30136,30146,30156,30166,30177,30188,30199,30210,30221,30232,30242,30253,30264,30275],{},[2761,29964,29965,29968,29971],{},[2806,29966,29967],{"align":101},"docker run",[2806,29969,29970],{"align":101},"创建并启动一个新的容器。",[2806,29972,29973],{"align":101},"docker run -it ubuntu bash",[2761,29975,29976,29979,29982],{},[2806,29977,29978],{"align":101},"docker build",[2806,29980,29981],{"align":101},"通过指定的 Dockerfile 创建一个新的镜像。",[2806,29983,29984],{"align":101},"docker build -t myimage .",[2761,29986,29987,29990,29993],{},[2806,29988,29989],{"align":101},"docker pull",[2806,29991,29992],{"align":101},"从 Docker 仓库拉取镜像。",[2806,29994,29995],{"align":101},"docker pull ubuntu",[2761,29997,29998,30001,30004],{},[2806,29999,30000],{"align":101},"docker push",[2806,30002,30003],{"align":101},"将本地镜像推送到 Docker 仓库。",[2806,30005,30006],{"align":101},"docker push myimage",[2761,30008,30009,30012,30015],{},[2806,30010,30011],{"align":101},"docker stop",[2806,30013,30014],{"align":101},"停止一个正在运行的容器。",[2806,30016,30017],{"align":101},"docker stop container_id",[2761,30019,30020,30023,30026],{},[2806,30021,30022],{"align":101},"docker start",[2806,30024,30025],{"align":101},"启动一个已经存在的容器。",[2806,30027,30028],{"align":101},"docker start container_id",[2761,30030,30031,30034,30037],{},[2806,30032,30033],{"align":101},"docker restart",[2806,30035,30036],{"align":101},"重新启动容器。",[2806,30038,30039],{"align":101},"docker restart container_id",[2761,30041,30042,30045,30048],{},[2806,30043,30044],{"align":101},"docker ps",[2806,30046,30047],{"align":101},"列出当前正在运行的容器。",[2806,30049,30044],{"align":101},[2761,30051,30052,30055,30058],{},[2806,30053,30054],{"align":101},"docker rm",[2806,30056,30057],{"align":101},"删除一个或多个停止的容器。",[2806,30059,30060],{"align":101},"docker rm container_id",[2761,30062,30063,30066,30069],{},[2806,30064,30065],{"align":101},"docker exec",[2806,30067,30068],{"align":101},"在一个正在运行的容器中执行命令。",[2806,30070,30071],{"align":101},"docker exec -it container_id bash",[2761,30073,30074,30077,30080],{},[2806,30075,30076],{"align":101},"docker logs",[2806,30078,30079],{"align":101},"查看容器的日志输出。",[2806,30081,30082],{"align":101},"docker logs container_id",[2761,30084,30085,30088,30091],{},[2806,30086,30087],{"align":101},"docker images",[2806,30089,30090],{"align":101},"列出本地所有镜像。",[2806,30092,30087],{"align":101},[2761,30094,30095,30098,30101],{},[2806,30096,30097],{"align":101},"docker rmi",[2806,30099,30100],{"align":101},"删除一个或多个镜像。",[2806,30102,30103],{"align":101},"docker rmi myimage",[2761,30105,30106,30109,30112],{},[2806,30107,30108],{"align":101},"docker network",[2806,30110,30111],{"align":101},"管理 Docker 网络。",[2806,30113,30114],{"align":101},"docker network ls",[2761,30116,30117,30120,30123],{},[2806,30118,30119],{"align":101},"docker volume",[2806,30121,30122],{"align":101},"管理 Docker 数据卷。",[2806,30124,30125],{"align":101},"docker volume ls",[2761,30127,30128,30131,30134],{},[2806,30129,30130],{"align":101},"docker-compose up",[2806,30132,30133],{"align":101},"启动 docker-compose.yml 中定义的所有服务。",[2806,30135,30130],{"align":101},[2761,30137,30138,30141,30144],{},[2806,30139,30140],{"align":101},"docker-compose down",[2806,30142,30143],{"align":101},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2806,30145,30140],{"align":101},[2761,30147,30148,30151,30154],{},[2806,30149,30150],{"align":101},"docker info",[2806,30152,30153],{"align":101},"显示 Docker 系统的详细信息。",[2806,30155,30150],{"align":101},[2761,30157,30158,30161,30164],{},[2806,30159,30160],{"align":101},"docker stats",[2806,30162,30163],{"align":101},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2806,30165,30160],{"align":101},[2761,30167,30168,30171,30174],{},[2806,30169,30170],{"align":101},"docker inspect",[2806,30172,30173],{"align":101},"查看容器或镜像的详细信息（JSON 格式）。",[2806,30175,30176],{"align":101},"docker inspect container_id",[2761,30178,30179,30182,30185],{},[2806,30180,30181],{"align":101},"docker save",[2806,30183,30184],{"align":101},"将一个镜像保存为 tar 文件。",[2806,30186,30187],{"align":101},"docker save -o myimage.tar myimage",[2761,30189,30190,30193,30196],{},[2806,30191,30192],{"align":101},"docker load",[2806,30194,30195],{"align":101},"从 tar 文件中加载镜像。",[2806,30197,30198],{"align":101},"docker load -i myimage.tar",[2761,30200,30201,30204,30207],{},[2806,30202,30203],{"align":101},"docker tag",[2806,30205,30206],{"align":101},"为镜像添加标签（tag）。",[2806,30208,30209],{"align":101},"docker tag myimage myimage:v1",[2761,30211,30212,30215,30218],{},[2806,30213,30214],{"align":101},"docker buildx build",[2806,30216,30217],{"align":101},"使用 Buildx 构建多架构镜像。",[2806,30219,30220],{"align":101},"docker buildx build -t myimage .",[2761,30222,30223,30226,30229],{},[2806,30224,30225],{"align":101},"docker buildx create",[2806,30227,30228],{"align":101},"创建一个新的 Buildx 构建实例。",[2806,30230,30231],{"align":101},"docker buildx create –use",[2761,30233,30234,30237,30240],{},[2806,30235,30236],{"align":101},"docker buildx ls",[2806,30238,30239],{"align":101},"列出所有可用的 Buildx 构建实例。",[2806,30241,30236],{"align":101},[2761,30243,30244,30247,30250],{},[2806,30245,30246],{"align":101},"docker buildx use",[2806,30248,30249],{"align":101},"设置当前的 Buildx 构建实例。",[2806,30251,30252],{"align":101},"docker buildx use mybuilder",[2761,30254,30255,30258,30261],{},[2806,30256,30257],{"align":101},"docker buildx bake",[2806,30259,30260],{"align":101},"使用 Bake 文件批量构建镜像。",[2806,30262,30263],{"align":101},"docker buildx bake -f bake.hcl",[2761,30265,30266,30269,30272],{},[2806,30267,30268],{"align":101},"docker buildx build –push",[2806,30270,30271],{"align":101},"构建镜像并推送到镜像仓库。",[2806,30273,30274],{"align":101},"docker buildx build –push -t myimage .",[2761,30276,30277,30280,30283],{},[2806,30278,30279],{"align":101},"docker buildx build –platform",[2806,30281,30282],{"align":101},"构建镜像并为多个平台生成支持。",[2806,30284,30285],{"align":101},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[24,30287,30288],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[24,30290,30291],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[24,30293,30294],{},"docker images 可以查看已经下载的镜像",[24,30296,30297],{},[40,30298],{"alt":72,"src":30299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[24,30301,30302],{},[27,30303,30304],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[24,30306,30307],{},"docker rmi $(docker images -q) 删除所有的镜像",[24,30309,30310],{},"docker container logs 查看容器日志",[24,30312,30313],{},"docker top 查看容器里的进程",[24,30315,30316],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[67,30318,30320],{"className":26289,"code":30319,"language":26291,"meta":72,"style":72},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[74,30321,30322],{"__ignoreMap":72},[77,30323,30324,30327,30330,30333],{"class":79,"line":80},[77,30325,30326],{"class":83},"如：docker",[77,30328,30329],{"class":271}," cp",[77,30331,30332],{"class":271}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[77,30334,30335],{"class":271}," \u002Fmydata\u002Fnginx\n",[24,30337,30338],{},"docker run时在启动容器的时候会有几个常用的选项：",[51,30340,30341,30344,30347],{},[54,30342,30343],{},"-d选项：表示后台运行",[54,30345,30346],{},"-P选项：随机端口映射",[54,30348,30349],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[19,30351,30353],{"id":30352},"_53run命令的参数非常重要",[27,30354,30355],{},"5.3.run命令的参数（非常重要）",[2755,30357,30358,30371],{},[2758,30359,30360],{},[2761,30361,30362,30365,30368],{},[2764,30363,30364],{"align":101},"参数\u002F配置",[2764,30366,30367],{"align":101},"功能说明",[2764,30369,30370],{"align":101},"重要性与参考依据",[2801,30372,30373,30384,30395,30406,30417,30428,30439,30450,30461,30472,30483,30494,30505,30516,30527],{},[2761,30374,30375,30378,30381],{},[2806,30376,30377],{"align":101},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2806,30379,30380],{"align":101},"指定容器名称，便于后续管理",[2806,30382,30383],{"align":101},"替代随机生成的容器名。",[2761,30385,30386,30389,30392],{},[2806,30387,30388],{"align":101},"–gpus all",[2806,30390,30391],{"align":101},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2806,30393,30394],{"align":101},"用于CUDA加速等GPU依赖任务。",[2761,30396,30397,30400,30403],{},[2806,30398,30399],{"align":101},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2806,30401,30402],{"align":101},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2806,30404,30405],{"align":101},"确保容器内GPU功能完整67。",[2761,30407,30408,30411,30414],{},[2806,30409,30410],{"align":101},"-dit",[2806,30412,30413],{"align":101},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2806,30415,30416],{"align":101},"允许容器在后台运行并支持交互操作。",[2761,30418,30419,30422,30425],{},[2806,30420,30421],{"align":101},"–privileged",[2806,30423,30424],{"align":101},"赋予容器完全主机权限（可访问设备、内核模块等）",[2806,30426,30427],{"align":101},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2761,30429,30430,30433,30436],{},[2806,30431,30432],{"align":101},"–net=host",[2806,30434,30435],{"align":101},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2806,30437,30438],{"align":101},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2761,30440,30441,30444,30447],{},[2806,30442,30443],{"align":101},"–group-add audio–group-add video–group-add dialout",[2806,30445,30446],{"align":101},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2806,30448,30449],{"align":101},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2761,30451,30452,30455,30458],{},[2806,30453,30454],{"align":101},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2806,30456,30457],{"align":101},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2806,30459,30460],{"align":101},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2761,30462,30463,30466,30469],{},[2806,30464,30465],{"align":101},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2806,30467,30468],{"align":101},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2806,30470,30471],{"align":101},"实现容器内图形显示。",[2761,30473,30474,30477,30480],{},[2806,30475,30476],{"align":101},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2806,30478,30479],{"align":101},"挂载X11认证文件（只读）",[2806,30481,30482],{"align":101},"确保容器有权连接宿主机显示服务。",[2761,30484,30485,30488,30491],{},[2806,30486,30487],{"align":101},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2806,30489,30490],{"align":101},"挂载Wayland显示协议相关目录",[2806,30492,30493],{"align":101},"支持Wayland协议的图形显示。",[2761,30495,30496,30499,30502],{},[2806,30497,30498],{"align":101},"–ulimit nofile=1024:524288",[2806,30500,30501],{"align":101},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2806,30503,30504],{"align":101},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2761,30506,30507,30510,30513],{},[2806,30508,30509],{"align":101},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2806,30511,30512],{"align":101},"挂载宿主机用户目录到容器内同名路径",[2806,30514,30515],{"align":101},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2761,30517,30518,30521,30524],{},[2806,30519,30520],{"align":101},"-w \u002Fhome\u002Ftungchiahui",[2806,30522,30523],{"align":101},"设置容器启动后的默认工作目录",[2806,30525,30526],{"align":101},"直接进入项目路径，方便执行命令2324。",[2761,30528,30529,30532,30535],{},[2806,30530,30531],{"align":101},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2806,30533,30534],{"align":101},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2806,30536,30537],{"align":101},"提供预配置的深度学习与机器人开发环境。",[24,30539,30540,30541,30543,30544,30547],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[74,30542,27044],{},"加不加",[74,30545,30546],{},"sudo -E","都无所谓。",[24,30549,30550,30551,30553,30554,30556,30557,30560,30561,30563],{},"用户已经被加到docker组了，不用",[74,30552,27044],{},"也行跑，其次，",[74,30555,27044],{},"运行的话，你的",[74,30558,30559],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[74,30562,30559],{},"更不可能变了。",[67,30565,30567],{"className":26289,"code":30566,"language":26291,"meta":72,"style":72},"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",[74,30568,30569,30582,30592,30602,30614,30621,30628,30635,30645,30654,30663,30677,30689,30701,30710,30720,30729,30744,30777,30804,30815,30822],{"__ignoreMap":72},[77,30570,30571,30573,30575,30577,30580],{"class":79,"line":80},[77,30572,27044],{"class":83},[77,30574,28788],{"class":271},[77,30576,29698],{"class":271},[77,30578,30579],{"class":94}," --name=ros_opencv_cuda",[77,30581,27146],{"class":94},[77,30583,30584,30587,30590],{"class":79,"line":91},[77,30585,30586],{"class":87},"--gpus ",[77,30588,30589],{"class":271},"all",[77,30591,27146],{"class":94},[77,30593,30594,30597,30600],{"class":79,"line":107},[77,30595,30596],{"class":87},"-e ",[77,30598,30599],{"class":271},"NVIDIA_DRIVER_CAPABILITIES=all",[77,30601,27146],{"class":94},[77,30603,30604,30606,30609,30612],{"class":79,"line":191},[77,30605,30596],{"class":87},[77,30607,30608],{"class":271},"DISPLAY=",[77,30610,30611],{"class":87},"$DISPLAY ",[77,30613,28643],{"class":94},[77,30615,30616,30619],{"class":79,"line":1543},[77,30617,30618],{"class":87},"-dit ",[77,30620,28643],{"class":94},[77,30622,30623,30626],{"class":79,"line":1549},[77,30624,30625],{"class":87},"--privileged ",[77,30627,28643],{"class":94},[77,30629,30630,30633],{"class":79,"line":1566},[77,30631,30632],{"class":87},"--net=host ",[77,30634,28643],{"class":94},[77,30636,30637,30640,30643],{"class":79,"line":1572},[77,30638,30639],{"class":87},"--group-add ",[77,30641,30642],{"class":271},"audio",[77,30644,27146],{"class":94},[77,30646,30647,30649,30652],{"class":79,"line":1589},[77,30648,30639],{"class":87},[77,30650,30651],{"class":271},"video",[77,30653,27146],{"class":94},[77,30655,30656,30658,30661],{"class":79,"line":1595},[77,30657,30639],{"class":87},[77,30659,30660],{"class":271},"dialout",[77,30662,27146],{"class":94},[77,30664,30665,30667,30670,30672,30675],{"class":79,"line":4088},[77,30666,30596],{"class":87},[77,30668,30669],{"class":271},"XAUTHORITY=",[77,30671,30559],{"class":87},[77,30673,30674],{"class":271},"\u002F.Xauthority",[77,30676,27146],{"class":94},[77,30678,30679,30681,30684,30687],{"class":79,"line":4093},[77,30680,30596],{"class":87},[77,30682,30683],{"class":271},"WAYLAND_DISPLAY=",[77,30685,30686],{"class":87},"$WAYLAND_DISPLAY ",[77,30688,28643],{"class":94},[77,30690,30691,30693,30696,30699],{"class":79,"line":4099},[77,30692,30596],{"class":87},[77,30694,30695],{"class":271},"XDG_RUNTIME_DIR=",[77,30697,30698],{"class":87},"$XDG_RUNTIME_DIR ",[77,30700,28643],{"class":94},[77,30702,30703,30705,30708],{"class":79,"line":4104},[77,30704,30596],{"class":87},[77,30706,30707],{"class":271},"QT_QPA_PLATFORM=xcb",[77,30709,27146],{"class":94},[77,30711,30712,30715,30718],{"class":79,"line":4118},[77,30713,30714],{"class":87},"-v ",[77,30716,30717],{"class":271},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[77,30719,27146],{"class":94},[77,30721,30722,30724,30727],{"class":79,"line":4123},[77,30723,30714],{"class":87},[77,30725,30726],{"class":271},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[77,30728,27146],{"class":94},[77,30730,30731,30734,30737,30739,30742],{"class":79,"line":4129},[77,30732,30733],{"class":87},"-v $HOME",[77,30735,30736],{"class":271},"\u002F.Xauthority:",[77,30738,30559],{"class":87},[77,30740,30741],{"class":271},"\u002F.Xauthority:ro",[77,30743,27146],{"class":94},[77,30745,30746,30748,30751,30753,30756,30759,30761,30764,30766,30768,30770,30772,30775],{"class":79,"line":4150},[77,30747,30714],{"class":87},[77,30749,30750],{"class":271},"\u002Frun\u002Fuser\u002F",[77,30752,27567],{"class":87},[77,30754,30755],{"class":83},"id",[77,30757,30758],{"class":94}," -u",[77,30760,3043],{"class":87},[77,30762,30763],{"class":271},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[77,30765,27567],{"class":87},[77,30767,30755],{"class":83},[77,30769,30758],{"class":94},[77,30771,3043],{"class":87},[77,30773,30774],{"class":271},"\u002Fwayland-0",[77,30776,27146],{"class":94},[77,30778,30779,30781,30783,30785,30787,30789,30791,30794,30796,30798,30800,30802],{"class":79,"line":4155},[77,30780,30714],{"class":87},[77,30782,30750],{"class":271},[77,30784,27567],{"class":87},[77,30786,30755],{"class":83},[77,30788,30758],{"class":94},[77,30790,3043],{"class":87},[77,30792,30793],{"class":271},":\u002Frun\u002Fuser\u002F",[77,30795,27567],{"class":87},[77,30797,30755],{"class":83},[77,30799,30758],{"class":94},[77,30801,16186],{"class":87},[77,30803,28643],{"class":94},[77,30805,30806,30808,30810,30813],{"class":79,"line":4169},[77,30807,30733],{"class":87},[77,30809,3472],{"class":271},[77,30811,30812],{"class":87},"$HOME ",[77,30814,28643],{"class":94},[77,30816,30817,30820],{"class":79,"line":4174},[77,30818,30819],{"class":87},"-w $HOME ",[77,30821,28643],{"class":94},[77,30823,30824],{"class":79,"line":4203},[77,30825,30826],{"class":87},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[24,30828,1988],{},[139,30830,30831,30839,30842,30845],{},[54,30832,30833,16267,30835,30838],{},[74,30834,30599],{},[74,30836,30837],{},"--gpus all","没有英伟达显卡请注释。",[54,30840,30841],{},"--name后面请自己为容器起名。",[54,30843,30844],{},"最后一行仓库名称请你自己找对应的镜像填上。",[54,30846,30847,30848,30853],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[687,30849,30850],{},[27,30851,30852],{},"请不要加","。",[67,30855,30857],{"className":26289,"code":30856,"language":26291,"meta":72,"style":72},"--ulimit nofile=1024:524288 \\\n",[74,30858,30859],{"__ignoreMap":72},[77,30860,30861,30864,30867],{"class":79,"line":80},[77,30862,30863],{"class":83},"--ulimit",[77,30865,30866],{"class":271}," nofile=1024:524288",[77,30868,27146],{"class":94},[24,30870,30871,30872,30877],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[687,30873,30874],{},[27,30875,30876],{},"不建议","**.**",[67,30879,30881],{"className":26289,"code":30880,"language":26291,"meta":72,"style":72},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[74,30882,30883,30910,30919],{"__ignoreMap":72},[77,30884,30885,30888,30891,30893,30895,30897,30899,30901,30903,30906,30908],{"class":79,"line":80},[77,30886,30887],{"class":83},"--user",[77,30889,30890],{"class":87}," $(",[77,30892,30755],{"class":83},[77,30894,30758],{"class":94},[77,30896,3043],{"class":87},[77,30898,3472],{"class":271},[77,30900,27567],{"class":87},[77,30902,30755],{"class":83},[77,30904,30905],{"class":94}," -g",[77,30907,16186],{"class":87},[77,30909,28643],{"class":94},[77,30911,30912,30914,30917],{"class":79,"line":91},[77,30913,30714],{"class":87},[77,30915,30916],{"class":271},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[77,30918,27146],{"class":94},[77,30920,30921,30923,30926],{"class":79,"line":107},[77,30922,30714],{"class":87},[77,30924,30925],{"class":271},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[77,30927,27146],{"class":94},[2520,30929,30930],{},"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":72,"searchDepth":91,"depth":91,"links":30932},[30933,30934,30935],{"id":29931,"depth":107,"text":29932},{"id":29941,"depth":107,"text":29942},{"id":30352,"depth":107,"text":30355},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29923,"description":72},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30942,"title":30943,"body":30944,"description":72,"extension":2547,"meta":32567,"navigation":2549,"path":32568,"seo":32569,"stem":32570,"__hash__":32571},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30945,"toc":32562},[30946,30949,30953,30956,31178,31182,31186,31189,31295,31300,31303,31308,31311,31316,31319,31324,31327,31339,31342,31347,31354,31382,31389,31465,31470,31473,31496,31498,31573,31578,31581,31585,31593,31598,31603,31607,31618,31624,31627,31630,31654,31657,31660,31688,31691,31694,32159,32162,32167,32172,32176,32199,32204,32208,32212,32215,32218,32221,32248,32251,32254,32272,32275,32278,32300,32308,32313,32318,32322,32325,32328,32331,32334,32379,32382,32400,32403,32408,32411,32432,32435,32491,32494,32499,32503,32506,32513,32516,32519,32524,32527,32543,32546,32559],[10,30947,30943],{"id":30948},"_6手动创建docker镜像",[19,30950,30952],{"id":30951},"_61dockerfile","6.1.DockerFile",[24,30954,30955],{},"常用命令：",[2755,30957,30958,30969],{},[2758,30959,30960],{},[2761,30961,30962,30965,30967],{},[2764,30963,30964],{"align":101},"指令",[2764,30966,28337],{"align":101},[2764,30968,29960],{"align":101},[2801,30970,30971,30981,30997,31008,31019,31030,31041,31052,31063,31077,31091,31102,31116,31127,31138,31152,31167],{},[2761,30972,30973,30975,30978],{},[2806,30974,29838],{"align":101},[2806,30976,30977],{"align":101},"指定基础镜像，是 Dockerfile 的起点",[2806,30979,30980],{"align":101},"FROM ubuntu:22.04",[2761,30982,30983,30986,30989],{},[2806,30984,30985],{"align":101},"LABEL",[2806,30987,30988],{"align":101},"添加元数据（如作者、版本等）",[2806,30990,30991,30992,30996],{"align":101},"LABEL maintainer=”",[417,30993,30995],{"href":30994},"mailto:you@example.com","you@example.com","”",[2761,30998,30999,31002,31005],{},[2806,31000,31001],{"align":101},"ENV",[2806,31003,31004],{"align":101},"设置环境变量",[2806,31006,31007],{"align":101},"ENV PORT=8080",[2761,31009,31010,31013,31016],{},[2806,31011,31012],{"align":101},"ARG",[2806,31014,31015],{"align":101},"构建参数，只在构建期间可用",[2806,31017,31018],{"align":101},"ARG VERSION=1.0",[2761,31020,31021,31024,31027],{},[2806,31022,31023],{"align":101},"RUN",[2806,31025,31026],{"align":101},"构建镜像时运行命令",[2806,31028,31029],{"align":101},"RUN apt-get update && apt-get install -y curl",[2761,31031,31032,31035,31038],{},[2806,31033,31034],{"align":101},"COPY",[2806,31036,31037],{"align":101},"复制文件到镜像中",[2806,31039,31040],{"align":101},"COPY . \u002Fapp",[2761,31042,31043,31046,31049],{},[2806,31044,31045],{"align":101},"ADD",[2806,31047,31048],{"align":101},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2806,31050,31051],{"align":101},"ADD archive.tar.gz \u002Fdata\u002F",[2761,31053,31054,31057,31060],{},[2806,31055,31056],{"align":101},"WORKDIR",[2806,31058,31059],{"align":101},"设置工作目录",[2806,31061,31062],{"align":101},"WORKDIR \u002Fopt",[2761,31064,31065,31068,31071],{},[2806,31066,31067],{"align":101},"CMD",[2806,31069,31070],{"align":101},"设置容器启动时默认命令（可被 docker run 覆盖）",[2806,31072,31073,31074],{"align":101},"CMD ",[77,31075,31076],{},"“node”, “index.js”",[2761,31078,31079,31082,31085],{},[2806,31080,31081],{"align":101},"ENTRYPOINT",[2806,31083,31084],{"align":101},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2806,31086,31087,31088],{"align":101},"ENTRYPOINT ",[77,31089,31090],{},"“python3”",[2761,31092,31093,31096,31099],{},[2806,31094,31095],{"align":101},"EXPOSE",[2806,31097,31098],{"align":101},"声明镜像内服务监听的端口（不会自动映射）",[2806,31100,31101],{"align":101},"EXPOSE 80",[2761,31103,31104,31107,31110],{},[2806,31105,31106],{"align":101},"VOLUME",[2806,31108,31109],{"align":101},"声明数据卷挂载点",[2806,31111,31112,31113],{"align":101},"VOLUME ",[77,31114,31115],{},"“\u002Fdata”",[2761,31117,31118,31121,31124],{},[2806,31119,31120],{"align":101},"USER",[2806,31122,31123],{"align":101},"设置后续命令执行的用户",[2806,31125,31126],{"align":101},"USER appuser",[2761,31128,31129,31132,31135],{},[2806,31130,31131],{"align":101},"ONBUILD",[2806,31133,31134],{"align":101},"当镜像作为其他镜像基础镜像时触发的构建指令",[2806,31136,31137],{"align":101},"ONBUILD COPY . \u002Fsrc",[2761,31139,31140,31143,31146],{},[2806,31141,31142],{"align":101},"SHELL",[2806,31144,31145],{"align":101},"更改默认 shell，比如将 sh -c 改为 bash -c",[2806,31147,31148,31149],{"align":101},"SHELL ",[77,31150,31151],{},"“\u002Fbin\u002Fbash”, “-c”",[2761,31153,31154,31157,31160],{},[2806,31155,31156],{"align":101},"HEALTHCHECK",[2806,31158,31159],{"align":101},"定义容器运行时的健康检查命令",[2806,31161,31162,31163],{"align":101},"`HEALTHCHECK CMD curl –fail ",[417,31164,31165],{"href":31165,"rel":31166},"http:\u002F\u002Flocalhost:8080",[26332],[2761,31168,31169,31172,31175],{},[2806,31170,31171],{"align":101},"STOPSIGNAL",[2806,31173,31174],{"align":101},"容器停止时发送的信号",[2806,31176,31177],{"align":101},"STOPSIGNAL SIGKILL",[19,31179,31181],{"id":31180},"_62自己创建容器","6.2.自己创建容器",[24468,31183,31185],{"id":31184},"_621手动创建","6.2.1.手动创建",[24,31187,31188],{},"在x86电脑上编译x86的：",[67,31190,31192],{"className":26289,"code":31191,"language":26291,"meta":72,"style":72},"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",[74,31193,31194,31210,31214,31227,31231,31244,31248,31261,31265,31278,31282],{"__ignoreMap":72},[77,31195,31196,31198,31201,31204,31207],{"class":79,"line":80},[77,31197,29021],{"class":83},[77,31199,31200],{"class":271}," build",[77,31202,31203],{"class":94}," -t",[77,31205,31206],{"class":271}," ros-melodic-cuda118-cudnn8-bionic:latest",[77,31208,31209],{"class":271}," .\n",[77,31211,31212],{"class":79,"line":91},[77,31213,4875],{"emptyLinePlaceholder":2549},[77,31215,31216,31218,31220,31222,31225],{"class":79,"line":107},[77,31217,29021],{"class":83},[77,31219,31200],{"class":271},[77,31221,31203],{"class":94},[77,31223,31224],{"class":271}," ros-noetic-focal:latest",[77,31226,31209],{"class":271},[77,31228,31229],{"class":79,"line":191},[77,31230,4875],{"emptyLinePlaceholder":2549},[77,31232,31233,31235,31237,31239,31242],{"class":79,"line":1543},[77,31234,29021],{"class":83},[77,31236,31200],{"class":271},[77,31238,31203],{"class":94},[77,31240,31241],{"class":271}," ros-humble-jammy:latest",[77,31243,31209],{"class":271},[77,31245,31246],{"class":79,"line":1549},[77,31247,4875],{"emptyLinePlaceholder":2549},[77,31249,31250,31252,31254,31256,31259],{"class":79,"line":1566},[77,31251,29021],{"class":83},[77,31253,31200],{"class":271},[77,31255,31203],{"class":94},[77,31257,31258],{"class":271}," ros-jazzy-noble:latest",[77,31260,31209],{"class":271},[77,31262,31263],{"class":79,"line":1572},[77,31264,4875],{"emptyLinePlaceholder":2549},[77,31266,31267,31269,31271,31273,31276],{"class":79,"line":1589},[77,31268,29021],{"class":83},[77,31270,31200],{"class":271},[77,31272,31203],{"class":94},[77,31274,31275],{"class":271}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[77,31277,31209],{"class":271},[77,31279,31280],{"class":79,"line":1595},[77,31281,4875],{"emptyLinePlaceholder":2549},[77,31283,31284,31286,31288,31290,31293],{"class":79,"line":4088},[77,31285,29021],{"class":83},[77,31287,31200],{"class":271},[77,31289,31203],{"class":94},[77,31291,31292],{"class":271}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[77,31294,31209],{"class":271},[24,31296,31297],{},[40,31298],{"alt":72,"src":31299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[24,31301,31302],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[24,31304,31305],{},[40,31306],{"alt":72,"src":31307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[24,31309,31310],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[139,31312,31313],{},[54,31314,31315],{},"创建 Docker Hub 账户",[24,31317,31318],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[139,31320,31321],{"start":91},[54,31322,31323],{},"登录 Docker Hub",[24,31325,31326],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[67,31328,31330],{"className":26289,"code":31329,"language":26291,"meta":72,"style":72},"docker login\n",[74,31331,31332],{"__ignoreMap":72},[77,31333,31334,31336],{"class":79,"line":80},[77,31335,29021],{"class":83},[77,31337,31338],{"class":271}," login\n",[24,31340,31341],{},"输入你的 Docker Hub 用户名和密码进行验证。",[139,31343,31344],{},[54,31345,31346],{},"为你的镜像打标签",[24,31348,31349,31350,31353],{},"Docker Hub 使用 ",[74,31351,31352],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[67,31355,31357],{"className":26289,"code":31356,"language":26291,"meta":72,"style":72},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[74,31358,31359],{"__ignoreMap":72},[77,31360,31361,31363,31366,31368,31371,31374,31377,31379],{"class":79,"line":80},[77,31362,29021],{"class":83},[77,31364,31365],{"class":271}," tag",[77,31367,31258],{"class":271},[77,31369,31370],{"class":2123}," \u003C",[77,31372,31373],{"class":271},"你的用户",[77,31375,31376],{"class":87},"名",[77,31378,3572],{"class":2123},[77,31380,31381],{"class":271},"\u002Fros-jazzy-noble:latest\n",[24,31383,31384,31385,31388],{},"例如，如果你的 Docker Hub 用户名是 ",[74,31386,31387],{},"tungchiahui","，你应该执行：",[67,31390,31392],{"className":26289,"code":31391,"language":26291,"meta":72,"style":72},"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",[74,31393,31394,31405,31409,31420,31424,31435,31439,31450,31454],{"__ignoreMap":72},[77,31395,31396,31398,31400,31402],{"class":79,"line":80},[77,31397,29021],{"class":83},[77,31399,31365],{"class":271},[77,31401,31224],{"class":271},[77,31403,31404],{"class":271}," tungchiahui\u002Fros-noetic-focal:latest\n",[77,31406,31407],{"class":79,"line":91},[77,31408,4875],{"emptyLinePlaceholder":2549},[77,31410,31411,31413,31415,31417],{"class":79,"line":107},[77,31412,29021],{"class":83},[77,31414,31365],{"class":271},[77,31416,31241],{"class":271},[77,31418,31419],{"class":271}," tungchiahui\u002Fros-humble-jammy:latest\n",[77,31421,31422],{"class":79,"line":191},[77,31423,4875],{"emptyLinePlaceholder":2549},[77,31425,31426,31428,31430,31432],{"class":79,"line":1543},[77,31427,29021],{"class":83},[77,31429,31365],{"class":271},[77,31431,31258],{"class":271},[77,31433,31434],{"class":271}," tungchiahui\u002Fros-jazzy-noble:latest\n",[77,31436,31437],{"class":79,"line":1549},[77,31438,4875],{"emptyLinePlaceholder":2549},[77,31440,31441,31443,31445,31447],{"class":79,"line":1566},[77,31442,29021],{"class":83},[77,31444,31365],{"class":271},[77,31446,31275],{"class":271},[77,31448,31449],{"class":271}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[77,31451,31452],{"class":79,"line":1572},[77,31453,4875],{"emptyLinePlaceholder":2549},[77,31455,31456,31458,31460,31462],{"class":79,"line":1589},[77,31457,29021],{"class":83},[77,31459,31365],{"class":271},[77,31461,31292],{"class":271},[77,31463,31464],{"class":271}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[139,31466,31467],{"start":91},[54,31468,31469],{},"推送镜像到 Docker Hub",[24,31471,31472],{},"使用以下命令将镜像推送到 Docker Hub：",[67,31474,31476],{"className":26289,"code":31475,"language":26291,"meta":72,"style":72},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[74,31477,31478],{"__ignoreMap":72},[77,31479,31480,31482,31485,31487,31489,31491,31493],{"class":79,"line":80},[77,31481,29021],{"class":83},[77,31483,31484],{"class":271}," push",[77,31486,31370],{"class":2123},[77,31488,31373],{"class":271},[77,31490,31376],{"class":87},[77,31492,3572],{"class":2123},[77,31494,31495],{"class":271},"\u002Fros-noetic-jazzy-noble:latest\n",[24,31497,17105],{},[67,31499,31501],{"className":26289,"code":31500,"language":26291,"meta":72,"style":72},"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",[74,31502,31503,31511,31515,31523,31527,31535,31539,31548,31552,31560,31564],{"__ignoreMap":72},[77,31504,31505,31507,31509],{"class":79,"line":80},[77,31506,29021],{"class":83},[77,31508,31484],{"class":271},[77,31510,31404],{"class":271},[77,31512,31513],{"class":79,"line":91},[77,31514,4875],{"emptyLinePlaceholder":2549},[77,31516,31517,31519,31521],{"class":79,"line":107},[77,31518,29021],{"class":83},[77,31520,31484],{"class":271},[77,31522,31419],{"class":271},[77,31524,31525],{"class":79,"line":191},[77,31526,4875],{"emptyLinePlaceholder":2549},[77,31528,31529,31531,31533],{"class":79,"line":1543},[77,31530,29021],{"class":83},[77,31532,31484],{"class":271},[77,31534,31434],{"class":271},[77,31536,31537],{"class":79,"line":1549},[77,31538,4875],{"emptyLinePlaceholder":2549},[77,31540,31541,31543,31545],{"class":79,"line":1566},[77,31542,29021],{"class":83},[77,31544,31484],{"class":271},[77,31546,31547],{"class":271}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[77,31549,31550],{"class":79,"line":1572},[77,31551,4875],{"emptyLinePlaceholder":2549},[77,31553,31554,31556,31558],{"class":79,"line":1589},[77,31555,29021],{"class":83},[77,31557,31484],{"class":271},[77,31559,31464],{"class":271},[77,31561,31562],{"class":79,"line":1595},[77,31563,4875],{"emptyLinePlaceholder":2549},[77,31565,31566,31568,31570],{"class":79,"line":4088},[77,31567,29021],{"class":83},[77,31569,31484],{"class":271},[77,31571,31572],{"class":271}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[139,31574,31575],{"start":107},[54,31576,31577],{},"验证推送成功",[24,31579,31580],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[24,31582,31583],{},[27,31584,6259],{},[51,31586,31587,31590],{},[54,31588,31589],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[54,31591,31592],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[24,31594,31595],{},[40,31596],{"alt":72,"src":31597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[24,31599,31600],{},[40,31601],{"alt":72,"src":31602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24468,31604,31606],{"id":31605},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[24,31608,31609,31610,31613,31614,31617],{},"如果您想在 ",[27,31611,31612],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[27,31615,31616],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[24,31619,31620,31621],{},"1. ",[27,31622,31623],{},"启用 Docker 跨平台构建",[24,31625,31626],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[24,31628,31629],{},"第一步：启用 buildx（只需执行一次）",[67,31631,31633],{"className":26289,"code":31632,"language":26291,"meta":72,"style":72},"docker buildx create --name multiarch_builder --use\n",[74,31634,31635],{"__ignoreMap":72},[77,31636,31637,31639,31642,31645,31648,31651],{"class":79,"line":80},[77,31638,29021],{"class":83},[77,31640,31641],{"class":271}," buildx",[77,31643,31644],{"class":271}," create",[77,31646,31647],{"class":94}," --name",[77,31649,31650],{"class":271}," multiarch_builder",[77,31652,31653],{"class":94}," --use\n",[24,31655,31656],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[24,31658,31659],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[67,31661,31663],{"className":26289,"code":31662,"language":26291,"meta":72,"style":72},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[74,31664,31665],{"__ignoreMap":72},[77,31666,31667,31669,31671,31673,31676,31679,31682,31685],{"class":79,"line":80},[77,31668,29021],{"class":83},[77,31670,29698],{"class":271},[77,31672,29701],{"class":94},[77,31674,31675],{"class":94}," --privileged",[77,31677,31678],{"class":271}," multiarch\u002Fqemu-user-static",[77,31680,31681],{"class":94}," --reset",[77,31683,31684],{"class":94}," -p",[77,31686,31687],{"class":271}," yes\n",[24,31689,31690],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[24,31692,31693],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[67,31695,31697],{"className":26289,"code":31696,"language":26291,"meta":72,"style":72},"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",[74,31698,31699,31741,31745,31750,31760,31770,31779,31785,31789,31793,31803,31811,31820,31826,31830,31834,31844,31852,31861,31867,31871,31875,31885,31893,31902,31908,31912,31916,31926,31934,31943,31949,31953,31957,31967,31975,31984,31990,31994,31998,32008,32016,32025,32031,32035,32039,32049,32057,32066,32072,32076,32080,32090,32098,32107,32113,32117,32121,32132,32140,32149,32155],{"__ignoreMap":72},[77,31700,31701,31703,31705,31707,31710,31713,31715,31717,31720,31722,31724,31726,31728,31731,31734,31736,31739],{"class":79,"line":80},[77,31702,29021],{"class":83},[77,31704,31641],{"class":271},[77,31706,31200],{"class":271},[77,31708,31709],{"class":94}," --platform",[77,31711,31712],{"class":271}," linux\u002Famd64,linux\u002Farm64",[77,31714,31203],{"class":94},[77,31716,31370],{"class":2123},[77,31718,31719],{"class":271},"你的镜像",[77,31721,31376],{"class":87},[77,31723,3572],{"class":2123},[77,31725,3472],{"class":271},[77,31727,260],{"class":2123},[77,31729,31730],{"class":271},"标",[77,31732,31733],{"class":87},"签",[77,31735,3572],{"class":2123},[77,31737,31738],{"class":94}," --push",[77,31740,31209],{"class":271},[77,31742,31743],{"class":79,"line":91},[77,31744,4875],{"emptyLinePlaceholder":2549},[77,31746,31747],{"class":79,"line":107},[77,31748,31749],{"class":323},"# 例子：\n",[77,31751,31752,31754,31756,31758],{"class":79,"line":191},[77,31753,29021],{"class":83},[77,31755,31641],{"class":271},[77,31757,31200],{"class":271},[77,31759,27146],{"class":94},[77,31761,31762,31765,31768],{"class":79,"line":1543},[77,31763,31764],{"class":87},"--platform ",[77,31766,31767],{"class":271},"linux\u002Famd64,linux\u002Farm64",[77,31769,27146],{"class":94},[77,31771,31772,31774,31777],{"class":79,"line":1549},[77,31773,31203],{"class":94},[77,31775,31776],{"class":271}," tungchiahui\u002Fros:noetic-focal",[77,31778,27146],{"class":94},[77,31780,31781,31783],{"class":79,"line":1566},[77,31782,31738],{"class":94},[77,31784,27146],{"class":94},[77,31786,31787],{"class":79,"line":1572},[77,31788,31209],{"class":271},[77,31790,31791],{"class":79,"line":1589},[77,31792,4875],{"emptyLinePlaceholder":2549},[77,31794,31795,31797,31799,31801],{"class":79,"line":1595},[77,31796,29021],{"class":83},[77,31798,31641],{"class":271},[77,31800,31200],{"class":271},[77,31802,27146],{"class":94},[77,31804,31805,31807,31809],{"class":79,"line":4088},[77,31806,31764],{"class":87},[77,31808,31767],{"class":271},[77,31810,27146],{"class":94},[77,31812,31813,31815,31818],{"class":79,"line":4093},[77,31814,31203],{"class":94},[77,31816,31817],{"class":271}," tungchiahui\u002Fros:humble-jammy",[77,31819,27146],{"class":94},[77,31821,31822,31824],{"class":79,"line":4099},[77,31823,31738],{"class":94},[77,31825,27146],{"class":94},[77,31827,31828],{"class":79,"line":4104},[77,31829,31209],{"class":271},[77,31831,31832],{"class":79,"line":4118},[77,31833,4875],{"emptyLinePlaceholder":2549},[77,31835,31836,31838,31840,31842],{"class":79,"line":4123},[77,31837,29021],{"class":83},[77,31839,31641],{"class":271},[77,31841,31200],{"class":271},[77,31843,27146],{"class":94},[77,31845,31846,31848,31850],{"class":79,"line":4129},[77,31847,31764],{"class":87},[77,31849,31767],{"class":271},[77,31851,27146],{"class":94},[77,31853,31854,31856,31859],{"class":79,"line":4150},[77,31855,31203],{"class":94},[77,31857,31858],{"class":271}," tungchiahui\u002Fros:jazzy-noble",[77,31860,27146],{"class":94},[77,31862,31863,31865],{"class":79,"line":4155},[77,31864,31738],{"class":94},[77,31866,27146],{"class":94},[77,31868,31869],{"class":79,"line":4169},[77,31870,31209],{"class":271},[77,31872,31873],{"class":79,"line":4174},[77,31874,4875],{"emptyLinePlaceholder":2549},[77,31876,31877,31879,31881,31883],{"class":79,"line":4203},[77,31878,28788],{"class":83},[77,31880,31641],{"class":271},[77,31882,31200],{"class":271},[77,31884,27146],{"class":94},[77,31886,31887,31889,31891],{"class":79,"line":4208},[77,31888,31764],{"class":87},[77,31890,31767],{"class":271},[77,31892,27146],{"class":94},[77,31894,31895,31897,31900],{"class":79,"line":4225},[77,31896,31203],{"class":94},[77,31898,31899],{"class":271}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[77,31901,27146],{"class":94},[77,31903,31904,31906],{"class":79,"line":4230},[77,31905,31738],{"class":94},[77,31907,27146],{"class":94},[77,31909,31910],{"class":79,"line":4235},[77,31911,31209],{"class":271},[77,31913,31914],{"class":79,"line":4240},[77,31915,4875],{"emptyLinePlaceholder":2549},[77,31917,31918,31920,31922,31924],{"class":79,"line":4254},[77,31919,29021],{"class":83},[77,31921,31641],{"class":271},[77,31923,31200],{"class":271},[77,31925,27146],{"class":94},[77,31927,31928,31930,31932],{"class":79,"line":4259},[77,31929,31764],{"class":87},[77,31931,31767],{"class":271},[77,31933,27146],{"class":94},[77,31935,31936,31938,31941],{"class":79,"line":5052},[77,31937,31203],{"class":94},[77,31939,31940],{"class":271}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[77,31942,27146],{"class":94},[77,31944,31945,31947],{"class":79,"line":5066},[77,31946,31738],{"class":94},[77,31948,27146],{"class":94},[77,31950,31951],{"class":79,"line":5074},[77,31952,31209],{"class":271},[77,31954,31955],{"class":79,"line":5079},[77,31956,4875],{"emptyLinePlaceholder":2549},[77,31958,31959,31961,31963,31965],{"class":79,"line":5085},[77,31960,28788],{"class":83},[77,31962,31641],{"class":271},[77,31964,31200],{"class":271},[77,31966,27146],{"class":94},[77,31968,31969,31971,31973],{"class":79,"line":5091},[77,31970,31764],{"class":87},[77,31972,31767],{"class":271},[77,31974,27146],{"class":94},[77,31976,31977,31979,31982],{"class":79,"line":5096},[77,31978,31203],{"class":94},[77,31980,31981],{"class":271}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[77,31983,27146],{"class":94},[77,31985,31986,31988],{"class":79,"line":10422},[77,31987,31738],{"class":94},[77,31989,27146],{"class":94},[77,31991,31992],{"class":79,"line":10446},[77,31993,31209],{"class":271},[77,31995,31996],{"class":79,"line":10451},[77,31997,4875],{"emptyLinePlaceholder":2549},[77,31999,32000,32002,32004,32006],{"class":79,"line":10457},[77,32001,29021],{"class":83},[77,32003,31641],{"class":271},[77,32005,31200],{"class":271},[77,32007,27146],{"class":94},[77,32009,32010,32012,32014],{"class":79,"line":10484},[77,32011,31764],{"class":87},[77,32013,31767],{"class":271},[77,32015,27146],{"class":94},[77,32017,32018,32020,32023],{"class":79,"line":10489},[77,32019,31203],{"class":94},[77,32021,32022],{"class":271}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[77,32024,27146],{"class":94},[77,32026,32027,32029],{"class":79,"line":10495},[77,32028,31738],{"class":94},[77,32030,27146],{"class":94},[77,32032,32033],{"class":79,"line":10507},[77,32034,31209],{"class":271},[77,32036,32037],{"class":79,"line":10519},[77,32038,4875],{"emptyLinePlaceholder":2549},[77,32040,32041,32043,32045,32047],{"class":79,"line":10531},[77,32042,29021],{"class":83},[77,32044,31641],{"class":271},[77,32046,31200],{"class":271},[77,32048,27146],{"class":94},[77,32050,32051,32053,32055],{"class":79,"line":12189},[77,32052,31764],{"class":87},[77,32054,31767],{"class":271},[77,32056,27146],{"class":94},[77,32058,32059,32061,32064],{"class":79,"line":12214},[77,32060,31203],{"class":94},[77,32062,32063],{"class":271}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[77,32065,27146],{"class":94},[77,32067,32068,32070],{"class":79,"line":12237},[77,32069,31738],{"class":94},[77,32071,27146],{"class":94},[77,32073,32074],{"class":79,"line":12261},[77,32075,31209],{"class":271},[77,32077,32078],{"class":79,"line":12266},[77,32079,4875],{"emptyLinePlaceholder":2549},[77,32081,32082,32084,32086,32088],{"class":79,"line":12271},[77,32083,28788],{"class":83},[77,32085,31641],{"class":271},[77,32087,31200],{"class":271},[77,32089,27146],{"class":94},[77,32091,32092,32094,32096],{"class":79,"line":12276},[77,32093,31764],{"class":87},[77,32095,31767],{"class":271},[77,32097,27146],{"class":94},[77,32099,32100,32102,32105],{"class":79,"line":12285},[77,32101,31203],{"class":94},[77,32103,32104],{"class":271}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[77,32106,27146],{"class":94},[77,32108,32109,32111],{"class":79,"line":12290},[77,32110,31738],{"class":94},[77,32112,27146],{"class":94},[77,32114,32115],{"class":79,"line":12296},[77,32116,31209],{"class":271},[77,32118,32119],{"class":79,"line":12317},[77,32120,4875],{"emptyLinePlaceholder":2549},[77,32122,32123,32126,32128,32130],{"class":79,"line":12323},[77,32124,32125],{"class":83},"  docker",[77,32127,31641],{"class":271},[77,32129,31200],{"class":271},[77,32131,27146],{"class":94},[77,32133,32134,32136,32138],{"class":79,"line":12337},[77,32135,31764],{"class":87},[77,32137,31767],{"class":271},[77,32139,27146],{"class":94},[77,32141,32142,32144,32147],{"class":79,"line":12343},[77,32143,31203],{"class":94},[77,32145,32146],{"class":271}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[77,32148,27146],{"class":94},[77,32150,32151,32153],{"class":79,"line":12370},[77,32152,31738],{"class":94},[77,32154,27146],{"class":94},[77,32156,32157],{"class":79,"line":12379},[77,32158,31209],{"class":271},[24,32160,32161],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[24,32163,32164],{},[40,32165],{"alt":72,"src":32166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[24,32168,32169],{},[40,32170],{"alt":72,"src":32171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24468,32173,32175],{"id":32174},"_623清除构建缓存","6.2.3.清除构建缓存",[67,32177,32179],{"className":26289,"code":32178,"language":26291,"meta":72,"style":72},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[74,32180,32181,32186],{"__ignoreMap":72},[77,32182,32183],{"class":79,"line":80},[77,32184,32185],{"class":323},"# 清理BuildKit构建缓存\n",[77,32187,32188,32190,32193,32196],{"class":79,"line":91},[77,32189,29021],{"class":83},[77,32191,32192],{"class":271}," builder",[77,32194,32195],{"class":271}," prune",[77,32197,32198],{"class":94}," -f\n",[24,32200,32201],{},[40,32202],{"alt":72,"src":32203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[19,32205,32207],{"id":32206},"_63补充","6.3.补充",[24468,32209,32211],{"id":32210},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[24,32213,32214],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[24,32216,32217],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[24,32219,32220],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[67,32222,32224],{"className":26289,"code":32223,"language":26291,"meta":72,"style":72},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[74,32225,32226,32233],{"__ignoreMap":72},[77,32227,32228,32230],{"class":79,"line":80},[77,32229,29838],{"class":83},[77,32231,32232],{"class":271}," nginx\n",[77,32234,32235,32237,32240,32243,32245],{"class":79,"line":91},[77,32236,31023],{"class":83},[77,32238,32239],{"class":271}," echo",[77,32241,32242],{"class":271}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[77,32244,28690],{"class":2123},[77,32246,32247],{"class":271}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[24,32249,32250],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[24,32252,32253],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[67,32255,32257],{"className":26289,"code":32256,"language":26291,"meta":72,"style":72},"docker build -t nginx:tuling .\n",[74,32258,32259],{"__ignoreMap":72},[77,32260,32261,32263,32265,32267,32270],{"class":79,"line":80},[77,32262,29021],{"class":83},[77,32264,31200],{"class":271},[77,32266,31203],{"class":94},[77,32268,32269],{"class":271}," nginx:tuling",[77,32271,31209],{"class":271},[24,32273,32274],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[24,32276,32277],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[67,32279,32281],{"className":26289,"code":32280,"language":26291,"meta":72,"style":72},"docker run -d -p 92:80 nginx:tuling\n",[74,32282,32283],{"__ignoreMap":72},[77,32284,32285,32287,32289,32292,32294,32297],{"class":79,"line":80},[77,32286,29021],{"class":83},[77,32288,29698],{"class":271},[77,32290,32291],{"class":94}," -d",[77,32293,31684],{"class":94},[77,32295,32296],{"class":271}," 92:80",[77,32298,32299],{"class":271}," nginx:tuling\n",[24,32301,32302,32303],{},"4、访问 ",[417,32304,32307],{"href":32305,"rel":32306},"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",[26332],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[24,32309,32310],{},[40,32311],{"alt":72,"src":32312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[24,32314,32315],{},[40,32316],{"alt":72,"src":32317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24468,32319,32321],{"id":32320},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[24,32323,32324],{},"只需要知道大体流程即可",[24,32326,32327],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[24,32329,32330],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[24,32332,32333],{},"2、在Dockerfile中添加以下内容",[67,32335,32337],{"className":28559,"code":32336,"language":28561,"meta":72,"style":72},"# 基于哪个镜像\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",[74,32338,32339,32344,32349,32354,32359,32364,32369,32374],{"__ignoreMap":72},[77,32340,32341],{"class":79,"line":80},[77,32342,32343],{},"# 基于哪个镜像\n",[77,32345,32346],{"class":79,"line":91},[77,32347,32348],{},"From java:8\n",[77,32350,32351],{"class":79,"line":107},[77,32352,32353],{},"# 复制文件到容器\n",[77,32355,32356],{"class":79,"line":191},[77,32357,32358],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[77,32360,32361],{"class":79,"line":1543},[77,32362,32363],{},"# 声明需要暴露的端口\n",[77,32365,32366],{"class":79,"line":1549},[77,32367,32368],{},"EXPOSE 8877\n",[77,32370,32371],{"class":79,"line":1566},[77,32372,32373],{},"# 配置容器启动后执行的命令\n",[77,32375,32376],{"class":79,"line":1572},[77,32377,32378],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[24,32380,32381],{},"3、使用docker build命令构建镜像",[67,32383,32385],{"className":26289,"code":32384,"language":26291,"meta":72,"style":72},"docker build -t tulingmall-member:0.0.5 .\n",[74,32386,32387],{"__ignoreMap":72},[77,32388,32389,32391,32393,32395,32398],{"class":79,"line":80},[77,32390,29021],{"class":83},[77,32392,31200],{"class":271},[77,32394,31203],{"class":94},[77,32396,32397],{"class":271}," tulingmall-member:0.0.5",[77,32399,31209],{"class":271},[24,32401,32402],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[24,32404,32405],{},[40,32406],{"alt":72,"src":32407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[24,32409,32410],{},"4、启动镜像，加-d可在后台启动",[67,32412,32414],{"className":26289,"code":32413,"language":26291,"meta":72,"style":72},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[74,32415,32416],{"__ignoreMap":72},[77,32417,32418,32420,32422,32424,32426,32429],{"class":79,"line":80},[77,32419,29021],{"class":83},[77,32421,29698],{"class":271},[77,32423,32291],{"class":94},[77,32425,31684],{"class":94},[77,32427,32428],{"class":271}," 8877:8877",[77,32430,32431],{"class":271}," tulingmall-member:0.0.5\n",[24,32433,32434],{},"加上JVM参数：",[67,32436,32438],{"className":26289,"code":32437,"language":26291,"meta":72,"style":72},"# --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",[74,32439,32440,32445,32460,32470,32479,32486],{"__ignoreMap":72},[77,32441,32442],{"class":79,"line":80},[77,32443,32444],{"class":323},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[77,32446,32447,32449,32451,32454,32456,32458],{"class":79,"line":91},[77,32448,29021],{"class":83},[77,32450,29698],{"class":271},[77,32452,32453],{"class":94},"  -d",[77,32455,31684],{"class":94},[77,32457,32428],{"class":271},[77,32459,27146],{"class":94},[77,32461,32462,32464,32467],{"class":79,"line":107},[77,32463,30596],{"class":87},[77,32465,32466],{"class":271},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[77,32468,32469],{"class":94},"  \\\n",[77,32471,32472,32474,32477],{"class":79,"line":191},[77,32473,30596],{"class":87},[77,32475,32476],{"class":271},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[77,32478,32469],{"class":94},[77,32480,32481,32484],{"class":79,"line":1543},[77,32482,32483],{"class":87},"--cap-add=SYS_PTRACE  ",[77,32485,28643],{"class":94},[77,32487,32488],{"class":79,"line":1549},[77,32489,32490],{"class":87},"tulingmall-member:0.0.5\n",[24,32492,32493],{},"5、访问会员服务接口",[24,32495,32496],{},[40,32497],{"alt":72,"src":32498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24468,32500,32502],{"id":32501},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[24,32504,32505],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[24,32507,32508,32509],{},"阿里云docker镜像仓库：",[417,32510,32511],{"href":32511,"rel":32512},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26332],[24,32514,32515],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[24,32517,32518],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[24,32520,32521],{},[40,32522],{"alt":72,"src":32523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[24,32525,32526],{},"要把镜像推送到镜像仓库",[67,32528,32530],{"className":26289,"code":32529,"language":26291,"meta":72,"style":72},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[74,32531,32532],{"__ignoreMap":72},[77,32533,32534,32536,32538,32540],{"class":79,"line":80},[77,32535,29021],{"class":83},[77,32537,31365],{"class":271},[77,32539,32397],{"class":271},[77,32541,32542],{"class":271}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[24,32544,32545],{},"最后将镜像推送到远程仓库",[67,32547,32549],{"className":26289,"code":32548,"language":26291,"meta":72,"style":72},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[74,32550,32551],{"__ignoreMap":72},[77,32552,32553,32555,32557],{"class":79,"line":80},[77,32554,29021],{"class":83},[77,32556,31484],{"class":271},[77,32558,32542],{"class":271},[2520,32560,32561],{},"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":72,"searchDepth":91,"depth":91,"links":32563},[32564,32565,32566],{"id":30951,"depth":107,"text":30952},{"id":31180,"depth":107,"text":31181},{"id":32206,"depth":107,"text":32207},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30943,"description":72},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32573,"title":32574,"body":32575,"description":72,"extension":2547,"meta":32718,"navigation":2549,"path":32719,"seo":32720,"stem":32721,"__hash__":32722},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32576,"toc":32716},[32577,32580,32585,32590,32593,32598,32603,32606,32611,32616,32619,32624,32627,32630,32633,32636,32639,32642,32662,32684,32687,32690,32710,32713],[10,32578,32574],{"id":32579},"_7vscode远程开发",[139,32581,32582],{},[54,32583,32584],{},"插件1：微软Docker工具",[24,32586,32587],{},[40,32588],{"alt":72,"src":32589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[24,32591,32592],{},"docker扩展插件已经进化为container tools了，请安装container tools",[24,32594,32595],{},[40,32596],{"alt":72,"src":32597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[139,32599,32600],{"start":91},[54,32601,32602],{},"插件2：微软Docker远程开发工具",[24,32604,32605],{},"下面这是远程开发的插件。",[24,32607,32608],{},[40,32609],{"alt":72,"src":32610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[24,32612,32613],{},[40,32614],{"alt":72,"src":32615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[24,32617,32618],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[24,32620,32621],{},[40,32622],{"alt":72,"src":32623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[24,32625,32626],{},"安装完拓展之后，vscode进行链接：",[24,32628,32629],{},"1.按ctrl+shift+p",[24,32631,32632],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[24,32634,32635],{},"3.选择目前运行的容器",[24,32637,32638],{},"4.VS Code 会在新窗口中打开并连接到容器",[24,32640,32641],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[67,32643,32645],{"className":26289,"code":32644,"language":26291,"meta":72,"style":72},"docker run -v 主机目录:容器目录 image-name\n",[74,32646,32647],{"__ignoreMap":72},[77,32648,32649,32651,32653,32656,32659],{"class":79,"line":80},[77,32650,29021],{"class":83},[77,32652,29698],{"class":271},[77,32654,32655],{"class":94}," -v",[77,32657,32658],{"class":271}," 主机目录:容器目录",[77,32660,32661],{"class":271}," image-name\n",[67,32663,32665],{"className":26289,"code":32664,"language":26291,"meta":72,"style":72},"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",[74,32666,32667],{"__ignoreMap":72},[77,32668,32669,32671,32673,32676,32678,32681],{"class":79,"line":80},[77,32670,29021],{"class":83},[77,32672,29698],{"class":271},[77,32674,32675],{"class":94}," -it",[77,32677,32655],{"class":94},[77,32679,32680],{"class":271}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[77,32682,32683],{"class":271}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[24,32685,32686],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[24,32688,32689],{},"查看挂载情况：",[67,32691,32693],{"className":26289,"code":32692,"language":26291,"meta":72,"style":72},"mount | grep -i project\n",[74,32694,32695],{"__ignoreMap":72},[77,32696,32697,32700,32702,32705,32707],{"class":79,"line":80},[77,32698,32699],{"class":83},"mount",[77,32701,27577],{"class":2123},[77,32703,32704],{"class":83}," grep",[77,32706,28898],{"class":94},[77,32708,32709],{"class":271}," project\n",[24,32711,32712],{},"也可以通过ls来进行查看",[2520,32714,32715],{},"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":72,"searchDepth":91,"depth":91,"links":32717},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32574,"description":72},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32724,"title":32725,"body":32726,"description":2546,"extension":2547,"meta":32730,"navigation":2549,"path":32732,"seo":32733,"stem":32734,"__hash__":32735},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32727,"toc":32728},[],{"title":72,"searchDepth":91,"depth":91,"links":32729},[],{"category":32731},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32725,"description":2546},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32737,"title":32738,"body":32739,"description":2546,"extension":2547,"meta":32743,"navigation":2549,"path":32744,"seo":32745,"stem":32746,"__hash__":32747},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32740,"toc":32741},[],{"title":72,"searchDepth":91,"depth":91,"links":32742},[],{"category":32731},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32738,"description":2546},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32749,"title":32750,"body":32751,"description":2546,"extension":2547,"meta":33044,"navigation":2549,"path":33045,"seo":33046,"stem":33047,"__hash__":33048},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32752,"toc":33042},[32753,32756,32764,32779,32784,32835,32838,32844,33031,33036,33039],[10,32754,32750],{"id":32755},"_1验证深度学习环境",[24,32757,32758,32759],{},"关于环境的安装，看",[417,32760,32763],{"href":32761,"rel":32762},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26332],"Pytorch-->深度学习",[24,32765,32766,32767,32770,32771,32774,32775,32778],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[74,32768,32769],{},"pytorch-cuda=12.4"," 是一个“ ",[27,32772,32773],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[27,32776,32777],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[24,32780,32781],{},[40,32782],{"alt":72,"src":32783},"\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",[67,32785,32787],{"className":26289,"code":32786,"language":26291,"meta":72,"style":72},"# 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",[74,32788,32789,32794],{"__ignoreMap":72},[77,32790,32791],{"class":79,"line":80},[77,32792,32793],{"class":323},"# CUDA 12.4\n",[77,32795,32796,32799,32801,32804,32807,32810,32813,32816,32818,32821,32824,32827,32830,32832],{"class":79,"line":91},[77,32797,32798],{"class":83},"conda",[77,32800,26301],{"class":271},[77,32802,32803],{"class":271}," pytorch==",[77,32805,32806],{"class":94},"2.5.1",[77,32808,32809],{"class":271}," torchvision==",[77,32811,32812],{"class":94},"0.20.1",[77,32814,32815],{"class":271}," torchaudio==",[77,32817,32806],{"class":94},[77,32819,32820],{"class":271}," pytorch-cuda=",[77,32822,32823],{"class":94},"12.4",[77,32825,32826],{"class":94}," -c",[77,32828,32829],{"class":271}," pytorch",[77,32831,32826],{"class":94},[77,32833,32834],{"class":271}," nvidia\n",[24,32836,32837],{},"）：",[24,32839,32840],{},[417,32841,32842],{"href":32842,"rel":32843},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26332],[67,32845,32849],{"className":32846,"code":32847,"language":32848,"meta":72,"style":72},"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",[74,32850,32851,32856,32864,32869,32879,32895,32900,32910,32947,32954,32966,32982,32987,32997,33009,33019],{"__ignoreMap":72},[77,32852,32853],{"class":79,"line":80},[77,32854,32855],{"class":323},"# 对深度学习环境进行测试\n",[77,32857,32858,32861],{"class":79,"line":91},[77,32859,32860],{"class":2123},"import",[77,32862,32863],{"class":87}," torch\n",[77,32865,32866],{"class":79,"line":107},[77,32867,32868],{"class":323},"# 查看cuda是否被激活\n",[77,32870,32871,32874,32876],{"class":79,"line":191},[77,32872,32873],{"class":87},"flag",[77,32875,268],{"class":2123},[77,32877,32878],{"class":87},"torch.cuda.is_available()\n",[77,32880,32881,32884,32886,32889,32892],{"class":79,"line":1543},[77,32882,32883],{"class":94},"print",[77,32885,2622],{"class":87},[77,32887,32888],{"class":271},"\"cuda:\"",[77,32890,32891],{"class":87},", flag)   ",[77,32893,32894],{"class":323},"#返回true的话说明被激活\n",[77,32896,32897],{"class":79,"line":1549},[77,32898,32899],{"class":323},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[77,32901,32902,32905,32907],{"class":79,"line":1566},[77,32903,32904],{"class":87},"ngpu",[77,32906,268],{"class":2123},[77,32908,32909],{"class":94},"1\n",[77,32911,32912,32915,32917,32920,32923,32925,32928,32931,32934,32936,32938,32940,32942,32945],{"class":79,"line":1572},[77,32913,32914],{"class":87},"device",[77,32916,268],{"class":2123},[77,32918,32919],{"class":87},"torch.device(",[77,32921,32922],{"class":271},"\"cuda:0\"",[77,32924,4180],{"class":2123},[77,32926,32927],{"class":87},"(torch.cuda.is_available() ",[77,32929,32930],{"class":2123},"and",[77,32932,32933],{"class":87}," ngpu",[77,32935,3572],{"class":2123},[77,32937,1939],{"class":94},[77,32939,16186],{"class":87},[77,32941,4177],{"class":2123},[77,32943,32944],{"class":271}," \"cpu\"",[77,32946,2628],{"class":87},[77,32948,32949,32951],{"class":79,"line":1589},[77,32950,32883],{"class":94},[77,32952,32953],{"class":87},"(device)\n",[77,32955,32956,32958,32961,32963],{"class":79,"line":1595},[77,32957,32883],{"class":94},[77,32959,32960],{"class":87},"(torch.cuda.get_device_name(",[77,32962,1939],{"class":94},[77,32964,32965],{"class":87},"))\n",[77,32967,32968,32970,32973,32975,32977,32979],{"class":79,"line":4088},[77,32969,32883],{"class":94},[77,32971,32972],{"class":87},"(torch.rand(",[77,32974,2690],{"class":94},[77,32976,2992],{"class":87},[77,32978,2690],{"class":94},[77,32980,32981],{"class":87},").cuda())\n",[77,32983,32984],{"class":79,"line":4093},[77,32985,32986],{"class":323},"# 查看cuda和cudnn的版本\n",[77,32988,32989,32992,32994],{"class":79,"line":4099},[77,32990,32991],{"class":87},"cuda_version",[77,32993,268],{"class":2123},[77,32995,32996],{"class":87},"torch.version.cuda\n",[77,32998,32999,33001,33003,33006],{"class":79,"line":4104},[77,33000,32883],{"class":94},[77,33002,2622],{"class":87},[77,33004,33005],{"class":271},"\"cuda version\"",[77,33007,33008],{"class":87},",cuda_version)\n",[77,33010,33011,33014,33016],{"class":79,"line":4118},[77,33012,33013],{"class":87},"cudnn_version",[77,33015,268],{"class":2123},[77,33017,33018],{"class":87},"torch.backends.cudnn.version()\n",[77,33020,33021,33023,33025,33028],{"class":79,"line":4123},[77,33022,32883],{"class":94},[77,33024,2622],{"class":87},[77,33026,33027],{"class":271},"\"cudnn version\"",[77,33029,33030],{"class":87},",cudnn_version)\n",[24,33032,33033],{},[40,33034],{"alt":72,"src":33035},"\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",[24,33037,33038],{},"cuda:0 指的是一块显卡",[2520,33040,33041],{},"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":72,"searchDepth":91,"depth":91,"links":33043},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32750,"description":2546},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33050,"title":33051,"body":33052,"description":2546,"extension":2547,"meta":52854,"navigation":2549,"path":52855,"seo":52856,"stem":52857,"__hash__":52858},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33053,"toc":52848},[33054,33057,33061,33065,33068,33073,33078,33081,33086,33091,33096,33099,33103,33108,33112,33117,33120,33125,33128,33131,33134,33137,33142,33145,33150,33155,33160,33165,33168,33172,33175,33180,33783,33788,33791,33796,33799,33802,34266,34269,34272,34275,34278,36328,36331,36336,36341,37136,37139,37144,37922,37926,39585,39589,40303,40307,40311,40316,40321,40326,40329,40334,40339,40344,40349,40354,40358,40363,41645,41650,41653,41656,41659,41814,41817,41820,43036,43041,43736,43740,43744,43749,43754,43757,43762,43767,43772,43777,43782,43787,43792,43797,43802,43807,43812,43817,43822,43827,43832,43837,43842,43847,43852,43857,43862,43867,43872,43877,43882,43887,43892,43897,43902,43907,43911,43915,43918,45396,45400,47047,47051,47745,47749,47752,47755,48299,48302,48306,48309,49706,49710,49713,50291,52078,52082,52085,52845],[10,33055,33051],{"id":33056},"_2经典神经网络",[19,33058,33060],{"id":33059},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24468,33062,33064],{"id":33063},"_211原理介绍","2.1.1.原理介绍",[24,33066,33067],{},"LeNet-5",[139,33069,33070],{},[54,33071,33072],{},"原理",[24,33074,33075],{},[40,33076],{"alt":72,"src":33077},"\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",[24,33079,33080],{},"B是batch批次；C是channel通道",[139,33082,33083],{"start":91},[54,33084,33085],{},"网络参数详细",[24,33087,33088],{},[40,33089],{"alt":72,"src":33090},"\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",[24,33092,33093],{},[40,33094],{"alt":72,"src":33095},"\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",[24,33097,33098],{},"AlexNet",[139,33100,33101],{},[54,33102,33072],{},[24,33104,33105],{},[40,33106],{"alt":72,"src":33107},"\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",[139,33109,33110],{"start":91},[54,33111,33085],{},[24,33113,33114],{},[40,33115],{"alt":72,"src":33116},"\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",[24,33118,33119],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[24,33121,33122],{},[40,33123],{"alt":72,"src":33124},"\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",[24,33126,33127],{},"数据处理中的图像增强操作:",[24,33129,33130],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[24,33132,33133],{},"①增加数据量，保证训练数据充足；②防止过拟合",[24,33135,33136],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[24,33138,33139],{},[40,33140],{"alt":72,"src":33141},"\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",[24,33143,33144],{},"提升网络精确度的方法：LRN正则化",[24,33146,33147],{},[40,33148],{"alt":72,"src":33149},"\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",[24,33151,33152],{},[40,33153],{"alt":72,"src":33154},"\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",[139,33156,33157],{"start":107},[54,33158,33159],{},"AlexNet的总结",[24,33161,33162],{},[40,33163],{"alt":72,"src":33164},"\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",[24,33166,33167],{},"比LeNet模型要深一丢丢",[24468,33169,33171],{"id":33170},"_212代码实现","2.1.2.代码实现",[24,33173,33174],{},"（1）LeNet",[139,33176,33177],{},[54,33178,33179],{},"模型搭建",[67,33181,33183],{"className":32846,"code":33182,"language":32848,"meta":72,"style":72},"# 导入库\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",[74,33184,33185,33190,33196,33201,33214,33219,33231,33235,33255,33260,33265,33276,33281,33300,33304,33309,33357,33369,33374,33403,33438,33465,33470,33482,33487,33507,33526,33545,33549,33554,33564,33581,33592,33607,33618,33629,33644,33659,33670,33677,33681,33695,33700,33723,33728,33733,33738,33742,33747,33752,33762],{"__ignoreMap":72},[77,33186,33187],{"class":79,"line":80},[77,33188,33189],{"class":323},"# 导入库\n",[77,33191,33192,33194],{"class":79,"line":91},[77,33193,32860],{"class":2123},[77,33195,32863],{"class":87},[77,33197,33198],{"class":79,"line":107},[77,33199,33200],{"class":323},"# 导入神经网络层\n",[77,33202,33203,33206,33209,33211],{"class":79,"line":191},[77,33204,33205],{"class":2123},"from",[77,33207,33208],{"class":87}," torch ",[77,33210,32860],{"class":2123},[77,33212,33213],{"class":87}," nn\n",[77,33215,33216],{"class":79,"line":1543},[77,33217,33218],{"class":323},"# 导入展示神经网络参数的包\n",[77,33220,33221,33223,33226,33228],{"class":79,"line":1549},[77,33222,33205],{"class":2123},[77,33224,33225],{"class":87}," torchsummary ",[77,33227,32860],{"class":2123},[77,33229,33230],{"class":87}," summary\n",[77,33232,33233],{"class":79,"line":1566},[77,33234,4875],{"emptyLinePlaceholder":2549},[77,33236,33237,33239,33242,33244,33247,33249,33252],{"class":79,"line":1572},[77,33238,17166],{"class":2123},[77,33240,33241],{"class":83}," LeNet",[77,33243,2622],{"class":87},[77,33245,33246],{"class":83},"nn",[77,33248,3171],{"class":87},[77,33250,33251],{"class":83},"Module",[77,33253,33254],{"class":87},"):\n",[77,33256,33257],{"class":79,"line":1589},[77,33258,33259],{"class":323},"    # 模型初始化:\n",[77,33261,33262],{"class":79,"line":1595},[77,33263,33264],{"class":323},"    # 定义一些网络层和激活函数\n",[77,33266,33267,33270,33273],{"class":79,"line":4088},[77,33268,33269],{"class":2123},"    def",[77,33271,33272],{"class":94}," __init__",[77,33274,33275],{"class":87},"(self):\n",[77,33277,33278],{"class":79,"line":4093},[77,33279,33280],{"class":323},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[77,33282,33283,33286,33289,33292,33295,33298],{"class":79,"line":4099},[77,33284,33285],{"class":94},"        super",[77,33287,33288],{"class":87},"(LeNet,",[77,33290,33291],{"class":94},"self",[77,33293,33294],{"class":87},").",[77,33296,33297],{"class":94},"__init__",[77,33299,4451],{"class":87},[77,33301,33302],{"class":79,"line":4104},[77,33303,4875],{"emptyLinePlaceholder":2549},[77,33305,33306],{"class":79,"line":4118},[77,33307,33308],{"class":323},"        # 定义网络层\n",[77,33310,33311,33314,33317,33319,33322,33325,33327,33329,33331,33334,33336,33338,33340,33343,33345,33347,33349,33351,33353,33355],{"class":79,"line":4123},[77,33312,33313],{"class":94},"        self",[77,33315,33316],{"class":87},".c1",[77,33318,268],{"class":2123},[77,33320,33321],{"class":87},"nn.Conv2d(",[77,33323,33324],{"class":7691},"in_channels",[77,33326,268],{"class":2123},[77,33328,2120],{"class":94},[77,33330,2992],{"class":87},[77,33332,33333],{"class":7691},"out_channels",[77,33335,268],{"class":2123},[77,33337,2958],{"class":94},[77,33339,2992],{"class":87},[77,33341,33342],{"class":7691},"kernel_size",[77,33344,268],{"class":2123},[77,33346,2933],{"class":94},[77,33348,2992],{"class":87},[77,33350,1196],{"class":7691},[77,33352,268],{"class":2123},[77,33354,2696],{"class":94},[77,33356,2628],{"class":87},[77,33358,33359,33361,33364,33366],{"class":79,"line":4129},[77,33360,33313],{"class":94},[77,33362,33363],{"class":87},".sig",[77,33365,268],{"class":2123},[77,33367,33368],{"class":87},"nn.Sigmoid()\n",[77,33370,33371],{"class":79,"line":4150},[77,33372,33373],{"class":323},"        # 定义池化\n",[77,33375,33376,33378,33381,33383,33386,33388,33390,33392,33394,33397,33399,33401],{"class":79,"line":4155},[77,33377,33313],{"class":94},[77,33379,33380],{"class":87},".s2",[77,33382,268],{"class":2123},[77,33384,33385],{"class":87},"nn.AvgPool2d(",[77,33387,33342],{"class":7691},[77,33389,268],{"class":2123},[77,33391,2696],{"class":94},[77,33393,2992],{"class":87},[77,33395,33396],{"class":7691},"stride",[77,33398,268],{"class":2123},[77,33400,2696],{"class":94},[77,33402,2628],{"class":87},[77,33404,33405,33407,33410,33412,33414,33416,33418,33420,33422,33424,33426,33428,33430,33432,33434,33436],{"class":79,"line":4169},[77,33406,33313],{"class":94},[77,33408,33409],{"class":87},".c3",[77,33411,268],{"class":2123},[77,33413,33321],{"class":87},[77,33415,33324],{"class":7691},[77,33417,268],{"class":2123},[77,33419,2958],{"class":94},[77,33421,2992],{"class":87},[77,33423,33333],{"class":7691},[77,33425,268],{"class":2123},[77,33427,3214],{"class":94},[77,33429,2992],{"class":87},[77,33431,33342],{"class":7691},[77,33433,268],{"class":2123},[77,33435,2933],{"class":94},[77,33437,2628],{"class":87},[77,33439,33440,33442,33445,33447,33449,33451,33453,33455,33457,33459,33461,33463],{"class":79,"line":4174},[77,33441,33313],{"class":94},[77,33443,33444],{"class":87},".s4",[77,33446,268],{"class":2123},[77,33448,33385],{"class":87},[77,33450,33342],{"class":7691},[77,33452,268],{"class":2123},[77,33454,2696],{"class":94},[77,33456,2992],{"class":87},[77,33458,33396],{"class":7691},[77,33460,268],{"class":2123},[77,33462,2696],{"class":94},[77,33464,2628],{"class":87},[77,33466,33467],{"class":79,"line":4203},[77,33468,33469],{"class":323},"        # 定义平展层\n",[77,33471,33472,33474,33477,33479],{"class":79,"line":4208},[77,33473,33313],{"class":94},[77,33475,33476],{"class":87},".flatten",[77,33478,268],{"class":2123},[77,33480,33481],{"class":87},"nn.Flatten()\n",[77,33483,33484],{"class":79,"line":4225},[77,33485,33486],{"class":323},"        # 定义全连接层\n",[77,33488,33489,33491,33494,33496,33499,33501,33503,33505],{"class":79,"line":4230},[77,33490,33313],{"class":94},[77,33492,33493],{"class":87},".f5",[77,33495,268],{"class":2123},[77,33497,33498],{"class":87},"nn.Linear(",[77,33500,6462],{"class":94},[77,33502,2992],{"class":87},[77,33504,3430],{"class":94},[77,33506,2628],{"class":87},[77,33508,33509,33511,33514,33516,33518,33520,33522,33524],{"class":79,"line":4235},[77,33510,33313],{"class":94},[77,33512,33513],{"class":87},".f6",[77,33515,268],{"class":2123},[77,33517,33498],{"class":87},[77,33519,3430],{"class":94},[77,33521,2992],{"class":87},[77,33523,3324],{"class":94},[77,33525,2628],{"class":87},[77,33527,33528,33530,33533,33535,33537,33539,33541,33543],{"class":79,"line":4240},[77,33529,33313],{"class":94},[77,33531,33532],{"class":87},".f7",[77,33534,268],{"class":2123},[77,33536,33498],{"class":87},[77,33538,3324],{"class":94},[77,33540,2992],{"class":87},[77,33542,3059],{"class":94},[77,33544,2628],{"class":87},[77,33546,33547],{"class":79,"line":4254},[77,33548,4875],{"emptyLinePlaceholder":2549},[77,33550,33551],{"class":79,"line":4259},[77,33552,33553],{"class":323},"    # 写工具->写前向传播\n",[77,33555,33556,33558,33561],{"class":79,"line":5052},[77,33557,33269],{"class":2123},[77,33559,33560],{"class":83}," forward",[77,33562,33563],{"class":87},"(self,x):\n",[77,33565,33566,33569,33571,33573,33576,33578],{"class":79,"line":5066},[77,33567,33568],{"class":87},"        x",[77,33570,268],{"class":2123},[77,33572,33291],{"class":94},[77,33574,33575],{"class":87},".sig(",[77,33577,33291],{"class":94},[77,33579,33580],{"class":87},".c1(x))\n",[77,33582,33583,33585,33587,33589],{"class":79,"line":5074},[77,33584,33568],{"class":87},[77,33586,268],{"class":2123},[77,33588,33291],{"class":94},[77,33590,33591],{"class":87},".s2(x)\n",[77,33593,33594,33596,33598,33600,33602,33604],{"class":79,"line":5079},[77,33595,33568],{"class":87},[77,33597,268],{"class":2123},[77,33599,33291],{"class":94},[77,33601,33575],{"class":87},[77,33603,33291],{"class":94},[77,33605,33606],{"class":87},".c3(x))\n",[77,33608,33609,33611,33613,33615],{"class":79,"line":5085},[77,33610,33568],{"class":87},[77,33612,268],{"class":2123},[77,33614,33291],{"class":94},[77,33616,33617],{"class":87},".s4(x)\n",[77,33619,33620,33622,33624,33626],{"class":79,"line":5091},[77,33621,33568],{"class":87},[77,33623,268],{"class":2123},[77,33625,33291],{"class":94},[77,33627,33628],{"class":87},".flatten(x)\n",[77,33630,33631,33633,33635,33637,33639,33641],{"class":79,"line":5096},[77,33632,33568],{"class":87},[77,33634,268],{"class":2123},[77,33636,33291],{"class":94},[77,33638,33575],{"class":87},[77,33640,33291],{"class":94},[77,33642,33643],{"class":87},".f5(x))\n",[77,33645,33646,33648,33650,33652,33654,33656],{"class":79,"line":10422},[77,33647,33568],{"class":87},[77,33649,268],{"class":2123},[77,33651,33291],{"class":94},[77,33653,33575],{"class":87},[77,33655,33291],{"class":94},[77,33657,33658],{"class":87},".f6(x))\n",[77,33660,33661,33663,33665,33667],{"class":79,"line":10446},[77,33662,33568],{"class":87},[77,33664,268],{"class":2123},[77,33666,33291],{"class":94},[77,33668,33669],{"class":87},".f7(x)\n",[77,33671,33672,33674],{"class":79,"line":10451},[77,33673,17224],{"class":2123},[77,33675,33676],{"class":87}," x\n",[77,33678,33679],{"class":79,"line":10457},[77,33680,4875],{"emptyLinePlaceholder":2549},[77,33682,33683,33685,33688,33690,33693],{"class":79,"line":10484},[77,33684,4008],{"class":2123},[77,33686,33687],{"class":94}," __name__",[77,33689,5424],{"class":2123},[77,33691,33692],{"class":271},"\"__main__\"",[77,33694,6214],{"class":87},[77,33696,33697],{"class":79,"line":10489},[77,33698,33699],{"class":323},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[77,33701,33702,33705,33707,33709,33712,33714,33717,33719,33721],{"class":79,"line":10495},[77,33703,33704],{"class":87},"    device",[77,33706,268],{"class":2123},[77,33708,32919],{"class":87},[77,33710,33711],{"class":271},"\"cuda\"",[77,33713,4180],{"class":2123},[77,33715,33716],{"class":87}," torch.cuda.is_available() ",[77,33718,4177],{"class":2123},[77,33720,32944],{"class":271},[77,33722,2628],{"class":87},[77,33724,33725],{"class":79,"line":10507},[77,33726,33727],{"class":323},"    # 如果就是想指定用cpu用下方代码:\n",[77,33729,33730],{"class":79,"line":10519},[77,33731,33732],{"class":323},"    # device=\"cpu\"\n",[77,33734,33735],{"class":79,"line":10531},[77,33736,33737],{"class":323},"    # print(device)\n",[77,33739,33740],{"class":79,"line":12189},[77,33741,4875],{"emptyLinePlaceholder":2549},[77,33743,33744],{"class":79,"line":12214},[77,33745,33746],{"class":323},"    # 实例化模型\n",[77,33748,33749],{"class":79,"line":12237},[77,33750,33751],{"class":323},"    # 将模型放到设备中去运行\n",[77,33753,33754,33757,33759],{"class":79,"line":12261},[77,33755,33756],{"class":87},"    model",[77,33758,268],{"class":2123},[77,33760,33761],{"class":87},"LeNet().to(device)\n",[77,33763,33764,33767,33770,33772,33774,33776,33778,33780],{"class":79,"line":12266},[77,33765,33766],{"class":94},"    print",[77,33768,33769],{"class":87},"(summary(model,(",[77,33771,2120],{"class":94},[77,33773,2992],{"class":87},[77,33775,3514],{"class":94},[77,33777,2992],{"class":87},[77,33779,3514],{"class":94},[77,33781,33782],{"class":87},")))\n",[24,33784,33785],{},[40,33786],{"alt":72,"src":33787},"\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",[24,33789,33790],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[139,33792,33793],{"start":91},[54,33794,33795],{},"训练",[24,33797,33798],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[24,33800,33801],{},"在训练之前可以将数据展示看一下",[67,33803,33805],{"className":32846,"code":33804,"language":32848,"meta":72,"style":72},"# 建立画图的函数，用于展示数据\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",[74,33806,33807,33812,33817,33829,33841,33854,33859,33871,33876,33888,33893,33905,33909,33913,33934,33946,33951,33972,33983,33987,33992,34010,34021,34026,34037,34042,34053,34057,34062,34077,34090,34095,34100,34113,34126,34139,34144,34148,34153,34173,34190,34210,34223,34236,34246,34261],{"__ignoreMap":72},[77,33808,33809],{"class":79,"line":80},[77,33810,33811],{"class":323},"# 建立画图的函数，用于展示数据\n",[77,33813,33814],{"class":79,"line":91},[77,33815,33816],{"class":323},"# torchvision中包含很多内置的数据集\n",[77,33818,33819,33821,33824,33826],{"class":79,"line":107},[77,33820,33205],{"class":2123},[77,33822,33823],{"class":87}," sklearn.externals.array_api_compat.torch ",[77,33825,32860],{"class":2123},[77,33827,33828],{"class":87}," squeeze\n",[77,33830,33831,33833,33836,33838],{"class":79,"line":191},[77,33832,33205],{"class":2123},[77,33834,33835],{"class":87}," torchvision.datasets ",[77,33837,32860],{"class":2123},[77,33839,33840],{"class":87}," FashionMNIST\n",[77,33842,33843,33845,33848,33851],{"class":79,"line":1543},[77,33844,32860],{"class":2123},[77,33846,33847],{"class":87}," numpy ",[77,33849,33850],{"class":2123},"as",[77,33852,33853],{"class":87}," np\n",[77,33855,33856],{"class":79,"line":1549},[77,33857,33858],{"class":323},"# 引入处理数据集的包\n",[77,33860,33861,33863,33866,33868],{"class":79,"line":1566},[77,33862,33205],{"class":2123},[77,33864,33865],{"class":87}," torchvision ",[77,33867,32860],{"class":2123},[77,33869,33870],{"class":87}," transforms\n",[77,33872,33873],{"class":79,"line":1572},[77,33874,33875],{"class":323},"# 从torch库中引入数据处理的包\n",[77,33877,33878,33880,33883,33885],{"class":79,"line":1589},[77,33879,32860],{"class":2123},[77,33881,33882],{"class":87}," torch.utils.data ",[77,33884,33850],{"class":2123},[77,33886,33887],{"class":87}," Data\n",[77,33889,33890],{"class":79,"line":1595},[77,33891,33892],{"class":323},"# 导入画图的库\n",[77,33894,33895,33897,33900,33902],{"class":79,"line":4088},[77,33896,32860],{"class":2123},[77,33898,33899],{"class":87}," matplotlib.pyplot ",[77,33901,33850],{"class":2123},[77,33903,33904],{"class":87}," plt\n",[77,33906,33907],{"class":79,"line":4093},[77,33908,4875],{"emptyLinePlaceholder":2549},[77,33910,33911],{"class":79,"line":4099},[77,33912,4875],{"emptyLinePlaceholder":2549},[77,33914,33915,33918,33920,33923,33926,33928,33931],{"class":79,"line":4104},[77,33916,33917],{"class":87},"train_data",[77,33919,268],{"class":2123},[77,33921,33922],{"class":87},"FashionMNIST(",[77,33924,33925],{"class":7691},"root",[77,33927,268],{"class":2123},[77,33929,33930],{"class":271},"'.\u002Fdata'",[77,33932,33933],{"class":87},",\n",[77,33935,33936,33939,33941,33944],{"class":79,"line":4118},[77,33937,33938],{"class":7691},"                        train",[77,33940,268],{"class":2123},[77,33942,33943],{"class":94},"True",[77,33945,33933],{"class":87},[77,33947,33948],{"class":79,"line":4123},[77,33949,33950],{"class":323},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[77,33952,33953,33956,33958,33961,33964,33966,33969],{"class":79,"line":4129},[77,33954,33955],{"class":7691},"                        transform",[77,33957,268],{"class":2123},[77,33959,33960],{"class":87},"transforms.Compose([transforms.Resize(",[77,33962,33963],{"class":7691},"size",[77,33965,268],{"class":2123},[77,33967,33968],{"class":94},"224",[77,33970,33971],{"class":87},"),transforms.ToTensor()]),\n",[77,33973,33974,33977,33979,33981],{"class":79,"line":4150},[77,33975,33976],{"class":7691},"                        download",[77,33978,268],{"class":2123},[77,33980,33943],{"class":94},[77,33982,2628],{"class":87},[77,33984,33985],{"class":79,"line":4155},[77,33986,4875],{"emptyLinePlaceholder":2549},[77,33988,33989],{"class":79,"line":4169},[77,33990,33991],{"class":323},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[77,33993,33994,33997,33999,34002,34005,34007],{"class":79,"line":4174},[77,33995,33996],{"class":87},"train_loader",[77,33998,268],{"class":2123},[77,34000,34001],{"class":87},"Data.DataLoader(",[77,34003,34004],{"class":7691},"dataset",[77,34006,268],{"class":2123},[77,34008,34009],{"class":87},"train_data,\n",[77,34011,34012,34015,34017,34019],{"class":79,"line":4203},[77,34013,34014],{"class":7691},"                             batch_size",[77,34016,268],{"class":2123},[77,34018,2819],{"class":94},[77,34020,33933],{"class":87},[77,34022,34023],{"class":79,"line":4208},[77,34024,34025],{"class":323},"                             # 数据是否打乱\n",[77,34027,34028,34031,34033,34035],{"class":79,"line":4225},[77,34029,34030],{"class":7691},"                             shuffle",[77,34032,268],{"class":2123},[77,34034,33943],{"class":94},[77,34036,33933],{"class":87},[77,34038,34039],{"class":79,"line":4230},[77,34040,34041],{"class":323},"                             # 规定加载数据的进程\n",[77,34043,34044,34047,34049,34051],{"class":79,"line":4235},[77,34045,34046],{"class":7691},"                             num_workers",[77,34048,268],{"class":2123},[77,34050,1939],{"class":94},[77,34052,2628],{"class":87},[77,34054,34055],{"class":79,"line":4240},[77,34056,4875],{"emptyLinePlaceholder":2549},[77,34058,34059],{"class":79,"line":4254},[77,34060,34061],{"class":323},"# 获得一个batch的数据\n",[77,34063,34064,34066,34069,34071,34074],{"class":79,"line":4259},[77,34065,5500],{"class":2123},[77,34067,34068],{"class":87}," step,(b_x,b_y) ",[77,34070,28511],{"class":2123},[77,34072,34073],{"class":94}," enumerate",[77,34075,34076],{"class":87},"(train_loader):\n",[77,34078,34079,34081,34084,34086,34088],{"class":79,"line":5052},[77,34080,5576],{"class":2123},[77,34082,34083],{"class":87}," step ",[77,34085,3572],{"class":2123},[77,34087,6568],{"class":94},[77,34089,6214],{"class":87},[77,34091,34092],{"class":79,"line":5066},[77,34093,34094],{"class":2123},"        break\n",[77,34096,34097],{"class":79,"line":5074},[77,34098,34099],{"class":323},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[77,34101,34102,34105,34107,34110],{"class":79,"line":5079},[77,34103,34104],{"class":87},"batch_x",[77,34106,268],{"class":2123},[77,34108,34109],{"class":87},"b_x.squeeze().numpy()  ",[77,34111,34112],{"class":323},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[77,34114,34115,34118,34120,34123],{"class":79,"line":5085},[77,34116,34117],{"class":87},"batch_y",[77,34119,268],{"class":2123},[77,34121,34122],{"class":87},"b_y.numpy()   ",[77,34124,34125],{"class":323},"#将张量转换成功numpy数组\n",[77,34127,34128,34131,34133,34136],{"class":79,"line":5091},[77,34129,34130],{"class":87},"class_label",[77,34132,268],{"class":2123},[77,34134,34135],{"class":87},"train_data.classes  ",[77,34137,34138],{"class":323},"#训练集标签\n",[77,34140,34141],{"class":79,"line":5096},[77,34142,34143],{"class":323},"# print(class_label)\n",[77,34145,34146],{"class":79,"line":10422},[77,34147,4875],{"emptyLinePlaceholder":2549},[77,34149,34150],{"class":79,"line":10446},[77,34151,34152],{"class":323},"# 可视化一个batch的图像\n",[77,34154,34155,34158,34161,34163,34165,34167,34169,34171],{"class":79,"line":10451},[77,34156,34157],{"class":87},"plt.figure(",[77,34159,34160],{"class":7691},"figsize",[77,34162,268],{"class":2123},[77,34164,2622],{"class":87},[77,34166,3111],{"class":94},[77,34168,2992],{"class":87},[77,34170,2933],{"class":94},[77,34172,32965],{"class":87},[77,34174,34175,34177,34180,34182,34185,34187],{"class":79,"line":10457},[77,34176,5500],{"class":2123},[77,34178,34179],{"class":87}," ii ",[77,34181,28511],{"class":2123},[77,34183,34184],{"class":87}," np.arange(",[77,34186,9833],{"class":94},[77,34188,34189],{"class":87},"(batch_y)):\n",[77,34191,34192,34195,34197,34199,34201,34204,34206,34208],{"class":79,"line":10484},[77,34193,34194],{"class":87},"    plt.subplot(",[77,34196,2907],{"class":94},[77,34198,2992],{"class":87},[77,34200,3214],{"class":94},[77,34202,34203],{"class":87},",ii ",[77,34205,3094],{"class":2123},[77,34207,27586],{"class":94},[77,34209,2628],{"class":87},[77,34211,34212,34215,34218,34220],{"class":79,"line":10489},[77,34213,34214],{"class":87},"    plt.imshow(batch_x[ii,:,:],",[77,34216,34217],{"class":7691},"cmap",[77,34219,268],{"class":2123},[77,34221,34222],{"class":87},"plt.cm.gray)\n",[77,34224,34225,34228,34230,34232,34234],{"class":79,"line":10495},[77,34226,34227],{"class":87},"    plt.title(class_label[batch_y[ii]],",[77,34229,33963],{"class":7691},[77,34231,268],{"class":2123},[77,34233,3059],{"class":94},[77,34235,2628],{"class":87},[77,34237,34238,34241,34244],{"class":79,"line":10507},[77,34239,34240],{"class":87},"    plt.axis(",[77,34242,34243],{"class":271},"\"off\"",[77,34245,2628],{"class":87},[77,34247,34248,34251,34254,34256,34259],{"class":79,"line":10519},[77,34249,34250],{"class":87},"    plt.subplots_adjust(",[77,34252,34253],{"class":7691},"wspace",[77,34255,268],{"class":2123},[77,34257,34258],{"class":94},"0.05",[77,34260,2628],{"class":87},[77,34262,34263],{"class":79,"line":10531},[77,34264,34265],{"class":87},"plt.show()\n",[24,34267,34268],{},"用matplotlib进行展示的过程可以后续再补",[24,34270,34271],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[24,34273,34274],{},"训练次数就是按照批次过整个训练集数据的次数",[24,34276,34277],{},"模型训练：",[67,34279,34281],{"className":32846,"code":34280,"language":32848,"meta":72,"style":72},"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",[74,34282,34283,34290,34297,34301,34313,34319,34330,34340,34350,34360,34370,34375,34387,34397,34401,34405,34410,34421,34434,34445,34462,34473,34512,34528,34540,34551,34556,34567,34583,34594,34605,34616,34623,34627,34632,34637,34641,34646,34656,34677,34681,34685,34690,34695,34700,34720,34724,34729,34739,34743,34748,34757,34762,34767,34772,34782,34786,34790,34795,34800,34810,34815,34825,34830,34839,34844,34853,34858,34867,34871,34876,34886,34890,34894,34899,34914,34942,34957,34961,34966,34971,34980,34985,34994,34999,35008,35013,35022,35027,35036,35041,35050,35055,35068,35073,35083,35088,35098,35104,35110,35116,35122,35133,35139,35159,35165,35176,35182,35188,35194,35200,35206,35212,35218,35238,35244,35260,35266,35280,35286,35301,35307,35316,35322,35331,35337,35343,35352,35358,35369,35375,35394,35400,35411,35417,35437,35453,35459,35473,35479,35485,35496,35502,35508,35518,35524,35535,35541,35551,35556,35562,35611,35658,35663,35669,35688,35694,35714,35720,35726,35736,35741,35747,35763,35808,35814,35820,35826,35837,35843,35849,35855,35873,35887,35896,35905,35914,35923,35929,35935,35943,35948,35954,35965,35971,35991,35997,36003,36009,36026,36032,36038,36044,36050,36056,36082,36106,36112,36118,36124,36135,36146,36152,36169,36192,36215,36221,36226,36235,36245,36251,36256,36262,36275,36281,36292,36303,36322],{"__ignoreMap":72},[77,34284,34285,34287],{"class":79,"line":80},[77,34286,32860],{"class":2123},[77,34288,34289],{"class":87}," copy\n",[77,34291,34292,34294],{"class":79,"line":91},[77,34293,32860],{"class":2123},[77,34295,34296],{"class":87}," time\n",[77,34298,34299],{"class":79,"line":107},[77,34300,4875],{"emptyLinePlaceholder":2549},[77,34302,34303,34305,34308,34310],{"class":79,"line":191},[77,34304,32860],{"class":2123},[77,34306,34307],{"class":87}," pandas ",[77,34309,33850],{"class":2123},[77,34311,34312],{"class":87}," pd\n",[77,34314,34315,34317],{"class":79,"line":1543},[77,34316,32860],{"class":2123},[77,34318,32863],{"class":87},[77,34320,34321,34323,34325,34327],{"class":79,"line":1549},[77,34322,33205],{"class":2123},[77,34324,33882],{"class":87},[77,34326,32860],{"class":2123},[77,34328,34329],{"class":87}," Dataset\n",[77,34331,34332,34334,34336,34338],{"class":79,"line":1566},[77,34333,33205],{"class":2123},[77,34335,33835],{"class":87},[77,34337,32860],{"class":2123},[77,34339,33840],{"class":87},[77,34341,34342,34344,34346,34348],{"class":79,"line":1572},[77,34343,33205],{"class":2123},[77,34345,33865],{"class":87},[77,34347,32860],{"class":2123},[77,34349,33870],{"class":87},[77,34351,34352,34354,34356,34358],{"class":79,"line":1589},[77,34353,32860],{"class":2123},[77,34355,33882],{"class":87},[77,34357,33850],{"class":2123},[77,34359,33887],{"class":87},[77,34361,34362,34364,34366,34368],{"class":79,"line":1595},[77,34363,32860],{"class":2123},[77,34365,33899],{"class":87},[77,34367,33850],{"class":2123},[77,34369,33904],{"class":87},[77,34371,34372],{"class":79,"line":4088},[77,34373,34374],{"class":323},"# 导入模型\n",[77,34376,34377,34379,34382,34384],{"class":79,"line":4093},[77,34378,33205],{"class":2123},[77,34380,34381],{"class":87}," model ",[77,34383,32860],{"class":2123},[77,34385,34386],{"class":87}," LeNet\n",[77,34388,34389,34391,34393,34395],{"class":79,"line":4099},[77,34390,33205],{"class":2123},[77,34392,33208],{"class":87},[77,34394,32860],{"class":2123},[77,34396,33213],{"class":87},[77,34398,34399],{"class":79,"line":4104},[77,34400,4875],{"emptyLinePlaceholder":2549},[77,34402,34403],{"class":79,"line":4118},[77,34404,4875],{"emptyLinePlaceholder":2549},[77,34406,34407],{"class":79,"line":4123},[77,34408,34409],{"class":323},"# 处理训练集与验证集函数--->划分数据集\n",[77,34411,34412,34415,34418],{"class":79,"line":4129},[77,34413,34414],{"class":2123},"def",[77,34416,34417],{"class":83}," train_val_data_process",[77,34419,34420],{"class":87},"():\n",[77,34422,34423,34426,34428,34430,34432],{"class":79,"line":4150},[77,34424,34425],{"class":87},"    train_data",[77,34427,268],{"class":2123},[77,34429,33922],{"class":87},[77,34431,33930],{"class":271},[77,34433,33933],{"class":87},[77,34435,34436,34439,34441,34443],{"class":79,"line":4155},[77,34437,34438],{"class":7691},"                            train",[77,34440,268],{"class":2123},[77,34442,33943],{"class":94},[77,34444,33933],{"class":87},[77,34446,34447,34450,34452,34454,34456,34458,34460],{"class":79,"line":4169},[77,34448,34449],{"class":7691},"                            transform",[77,34451,268],{"class":2123},[77,34453,33960],{"class":87},[77,34455,33963],{"class":7691},[77,34457,268],{"class":2123},[77,34459,3514],{"class":94},[77,34461,33971],{"class":87},[77,34463,34464,34467,34469,34471],{"class":79,"line":4174},[77,34465,34466],{"class":7691},"                            download",[77,34468,268],{"class":2123},[77,34470,33943],{"class":94},[77,34472,2628],{"class":87},[77,34474,34475,34478,34480,34483,34486,34488,34491,34493,34495,34498,34500,34502,34505,34507,34509],{"class":79,"line":4203},[77,34476,34477],{"class":87},"    train_data,val_data",[77,34479,268],{"class":2123},[77,34481,34482],{"class":87},"Data.random_split(train_data,[",[77,34484,34485],{"class":94},"round",[77,34487,2622],{"class":87},[77,34489,34490],{"class":94},"0.8",[77,34492,3068],{"class":2123},[77,34494,9833],{"class":94},[77,34496,34497],{"class":87},"(train_data)),",[77,34499,34485],{"class":94},[77,34501,2622],{"class":87},[77,34503,34504],{"class":94},"0.2",[77,34506,3068],{"class":2123},[77,34508,9833],{"class":94},[77,34510,34511],{"class":87},"(train_data))])\n",[77,34513,34514,34517,34519,34522,34524,34526],{"class":79,"line":4208},[77,34515,34516],{"class":87},"    train_dataloader ",[77,34518,268],{"class":2123},[77,34520,34521],{"class":87}," Data.DataLoader(",[77,34523,34004],{"class":7691},[77,34525,268],{"class":2123},[77,34527,34009],{"class":87},[77,34529,34530,34533,34535,34538],{"class":79,"line":4225},[77,34531,34532],{"class":7691},"                                       batch_size",[77,34534,268],{"class":2123},[77,34536,34537],{"class":94},"128",[77,34539,33933],{"class":87},[77,34541,34542,34545,34547,34549],{"class":79,"line":4230},[77,34543,34544],{"class":7691},"                                       shuffle",[77,34546,268],{"class":2123},[77,34548,33943],{"class":94},[77,34550,33933],{"class":87},[77,34552,34553],{"class":79,"line":4235},[77,34554,34555],{"class":323},"                                       # 规定8个进程\n",[77,34557,34558,34561,34563,34565],{"class":79,"line":4240},[77,34559,34560],{"class":7691},"                                       num_workers",[77,34562,268],{"class":2123},[77,34564,3009],{"class":94},[77,34566,2628],{"class":87},[77,34568,34569,34572,34574,34576,34578,34580],{"class":79,"line":4254},[77,34570,34571],{"class":87},"    val_dataloader",[77,34573,268],{"class":2123},[77,34575,34001],{"class":87},[77,34577,34004],{"class":7691},[77,34579,268],{"class":2123},[77,34581,34582],{"class":87},"val_data,\n",[77,34584,34585,34588,34590,34592],{"class":79,"line":4259},[77,34586,34587],{"class":7691},"                                   batch_size",[77,34589,268],{"class":2123},[77,34591,34537],{"class":94},[77,34593,33933],{"class":87},[77,34595,34596,34599,34601,34603],{"class":79,"line":5052},[77,34597,34598],{"class":7691},"                                   shuffle",[77,34600,268],{"class":2123},[77,34602,33943],{"class":94},[77,34604,33933],{"class":87},[77,34606,34607,34610,34612,34614],{"class":79,"line":5066},[77,34608,34609],{"class":7691},"                                   num_workers",[77,34611,268],{"class":2123},[77,34613,3009],{"class":94},[77,34615,2628],{"class":87},[77,34617,34618,34620],{"class":79,"line":5074},[77,34619,6565],{"class":2123},[77,34621,34622],{"class":87}," train_dataloader,val_dataloader\n",[77,34624,34625],{"class":79,"line":5079},[77,34626,4875],{"emptyLinePlaceholder":2549},[77,34628,34629],{"class":79,"line":5085},[77,34630,34631],{"class":323},"# 验证是否出错\n",[77,34633,34634],{"class":79,"line":5091},[77,34635,34636],{"class":323},"# train_val_data_process()\n",[77,34638,34639],{"class":79,"line":5096},[77,34640,4875],{"emptyLinePlaceholder":2549},[77,34642,34643],{"class":79,"line":10422},[77,34644,34645],{"class":323},"# 定义模型训练函数\n",[77,34647,34648,34650,34653],{"class":79,"line":10446},[77,34649,34414],{"class":2123},[77,34651,34652],{"class":83}," train_model_process",[77,34654,34655],{"class":87},"(model,train_dataloader,val_dataloader,num_epochs):\n",[77,34657,34658,34660,34662,34664,34666,34668,34670,34672,34675],{"class":79,"line":10451},[77,34659,33704],{"class":87},[77,34661,268],{"class":2123},[77,34663,32919],{"class":87},[77,34665,33711],{"class":271},[77,34667,4180],{"class":2123},[77,34669,33716],{"class":87},[77,34671,4177],{"class":2123},[77,34673,34674],{"class":271}," 'cpu'",[77,34676,2628],{"class":87},[77,34678,34679],{"class":79,"line":10457},[77,34680,4875],{"emptyLinePlaceholder":2549},[77,34682,34683],{"class":79,"line":10484},[77,34684,4875],{"emptyLinePlaceholder":2549},[77,34686,34687],{"class":79,"line":10489},[77,34688,34689],{"class":323},"    # 定义优化器\n",[77,34691,34692],{"class":79,"line":10495},[77,34693,34694],{"class":323},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[77,34696,34697],{"class":79,"line":10507},[77,34698,34699],{"class":323},"    # lr为学习率\n",[77,34701,34702,34705,34707,34710,34713,34715,34718],{"class":79,"line":10519},[77,34703,34704],{"class":87},"    optimizer",[77,34706,268],{"class":2123},[77,34708,34709],{"class":87},"torch.optim.Adam(model.parameters(),",[77,34711,34712],{"class":7691},"lr",[77,34714,268],{"class":2123},[77,34716,34717],{"class":94},"0.001",[77,34719,2628],{"class":87},[77,34721,34722],{"class":79,"line":10531},[77,34723,4875],{"emptyLinePlaceholder":2549},[77,34725,34726],{"class":79,"line":12189},[77,34727,34728],{"class":323},"    # 定义损失函数使用交叉熵损失函数\n",[77,34730,34731,34734,34736],{"class":79,"line":12214},[77,34732,34733],{"class":87},"    criterion",[77,34735,268],{"class":2123},[77,34737,34738],{"class":87},"nn.CrossEntropyLoss()\n",[77,34740,34741],{"class":79,"line":12237},[77,34742,4875],{"emptyLinePlaceholder":2549},[77,34744,34745],{"class":79,"line":12261},[77,34746,34747],{"class":323},"    # 将模型放到GPU中进行训练\n",[77,34749,34750,34752,34754],{"class":79,"line":12266},[77,34751,33756],{"class":87},[77,34753,268],{"class":2123},[77,34755,34756],{"class":87},"model.to(device)\n",[77,34758,34759],{"class":79,"line":12271},[77,34760,34761],{"class":323},"    # 复制当前模型的参数\n",[77,34763,34764],{"class":79,"line":12276},[77,34765,34766],{"class":323},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[77,34768,34769],{"class":79,"line":12285},[77,34770,34771],{"class":323},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[77,34773,34774,34777,34779],{"class":79,"line":12290},[77,34775,34776],{"class":87},"    best_model_wts",[77,34778,268],{"class":2123},[77,34780,34781],{"class":87},"copy.deepcopy(model.state_dict())\n",[77,34783,34784],{"class":79,"line":12296},[77,34785,4875],{"emptyLinePlaceholder":2549},[77,34787,34788],{"class":79,"line":12317},[77,34789,4875],{"emptyLinePlaceholder":2549},[77,34791,34792],{"class":79,"line":12323},[77,34793,34794],{"class":323},"    # 初始化参数\n",[77,34796,34797],{"class":79,"line":12337},[77,34798,34799],{"class":323},"    # 最高准确度\n",[77,34801,34802,34805,34807],{"class":79,"line":12343},[77,34803,34804],{"class":87},"    best_acc",[77,34806,268],{"class":2123},[77,34808,34809],{"class":94},"0.0\n",[77,34811,34812],{"class":79,"line":12370},[77,34813,34814],{"class":323},"    # 训练集损失列表\n",[77,34816,34817,34820,34822],{"class":79,"line":12379},[77,34818,34819],{"class":87},"    train_loss_all",[77,34821,268],{"class":2123},[77,34823,34824],{"class":87},"[]\n",[77,34826,34827],{"class":79,"line":12385},[77,34828,34829],{"class":323},"    # 验证集函数列表\n",[77,34831,34832,34835,34837],{"class":79,"line":12393},[77,34833,34834],{"class":87},"    val_loss_all",[77,34836,268],{"class":2123},[77,34838,34824],{"class":87},[77,34840,34841],{"class":79,"line":12398},[77,34842,34843],{"class":323},"    # 训练集准确度列表\n",[77,34845,34846,34849,34851],{"class":79,"line":19074},[77,34847,34848],{"class":87},"    train_acc_all",[77,34850,268],{"class":2123},[77,34852,34824],{"class":87},[77,34854,34855],{"class":79,"line":19080},[77,34856,34857],{"class":323},"    # 验证集准确度列表\n",[77,34859,34860,34863,34865],{"class":79,"line":19103},[77,34861,34862],{"class":87},"    val_acc_all",[77,34864,268],{"class":2123},[77,34866,34824],{"class":87},[77,34868,34869],{"class":79,"line":19109},[77,34870,4875],{"emptyLinePlaceholder":2549},[77,34872,34873],{"class":79,"line":19132},[77,34874,34875],{"class":323},"    # 保存当前时间--->方便看每轮训练的时间\n",[77,34877,34878,34881,34883],{"class":79,"line":19146},[77,34879,34880],{"class":87},"    since",[77,34882,268],{"class":2123},[77,34884,34885],{"class":87},"time.time()\n",[77,34887,34888],{"class":79,"line":19166},[77,34889,4875],{"emptyLinePlaceholder":2549},[77,34891,34892],{"class":79,"line":19172},[77,34893,4875],{"emptyLinePlaceholder":2549},[77,34895,34896],{"class":79,"line":19183},[77,34897,34898],{"class":323},"    # 准备工作完成--->开始训练模型\n",[77,34900,34901,34903,34906,34908,34911],{"class":79,"line":19206},[77,34902,5676],{"class":2123},[77,34904,34905],{"class":87}," epoch ",[77,34907,28511],{"class":2123},[77,34909,34910],{"class":94}," range",[77,34912,34913],{"class":87},"(num_epochs):\n",[77,34915,34916,34919,34921,34924,34927,34929,34931,34933,34936,34938,34940],{"class":79,"line":19228},[77,34917,34918],{"class":94},"        print",[77,34920,2622],{"class":87},[77,34922,34923],{"class":271},"\"Epoch ",[77,34925,34926],{"class":94},"{}",[77,34928,3197],{"class":271},[77,34930,34926],{"class":94},[77,34932,2865],{"class":271},[77,34934,34935],{"class":87},".format(epoch,num_epochs",[77,34937,3145],{"class":2123},[77,34939,2120],{"class":94},[77,34941,32965],{"class":87},[77,34943,34944,34946,34948,34951,34953,34955],{"class":79,"line":19233},[77,34945,34918],{"class":94},[77,34947,2622],{"class":87},[77,34949,34950],{"class":271},"\"-\"",[77,34952,3068],{"class":2123},[77,34954,3059],{"class":94},[77,34956,2628],{"class":87},[77,34958,34959],{"class":79,"line":19239},[77,34960,4875],{"emptyLinePlaceholder":2549},[77,34962,34963],{"class":79,"line":19253},[77,34964,34965],{"class":323},"        # 初始化参数\n",[77,34967,34968],{"class":79,"line":19266},[77,34969,34970],{"class":323},"        # 训练集损失函数\n",[77,34972,34973,34976,34978],{"class":79,"line":19271},[77,34974,34975],{"class":87},"        train_loss",[77,34977,268],{"class":2123},[77,34979,34809],{"class":94},[77,34981,34982],{"class":79,"line":19285},[77,34983,34984],{"class":323},"        # 训练集准确度\n",[77,34986,34987,34990,34992],{"class":79,"line":19290},[77,34988,34989],{"class":87},"        train_corrects",[77,34991,268],{"class":2123},[77,34993,5560],{"class":94},[77,34995,34996],{"class":79,"line":19296},[77,34997,34998],{"class":323},"        # 验证集损失函数\n",[77,35000,35001,35004,35006],{"class":79,"line":19301},[77,35002,35003],{"class":87},"        val_loss",[77,35005,268],{"class":2123},[77,35007,34809],{"class":94},[77,35009,35010],{"class":79,"line":19315},[77,35011,35012],{"class":323},"        # 验证集准确度\n",[77,35014,35015,35018,35020],{"class":79,"line":19320},[77,35016,35017],{"class":87},"        val_corrects",[77,35019,268],{"class":2123},[77,35021,5560],{"class":94},[77,35023,35024],{"class":79,"line":19325},[77,35025,35026],{"class":323},"        # 训练集样本数量\n",[77,35028,35029,35032,35034],{"class":79,"line":19339},[77,35030,35031],{"class":87},"        train_num",[77,35033,268],{"class":2123},[77,35035,5560],{"class":94},[77,35037,35038],{"class":79,"line":19351},[77,35039,35040],{"class":323},"        # 验证集样本数量\n",[77,35042,35043,35046,35048],{"class":79,"line":19356},[77,35044,35045],{"class":87},"        val_num",[77,35047,268],{"class":2123},[77,35049,5560],{"class":94},[77,35051,35052],{"class":79,"line":19369},[77,35053,35054],{"class":323},"        # 将数据放到设备,并开始训练\n",[77,35056,35057,35059,35061,35063,35065],{"class":79,"line":19374},[77,35058,5878],{"class":2123},[77,35060,34068],{"class":87},[77,35062,28511],{"class":2123},[77,35064,34073],{"class":94},[77,35066,35067],{"class":87},"(train_dataloader):\n",[77,35069,35070],{"class":79,"line":19379},[77,35071,35072],{"class":323},"            # 将特征放入到训练设备\n",[77,35074,35075,35078,35080],{"class":79,"line":19384},[77,35076,35077],{"class":87},"            b_x",[77,35079,268],{"class":2123},[77,35081,35082],{"class":87},"b_x.to(device)\n",[77,35084,35085],{"class":79,"line":19397},[77,35086,35087],{"class":323},"            # 将标签放入到训练设备当中\n",[77,35089,35090,35093,35095],{"class":79,"line":19402},[77,35091,35092],{"class":87},"            b_y",[77,35094,268],{"class":2123},[77,35096,35097],{"class":87},"b_y.to(device)\n",[77,35099,35101],{"class":79,"line":35100},98,[77,35102,35103],{"class":323},"            # 设置模型为训练模式\n",[77,35105,35107],{"class":79,"line":35106},99,[77,35108,35109],{"class":87},"            model.train()\n",[77,35111,35113],{"class":79,"line":35112},100,[77,35114,35115],{"class":323},"            # 将数据放到模型当中,开始前向传播\n",[77,35117,35119],{"class":79,"line":35118},101,[77,35120,35121],{"class":323},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[77,35123,35125,35128,35130],{"class":79,"line":35124},102,[77,35126,35127],{"class":87},"            output",[77,35129,268],{"class":2123},[77,35131,35132],{"class":87},"model(b_x)\n",[77,35134,35136],{"class":79,"line":35135},103,[77,35137,35138],{"class":323},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[77,35140,35142,35145,35147,35150,35153,35155,35157],{"class":79,"line":35141},104,[77,35143,35144],{"class":87},"            pre_lab",[77,35146,268],{"class":2123},[77,35148,35149],{"class":87},"torch.argmax(output,",[77,35151,35152],{"class":7691},"dim",[77,35154,268],{"class":2123},[77,35156,2120],{"class":94},[77,35158,2628],{"class":87},[77,35160,35162],{"class":79,"line":35161},105,[77,35163,35164],{"class":323},"            # 计算每一个batch的损失函数\n",[77,35166,35168,35171,35173],{"class":79,"line":35167},106,[77,35169,35170],{"class":87},"            loss",[77,35172,268],{"class":2123},[77,35174,35175],{"class":87},"criterion(output,b_y)\n",[77,35177,35179],{"class":79,"line":35178},107,[77,35180,35181],{"class":323},"            # 将梯度初始化为0\n",[77,35183,35185],{"class":79,"line":35184},108,[77,35186,35187],{"class":87},"            optimizer.zero_grad()\n",[77,35189,35191],{"class":79,"line":35190},109,[77,35192,35193],{"class":323},"            # 梯度置为0后再进行反向传播\n",[77,35195,35197],{"class":79,"line":35196},110,[77,35198,35199],{"class":87},"            loss.backward()\n",[77,35201,35203],{"class":79,"line":35202},111,[77,35204,35205],{"class":323},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[77,35207,35209],{"class":79,"line":35208},112,[77,35210,35211],{"class":87},"            optimizer.step()\n",[77,35213,35215],{"class":79,"line":35214},113,[77,35216,35217],{"class":323},"            # loss.item()指的是batch的平均损失\n",[77,35219,35221,35224,35226,35229,35231,35234,35236],{"class":79,"line":35220},114,[77,35222,35223],{"class":87},"            train_loss",[77,35225,11950],{"class":2123},[77,35227,35228],{"class":87},"loss.item()",[77,35230,3068],{"class":2123},[77,35232,35233],{"class":87},"b_x.size(",[77,35235,1939],{"class":94},[77,35237,2628],{"class":87},[77,35239,35241],{"class":79,"line":35240},115,[77,35242,35243],{"class":323},"            # 计算每个批次中正确预测的数量\n",[77,35245,35247,35250,35252,35255,35257],{"class":79,"line":35246},116,[77,35248,35249],{"class":87},"            train_corrects",[77,35251,11950],{"class":2123},[77,35253,35254],{"class":87},"torch.sum(pre_lab",[77,35256,5424],{"class":2123},[77,35258,35259],{"class":87},"b_y.data)\n",[77,35261,35263],{"class":79,"line":35262},117,[77,35264,35265],{"class":323},"            # 计算目前为止一共处理了多少样本\n",[77,35267,35269,35272,35274,35276,35278],{"class":79,"line":35268},118,[77,35270,35271],{"class":87},"            train_num",[77,35273,11950],{"class":2123},[77,35275,35233],{"class":87},[77,35277,1939],{"class":94},[77,35279,2628],{"class":87},[77,35281,35283],{"class":79,"line":35282},119,[77,35284,35285],{"class":323},"        # 验证数据\n",[77,35287,35289,35291,35294,35296,35298],{"class":79,"line":35288},120,[77,35290,5878],{"class":2123},[77,35292,35293],{"class":87}," step ,(b_x,b_y) ",[77,35295,28511],{"class":2123},[77,35297,34073],{"class":94},[77,35299,35300],{"class":87},"(val_dataloader):\n",[77,35302,35304],{"class":79,"line":35303},121,[77,35305,35306],{"class":323},"            # 将特征放到验证设备当中\n",[77,35308,35310,35312,35314],{"class":79,"line":35309},122,[77,35311,35077],{"class":87},[77,35313,268],{"class":2123},[77,35315,35082],{"class":87},[77,35317,35319],{"class":79,"line":35318},123,[77,35320,35321],{"class":323},"            # 将标签放到放到训练设备当中\n",[77,35323,35325,35327,35329],{"class":79,"line":35324},124,[77,35326,35092],{"class":87},[77,35328,268],{"class":2123},[77,35330,35097],{"class":87},[77,35332,35334],{"class":79,"line":35333},125,[77,35335,35336],{"class":323},"            # 开启验证模式，设置模型为评估模式\n",[77,35338,35340],{"class":79,"line":35339},126,[77,35341,35342],{"class":87},"            model.eval()\n",[77,35344,35346,35349],{"class":79,"line":35345},127,[77,35347,35348],{"class":2123},"            with",[77,35350,35351],{"class":87}," torch.no_grad():\n",[77,35353,35355],{"class":79,"line":35354},128,[77,35356,35357],{"class":323},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[77,35359,35361,35364,35366],{"class":79,"line":35360},129,[77,35362,35363],{"class":87},"                output ",[77,35365,268],{"class":2123},[77,35367,35368],{"class":87}," model(b_x)\n",[77,35370,35372],{"class":79,"line":35371},130,[77,35373,35374],{"class":323},"                # 查找每一行中最大值对应的下标\n",[77,35376,35378,35381,35383,35386,35388,35390,35392],{"class":79,"line":35377},131,[77,35379,35380],{"class":87},"                pre_lab ",[77,35382,268],{"class":2123},[77,35384,35385],{"class":87}," torch.argmax(output, ",[77,35387,35152],{"class":7691},[77,35389,268],{"class":2123},[77,35391,2120],{"class":94},[77,35393,2628],{"class":87},[77,35395,35397],{"class":79,"line":35396},132,[77,35398,35399],{"class":323},"                # 计算验证集上的当前 batch 损失\n",[77,35401,35403,35406,35408],{"class":79,"line":35402},133,[77,35404,35405],{"class":87},"                val_batch_loss ",[77,35407,268],{"class":2123},[77,35409,35410],{"class":87}," criterion(output, b_y)\n",[77,35412,35414],{"class":79,"line":35413},134,[77,35415,35416],{"class":323},"                # 对损失函数进行累加（按样本数加权）\n",[77,35418,35420,35423,35425,35428,35430,35433,35435],{"class":79,"line":35419},135,[77,35421,35422],{"class":87},"                val_loss ",[77,35424,11950],{"class":2123},[77,35426,35427],{"class":87}," val_batch_loss.item() ",[77,35429,3068],{"class":2123},[77,35431,35432],{"class":87}," b_x.size(",[77,35434,1939],{"class":94},[77,35436,2628],{"class":87},[77,35438,35440,35443,35445,35448,35450],{"class":79,"line":35439},136,[77,35441,35442],{"class":87},"                val_corrects ",[77,35444,11950],{"class":2123},[77,35446,35447],{"class":87}," torch.sum(pre_lab ",[77,35449,5424],{"class":2123},[77,35451,35452],{"class":87}," b_y.data)\n",[77,35454,35456],{"class":79,"line":35455},137,[77,35457,35458],{"class":323},"                # 当前用于验证的样本数量\n",[77,35460,35462,35465,35467,35469,35471],{"class":79,"line":35461},138,[77,35463,35464],{"class":87},"            val_num ",[77,35466,11950],{"class":2123},[77,35468,35432],{"class":87},[77,35470,1939],{"class":94},[77,35472,2628],{"class":87},[77,35474,35476],{"class":79,"line":35475},139,[77,35477,35478],{"class":323},"        # 计算并保存每一次迭代的loss值和准确率\n",[77,35480,35482],{"class":79,"line":35481},140,[77,35483,35484],{"class":323},"        # 计算并保存训练集的loss值\n",[77,35486,35488,35491,35493],{"class":79,"line":35487},141,[77,35489,35490],{"class":87},"        train_loss_all.append(train_loss",[77,35492,3197],{"class":2123},[77,35494,35495],{"class":87},"train_num)\n",[77,35497,35499],{"class":79,"line":35498},142,[77,35500,35501],{"class":323},"        # 取双精度\n",[77,35503,35505],{"class":79,"line":35504},143,[77,35506,35507],{"class":323},"        # 计算并保存训练集的准确率\n",[77,35509,35511,35514,35516],{"class":79,"line":35510},144,[77,35512,35513],{"class":87},"        train_acc_all.append(train_corrects.double().item()",[77,35515,3197],{"class":2123},[77,35517,35495],{"class":87},[77,35519,35521],{"class":79,"line":35520},145,[77,35522,35523],{"class":323},"        # 计算并保存验证集的loss值\n",[77,35525,35527,35530,35532],{"class":79,"line":35526},146,[77,35528,35529],{"class":87},"        val_loss_all.append(val_loss",[77,35531,3197],{"class":2123},[77,35533,35534],{"class":87},"val_num)\n",[77,35536,35538],{"class":79,"line":35537},147,[77,35539,35540],{"class":323},"        # 计算并保存验证集的准确率\n",[77,35542,35544,35547,35549],{"class":79,"line":35543},148,[77,35545,35546],{"class":87},"        val_acc_all.append(val_corrects.double().item()",[77,35548,3197],{"class":2123},[77,35550,35534],{"class":87},[77,35552,35554],{"class":79,"line":35553},149,[77,35555,4875],{"emptyLinePlaceholder":2549},[77,35557,35559],{"class":79,"line":35558},150,[77,35560,35561],{"class":323},"        # 打印训练一轮的loss值和准确率\n",[77,35563,35565,35567,35569,35571,35573,35576,35578,35581,35583,35586,35588,35590,35592,35594,35597,35599,35601,35604,35606,35608],{"class":79,"line":35564},151,[77,35566,34918],{"class":94},[77,35568,2622],{"class":87},[77,35570,6067],{"class":271},[77,35572,34926],{"class":94},[77,35574,35575],{"class":271},"train loss:",[77,35577,3509],{"class":94},[77,35579,35580],{"class":2123},":.4f",[77,35582,3558],{"class":94},[77,35584,35585],{"class":271}," train acc:",[77,35587,3509],{"class":94},[77,35589,35580],{"class":2123},[77,35591,3558],{"class":94},[77,35593,6067],{"class":271},[77,35595,35596],{"class":87},".format(epoch,train_loss_all[",[77,35598,3145],{"class":2123},[77,35600,2120],{"class":94},[77,35602,35603],{"class":87},"],train_acc_all[",[77,35605,3145],{"class":2123},[77,35607,2120],{"class":94},[77,35609,35610],{"class":87},"]))\n",[77,35612,35614,35616,35618,35620,35622,35625,35627,35629,35631,35634,35636,35638,35640,35642,35645,35647,35649,35652,35654,35656],{"class":79,"line":35613},152,[77,35615,34918],{"class":94},[77,35617,2622],{"class":87},[77,35619,6067],{"class":271},[77,35621,34926],{"class":94},[77,35623,35624],{"class":271},"val loss:",[77,35626,3509],{"class":94},[77,35628,35580],{"class":2123},[77,35630,3558],{"class":94},[77,35632,35633],{"class":271}," val acc:",[77,35635,3509],{"class":94},[77,35637,35580],{"class":2123},[77,35639,3558],{"class":94},[77,35641,6067],{"class":271},[77,35643,35644],{"class":87},".format(epoch,val_loss_all[",[77,35646,3145],{"class":2123},[77,35648,2120],{"class":94},[77,35650,35651],{"class":87},"],val_acc_all[",[77,35653,3145],{"class":2123},[77,35655,2120],{"class":94},[77,35657,35610],{"class":87},[77,35659,35661],{"class":79,"line":35660},153,[77,35662,4875],{"emptyLinePlaceholder":2549},[77,35664,35666],{"class":79,"line":35665},154,[77,35667,35668],{"class":323},"        # 判断准确度--->保存最优模型\n",[77,35670,35672,35674,35677,35679,35681,35683,35685],{"class":79,"line":35671},155,[77,35673,4972],{"class":2123},[77,35675,35676],{"class":87}," val_acc_all[",[77,35678,3145],{"class":2123},[77,35680,2120],{"class":94},[77,35682,3552],{"class":87},[77,35684,3572],{"class":2123},[77,35686,35687],{"class":87},"best_acc:\n",[77,35689,35691],{"class":79,"line":35690},156,[77,35692,35693],{"class":323},"            # 保存当前模型准确度\n",[77,35695,35697,35700,35702,35704,35707,35709,35711],{"class":79,"line":35696},157,[77,35698,35699],{"class":87},"            best_acc:",[77,35701,2661],{"class":94},[77,35703,268],{"class":2123},[77,35705,35706],{"class":87},"val_acc_all[",[77,35708,3145],{"class":2123},[77,35710,2120],{"class":94},[77,35712,35713],{"class":87},"]\n",[77,35715,35717],{"class":79,"line":35716},158,[77,35718,35719],{"class":323},"            # 保存当前的准确度\n",[77,35721,35723],{"class":79,"line":35722},159,[77,35724,35725],{"class":323},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[77,35727,35729,35732,35734],{"class":79,"line":35728},160,[77,35730,35731],{"class":87},"            best_model_wts",[77,35733,268],{"class":2123},[77,35735,34781],{"class":87},[77,35737,35739],{"class":79,"line":35738},161,[77,35740,4875],{"emptyLinePlaceholder":2549},[77,35742,35744],{"class":79,"line":35743},162,[77,35745,35746],{"class":323},"        # 计算耗时\n",[77,35748,35750,35753,35755,35758,35760],{"class":79,"line":35749},163,[77,35751,35752],{"class":87},"        time_use",[77,35754,268],{"class":2123},[77,35756,35757],{"class":87},"time.time()",[77,35759,3145],{"class":2123},[77,35761,35762],{"class":87},"since\n",[77,35764,35766,35768,35770,35773,35775,35778,35780,35782,35784,35786,35788,35791,35794,35797,35799,35802,35804,35806],{"class":79,"line":35765},164,[77,35767,34918],{"class":94},[77,35769,2622],{"class":87},[77,35771,35772],{"class":271},"'训练和验证耗费的时间",[77,35774,3509],{"class":94},[77,35776,35777],{"class":2123},":.0f",[77,35779,3558],{"class":94},[77,35781,3157],{"class":271},[77,35783,3509],{"class":94},[77,35785,35777],{"class":2123},[77,35787,3558],{"class":94},[77,35789,35790],{"class":271},"s'",[77,35792,35793],{"class":87},".format(time_use",[77,35795,35796],{"class":2123},"\u002F\u002F",[77,35798,3520],{"class":94},[77,35800,35801],{"class":87},",time_use",[77,35803,2942],{"class":2123},[77,35805,3520],{"class":94},[77,35807,32965],{"class":87},[77,35809,35811],{"class":79,"line":35810},165,[77,35812,35813],{"class":323},"    # 选择最优参数\n",[77,35815,35817],{"class":79,"line":35816},166,[77,35818,35819],{"class":323},"    # 加载最高准确率下的模型参数\n",[77,35821,35823],{"class":79,"line":35822},167,[77,35824,35825],{"class":323},"    # model.load_state_dict(best_model_wts)\n",[77,35827,35829,35832,35835],{"class":79,"line":35828},168,[77,35830,35831],{"class":87},"    torch.save(model.state_dict(best_model_wts), ",[77,35833,35834],{"class":271},"'.\u002Fbest_model.pth'",[77,35836,2628],{"class":87},[77,35838,35840],{"class":79,"line":35839},169,[77,35841,35842],{"class":323},"    # 或者写成\n",[77,35844,35846],{"class":79,"line":35845},170,[77,35847,35848],{"class":323},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[77,35850,35852],{"class":79,"line":35851},171,[77,35853,35854],{"class":323},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[77,35856,35858,35861,35863,35866,35869,35871],{"class":79,"line":35857},172,[77,35859,35860],{"class":87},"    train_process",[77,35862,268],{"class":2123},[77,35864,35865],{"class":87},"pd.DataFrame(",[77,35867,35868],{"class":7691},"data",[77,35870,268],{"class":2123},[77,35872,4023],{"class":87},[77,35874,35876,35879,35881,35884],{"class":79,"line":35875},173,[77,35877,35878],{"class":271},"        \"epoch\"",[77,35880,3472],{"class":87},[77,35882,35883],{"class":94},"range",[77,35885,35886],{"class":87},"(num_epochs),\n",[77,35888,35890,35893],{"class":79,"line":35889},174,[77,35891,35892],{"class":271},"        \"train_loss_all\"",[77,35894,35895],{"class":87},":train_loss_all,\n",[77,35897,35899,35902],{"class":79,"line":35898},175,[77,35900,35901],{"class":271},"        \"val_loss_all\"",[77,35903,35904],{"class":87},":val_loss_all,\n",[77,35906,35908,35911],{"class":79,"line":35907},176,[77,35909,35910],{"class":271},"        \"train_acc_all\"",[77,35912,35913],{"class":87},":train_acc_all,\n",[77,35915,35917,35920],{"class":79,"line":35916},177,[77,35918,35919],{"class":271},"        \"val_acc_all\"",[77,35921,35922],{"class":87},":val_acc_all\n",[77,35924,35926],{"class":79,"line":35925},178,[77,35927,35928],{"class":87},"    })\n",[77,35930,35932],{"class":79,"line":35931},179,[77,35933,35934],{"class":323},"    # 返回训练保存的过程\n",[77,35936,35938,35940],{"class":79,"line":35937},180,[77,35939,6565],{"class":2123},[77,35941,35942],{"class":87}," train_process\n",[77,35944,35946],{"class":79,"line":35945},181,[77,35947,4875],{"emptyLinePlaceholder":2549},[77,35949,35951],{"class":79,"line":35950},182,[77,35952,35953],{"class":323},"# 将loss值和精度按照图片的形式展示出来\n",[77,35955,35957,35959,35962],{"class":79,"line":35956},183,[77,35958,34414],{"class":2123},[77,35960,35961],{"class":83}," matplot_acc_loss",[77,35963,35964],{"class":87},"(train_process):\n",[77,35966,35968],{"class":79,"line":35967},184,[77,35969,35970],{"class":323},"    # 设置图的大小\n",[77,35972,35974,35977,35979,35981,35983,35985,35987,35989],{"class":79,"line":35973},185,[77,35975,35976],{"class":87},"    plt.figure(",[77,35978,34160],{"class":7691},[77,35980,268],{"class":2123},[77,35982,2622],{"class":87},[77,35984,3111],{"class":94},[77,35986,2992],{"class":87},[77,35988,2907],{"class":94},[77,35990,32965],{"class":87},[77,35992,35994],{"class":79,"line":35993},186,[77,35995,35996],{"class":323},"    # 设置图中有几张图\n",[77,35998,36000],{"class":79,"line":35999},187,[77,36001,36002],{"class":323},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[77,36004,36006],{"class":79,"line":36005},188,[77,36007,36008],{"class":323},"    # ①loss图\n",[77,36010,36012,36014,36016,36018,36020,36022,36024],{"class":79,"line":36011},189,[77,36013,34194],{"class":87},[77,36015,2120],{"class":94},[77,36017,2992],{"class":87},[77,36019,2696],{"class":94},[77,36021,2992],{"class":87},[77,36023,2120],{"class":94},[77,36025,2628],{"class":87},[77,36027,36029],{"class":79,"line":36028},190,[77,36030,36031],{"class":323},"    # 补充:\n",[77,36033,36035],{"class":79,"line":36034},191,[77,36036,36037],{"class":323},"    # plt.subplot(nrows, ncols, index)\n",[77,36039,36041],{"class":79,"line":36040},192,[77,36042,36043],{"class":323},"    # nrows：行数\n",[77,36045,36047],{"class":79,"line":36046},193,[77,36048,36049],{"class":323},"    # ncols：列数\n",[77,36051,36053],{"class":79,"line":36052},194,[77,36054,36055],{"class":323},"    # index：目前选中第几个子图（从1开始）\n",[77,36057,36059,36062,36065,36068,36071,36073,36075,36077,36080],{"class":79,"line":36058},195,[77,36060,36061],{"class":87},"    plt.plot(train_process[",[77,36063,36064],{"class":271},"\"epoch\"",[77,36066,36067],{"class":87},"],train_process.train_loss_all,",[77,36069,36070],{"class":271},"'ro-'",[77,36072,2992],{"class":87},[77,36074,2254],{"class":7691},[77,36076,268],{"class":2123},[77,36078,36079],{"class":271},"'train loss'",[77,36081,2628],{"class":87},[77,36083,36085,36087,36089,36092,36095,36097,36099,36101,36104],{"class":79,"line":36084},196,[77,36086,36061],{"class":87},[77,36088,36064],{"class":271},[77,36090,36091],{"class":87},"],train_process.val_loss_all,",[77,36093,36094],{"class":271},"'bs--'",[77,36096,2992],{"class":87},[77,36098,2254],{"class":7691},[77,36100,268],{"class":2123},[77,36102,36103],{"class":271},"'val loss'",[77,36105,2628],{"class":87},[77,36107,36109],{"class":79,"line":36108},197,[77,36110,36111],{"class":323},"    # 添加一个图例\n",[77,36113,36115],{"class":79,"line":36114},198,[77,36116,36117],{"class":87},"    plt.legend()\n",[77,36119,36121],{"class":79,"line":36120},199,[77,36122,36123],{"class":323},"    # 给轴添加标签\n",[77,36125,36127,36130,36133],{"class":79,"line":36126},200,[77,36128,36129],{"class":87},"    plt.xlabel(",[77,36131,36132],{"class":271},"'epoch'",[77,36134,2628],{"class":87},[77,36136,36138,36141,36144],{"class":79,"line":36137},201,[77,36139,36140],{"class":87},"    plt.ylabel(",[77,36142,36143],{"class":271},"'loss'",[77,36145,2628],{"class":87},[77,36147,36149],{"class":79,"line":36148},202,[77,36150,36151],{"class":323},"    # ②准确度图\n",[77,36153,36155,36157,36159,36161,36163,36165,36167],{"class":79,"line":36154},203,[77,36156,34194],{"class":87},[77,36158,2120],{"class":94},[77,36160,2992],{"class":87},[77,36162,2696],{"class":94},[77,36164,2992],{"class":87},[77,36166,2696],{"class":94},[77,36168,2628],{"class":87},[77,36170,36172,36174,36176,36179,36181,36183,36185,36187,36190],{"class":79,"line":36171},204,[77,36173,36061],{"class":87},[77,36175,36064],{"class":271},[77,36177,36178],{"class":87},"],train_process.train_acc_all,",[77,36180,36070],{"class":271},[77,36182,2992],{"class":87},[77,36184,2254],{"class":7691},[77,36186,268],{"class":2123},[77,36188,36189],{"class":271},"'train acc'",[77,36191,2628],{"class":87},[77,36193,36195,36197,36199,36202,36204,36206,36208,36210,36213],{"class":79,"line":36194},205,[77,36196,36061],{"class":87},[77,36198,36064],{"class":271},[77,36200,36201],{"class":87},"],train_process.val_acc_all,",[77,36203,36094],{"class":271},[77,36205,2992],{"class":87},[77,36207,2254],{"class":7691},[77,36209,268],{"class":2123},[77,36211,36212],{"class":271},"'val acc'",[77,36214,2628],{"class":87},[77,36216,36218],{"class":79,"line":36217},206,[77,36219,36220],{"class":323},"    # 添加图例\n",[77,36222,36224],{"class":79,"line":36223},207,[77,36225,36117],{"class":87},[77,36227,36229,36231,36233],{"class":79,"line":36228},208,[77,36230,36129],{"class":87},[77,36232,36064],{"class":271},[77,36234,2628],{"class":87},[77,36236,36238,36240,36243],{"class":79,"line":36237},209,[77,36239,36140],{"class":87},[77,36241,36242],{"class":271},"\"acc\"",[77,36244,2628],{"class":87},[77,36246,36248],{"class":79,"line":36247},210,[77,36249,36250],{"class":87},"    plt.show()\n",[77,36252,36254],{"class":79,"line":36253},211,[77,36255,4875],{"emptyLinePlaceholder":2549},[77,36257,36259],{"class":79,"line":36258},212,[77,36260,36261],{"class":323},"# 正式开始训练:\n",[77,36263,36265,36267,36269,36271,36273],{"class":79,"line":36264},213,[77,36266,4008],{"class":2123},[77,36268,33687],{"class":94},[77,36270,5424],{"class":2123},[77,36272,33692],{"class":271},[77,36274,6214],{"class":87},[77,36276,36278],{"class":79,"line":36277},214,[77,36279,36280],{"class":323},"    # 将模型实例化\n",[77,36282,36284,36287,36289],{"class":79,"line":36283},215,[77,36285,36286],{"class":87},"    LeNet",[77,36288,268],{"class":2123},[77,36290,36291],{"class":87},"LeNet()\n",[77,36293,36295,36298,36300],{"class":79,"line":36294},216,[77,36296,36297],{"class":87},"    train_dataloader,val_dataloader",[77,36299,268],{"class":2123},[77,36301,36302],{"class":87},"train_val_data_process()\n",[77,36304,36306,36308,36310,36313,36316,36318,36320],{"class":79,"line":36305},217,[77,36307,35860],{"class":87},[77,36309,268],{"class":2123},[77,36311,36312],{"class":87},"train_model_process(LeNet,train_dataloader,val_dataloader,",[77,36314,36315],{"class":7691},"num_epochs",[77,36317,268],{"class":2123},[77,36319,3313],{"class":94},[77,36321,2628],{"class":87},[77,36323,36325],{"class":79,"line":36324},218,[77,36326,36327],{"class":87},"    matplot_acc_loss(train_process)\n",[24,36329,36330],{},"画图的补充点学习：",[24,36332,36333],{},[40,36334],{"alt":72,"src":36335},"\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",[139,36337,36338],{"start":107},[54,36339,36340],{},"测试",[67,36342,36344],{"className":32846,"code":36343,"language":32848,"meta":72,"style":72},"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",[74,36345,36346,36352,36362,36374,36384,36389,36399,36409,36413,36418,36427,36444,36456,36473,36484,36500,36505,36516,36527,36538,36545,36549,36554,36564,36569,36586,36594,36598,36603,36612,36621,36625,36630,36635,36640,36647,36652,36664,36674,36684,36689,36693,36698,36707,36712,36728,36733,36738,36743,36757,36762,36776,36780,36785,36800,36805,36817,36821,36826,36838,36843,36851,36856,36861,36871,36876,36885,36890,36895,36899,36904,36909,36925,36933,36938,36943,37002,37008,37013,37024,37032,37040,37044,37049,37053,37058,37066,37071,37087,37092,37102,37112],{"__ignoreMap":72},[77,36347,36348,36350],{"class":79,"line":80},[77,36349,32860],{"class":2123},[77,36351,32863],{"class":87},[77,36353,36354,36356,36358,36360],{"class":79,"line":91},[77,36355,32860],{"class":2123},[77,36357,33882],{"class":87},[77,36359,33850],{"class":2123},[77,36361,33887],{"class":87},[77,36363,36364,36366,36369,36371],{"class":79,"line":107},[77,36365,33205],{"class":2123},[77,36367,36368],{"class":87}," jupyter_client.consoleapp ",[77,36370,32860],{"class":2123},[77,36372,36373],{"class":87}," classes\n",[77,36375,36376,36378,36380,36382],{"class":79,"line":191},[77,36377,33205],{"class":2123},[77,36379,33865],{"class":87},[77,36381,32860],{"class":2123},[77,36383,33870],{"class":87},[77,36385,36386],{"class":79,"line":1543},[77,36387,36388],{"class":323},"# 导入数据集\n",[77,36390,36391,36393,36395,36397],{"class":79,"line":1549},[77,36392,33205],{"class":2123},[77,36394,33835],{"class":87},[77,36396,32860],{"class":2123},[77,36398,33840],{"class":87},[77,36400,36401,36403,36405,36407],{"class":79,"line":1566},[77,36402,33205],{"class":2123},[77,36404,34381],{"class":87},[77,36406,32860],{"class":2123},[77,36408,34386],{"class":87},[77,36410,36411],{"class":79,"line":1572},[77,36412,4875],{"emptyLinePlaceholder":2549},[77,36414,36415],{"class":79,"line":1589},[77,36416,36417],{"class":323},"# 测试数据处理\n",[77,36419,36420,36422,36425],{"class":79,"line":1595},[77,36421,34414],{"class":2123},[77,36423,36424],{"class":83}," test_data_process",[77,36426,34420],{"class":87},[77,36428,36429,36432,36434,36436,36438,36440,36442],{"class":79,"line":4088},[77,36430,36431],{"class":87},"    test_data",[77,36433,268],{"class":2123},[77,36435,33922],{"class":87},[77,36437,33925],{"class":7691},[77,36439,268],{"class":2123},[77,36441,33930],{"class":271},[77,36443,33933],{"class":87},[77,36445,36446,36449,36451,36454],{"class":79,"line":4093},[77,36447,36448],{"class":7691},"                           train",[77,36450,268],{"class":2123},[77,36452,36453],{"class":94},"False",[77,36455,33933],{"class":87},[77,36457,36458,36461,36463,36465,36467,36469,36471],{"class":79,"line":4099},[77,36459,36460],{"class":7691},"                           transform",[77,36462,268],{"class":2123},[77,36464,33960],{"class":87},[77,36466,33963],{"class":7691},[77,36468,268],{"class":2123},[77,36470,3514],{"class":94},[77,36472,33971],{"class":87},[77,36474,36475,36478,36480,36482],{"class":79,"line":4104},[77,36476,36477],{"class":7691},"                           download",[77,36479,268],{"class":2123},[77,36481,33943],{"class":94},[77,36483,2628],{"class":87},[77,36485,36486,36489,36491,36493,36495,36497],{"class":79,"line":4118},[77,36487,36488],{"class":87},"    test_dataloader",[77,36490,268],{"class":2123},[77,36492,34001],{"class":87},[77,36494,34004],{"class":7691},[77,36496,268],{"class":2123},[77,36498,36499],{"class":87},"test_data,\n",[77,36501,36502],{"class":79,"line":4123},[77,36503,36504],{"class":323},"                                    # 这里是一张一张进行测试\n",[77,36506,36507,36510,36512,36514],{"class":79,"line":4129},[77,36508,36509],{"class":7691},"                                    batch_size",[77,36511,268],{"class":2123},[77,36513,2120],{"class":94},[77,36515,33933],{"class":87},[77,36517,36518,36521,36523,36525],{"class":79,"line":4150},[77,36519,36520],{"class":7691},"                                    shuffle",[77,36522,268],{"class":2123},[77,36524,33943],{"class":94},[77,36526,33933],{"class":87},[77,36528,36529,36532,36534,36536],{"class":79,"line":4155},[77,36530,36531],{"class":7691},"                                    num_workers",[77,36533,268],{"class":2123},[77,36535,1939],{"class":94},[77,36537,2628],{"class":87},[77,36539,36540,36542],{"class":79,"line":4169},[77,36541,6565],{"class":2123},[77,36543,36544],{"class":87}," test_dataloader\n",[77,36546,36547],{"class":79,"line":4174},[77,36548,4875],{"emptyLinePlaceholder":2549},[77,36550,36551],{"class":79,"line":4203},[77,36552,36553],{"class":323},"# 定义模型测试函数\n",[77,36555,36556,36558,36561],{"class":79,"line":4208},[77,36557,34414],{"class":2123},[77,36559,36560],{"class":83}," test_model_process",[77,36562,36563],{"class":87},"(model,test_dataloader):\n",[77,36565,36566],{"class":79,"line":4225},[77,36567,36568],{"class":323},"    # 将模型放到设备当中，先进行判断\n",[77,36570,36571,36573,36575,36577,36579,36581,36583],{"class":79,"line":4230},[77,36572,33704],{"class":87},[77,36574,268],{"class":2123},[77,36576,33711],{"class":271},[77,36578,4180],{"class":2123},[77,36580,33716],{"class":87},[77,36582,4177],{"class":2123},[77,36584,36585],{"class":271}," \"cpu\"\n",[77,36587,36588,36590,36592],{"class":79,"line":4235},[77,36589,33756],{"class":87},[77,36591,268],{"class":2123},[77,36593,34756],{"class":87},[77,36595,36596],{"class":79,"line":4240},[77,36597,4875],{"emptyLinePlaceholder":2549},[77,36599,36600],{"class":79,"line":4254},[77,36601,36602],{"class":323},"    # 设置初始化参数\n",[77,36604,36605,36608,36610],{"class":79,"line":4259},[77,36606,36607],{"class":87},"    test_corrects",[77,36609,268],{"class":2123},[77,36611,34809],{"class":94},[77,36613,36614,36617,36619],{"class":79,"line":5052},[77,36615,36616],{"class":87},"    test_num",[77,36618,268],{"class":2123},[77,36620,5560],{"class":94},[77,36622,36623],{"class":79,"line":5066},[77,36624,4875],{"emptyLinePlaceholder":2549},[77,36626,36627],{"class":79,"line":5074},[77,36628,36629],{"class":323},"    # 进行模型测试\n",[77,36631,36632],{"class":79,"line":5079},[77,36633,36634],{"class":323},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[77,36636,36637],{"class":79,"line":5085},[77,36638,36639],{"class":323},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[77,36641,36642,36645],{"class":79,"line":5091},[77,36643,36644],{"class":2123},"    with",[77,36646,35351],{"class":87},[77,36648,36649],{"class":79,"line":5096},[77,36650,36651],{"class":323},"        # 从数据中进行\n",[77,36653,36654,36656,36659,36661],{"class":79,"line":10422},[77,36655,5878],{"class":2123},[77,36657,36658],{"class":87}," test_data_x,test_data_y ",[77,36660,28511],{"class":2123},[77,36662,36663],{"class":87}," test_dataloader:\n",[77,36665,36666,36669,36671],{"class":79,"line":10446},[77,36667,36668],{"class":87},"            test_data_x",[77,36670,268],{"class":2123},[77,36672,36673],{"class":87},"test_data_x.to(device)\n",[77,36675,36676,36679,36681],{"class":79,"line":10451},[77,36677,36678],{"class":87},"            test_data_y",[77,36680,268],{"class":2123},[77,36682,36683],{"class":87},"test_data_y.to(device)\n",[77,36685,36686],{"class":79,"line":10457},[77,36687,36688],{"class":323},"            # 设置为验证模式\n",[77,36690,36691],{"class":79,"line":10484},[77,36692,35342],{"class":87},[77,36694,36695],{"class":79,"line":10489},[77,36696,36697],{"class":323},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[77,36699,36700,36702,36704],{"class":79,"line":10495},[77,36701,35127],{"class":87},[77,36703,268],{"class":2123},[77,36705,36706],{"class":87},"model(test_data_x)\n",[77,36708,36709],{"class":79,"line":10507},[77,36710,36711],{"class":323},"            # 查找每一行中最大值对应的下标\n",[77,36713,36714,36716,36718,36720,36722,36724,36726],{"class":79,"line":10519},[77,36715,35144],{"class":87},[77,36717,268],{"class":2123},[77,36719,35149],{"class":87},[77,36721,35152],{"class":7691},[77,36723,268],{"class":2123},[77,36725,2120],{"class":94},[77,36727,2628],{"class":87},[77,36729,36730],{"class":79,"line":10531},[77,36731,36732],{"class":323},"            # 计算正确率\n",[77,36734,36735],{"class":79,"line":12189},[77,36736,36737],{"class":323},"            # .data表示是一个不带梯度信息的tensor\n",[77,36739,36740],{"class":79,"line":12214},[77,36741,36742],{"class":323},"            # 如果预测正确，则准确度test_corrects加1\n",[77,36744,36745,36748,36750,36752,36754],{"class":79,"line":12237},[77,36746,36747],{"class":87},"            test_corrects",[77,36749,11950],{"class":2123},[77,36751,35254],{"class":87},[77,36753,5424],{"class":2123},[77,36755,36756],{"class":87},"test_data_y.data)\n",[77,36758,36759],{"class":79,"line":12261},[77,36760,36761],{"class":323},"            # 将所有的测试样本进行累计\n",[77,36763,36764,36767,36769,36772,36774],{"class":79,"line":12266},[77,36765,36766],{"class":87},"            test_num",[77,36768,11950],{"class":2123},[77,36770,36771],{"class":87},"test_data_x.size(",[77,36773,1939],{"class":94},[77,36775,2628],{"class":87},[77,36777,36778],{"class":79,"line":12271},[77,36779,4875],{"emptyLinePlaceholder":2549},[77,36781,36782],{"class":79,"line":12276},[77,36783,36784],{"class":323},"        # 计算准确度\n",[77,36786,36787,36790,36792,36795,36797],{"class":79,"line":12285},[77,36788,36789],{"class":87},"        test_acc",[77,36791,268],{"class":2123},[77,36793,36794],{"class":87},"test_corrects.double().item()",[77,36796,3197],{"class":2123},[77,36798,36799],{"class":87},"test_num\n",[77,36801,36802],{"class":79,"line":12290},[77,36803,36804],{"class":323},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[77,36806,36807,36809,36811,36814],{"class":79,"line":12296},[77,36808,34918],{"class":94},[77,36810,2622],{"class":87},[77,36812,36813],{"class":271},"\"测试的准确率：\"",[77,36815,36816],{"class":87},",test_acc)\n",[77,36818,36819],{"class":79,"line":12317},[77,36820,4875],{"emptyLinePlaceholder":2549},[77,36822,36823],{"class":79,"line":12323},[77,36824,36825],{"class":323},"# 实现模型的测试功能\n",[77,36827,36828,36830,36832,36834,36836],{"class":79,"line":12337},[77,36829,4008],{"class":2123},[77,36831,33687],{"class":94},[77,36833,5424],{"class":2123},[77,36835,33692],{"class":271},[77,36837,6214],{"class":87},[77,36839,36840],{"class":79,"line":12343},[77,36841,36842],{"class":323},"    # 加载模型\n",[77,36844,36845,36847,36849],{"class":79,"line":12370},[77,36846,33756],{"class":87},[77,36848,268],{"class":2123},[77,36850,36291],{"class":87},[77,36852,36853],{"class":79,"line":12379},[77,36854,36855],{"class":323},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[77,36857,36858],{"class":79,"line":12385},[77,36859,36860],{"class":323},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[77,36862,36863,36866,36869],{"class":79,"line":12393},[77,36864,36865],{"class":87},"    model.load_state_dict(torch.load(",[77,36867,36868],{"class":271},"'best_model.pth'",[77,36870,32965],{"class":87},[77,36872,36873],{"class":79,"line":12398},[77,36874,36875],{"class":323},"    # 数据加载\n",[77,36877,36878,36880,36882],{"class":79,"line":19074},[77,36879,36488],{"class":87},[77,36881,268],{"class":2123},[77,36883,36884],{"class":87},"test_data_process()\n",[77,36886,36887],{"class":79,"line":19080},[77,36888,36889],{"class":323},"    # 加载模型测试的函数\n",[77,36891,36892],{"class":79,"line":19103},[77,36893,36894],{"class":87},"    test_model_process(model,test_dataloader)\n",[77,36896,36897],{"class":79,"line":19109},[77,36898,4875],{"emptyLinePlaceholder":2549},[77,36900,36901],{"class":79,"line":19132},[77,36902,36903],{"class":323},"    # 验证集推理实现：\n",[77,36905,36906],{"class":79,"line":19146},[77,36907,36908],{"class":323},"    # 加载数据加载的更详细一些\n",[77,36910,36911,36913,36915,36917,36919,36921,36923],{"class":79,"line":19166},[77,36912,33704],{"class":87},[77,36914,268],{"class":2123},[77,36916,33711],{"class":271},[77,36918,4180],{"class":2123},[77,36920,33716],{"class":87},[77,36922,4177],{"class":2123},[77,36924,36585],{"class":271},[77,36926,36927,36929,36931],{"class":79,"line":19172},[77,36928,33756],{"class":87},[77,36930,268],{"class":2123},[77,36932,34756],{"class":87},[77,36934,36935],{"class":79,"line":19183},[77,36936,36937],{"class":323},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[77,36939,36940],{"class":79,"line":19206},[77,36941,36942],{"class":323},"    # 顺序不可改变\n",[77,36944,36945,36948,36950,36952,36955,36957,36960,36962,36965,36967,36970,36972,36975,36977,36980,36982,36985,36987,36990,36992,36995,36997,37000],{"class":79,"line":19228},[77,36946,36947],{"class":87},"    classes",[77,36949,268],{"class":2123},[77,36951,3503],{"class":87},[77,36953,36954],{"class":271},"'T-shirt\u002Ftop'",[77,36956,2992],{"class":87},[77,36958,36959],{"class":271},"'Trouser'",[77,36961,2992],{"class":87},[77,36963,36964],{"class":271},"'Pullover'",[77,36966,2992],{"class":87},[77,36968,36969],{"class":271},"'Dress'",[77,36971,2992],{"class":87},[77,36973,36974],{"class":271},"'Coat'",[77,36976,2992],{"class":87},[77,36978,36979],{"class":271},"'Sandal'",[77,36981,2992],{"class":87},[77,36983,36984],{"class":271},"'Shirt'",[77,36986,2992],{"class":87},[77,36988,36989],{"class":271},"'Sneaker'",[77,36991,2992],{"class":87},[77,36993,36994],{"class":271},"'Bag'",[77,36996,2992],{"class":87},[77,36998,36999],{"class":271},"'Ankle boot'",[77,37001,35713],{"class":87},[77,37003,37004,37006],{"class":79,"line":19233},[77,37005,36644],{"class":2123},[77,37007,35351],{"class":87},[77,37009,37010],{"class":79,"line":19239},[77,37011,37012],{"class":323},"        # 将数据和标签都放到设备当中\n",[77,37014,37015,37017,37020,37022],{"class":79,"line":19253},[77,37016,5878],{"class":2123},[77,37018,37019],{"class":87}," b_x,b_y ",[77,37021,28511],{"class":2123},[77,37023,36663],{"class":87},[77,37025,37026,37028,37030],{"class":79,"line":19266},[77,37027,35077],{"class":87},[77,37029,268],{"class":2123},[77,37031,35082],{"class":87},[77,37033,37034,37036,37038],{"class":79,"line":19271},[77,37035,35092],{"class":87},[77,37037,268],{"class":2123},[77,37039,35097],{"class":87},[77,37041,37042],{"class":79,"line":19285},[77,37043,4875],{"emptyLinePlaceholder":2549},[77,37045,37046],{"class":79,"line":19290},[77,37047,37048],{"class":323},"            # 设置模型为验证模式\n",[77,37050,37051],{"class":79,"line":19296},[77,37052,35342],{"class":87},[77,37054,37055],{"class":79,"line":19301},[77,37056,37057],{"class":323},"            # 模型推理结果\n",[77,37059,37060,37062,37064],{"class":79,"line":19315},[77,37061,35127],{"class":87},[77,37063,268],{"class":2123},[77,37065,35132],{"class":87},[77,37067,37068],{"class":79,"line":19320},[77,37069,37070],{"class":323},"            # 获取最大下标，最大下标就是类别号\n",[77,37072,37073,37075,37077,37079,37081,37083,37085],{"class":79,"line":19325},[77,37074,35144],{"class":87},[77,37076,268],{"class":2123},[77,37078,35149],{"class":87},[77,37080,35152],{"class":7691},[77,37082,268],{"class":2123},[77,37084,2120],{"class":94},[77,37086,2628],{"class":87},[77,37088,37089],{"class":79,"line":19339},[77,37090,37091],{"class":323},"            # 取出张量中的数值\n",[77,37093,37094,37097,37099],{"class":79,"line":19351},[77,37095,37096],{"class":87},"            result",[77,37098,268],{"class":2123},[77,37100,37101],{"class":87},"pre_lab.item()\n",[77,37103,37104,37107,37109],{"class":79,"line":19356},[77,37105,37106],{"class":87},"            label",[77,37108,268],{"class":2123},[77,37110,37111],{"class":87},"b_y.item()\n",[77,37113,37114,37117,37119,37122,37125,37128,37130,37133],{"class":79,"line":19369},[77,37115,37116],{"class":94},"            print",[77,37118,2622],{"class":87},[77,37120,37121],{"class":271},"\"预测值：\"",[77,37123,37124],{"class":87},",classes[result],",[77,37126,37127],{"class":271},"\"------\"",[77,37129,2992],{"class":87},[77,37131,37132],{"class":271},"\"真实值：\"",[77,37134,37135],{"class":87},",classes[label])\n",[24,37137,37138],{},"（2）AlexNet",[139,37140,37141],{},[54,37142,37143],{},"神经网络构建",[67,37145,37147],{"className":32846,"code":37146,"language":32848,"meta":72,"style":72},"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",[74,37148,37149,37155,37165,37175,37187,37191,37208,37216,37231,37243,37285,37312,37355,37381,37425,37468,37511,37538,37542,37552,37557,37585,37604,37623,37627,37632,37640,37655,37665,37679,37689,37704,37719,37734,37745,37749,37754,37764,37779,37784,37798,37813,37825,37830,37841,37846,37852,37857,37869,37889,37894,37903],{"__ignoreMap":72},[77,37150,37151,37153],{"class":79,"line":80},[77,37152,32860],{"class":2123},[77,37154,32863],{"class":87},[77,37156,37157,37159,37161,37163],{"class":79,"line":91},[77,37158,33205],{"class":2123},[77,37160,33208],{"class":87},[77,37162,32860],{"class":2123},[77,37164,33213],{"class":87},[77,37166,37167,37169,37171,37173],{"class":79,"line":107},[77,37168,33205],{"class":2123},[77,37170,33225],{"class":87},[77,37172,32860],{"class":2123},[77,37174,33230],{"class":87},[77,37176,37177,37179,37182,37184],{"class":79,"line":191},[77,37178,32860],{"class":2123},[77,37180,37181],{"class":87}," torch.nn.functional ",[77,37183,33850],{"class":2123},[77,37185,37186],{"class":87}," F\n",[77,37188,37189],{"class":79,"line":1543},[77,37190,4875],{"emptyLinePlaceholder":2549},[77,37192,37193,37195,37198,37200,37202,37204,37206],{"class":79,"line":1549},[77,37194,17166],{"class":2123},[77,37196,37197],{"class":83}," AlexNet",[77,37199,2622],{"class":87},[77,37201,33246],{"class":83},[77,37203,3171],{"class":87},[77,37205,33251],{"class":83},[77,37207,33254],{"class":87},[77,37209,37210,37212,37214],{"class":79,"line":1566},[77,37211,33269],{"class":2123},[77,37213,33272],{"class":94},[77,37215,33275],{"class":87},[77,37217,37218,37220,37223,37225,37227,37229],{"class":79,"line":1572},[77,37219,33285],{"class":94},[77,37221,37222],{"class":87},"(AlexNet,",[77,37224,33291],{"class":94},[77,37226,33294],{"class":87},[77,37228,33297],{"class":94},[77,37230,4451],{"class":87},[77,37232,37233,37235,37238,37240],{"class":79,"line":1589},[77,37234,33313],{"class":94},[77,37236,37237],{"class":87},".ReLu",[77,37239,268],{"class":2123},[77,37241,37242],{"class":87},"nn.ReLU()\n",[77,37244,37245,37247,37249,37251,37253,37255,37257,37259,37261,37263,37265,37267,37269,37271,37273,37275,37277,37279,37281,37283],{"class":79,"line":1595},[77,37246,33313],{"class":94},[77,37248,33316],{"class":87},[77,37250,268],{"class":2123},[77,37252,33321],{"class":87},[77,37254,33324],{"class":7691},[77,37256,268],{"class":2123},[77,37258,2120],{"class":94},[77,37260,2992],{"class":87},[77,37262,33333],{"class":7691},[77,37264,268],{"class":2123},[77,37266,2825],{"class":94},[77,37268,2992],{"class":87},[77,37270,33342],{"class":7691},[77,37272,268],{"class":2123},[77,37274,3085],{"class":94},[77,37276,2992],{"class":87},[77,37278,33396],{"class":7691},[77,37280,268],{"class":2123},[77,37282,2907],{"class":94},[77,37284,2628],{"class":87},[77,37286,37287,37289,37291,37293,37296,37298,37300,37302,37304,37306,37308,37310],{"class":79,"line":4088},[77,37288,33313],{"class":94},[77,37290,33380],{"class":87},[77,37292,268],{"class":2123},[77,37294,37295],{"class":87},"nn.MaxPool2d(",[77,37297,33342],{"class":7691},[77,37299,268],{"class":2123},[77,37301,2690],{"class":94},[77,37303,2992],{"class":87},[77,37305,33396],{"class":7691},[77,37307,268],{"class":2123},[77,37309,2696],{"class":94},[77,37311,2628],{"class":87},[77,37313,37314,37316,37318,37320,37322,37324,37326,37328,37330,37332,37334,37337,37339,37341,37343,37345,37347,37349,37351,37353],{"class":79,"line":4093},[77,37315,33313],{"class":94},[77,37317,33409],{"class":87},[77,37319,268],{"class":2123},[77,37321,33321],{"class":87},[77,37323,33324],{"class":7691},[77,37325,268],{"class":2123},[77,37327,2825],{"class":94},[77,37329,2992],{"class":87},[77,37331,33333],{"class":7691},[77,37333,268],{"class":2123},[77,37335,37336],{"class":94},"256",[77,37338,2992],{"class":87},[77,37340,33342],{"class":7691},[77,37342,268],{"class":2123},[77,37344,2933],{"class":94},[77,37346,2992],{"class":87},[77,37348,1196],{"class":7691},[77,37350,268],{"class":2123},[77,37352,2696],{"class":94},[77,37354,2628],{"class":87},[77,37356,37357,37359,37361,37363,37365,37367,37369,37371,37373,37375,37377,37379],{"class":79,"line":4099},[77,37358,33313],{"class":94},[77,37360,33444],{"class":87},[77,37362,268],{"class":2123},[77,37364,37295],{"class":87},[77,37366,33342],{"class":7691},[77,37368,268],{"class":2123},[77,37370,2690],{"class":94},[77,37372,2992],{"class":87},[77,37374,33396],{"class":7691},[77,37376,268],{"class":2123},[77,37378,2696],{"class":94},[77,37380,2628],{"class":87},[77,37382,37383,37385,37388,37390,37392,37394,37396,37398,37400,37402,37404,37407,37409,37411,37413,37415,37417,37419,37421,37423],{"class":79,"line":4104},[77,37384,33313],{"class":94},[77,37386,37387],{"class":87},".c5",[77,37389,268],{"class":2123},[77,37391,33321],{"class":87},[77,37393,33324],{"class":7691},[77,37395,268],{"class":2123},[77,37397,37336],{"class":94},[77,37399,2992],{"class":87},[77,37401,33333],{"class":7691},[77,37403,268],{"class":2123},[77,37405,37406],{"class":94},"384",[77,37408,2992],{"class":87},[77,37410,33342],{"class":7691},[77,37412,268],{"class":2123},[77,37414,2690],{"class":94},[77,37416,2992],{"class":87},[77,37418,1196],{"class":7691},[77,37420,268],{"class":2123},[77,37422,2120],{"class":94},[77,37424,2628],{"class":87},[77,37426,37427,37429,37432,37434,37436,37438,37440,37442,37444,37446,37448,37450,37452,37454,37456,37458,37460,37462,37464,37466],{"class":79,"line":4118},[77,37428,33313],{"class":94},[77,37430,37431],{"class":87},".c6",[77,37433,268],{"class":2123},[77,37435,33321],{"class":87},[77,37437,33324],{"class":7691},[77,37439,268],{"class":2123},[77,37441,37406],{"class":94},[77,37443,2992],{"class":87},[77,37445,33333],{"class":7691},[77,37447,268],{"class":2123},[77,37449,37406],{"class":94},[77,37451,2992],{"class":87},[77,37453,33342],{"class":7691},[77,37455,268],{"class":2123},[77,37457,2690],{"class":94},[77,37459,2992],{"class":87},[77,37461,1196],{"class":7691},[77,37463,268],{"class":2123},[77,37465,2120],{"class":94},[77,37467,2628],{"class":87},[77,37469,37470,37472,37475,37477,37479,37481,37483,37485,37487,37489,37491,37493,37495,37497,37499,37501,37503,37505,37507,37509],{"class":79,"line":4123},[77,37471,33313],{"class":94},[77,37473,37474],{"class":87},".c7",[77,37476,268],{"class":2123},[77,37478,33321],{"class":87},[77,37480,33324],{"class":7691},[77,37482,268],{"class":2123},[77,37484,37406],{"class":94},[77,37486,2992],{"class":87},[77,37488,33333],{"class":7691},[77,37490,268],{"class":2123},[77,37492,37336],{"class":94},[77,37494,2992],{"class":87},[77,37496,33342],{"class":7691},[77,37498,268],{"class":2123},[77,37500,2690],{"class":94},[77,37502,2992],{"class":87},[77,37504,1196],{"class":7691},[77,37506,268],{"class":2123},[77,37508,2120],{"class":94},[77,37510,2628],{"class":87},[77,37512,37513,37515,37518,37520,37522,37524,37526,37528,37530,37532,37534,37536],{"class":79,"line":4129},[77,37514,33313],{"class":94},[77,37516,37517],{"class":87},".s8",[77,37519,268],{"class":2123},[77,37521,37295],{"class":87},[77,37523,33342],{"class":7691},[77,37525,268],{"class":2123},[77,37527,2690],{"class":94},[77,37529,2992],{"class":87},[77,37531,33396],{"class":7691},[77,37533,268],{"class":2123},[77,37535,2696],{"class":94},[77,37537,2628],{"class":87},[77,37539,37540],{"class":79,"line":4150},[77,37541,33469],{"class":323},[77,37543,37544,37546,37548,37550],{"class":79,"line":4155},[77,37545,33313],{"class":94},[77,37547,33476],{"class":87},[77,37549,268],{"class":2123},[77,37551,33481],{"class":87},[77,37553,37554],{"class":79,"line":4169},[77,37555,37556],{"class":323},"       # 定义全连接层\n",[77,37558,37559,37561,37564,37566,37568,37570,37572,37574,37576,37578,37580,37583],{"class":79,"line":4174},[77,37560,33313],{"class":94},[77,37562,37563],{"class":87},".f1",[77,37565,268],{"class":2123},[77,37567,33498],{"class":87},[77,37569,2958],{"class":94},[77,37571,3068],{"class":2123},[77,37573,2958],{"class":94},[77,37575,3068],{"class":2123},[77,37577,37336],{"class":94},[77,37579,2992],{"class":87},[77,37581,37582],{"class":94},"4096",[77,37584,2628],{"class":87},[77,37586,37587,37589,37592,37594,37596,37598,37600,37602],{"class":79,"line":4203},[77,37588,33313],{"class":94},[77,37590,37591],{"class":87},".f2",[77,37593,268],{"class":2123},[77,37595,33498],{"class":87},[77,37597,37582],{"class":94},[77,37599,2992],{"class":87},[77,37601,37582],{"class":94},[77,37603,2628],{"class":87},[77,37605,37606,37608,37611,37613,37615,37617,37619,37621],{"class":79,"line":4208},[77,37607,33313],{"class":94},[77,37609,37610],{"class":87},".f3",[77,37612,268],{"class":2123},[77,37614,33498],{"class":87},[77,37616,37582],{"class":94},[77,37618,2992],{"class":87},[77,37620,3059],{"class":94},[77,37622,2628],{"class":87},[77,37624,37625],{"class":79,"line":4225},[77,37626,4875],{"emptyLinePlaceholder":2549},[77,37628,37629],{"class":79,"line":4230},[77,37630,37631],{"class":323},"    # 定义前向传播\n",[77,37633,37634,37636,37638],{"class":79,"line":4235},[77,37635,33269],{"class":2123},[77,37637,33560],{"class":83},[77,37639,33563],{"class":87},[77,37641,37642,37644,37646,37648,37651,37653],{"class":79,"line":4240},[77,37643,33568],{"class":87},[77,37645,268],{"class":2123},[77,37647,33291],{"class":94},[77,37649,37650],{"class":87},".ReLu(",[77,37652,33291],{"class":94},[77,37654,33580],{"class":87},[77,37656,37657,37659,37661,37663],{"class":79,"line":4254},[77,37658,33568],{"class":87},[77,37660,268],{"class":2123},[77,37662,33291],{"class":94},[77,37664,33591],{"class":87},[77,37666,37667,37669,37671,37673,37675,37677],{"class":79,"line":4259},[77,37668,33568],{"class":87},[77,37670,268],{"class":2123},[77,37672,33291],{"class":94},[77,37674,37650],{"class":87},[77,37676,33291],{"class":94},[77,37678,33606],{"class":87},[77,37680,37681,37683,37685,37687],{"class":79,"line":5052},[77,37682,33568],{"class":87},[77,37684,268],{"class":2123},[77,37686,33291],{"class":94},[77,37688,33617],{"class":87},[77,37690,37691,37693,37695,37697,37699,37701],{"class":79,"line":5066},[77,37692,33568],{"class":87},[77,37694,268],{"class":2123},[77,37696,33291],{"class":94},[77,37698,37650],{"class":87},[77,37700,33291],{"class":94},[77,37702,37703],{"class":87},".c5(x))\n",[77,37705,37706,37708,37710,37712,37714,37716],{"class":79,"line":5074},[77,37707,33568],{"class":87},[77,37709,268],{"class":2123},[77,37711,33291],{"class":94},[77,37713,37650],{"class":87},[77,37715,33291],{"class":94},[77,37717,37718],{"class":87},".c6(x))\n",[77,37720,37721,37723,37725,37727,37729,37731],{"class":79,"line":5079},[77,37722,33568],{"class":87},[77,37724,268],{"class":2123},[77,37726,33291],{"class":94},[77,37728,37650],{"class":87},[77,37730,33291],{"class":94},[77,37732,37733],{"class":87},".c7(x))\n",[77,37735,37736,37738,37740,37742],{"class":79,"line":5085},[77,37737,33568],{"class":87},[77,37739,268],{"class":2123},[77,37741,33291],{"class":94},[77,37743,37744],{"class":87},".s8(x)\n",[77,37746,37747],{"class":79,"line":5091},[77,37748,4875],{"emptyLinePlaceholder":2549},[77,37750,37751],{"class":79,"line":5096},[77,37752,37753],{"class":323},"        # 展平加线性全连接层\n",[77,37755,37756,37758,37760,37762],{"class":79,"line":10422},[77,37757,33568],{"class":87},[77,37759,268],{"class":2123},[77,37761,33291],{"class":94},[77,37763,33628],{"class":87},[77,37765,37766,37768,37770,37772,37774,37776],{"class":79,"line":10446},[77,37767,33568],{"class":87},[77,37769,268],{"class":2123},[77,37771,33291],{"class":94},[77,37773,37650],{"class":87},[77,37775,33291],{"class":94},[77,37777,37778],{"class":87},".f1(x))\n",[77,37780,37781],{"class":79,"line":10451},[77,37782,37783],{"class":323},"        # 还需要dropout对神经元随机进行失活\n",[77,37785,37786,37788,37790,37793,37796],{"class":79,"line":10457},[77,37787,33568],{"class":87},[77,37789,268],{"class":2123},[77,37791,37792],{"class":87},"F.dropout(x,",[77,37794,37795],{"class":94},"0.5",[77,37797,2628],{"class":87},[77,37799,37800,37802,37804,37806,37808,37810],{"class":79,"line":10484},[77,37801,33568],{"class":87},[77,37803,268],{"class":2123},[77,37805,33291],{"class":94},[77,37807,37650],{"class":87},[77,37809,33291],{"class":94},[77,37811,37812],{"class":87},".f2(x))\n",[77,37814,37815,37817,37819,37821,37823],{"class":79,"line":10489},[77,37816,33568],{"class":87},[77,37818,268],{"class":2123},[77,37820,37792],{"class":87},[77,37822,37795],{"class":94},[77,37824,2628],{"class":87},[77,37826,37827],{"class":79,"line":10495},[77,37828,37829],{"class":323},"        # 直接输出\n",[77,37831,37832,37834,37836,37838],{"class":79,"line":10507},[77,37833,33568],{"class":87},[77,37835,268],{"class":2123},[77,37837,33291],{"class":94},[77,37839,37840],{"class":87},".f3(x)\n",[77,37842,37843],{"class":79,"line":10519},[77,37844,37845],{"class":323},"        # 前向传播输出\n",[77,37847,37848,37850],{"class":79,"line":10531},[77,37849,17224],{"class":2123},[77,37851,33676],{"class":87},[77,37853,37854],{"class":79,"line":12189},[77,37855,37856],{"class":323},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[77,37858,37859,37861,37863,37865,37867],{"class":79,"line":12214},[77,37860,4008],{"class":2123},[77,37862,33687],{"class":94},[77,37864,5424],{"class":2123},[77,37866,33692],{"class":271},[77,37868,6214],{"class":87},[77,37870,37871,37873,37875,37877,37879,37881,37883,37885,37887],{"class":79,"line":12237},[77,37872,33704],{"class":87},[77,37874,268],{"class":2123},[77,37876,32919],{"class":87},[77,37878,33711],{"class":271},[77,37880,4180],{"class":2123},[77,37882,33716],{"class":87},[77,37884,4177],{"class":2123},[77,37886,32944],{"class":271},[77,37888,2628],{"class":87},[77,37890,37891],{"class":79,"line":12261},[77,37892,37893],{"class":323},"    # 模型实例化，然后将实例化的模型放到设备中\n",[77,37895,37896,37898,37900],{"class":79,"line":12266},[77,37897,33756],{"class":87},[77,37899,268],{"class":2123},[77,37901,37902],{"class":87},"AlexNet().to(device)\n",[77,37904,37905,37907,37909,37911,37913,37916,37918,37920],{"class":79,"line":12271},[77,37906,33766],{"class":94},[77,37908,33769],{"class":87},[77,37910,2120],{"class":94},[77,37912,2992],{"class":87},[77,37914,37915],{"class":94},"227",[77,37917,2992],{"class":87},[77,37919,37915],{"class":94},[77,37921,33782],{"class":87},[139,37923,37924],{"start":91},[54,37925,33795],{},[67,37927,37929],{"className":32846,"code":37928,"language":32848,"meta":72,"style":72},"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",[74,37930,37931,37937,37943,37953,37959,37969,37979,37989,37999,38009,38013,38024,38034,38038,38042,38046,38054,38066,38076,38092,38102,38134,38148,38158,38168,38172,38182,38196,38206,38216,38226,38232,38236,38240,38244,38248,38252,38260,38280,38284,38288,38292,38296,38300,38316,38320,38324,38332,38336,38340,38348,38352,38356,38360,38368,38372,38376,38380,38384,38392,38396,38404,38408,38416,38420,38428,38432,38440,38444,38448,38456,38460,38464,38468,38480,38504,38518,38522,38526,38530,38538,38542,38550,38554,38562,38566,38574,38578,38586,38590,38598,38602,38614,38618,38626,38630,38638,38642,38646,38650,38654,38662,38666,38682,38686,38694,38698,38702,38706,38710,38714,38718,38722,38738,38742,38754,38758,38770,38774,38786,38790,38798,38802,38810,38814,38818,38823,38829,38833,38842,38846,38863,38867,38876,38880,38898,38911,38916,38929,38933,38937,38945,38949,38953,38961,38965,38973,38977,38985,38989,38993,39035,39077,39081,39085,39101,39105,39121,39125,39129,39137,39141,39145,39157,39195,39200,39205,39214,39218,39232,39242,39248,39254,39260,39266,39270,39274,39280,39284,39288,39296,39300,39318,39322,39326,39330,39346,39350,39354,39358,39362,39366,39386,39406,39410,39414,39418,39426,39434,39438,39454,39474,39494,39498,39502,39510,39518,39522,39526,39530,39542,39546,39556,39564,39581],{"__ignoreMap":72},[77,37932,37933,37935],{"class":79,"line":80},[77,37934,32860],{"class":2123},[77,37936,34289],{"class":87},[77,37938,37939,37941],{"class":79,"line":91},[77,37940,32860],{"class":2123},[77,37942,34296],{"class":87},[77,37944,37945,37947,37949,37951],{"class":79,"line":107},[77,37946,32860],{"class":2123},[77,37948,34307],{"class":87},[77,37950,33850],{"class":2123},[77,37952,34312],{"class":87},[77,37954,37955,37957],{"class":79,"line":191},[77,37956,32860],{"class":2123},[77,37958,32863],{"class":87},[77,37960,37961,37963,37965,37967],{"class":79,"line":1543},[77,37962,33205],{"class":2123},[77,37964,33882],{"class":87},[77,37966,32860],{"class":2123},[77,37968,34329],{"class":87},[77,37970,37971,37973,37975,37977],{"class":79,"line":1549},[77,37972,33205],{"class":2123},[77,37974,33835],{"class":87},[77,37976,32860],{"class":2123},[77,37978,33840],{"class":87},[77,37980,37981,37983,37985,37987],{"class":79,"line":1566},[77,37982,33205],{"class":2123},[77,37984,33865],{"class":87},[77,37986,32860],{"class":2123},[77,37988,33870],{"class":87},[77,37990,37991,37993,37995,37997],{"class":79,"line":1572},[77,37992,32860],{"class":2123},[77,37994,33882],{"class":87},[77,37996,33850],{"class":2123},[77,37998,33887],{"class":87},[77,38000,38001,38003,38005,38007],{"class":79,"line":1589},[77,38002,32860],{"class":2123},[77,38004,33899],{"class":87},[77,38006,33850],{"class":2123},[77,38008,33904],{"class":87},[77,38010,38011],{"class":79,"line":1595},[77,38012,34374],{"class":323},[77,38014,38015,38017,38019,38021],{"class":79,"line":4088},[77,38016,33205],{"class":2123},[77,38018,34381],{"class":87},[77,38020,32860],{"class":2123},[77,38022,38023],{"class":87}," AlexNet\n",[77,38025,38026,38028,38030,38032],{"class":79,"line":4093},[77,38027,33205],{"class":2123},[77,38029,33208],{"class":87},[77,38031,32860],{"class":2123},[77,38033,33213],{"class":87},[77,38035,38036],{"class":79,"line":4099},[77,38037,4875],{"emptyLinePlaceholder":2549},[77,38039,38040],{"class":79,"line":4104},[77,38041,4875],{"emptyLinePlaceholder":2549},[77,38043,38044],{"class":79,"line":4118},[77,38045,34409],{"class":323},[77,38047,38048,38050,38052],{"class":79,"line":4123},[77,38049,34414],{"class":2123},[77,38051,34417],{"class":83},[77,38053,34420],{"class":87},[77,38055,38056,38058,38060,38062,38064],{"class":79,"line":4129},[77,38057,34425],{"class":87},[77,38059,268],{"class":2123},[77,38061,33922],{"class":87},[77,38063,33930],{"class":271},[77,38065,33933],{"class":87},[77,38067,38068,38070,38072,38074],{"class":79,"line":4150},[77,38069,34438],{"class":7691},[77,38071,268],{"class":2123},[77,38073,33943],{"class":94},[77,38075,33933],{"class":87},[77,38077,38078,38080,38082,38084,38086,38088,38090],{"class":79,"line":4155},[77,38079,34449],{"class":7691},[77,38081,268],{"class":2123},[77,38083,33960],{"class":87},[77,38085,33963],{"class":7691},[77,38087,268],{"class":2123},[77,38089,37915],{"class":94},[77,38091,33971],{"class":87},[77,38093,38094,38096,38098,38100],{"class":79,"line":4169},[77,38095,34466],{"class":7691},[77,38097,268],{"class":2123},[77,38099,33943],{"class":94},[77,38101,2628],{"class":87},[77,38103,38104,38106,38108,38110,38112,38114,38116,38118,38120,38122,38124,38126,38128,38130,38132],{"class":79,"line":4174},[77,38105,34477],{"class":87},[77,38107,268],{"class":2123},[77,38109,34482],{"class":87},[77,38111,34485],{"class":94},[77,38113,2622],{"class":87},[77,38115,34490],{"class":94},[77,38117,3068],{"class":2123},[77,38119,9833],{"class":94},[77,38121,34497],{"class":87},[77,38123,34485],{"class":94},[77,38125,2622],{"class":87},[77,38127,34504],{"class":94},[77,38129,3068],{"class":2123},[77,38131,9833],{"class":94},[77,38133,34511],{"class":87},[77,38135,38136,38138,38140,38142,38144,38146],{"class":79,"line":4203},[77,38137,34516],{"class":87},[77,38139,268],{"class":2123},[77,38141,34521],{"class":87},[77,38143,34004],{"class":7691},[77,38145,268],{"class":2123},[77,38147,34009],{"class":87},[77,38149,38150,38152,38154,38156],{"class":79,"line":4208},[77,38151,34532],{"class":7691},[77,38153,268],{"class":2123},[77,38155,34537],{"class":94},[77,38157,33933],{"class":87},[77,38159,38160,38162,38164,38166],{"class":79,"line":4225},[77,38161,34544],{"class":7691},[77,38163,268],{"class":2123},[77,38165,33943],{"class":94},[77,38167,33933],{"class":87},[77,38169,38170],{"class":79,"line":4230},[77,38171,34555],{"class":323},[77,38173,38174,38176,38178,38180],{"class":79,"line":4235},[77,38175,34560],{"class":7691},[77,38177,268],{"class":2123},[77,38179,3009],{"class":94},[77,38181,2628],{"class":87},[77,38183,38184,38186,38188,38190,38192,38194],{"class":79,"line":4240},[77,38185,34571],{"class":87},[77,38187,268],{"class":2123},[77,38189,34001],{"class":87},[77,38191,34004],{"class":7691},[77,38193,268],{"class":2123},[77,38195,34582],{"class":87},[77,38197,38198,38200,38202,38204],{"class":79,"line":4254},[77,38199,34587],{"class":7691},[77,38201,268],{"class":2123},[77,38203,34537],{"class":94},[77,38205,33933],{"class":87},[77,38207,38208,38210,38212,38214],{"class":79,"line":4259},[77,38209,34598],{"class":7691},[77,38211,268],{"class":2123},[77,38213,33943],{"class":94},[77,38215,33933],{"class":87},[77,38217,38218,38220,38222,38224],{"class":79,"line":5052},[77,38219,34609],{"class":7691},[77,38221,268],{"class":2123},[77,38223,3009],{"class":94},[77,38225,2628],{"class":87},[77,38227,38228,38230],{"class":79,"line":5066},[77,38229,6565],{"class":2123},[77,38231,34622],{"class":87},[77,38233,38234],{"class":79,"line":5074},[77,38235,4875],{"emptyLinePlaceholder":2549},[77,38237,38238],{"class":79,"line":5079},[77,38239,34631],{"class":323},[77,38241,38242],{"class":79,"line":5085},[77,38243,34636],{"class":323},[77,38245,38246],{"class":79,"line":5091},[77,38247,4875],{"emptyLinePlaceholder":2549},[77,38249,38250],{"class":79,"line":5096},[77,38251,34645],{"class":323},[77,38253,38254,38256,38258],{"class":79,"line":10422},[77,38255,34414],{"class":2123},[77,38257,34652],{"class":83},[77,38259,34655],{"class":87},[77,38261,38262,38264,38266,38268,38270,38272,38274,38276,38278],{"class":79,"line":10446},[77,38263,33704],{"class":87},[77,38265,268],{"class":2123},[77,38267,32919],{"class":87},[77,38269,33711],{"class":271},[77,38271,4180],{"class":2123},[77,38273,33716],{"class":87},[77,38275,4177],{"class":2123},[77,38277,34674],{"class":271},[77,38279,2628],{"class":87},[77,38281,38282],{"class":79,"line":10451},[77,38283,4875],{"emptyLinePlaceholder":2549},[77,38285,38286],{"class":79,"line":10457},[77,38287,4875],{"emptyLinePlaceholder":2549},[77,38289,38290],{"class":79,"line":10484},[77,38291,34689],{"class":323},[77,38293,38294],{"class":79,"line":10489},[77,38295,34694],{"class":323},[77,38297,38298],{"class":79,"line":10495},[77,38299,34699],{"class":323},[77,38301,38302,38304,38306,38308,38310,38312,38314],{"class":79,"line":10507},[77,38303,34704],{"class":87},[77,38305,268],{"class":2123},[77,38307,34709],{"class":87},[77,38309,34712],{"class":7691},[77,38311,268],{"class":2123},[77,38313,34717],{"class":94},[77,38315,2628],{"class":87},[77,38317,38318],{"class":79,"line":10519},[77,38319,4875],{"emptyLinePlaceholder":2549},[77,38321,38322],{"class":79,"line":10531},[77,38323,34728],{"class":323},[77,38325,38326,38328,38330],{"class":79,"line":12189},[77,38327,34733],{"class":87},[77,38329,268],{"class":2123},[77,38331,34738],{"class":87},[77,38333,38334],{"class":79,"line":12214},[77,38335,4875],{"emptyLinePlaceholder":2549},[77,38337,38338],{"class":79,"line":12237},[77,38339,34747],{"class":323},[77,38341,38342,38344,38346],{"class":79,"line":12261},[77,38343,33756],{"class":87},[77,38345,268],{"class":2123},[77,38347,34756],{"class":87},[77,38349,38350],{"class":79,"line":12266},[77,38351,34761],{"class":323},[77,38353,38354],{"class":79,"line":12271},[77,38355,34766],{"class":323},[77,38357,38358],{"class":79,"line":12276},[77,38359,34771],{"class":323},[77,38361,38362,38364,38366],{"class":79,"line":12285},[77,38363,34776],{"class":87},[77,38365,268],{"class":2123},[77,38367,34781],{"class":87},[77,38369,38370],{"class":79,"line":12290},[77,38371,4875],{"emptyLinePlaceholder":2549},[77,38373,38374],{"class":79,"line":12296},[77,38375,4875],{"emptyLinePlaceholder":2549},[77,38377,38378],{"class":79,"line":12317},[77,38379,34794],{"class":323},[77,38381,38382],{"class":79,"line":12323},[77,38383,34799],{"class":323},[77,38385,38386,38388,38390],{"class":79,"line":12337},[77,38387,34804],{"class":87},[77,38389,268],{"class":2123},[77,38391,34809],{"class":94},[77,38393,38394],{"class":79,"line":12343},[77,38395,34814],{"class":323},[77,38397,38398,38400,38402],{"class":79,"line":12370},[77,38399,34819],{"class":87},[77,38401,268],{"class":2123},[77,38403,34824],{"class":87},[77,38405,38406],{"class":79,"line":12379},[77,38407,34829],{"class":323},[77,38409,38410,38412,38414],{"class":79,"line":12385},[77,38411,34834],{"class":87},[77,38413,268],{"class":2123},[77,38415,34824],{"class":87},[77,38417,38418],{"class":79,"line":12393},[77,38419,34843],{"class":323},[77,38421,38422,38424,38426],{"class":79,"line":12398},[77,38423,34848],{"class":87},[77,38425,268],{"class":2123},[77,38427,34824],{"class":87},[77,38429,38430],{"class":79,"line":19074},[77,38431,34857],{"class":323},[77,38433,38434,38436,38438],{"class":79,"line":19080},[77,38435,34862],{"class":87},[77,38437,268],{"class":2123},[77,38439,34824],{"class":87},[77,38441,38442],{"class":79,"line":19103},[77,38443,4875],{"emptyLinePlaceholder":2549},[77,38445,38446],{"class":79,"line":19109},[77,38447,34875],{"class":323},[77,38449,38450,38452,38454],{"class":79,"line":19132},[77,38451,34880],{"class":87},[77,38453,268],{"class":2123},[77,38455,34885],{"class":87},[77,38457,38458],{"class":79,"line":19146},[77,38459,4875],{"emptyLinePlaceholder":2549},[77,38461,38462],{"class":79,"line":19166},[77,38463,4875],{"emptyLinePlaceholder":2549},[77,38465,38466],{"class":79,"line":19172},[77,38467,34898],{"class":323},[77,38469,38470,38472,38474,38476,38478],{"class":79,"line":19183},[77,38471,5676],{"class":2123},[77,38473,34905],{"class":87},[77,38475,28511],{"class":2123},[77,38477,34910],{"class":94},[77,38479,34913],{"class":87},[77,38481,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502],{"class":79,"line":19206},[77,38483,34918],{"class":94},[77,38485,2622],{"class":87},[77,38487,34923],{"class":271},[77,38489,34926],{"class":94},[77,38491,3197],{"class":271},[77,38493,34926],{"class":94},[77,38495,2865],{"class":271},[77,38497,34935],{"class":87},[77,38499,3145],{"class":2123},[77,38501,2120],{"class":94},[77,38503,32965],{"class":87},[77,38505,38506,38508,38510,38512,38514,38516],{"class":79,"line":19228},[77,38507,34918],{"class":94},[77,38509,2622],{"class":87},[77,38511,34950],{"class":271},[77,38513,3068],{"class":2123},[77,38515,3059],{"class":94},[77,38517,2628],{"class":87},[77,38519,38520],{"class":79,"line":19233},[77,38521,4875],{"emptyLinePlaceholder":2549},[77,38523,38524],{"class":79,"line":19239},[77,38525,34965],{"class":323},[77,38527,38528],{"class":79,"line":19253},[77,38529,34970],{"class":323},[77,38531,38532,38534,38536],{"class":79,"line":19266},[77,38533,34975],{"class":87},[77,38535,268],{"class":2123},[77,38537,34809],{"class":94},[77,38539,38540],{"class":79,"line":19271},[77,38541,34984],{"class":323},[77,38543,38544,38546,38548],{"class":79,"line":19285},[77,38545,34989],{"class":87},[77,38547,268],{"class":2123},[77,38549,5560],{"class":94},[77,38551,38552],{"class":79,"line":19290},[77,38553,34998],{"class":323},[77,38555,38556,38558,38560],{"class":79,"line":19296},[77,38557,35003],{"class":87},[77,38559,268],{"class":2123},[77,38561,34809],{"class":94},[77,38563,38564],{"class":79,"line":19301},[77,38565,35012],{"class":323},[77,38567,38568,38570,38572],{"class":79,"line":19315},[77,38569,35017],{"class":87},[77,38571,268],{"class":2123},[77,38573,5560],{"class":94},[77,38575,38576],{"class":79,"line":19320},[77,38577,35026],{"class":323},[77,38579,38580,38582,38584],{"class":79,"line":19325},[77,38581,35031],{"class":87},[77,38583,268],{"class":2123},[77,38585,5560],{"class":94},[77,38587,38588],{"class":79,"line":19339},[77,38589,35040],{"class":323},[77,38591,38592,38594,38596],{"class":79,"line":19351},[77,38593,35045],{"class":87},[77,38595,268],{"class":2123},[77,38597,5560],{"class":94},[77,38599,38600],{"class":79,"line":19356},[77,38601,35054],{"class":323},[77,38603,38604,38606,38608,38610,38612],{"class":79,"line":19369},[77,38605,5878],{"class":2123},[77,38607,34068],{"class":87},[77,38609,28511],{"class":2123},[77,38611,34073],{"class":94},[77,38613,35067],{"class":87},[77,38615,38616],{"class":79,"line":19374},[77,38617,35072],{"class":323},[77,38619,38620,38622,38624],{"class":79,"line":19379},[77,38621,35077],{"class":87},[77,38623,268],{"class":2123},[77,38625,35082],{"class":87},[77,38627,38628],{"class":79,"line":19384},[77,38629,35087],{"class":323},[77,38631,38632,38634,38636],{"class":79,"line":19397},[77,38633,35092],{"class":87},[77,38635,268],{"class":2123},[77,38637,35097],{"class":87},[77,38639,38640],{"class":79,"line":19402},[77,38641,35103],{"class":323},[77,38643,38644],{"class":79,"line":35100},[77,38645,35109],{"class":87},[77,38647,38648],{"class":79,"line":35106},[77,38649,35115],{"class":323},[77,38651,38652],{"class":79,"line":35112},[77,38653,35121],{"class":323},[77,38655,38656,38658,38660],{"class":79,"line":35118},[77,38657,35127],{"class":87},[77,38659,268],{"class":2123},[77,38661,35132],{"class":87},[77,38663,38664],{"class":79,"line":35124},[77,38665,35138],{"class":323},[77,38667,38668,38670,38672,38674,38676,38678,38680],{"class":79,"line":35135},[77,38669,35144],{"class":87},[77,38671,268],{"class":2123},[77,38673,35149],{"class":87},[77,38675,35152],{"class":7691},[77,38677,268],{"class":2123},[77,38679,2120],{"class":94},[77,38681,2628],{"class":87},[77,38683,38684],{"class":79,"line":35141},[77,38685,35164],{"class":323},[77,38687,38688,38690,38692],{"class":79,"line":35161},[77,38689,35170],{"class":87},[77,38691,268],{"class":2123},[77,38693,35175],{"class":87},[77,38695,38696],{"class":79,"line":35167},[77,38697,35181],{"class":323},[77,38699,38700],{"class":79,"line":35178},[77,38701,35187],{"class":87},[77,38703,38704],{"class":79,"line":35184},[77,38705,35193],{"class":323},[77,38707,38708],{"class":79,"line":35190},[77,38709,35199],{"class":87},[77,38711,38712],{"class":79,"line":35196},[77,38713,35205],{"class":323},[77,38715,38716],{"class":79,"line":35202},[77,38717,35211],{"class":87},[77,38719,38720],{"class":79,"line":35208},[77,38721,35217],{"class":323},[77,38723,38724,38726,38728,38730,38732,38734,38736],{"class":79,"line":35214},[77,38725,35223],{"class":87},[77,38727,11950],{"class":2123},[77,38729,35228],{"class":87},[77,38731,3068],{"class":2123},[77,38733,35233],{"class":87},[77,38735,1939],{"class":94},[77,38737,2628],{"class":87},[77,38739,38740],{"class":79,"line":35220},[77,38741,35243],{"class":323},[77,38743,38744,38746,38748,38750,38752],{"class":79,"line":35240},[77,38745,35249],{"class":87},[77,38747,11950],{"class":2123},[77,38749,35254],{"class":87},[77,38751,5424],{"class":2123},[77,38753,35259],{"class":87},[77,38755,38756],{"class":79,"line":35246},[77,38757,35265],{"class":323},[77,38759,38760,38762,38764,38766,38768],{"class":79,"line":35262},[77,38761,35271],{"class":87},[77,38763,11950],{"class":2123},[77,38765,35233],{"class":87},[77,38767,1939],{"class":94},[77,38769,2628],{"class":87},[77,38771,38772],{"class":79,"line":35268},[77,38773,35285],{"class":323},[77,38775,38776,38778,38780,38782,38784],{"class":79,"line":35282},[77,38777,5878],{"class":2123},[77,38779,35293],{"class":87},[77,38781,28511],{"class":2123},[77,38783,34073],{"class":94},[77,38785,35300],{"class":87},[77,38787,38788],{"class":79,"line":35288},[77,38789,35306],{"class":323},[77,38791,38792,38794,38796],{"class":79,"line":35303},[77,38793,35077],{"class":87},[77,38795,268],{"class":2123},[77,38797,35082],{"class":87},[77,38799,38800],{"class":79,"line":35309},[77,38801,35321],{"class":323},[77,38803,38804,38806,38808],{"class":79,"line":35318},[77,38805,35092],{"class":87},[77,38807,268],{"class":2123},[77,38809,35097],{"class":87},[77,38811,38812],{"class":79,"line":35324},[77,38813,35336],{"class":323},[77,38815,38816],{"class":79,"line":35333},[77,38817,35342],{"class":87},[77,38819,38820],{"class":79,"line":35339},[77,38821,38822],{"class":323},"            # 验证时不计算梯度以节省内存\u002F计算\n",[77,38824,38825,38827],{"class":79,"line":35345},[77,38826,35348],{"class":2123},[77,38828,35351],{"class":87},[77,38830,38831],{"class":79,"line":35354},[77,38832,35357],{"class":323},[77,38834,38835,38838,38840],{"class":79,"line":35360},[77,38836,38837],{"class":87},"                output",[77,38839,268],{"class":2123},[77,38841,35132],{"class":87},[77,38843,38844],{"class":79,"line":35371},[77,38845,35374],{"class":323},[77,38847,38848,38851,38853,38855,38857,38859,38861],{"class":79,"line":35377},[77,38849,38850],{"class":87},"                pre_lab",[77,38852,268],{"class":2123},[77,38854,35149],{"class":87},[77,38856,35152],{"class":7691},[77,38858,268],{"class":2123},[77,38860,2120],{"class":94},[77,38862,2628],{"class":87},[77,38864,38865],{"class":79,"line":35396},[77,38866,35399],{"class":323},[77,38868,38869,38872,38874],{"class":79,"line":35402},[77,38870,38871],{"class":87},"                val_batch_loss",[77,38873,268],{"class":2123},[77,38875,35175],{"class":87},[77,38877,38878],{"class":79,"line":35413},[77,38879,35416],{"class":323},[77,38881,38882,38885,38887,38890,38892,38894,38896],{"class":79,"line":35419},[77,38883,38884],{"class":87},"                val_loss",[77,38886,11950],{"class":2123},[77,38888,38889],{"class":87},"val_batch_loss.item()",[77,38891,3068],{"class":2123},[77,38893,35233],{"class":87},[77,38895,1939],{"class":94},[77,38897,2628],{"class":87},[77,38899,38900,38903,38905,38907,38909],{"class":79,"line":35439},[77,38901,38902],{"class":87},"                val_corrects",[77,38904,11950],{"class":2123},[77,38906,35254],{"class":87},[77,38908,5424],{"class":2123},[77,38910,35259],{"class":87},[77,38912,38913],{"class":79,"line":35455},[77,38914,38915],{"class":323},"            # 当前用于验证的样本数量\n",[77,38917,38918,38921,38923,38925,38927],{"class":79,"line":35461},[77,38919,38920],{"class":87},"            val_num",[77,38922,11950],{"class":2123},[77,38924,35233],{"class":87},[77,38926,1939],{"class":94},[77,38928,2628],{"class":87},[77,38930,38931],{"class":79,"line":35475},[77,38932,35478],{"class":323},[77,38934,38935],{"class":79,"line":35481},[77,38936,35484],{"class":323},[77,38938,38939,38941,38943],{"class":79,"line":35487},[77,38940,35490],{"class":87},[77,38942,3197],{"class":2123},[77,38944,35495],{"class":87},[77,38946,38947],{"class":79,"line":35498},[77,38948,35501],{"class":323},[77,38950,38951],{"class":79,"line":35504},[77,38952,35507],{"class":323},[77,38954,38955,38957,38959],{"class":79,"line":35510},[77,38956,35513],{"class":87},[77,38958,3197],{"class":2123},[77,38960,35495],{"class":87},[77,38962,38963],{"class":79,"line":35520},[77,38964,35523],{"class":323},[77,38966,38967,38969,38971],{"class":79,"line":35526},[77,38968,35529],{"class":87},[77,38970,3197],{"class":2123},[77,38972,35534],{"class":87},[77,38974,38975],{"class":79,"line":35537},[77,38976,35540],{"class":323},[77,38978,38979,38981,38983],{"class":79,"line":35543},[77,38980,35546],{"class":87},[77,38982,3197],{"class":2123},[77,38984,35534],{"class":87},[77,38986,38987],{"class":79,"line":35553},[77,38988,4875],{"emptyLinePlaceholder":2549},[77,38990,38991],{"class":79,"line":35558},[77,38992,35561],{"class":323},[77,38994,38995,38997,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019,39021,39023,39025,39027,39029,39031,39033],{"class":79,"line":35564},[77,38996,34918],{"class":94},[77,38998,2622],{"class":87},[77,39000,6067],{"class":271},[77,39002,34926],{"class":94},[77,39004,35575],{"class":271},[77,39006,3509],{"class":94},[77,39008,35580],{"class":2123},[77,39010,3558],{"class":94},[77,39012,35585],{"class":271},[77,39014,3509],{"class":94},[77,39016,35580],{"class":2123},[77,39018,3558],{"class":94},[77,39020,6067],{"class":271},[77,39022,35596],{"class":87},[77,39024,3145],{"class":2123},[77,39026,2120],{"class":94},[77,39028,35603],{"class":87},[77,39030,3145],{"class":2123},[77,39032,2120],{"class":94},[77,39034,35610],{"class":87},[77,39036,39037,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063,39065,39067,39069,39071,39073,39075],{"class":79,"line":35613},[77,39038,34918],{"class":94},[77,39040,2622],{"class":87},[77,39042,6067],{"class":271},[77,39044,34926],{"class":94},[77,39046,35624],{"class":271},[77,39048,3509],{"class":94},[77,39050,35580],{"class":2123},[77,39052,3558],{"class":94},[77,39054,35633],{"class":271},[77,39056,3509],{"class":94},[77,39058,35580],{"class":2123},[77,39060,3558],{"class":94},[77,39062,6067],{"class":271},[77,39064,35644],{"class":87},[77,39066,3145],{"class":2123},[77,39068,2120],{"class":94},[77,39070,35651],{"class":87},[77,39072,3145],{"class":2123},[77,39074,2120],{"class":94},[77,39076,35610],{"class":87},[77,39078,39079],{"class":79,"line":35660},[77,39080,4875],{"emptyLinePlaceholder":2549},[77,39082,39083],{"class":79,"line":35665},[77,39084,35668],{"class":323},[77,39086,39087,39089,39091,39093,39095,39097,39099],{"class":79,"line":35671},[77,39088,4972],{"class":2123},[77,39090,35676],{"class":87},[77,39092,3145],{"class":2123},[77,39094,2120],{"class":94},[77,39096,3552],{"class":87},[77,39098,3572],{"class":2123},[77,39100,35687],{"class":87},[77,39102,39103],{"class":79,"line":35690},[77,39104,35693],{"class":323},[77,39106,39107,39109,39111,39113,39115,39117,39119],{"class":79,"line":35696},[77,39108,35699],{"class":87},[77,39110,2661],{"class":94},[77,39112,268],{"class":2123},[77,39114,35706],{"class":87},[77,39116,3145],{"class":2123},[77,39118,2120],{"class":94},[77,39120,35713],{"class":87},[77,39122,39123],{"class":79,"line":35716},[77,39124,35719],{"class":323},[77,39126,39127],{"class":79,"line":35722},[77,39128,35725],{"class":323},[77,39130,39131,39133,39135],{"class":79,"line":35728},[77,39132,35731],{"class":87},[77,39134,268],{"class":2123},[77,39136,34781],{"class":87},[77,39138,39139],{"class":79,"line":35738},[77,39140,4875],{"emptyLinePlaceholder":2549},[77,39142,39143],{"class":79,"line":35743},[77,39144,35746],{"class":323},[77,39146,39147,39149,39151,39153,39155],{"class":79,"line":35749},[77,39148,35752],{"class":87},[77,39150,268],{"class":2123},[77,39152,35757],{"class":87},[77,39154,3145],{"class":2123},[77,39156,35762],{"class":87},[77,39158,39159,39161,39163,39165,39167,39169,39171,39173,39175,39177,39179,39181,39183,39185,39187,39189,39191,39193],{"class":79,"line":35765},[77,39160,34918],{"class":94},[77,39162,2622],{"class":87},[77,39164,35772],{"class":271},[77,39166,3509],{"class":94},[77,39168,35777],{"class":2123},[77,39170,3558],{"class":94},[77,39172,3157],{"class":271},[77,39174,3509],{"class":94},[77,39176,35777],{"class":2123},[77,39178,3558],{"class":94},[77,39180,35790],{"class":271},[77,39182,35793],{"class":87},[77,39184,35796],{"class":2123},[77,39186,3520],{"class":94},[77,39188,35801],{"class":87},[77,39190,2942],{"class":2123},[77,39192,3520],{"class":94},[77,39194,32965],{"class":87},[77,39196,39197],{"class":79,"line":35810},[77,39198,39199],{"class":323},"    # 选择最优参数并保存\n",[77,39201,39202],{"class":79,"line":35816},[77,39203,39204],{"class":323},"    # 保存最佳模型权重字典\n",[77,39206,39207,39210,39212],{"class":79,"line":35822},[77,39208,39209],{"class":87},"    torch.save(best_model_wts,",[77,39211,35834],{"class":271},[77,39213,2628],{"class":87},[77,39215,39216],{"class":79,"line":35828},[77,39217,35854],{"class":323},[77,39219,39220,39222,39224,39226,39228,39230],{"class":79,"line":35839},[77,39221,35860],{"class":87},[77,39223,268],{"class":2123},[77,39225,35865],{"class":87},[77,39227,35868],{"class":7691},[77,39229,268],{"class":2123},[77,39231,4023],{"class":87},[77,39233,39234,39236,39238,39240],{"class":79,"line":35845},[77,39235,35878],{"class":271},[77,39237,3472],{"class":87},[77,39239,35883],{"class":94},[77,39241,35886],{"class":87},[77,39243,39244,39246],{"class":79,"line":35851},[77,39245,35892],{"class":271},[77,39247,35895],{"class":87},[77,39249,39250,39252],{"class":79,"line":35857},[77,39251,35901],{"class":271},[77,39253,35904],{"class":87},[77,39255,39256,39258],{"class":79,"line":35875},[77,39257,35910],{"class":271},[77,39259,35913],{"class":87},[77,39261,39262,39264],{"class":79,"line":35889},[77,39263,35919],{"class":271},[77,39265,35922],{"class":87},[77,39267,39268],{"class":79,"line":35898},[77,39269,35928],{"class":87},[77,39271,39272],{"class":79,"line":35907},[77,39273,35934],{"class":323},[77,39275,39276,39278],{"class":79,"line":35916},[77,39277,6565],{"class":2123},[77,39279,35942],{"class":87},[77,39281,39282],{"class":79,"line":35925},[77,39283,4875],{"emptyLinePlaceholder":2549},[77,39285,39286],{"class":79,"line":35931},[77,39287,35953],{"class":323},[77,39289,39290,39292,39294],{"class":79,"line":35937},[77,39291,34414],{"class":2123},[77,39293,35961],{"class":83},[77,39295,35964],{"class":87},[77,39297,39298],{"class":79,"line":35945},[77,39299,35970],{"class":323},[77,39301,39302,39304,39306,39308,39310,39312,39314,39316],{"class":79,"line":35950},[77,39303,35976],{"class":87},[77,39305,34160],{"class":7691},[77,39307,268],{"class":2123},[77,39309,2622],{"class":87},[77,39311,3111],{"class":94},[77,39313,2992],{"class":87},[77,39315,2907],{"class":94},[77,39317,32965],{"class":87},[77,39319,39320],{"class":79,"line":35956},[77,39321,35996],{"class":323},[77,39323,39324],{"class":79,"line":35967},[77,39325,36002],{"class":323},[77,39327,39328],{"class":79,"line":35973},[77,39329,36008],{"class":323},[77,39331,39332,39334,39336,39338,39340,39342,39344],{"class":79,"line":35993},[77,39333,34194],{"class":87},[77,39335,2120],{"class":94},[77,39337,2992],{"class":87},[77,39339,2696],{"class":94},[77,39341,2992],{"class":87},[77,39343,2120],{"class":94},[77,39345,2628],{"class":87},[77,39347,39348],{"class":79,"line":35999},[77,39349,36031],{"class":323},[77,39351,39352],{"class":79,"line":36005},[77,39353,36037],{"class":323},[77,39355,39356],{"class":79,"line":36011},[77,39357,36043],{"class":323},[77,39359,39360],{"class":79,"line":36028},[77,39361,36049],{"class":323},[77,39363,39364],{"class":79,"line":36034},[77,39365,36055],{"class":323},[77,39367,39368,39370,39372,39374,39376,39378,39380,39382,39384],{"class":79,"line":36040},[77,39369,36061],{"class":87},[77,39371,36064],{"class":271},[77,39373,36067],{"class":87},[77,39375,36070],{"class":271},[77,39377,2992],{"class":87},[77,39379,2254],{"class":7691},[77,39381,268],{"class":2123},[77,39383,36079],{"class":271},[77,39385,2628],{"class":87},[77,39387,39388,39390,39392,39394,39396,39398,39400,39402,39404],{"class":79,"line":36046},[77,39389,36061],{"class":87},[77,39391,36064],{"class":271},[77,39393,36091],{"class":87},[77,39395,36094],{"class":271},[77,39397,2992],{"class":87},[77,39399,2254],{"class":7691},[77,39401,268],{"class":2123},[77,39403,36103],{"class":271},[77,39405,2628],{"class":87},[77,39407,39408],{"class":79,"line":36052},[77,39409,36111],{"class":323},[77,39411,39412],{"class":79,"line":36058},[77,39413,36117],{"class":87},[77,39415,39416],{"class":79,"line":36084},[77,39417,36123],{"class":323},[77,39419,39420,39422,39424],{"class":79,"line":36108},[77,39421,36129],{"class":87},[77,39423,36132],{"class":271},[77,39425,2628],{"class":87},[77,39427,39428,39430,39432],{"class":79,"line":36114},[77,39429,36140],{"class":87},[77,39431,36143],{"class":271},[77,39433,2628],{"class":87},[77,39435,39436],{"class":79,"line":36120},[77,39437,36151],{"class":323},[77,39439,39440,39442,39444,39446,39448,39450,39452],{"class":79,"line":36126},[77,39441,34194],{"class":87},[77,39443,2120],{"class":94},[77,39445,2992],{"class":87},[77,39447,2696],{"class":94},[77,39449,2992],{"class":87},[77,39451,2696],{"class":94},[77,39453,2628],{"class":87},[77,39455,39456,39458,39460,39462,39464,39466,39468,39470,39472],{"class":79,"line":36137},[77,39457,36061],{"class":87},[77,39459,36064],{"class":271},[77,39461,36178],{"class":87},[77,39463,36070],{"class":271},[77,39465,2992],{"class":87},[77,39467,2254],{"class":7691},[77,39469,268],{"class":2123},[77,39471,36189],{"class":271},[77,39473,2628],{"class":87},[77,39475,39476,39478,39480,39482,39484,39486,39488,39490,39492],{"class":79,"line":36148},[77,39477,36061],{"class":87},[77,39479,36064],{"class":271},[77,39481,36201],{"class":87},[77,39483,36094],{"class":271},[77,39485,2992],{"class":87},[77,39487,2254],{"class":7691},[77,39489,268],{"class":2123},[77,39491,36212],{"class":271},[77,39493,2628],{"class":87},[77,39495,39496],{"class":79,"line":36154},[77,39497,36220],{"class":323},[77,39499,39500],{"class":79,"line":36171},[77,39501,36117],{"class":87},[77,39503,39504,39506,39508],{"class":79,"line":36194},[77,39505,36129],{"class":87},[77,39507,36064],{"class":271},[77,39509,2628],{"class":87},[77,39511,39512,39514,39516],{"class":79,"line":36217},[77,39513,36140],{"class":87},[77,39515,36242],{"class":271},[77,39517,2628],{"class":87},[77,39519,39520],{"class":79,"line":36223},[77,39521,36250],{"class":87},[77,39523,39524],{"class":79,"line":36228},[77,39525,4875],{"emptyLinePlaceholder":2549},[77,39527,39528],{"class":79,"line":36237},[77,39529,36261],{"class":323},[77,39531,39532,39534,39536,39538,39540],{"class":79,"line":36247},[77,39533,4008],{"class":2123},[77,39535,33687],{"class":94},[77,39537,5424],{"class":2123},[77,39539,33692],{"class":271},[77,39541,6214],{"class":87},[77,39543,39544],{"class":79,"line":36253},[77,39545,36280],{"class":323},[77,39547,39548,39551,39553],{"class":79,"line":36258},[77,39549,39550],{"class":87},"    AlexNet",[77,39552,268],{"class":2123},[77,39554,39555],{"class":87},"AlexNet()\n",[77,39557,39558,39560,39562],{"class":79,"line":36264},[77,39559,36297],{"class":87},[77,39561,268],{"class":2123},[77,39563,36302],{"class":87},[77,39565,39566,39568,39570,39573,39575,39577,39579],{"class":79,"line":36277},[77,39567,35860],{"class":87},[77,39569,268],{"class":2123},[77,39571,39572],{"class":87},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[77,39574,36315],{"class":7691},[77,39576,268],{"class":2123},[77,39578,3313],{"class":94},[77,39580,2628],{"class":87},[77,39582,39583],{"class":79,"line":36283},[77,39584,36327],{"class":87},[139,39586,39587],{"start":107},[54,39588,36340],{},[67,39590,39592],{"className":32846,"code":39591,"language":32848,"meta":72,"style":72},"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",[74,39593,39594,39600,39610,39620,39630,39634,39644,39654,39665,39669,39673,39677,39685,39701,39711,39727,39737,39751,39755,39765,39775,39785,39791,39795,39799,39807,39811,39827,39835,39839,39843,39851,39859,39863,39867,39871,39875,39881,39885,39895,39903,39911,39915,39919,39923,39931,39935,39951,39955,39959,39963,39975,39979,39991,39995,39999,40011,40015,40025,40029,40033,40045,40049,40057,40061,40065,40073,40077,40085,40089,40093,40097,40101,40105,40121,40129,40133,40137,40185,40191,40195,40205,40213,40221,40225,40229,40233,40237,40245,40249,40265,40269,40277,40285],{"__ignoreMap":72},[77,39595,39596,39598],{"class":79,"line":80},[77,39597,32860],{"class":2123},[77,39599,32863],{"class":87},[77,39601,39602,39604,39606,39608],{"class":79,"line":91},[77,39603,32860],{"class":2123},[77,39605,33882],{"class":87},[77,39607,33850],{"class":2123},[77,39609,33887],{"class":87},[77,39611,39612,39614,39616,39618],{"class":79,"line":107},[77,39613,33205],{"class":2123},[77,39615,36368],{"class":87},[77,39617,32860],{"class":2123},[77,39619,36373],{"class":87},[77,39621,39622,39624,39626,39628],{"class":79,"line":191},[77,39623,33205],{"class":2123},[77,39625,33865],{"class":87},[77,39627,32860],{"class":2123},[77,39629,33870],{"class":87},[77,39631,39632],{"class":79,"line":1543},[77,39633,36388],{"class":323},[77,39635,39636,39638,39640,39642],{"class":79,"line":1549},[77,39637,33205],{"class":2123},[77,39639,33835],{"class":87},[77,39641,32860],{"class":2123},[77,39643,33840],{"class":87},[77,39645,39646,39648,39650,39652],{"class":79,"line":1566},[77,39647,33205],{"class":2123},[77,39649,34381],{"class":87},[77,39651,32860],{"class":2123},[77,39653,38023],{"class":87},[77,39655,39656,39658,39661,39663],{"class":79,"line":1572},[77,39657,33205],{"class":2123},[77,39659,39660],{"class":87}," 练习.AlexNet.model ",[77,39662,32860],{"class":2123},[77,39664,38023],{"class":87},[77,39666,39667],{"class":79,"line":1589},[77,39668,4875],{"emptyLinePlaceholder":2549},[77,39670,39671],{"class":79,"line":1595},[77,39672,4875],{"emptyLinePlaceholder":2549},[77,39674,39675],{"class":79,"line":4088},[77,39676,36417],{"class":323},[77,39678,39679,39681,39683],{"class":79,"line":4093},[77,39680,34414],{"class":2123},[77,39682,36424],{"class":83},[77,39684,34420],{"class":87},[77,39686,39687,39689,39691,39693,39695,39697,39699],{"class":79,"line":4099},[77,39688,36431],{"class":87},[77,39690,268],{"class":2123},[77,39692,33922],{"class":87},[77,39694,33925],{"class":7691},[77,39696,268],{"class":2123},[77,39698,33930],{"class":271},[77,39700,33933],{"class":87},[77,39702,39703,39705,39707,39709],{"class":79,"line":4104},[77,39704,36448],{"class":7691},[77,39706,268],{"class":2123},[77,39708,36453],{"class":94},[77,39710,33933],{"class":87},[77,39712,39713,39715,39717,39719,39721,39723,39725],{"class":79,"line":4118},[77,39714,36460],{"class":7691},[77,39716,268],{"class":2123},[77,39718,33960],{"class":87},[77,39720,33963],{"class":7691},[77,39722,268],{"class":2123},[77,39724,37915],{"class":94},[77,39726,33971],{"class":87},[77,39728,39729,39731,39733,39735],{"class":79,"line":4123},[77,39730,36477],{"class":7691},[77,39732,268],{"class":2123},[77,39734,33943],{"class":94},[77,39736,2628],{"class":87},[77,39738,39739,39741,39743,39745,39747,39749],{"class":79,"line":4129},[77,39740,36488],{"class":87},[77,39742,268],{"class":2123},[77,39744,34001],{"class":87},[77,39746,34004],{"class":7691},[77,39748,268],{"class":2123},[77,39750,36499],{"class":87},[77,39752,39753],{"class":79,"line":4150},[77,39754,36504],{"class":323},[77,39756,39757,39759,39761,39763],{"class":79,"line":4155},[77,39758,36509],{"class":7691},[77,39760,268],{"class":2123},[77,39762,2120],{"class":94},[77,39764,33933],{"class":87},[77,39766,39767,39769,39771,39773],{"class":79,"line":4169},[77,39768,36520],{"class":7691},[77,39770,268],{"class":2123},[77,39772,33943],{"class":94},[77,39774,33933],{"class":87},[77,39776,39777,39779,39781,39783],{"class":79,"line":4174},[77,39778,36531],{"class":7691},[77,39780,268],{"class":2123},[77,39782,1939],{"class":94},[77,39784,2628],{"class":87},[77,39786,39787,39789],{"class":79,"line":4203},[77,39788,6565],{"class":2123},[77,39790,36544],{"class":87},[77,39792,39793],{"class":79,"line":4208},[77,39794,4875],{"emptyLinePlaceholder":2549},[77,39796,39797],{"class":79,"line":4225},[77,39798,36553],{"class":323},[77,39800,39801,39803,39805],{"class":79,"line":4230},[77,39802,34414],{"class":2123},[77,39804,36560],{"class":83},[77,39806,36563],{"class":87},[77,39808,39809],{"class":79,"line":4235},[77,39810,36568],{"class":323},[77,39812,39813,39815,39817,39819,39821,39823,39825],{"class":79,"line":4240},[77,39814,33704],{"class":87},[77,39816,268],{"class":2123},[77,39818,33711],{"class":271},[77,39820,4180],{"class":2123},[77,39822,33716],{"class":87},[77,39824,4177],{"class":2123},[77,39826,36585],{"class":271},[77,39828,39829,39831,39833],{"class":79,"line":4254},[77,39830,33756],{"class":87},[77,39832,268],{"class":2123},[77,39834,34756],{"class":87},[77,39836,39837],{"class":79,"line":4259},[77,39838,4875],{"emptyLinePlaceholder":2549},[77,39840,39841],{"class":79,"line":5052},[77,39842,36602],{"class":323},[77,39844,39845,39847,39849],{"class":79,"line":5066},[77,39846,36607],{"class":87},[77,39848,268],{"class":2123},[77,39850,34809],{"class":94},[77,39852,39853,39855,39857],{"class":79,"line":5074},[77,39854,36616],{"class":87},[77,39856,268],{"class":2123},[77,39858,5560],{"class":94},[77,39860,39861],{"class":79,"line":5079},[77,39862,4875],{"emptyLinePlaceholder":2549},[77,39864,39865],{"class":79,"line":5085},[77,39866,36629],{"class":323},[77,39868,39869],{"class":79,"line":5091},[77,39870,36634],{"class":323},[77,39872,39873],{"class":79,"line":5096},[77,39874,36639],{"class":323},[77,39876,39877,39879],{"class":79,"line":10422},[77,39878,36644],{"class":2123},[77,39880,35351],{"class":87},[77,39882,39883],{"class":79,"line":10446},[77,39884,36651],{"class":323},[77,39886,39887,39889,39891,39893],{"class":79,"line":10451},[77,39888,5878],{"class":2123},[77,39890,36658],{"class":87},[77,39892,28511],{"class":2123},[77,39894,36663],{"class":87},[77,39896,39897,39899,39901],{"class":79,"line":10457},[77,39898,36668],{"class":87},[77,39900,268],{"class":2123},[77,39902,36673],{"class":87},[77,39904,39905,39907,39909],{"class":79,"line":10484},[77,39906,36678],{"class":87},[77,39908,268],{"class":2123},[77,39910,36683],{"class":87},[77,39912,39913],{"class":79,"line":10489},[77,39914,36688],{"class":323},[77,39916,39917],{"class":79,"line":10495},[77,39918,35342],{"class":87},[77,39920,39921],{"class":79,"line":10507},[77,39922,36697],{"class":323},[77,39924,39925,39927,39929],{"class":79,"line":10519},[77,39926,35127],{"class":87},[77,39928,268],{"class":2123},[77,39930,36706],{"class":87},[77,39932,39933],{"class":79,"line":10531},[77,39934,36711],{"class":323},[77,39936,39937,39939,39941,39943,39945,39947,39949],{"class":79,"line":12189},[77,39938,35144],{"class":87},[77,39940,268],{"class":2123},[77,39942,35149],{"class":87},[77,39944,35152],{"class":7691},[77,39946,268],{"class":2123},[77,39948,2120],{"class":94},[77,39950,2628],{"class":87},[77,39952,39953],{"class":79,"line":12214},[77,39954,36732],{"class":323},[77,39956,39957],{"class":79,"line":12237},[77,39958,36737],{"class":323},[77,39960,39961],{"class":79,"line":12261},[77,39962,36742],{"class":323},[77,39964,39965,39967,39969,39971,39973],{"class":79,"line":12266},[77,39966,36747],{"class":87},[77,39968,11950],{"class":2123},[77,39970,35254],{"class":87},[77,39972,5424],{"class":2123},[77,39974,36756],{"class":87},[77,39976,39977],{"class":79,"line":12271},[77,39978,36761],{"class":323},[77,39980,39981,39983,39985,39987,39989],{"class":79,"line":12276},[77,39982,36766],{"class":87},[77,39984,11950],{"class":2123},[77,39986,36771],{"class":87},[77,39988,1939],{"class":94},[77,39990,2628],{"class":87},[77,39992,39993],{"class":79,"line":12285},[77,39994,4875],{"emptyLinePlaceholder":2549},[77,39996,39997],{"class":79,"line":12290},[77,39998,36784],{"class":323},[77,40000,40001,40003,40005,40007,40009],{"class":79,"line":12296},[77,40002,36789],{"class":87},[77,40004,268],{"class":2123},[77,40006,36794],{"class":87},[77,40008,3197],{"class":2123},[77,40010,36799],{"class":87},[77,40012,40013],{"class":79,"line":12317},[77,40014,36804],{"class":323},[77,40016,40017,40019,40021,40023],{"class":79,"line":12323},[77,40018,34918],{"class":94},[77,40020,2622],{"class":87},[77,40022,36813],{"class":271},[77,40024,36816],{"class":87},[77,40026,40027],{"class":79,"line":12337},[77,40028,4875],{"emptyLinePlaceholder":2549},[77,40030,40031],{"class":79,"line":12343},[77,40032,36825],{"class":323},[77,40034,40035,40037,40039,40041,40043],{"class":79,"line":12370},[77,40036,4008],{"class":2123},[77,40038,33687],{"class":94},[77,40040,5424],{"class":2123},[77,40042,33692],{"class":271},[77,40044,6214],{"class":87},[77,40046,40047],{"class":79,"line":12379},[77,40048,36842],{"class":323},[77,40050,40051,40053,40055],{"class":79,"line":12385},[77,40052,33756],{"class":87},[77,40054,268],{"class":2123},[77,40056,39555],{"class":87},[77,40058,40059],{"class":79,"line":12393},[77,40060,36855],{"class":323},[77,40062,40063],{"class":79,"line":12398},[77,40064,36860],{"class":323},[77,40066,40067,40069,40071],{"class":79,"line":19074},[77,40068,36865],{"class":87},[77,40070,36868],{"class":271},[77,40072,32965],{"class":87},[77,40074,40075],{"class":79,"line":19080},[77,40076,36875],{"class":323},[77,40078,40079,40081,40083],{"class":79,"line":19103},[77,40080,36488],{"class":87},[77,40082,268],{"class":2123},[77,40084,36884],{"class":87},[77,40086,40087],{"class":79,"line":19109},[77,40088,36889],{"class":323},[77,40090,40091],{"class":79,"line":19132},[77,40092,36894],{"class":87},[77,40094,40095],{"class":79,"line":19146},[77,40096,4875],{"emptyLinePlaceholder":2549},[77,40098,40099],{"class":79,"line":19166},[77,40100,36903],{"class":323},[77,40102,40103],{"class":79,"line":19172},[77,40104,36908],{"class":323},[77,40106,40107,40109,40111,40113,40115,40117,40119],{"class":79,"line":19183},[77,40108,33704],{"class":87},[77,40110,268],{"class":2123},[77,40112,33711],{"class":271},[77,40114,4180],{"class":2123},[77,40116,33716],{"class":87},[77,40118,4177],{"class":2123},[77,40120,36585],{"class":271},[77,40122,40123,40125,40127],{"class":79,"line":19206},[77,40124,33756],{"class":87},[77,40126,268],{"class":2123},[77,40128,34756],{"class":87},[77,40130,40131],{"class":79,"line":19228},[77,40132,36937],{"class":323},[77,40134,40135],{"class":79,"line":19233},[77,40136,36942],{"class":323},[77,40138,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183],{"class":79,"line":19239},[77,40140,36947],{"class":87},[77,40142,268],{"class":2123},[77,40144,3503],{"class":87},[77,40146,36954],{"class":271},[77,40148,2992],{"class":87},[77,40150,36959],{"class":271},[77,40152,2992],{"class":87},[77,40154,36964],{"class":271},[77,40156,2992],{"class":87},[77,40158,36969],{"class":271},[77,40160,2992],{"class":87},[77,40162,36974],{"class":271},[77,40164,2992],{"class":87},[77,40166,36979],{"class":271},[77,40168,2992],{"class":87},[77,40170,36984],{"class":271},[77,40172,2992],{"class":87},[77,40174,36989],{"class":271},[77,40176,2992],{"class":87},[77,40178,36994],{"class":271},[77,40180,2992],{"class":87},[77,40182,36999],{"class":271},[77,40184,35713],{"class":87},[77,40186,40187,40189],{"class":79,"line":19253},[77,40188,36644],{"class":2123},[77,40190,35351],{"class":87},[77,40192,40193],{"class":79,"line":19266},[77,40194,37012],{"class":323},[77,40196,40197,40199,40201,40203],{"class":79,"line":19271},[77,40198,5878],{"class":2123},[77,40200,37019],{"class":87},[77,40202,28511],{"class":2123},[77,40204,36663],{"class":87},[77,40206,40207,40209,40211],{"class":79,"line":19285},[77,40208,35077],{"class":87},[77,40210,268],{"class":2123},[77,40212,35082],{"class":87},[77,40214,40215,40217,40219],{"class":79,"line":19290},[77,40216,35092],{"class":87},[77,40218,268],{"class":2123},[77,40220,35097],{"class":87},[77,40222,40223],{"class":79,"line":19296},[77,40224,4875],{"emptyLinePlaceholder":2549},[77,40226,40227],{"class":79,"line":19301},[77,40228,37048],{"class":323},[77,40230,40231],{"class":79,"line":19315},[77,40232,35342],{"class":87},[77,40234,40235],{"class":79,"line":19320},[77,40236,37057],{"class":323},[77,40238,40239,40241,40243],{"class":79,"line":19325},[77,40240,35127],{"class":87},[77,40242,268],{"class":2123},[77,40244,35132],{"class":87},[77,40246,40247],{"class":79,"line":19339},[77,40248,37070],{"class":323},[77,40250,40251,40253,40255,40257,40259,40261,40263],{"class":79,"line":19351},[77,40252,35144],{"class":87},[77,40254,268],{"class":2123},[77,40256,35149],{"class":87},[77,40258,35152],{"class":7691},[77,40260,268],{"class":2123},[77,40262,2120],{"class":94},[77,40264,2628],{"class":87},[77,40266,40267],{"class":79,"line":19356},[77,40268,37091],{"class":323},[77,40270,40271,40273,40275],{"class":79,"line":19369},[77,40272,37096],{"class":87},[77,40274,268],{"class":2123},[77,40276,37101],{"class":87},[77,40278,40279,40281,40283],{"class":79,"line":19374},[77,40280,37106],{"class":87},[77,40282,268],{"class":2123},[77,40284,37111],{"class":87},[77,40286,40287,40289,40291,40293,40295,40297,40299,40301],{"class":79,"line":19379},[77,40288,37116],{"class":94},[77,40290,2622],{"class":87},[77,40292,37121],{"class":271},[77,40294,37124],{"class":87},[77,40296,37127],{"class":271},[77,40298,2992],{"class":87},[77,40300,37132],{"class":271},[77,40302,37135],{"class":87},[19,40304,40306],{"id":40305},"_22vgg","2.2.VGG",[24468,40308,40310],{"id":40309},"_221原理","2.2.1.原理",[24,40312,40313],{},[40,40314],{"alt":72,"src":40315},"\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",[24,40317,40318],{},[40,40319],{"alt":72,"src":40320},"\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",[24,40322,40323],{},[40,40324],{"alt":72,"src":40325},"\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",[24,40327,40328],{},"参数详细描述：",[24,40330,40331],{},[40,40332],{"alt":72,"src":40333},"\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",[24,40335,40336],{},[40,40337],{"alt":72,"src":40338},"\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",[24,40340,40341],{},[40,40342],{"alt":72,"src":40343},"\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",[24,40345,40346],{},[40,40347],{"alt":72,"src":40348},"\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",[24,40350,40351],{},[40,40352],{"alt":72,"src":40353},"\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",[24468,40355,40357],{"id":40356},"_222代码实现","2.2.2.代码实现",[139,40359,40360],{},[54,40361,40362],{},"网络搭建",[67,40364,40366],{"className":32846,"code":40365,"language":32848,"meta":72,"style":72},"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",[74,40367,40368,40374,40386,40396,40406,40410,40427,40435,40454,40459,40464,40476,40514,40519,40555,40559,40588,40593,40598,40609,40645,40649,40685,40689,40717,40721,40726,40737,40773,40777,40813,40817,40853,40857,40885,40889,40894,40905,40942,40946,40982,40986,41022,41026,41054,41058,41063,41074,41110,41114,41150,41154,41190,41194,41222,41226,41231,41242,41247,41252,41257,41278,41282,41294,41298,41310,41314,41318,41323,41328,41343,41348,41358,41363,41378,41383,41402,41407,41416,41421,41431,41436,41441,41455,41460,41474,41482,41486,41490,41498,41509,41520,41531,41542,41553,41564,41570,41574,41579,41592,41612,41618,41627],{"__ignoreMap":72},[77,40369,40370,40372],{"class":79,"line":80},[77,40371,32860],{"class":2123},[77,40373,32863],{"class":87},[77,40375,40376,40378,40381,40383],{"class":79,"line":91},[77,40377,33205],{"class":2123},[77,40379,40380],{"class":87}," sympy.core.sympify ",[77,40382,32860],{"class":2123},[77,40384,40385],{"class":87}," kernS\n",[77,40387,40388,40390,40392,40394],{"class":79,"line":107},[77,40389,33205],{"class":2123},[77,40391,33208],{"class":87},[77,40393,32860],{"class":2123},[77,40395,33213],{"class":87},[77,40397,40398,40400,40402,40404],{"class":79,"line":191},[77,40399,33205],{"class":2123},[77,40401,33225],{"class":87},[77,40403,32860],{"class":2123},[77,40405,33230],{"class":87},[77,40407,40408],{"class":79,"line":1543},[77,40409,4875],{"emptyLinePlaceholder":2549},[77,40411,40412,40414,40417,40419,40421,40423,40425],{"class":79,"line":1549},[77,40413,17166],{"class":2123},[77,40415,40416],{"class":83}," VGG16",[77,40418,2622],{"class":87},[77,40420,33246],{"class":83},[77,40422,3171],{"class":87},[77,40424,33251],{"class":83},[77,40426,33254],{"class":87},[77,40428,40429,40431,40433],{"class":79,"line":1566},[77,40430,33269],{"class":2123},[77,40432,33272],{"class":94},[77,40434,33275],{"class":87},[77,40436,40437,40439,40441,40444,40446,40448,40450,40452],{"class":79,"line":1572},[77,40438,33285],{"class":94},[77,40440,2622],{"class":87},[77,40442,40443],{"class":94},"VGG16",[77,40445,680],{"class":87},[77,40447,33291],{"class":94},[77,40449,33294],{"class":87},[77,40451,33297],{"class":94},[77,40453,4451],{"class":87},[77,40455,40456],{"class":79,"line":1589},[77,40457,40458],{"class":323},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[77,40460,40461],{"class":79,"line":1595},[77,40462,40463],{"class":323},"        # 这里用的是灰度图\n",[77,40465,40466,40468,40471,40473],{"class":79,"line":4088},[77,40467,33313],{"class":94},[77,40469,40470],{"class":87},".block1",[77,40472,268],{"class":2123},[77,40474,40475],{"class":87},"nn.Sequential(\n",[77,40477,40478,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509,40511],{"class":79,"line":4093},[77,40479,40480],{"class":87},"            nn.Conv2d(",[77,40482,33324],{"class":7691},[77,40484,268],{"class":2123},[77,40486,2120],{"class":94},[77,40488,2992],{"class":87},[77,40490,33333],{"class":7691},[77,40492,268],{"class":2123},[77,40494,2819],{"class":94},[77,40496,2992],{"class":87},[77,40498,33342],{"class":7691},[77,40500,268],{"class":2123},[77,40502,2690],{"class":94},[77,40504,2992],{"class":87},[77,40506,1196],{"class":7691},[77,40508,268],{"class":2123},[77,40510,2120],{"class":94},[77,40512,40513],{"class":87},"),\n",[77,40515,40516],{"class":79,"line":4099},[77,40517,40518],{"class":87},"            nn.ReLU(),\n",[77,40520,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553],{"class":79,"line":4104},[77,40522,40480],{"class":87},[77,40524,33324],{"class":7691},[77,40526,268],{"class":2123},[77,40528,2819],{"class":94},[77,40530,2992],{"class":87},[77,40532,33333],{"class":7691},[77,40534,268],{"class":2123},[77,40536,2819],{"class":94},[77,40538,2992],{"class":87},[77,40540,33342],{"class":7691},[77,40542,268],{"class":2123},[77,40544,2690],{"class":94},[77,40546,2992],{"class":87},[77,40548,1196],{"class":7691},[77,40550,268],{"class":2123},[77,40552,2120],{"class":94},[77,40554,40513],{"class":87},[77,40556,40557],{"class":79,"line":4118},[77,40558,40518],{"class":87},[77,40560,40561,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582,40584,40586],{"class":79,"line":4123},[77,40562,40563],{"class":87},"            nn.MaxPool2d(",[77,40565,33342],{"class":7691},[77,40567,268],{"class":2123},[77,40569,2696],{"class":94},[77,40571,2992],{"class":87},[77,40573,33396],{"class":7691},[77,40575,268],{"class":2123},[77,40577,2696],{"class":94},[77,40579,2992],{"class":87},[77,40581,1196],{"class":7691},[77,40583,268],{"class":2123},[77,40585,1939],{"class":94},[77,40587,2628],{"class":87},[77,40589,40590],{"class":79,"line":4129},[77,40591,40592],{"class":87},"        )\n",[77,40594,40595],{"class":79,"line":4150},[77,40596,40597],{"class":323},"        # 第二层\n",[77,40599,40600,40602,40605,40607],{"class":79,"line":4155},[77,40601,33313],{"class":94},[77,40603,40604],{"class":87},".block2",[77,40606,268],{"class":2123},[77,40608,40475],{"class":87},[77,40610,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641,40643],{"class":79,"line":4169},[77,40612,40480],{"class":87},[77,40614,33324],{"class":7691},[77,40616,268],{"class":2123},[77,40618,2819],{"class":94},[77,40620,2992],{"class":87},[77,40622,33333],{"class":7691},[77,40624,268],{"class":2123},[77,40626,34537],{"class":94},[77,40628,2992],{"class":87},[77,40630,33342],{"class":7691},[77,40632,268],{"class":2123},[77,40634,2690],{"class":94},[77,40636,2992],{"class":87},[77,40638,1196],{"class":7691},[77,40640,268],{"class":2123},[77,40642,2120],{"class":94},[77,40644,40513],{"class":87},[77,40646,40647],{"class":79,"line":4174},[77,40648,40518],{"class":87},[77,40650,40651,40653,40655,40657,40659,40661,40663,40665,40667,40669,40671,40673,40675,40677,40679,40681,40683],{"class":79,"line":4203},[77,40652,40480],{"class":87},[77,40654,33324],{"class":7691},[77,40656,268],{"class":2123},[77,40658,34537],{"class":94},[77,40660,2992],{"class":87},[77,40662,33333],{"class":7691},[77,40664,268],{"class":2123},[77,40666,34537],{"class":94},[77,40668,2992],{"class":87},[77,40670,33342],{"class":7691},[77,40672,268],{"class":2123},[77,40674,2690],{"class":94},[77,40676,2992],{"class":87},[77,40678,1196],{"class":7691},[77,40680,268],{"class":2123},[77,40682,2120],{"class":94},[77,40684,40513],{"class":87},[77,40686,40687],{"class":79,"line":4208},[77,40688,40518],{"class":87},[77,40690,40691,40693,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713,40715],{"class":79,"line":4225},[77,40692,40563],{"class":87},[77,40694,33342],{"class":7691},[77,40696,268],{"class":2123},[77,40698,2696],{"class":94},[77,40700,2992],{"class":87},[77,40702,33396],{"class":7691},[77,40704,268],{"class":2123},[77,40706,2696],{"class":94},[77,40708,2992],{"class":87},[77,40710,1196],{"class":7691},[77,40712,268],{"class":2123},[77,40714,1939],{"class":94},[77,40716,2628],{"class":87},[77,40718,40719],{"class":79,"line":4230},[77,40720,40592],{"class":87},[77,40722,40723],{"class":79,"line":4235},[77,40724,40725],{"class":323},"        # 第三层\n",[77,40727,40728,40730,40733,40735],{"class":79,"line":4240},[77,40729,33313],{"class":94},[77,40731,40732],{"class":87},".block3",[77,40734,268],{"class":2123},[77,40736,40475],{"class":87},[77,40738,40739,40741,40743,40745,40747,40749,40751,40753,40755,40757,40759,40761,40763,40765,40767,40769,40771],{"class":79,"line":4254},[77,40740,40480],{"class":87},[77,40742,33324],{"class":7691},[77,40744,268],{"class":2123},[77,40746,34537],{"class":94},[77,40748,2992],{"class":87},[77,40750,33333],{"class":7691},[77,40752,268],{"class":2123},[77,40754,37336],{"class":94},[77,40756,2992],{"class":87},[77,40758,33342],{"class":7691},[77,40760,268],{"class":2123},[77,40762,2690],{"class":94},[77,40764,2992],{"class":87},[77,40766,1196],{"class":7691},[77,40768,268],{"class":2123},[77,40770,2120],{"class":94},[77,40772,40513],{"class":87},[77,40774,40775],{"class":79,"line":4259},[77,40776,40518],{"class":87},[77,40778,40779,40781,40783,40785,40787,40789,40791,40793,40795,40797,40799,40801,40803,40805,40807,40809,40811],{"class":79,"line":5052},[77,40780,40480],{"class":87},[77,40782,33324],{"class":7691},[77,40784,268],{"class":2123},[77,40786,37336],{"class":94},[77,40788,2992],{"class":87},[77,40790,33333],{"class":7691},[77,40792,268],{"class":2123},[77,40794,37336],{"class":94},[77,40796,2992],{"class":87},[77,40798,33342],{"class":7691},[77,40800,268],{"class":2123},[77,40802,2690],{"class":94},[77,40804,2992],{"class":87},[77,40806,1196],{"class":7691},[77,40808,268],{"class":2123},[77,40810,2120],{"class":94},[77,40812,40513],{"class":87},[77,40814,40815],{"class":79,"line":5066},[77,40816,40518],{"class":87},[77,40818,40819,40821,40823,40825,40827,40829,40831,40833,40835,40837,40839,40841,40843,40845,40847,40849,40851],{"class":79,"line":5074},[77,40820,40480],{"class":87},[77,40822,33324],{"class":7691},[77,40824,268],{"class":2123},[77,40826,37336],{"class":94},[77,40828,2992],{"class":87},[77,40830,33333],{"class":7691},[77,40832,268],{"class":2123},[77,40834,37336],{"class":94},[77,40836,2992],{"class":87},[77,40838,33342],{"class":7691},[77,40840,268],{"class":2123},[77,40842,2690],{"class":94},[77,40844,2992],{"class":87},[77,40846,1196],{"class":7691},[77,40848,268],{"class":2123},[77,40850,2120],{"class":94},[77,40852,40513],{"class":87},[77,40854,40855],{"class":79,"line":5079},[77,40856,40518],{"class":87},[77,40858,40859,40861,40863,40865,40867,40869,40871,40873,40875,40877,40879,40881,40883],{"class":79,"line":5085},[77,40860,40563],{"class":87},[77,40862,33342],{"class":7691},[77,40864,268],{"class":2123},[77,40866,2696],{"class":94},[77,40868,2992],{"class":87},[77,40870,33396],{"class":7691},[77,40872,268],{"class":2123},[77,40874,2696],{"class":94},[77,40876,2992],{"class":87},[77,40878,1196],{"class":7691},[77,40880,268],{"class":2123},[77,40882,1939],{"class":94},[77,40884,2628],{"class":87},[77,40886,40887],{"class":79,"line":5091},[77,40888,40592],{"class":87},[77,40890,40891],{"class":79,"line":5096},[77,40892,40893],{"class":323},"        # 第四层\n",[77,40895,40896,40898,40901,40903],{"class":79,"line":10422},[77,40897,33313],{"class":94},[77,40899,40900],{"class":87},".block4",[77,40902,268],{"class":2123},[77,40904,40475],{"class":87},[77,40906,40907,40909,40911,40913,40915,40917,40919,40921,40924,40926,40928,40930,40932,40934,40936,40938,40940],{"class":79,"line":10446},[77,40908,40480],{"class":87},[77,40910,33324],{"class":7691},[77,40912,268],{"class":2123},[77,40914,37336],{"class":94},[77,40916,2992],{"class":87},[77,40918,33333],{"class":7691},[77,40920,268],{"class":2123},[77,40922,40923],{"class":94},"512",[77,40925,2992],{"class":87},[77,40927,33342],{"class":7691},[77,40929,268],{"class":2123},[77,40931,2690],{"class":94},[77,40933,2992],{"class":87},[77,40935,1196],{"class":7691},[77,40937,268],{"class":2123},[77,40939,2120],{"class":94},[77,40941,40513],{"class":87},[77,40943,40944],{"class":79,"line":10451},[77,40945,40518],{"class":87},[77,40947,40948,40950,40952,40954,40956,40958,40960,40962,40964,40966,40968,40970,40972,40974,40976,40978,40980],{"class":79,"line":10457},[77,40949,40480],{"class":87},[77,40951,33324],{"class":7691},[77,40953,268],{"class":2123},[77,40955,40923],{"class":94},[77,40957,2992],{"class":87},[77,40959,33333],{"class":7691},[77,40961,268],{"class":2123},[77,40963,40923],{"class":94},[77,40965,2992],{"class":87},[77,40967,33342],{"class":7691},[77,40969,268],{"class":2123},[77,40971,2690],{"class":94},[77,40973,2992],{"class":87},[77,40975,1196],{"class":7691},[77,40977,268],{"class":2123},[77,40979,2120],{"class":94},[77,40981,40513],{"class":87},[77,40983,40984],{"class":79,"line":10484},[77,40985,40518],{"class":87},[77,40987,40988,40990,40992,40994,40996,40998,41000,41002,41004,41006,41008,41010,41012,41014,41016,41018,41020],{"class":79,"line":10489},[77,40989,40480],{"class":87},[77,40991,33324],{"class":7691},[77,40993,268],{"class":2123},[77,40995,40923],{"class":94},[77,40997,2992],{"class":87},[77,40999,33333],{"class":7691},[77,41001,268],{"class":2123},[77,41003,40923],{"class":94},[77,41005,2992],{"class":87},[77,41007,33342],{"class":7691},[77,41009,268],{"class":2123},[77,41011,2690],{"class":94},[77,41013,2992],{"class":87},[77,41015,1196],{"class":7691},[77,41017,268],{"class":2123},[77,41019,2120],{"class":94},[77,41021,40513],{"class":87},[77,41023,41024],{"class":79,"line":10495},[77,41025,40518],{"class":87},[77,41027,41028,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048,41050,41052],{"class":79,"line":10507},[77,41029,40563],{"class":87},[77,41031,33342],{"class":7691},[77,41033,268],{"class":2123},[77,41035,2696],{"class":94},[77,41037,2992],{"class":87},[77,41039,33396],{"class":7691},[77,41041,268],{"class":2123},[77,41043,2696],{"class":94},[77,41045,2992],{"class":87},[77,41047,1196],{"class":7691},[77,41049,268],{"class":2123},[77,41051,1939],{"class":94},[77,41053,2628],{"class":87},[77,41055,41056],{"class":79,"line":10519},[77,41057,40592],{"class":87},[77,41059,41060],{"class":79,"line":10531},[77,41061,41062],{"class":323},"        # 第五层\n",[77,41064,41065,41067,41070,41072],{"class":79,"line":12189},[77,41066,33313],{"class":94},[77,41068,41069],{"class":87},".block5",[77,41071,268],{"class":2123},[77,41073,40475],{"class":87},[77,41075,41076,41078,41080,41082,41084,41086,41088,41090,41092,41094,41096,41098,41100,41102,41104,41106,41108],{"class":79,"line":12214},[77,41077,40480],{"class":87},[77,41079,33324],{"class":7691},[77,41081,268],{"class":2123},[77,41083,40923],{"class":94},[77,41085,2992],{"class":87},[77,41087,33333],{"class":7691},[77,41089,268],{"class":2123},[77,41091,40923],{"class":94},[77,41093,2992],{"class":87},[77,41095,33342],{"class":7691},[77,41097,268],{"class":2123},[77,41099,2690],{"class":94},[77,41101,2992],{"class":87},[77,41103,1196],{"class":7691},[77,41105,268],{"class":2123},[77,41107,2120],{"class":94},[77,41109,40513],{"class":87},[77,41111,41112],{"class":79,"line":12237},[77,41113,40518],{"class":87},[77,41115,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142,41144,41146,41148],{"class":79,"line":12261},[77,41117,40480],{"class":87},[77,41119,33324],{"class":7691},[77,41121,268],{"class":2123},[77,41123,40923],{"class":94},[77,41125,2992],{"class":87},[77,41127,33333],{"class":7691},[77,41129,268],{"class":2123},[77,41131,40923],{"class":94},[77,41133,2992],{"class":87},[77,41135,33342],{"class":7691},[77,41137,268],{"class":2123},[77,41139,2690],{"class":94},[77,41141,2992],{"class":87},[77,41143,1196],{"class":7691},[77,41145,268],{"class":2123},[77,41147,2120],{"class":94},[77,41149,40513],{"class":87},[77,41151,41152],{"class":79,"line":12266},[77,41153,40518],{"class":87},[77,41155,41156,41158,41160,41162,41164,41166,41168,41170,41172,41174,41176,41178,41180,41182,41184,41186,41188],{"class":79,"line":12271},[77,41157,40480],{"class":87},[77,41159,33324],{"class":7691},[77,41161,268],{"class":2123},[77,41163,40923],{"class":94},[77,41165,2992],{"class":87},[77,41167,33333],{"class":7691},[77,41169,268],{"class":2123},[77,41171,40923],{"class":94},[77,41173,2992],{"class":87},[77,41175,33342],{"class":7691},[77,41177,268],{"class":2123},[77,41179,2690],{"class":94},[77,41181,2992],{"class":87},[77,41183,1196],{"class":7691},[77,41185,268],{"class":2123},[77,41187,2120],{"class":94},[77,41189,40513],{"class":87},[77,41191,41192],{"class":79,"line":12276},[77,41193,40518],{"class":87},[77,41195,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220],{"class":79,"line":12285},[77,41197,40563],{"class":87},[77,41199,33342],{"class":7691},[77,41201,268],{"class":2123},[77,41203,2696],{"class":94},[77,41205,2992],{"class":87},[77,41207,33396],{"class":7691},[77,41209,268],{"class":2123},[77,41211,2696],{"class":94},[77,41213,2992],{"class":87},[77,41215,1196],{"class":7691},[77,41217,268],{"class":2123},[77,41219,1939],{"class":94},[77,41221,2628],{"class":87},[77,41223,41224],{"class":79,"line":12290},[77,41225,40592],{"class":87},[77,41227,41228],{"class":79,"line":12296},[77,41229,41230],{"class":323},"        # 全连接层\n",[77,41232,41233,41235,41238,41240],{"class":79,"line":12317},[77,41234,33313],{"class":94},[77,41236,41237],{"class":87},".block6",[77,41239,268],{"class":2123},[77,41241,40475],{"class":87},[77,41243,41244],{"class":79,"line":12323},[77,41245,41246],{"class":323},"            # 平展操作\n",[77,41248,41249],{"class":79,"line":12337},[77,41250,41251],{"class":323},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[77,41253,41254],{"class":79,"line":12343},[77,41255,41256],{"class":87},"            nn.Flatten(),\n",[77,41258,41259,41262,41264,41266,41268,41270,41272,41274,41276],{"class":79,"line":12370},[77,41260,41261],{"class":87},"            nn.Linear(",[77,41263,2983],{"class":94},[77,41265,3068],{"class":2123},[77,41267,2983],{"class":94},[77,41269,3068],{"class":2123},[77,41271,40923],{"class":94},[77,41273,2992],{"class":87},[77,41275,37336],{"class":94},[77,41277,40513],{"class":87},[77,41279,41280],{"class":79,"line":12379},[77,41281,40518],{"class":87},[77,41283,41284,41286,41288,41290,41292],{"class":79,"line":12385},[77,41285,41261],{"class":87},[77,41287,37336],{"class":94},[77,41289,2992],{"class":87},[77,41291,34537],{"class":94},[77,41293,40513],{"class":87},[77,41295,41296],{"class":79,"line":12393},[77,41297,40518],{"class":87},[77,41299,41300,41302,41304,41306,41308],{"class":79,"line":12398},[77,41301,41261],{"class":87},[77,41303,34537],{"class":94},[77,41305,2992],{"class":87},[77,41307,3059],{"class":94},[77,41309,2628],{"class":87},[77,41311,41312],{"class":79,"line":19074},[77,41313,40592],{"class":87},[77,41315,41316],{"class":79,"line":19080},[77,41317,4875],{"emptyLinePlaceholder":2549},[77,41319,41320],{"class":79,"line":19103},[77,41321,41322],{"class":323},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[77,41324,41325],{"class":79,"line":19109},[77,41326,41327],{"class":323},"        # 循环遍历模型\n",[77,41329,41330,41332,41335,41337,41340],{"class":79,"line":19132},[77,41331,5878],{"class":2123},[77,41333,41334],{"class":87}," m ",[77,41336,28511],{"class":2123},[77,41338,41339],{"class":94}," self",[77,41341,41342],{"class":87},".modules():\n",[77,41344,41345],{"class":79,"line":19146},[77,41346,41347],{"class":323},"            # print(m)\n",[77,41349,41350,41352,41355],{"class":79,"line":19166},[77,41351,7117],{"class":2123},[77,41353,41354],{"class":94}," isinstance",[77,41356,41357],{"class":87},"(m,nn.Conv2d):\n",[77,41359,41360],{"class":79,"line":19172},[77,41361,41362],{"class":323},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[77,41364,41365,41368,41371,41373,41376],{"class":79,"line":19183},[77,41366,41367],{"class":87},"                nn.init.kaiming_normal_(m.weight,",[77,41369,41370],{"class":7691},"nonlinearity",[77,41372,268],{"class":2123},[77,41374,41375],{"class":271},"'relu'",[77,41377,2628],{"class":87},[77,41379,41380],{"class":79,"line":19206},[77,41381,41382],{"class":323},"                # 判断b参数是否存在\n",[77,41384,41385,41388,41391,41394,41397,41400],{"class":79,"line":19228},[77,41386,41387],{"class":2123},"                if",[77,41389,41390],{"class":87}," m.bias ",[77,41392,41393],{"class":2123},"is",[77,41395,41396],{"class":2123}," not",[77,41398,41399],{"class":94}," None",[77,41401,6214],{"class":87},[77,41403,41404],{"class":79,"line":19233},[77,41405,41406],{"class":323},"                    # 如果参数不存在的化初始化b=0\n",[77,41408,41409,41412,41414],{"class":79,"line":19239},[77,41410,41411],{"class":87},"                    nn.init.constant_(m.bias,",[77,41413,1939],{"class":94},[77,41415,2628],{"class":87},[77,41417,41418],{"class":79,"line":19253},[77,41419,41420],{"class":323},"            # 全连接层初始化\n",[77,41422,41423,41426,41428],{"class":79,"line":19266},[77,41424,41425],{"class":2123},"            elif",[77,41427,41354],{"class":94},[77,41429,41430],{"class":87},"(m,nn.Linear):\n",[77,41432,41433],{"class":79,"line":19271},[77,41434,41435],{"class":323},"                # 这个初始化方法是利用的是正太分布的方式\n",[77,41437,41438],{"class":79,"line":19285},[77,41439,41440],{"class":323},"                # 均值为0，方差为0.01\n",[77,41442,41443,41446,41448,41450,41453],{"class":79,"line":19290},[77,41444,41445],{"class":87},"                nn.init.normal_(m.weight,",[77,41447,1939],{"class":94},[77,41449,2992],{"class":87},[77,41451,41452],{"class":94},"0.01",[77,41454,2628],{"class":87},[77,41456,41457],{"class":79,"line":19296},[77,41458,41459],{"class":323},"                # 初始化b参数\n",[77,41461,41462,41464,41466,41468,41470,41472],{"class":79,"line":19301},[77,41463,41387],{"class":2123},[77,41465,41390],{"class":87},[77,41467,41393],{"class":2123},[77,41469,41396],{"class":2123},[77,41471,41399],{"class":94},[77,41473,6214],{"class":87},[77,41475,41476,41478,41480],{"class":79,"line":19315},[77,41477,41411],{"class":87},[77,41479,1939],{"class":94},[77,41481,2628],{"class":87},[77,41483,41484],{"class":79,"line":19320},[77,41485,4875],{"emptyLinePlaceholder":2549},[77,41487,41488],{"class":79,"line":19325},[77,41489,37631],{"class":323},[77,41491,41492,41494,41496],{"class":79,"line":19339},[77,41493,33269],{"class":2123},[77,41495,33560],{"class":83},[77,41497,33563],{"class":87},[77,41499,41500,41502,41504,41506],{"class":79,"line":19351},[77,41501,33568],{"class":87},[77,41503,268],{"class":2123},[77,41505,33291],{"class":94},[77,41507,41508],{"class":87},".block1(x)\n",[77,41510,41511,41513,41515,41517],{"class":79,"line":19356},[77,41512,33568],{"class":87},[77,41514,268],{"class":2123},[77,41516,33291],{"class":94},[77,41518,41519],{"class":87},".block2(x)\n",[77,41521,41522,41524,41526,41528],{"class":79,"line":19369},[77,41523,33568],{"class":87},[77,41525,268],{"class":2123},[77,41527,33291],{"class":94},[77,41529,41530],{"class":87},".block3(x)\n",[77,41532,41533,41535,41537,41539],{"class":79,"line":19374},[77,41534,33568],{"class":87},[77,41536,268],{"class":2123},[77,41538,33291],{"class":94},[77,41540,41541],{"class":87},".block4(x)\n",[77,41543,41544,41546,41548,41550],{"class":79,"line":19379},[77,41545,33568],{"class":87},[77,41547,268],{"class":2123},[77,41549,33291],{"class":94},[77,41551,41552],{"class":87},".block5(x)\n",[77,41554,41555,41557,41559,41561],{"class":79,"line":19384},[77,41556,33568],{"class":87},[77,41558,268],{"class":2123},[77,41560,33291],{"class":94},[77,41562,41563],{"class":87},".block6(x)\n",[77,41565,41566,41568],{"class":79,"line":19397},[77,41567,17224],{"class":2123},[77,41569,33676],{"class":87},[77,41571,41572],{"class":79,"line":19402},[77,41573,4875],{"emptyLinePlaceholder":2549},[77,41575,41576],{"class":79,"line":35100},[77,41577,41578],{"class":323},"# 验证模型\n",[77,41580,41581,41583,41585,41587,41590],{"class":79,"line":35106},[77,41582,4008],{"class":2123},[77,41584,33687],{"class":94},[77,41586,5424],{"class":2123},[77,41588,41589],{"class":271},"'__main__'",[77,41591,6214],{"class":87},[77,41593,41594,41596,41598,41600,41602,41604,41606,41608,41610],{"class":79,"line":35112},[77,41595,33704],{"class":87},[77,41597,268],{"class":2123},[77,41599,32919],{"class":87},[77,41601,33711],{"class":271},[77,41603,4180],{"class":2123},[77,41605,33716],{"class":87},[77,41607,4177],{"class":2123},[77,41609,32944],{"class":271},[77,41611,2628],{"class":87},[77,41613,41614,41616],{"class":79,"line":35118},[77,41615,33766],{"class":94},[77,41617,32953],{"class":87},[77,41619,41620,41622,41624],{"class":79,"line":35124},[77,41621,33756],{"class":87},[77,41623,268],{"class":2123},[77,41625,41626],{"class":87},"VGG16().to(device)\n",[77,41628,41629,41631,41633,41635,41637,41639,41641,41643],{"class":79,"line":35135},[77,41630,33766],{"class":94},[77,41632,33769],{"class":87},[77,41634,2120],{"class":94},[77,41636,2992],{"class":87},[77,41638,33968],{"class":94},[77,41640,2992],{"class":87},[77,41642,33968],{"class":94},[77,41644,33782],{"class":87},[139,41646,41647],{"start":91},[54,41648,41649],{},"训练代码",[24,41651,41652],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[24,41654,41655],{},"解决方式:",[24,41657,41658],{},"①权重初始化",[67,41660,41662],{"className":32846,"code":41661,"language":32848,"meta":72,"style":72},"# 权重初始化,保证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",[74,41663,41664,41669,41674,41686,41691,41699,41704,41717,41722,41736,41741,41750,41755,41764,41769,41774,41787,41792,41806],{"__ignoreMap":72},[77,41665,41666],{"class":79,"line":80},[77,41667,41668],{"class":323},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[77,41670,41671],{"class":79,"line":91},[77,41672,41673],{"class":323},"# 循环遍历模型\n",[77,41675,41676,41678,41680,41682,41684],{"class":79,"line":107},[77,41677,5500],{"class":2123},[77,41679,41334],{"class":87},[77,41681,28511],{"class":2123},[77,41683,41339],{"class":94},[77,41685,41342],{"class":87},[77,41687,41688],{"class":79,"line":191},[77,41689,41690],{"class":323},"    # print(m)\n",[77,41692,41693,41695,41697],{"class":79,"line":1543},[77,41694,5576],{"class":2123},[77,41696,41354],{"class":94},[77,41698,41357],{"class":87},[77,41700,41701],{"class":79,"line":1549},[77,41702,41703],{"class":323},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[77,41705,41706,41709,41711,41713,41715],{"class":79,"line":1566},[77,41707,41708],{"class":87},"        nn.init.kaiming_normal_(m.weight,",[77,41710,41370],{"class":7691},[77,41712,268],{"class":2123},[77,41714,41375],{"class":271},[77,41716,2628],{"class":87},[77,41718,41719],{"class":79,"line":1572},[77,41720,41721],{"class":323},"        # 判断b参数是否存在\n",[77,41723,41724,41726,41728,41730,41732,41734],{"class":79,"line":1589},[77,41725,4972],{"class":2123},[77,41727,41390],{"class":87},[77,41729,41393],{"class":2123},[77,41731,41396],{"class":2123},[77,41733,41399],{"class":94},[77,41735,6214],{"class":87},[77,41737,41738],{"class":79,"line":1595},[77,41739,41740],{"class":323},"            # 如果参数不存在的化初始化b=0\n",[77,41742,41743,41746,41748],{"class":79,"line":4088},[77,41744,41745],{"class":87},"            nn.init.constant_(m.bias,",[77,41747,1939],{"class":94},[77,41749,2628],{"class":87},[77,41751,41752],{"class":79,"line":4093},[77,41753,41754],{"class":323},"    # 全连接层初始化\n",[77,41756,41757,41760,41762],{"class":79,"line":4099},[77,41758,41759],{"class":2123},"    elif",[77,41761,41354],{"class":94},[77,41763,41430],{"class":87},[77,41765,41766],{"class":79,"line":4104},[77,41767,41768],{"class":323},"        # 这个初始化方法是利用的是正太分布的方式\n",[77,41770,41771],{"class":79,"line":4118},[77,41772,41773],{"class":323},"        # 均值为0，方差为0.01\n",[77,41775,41776,41779,41781,41783,41785],{"class":79,"line":4123},[77,41777,41778],{"class":87},"        nn.init.normal_(m.weight,",[77,41780,1939],{"class":94},[77,41782,2992],{"class":87},[77,41784,41452],{"class":94},[77,41786,2628],{"class":87},[77,41788,41789],{"class":79,"line":4129},[77,41790,41791],{"class":323},"        # 初始化b参数\n",[77,41793,41794,41796,41798,41800,41802,41804],{"class":79,"line":4150},[77,41795,4972],{"class":2123},[77,41797,41390],{"class":87},[77,41799,41393],{"class":2123},[77,41801,41396],{"class":2123},[77,41803,41399],{"class":94},[77,41805,6214],{"class":87},[77,41807,41808,41810,41812],{"class":79,"line":4155},[77,41809,41745],{"class":87},[77,41811,1939],{"class":94},[77,41813,2628],{"class":87},[24,41815,41816],{},"②尽可能地增加批次",[24,41818,41819],{},"训练完整代码：",[67,41821,41822],{"className":32846,"code":40365,"language":32848,"meta":72,"style":72},[74,41823,41824,41830,41840,41850,41860,41864,41880,41888,41906,41910,41914,41924,41960,41964,42000,42004,42032,42036,42040,42050,42086,42090,42126,42130,42158,42162,42166,42176,42212,42216,42252,42256,42292,42296,42324,42328,42332,42342,42378,42382,42418,42422,42458,42462,42490,42494,42498,42508,42544,42548,42584,42588,42624,42628,42656,42660,42664,42674,42678,42682,42686,42706,42710,42722,42726,42738,42742,42746,42750,42754,42766,42770,42778,42782,42794,42798,42812,42816,42824,42828,42836,42840,42844,42856,42860,42874,42882,42886,42890,42898,42908,42918,42928,42938,42948,42958,42964,42968,42972,42984,43004,43010,43018],{"__ignoreMap":72},[77,41825,41826,41828],{"class":79,"line":80},[77,41827,32860],{"class":2123},[77,41829,32863],{"class":87},[77,41831,41832,41834,41836,41838],{"class":79,"line":91},[77,41833,33205],{"class":2123},[77,41835,40380],{"class":87},[77,41837,32860],{"class":2123},[77,41839,40385],{"class":87},[77,41841,41842,41844,41846,41848],{"class":79,"line":107},[77,41843,33205],{"class":2123},[77,41845,33208],{"class":87},[77,41847,32860],{"class":2123},[77,41849,33213],{"class":87},[77,41851,41852,41854,41856,41858],{"class":79,"line":191},[77,41853,33205],{"class":2123},[77,41855,33225],{"class":87},[77,41857,32860],{"class":2123},[77,41859,33230],{"class":87},[77,41861,41862],{"class":79,"line":1543},[77,41863,4875],{"emptyLinePlaceholder":2549},[77,41865,41866,41868,41870,41872,41874,41876,41878],{"class":79,"line":1549},[77,41867,17166],{"class":2123},[77,41869,40416],{"class":83},[77,41871,2622],{"class":87},[77,41873,33246],{"class":83},[77,41875,3171],{"class":87},[77,41877,33251],{"class":83},[77,41879,33254],{"class":87},[77,41881,41882,41884,41886],{"class":79,"line":1566},[77,41883,33269],{"class":2123},[77,41885,33272],{"class":94},[77,41887,33275],{"class":87},[77,41889,41890,41892,41894,41896,41898,41900,41902,41904],{"class":79,"line":1572},[77,41891,33285],{"class":94},[77,41893,2622],{"class":87},[77,41895,40443],{"class":94},[77,41897,680],{"class":87},[77,41899,33291],{"class":94},[77,41901,33294],{"class":87},[77,41903,33297],{"class":94},[77,41905,4451],{"class":87},[77,41907,41908],{"class":79,"line":1589},[77,41909,40458],{"class":323},[77,41911,41912],{"class":79,"line":1595},[77,41913,40463],{"class":323},[77,41915,41916,41918,41920,41922],{"class":79,"line":4088},[77,41917,33313],{"class":94},[77,41919,40470],{"class":87},[77,41921,268],{"class":2123},[77,41923,40475],{"class":87},[77,41925,41926,41928,41930,41932,41934,41936,41938,41940,41942,41944,41946,41948,41950,41952,41954,41956,41958],{"class":79,"line":4093},[77,41927,40480],{"class":87},[77,41929,33324],{"class":7691},[77,41931,268],{"class":2123},[77,41933,2120],{"class":94},[77,41935,2992],{"class":87},[77,41937,33333],{"class":7691},[77,41939,268],{"class":2123},[77,41941,2819],{"class":94},[77,41943,2992],{"class":87},[77,41945,33342],{"class":7691},[77,41947,268],{"class":2123},[77,41949,2690],{"class":94},[77,41951,2992],{"class":87},[77,41953,1196],{"class":7691},[77,41955,268],{"class":2123},[77,41957,2120],{"class":94},[77,41959,40513],{"class":87},[77,41961,41962],{"class":79,"line":4099},[77,41963,40518],{"class":87},[77,41965,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986,41988,41990,41992,41994,41996,41998],{"class":79,"line":4104},[77,41967,40480],{"class":87},[77,41969,33324],{"class":7691},[77,41971,268],{"class":2123},[77,41973,2819],{"class":94},[77,41975,2992],{"class":87},[77,41977,33333],{"class":7691},[77,41979,268],{"class":2123},[77,41981,2819],{"class":94},[77,41983,2992],{"class":87},[77,41985,33342],{"class":7691},[77,41987,268],{"class":2123},[77,41989,2690],{"class":94},[77,41991,2992],{"class":87},[77,41993,1196],{"class":7691},[77,41995,268],{"class":2123},[77,41997,2120],{"class":94},[77,41999,40513],{"class":87},[77,42001,42002],{"class":79,"line":4118},[77,42003,40518],{"class":87},[77,42005,42006,42008,42010,42012,42014,42016,42018,42020,42022,42024,42026,42028,42030],{"class":79,"line":4123},[77,42007,40563],{"class":87},[77,42009,33342],{"class":7691},[77,42011,268],{"class":2123},[77,42013,2696],{"class":94},[77,42015,2992],{"class":87},[77,42017,33396],{"class":7691},[77,42019,268],{"class":2123},[77,42021,2696],{"class":94},[77,42023,2992],{"class":87},[77,42025,1196],{"class":7691},[77,42027,268],{"class":2123},[77,42029,1939],{"class":94},[77,42031,2628],{"class":87},[77,42033,42034],{"class":79,"line":4129},[77,42035,40592],{"class":87},[77,42037,42038],{"class":79,"line":4150},[77,42039,40597],{"class":323},[77,42041,42042,42044,42046,42048],{"class":79,"line":4155},[77,42043,33313],{"class":94},[77,42045,40604],{"class":87},[77,42047,268],{"class":2123},[77,42049,40475],{"class":87},[77,42051,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070,42072,42074,42076,42078,42080,42082,42084],{"class":79,"line":4169},[77,42053,40480],{"class":87},[77,42055,33324],{"class":7691},[77,42057,268],{"class":2123},[77,42059,2819],{"class":94},[77,42061,2992],{"class":87},[77,42063,33333],{"class":7691},[77,42065,268],{"class":2123},[77,42067,34537],{"class":94},[77,42069,2992],{"class":87},[77,42071,33342],{"class":7691},[77,42073,268],{"class":2123},[77,42075,2690],{"class":94},[77,42077,2992],{"class":87},[77,42079,1196],{"class":7691},[77,42081,268],{"class":2123},[77,42083,2120],{"class":94},[77,42085,40513],{"class":87},[77,42087,42088],{"class":79,"line":4174},[77,42089,40518],{"class":87},[77,42091,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120,42122,42124],{"class":79,"line":4203},[77,42093,40480],{"class":87},[77,42095,33324],{"class":7691},[77,42097,268],{"class":2123},[77,42099,34537],{"class":94},[77,42101,2992],{"class":87},[77,42103,33333],{"class":7691},[77,42105,268],{"class":2123},[77,42107,34537],{"class":94},[77,42109,2992],{"class":87},[77,42111,33342],{"class":7691},[77,42113,268],{"class":2123},[77,42115,2690],{"class":94},[77,42117,2992],{"class":87},[77,42119,1196],{"class":7691},[77,42121,268],{"class":2123},[77,42123,2120],{"class":94},[77,42125,40513],{"class":87},[77,42127,42128],{"class":79,"line":4208},[77,42129,40518],{"class":87},[77,42131,42132,42134,42136,42138,42140,42142,42144,42146,42148,42150,42152,42154,42156],{"class":79,"line":4225},[77,42133,40563],{"class":87},[77,42135,33342],{"class":7691},[77,42137,268],{"class":2123},[77,42139,2696],{"class":94},[77,42141,2992],{"class":87},[77,42143,33396],{"class":7691},[77,42145,268],{"class":2123},[77,42147,2696],{"class":94},[77,42149,2992],{"class":87},[77,42151,1196],{"class":7691},[77,42153,268],{"class":2123},[77,42155,1939],{"class":94},[77,42157,2628],{"class":87},[77,42159,42160],{"class":79,"line":4230},[77,42161,40592],{"class":87},[77,42163,42164],{"class":79,"line":4235},[77,42165,40725],{"class":323},[77,42167,42168,42170,42172,42174],{"class":79,"line":4240},[77,42169,33313],{"class":94},[77,42171,40732],{"class":87},[77,42173,268],{"class":2123},[77,42175,40475],{"class":87},[77,42177,42178,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198,42200,42202,42204,42206,42208,42210],{"class":79,"line":4254},[77,42179,40480],{"class":87},[77,42181,33324],{"class":7691},[77,42183,268],{"class":2123},[77,42185,34537],{"class":94},[77,42187,2992],{"class":87},[77,42189,33333],{"class":7691},[77,42191,268],{"class":2123},[77,42193,37336],{"class":94},[77,42195,2992],{"class":87},[77,42197,33342],{"class":7691},[77,42199,268],{"class":2123},[77,42201,2690],{"class":94},[77,42203,2992],{"class":87},[77,42205,1196],{"class":7691},[77,42207,268],{"class":2123},[77,42209,2120],{"class":94},[77,42211,40513],{"class":87},[77,42213,42214],{"class":79,"line":4259},[77,42215,40518],{"class":87},[77,42217,42218,42220,42222,42224,42226,42228,42230,42232,42234,42236,42238,42240,42242,42244,42246,42248,42250],{"class":79,"line":5052},[77,42219,40480],{"class":87},[77,42221,33324],{"class":7691},[77,42223,268],{"class":2123},[77,42225,37336],{"class":94},[77,42227,2992],{"class":87},[77,42229,33333],{"class":7691},[77,42231,268],{"class":2123},[77,42233,37336],{"class":94},[77,42235,2992],{"class":87},[77,42237,33342],{"class":7691},[77,42239,268],{"class":2123},[77,42241,2690],{"class":94},[77,42243,2992],{"class":87},[77,42245,1196],{"class":7691},[77,42247,268],{"class":2123},[77,42249,2120],{"class":94},[77,42251,40513],{"class":87},[77,42253,42254],{"class":79,"line":5066},[77,42255,40518],{"class":87},[77,42257,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288,42290],{"class":79,"line":5074},[77,42259,40480],{"class":87},[77,42261,33324],{"class":7691},[77,42263,268],{"class":2123},[77,42265,37336],{"class":94},[77,42267,2992],{"class":87},[77,42269,33333],{"class":7691},[77,42271,268],{"class":2123},[77,42273,37336],{"class":94},[77,42275,2992],{"class":87},[77,42277,33342],{"class":7691},[77,42279,268],{"class":2123},[77,42281,2690],{"class":94},[77,42283,2992],{"class":87},[77,42285,1196],{"class":7691},[77,42287,268],{"class":2123},[77,42289,2120],{"class":94},[77,42291,40513],{"class":87},[77,42293,42294],{"class":79,"line":5079},[77,42295,40518],{"class":87},[77,42297,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318,42320,42322],{"class":79,"line":5085},[77,42299,40563],{"class":87},[77,42301,33342],{"class":7691},[77,42303,268],{"class":2123},[77,42305,2696],{"class":94},[77,42307,2992],{"class":87},[77,42309,33396],{"class":7691},[77,42311,268],{"class":2123},[77,42313,2696],{"class":94},[77,42315,2992],{"class":87},[77,42317,1196],{"class":7691},[77,42319,268],{"class":2123},[77,42321,1939],{"class":94},[77,42323,2628],{"class":87},[77,42325,42326],{"class":79,"line":5091},[77,42327,40592],{"class":87},[77,42329,42330],{"class":79,"line":5096},[77,42331,40893],{"class":323},[77,42333,42334,42336,42338,42340],{"class":79,"line":10422},[77,42335,33313],{"class":94},[77,42337,40900],{"class":87},[77,42339,268],{"class":2123},[77,42341,40475],{"class":87},[77,42343,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370,42372,42374,42376],{"class":79,"line":10446},[77,42345,40480],{"class":87},[77,42347,33324],{"class":7691},[77,42349,268],{"class":2123},[77,42351,37336],{"class":94},[77,42353,2992],{"class":87},[77,42355,33333],{"class":7691},[77,42357,268],{"class":2123},[77,42359,40923],{"class":94},[77,42361,2992],{"class":87},[77,42363,33342],{"class":7691},[77,42365,268],{"class":2123},[77,42367,2690],{"class":94},[77,42369,2992],{"class":87},[77,42371,1196],{"class":7691},[77,42373,268],{"class":2123},[77,42375,2120],{"class":94},[77,42377,40513],{"class":87},[77,42379,42380],{"class":79,"line":10451},[77,42381,40518],{"class":87},[77,42383,42384,42386,42388,42390,42392,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416],{"class":79,"line":10457},[77,42385,40480],{"class":87},[77,42387,33324],{"class":7691},[77,42389,268],{"class":2123},[77,42391,40923],{"class":94},[77,42393,2992],{"class":87},[77,42395,33333],{"class":7691},[77,42397,268],{"class":2123},[77,42399,40923],{"class":94},[77,42401,2992],{"class":87},[77,42403,33342],{"class":7691},[77,42405,268],{"class":2123},[77,42407,2690],{"class":94},[77,42409,2992],{"class":87},[77,42411,1196],{"class":7691},[77,42413,268],{"class":2123},[77,42415,2120],{"class":94},[77,42417,40513],{"class":87},[77,42419,42420],{"class":79,"line":10484},[77,42421,40518],{"class":87},[77,42423,42424,42426,42428,42430,42432,42434,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456],{"class":79,"line":10489},[77,42425,40480],{"class":87},[77,42427,33324],{"class":7691},[77,42429,268],{"class":2123},[77,42431,40923],{"class":94},[77,42433,2992],{"class":87},[77,42435,33333],{"class":7691},[77,42437,268],{"class":2123},[77,42439,40923],{"class":94},[77,42441,2992],{"class":87},[77,42443,33342],{"class":7691},[77,42445,268],{"class":2123},[77,42447,2690],{"class":94},[77,42449,2992],{"class":87},[77,42451,1196],{"class":7691},[77,42453,268],{"class":2123},[77,42455,2120],{"class":94},[77,42457,40513],{"class":87},[77,42459,42460],{"class":79,"line":10495},[77,42461,40518],{"class":87},[77,42463,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488],{"class":79,"line":10507},[77,42465,40563],{"class":87},[77,42467,33342],{"class":7691},[77,42469,268],{"class":2123},[77,42471,2696],{"class":94},[77,42473,2992],{"class":87},[77,42475,33396],{"class":7691},[77,42477,268],{"class":2123},[77,42479,2696],{"class":94},[77,42481,2992],{"class":87},[77,42483,1196],{"class":7691},[77,42485,268],{"class":2123},[77,42487,1939],{"class":94},[77,42489,2628],{"class":87},[77,42491,42492],{"class":79,"line":10519},[77,42493,40592],{"class":87},[77,42495,42496],{"class":79,"line":10531},[77,42497,41062],{"class":323},[77,42499,42500,42502,42504,42506],{"class":79,"line":12189},[77,42501,33313],{"class":94},[77,42503,41069],{"class":87},[77,42505,268],{"class":2123},[77,42507,40475],{"class":87},[77,42509,42510,42512,42514,42516,42518,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538,42540,42542],{"class":79,"line":12214},[77,42511,40480],{"class":87},[77,42513,33324],{"class":7691},[77,42515,268],{"class":2123},[77,42517,40923],{"class":94},[77,42519,2992],{"class":87},[77,42521,33333],{"class":7691},[77,42523,268],{"class":2123},[77,42525,40923],{"class":94},[77,42527,2992],{"class":87},[77,42529,33342],{"class":7691},[77,42531,268],{"class":2123},[77,42533,2690],{"class":94},[77,42535,2992],{"class":87},[77,42537,1196],{"class":7691},[77,42539,268],{"class":2123},[77,42541,2120],{"class":94},[77,42543,40513],{"class":87},[77,42545,42546],{"class":79,"line":12237},[77,42547,40518],{"class":87},[77,42549,42550,42552,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582],{"class":79,"line":12261},[77,42551,40480],{"class":87},[77,42553,33324],{"class":7691},[77,42555,268],{"class":2123},[77,42557,40923],{"class":94},[77,42559,2992],{"class":87},[77,42561,33333],{"class":7691},[77,42563,268],{"class":2123},[77,42565,40923],{"class":94},[77,42567,2992],{"class":87},[77,42569,33342],{"class":7691},[77,42571,268],{"class":2123},[77,42573,2690],{"class":94},[77,42575,2992],{"class":87},[77,42577,1196],{"class":7691},[77,42579,268],{"class":2123},[77,42581,2120],{"class":94},[77,42583,40513],{"class":87},[77,42585,42586],{"class":79,"line":12266},[77,42587,40518],{"class":87},[77,42589,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622],{"class":79,"line":12271},[77,42591,40480],{"class":87},[77,42593,33324],{"class":7691},[77,42595,268],{"class":2123},[77,42597,40923],{"class":94},[77,42599,2992],{"class":87},[77,42601,33333],{"class":7691},[77,42603,268],{"class":2123},[77,42605,40923],{"class":94},[77,42607,2992],{"class":87},[77,42609,33342],{"class":7691},[77,42611,268],{"class":2123},[77,42613,2690],{"class":94},[77,42615,2992],{"class":87},[77,42617,1196],{"class":7691},[77,42619,268],{"class":2123},[77,42621,2120],{"class":94},[77,42623,40513],{"class":87},[77,42625,42626],{"class":79,"line":12276},[77,42627,40518],{"class":87},[77,42629,42630,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654],{"class":79,"line":12285},[77,42631,40563],{"class":87},[77,42633,33342],{"class":7691},[77,42635,268],{"class":2123},[77,42637,2696],{"class":94},[77,42639,2992],{"class":87},[77,42641,33396],{"class":7691},[77,42643,268],{"class":2123},[77,42645,2696],{"class":94},[77,42647,2992],{"class":87},[77,42649,1196],{"class":7691},[77,42651,268],{"class":2123},[77,42653,1939],{"class":94},[77,42655,2628],{"class":87},[77,42657,42658],{"class":79,"line":12290},[77,42659,40592],{"class":87},[77,42661,42662],{"class":79,"line":12296},[77,42663,41230],{"class":323},[77,42665,42666,42668,42670,42672],{"class":79,"line":12317},[77,42667,33313],{"class":94},[77,42669,41237],{"class":87},[77,42671,268],{"class":2123},[77,42673,40475],{"class":87},[77,42675,42676],{"class":79,"line":12323},[77,42677,41246],{"class":323},[77,42679,42680],{"class":79,"line":12337},[77,42681,41251],{"class":323},[77,42683,42684],{"class":79,"line":12343},[77,42685,41256],{"class":87},[77,42687,42688,42690,42692,42694,42696,42698,42700,42702,42704],{"class":79,"line":12370},[77,42689,41261],{"class":87},[77,42691,2983],{"class":94},[77,42693,3068],{"class":2123},[77,42695,2983],{"class":94},[77,42697,3068],{"class":2123},[77,42699,40923],{"class":94},[77,42701,2992],{"class":87},[77,42703,37336],{"class":94},[77,42705,40513],{"class":87},[77,42707,42708],{"class":79,"line":12379},[77,42709,40518],{"class":87},[77,42711,42712,42714,42716,42718,42720],{"class":79,"line":12385},[77,42713,41261],{"class":87},[77,42715,37336],{"class":94},[77,42717,2992],{"class":87},[77,42719,34537],{"class":94},[77,42721,40513],{"class":87},[77,42723,42724],{"class":79,"line":12393},[77,42725,40518],{"class":87},[77,42727,42728,42730,42732,42734,42736],{"class":79,"line":12398},[77,42729,41261],{"class":87},[77,42731,34537],{"class":94},[77,42733,2992],{"class":87},[77,42735,3059],{"class":94},[77,42737,2628],{"class":87},[77,42739,42740],{"class":79,"line":19074},[77,42741,40592],{"class":87},[77,42743,42744],{"class":79,"line":19080},[77,42745,4875],{"emptyLinePlaceholder":2549},[77,42747,42748],{"class":79,"line":19103},[77,42749,41322],{"class":323},[77,42751,42752],{"class":79,"line":19109},[77,42753,41327],{"class":323},[77,42755,42756,42758,42760,42762,42764],{"class":79,"line":19132},[77,42757,5878],{"class":2123},[77,42759,41334],{"class":87},[77,42761,28511],{"class":2123},[77,42763,41339],{"class":94},[77,42765,41342],{"class":87},[77,42767,42768],{"class":79,"line":19146},[77,42769,41347],{"class":323},[77,42771,42772,42774,42776],{"class":79,"line":19166},[77,42773,7117],{"class":2123},[77,42775,41354],{"class":94},[77,42777,41357],{"class":87},[77,42779,42780],{"class":79,"line":19172},[77,42781,41362],{"class":323},[77,42783,42784,42786,42788,42790,42792],{"class":79,"line":19183},[77,42785,41367],{"class":87},[77,42787,41370],{"class":7691},[77,42789,268],{"class":2123},[77,42791,41375],{"class":271},[77,42793,2628],{"class":87},[77,42795,42796],{"class":79,"line":19206},[77,42797,41382],{"class":323},[77,42799,42800,42802,42804,42806,42808,42810],{"class":79,"line":19228},[77,42801,41387],{"class":2123},[77,42803,41390],{"class":87},[77,42805,41393],{"class":2123},[77,42807,41396],{"class":2123},[77,42809,41399],{"class":94},[77,42811,6214],{"class":87},[77,42813,42814],{"class":79,"line":19233},[77,42815,41406],{"class":323},[77,42817,42818,42820,42822],{"class":79,"line":19239},[77,42819,41411],{"class":87},[77,42821,1939],{"class":94},[77,42823,2628],{"class":87},[77,42825,42826],{"class":79,"line":19253},[77,42827,41420],{"class":323},[77,42829,42830,42832,42834],{"class":79,"line":19266},[77,42831,41425],{"class":2123},[77,42833,41354],{"class":94},[77,42835,41430],{"class":87},[77,42837,42838],{"class":79,"line":19271},[77,42839,41435],{"class":323},[77,42841,42842],{"class":79,"line":19285},[77,42843,41440],{"class":323},[77,42845,42846,42848,42850,42852,42854],{"class":79,"line":19290},[77,42847,41445],{"class":87},[77,42849,1939],{"class":94},[77,42851,2992],{"class":87},[77,42853,41452],{"class":94},[77,42855,2628],{"class":87},[77,42857,42858],{"class":79,"line":19296},[77,42859,41459],{"class":323},[77,42861,42862,42864,42866,42868,42870,42872],{"class":79,"line":19301},[77,42863,41387],{"class":2123},[77,42865,41390],{"class":87},[77,42867,41393],{"class":2123},[77,42869,41396],{"class":2123},[77,42871,41399],{"class":94},[77,42873,6214],{"class":87},[77,42875,42876,42878,42880],{"class":79,"line":19315},[77,42877,41411],{"class":87},[77,42879,1939],{"class":94},[77,42881,2628],{"class":87},[77,42883,42884],{"class":79,"line":19320},[77,42885,4875],{"emptyLinePlaceholder":2549},[77,42887,42888],{"class":79,"line":19325},[77,42889,37631],{"class":323},[77,42891,42892,42894,42896],{"class":79,"line":19339},[77,42893,33269],{"class":2123},[77,42895,33560],{"class":83},[77,42897,33563],{"class":87},[77,42899,42900,42902,42904,42906],{"class":79,"line":19351},[77,42901,33568],{"class":87},[77,42903,268],{"class":2123},[77,42905,33291],{"class":94},[77,42907,41508],{"class":87},[77,42909,42910,42912,42914,42916],{"class":79,"line":19356},[77,42911,33568],{"class":87},[77,42913,268],{"class":2123},[77,42915,33291],{"class":94},[77,42917,41519],{"class":87},[77,42919,42920,42922,42924,42926],{"class":79,"line":19369},[77,42921,33568],{"class":87},[77,42923,268],{"class":2123},[77,42925,33291],{"class":94},[77,42927,41530],{"class":87},[77,42929,42930,42932,42934,42936],{"class":79,"line":19374},[77,42931,33568],{"class":87},[77,42933,268],{"class":2123},[77,42935,33291],{"class":94},[77,42937,41541],{"class":87},[77,42939,42940,42942,42944,42946],{"class":79,"line":19379},[77,42941,33568],{"class":87},[77,42943,268],{"class":2123},[77,42945,33291],{"class":94},[77,42947,41552],{"class":87},[77,42949,42950,42952,42954,42956],{"class":79,"line":19384},[77,42951,33568],{"class":87},[77,42953,268],{"class":2123},[77,42955,33291],{"class":94},[77,42957,41563],{"class":87},[77,42959,42960,42962],{"class":79,"line":19397},[77,42961,17224],{"class":2123},[77,42963,33676],{"class":87},[77,42965,42966],{"class":79,"line":19402},[77,42967,4875],{"emptyLinePlaceholder":2549},[77,42969,42970],{"class":79,"line":35100},[77,42971,41578],{"class":323},[77,42973,42974,42976,42978,42980,42982],{"class":79,"line":35106},[77,42975,4008],{"class":2123},[77,42977,33687],{"class":94},[77,42979,5424],{"class":2123},[77,42981,41589],{"class":271},[77,42983,6214],{"class":87},[77,42985,42986,42988,42990,42992,42994,42996,42998,43000,43002],{"class":79,"line":35112},[77,42987,33704],{"class":87},[77,42989,268],{"class":2123},[77,42991,32919],{"class":87},[77,42993,33711],{"class":271},[77,42995,4180],{"class":2123},[77,42997,33716],{"class":87},[77,42999,4177],{"class":2123},[77,43001,32944],{"class":271},[77,43003,2628],{"class":87},[77,43005,43006,43008],{"class":79,"line":35118},[77,43007,33766],{"class":94},[77,43009,32953],{"class":87},[77,43011,43012,43014,43016],{"class":79,"line":35124},[77,43013,33756],{"class":87},[77,43015,268],{"class":2123},[77,43017,41626],{"class":87},[77,43019,43020,43022,43024,43026,43028,43030,43032,43034],{"class":79,"line":35135},[77,43021,33766],{"class":94},[77,43023,33769],{"class":87},[77,43025,2120],{"class":94},[77,43027,2992],{"class":87},[77,43029,33968],{"class":94},[77,43031,2992],{"class":87},[77,43033,33968],{"class":94},[77,43035,33782],{"class":87},[139,43037,43038],{"start":107},[54,43039,43040],{},"测试代码",[67,43042,43044],{"className":32846,"code":43043,"language":32848,"meta":72,"style":72},"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",[74,43045,43046,43052,43062,43072,43076,43086,43097,43101,43105,43109,43117,43133,43143,43159,43169,43183,43187,43197,43207,43217,43223,43227,43231,43239,43243,43259,43267,43271,43275,43283,43291,43295,43299,43303,43307,43313,43317,43327,43335,43343,43347,43351,43355,43363,43367,43383,43387,43391,43395,43407,43411,43423,43427,43431,43443,43447,43457,43461,43465,43477,43481,43490,43494,43498,43506,43510,43518,43522,43526,43530,43534,43538,43554,43562,43566,43570,43618,43624,43628,43638,43646,43654,43658,43662,43666,43670,43678,43682,43698,43702,43710,43718],{"__ignoreMap":72},[77,43047,43048,43050],{"class":79,"line":80},[77,43049,32860],{"class":2123},[77,43051,32863],{"class":87},[77,43053,43054,43056,43058,43060],{"class":79,"line":91},[77,43055,32860],{"class":2123},[77,43057,33882],{"class":87},[77,43059,33850],{"class":2123},[77,43061,33887],{"class":87},[77,43063,43064,43066,43068,43070],{"class":79,"line":107},[77,43065,33205],{"class":2123},[77,43067,33865],{"class":87},[77,43069,32860],{"class":2123},[77,43071,33870],{"class":87},[77,43073,43074],{"class":79,"line":191},[77,43075,36388],{"class":323},[77,43077,43078,43080,43082,43084],{"class":79,"line":1543},[77,43079,33205],{"class":2123},[77,43081,33835],{"class":87},[77,43083,32860],{"class":2123},[77,43085,33840],{"class":87},[77,43087,43088,43090,43092,43094],{"class":79,"line":1549},[77,43089,33205],{"class":2123},[77,43091,34381],{"class":87},[77,43093,32860],{"class":2123},[77,43095,43096],{"class":94}," VGG16\n",[77,43098,43099],{"class":79,"line":1566},[77,43100,4875],{"emptyLinePlaceholder":2549},[77,43102,43103],{"class":79,"line":1572},[77,43104,4875],{"emptyLinePlaceholder":2549},[77,43106,43107],{"class":79,"line":1589},[77,43108,36417],{"class":323},[77,43110,43111,43113,43115],{"class":79,"line":1595},[77,43112,34414],{"class":2123},[77,43114,36424],{"class":83},[77,43116,34420],{"class":87},[77,43118,43119,43121,43123,43125,43127,43129,43131],{"class":79,"line":4088},[77,43120,36431],{"class":87},[77,43122,268],{"class":2123},[77,43124,33922],{"class":87},[77,43126,33925],{"class":7691},[77,43128,268],{"class":2123},[77,43130,33930],{"class":271},[77,43132,33933],{"class":87},[77,43134,43135,43137,43139,43141],{"class":79,"line":4093},[77,43136,36448],{"class":7691},[77,43138,268],{"class":2123},[77,43140,36453],{"class":94},[77,43142,33933],{"class":87},[77,43144,43145,43147,43149,43151,43153,43155,43157],{"class":79,"line":4099},[77,43146,36460],{"class":7691},[77,43148,268],{"class":2123},[77,43150,33960],{"class":87},[77,43152,33963],{"class":7691},[77,43154,268],{"class":2123},[77,43156,33968],{"class":94},[77,43158,33971],{"class":87},[77,43160,43161,43163,43165,43167],{"class":79,"line":4104},[77,43162,36477],{"class":7691},[77,43164,268],{"class":2123},[77,43166,33943],{"class":94},[77,43168,2628],{"class":87},[77,43170,43171,43173,43175,43177,43179,43181],{"class":79,"line":4118},[77,43172,36488],{"class":87},[77,43174,268],{"class":2123},[77,43176,34001],{"class":87},[77,43178,34004],{"class":7691},[77,43180,268],{"class":2123},[77,43182,36499],{"class":87},[77,43184,43185],{"class":79,"line":4123},[77,43186,36504],{"class":323},[77,43188,43189,43191,43193,43195],{"class":79,"line":4129},[77,43190,36509],{"class":7691},[77,43192,268],{"class":2123},[77,43194,2120],{"class":94},[77,43196,33933],{"class":87},[77,43198,43199,43201,43203,43205],{"class":79,"line":4150},[77,43200,36520],{"class":7691},[77,43202,268],{"class":2123},[77,43204,33943],{"class":94},[77,43206,33933],{"class":87},[77,43208,43209,43211,43213,43215],{"class":79,"line":4155},[77,43210,36531],{"class":7691},[77,43212,268],{"class":2123},[77,43214,1939],{"class":94},[77,43216,2628],{"class":87},[77,43218,43219,43221],{"class":79,"line":4169},[77,43220,6565],{"class":2123},[77,43222,36544],{"class":87},[77,43224,43225],{"class":79,"line":4174},[77,43226,4875],{"emptyLinePlaceholder":2549},[77,43228,43229],{"class":79,"line":4203},[77,43230,36553],{"class":323},[77,43232,43233,43235,43237],{"class":79,"line":4208},[77,43234,34414],{"class":2123},[77,43236,36560],{"class":83},[77,43238,36563],{"class":87},[77,43240,43241],{"class":79,"line":4225},[77,43242,36568],{"class":323},[77,43244,43245,43247,43249,43251,43253,43255,43257],{"class":79,"line":4230},[77,43246,33704],{"class":87},[77,43248,268],{"class":2123},[77,43250,33711],{"class":271},[77,43252,4180],{"class":2123},[77,43254,33716],{"class":87},[77,43256,4177],{"class":2123},[77,43258,36585],{"class":271},[77,43260,43261,43263,43265],{"class":79,"line":4235},[77,43262,33756],{"class":87},[77,43264,268],{"class":2123},[77,43266,34756],{"class":87},[77,43268,43269],{"class":79,"line":4240},[77,43270,4875],{"emptyLinePlaceholder":2549},[77,43272,43273],{"class":79,"line":4254},[77,43274,36602],{"class":323},[77,43276,43277,43279,43281],{"class":79,"line":4259},[77,43278,36607],{"class":87},[77,43280,268],{"class":2123},[77,43282,34809],{"class":94},[77,43284,43285,43287,43289],{"class":79,"line":5052},[77,43286,36616],{"class":87},[77,43288,268],{"class":2123},[77,43290,5560],{"class":94},[77,43292,43293],{"class":79,"line":5066},[77,43294,4875],{"emptyLinePlaceholder":2549},[77,43296,43297],{"class":79,"line":5074},[77,43298,36629],{"class":323},[77,43300,43301],{"class":79,"line":5079},[77,43302,36634],{"class":323},[77,43304,43305],{"class":79,"line":5085},[77,43306,36639],{"class":323},[77,43308,43309,43311],{"class":79,"line":5091},[77,43310,36644],{"class":2123},[77,43312,35351],{"class":87},[77,43314,43315],{"class":79,"line":5096},[77,43316,36651],{"class":323},[77,43318,43319,43321,43323,43325],{"class":79,"line":10422},[77,43320,5878],{"class":2123},[77,43322,36658],{"class":87},[77,43324,28511],{"class":2123},[77,43326,36663],{"class":87},[77,43328,43329,43331,43333],{"class":79,"line":10446},[77,43330,36668],{"class":87},[77,43332,268],{"class":2123},[77,43334,36673],{"class":87},[77,43336,43337,43339,43341],{"class":79,"line":10451},[77,43338,36678],{"class":87},[77,43340,268],{"class":2123},[77,43342,36683],{"class":87},[77,43344,43345],{"class":79,"line":10457},[77,43346,36688],{"class":323},[77,43348,43349],{"class":79,"line":10484},[77,43350,35342],{"class":87},[77,43352,43353],{"class":79,"line":10489},[77,43354,36697],{"class":323},[77,43356,43357,43359,43361],{"class":79,"line":10495},[77,43358,35127],{"class":87},[77,43360,268],{"class":2123},[77,43362,36706],{"class":87},[77,43364,43365],{"class":79,"line":10507},[77,43366,36711],{"class":323},[77,43368,43369,43371,43373,43375,43377,43379,43381],{"class":79,"line":10519},[77,43370,35144],{"class":87},[77,43372,268],{"class":2123},[77,43374,35149],{"class":87},[77,43376,35152],{"class":7691},[77,43378,268],{"class":2123},[77,43380,2120],{"class":94},[77,43382,2628],{"class":87},[77,43384,43385],{"class":79,"line":10531},[77,43386,36732],{"class":323},[77,43388,43389],{"class":79,"line":12189},[77,43390,36737],{"class":323},[77,43392,43393],{"class":79,"line":12214},[77,43394,36742],{"class":323},[77,43396,43397,43399,43401,43403,43405],{"class":79,"line":12237},[77,43398,36747],{"class":87},[77,43400,11950],{"class":2123},[77,43402,35254],{"class":87},[77,43404,5424],{"class":2123},[77,43406,36756],{"class":87},[77,43408,43409],{"class":79,"line":12261},[77,43410,36761],{"class":323},[77,43412,43413,43415,43417,43419,43421],{"class":79,"line":12266},[77,43414,36766],{"class":87},[77,43416,11950],{"class":2123},[77,43418,36771],{"class":87},[77,43420,1939],{"class":94},[77,43422,2628],{"class":87},[77,43424,43425],{"class":79,"line":12271},[77,43426,4875],{"emptyLinePlaceholder":2549},[77,43428,43429],{"class":79,"line":12276},[77,43430,36784],{"class":323},[77,43432,43433,43435,43437,43439,43441],{"class":79,"line":12285},[77,43434,36789],{"class":87},[77,43436,268],{"class":2123},[77,43438,36794],{"class":87},[77,43440,3197],{"class":2123},[77,43442,36799],{"class":87},[77,43444,43445],{"class":79,"line":12290},[77,43446,36804],{"class":323},[77,43448,43449,43451,43453,43455],{"class":79,"line":12296},[77,43450,34918],{"class":94},[77,43452,2622],{"class":87},[77,43454,36813],{"class":271},[77,43456,36816],{"class":87},[77,43458,43459],{"class":79,"line":12317},[77,43460,4875],{"emptyLinePlaceholder":2549},[77,43462,43463],{"class":79,"line":12323},[77,43464,36825],{"class":323},[77,43466,43467,43469,43471,43473,43475],{"class":79,"line":12337},[77,43468,4008],{"class":2123},[77,43470,33687],{"class":94},[77,43472,5424],{"class":2123},[77,43474,33692],{"class":271},[77,43476,6214],{"class":87},[77,43478,43479],{"class":79,"line":12343},[77,43480,36842],{"class":323},[77,43482,43483,43485,43487],{"class":79,"line":12370},[77,43484,33756],{"class":87},[77,43486,268],{"class":2123},[77,43488,43489],{"class":87},"VGG16()\n",[77,43491,43492],{"class":79,"line":12379},[77,43493,36855],{"class":323},[77,43495,43496],{"class":79,"line":12385},[77,43497,36860],{"class":323},[77,43499,43500,43502,43504],{"class":79,"line":12393},[77,43501,36865],{"class":87},[77,43503,36868],{"class":271},[77,43505,32965],{"class":87},[77,43507,43508],{"class":79,"line":12398},[77,43509,36875],{"class":323},[77,43511,43512,43514,43516],{"class":79,"line":19074},[77,43513,36488],{"class":87},[77,43515,268],{"class":2123},[77,43517,36884],{"class":87},[77,43519,43520],{"class":79,"line":19080},[77,43521,36889],{"class":323},[77,43523,43524],{"class":79,"line":19103},[77,43525,36894],{"class":87},[77,43527,43528],{"class":79,"line":19109},[77,43529,4875],{"emptyLinePlaceholder":2549},[77,43531,43532],{"class":79,"line":19132},[77,43533,36903],{"class":323},[77,43535,43536],{"class":79,"line":19146},[77,43537,36908],{"class":323},[77,43539,43540,43542,43544,43546,43548,43550,43552],{"class":79,"line":19166},[77,43541,33704],{"class":87},[77,43543,268],{"class":2123},[77,43545,33711],{"class":271},[77,43547,4180],{"class":2123},[77,43549,33716],{"class":87},[77,43551,4177],{"class":2123},[77,43553,36585],{"class":271},[77,43555,43556,43558,43560],{"class":79,"line":19172},[77,43557,33756],{"class":87},[77,43559,268],{"class":2123},[77,43561,34756],{"class":87},[77,43563,43564],{"class":79,"line":19183},[77,43565,36937],{"class":323},[77,43567,43568],{"class":79,"line":19206},[77,43569,36942],{"class":323},[77,43571,43572,43574,43576,43578,43580,43582,43584,43586,43588,43590,43592,43594,43596,43598,43600,43602,43604,43606,43608,43610,43612,43614,43616],{"class":79,"line":19228},[77,43573,36947],{"class":87},[77,43575,268],{"class":2123},[77,43577,3503],{"class":87},[77,43579,36954],{"class":271},[77,43581,2992],{"class":87},[77,43583,36959],{"class":271},[77,43585,2992],{"class":87},[77,43587,36964],{"class":271},[77,43589,2992],{"class":87},[77,43591,36969],{"class":271},[77,43593,2992],{"class":87},[77,43595,36974],{"class":271},[77,43597,2992],{"class":87},[77,43599,36979],{"class":271},[77,43601,2992],{"class":87},[77,43603,36984],{"class":271},[77,43605,2992],{"class":87},[77,43607,36989],{"class":271},[77,43609,2992],{"class":87},[77,43611,36994],{"class":271},[77,43613,2992],{"class":87},[77,43615,36999],{"class":271},[77,43617,35713],{"class":87},[77,43619,43620,43622],{"class":79,"line":19233},[77,43621,36644],{"class":2123},[77,43623,35351],{"class":87},[77,43625,43626],{"class":79,"line":19239},[77,43627,37012],{"class":323},[77,43629,43630,43632,43634,43636],{"class":79,"line":19253},[77,43631,5878],{"class":2123},[77,43633,37019],{"class":87},[77,43635,28511],{"class":2123},[77,43637,36663],{"class":87},[77,43639,43640,43642,43644],{"class":79,"line":19266},[77,43641,35077],{"class":87},[77,43643,268],{"class":2123},[77,43645,35082],{"class":87},[77,43647,43648,43650,43652],{"class":79,"line":19271},[77,43649,35092],{"class":87},[77,43651,268],{"class":2123},[77,43653,35097],{"class":87},[77,43655,43656],{"class":79,"line":19285},[77,43657,4875],{"emptyLinePlaceholder":2549},[77,43659,43660],{"class":79,"line":19290},[77,43661,37048],{"class":323},[77,43663,43664],{"class":79,"line":19296},[77,43665,35342],{"class":87},[77,43667,43668],{"class":79,"line":19301},[77,43669,37057],{"class":323},[77,43671,43672,43674,43676],{"class":79,"line":19315},[77,43673,35127],{"class":87},[77,43675,268],{"class":2123},[77,43677,35132],{"class":87},[77,43679,43680],{"class":79,"line":19320},[77,43681,37070],{"class":323},[77,43683,43684,43686,43688,43690,43692,43694,43696],{"class":79,"line":19325},[77,43685,35144],{"class":87},[77,43687,268],{"class":2123},[77,43689,35149],{"class":87},[77,43691,35152],{"class":7691},[77,43693,268],{"class":2123},[77,43695,2120],{"class":94},[77,43697,2628],{"class":87},[77,43699,43700],{"class":79,"line":19339},[77,43701,37091],{"class":323},[77,43703,43704,43706,43708],{"class":79,"line":19351},[77,43705,37096],{"class":87},[77,43707,268],{"class":2123},[77,43709,37101],{"class":87},[77,43711,43712,43714,43716],{"class":79,"line":19356},[77,43713,37106],{"class":87},[77,43715,268],{"class":2123},[77,43717,37111],{"class":87},[77,43719,43720,43722,43724,43726,43728,43730,43732,43734],{"class":79,"line":19369},[77,43721,37116],{"class":94},[77,43723,2622],{"class":87},[77,43725,37121],{"class":271},[77,43727,37124],{"class":87},[77,43729,37127],{"class":271},[77,43731,2992],{"class":87},[77,43733,37132],{"class":271},[77,43735,37135],{"class":87},[19,43737,43739],{"id":43738},"_23googlenet","2.3.GoogLeNet",[24468,43741,43743],{"id":43742},"_231原理","2.3.1.原理",[139,43745,43746],{},[54,43747,43748],{},"网络结构",[24,43750,43751],{},[40,43752],{"alt":72,"src":43753},"\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",[24,43755,43756],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[24,43758,43759],{},[40,43760],{"alt":72,"src":43761},"\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",[24,43763,43764],{},[40,43765],{"alt":72,"src":43766},"\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",[24,43768,43769],{},[40,43770],{"alt":72,"src":43771},"\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",[139,43773,43774],{"start":91},[54,43775,43776],{},"1x1卷积的优点",[24,43778,43779],{},[40,43780],{"alt":72,"src":43781},"\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",[139,43783,43784],{"start":107},[54,43785,43786],{},"全局平均池化层优点",[24,43788,43789],{},[40,43790],{"alt":72,"src":43791},"\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",[24,43793,43794],{},[40,43795],{"alt":72,"src":43796},"\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",[139,43798,43799],{"start":191},[54,43800,43801],{},"参数详细描述",[24,43803,43804],{},[40,43805],{"alt":72,"src":43806},"\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",[24,43808,43809],{},[40,43810],{"alt":72,"src":43811},"\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",[24,43813,43814],{},[40,43815],{"alt":72,"src":43816},"\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",[24,43818,43819],{},[40,43820],{"alt":72,"src":43821},"\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",[24,43823,43824],{},[40,43825],{"alt":72,"src":43826},"\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",[24,43828,43829],{},[40,43830],{"alt":72,"src":43831},"\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",[24,43833,43834],{},[40,43835],{"alt":72,"src":43836},"\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",[24,43838,43839],{},[40,43840],{"alt":72,"src":43841},"\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",[24,43843,43844],{},[40,43845],{"alt":72,"src":43846},"\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",[24,43848,43849],{},[40,43850],{"alt":72,"src":43851},"\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",[24,43853,43854],{},[40,43855],{"alt":72,"src":43856},"\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",[24,43858,43859],{},[40,43860],{"alt":72,"src":43861},"\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",[24,43863,43864],{},[40,43865],{"alt":72,"src":43866},"\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",[24,43868,43869],{},[40,43870],{"alt":72,"src":43871},"\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",[24,43873,43874],{},[40,43875],{"alt":72,"src":43876},"\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",[24,43878,43879],{},[40,43880],{"alt":72,"src":43881},"\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",[24,43883,43884],{},[40,43885],{"alt":72,"src":43886},"\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",[24,43888,43889],{},[40,43890],{"alt":72,"src":43891},"\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",[24,43893,43894],{},[40,43895],{"alt":72,"src":43896},"\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",[24,43898,43899],{},[40,43900],{"alt":72,"src":43901},"\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",[24,43903,43904],{},[40,43905],{"alt":72,"src":43906},"\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",[24468,43908,43910],{"id":43909},"_232代码实现","2.3.2.代码实现",[139,43912,43913],{},[54,43914,33179],{},[24,43916,43917],{},"根据原理一步一步搭建即可",[67,43919,43921],{"className":32846,"code":43920,"language":32848,"meta":72,"style":72},"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",[74,43922,43923,43929,43939,43949,43953,43970,43979,43994,44004,44009,44042,44047,44084,44131,44136,44172,44219,44224,44229,44264,44296,44300,44308,44324,44348,44373,44394,44399,44414,44418,44422,44427,44444,44449,44458,44473,44484,44528,44532,44560,44564,44575,44603,44607,44644,44648,44676,44680,44691,44727,44759,44787,44791,44802,44836,44868,44900,44933,44967,44995,44999,45010,45043,45075,45089,45093,45106,45110,45115,45127,45135,45157,45162,45167,45172,45177,45182,45187,45201,45209,45218,45231,45246,45255,45259,45267,45278,45289,45300,45311,45322,45328,45332,45337,45349,45369,45378],{"__ignoreMap":72},[77,43924,43925,43927],{"class":79,"line":80},[77,43926,32860],{"class":2123},[77,43928,32863],{"class":87},[77,43930,43931,43933,43935,43937],{"class":79,"line":91},[77,43932,33205],{"class":2123},[77,43934,33208],{"class":87},[77,43936,32860],{"class":2123},[77,43938,33213],{"class":87},[77,43940,43941,43943,43945,43947],{"class":79,"line":107},[77,43942,33205],{"class":2123},[77,43944,33225],{"class":87},[77,43946,32860],{"class":2123},[77,43948,33230],{"class":87},[77,43950,43951],{"class":79,"line":191},[77,43952,4875],{"emptyLinePlaceholder":2549},[77,43954,43955,43957,43960,43962,43964,43966,43968],{"class":79,"line":1543},[77,43956,17166],{"class":2123},[77,43958,43959],{"class":83}," Inception",[77,43961,2622],{"class":87},[77,43963,33246],{"class":83},[77,43965,3171],{"class":87},[77,43967,33251],{"class":83},[77,43969,33254],{"class":87},[77,43971,43972,43974,43976],{"class":79,"line":1549},[77,43973,33269],{"class":2123},[77,43975,33272],{"class":94},[77,43977,43978],{"class":87},"(self,in_channels,c1,c2,c3,c4):\n",[77,43980,43981,43983,43986,43988,43990,43992],{"class":79,"line":1566},[77,43982,33285],{"class":94},[77,43984,43985],{"class":87},"(Inception,",[77,43987,33291],{"class":94},[77,43989,33294],{"class":87},[77,43991,33297],{"class":94},[77,43993,4451],{"class":87},[77,43995,43996,43998,44000,44002],{"class":79,"line":1572},[77,43997,33313],{"class":94},[77,43999,37237],{"class":87},[77,44001,268],{"class":2123},[77,44003,37242],{"class":87},[77,44005,44006],{"class":79,"line":1589},[77,44007,44008],{"class":323},"        # 路线1：定义1*1卷积\n",[77,44010,44011,44013,44016,44018,44020,44022,44024,44027,44029,44031,44034,44036,44038,44040],{"class":79,"line":1595},[77,44012,33313],{"class":94},[77,44014,44015],{"class":87},".p1_1",[77,44017,268],{"class":2123},[77,44019,33321],{"class":87},[77,44021,33324],{"class":7691},[77,44023,268],{"class":2123},[77,44025,44026],{"class":87},"in_channels,",[77,44028,33333],{"class":7691},[77,44030,268],{"class":2123},[77,44032,44033],{"class":87},"c1,",[77,44035,33342],{"class":7691},[77,44037,268],{"class":2123},[77,44039,2120],{"class":94},[77,44041,2628],{"class":87},[77,44043,44044],{"class":79,"line":4088},[77,44045,44046],{"class":323},"        # 路线2：定义1*1卷积和3*3\n",[77,44048,44049,44051,44054,44056,44058,44060,44062,44064,44066,44068,44071,44073,44076,44078,44080,44082],{"class":79,"line":4093},[77,44050,33313],{"class":94},[77,44052,44053],{"class":87},".p2_1",[77,44055,268],{"class":2123},[77,44057,33321],{"class":87},[77,44059,33324],{"class":7691},[77,44061,268],{"class":2123},[77,44063,44026],{"class":87},[77,44065,33333],{"class":7691},[77,44067,268],{"class":2123},[77,44069,44070],{"class":87},"c2[",[77,44072,1939],{"class":94},[77,44074,44075],{"class":87},"],",[77,44077,33342],{"class":7691},[77,44079,268],{"class":2123},[77,44081,2120],{"class":94},[77,44083,2628],{"class":87},[77,44085,44086,44088,44091,44093,44095,44097,44099,44101,44103,44105,44107,44109,44111,44113,44115,44117,44119,44121,44123,44125,44127,44129],{"class":79,"line":4099},[77,44087,33313],{"class":94},[77,44089,44090],{"class":87},".p2_2",[77,44092,268],{"class":2123},[77,44094,33321],{"class":87},[77,44096,33324],{"class":7691},[77,44098,268],{"class":2123},[77,44100,44070],{"class":87},[77,44102,1939],{"class":94},[77,44104,44075],{"class":87},[77,44106,33333],{"class":7691},[77,44108,268],{"class":2123},[77,44110,44070],{"class":87},[77,44112,2120],{"class":94},[77,44114,44075],{"class":87},[77,44116,33342],{"class":7691},[77,44118,268],{"class":2123},[77,44120,2690],{"class":94},[77,44122,2992],{"class":87},[77,44124,1196],{"class":7691},[77,44126,268],{"class":2123},[77,44128,2120],{"class":94},[77,44130,2628],{"class":87},[77,44132,44133],{"class":79,"line":4104},[77,44134,44135],{"class":323},"        # 路线3：定义1*1卷积和5*5\n",[77,44137,44138,44140,44143,44145,44147,44149,44151,44153,44155,44157,44160,44162,44164,44166,44168,44170],{"class":79,"line":4118},[77,44139,33313],{"class":94},[77,44141,44142],{"class":87},".p3_1",[77,44144,268],{"class":2123},[77,44146,33321],{"class":87},[77,44148,33324],{"class":7691},[77,44150,268],{"class":2123},[77,44152,44026],{"class":87},[77,44154,33333],{"class":7691},[77,44156,268],{"class":2123},[77,44158,44159],{"class":87},"c3[",[77,44161,1939],{"class":94},[77,44163,44075],{"class":87},[77,44165,33342],{"class":7691},[77,44167,268],{"class":2123},[77,44169,2120],{"class":94},[77,44171,2628],{"class":87},[77,44173,44174,44176,44179,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217],{"class":79,"line":4123},[77,44175,33313],{"class":94},[77,44177,44178],{"class":87},".p3_2",[77,44180,268],{"class":2123},[77,44182,33321],{"class":87},[77,44184,33324],{"class":7691},[77,44186,268],{"class":2123},[77,44188,44159],{"class":87},[77,44190,1939],{"class":94},[77,44192,44075],{"class":87},[77,44194,33333],{"class":7691},[77,44196,268],{"class":2123},[77,44198,44159],{"class":87},[77,44200,2120],{"class":94},[77,44202,44075],{"class":87},[77,44204,33342],{"class":7691},[77,44206,268],{"class":2123},[77,44208,2933],{"class":94},[77,44210,2992],{"class":87},[77,44212,1196],{"class":7691},[77,44214,268],{"class":2123},[77,44216,2696],{"class":94},[77,44218,2628],{"class":87},[77,44220,44221],{"class":79,"line":4129},[77,44222,44223],{"class":323},"        # 路线4：定义3*3最大池化和1*1卷积\n",[77,44225,44226],{"class":79,"line":4150},[77,44227,44228],{"class":323},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[77,44230,44231,44233,44236,44238,44240,44242,44244,44246,44248,44250,44252,44254,44256,44258,44260,44262],{"class":79,"line":4155},[77,44232,33313],{"class":94},[77,44234,44235],{"class":87},".p4_1",[77,44237,268],{"class":2123},[77,44239,37295],{"class":87},[77,44241,33342],{"class":7691},[77,44243,268],{"class":2123},[77,44245,2690],{"class":94},[77,44247,2992],{"class":87},[77,44249,33396],{"class":7691},[77,44251,268],{"class":2123},[77,44253,2120],{"class":94},[77,44255,2992],{"class":87},[77,44257,1196],{"class":7691},[77,44259,268],{"class":2123},[77,44261,2120],{"class":94},[77,44263,2628],{"class":87},[77,44265,44266,44268,44271,44273,44275,44277,44279,44281,44283,44285,44288,44290,44292,44294],{"class":79,"line":4169},[77,44267,33313],{"class":94},[77,44269,44270],{"class":87},".p4_2",[77,44272,268],{"class":2123},[77,44274,33321],{"class":87},[77,44276,33324],{"class":7691},[77,44278,268],{"class":2123},[77,44280,44026],{"class":87},[77,44282,33333],{"class":7691},[77,44284,268],{"class":2123},[77,44286,44287],{"class":87},"c4,",[77,44289,33342],{"class":7691},[77,44291,268],{"class":2123},[77,44293,2120],{"class":94},[77,44295,2628],{"class":87},[77,44297,44298],{"class":79,"line":4174},[77,44299,4875],{"emptyLinePlaceholder":2549},[77,44301,44302,44304,44306],{"class":79,"line":4203},[77,44303,33269],{"class":2123},[77,44305,33560],{"class":83},[77,44307,33563],{"class":87},[77,44309,44310,44313,44315,44317,44319,44321],{"class":79,"line":4208},[77,44311,44312],{"class":87},"        p1",[77,44314,268],{"class":2123},[77,44316,33291],{"class":94},[77,44318,37650],{"class":87},[77,44320,33291],{"class":94},[77,44322,44323],{"class":87},".p1_1(x))\n",[77,44325,44326,44328,44330,44332,44334,44336,44339,44341,44343,44345],{"class":79,"line":4225},[77,44327,9560],{"class":87},[77,44329,268],{"class":2123},[77,44331,33291],{"class":94},[77,44333,37650],{"class":87},[77,44335,33291],{"class":94},[77,44337,44338],{"class":87},".p2_2(",[77,44340,33291],{"class":94},[77,44342,37650],{"class":87},[77,44344,33291],{"class":94},[77,44346,44347],{"class":87},".p2_1(x))))\n",[77,44349,44350,44353,44355,44357,44359,44361,44364,44366,44368,44370],{"class":79,"line":4230},[77,44351,44352],{"class":87},"        p3",[77,44354,268],{"class":2123},[77,44356,33291],{"class":94},[77,44358,37650],{"class":87},[77,44360,33291],{"class":94},[77,44362,44363],{"class":87},".p3_2(",[77,44365,33291],{"class":94},[77,44367,37650],{"class":87},[77,44369,33291],{"class":94},[77,44371,44372],{"class":87},".p3_1(x))))\n",[77,44374,44375,44378,44380,44382,44384,44386,44389,44391],{"class":79,"line":4235},[77,44376,44377],{"class":87},"        p4",[77,44379,268],{"class":2123},[77,44381,33291],{"class":94},[77,44383,37650],{"class":87},[77,44385,33291],{"class":94},[77,44387,44388],{"class":87},".p4_2(",[77,44390,33291],{"class":94},[77,44392,44393],{"class":87},".p4_1(x)))\n",[77,44395,44396],{"class":79,"line":4240},[77,44397,44398],{"class":323},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[77,44400,44401,44403,44406,44408,44410,44412],{"class":79,"line":4254},[77,44402,17224],{"class":2123},[77,44404,44405],{"class":87}," torch.cat((p1,p2,p3,p4),",[77,44407,35152],{"class":7691},[77,44409,268],{"class":2123},[77,44411,2120],{"class":94},[77,44413,2628],{"class":87},[77,44415,44416],{"class":79,"line":4259},[77,44417,4875],{"emptyLinePlaceholder":2549},[77,44419,44420],{"class":79,"line":5052},[77,44421,4875],{"emptyLinePlaceholder":2549},[77,44423,44424],{"class":79,"line":5066},[77,44425,44426],{"class":323},"# 搭建GoogLeNet网络\n",[77,44428,44429,44431,44434,44436,44438,44440,44442],{"class":79,"line":5074},[77,44430,17166],{"class":2123},[77,44432,44433],{"class":83}," GoogLeNet",[77,44435,2622],{"class":87},[77,44437,33246],{"class":83},[77,44439,3171],{"class":87},[77,44441,33251],{"class":83},[77,44443,33254],{"class":87},[77,44445,44446],{"class":79,"line":5079},[77,44447,44448],{"class":323},"    # 必须把Inception导入到里边\n",[77,44450,44451,44453,44455],{"class":79,"line":5085},[77,44452,33269],{"class":2123},[77,44454,33272],{"class":94},[77,44456,44457],{"class":87},"(self,Inception):\n",[77,44459,44460,44462,44465,44467,44469,44471],{"class":79,"line":5091},[77,44461,33285],{"class":94},[77,44463,44464],{"class":87},"(GoogLeNet,",[77,44466,33291],{"class":94},[77,44468,33294],{"class":87},[77,44470,33297],{"class":94},[77,44472,4451],{"class":87},[77,44474,44475,44477,44480,44482],{"class":79,"line":5096},[77,44476,33313],{"class":94},[77,44478,44479],{"class":87},".b1",[77,44481,268],{"class":2123},[77,44483,40475],{"class":87},[77,44485,44486,44488,44490,44492,44494,44496,44498,44500,44502,44504,44506,44508,44510,44512,44514,44516,44518,44520,44522,44524,44526],{"class":79,"line":10422},[77,44487,40480],{"class":87},[77,44489,33324],{"class":7691},[77,44491,268],{"class":2123},[77,44493,2120],{"class":94},[77,44495,2992],{"class":87},[77,44497,33333],{"class":7691},[77,44499,268],{"class":2123},[77,44501,2819],{"class":94},[77,44503,2992],{"class":87},[77,44505,33342],{"class":7691},[77,44507,268],{"class":2123},[77,44509,2983],{"class":94},[77,44511,2992],{"class":87},[77,44513,33396],{"class":7691},[77,44515,268],{"class":2123},[77,44517,2696],{"class":94},[77,44519,2992],{"class":87},[77,44521,1196],{"class":7691},[77,44523,268],{"class":2123},[77,44525,2690],{"class":94},[77,44527,40513],{"class":87},[77,44529,44530],{"class":79,"line":10446},[77,44531,40518],{"class":87},[77,44533,44534,44536,44538,44540,44542,44544,44546,44548,44550,44552,44554,44556,44558],{"class":79,"line":10451},[77,44535,40563],{"class":87},[77,44537,33342],{"class":7691},[77,44539,268],{"class":2123},[77,44541,2690],{"class":94},[77,44543,2992],{"class":87},[77,44545,33396],{"class":7691},[77,44547,268],{"class":2123},[77,44549,2696],{"class":94},[77,44551,2992],{"class":87},[77,44553,1196],{"class":7691},[77,44555,268],{"class":2123},[77,44557,2120],{"class":94},[77,44559,2628],{"class":87},[77,44561,44562],{"class":79,"line":10457},[77,44563,40592],{"class":87},[77,44565,44566,44568,44571,44573],{"class":79,"line":10484},[77,44567,33313],{"class":94},[77,44569,44570],{"class":87},".b2",[77,44572,268],{"class":2123},[77,44574,40475],{"class":87},[77,44576,44577,44579,44581,44583,44585,44587,44589,44591,44593,44595,44597,44599,44601],{"class":79,"line":10489},[77,44578,40480],{"class":87},[77,44580,33324],{"class":7691},[77,44582,268],{"class":2123},[77,44584,2819],{"class":94},[77,44586,2992],{"class":87},[77,44588,33333],{"class":7691},[77,44590,268],{"class":2123},[77,44592,2819],{"class":94},[77,44594,2992],{"class":87},[77,44596,33342],{"class":7691},[77,44598,268],{"class":2123},[77,44600,2120],{"class":94},[77,44602,40513],{"class":87},[77,44604,44605],{"class":79,"line":10495},[77,44606,40518],{"class":87},[77,44608,44609,44611,44613,44615,44617,44619,44621,44623,44626,44628,44630,44632,44634,44636,44638,44640,44642],{"class":79,"line":10507},[77,44610,40480],{"class":87},[77,44612,33324],{"class":7691},[77,44614,268],{"class":2123},[77,44616,2819],{"class":94},[77,44618,2992],{"class":87},[77,44620,33333],{"class":7691},[77,44622,268],{"class":2123},[77,44624,44625],{"class":94},"192",[77,44627,2992],{"class":87},[77,44629,33342],{"class":7691},[77,44631,268],{"class":2123},[77,44633,2690],{"class":94},[77,44635,2992],{"class":87},[77,44637,1196],{"class":7691},[77,44639,268],{"class":2123},[77,44641,2120],{"class":94},[77,44643,40513],{"class":87},[77,44645,44646],{"class":79,"line":10519},[77,44647,40518],{"class":87},[77,44649,44650,44652,44654,44656,44658,44660,44662,44664,44666,44668,44670,44672,44674],{"class":79,"line":10531},[77,44651,40563],{"class":87},[77,44653,33342],{"class":7691},[77,44655,268],{"class":2123},[77,44657,2690],{"class":94},[77,44659,2992],{"class":87},[77,44661,33396],{"class":7691},[77,44663,268],{"class":2123},[77,44665,2696],{"class":94},[77,44667,2992],{"class":87},[77,44669,1196],{"class":7691},[77,44671,268],{"class":2123},[77,44673,2120],{"class":94},[77,44675,2628],{"class":87},[77,44677,44678],{"class":79,"line":12189},[77,44679,40592],{"class":87},[77,44681,44682,44684,44687,44689],{"class":79,"line":12214},[77,44683,33313],{"class":94},[77,44685,44686],{"class":87},".b3",[77,44688,268],{"class":2123},[77,44690,40475],{"class":87},[77,44692,44693,44696,44698,44700,44702,44705,44707,44709,44711,44714,44716,44718,44720,44723,44725],{"class":79,"line":12237},[77,44694,44695],{"class":87},"            Inception(",[77,44697,44625],{"class":94},[77,44699,2992],{"class":87},[77,44701,2819],{"class":94},[77,44703,44704],{"class":87},",(",[77,44706,2825],{"class":94},[77,44708,2992],{"class":87},[77,44710,34537],{"class":94},[77,44712,44713],{"class":87},"),(",[77,44715,3214],{"class":94},[77,44717,2992],{"class":87},[77,44719,2813],{"class":94},[77,44721,44722],{"class":87},"),",[77,44724,2813],{"class":94},[77,44726,40513],{"class":87},[77,44728,44729,44731,44733,44735,44737,44739,44741,44743,44745,44747,44749,44751,44753,44755,44757],{"class":79,"line":12261},[77,44730,44695],{"class":87},[77,44732,37336],{"class":94},[77,44734,2992],{"class":87},[77,44736,34537],{"class":94},[77,44738,44704],{"class":87},[77,44740,34537],{"class":94},[77,44742,2992],{"class":87},[77,44744,44625],{"class":94},[77,44746,44713],{"class":87},[77,44748,2813],{"class":94},[77,44750,2992],{"class":87},[77,44752,2825],{"class":94},[77,44754,44722],{"class":87},[77,44756,2819],{"class":94},[77,44758,40513],{"class":87},[77,44760,44761,44763,44765,44767,44769,44771,44773,44775,44777,44779,44781,44783,44785],{"class":79,"line":12266},[77,44762,40563],{"class":87},[77,44764,33342],{"class":7691},[77,44766,268],{"class":2123},[77,44768,2690],{"class":94},[77,44770,2992],{"class":87},[77,44772,33396],{"class":7691},[77,44774,268],{"class":2123},[77,44776,2696],{"class":94},[77,44778,2992],{"class":87},[77,44780,1196],{"class":7691},[77,44782,268],{"class":2123},[77,44784,2120],{"class":94},[77,44786,2628],{"class":87},[77,44788,44789],{"class":79,"line":12271},[77,44790,40592],{"class":87},[77,44792,44793,44795,44798,44800],{"class":79,"line":12276},[77,44794,33313],{"class":94},[77,44796,44797],{"class":87},".b4",[77,44799,268],{"class":2123},[77,44801,40475],{"class":87},[77,44803,44804,44806,44809,44811,44813,44815,44817,44819,44822,44824,44826,44828,44830,44832,44834],{"class":79,"line":12285},[77,44805,44695],{"class":87},[77,44807,44808],{"class":94},"480",[77,44810,2992],{"class":87},[77,44812,44625],{"class":94},[77,44814,44704],{"class":87},[77,44816,2825],{"class":94},[77,44818,2992],{"class":87},[77,44820,44821],{"class":94},"208",[77,44823,44713],{"class":87},[77,44825,3214],{"class":94},[77,44827,2992],{"class":87},[77,44829,3220],{"class":94},[77,44831,44722],{"class":87},[77,44833,2819],{"class":94},[77,44835,40513],{"class":87},[77,44837,44838,44840,44842,44844,44846,44848,44850,44852,44854,44856,44858,44860,44862,44864,44866],{"class":79,"line":12290},[77,44839,44695],{"class":87},[77,44841,40923],{"class":94},[77,44843,2992],{"class":87},[77,44845,23518],{"class":94},[77,44847,44704],{"class":87},[77,44849,3231],{"class":94},[77,44851,2992],{"class":87},[77,44853,33968],{"class":94},[77,44855,44713],{"class":87},[77,44857,3413],{"class":94},[77,44859,2992],{"class":87},[77,44861,2819],{"class":94},[77,44863,44722],{"class":87},[77,44865,2819],{"class":94},[77,44867,40513],{"class":87},[77,44869,44870,44872,44874,44876,44878,44880,44882,44884,44886,44888,44890,44892,44894,44896,44898],{"class":79,"line":12296},[77,44871,44695],{"class":87},[77,44873,40923],{"class":94},[77,44875,2992],{"class":87},[77,44877,34537],{"class":94},[77,44879,44704],{"class":87},[77,44881,34537],{"class":94},[77,44883,2992],{"class":87},[77,44885,37336],{"class":94},[77,44887,44713],{"class":87},[77,44889,3413],{"class":94},[77,44891,2992],{"class":87},[77,44893,2819],{"class":94},[77,44895,44722],{"class":87},[77,44897,2819],{"class":94},[77,44899,40513],{"class":87},[77,44901,44902,44904,44906,44908,44910,44912,44914,44916,44919,44921,44923,44925,44927,44929,44931],{"class":79,"line":12317},[77,44903,44695],{"class":87},[77,44905,40923],{"class":94},[77,44907,2992],{"class":87},[77,44909,3231],{"class":94},[77,44911,44704],{"class":87},[77,44913,34537],{"class":94},[77,44915,2992],{"class":87},[77,44917,44918],{"class":94},"288",[77,44920,44713],{"class":87},[77,44922,2813],{"class":94},[77,44924,2992],{"class":87},[77,44926,2819],{"class":94},[77,44928,44722],{"class":87},[77,44930,2819],{"class":94},[77,44932,40513],{"class":87},[77,44934,44935,44937,44940,44942,44944,44946,44948,44950,44953,44955,44957,44959,44961,44963,44965],{"class":79,"line":12323},[77,44936,44695],{"class":87},[77,44938,44939],{"class":94},"528",[77,44941,2992],{"class":87},[77,44943,37336],{"class":94},[77,44945,44704],{"class":87},[77,44947,23518],{"class":94},[77,44949,2992],{"class":87},[77,44951,44952],{"class":94},"320",[77,44954,44713],{"class":87},[77,44956,2813],{"class":94},[77,44958,2992],{"class":87},[77,44960,34537],{"class":94},[77,44962,44722],{"class":87},[77,44964,34537],{"class":94},[77,44966,40513],{"class":87},[77,44968,44969,44971,44973,44975,44977,44979,44981,44983,44985,44987,44989,44991,44993],{"class":79,"line":12337},[77,44970,40563],{"class":87},[77,44972,33342],{"class":7691},[77,44974,268],{"class":2123},[77,44976,2690],{"class":94},[77,44978,2992],{"class":87},[77,44980,33396],{"class":7691},[77,44982,268],{"class":2123},[77,44984,2696],{"class":94},[77,44986,2992],{"class":87},[77,44988,1196],{"class":7691},[77,44990,268],{"class":2123},[77,44992,2120],{"class":94},[77,44994,2628],{"class":87},[77,44996,44997],{"class":79,"line":12343},[77,44998,40592],{"class":87},[77,45000,45001,45003,45006,45008],{"class":79,"line":12370},[77,45002,33313],{"class":94},[77,45004,45005],{"class":87},".b5",[77,45007,268],{"class":2123},[77,45009,40475],{"class":87},[77,45011,45012,45014,45017,45019,45021,45023,45025,45027,45029,45031,45033,45035,45037,45039,45041],{"class":79,"line":12379},[77,45013,44695],{"class":87},[77,45015,45016],{"class":94},"832",[77,45018,2992],{"class":87},[77,45020,37336],{"class":94},[77,45022,44704],{"class":87},[77,45024,23518],{"class":94},[77,45026,2992],{"class":87},[77,45028,44952],{"class":94},[77,45030,44713],{"class":87},[77,45032,2813],{"class":94},[77,45034,2992],{"class":87},[77,45036,34537],{"class":94},[77,45038,44722],{"class":87},[77,45040,34537],{"class":94},[77,45042,40513],{"class":87},[77,45044,45045,45047,45049,45051,45053,45055,45057,45059,45061,45063,45065,45067,45069,45071,45073],{"class":79,"line":12385},[77,45046,44695],{"class":87},[77,45048,45016],{"class":94},[77,45050,2992],{"class":87},[77,45052,37406],{"class":94},[77,45054,44704],{"class":87},[77,45056,44625],{"class":94},[77,45058,2992],{"class":87},[77,45060,37406],{"class":94},[77,45062,44713],{"class":87},[77,45064,3220],{"class":94},[77,45066,2992],{"class":87},[77,45068,34537],{"class":94},[77,45070,44722],{"class":87},[77,45072,34537],{"class":94},[77,45074,40513],{"class":87},[77,45076,45077,45080,45082,45084,45086],{"class":79,"line":12393},[77,45078,45079],{"class":87},"            nn.AdaptiveAvgPool2d((",[77,45081,2120],{"class":94},[77,45083,2992],{"class":87},[77,45085,2120],{"class":94},[77,45087,45088],{"class":87},")),\n",[77,45090,45091],{"class":79,"line":12398},[77,45092,41256],{"class":87},[77,45094,45095,45097,45100,45102,45104],{"class":79,"line":19074},[77,45096,41261],{"class":87},[77,45098,45099],{"class":94},"1024",[77,45101,2992],{"class":87},[77,45103,3059],{"class":94},[77,45105,2628],{"class":87},[77,45107,45108],{"class":79,"line":19080},[77,45109,40592],{"class":87},[77,45111,45112],{"class":79,"line":19103},[77,45113,45114],{"class":323},"        # 对模型参数初始化\n",[77,45116,45117,45119,45121,45123,45125],{"class":79,"line":19109},[77,45118,5878],{"class":2123},[77,45120,41334],{"class":87},[77,45122,28511],{"class":2123},[77,45124,41339],{"class":94},[77,45126,41342],{"class":87},[77,45128,45129,45131,45133],{"class":79,"line":19132},[77,45130,7117],{"class":2123},[77,45132,41354],{"class":94},[77,45134,41357],{"class":87},[77,45136,45137,45139,45142,45144,45147,45149,45151,45153,45155],{"class":79,"line":19146},[77,45138,41367],{"class":87},[77,45140,45141],{"class":7691},"mode",[77,45143,268],{"class":2123},[77,45145,45146],{"class":271},"'fan_out'",[77,45148,2992],{"class":87},[77,45150,41370],{"class":7691},[77,45152,268],{"class":2123},[77,45154,41375],{"class":271},[77,45156,2628],{"class":87},[77,45158,45159],{"class":79,"line":19166},[77,45160,45161],{"class":323},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[77,45163,45164],{"class":79,"line":19172},[77,45165,45166],{"class":323},"                # ② mode = 'fan_out'决定使用的fan值：\n",[77,45168,45169],{"class":79,"line":19183},[77,45170,45171],{"class":323},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[77,45173,45174],{"class":79,"line":19206},[77,45175,45176],{"class":323},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[77,45178,45179],{"class":79,"line":19228},[77,45180,45181],{"class":323},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[77,45183,45184],{"class":79,"line":19233},[77,45185,45186],{"class":323},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[77,45188,45189,45191,45193,45195,45197,45199],{"class":79,"line":19239},[77,45190,41387],{"class":2123},[77,45192,41390],{"class":87},[77,45194,41393],{"class":2123},[77,45196,41396],{"class":2123},[77,45198,41399],{"class":94},[77,45200,6214],{"class":87},[77,45202,45203,45205,45207],{"class":79,"line":19253},[77,45204,41411],{"class":87},[77,45206,1939],{"class":94},[77,45208,2628],{"class":87},[77,45210,45211,45214,45216],{"class":79,"line":19266},[77,45212,45213],{"class":2123},"                elif",[77,45215,41354],{"class":94},[77,45217,41430],{"class":87},[77,45219,45220,45223,45225,45227,45229],{"class":79,"line":19271},[77,45221,45222],{"class":87},"                    nn.init.normal_(m.weight,",[77,45224,1939],{"class":94},[77,45226,2992],{"class":87},[77,45228,41452],{"class":94},[77,45230,2628],{"class":87},[77,45232,45233,45236,45238,45240,45242,45244],{"class":79,"line":19285},[77,45234,45235],{"class":2123},"                    if",[77,45237,41390],{"class":87},[77,45239,41393],{"class":2123},[77,45241,41396],{"class":2123},[77,45243,41399],{"class":94},[77,45245,6214],{"class":87},[77,45247,45248,45251,45253],{"class":79,"line":19290},[77,45249,45250],{"class":87},"                        nn.init.constant_(m.bias,",[77,45252,1939],{"class":94},[77,45254,2628],{"class":87},[77,45256,45257],{"class":79,"line":19296},[77,45258,37631],{"class":323},[77,45260,45261,45263,45265],{"class":79,"line":19301},[77,45262,33269],{"class":2123},[77,45264,33560],{"class":83},[77,45266,33563],{"class":87},[77,45268,45269,45271,45273,45275],{"class":79,"line":19315},[77,45270,33568],{"class":87},[77,45272,268],{"class":2123},[77,45274,33291],{"class":94},[77,45276,45277],{"class":87},".b1(x)\n",[77,45279,45280,45282,45284,45286],{"class":79,"line":19320},[77,45281,33568],{"class":87},[77,45283,268],{"class":2123},[77,45285,33291],{"class":94},[77,45287,45288],{"class":87},".b2(x)\n",[77,45290,45291,45293,45295,45297],{"class":79,"line":19325},[77,45292,33568],{"class":87},[77,45294,268],{"class":2123},[77,45296,33291],{"class":94},[77,45298,45299],{"class":87},".b3(x)\n",[77,45301,45302,45304,45306,45308],{"class":79,"line":19339},[77,45303,33568],{"class":87},[77,45305,268],{"class":2123},[77,45307,33291],{"class":94},[77,45309,45310],{"class":87},".b4(x)\n",[77,45312,45313,45315,45317,45319],{"class":79,"line":19351},[77,45314,33568],{"class":87},[77,45316,268],{"class":2123},[77,45318,33291],{"class":94},[77,45320,45321],{"class":87},".b5(x)\n",[77,45323,45324,45326],{"class":79,"line":19356},[77,45325,17224],{"class":2123},[77,45327,33676],{"class":87},[77,45329,45330],{"class":79,"line":19369},[77,45331,4875],{"emptyLinePlaceholder":2549},[77,45333,45334],{"class":79,"line":19374},[77,45335,45336],{"class":323},"# 模型展示\n",[77,45338,45339,45341,45343,45345,45347],{"class":79,"line":19379},[77,45340,4008],{"class":2123},[77,45342,33687],{"class":94},[77,45344,5424],{"class":2123},[77,45346,33692],{"class":271},[77,45348,6214],{"class":87},[77,45350,45351,45353,45355,45357,45359,45361,45363,45365,45367],{"class":79,"line":19384},[77,45352,33704],{"class":87},[77,45354,268],{"class":2123},[77,45356,32919],{"class":87},[77,45358,33711],{"class":271},[77,45360,4180],{"class":2123},[77,45362,33716],{"class":87},[77,45364,4177],{"class":2123},[77,45366,32944],{"class":271},[77,45368,2628],{"class":87},[77,45370,45371,45373,45375],{"class":79,"line":19397},[77,45372,33756],{"class":87},[77,45374,268],{"class":2123},[77,45376,45377],{"class":87},"GoogLeNet(Inception).to(device)\n",[77,45379,45380,45382,45384,45386,45388,45390,45392,45394],{"class":79,"line":19402},[77,45381,33766],{"class":94},[77,45383,33769],{"class":87},[77,45385,2120],{"class":94},[77,45387,2992],{"class":87},[77,45389,33968],{"class":94},[77,45391,2992],{"class":87},[77,45393,33968],{"class":94},[77,45395,33782],{"class":87},[139,45397,45398],{"start":91},[54,45399,41649],{},[67,45401,45403],{"className":32846,"code":45402,"language":32848,"meta":72,"style":72},"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",[74,45404,45405,45411,45417,45427,45433,45443,45453,45463,45473,45483,45487,45498,45508,45512,45516,45520,45528,45540,45550,45566,45576,45608,45622,45632,45642,45646,45656,45670,45680,45690,45700,45706,45710,45714,45718,45722,45726,45734,45754,45758,45762,45766,45770,45774,45790,45794,45798,45806,45810,45814,45822,45826,45830,45834,45842,45846,45850,45854,45858,45866,45870,45878,45882,45890,45894,45902,45906,45914,45918,45922,45930,45934,45938,45942,45954,45978,45992,45996,46000,46004,46012,46016,46024,46028,46036,46040,46048,46052,46060,46064,46072,46076,46088,46092,46100,46104,46112,46116,46120,46124,46128,46136,46140,46156,46160,46168,46172,46176,46180,46184,46188,46192,46196,46212,46216,46228,46232,46244,46248,46260,46264,46272,46276,46284,46288,46292,46296,46302,46306,46314,46318,46334,46338,46346,46350,46366,46378,46382,46394,46398,46402,46410,46414,46418,46426,46430,46438,46442,46450,46454,46458,46500,46542,46546,46550,46566,46570,46586,46590,46594,46602,46606,46610,46622,46660,46664,46668,46676,46680,46694,46704,46710,46716,46722,46728,46732,46736,46742,46746,46750,46758,46762,46780,46784,46788,46792,46808,46812,46816,46820,46824,46828,46848,46868,46872,46876,46880,46888,46896,46900,46916,46936,46956,46960,46964,46972,46980,46984,46988,46992,47004,47008,47018,47026,47043],{"__ignoreMap":72},[77,45406,45407,45409],{"class":79,"line":80},[77,45408,32860],{"class":2123},[77,45410,34289],{"class":87},[77,45412,45413,45415],{"class":79,"line":91},[77,45414,32860],{"class":2123},[77,45416,34296],{"class":87},[77,45418,45419,45421,45423,45425],{"class":79,"line":107},[77,45420,32860],{"class":2123},[77,45422,34307],{"class":87},[77,45424,33850],{"class":2123},[77,45426,34312],{"class":87},[77,45428,45429,45431],{"class":79,"line":191},[77,45430,32860],{"class":2123},[77,45432,32863],{"class":87},[77,45434,45435,45437,45439,45441],{"class":79,"line":1543},[77,45436,33205],{"class":2123},[77,45438,33882],{"class":87},[77,45440,32860],{"class":2123},[77,45442,34329],{"class":87},[77,45444,45445,45447,45449,45451],{"class":79,"line":1549},[77,45446,33205],{"class":2123},[77,45448,33835],{"class":87},[77,45450,32860],{"class":2123},[77,45452,33840],{"class":87},[77,45454,45455,45457,45459,45461],{"class":79,"line":1566},[77,45456,33205],{"class":2123},[77,45458,33865],{"class":87},[77,45460,32860],{"class":2123},[77,45462,33870],{"class":87},[77,45464,45465,45467,45469,45471],{"class":79,"line":1572},[77,45466,32860],{"class":2123},[77,45468,33882],{"class":87},[77,45470,33850],{"class":2123},[77,45472,33887],{"class":87},[77,45474,45475,45477,45479,45481],{"class":79,"line":1589},[77,45476,32860],{"class":2123},[77,45478,33899],{"class":87},[77,45480,33850],{"class":2123},[77,45482,33904],{"class":87},[77,45484,45485],{"class":79,"line":1595},[77,45486,34374],{"class":323},[77,45488,45489,45491,45493,45495],{"class":79,"line":4088},[77,45490,33205],{"class":2123},[77,45492,34381],{"class":87},[77,45494,32860],{"class":2123},[77,45496,45497],{"class":87}," GoogLeNet, Inception\n",[77,45499,45500,45502,45504,45506],{"class":79,"line":4093},[77,45501,33205],{"class":2123},[77,45503,33208],{"class":87},[77,45505,32860],{"class":2123},[77,45507,33213],{"class":87},[77,45509,45510],{"class":79,"line":4099},[77,45511,4875],{"emptyLinePlaceholder":2549},[77,45513,45514],{"class":79,"line":4104},[77,45515,4875],{"emptyLinePlaceholder":2549},[77,45517,45518],{"class":79,"line":4118},[77,45519,34409],{"class":323},[77,45521,45522,45524,45526],{"class":79,"line":4123},[77,45523,34414],{"class":2123},[77,45525,34417],{"class":83},[77,45527,34420],{"class":87},[77,45529,45530,45532,45534,45536,45538],{"class":79,"line":4129},[77,45531,34425],{"class":87},[77,45533,268],{"class":2123},[77,45535,33922],{"class":87},[77,45537,33930],{"class":271},[77,45539,33933],{"class":87},[77,45541,45542,45544,45546,45548],{"class":79,"line":4150},[77,45543,34438],{"class":7691},[77,45545,268],{"class":2123},[77,45547,33943],{"class":94},[77,45549,33933],{"class":87},[77,45551,45552,45554,45556,45558,45560,45562,45564],{"class":79,"line":4155},[77,45553,34449],{"class":7691},[77,45555,268],{"class":2123},[77,45557,33960],{"class":87},[77,45559,33963],{"class":7691},[77,45561,268],{"class":2123},[77,45563,37915],{"class":94},[77,45565,33971],{"class":87},[77,45567,45568,45570,45572,45574],{"class":79,"line":4169},[77,45569,34466],{"class":7691},[77,45571,268],{"class":2123},[77,45573,33943],{"class":94},[77,45575,2628],{"class":87},[77,45577,45578,45580,45582,45584,45586,45588,45590,45592,45594,45596,45598,45600,45602,45604,45606],{"class":79,"line":4174},[77,45579,34477],{"class":87},[77,45581,268],{"class":2123},[77,45583,34482],{"class":87},[77,45585,34485],{"class":94},[77,45587,2622],{"class":87},[77,45589,34490],{"class":94},[77,45591,3068],{"class":2123},[77,45593,9833],{"class":94},[77,45595,34497],{"class":87},[77,45597,34485],{"class":94},[77,45599,2622],{"class":87},[77,45601,34504],{"class":94},[77,45603,3068],{"class":2123},[77,45605,9833],{"class":94},[77,45607,34511],{"class":87},[77,45609,45610,45612,45614,45616,45618,45620],{"class":79,"line":4203},[77,45611,34516],{"class":87},[77,45613,268],{"class":2123},[77,45615,34521],{"class":87},[77,45617,34004],{"class":7691},[77,45619,268],{"class":2123},[77,45621,34009],{"class":87},[77,45623,45624,45626,45628,45630],{"class":79,"line":4208},[77,45625,34532],{"class":7691},[77,45627,268],{"class":2123},[77,45629,2813],{"class":94},[77,45631,33933],{"class":87},[77,45633,45634,45636,45638,45640],{"class":79,"line":4225},[77,45635,34544],{"class":7691},[77,45637,268],{"class":2123},[77,45639,33943],{"class":94},[77,45641,33933],{"class":87},[77,45643,45644],{"class":79,"line":4230},[77,45645,34555],{"class":323},[77,45647,45648,45650,45652,45654],{"class":79,"line":4235},[77,45649,34560],{"class":7691},[77,45651,268],{"class":2123},[77,45653,3009],{"class":94},[77,45655,2628],{"class":87},[77,45657,45658,45660,45662,45664,45666,45668],{"class":79,"line":4240},[77,45659,34571],{"class":87},[77,45661,268],{"class":2123},[77,45663,34001],{"class":87},[77,45665,34004],{"class":7691},[77,45667,268],{"class":2123},[77,45669,34582],{"class":87},[77,45671,45672,45674,45676,45678],{"class":79,"line":4254},[77,45673,34587],{"class":7691},[77,45675,268],{"class":2123},[77,45677,2813],{"class":94},[77,45679,33933],{"class":87},[77,45681,45682,45684,45686,45688],{"class":79,"line":4259},[77,45683,34598],{"class":7691},[77,45685,268],{"class":2123},[77,45687,33943],{"class":94},[77,45689,33933],{"class":87},[77,45691,45692,45694,45696,45698],{"class":79,"line":5052},[77,45693,34609],{"class":7691},[77,45695,268],{"class":2123},[77,45697,3009],{"class":94},[77,45699,2628],{"class":87},[77,45701,45702,45704],{"class":79,"line":5066},[77,45703,6565],{"class":2123},[77,45705,34622],{"class":87},[77,45707,45708],{"class":79,"line":5074},[77,45709,4875],{"emptyLinePlaceholder":2549},[77,45711,45712],{"class":79,"line":5079},[77,45713,34631],{"class":323},[77,45715,45716],{"class":79,"line":5085},[77,45717,34636],{"class":323},[77,45719,45720],{"class":79,"line":5091},[77,45721,4875],{"emptyLinePlaceholder":2549},[77,45723,45724],{"class":79,"line":5096},[77,45725,34645],{"class":323},[77,45727,45728,45730,45732],{"class":79,"line":10422},[77,45729,34414],{"class":2123},[77,45731,34652],{"class":83},[77,45733,34655],{"class":87},[77,45735,45736,45738,45740,45742,45744,45746,45748,45750,45752],{"class":79,"line":10446},[77,45737,33704],{"class":87},[77,45739,268],{"class":2123},[77,45741,32919],{"class":87},[77,45743,33711],{"class":271},[77,45745,4180],{"class":2123},[77,45747,33716],{"class":87},[77,45749,4177],{"class":2123},[77,45751,34674],{"class":271},[77,45753,2628],{"class":87},[77,45755,45756],{"class":79,"line":10451},[77,45757,4875],{"emptyLinePlaceholder":2549},[77,45759,45760],{"class":79,"line":10457},[77,45761,4875],{"emptyLinePlaceholder":2549},[77,45763,45764],{"class":79,"line":10484},[77,45765,34689],{"class":323},[77,45767,45768],{"class":79,"line":10489},[77,45769,34694],{"class":323},[77,45771,45772],{"class":79,"line":10495},[77,45773,34699],{"class":323},[77,45775,45776,45778,45780,45782,45784,45786,45788],{"class":79,"line":10507},[77,45777,34704],{"class":87},[77,45779,268],{"class":2123},[77,45781,34709],{"class":87},[77,45783,34712],{"class":7691},[77,45785,268],{"class":2123},[77,45787,34717],{"class":94},[77,45789,2628],{"class":87},[77,45791,45792],{"class":79,"line":10519},[77,45793,4875],{"emptyLinePlaceholder":2549},[77,45795,45796],{"class":79,"line":10531},[77,45797,34728],{"class":323},[77,45799,45800,45802,45804],{"class":79,"line":12189},[77,45801,34733],{"class":87},[77,45803,268],{"class":2123},[77,45805,34738],{"class":87},[77,45807,45808],{"class":79,"line":12214},[77,45809,4875],{"emptyLinePlaceholder":2549},[77,45811,45812],{"class":79,"line":12237},[77,45813,34747],{"class":323},[77,45815,45816,45818,45820],{"class":79,"line":12261},[77,45817,33756],{"class":87},[77,45819,268],{"class":2123},[77,45821,34756],{"class":87},[77,45823,45824],{"class":79,"line":12266},[77,45825,34761],{"class":323},[77,45827,45828],{"class":79,"line":12271},[77,45829,34766],{"class":323},[77,45831,45832],{"class":79,"line":12276},[77,45833,34771],{"class":323},[77,45835,45836,45838,45840],{"class":79,"line":12285},[77,45837,34776],{"class":87},[77,45839,268],{"class":2123},[77,45841,34781],{"class":87},[77,45843,45844],{"class":79,"line":12290},[77,45845,4875],{"emptyLinePlaceholder":2549},[77,45847,45848],{"class":79,"line":12296},[77,45849,4875],{"emptyLinePlaceholder":2549},[77,45851,45852],{"class":79,"line":12317},[77,45853,34794],{"class":323},[77,45855,45856],{"class":79,"line":12323},[77,45857,34799],{"class":323},[77,45859,45860,45862,45864],{"class":79,"line":12337},[77,45861,34804],{"class":87},[77,45863,268],{"class":2123},[77,45865,34809],{"class":94},[77,45867,45868],{"class":79,"line":12343},[77,45869,34814],{"class":323},[77,45871,45872,45874,45876],{"class":79,"line":12370},[77,45873,34819],{"class":87},[77,45875,268],{"class":2123},[77,45877,34824],{"class":87},[77,45879,45880],{"class":79,"line":12379},[77,45881,34829],{"class":323},[77,45883,45884,45886,45888],{"class":79,"line":12385},[77,45885,34834],{"class":87},[77,45887,268],{"class":2123},[77,45889,34824],{"class":87},[77,45891,45892],{"class":79,"line":12393},[77,45893,34843],{"class":323},[77,45895,45896,45898,45900],{"class":79,"line":12398},[77,45897,34848],{"class":87},[77,45899,268],{"class":2123},[77,45901,34824],{"class":87},[77,45903,45904],{"class":79,"line":19074},[77,45905,34857],{"class":323},[77,45907,45908,45910,45912],{"class":79,"line":19080},[77,45909,34862],{"class":87},[77,45911,268],{"class":2123},[77,45913,34824],{"class":87},[77,45915,45916],{"class":79,"line":19103},[77,45917,4875],{"emptyLinePlaceholder":2549},[77,45919,45920],{"class":79,"line":19109},[77,45921,34875],{"class":323},[77,45923,45924,45926,45928],{"class":79,"line":19132},[77,45925,34880],{"class":87},[77,45927,268],{"class":2123},[77,45929,34885],{"class":87},[77,45931,45932],{"class":79,"line":19146},[77,45933,4875],{"emptyLinePlaceholder":2549},[77,45935,45936],{"class":79,"line":19166},[77,45937,4875],{"emptyLinePlaceholder":2549},[77,45939,45940],{"class":79,"line":19172},[77,45941,34898],{"class":323},[77,45943,45944,45946,45948,45950,45952],{"class":79,"line":19183},[77,45945,5676],{"class":2123},[77,45947,34905],{"class":87},[77,45949,28511],{"class":2123},[77,45951,34910],{"class":94},[77,45953,34913],{"class":87},[77,45955,45956,45958,45960,45962,45964,45966,45968,45970,45972,45974,45976],{"class":79,"line":19206},[77,45957,34918],{"class":94},[77,45959,2622],{"class":87},[77,45961,34923],{"class":271},[77,45963,34926],{"class":94},[77,45965,3197],{"class":271},[77,45967,34926],{"class":94},[77,45969,2865],{"class":271},[77,45971,34935],{"class":87},[77,45973,3145],{"class":2123},[77,45975,2120],{"class":94},[77,45977,32965],{"class":87},[77,45979,45980,45982,45984,45986,45988,45990],{"class":79,"line":19228},[77,45981,34918],{"class":94},[77,45983,2622],{"class":87},[77,45985,34950],{"class":271},[77,45987,3068],{"class":2123},[77,45989,3059],{"class":94},[77,45991,2628],{"class":87},[77,45993,45994],{"class":79,"line":19233},[77,45995,4875],{"emptyLinePlaceholder":2549},[77,45997,45998],{"class":79,"line":19239},[77,45999,34965],{"class":323},[77,46001,46002],{"class":79,"line":19253},[77,46003,34970],{"class":323},[77,46005,46006,46008,46010],{"class":79,"line":19266},[77,46007,34975],{"class":87},[77,46009,268],{"class":2123},[77,46011,34809],{"class":94},[77,46013,46014],{"class":79,"line":19271},[77,46015,34984],{"class":323},[77,46017,46018,46020,46022],{"class":79,"line":19285},[77,46019,34989],{"class":87},[77,46021,268],{"class":2123},[77,46023,5560],{"class":94},[77,46025,46026],{"class":79,"line":19290},[77,46027,34998],{"class":323},[77,46029,46030,46032,46034],{"class":79,"line":19296},[77,46031,35003],{"class":87},[77,46033,268],{"class":2123},[77,46035,34809],{"class":94},[77,46037,46038],{"class":79,"line":19301},[77,46039,35012],{"class":323},[77,46041,46042,46044,46046],{"class":79,"line":19315},[77,46043,35017],{"class":87},[77,46045,268],{"class":2123},[77,46047,5560],{"class":94},[77,46049,46050],{"class":79,"line":19320},[77,46051,35026],{"class":323},[77,46053,46054,46056,46058],{"class":79,"line":19325},[77,46055,35031],{"class":87},[77,46057,268],{"class":2123},[77,46059,5560],{"class":94},[77,46061,46062],{"class":79,"line":19339},[77,46063,35040],{"class":323},[77,46065,46066,46068,46070],{"class":79,"line":19351},[77,46067,35045],{"class":87},[77,46069,268],{"class":2123},[77,46071,5560],{"class":94},[77,46073,46074],{"class":79,"line":19356},[77,46075,35054],{"class":323},[77,46077,46078,46080,46082,46084,46086],{"class":79,"line":19369},[77,46079,5878],{"class":2123},[77,46081,34068],{"class":87},[77,46083,28511],{"class":2123},[77,46085,34073],{"class":94},[77,46087,35067],{"class":87},[77,46089,46090],{"class":79,"line":19374},[77,46091,35072],{"class":323},[77,46093,46094,46096,46098],{"class":79,"line":19379},[77,46095,35077],{"class":87},[77,46097,268],{"class":2123},[77,46099,35082],{"class":87},[77,46101,46102],{"class":79,"line":19384},[77,46103,35087],{"class":323},[77,46105,46106,46108,46110],{"class":79,"line":19397},[77,46107,35092],{"class":87},[77,46109,268],{"class":2123},[77,46111,35097],{"class":87},[77,46113,46114],{"class":79,"line":19402},[77,46115,35103],{"class":323},[77,46117,46118],{"class":79,"line":35100},[77,46119,35109],{"class":87},[77,46121,46122],{"class":79,"line":35106},[77,46123,35115],{"class":323},[77,46125,46126],{"class":79,"line":35112},[77,46127,35121],{"class":323},[77,46129,46130,46132,46134],{"class":79,"line":35118},[77,46131,35127],{"class":87},[77,46133,268],{"class":2123},[77,46135,35132],{"class":87},[77,46137,46138],{"class":79,"line":35124},[77,46139,35138],{"class":323},[77,46141,46142,46144,46146,46148,46150,46152,46154],{"class":79,"line":35135},[77,46143,35144],{"class":87},[77,46145,268],{"class":2123},[77,46147,35149],{"class":87},[77,46149,35152],{"class":7691},[77,46151,268],{"class":2123},[77,46153,2120],{"class":94},[77,46155,2628],{"class":87},[77,46157,46158],{"class":79,"line":35141},[77,46159,35164],{"class":323},[77,46161,46162,46164,46166],{"class":79,"line":35161},[77,46163,35170],{"class":87},[77,46165,268],{"class":2123},[77,46167,35175],{"class":87},[77,46169,46170],{"class":79,"line":35167},[77,46171,35181],{"class":323},[77,46173,46174],{"class":79,"line":35178},[77,46175,35187],{"class":87},[77,46177,46178],{"class":79,"line":35184},[77,46179,35193],{"class":323},[77,46181,46182],{"class":79,"line":35190},[77,46183,35199],{"class":87},[77,46185,46186],{"class":79,"line":35196},[77,46187,35205],{"class":323},[77,46189,46190],{"class":79,"line":35202},[77,46191,35211],{"class":87},[77,46193,46194],{"class":79,"line":35208},[77,46195,35217],{"class":323},[77,46197,46198,46200,46202,46204,46206,46208,46210],{"class":79,"line":35214},[77,46199,35223],{"class":87},[77,46201,11950],{"class":2123},[77,46203,35228],{"class":87},[77,46205,3068],{"class":2123},[77,46207,35233],{"class":87},[77,46209,1939],{"class":94},[77,46211,2628],{"class":87},[77,46213,46214],{"class":79,"line":35220},[77,46215,35243],{"class":323},[77,46217,46218,46220,46222,46224,46226],{"class":79,"line":35240},[77,46219,35249],{"class":87},[77,46221,11950],{"class":2123},[77,46223,35254],{"class":87},[77,46225,5424],{"class":2123},[77,46227,35259],{"class":87},[77,46229,46230],{"class":79,"line":35246},[77,46231,35265],{"class":323},[77,46233,46234,46236,46238,46240,46242],{"class":79,"line":35262},[77,46235,35271],{"class":87},[77,46237,11950],{"class":2123},[77,46239,35233],{"class":87},[77,46241,1939],{"class":94},[77,46243,2628],{"class":87},[77,46245,46246],{"class":79,"line":35268},[77,46247,35285],{"class":323},[77,46249,46250,46252,46254,46256,46258],{"class":79,"line":35282},[77,46251,5878],{"class":2123},[77,46253,35293],{"class":87},[77,46255,28511],{"class":2123},[77,46257,34073],{"class":94},[77,46259,35300],{"class":87},[77,46261,46262],{"class":79,"line":35288},[77,46263,35306],{"class":323},[77,46265,46266,46268,46270],{"class":79,"line":35303},[77,46267,35077],{"class":87},[77,46269,268],{"class":2123},[77,46271,35082],{"class":87},[77,46273,46274],{"class":79,"line":35309},[77,46275,35321],{"class":323},[77,46277,46278,46280,46282],{"class":79,"line":35318},[77,46279,35092],{"class":87},[77,46281,268],{"class":2123},[77,46283,35097],{"class":87},[77,46285,46286],{"class":79,"line":35324},[77,46287,35336],{"class":323},[77,46289,46290],{"class":79,"line":35333},[77,46291,35342],{"class":87},[77,46293,46294],{"class":79,"line":35339},[77,46295,38822],{"class":323},[77,46297,46298,46300],{"class":79,"line":35345},[77,46299,35348],{"class":2123},[77,46301,35351],{"class":87},[77,46303,46304],{"class":79,"line":35354},[77,46305,35357],{"class":323},[77,46307,46308,46310,46312],{"class":79,"line":35360},[77,46309,38837],{"class":87},[77,46311,268],{"class":2123},[77,46313,35132],{"class":87},[77,46315,46316],{"class":79,"line":35371},[77,46317,35374],{"class":323},[77,46319,46320,46322,46324,46326,46328,46330,46332],{"class":79,"line":35377},[77,46321,38850],{"class":87},[77,46323,268],{"class":2123},[77,46325,35149],{"class":87},[77,46327,35152],{"class":7691},[77,46329,268],{"class":2123},[77,46331,2120],{"class":94},[77,46333,2628],{"class":87},[77,46335,46336],{"class":79,"line":35396},[77,46337,35399],{"class":323},[77,46339,46340,46342,46344],{"class":79,"line":35402},[77,46341,38871],{"class":87},[77,46343,268],{"class":2123},[77,46345,35175],{"class":87},[77,46347,46348],{"class":79,"line":35413},[77,46349,35416],{"class":323},[77,46351,46352,46354,46356,46358,46360,46362,46364],{"class":79,"line":35419},[77,46353,38884],{"class":87},[77,46355,11950],{"class":2123},[77,46357,38889],{"class":87},[77,46359,3068],{"class":2123},[77,46361,35233],{"class":87},[77,46363,1939],{"class":94},[77,46365,2628],{"class":87},[77,46367,46368,46370,46372,46374,46376],{"class":79,"line":35439},[77,46369,38902],{"class":87},[77,46371,11950],{"class":2123},[77,46373,35254],{"class":87},[77,46375,5424],{"class":2123},[77,46377,35259],{"class":87},[77,46379,46380],{"class":79,"line":35455},[77,46381,38915],{"class":323},[77,46383,46384,46386,46388,46390,46392],{"class":79,"line":35461},[77,46385,38920],{"class":87},[77,46387,11950],{"class":2123},[77,46389,35233],{"class":87},[77,46391,1939],{"class":94},[77,46393,2628],{"class":87},[77,46395,46396],{"class":79,"line":35475},[77,46397,35478],{"class":323},[77,46399,46400],{"class":79,"line":35481},[77,46401,35484],{"class":323},[77,46403,46404,46406,46408],{"class":79,"line":35487},[77,46405,35490],{"class":87},[77,46407,3197],{"class":2123},[77,46409,35495],{"class":87},[77,46411,46412],{"class":79,"line":35498},[77,46413,35501],{"class":323},[77,46415,46416],{"class":79,"line":35504},[77,46417,35507],{"class":323},[77,46419,46420,46422,46424],{"class":79,"line":35510},[77,46421,35513],{"class":87},[77,46423,3197],{"class":2123},[77,46425,35495],{"class":87},[77,46427,46428],{"class":79,"line":35520},[77,46429,35523],{"class":323},[77,46431,46432,46434,46436],{"class":79,"line":35526},[77,46433,35529],{"class":87},[77,46435,3197],{"class":2123},[77,46437,35534],{"class":87},[77,46439,46440],{"class":79,"line":35537},[77,46441,35540],{"class":323},[77,46443,46444,46446,46448],{"class":79,"line":35543},[77,46445,35546],{"class":87},[77,46447,3197],{"class":2123},[77,46449,35534],{"class":87},[77,46451,46452],{"class":79,"line":35553},[77,46453,4875],{"emptyLinePlaceholder":2549},[77,46455,46456],{"class":79,"line":35558},[77,46457,35561],{"class":323},[77,46459,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490,46492,46494,46496,46498],{"class":79,"line":35564},[77,46461,34918],{"class":94},[77,46463,2622],{"class":87},[77,46465,6067],{"class":271},[77,46467,34926],{"class":94},[77,46469,35575],{"class":271},[77,46471,3509],{"class":94},[77,46473,35580],{"class":2123},[77,46475,3558],{"class":94},[77,46477,35585],{"class":271},[77,46479,3509],{"class":94},[77,46481,35580],{"class":2123},[77,46483,3558],{"class":94},[77,46485,6067],{"class":271},[77,46487,35596],{"class":87},[77,46489,3145],{"class":2123},[77,46491,2120],{"class":94},[77,46493,35603],{"class":87},[77,46495,3145],{"class":2123},[77,46497,2120],{"class":94},[77,46499,35610],{"class":87},[77,46501,46502,46504,46506,46508,46510,46512,46514,46516,46518,46520,46522,46524,46526,46528,46530,46532,46534,46536,46538,46540],{"class":79,"line":35613},[77,46503,34918],{"class":94},[77,46505,2622],{"class":87},[77,46507,6067],{"class":271},[77,46509,34926],{"class":94},[77,46511,35624],{"class":271},[77,46513,3509],{"class":94},[77,46515,35580],{"class":2123},[77,46517,3558],{"class":94},[77,46519,35633],{"class":271},[77,46521,3509],{"class":94},[77,46523,35580],{"class":2123},[77,46525,3558],{"class":94},[77,46527,6067],{"class":271},[77,46529,35644],{"class":87},[77,46531,3145],{"class":2123},[77,46533,2120],{"class":94},[77,46535,35651],{"class":87},[77,46537,3145],{"class":2123},[77,46539,2120],{"class":94},[77,46541,35610],{"class":87},[77,46543,46544],{"class":79,"line":35660},[77,46545,4875],{"emptyLinePlaceholder":2549},[77,46547,46548],{"class":79,"line":35665},[77,46549,35668],{"class":323},[77,46551,46552,46554,46556,46558,46560,46562,46564],{"class":79,"line":35671},[77,46553,4972],{"class":2123},[77,46555,35676],{"class":87},[77,46557,3145],{"class":2123},[77,46559,2120],{"class":94},[77,46561,3552],{"class":87},[77,46563,3572],{"class":2123},[77,46565,35687],{"class":87},[77,46567,46568],{"class":79,"line":35690},[77,46569,35693],{"class":323},[77,46571,46572,46574,46576,46578,46580,46582,46584],{"class":79,"line":35696},[77,46573,35699],{"class":87},[77,46575,2661],{"class":94},[77,46577,268],{"class":2123},[77,46579,35706],{"class":87},[77,46581,3145],{"class":2123},[77,46583,2120],{"class":94},[77,46585,35713],{"class":87},[77,46587,46588],{"class":79,"line":35716},[77,46589,35719],{"class":323},[77,46591,46592],{"class":79,"line":35722},[77,46593,35725],{"class":323},[77,46595,46596,46598,46600],{"class":79,"line":35728},[77,46597,35731],{"class":87},[77,46599,268],{"class":2123},[77,46601,34781],{"class":87},[77,46603,46604],{"class":79,"line":35738},[77,46605,4875],{"emptyLinePlaceholder":2549},[77,46607,46608],{"class":79,"line":35743},[77,46609,35746],{"class":323},[77,46611,46612,46614,46616,46618,46620],{"class":79,"line":35749},[77,46613,35752],{"class":87},[77,46615,268],{"class":2123},[77,46617,35757],{"class":87},[77,46619,3145],{"class":2123},[77,46621,35762],{"class":87},[77,46623,46624,46626,46628,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654,46656,46658],{"class":79,"line":35765},[77,46625,34918],{"class":94},[77,46627,2622],{"class":87},[77,46629,35772],{"class":271},[77,46631,3509],{"class":94},[77,46633,35777],{"class":2123},[77,46635,3558],{"class":94},[77,46637,3157],{"class":271},[77,46639,3509],{"class":94},[77,46641,35777],{"class":2123},[77,46643,3558],{"class":94},[77,46645,35790],{"class":271},[77,46647,35793],{"class":87},[77,46649,35796],{"class":2123},[77,46651,3520],{"class":94},[77,46653,35801],{"class":87},[77,46655,2942],{"class":2123},[77,46657,3520],{"class":94},[77,46659,32965],{"class":87},[77,46661,46662],{"class":79,"line":35810},[77,46663,39199],{"class":323},[77,46665,46666],{"class":79,"line":35816},[77,46667,39204],{"class":323},[77,46669,46670,46672,46674],{"class":79,"line":35822},[77,46671,39209],{"class":87},[77,46673,35834],{"class":271},[77,46675,2628],{"class":87},[77,46677,46678],{"class":79,"line":35828},[77,46679,35854],{"class":323},[77,46681,46682,46684,46686,46688,46690,46692],{"class":79,"line":35839},[77,46683,35860],{"class":87},[77,46685,268],{"class":2123},[77,46687,35865],{"class":87},[77,46689,35868],{"class":7691},[77,46691,268],{"class":2123},[77,46693,4023],{"class":87},[77,46695,46696,46698,46700,46702],{"class":79,"line":35845},[77,46697,35878],{"class":271},[77,46699,3472],{"class":87},[77,46701,35883],{"class":94},[77,46703,35886],{"class":87},[77,46705,46706,46708],{"class":79,"line":35851},[77,46707,35892],{"class":271},[77,46709,35895],{"class":87},[77,46711,46712,46714],{"class":79,"line":35857},[77,46713,35901],{"class":271},[77,46715,35904],{"class":87},[77,46717,46718,46720],{"class":79,"line":35875},[77,46719,35910],{"class":271},[77,46721,35913],{"class":87},[77,46723,46724,46726],{"class":79,"line":35889},[77,46725,35919],{"class":271},[77,46727,35922],{"class":87},[77,46729,46730],{"class":79,"line":35898},[77,46731,35928],{"class":87},[77,46733,46734],{"class":79,"line":35907},[77,46735,35934],{"class":323},[77,46737,46738,46740],{"class":79,"line":35916},[77,46739,6565],{"class":2123},[77,46741,35942],{"class":87},[77,46743,46744],{"class":79,"line":35925},[77,46745,4875],{"emptyLinePlaceholder":2549},[77,46747,46748],{"class":79,"line":35931},[77,46749,35953],{"class":323},[77,46751,46752,46754,46756],{"class":79,"line":35937},[77,46753,34414],{"class":2123},[77,46755,35961],{"class":83},[77,46757,35964],{"class":87},[77,46759,46760],{"class":79,"line":35945},[77,46761,35970],{"class":323},[77,46763,46764,46766,46768,46770,46772,46774,46776,46778],{"class":79,"line":35950},[77,46765,35976],{"class":87},[77,46767,34160],{"class":7691},[77,46769,268],{"class":2123},[77,46771,2622],{"class":87},[77,46773,3111],{"class":94},[77,46775,2992],{"class":87},[77,46777,2907],{"class":94},[77,46779,32965],{"class":87},[77,46781,46782],{"class":79,"line":35956},[77,46783,35996],{"class":323},[77,46785,46786],{"class":79,"line":35967},[77,46787,36002],{"class":323},[77,46789,46790],{"class":79,"line":35973},[77,46791,36008],{"class":323},[77,46793,46794,46796,46798,46800,46802,46804,46806],{"class":79,"line":35993},[77,46795,34194],{"class":87},[77,46797,2120],{"class":94},[77,46799,2992],{"class":87},[77,46801,2696],{"class":94},[77,46803,2992],{"class":87},[77,46805,2120],{"class":94},[77,46807,2628],{"class":87},[77,46809,46810],{"class":79,"line":35999},[77,46811,36031],{"class":323},[77,46813,46814],{"class":79,"line":36005},[77,46815,36037],{"class":323},[77,46817,46818],{"class":79,"line":36011},[77,46819,36043],{"class":323},[77,46821,46822],{"class":79,"line":36028},[77,46823,36049],{"class":323},[77,46825,46826],{"class":79,"line":36034},[77,46827,36055],{"class":323},[77,46829,46830,46832,46834,46836,46838,46840,46842,46844,46846],{"class":79,"line":36040},[77,46831,36061],{"class":87},[77,46833,36064],{"class":271},[77,46835,36067],{"class":87},[77,46837,36070],{"class":271},[77,46839,2992],{"class":87},[77,46841,2254],{"class":7691},[77,46843,268],{"class":2123},[77,46845,36079],{"class":271},[77,46847,2628],{"class":87},[77,46849,46850,46852,46854,46856,46858,46860,46862,46864,46866],{"class":79,"line":36046},[77,46851,36061],{"class":87},[77,46853,36064],{"class":271},[77,46855,36091],{"class":87},[77,46857,36094],{"class":271},[77,46859,2992],{"class":87},[77,46861,2254],{"class":7691},[77,46863,268],{"class":2123},[77,46865,36103],{"class":271},[77,46867,2628],{"class":87},[77,46869,46870],{"class":79,"line":36052},[77,46871,36111],{"class":323},[77,46873,46874],{"class":79,"line":36058},[77,46875,36117],{"class":87},[77,46877,46878],{"class":79,"line":36084},[77,46879,36123],{"class":323},[77,46881,46882,46884,46886],{"class":79,"line":36108},[77,46883,36129],{"class":87},[77,46885,36132],{"class":271},[77,46887,2628],{"class":87},[77,46889,46890,46892,46894],{"class":79,"line":36114},[77,46891,36140],{"class":87},[77,46893,36143],{"class":271},[77,46895,2628],{"class":87},[77,46897,46898],{"class":79,"line":36120},[77,46899,36151],{"class":323},[77,46901,46902,46904,46906,46908,46910,46912,46914],{"class":79,"line":36126},[77,46903,34194],{"class":87},[77,46905,2120],{"class":94},[77,46907,2992],{"class":87},[77,46909,2696],{"class":94},[77,46911,2992],{"class":87},[77,46913,2696],{"class":94},[77,46915,2628],{"class":87},[77,46917,46918,46920,46922,46924,46926,46928,46930,46932,46934],{"class":79,"line":36137},[77,46919,36061],{"class":87},[77,46921,36064],{"class":271},[77,46923,36178],{"class":87},[77,46925,36070],{"class":271},[77,46927,2992],{"class":87},[77,46929,2254],{"class":7691},[77,46931,268],{"class":2123},[77,46933,36189],{"class":271},[77,46935,2628],{"class":87},[77,46937,46938,46940,46942,46944,46946,46948,46950,46952,46954],{"class":79,"line":36148},[77,46939,36061],{"class":87},[77,46941,36064],{"class":271},[77,46943,36201],{"class":87},[77,46945,36094],{"class":271},[77,46947,2992],{"class":87},[77,46949,2254],{"class":7691},[77,46951,268],{"class":2123},[77,46953,36212],{"class":271},[77,46955,2628],{"class":87},[77,46957,46958],{"class":79,"line":36154},[77,46959,36220],{"class":323},[77,46961,46962],{"class":79,"line":36171},[77,46963,36117],{"class":87},[77,46965,46966,46968,46970],{"class":79,"line":36194},[77,46967,36129],{"class":87},[77,46969,36064],{"class":271},[77,46971,2628],{"class":87},[77,46973,46974,46976,46978],{"class":79,"line":36217},[77,46975,36140],{"class":87},[77,46977,36242],{"class":271},[77,46979,2628],{"class":87},[77,46981,46982],{"class":79,"line":36223},[77,46983,36250],{"class":87},[77,46985,46986],{"class":79,"line":36228},[77,46987,4875],{"emptyLinePlaceholder":2549},[77,46989,46990],{"class":79,"line":36237},[77,46991,36261],{"class":323},[77,46993,46994,46996,46998,47000,47002],{"class":79,"line":36247},[77,46995,4008],{"class":2123},[77,46997,33687],{"class":94},[77,46999,5424],{"class":2123},[77,47001,33692],{"class":271},[77,47003,6214],{"class":87},[77,47005,47006],{"class":79,"line":36253},[77,47007,36280],{"class":323},[77,47009,47010,47013,47015],{"class":79,"line":36258},[77,47011,47012],{"class":87},"    GoogLeNet",[77,47014,268],{"class":2123},[77,47016,47017],{"class":87},"GoogLeNet(Inception)\n",[77,47019,47020,47022,47024],{"class":79,"line":36264},[77,47021,36297],{"class":87},[77,47023,268],{"class":2123},[77,47025,36302],{"class":87},[77,47027,47028,47030,47032,47035,47037,47039,47041],{"class":79,"line":36277},[77,47029,35860],{"class":87},[77,47031,268],{"class":2123},[77,47033,47034],{"class":87},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[77,47036,36315],{"class":7691},[77,47038,268],{"class":2123},[77,47040,3563],{"class":94},[77,47042,2628],{"class":87},[77,47044,47045],{"class":79,"line":36283},[77,47046,36327],{"class":87},[139,47048,47049],{"start":107},[54,47050,43040],{},[67,47052,47054],{"className":32846,"code":47053,"language":32848,"meta":72,"style":72},"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",[74,47055,47056,47062,47072,47082,47086,47096,47107,47111,47115,47119,47127,47143,47153,47169,47179,47193,47197,47207,47217,47227,47233,47237,47241,47249,47253,47269,47277,47281,47285,47293,47301,47305,47309,47313,47317,47323,47327,47337,47345,47353,47357,47361,47365,47373,47377,47393,47397,47401,47405,47417,47421,47433,47437,47441,47453,47457,47467,47471,47475,47487,47491,47499,47503,47507,47515,47519,47527,47531,47535,47539,47543,47547,47563,47571,47575,47579,47627,47633,47637,47647,47655,47663,47667,47671,47675,47679,47687,47691,47707,47711,47719,47727],{"__ignoreMap":72},[77,47057,47058,47060],{"class":79,"line":80},[77,47059,32860],{"class":2123},[77,47061,32863],{"class":87},[77,47063,47064,47066,47068,47070],{"class":79,"line":91},[77,47065,32860],{"class":2123},[77,47067,33882],{"class":87},[77,47069,33850],{"class":2123},[77,47071,33887],{"class":87},[77,47073,47074,47076,47078,47080],{"class":79,"line":107},[77,47075,33205],{"class":2123},[77,47077,33865],{"class":87},[77,47079,32860],{"class":2123},[77,47081,33870],{"class":87},[77,47083,47084],{"class":79,"line":191},[77,47085,36388],{"class":323},[77,47087,47088,47090,47092,47094],{"class":79,"line":1543},[77,47089,33205],{"class":2123},[77,47091,33835],{"class":87},[77,47093,32860],{"class":2123},[77,47095,33840],{"class":87},[77,47097,47098,47100,47102,47104],{"class":79,"line":1549},[77,47099,33205],{"class":2123},[77,47101,34381],{"class":87},[77,47103,32860],{"class":2123},[77,47105,47106],{"class":87}," GoogLeNet,Inception\n",[77,47108,47109],{"class":79,"line":1566},[77,47110,4875],{"emptyLinePlaceholder":2549},[77,47112,47113],{"class":79,"line":1572},[77,47114,4875],{"emptyLinePlaceholder":2549},[77,47116,47117],{"class":79,"line":1589},[77,47118,36417],{"class":323},[77,47120,47121,47123,47125],{"class":79,"line":1595},[77,47122,34414],{"class":2123},[77,47124,36424],{"class":83},[77,47126,34420],{"class":87},[77,47128,47129,47131,47133,47135,47137,47139,47141],{"class":79,"line":4088},[77,47130,36431],{"class":87},[77,47132,268],{"class":2123},[77,47134,33922],{"class":87},[77,47136,33925],{"class":7691},[77,47138,268],{"class":2123},[77,47140,33930],{"class":271},[77,47142,33933],{"class":87},[77,47144,47145,47147,47149,47151],{"class":79,"line":4093},[77,47146,36448],{"class":7691},[77,47148,268],{"class":2123},[77,47150,36453],{"class":94},[77,47152,33933],{"class":87},[77,47154,47155,47157,47159,47161,47163,47165,47167],{"class":79,"line":4099},[77,47156,36460],{"class":7691},[77,47158,268],{"class":2123},[77,47160,33960],{"class":87},[77,47162,33963],{"class":7691},[77,47164,268],{"class":2123},[77,47166,37915],{"class":94},[77,47168,33971],{"class":87},[77,47170,47171,47173,47175,47177],{"class":79,"line":4104},[77,47172,36477],{"class":7691},[77,47174,268],{"class":2123},[77,47176,33943],{"class":94},[77,47178,2628],{"class":87},[77,47180,47181,47183,47185,47187,47189,47191],{"class":79,"line":4118},[77,47182,36488],{"class":87},[77,47184,268],{"class":2123},[77,47186,34001],{"class":87},[77,47188,34004],{"class":7691},[77,47190,268],{"class":2123},[77,47192,36499],{"class":87},[77,47194,47195],{"class":79,"line":4123},[77,47196,36504],{"class":323},[77,47198,47199,47201,47203,47205],{"class":79,"line":4129},[77,47200,36509],{"class":7691},[77,47202,268],{"class":2123},[77,47204,2120],{"class":94},[77,47206,33933],{"class":87},[77,47208,47209,47211,47213,47215],{"class":79,"line":4150},[77,47210,36520],{"class":7691},[77,47212,268],{"class":2123},[77,47214,33943],{"class":94},[77,47216,33933],{"class":87},[77,47218,47219,47221,47223,47225],{"class":79,"line":4155},[77,47220,36531],{"class":7691},[77,47222,268],{"class":2123},[77,47224,1939],{"class":94},[77,47226,2628],{"class":87},[77,47228,47229,47231],{"class":79,"line":4169},[77,47230,6565],{"class":2123},[77,47232,36544],{"class":87},[77,47234,47235],{"class":79,"line":4174},[77,47236,4875],{"emptyLinePlaceholder":2549},[77,47238,47239],{"class":79,"line":4203},[77,47240,36553],{"class":323},[77,47242,47243,47245,47247],{"class":79,"line":4208},[77,47244,34414],{"class":2123},[77,47246,36560],{"class":83},[77,47248,36563],{"class":87},[77,47250,47251],{"class":79,"line":4225},[77,47252,36568],{"class":323},[77,47254,47255,47257,47259,47261,47263,47265,47267],{"class":79,"line":4230},[77,47256,33704],{"class":87},[77,47258,268],{"class":2123},[77,47260,33711],{"class":271},[77,47262,4180],{"class":2123},[77,47264,33716],{"class":87},[77,47266,4177],{"class":2123},[77,47268,36585],{"class":271},[77,47270,47271,47273,47275],{"class":79,"line":4235},[77,47272,33756],{"class":87},[77,47274,268],{"class":2123},[77,47276,34756],{"class":87},[77,47278,47279],{"class":79,"line":4240},[77,47280,4875],{"emptyLinePlaceholder":2549},[77,47282,47283],{"class":79,"line":4254},[77,47284,36602],{"class":323},[77,47286,47287,47289,47291],{"class":79,"line":4259},[77,47288,36607],{"class":87},[77,47290,268],{"class":2123},[77,47292,34809],{"class":94},[77,47294,47295,47297,47299],{"class":79,"line":5052},[77,47296,36616],{"class":87},[77,47298,268],{"class":2123},[77,47300,5560],{"class":94},[77,47302,47303],{"class":79,"line":5066},[77,47304,4875],{"emptyLinePlaceholder":2549},[77,47306,47307],{"class":79,"line":5074},[77,47308,36629],{"class":323},[77,47310,47311],{"class":79,"line":5079},[77,47312,36634],{"class":323},[77,47314,47315],{"class":79,"line":5085},[77,47316,36639],{"class":323},[77,47318,47319,47321],{"class":79,"line":5091},[77,47320,36644],{"class":2123},[77,47322,35351],{"class":87},[77,47324,47325],{"class":79,"line":5096},[77,47326,36651],{"class":323},[77,47328,47329,47331,47333,47335],{"class":79,"line":10422},[77,47330,5878],{"class":2123},[77,47332,36658],{"class":87},[77,47334,28511],{"class":2123},[77,47336,36663],{"class":87},[77,47338,47339,47341,47343],{"class":79,"line":10446},[77,47340,36668],{"class":87},[77,47342,268],{"class":2123},[77,47344,36673],{"class":87},[77,47346,47347,47349,47351],{"class":79,"line":10451},[77,47348,36678],{"class":87},[77,47350,268],{"class":2123},[77,47352,36683],{"class":87},[77,47354,47355],{"class":79,"line":10457},[77,47356,36688],{"class":323},[77,47358,47359],{"class":79,"line":10484},[77,47360,35342],{"class":87},[77,47362,47363],{"class":79,"line":10489},[77,47364,36697],{"class":323},[77,47366,47367,47369,47371],{"class":79,"line":10495},[77,47368,35127],{"class":87},[77,47370,268],{"class":2123},[77,47372,36706],{"class":87},[77,47374,47375],{"class":79,"line":10507},[77,47376,36711],{"class":323},[77,47378,47379,47381,47383,47385,47387,47389,47391],{"class":79,"line":10519},[77,47380,35144],{"class":87},[77,47382,268],{"class":2123},[77,47384,35149],{"class":87},[77,47386,35152],{"class":7691},[77,47388,268],{"class":2123},[77,47390,2120],{"class":94},[77,47392,2628],{"class":87},[77,47394,47395],{"class":79,"line":10531},[77,47396,36732],{"class":323},[77,47398,47399],{"class":79,"line":12189},[77,47400,36737],{"class":323},[77,47402,47403],{"class":79,"line":12214},[77,47404,36742],{"class":323},[77,47406,47407,47409,47411,47413,47415],{"class":79,"line":12237},[77,47408,36747],{"class":87},[77,47410,11950],{"class":2123},[77,47412,35254],{"class":87},[77,47414,5424],{"class":2123},[77,47416,36756],{"class":87},[77,47418,47419],{"class":79,"line":12261},[77,47420,36761],{"class":323},[77,47422,47423,47425,47427,47429,47431],{"class":79,"line":12266},[77,47424,36766],{"class":87},[77,47426,11950],{"class":2123},[77,47428,36771],{"class":87},[77,47430,1939],{"class":94},[77,47432,2628],{"class":87},[77,47434,47435],{"class":79,"line":12271},[77,47436,4875],{"emptyLinePlaceholder":2549},[77,47438,47439],{"class":79,"line":12276},[77,47440,36784],{"class":323},[77,47442,47443,47445,47447,47449,47451],{"class":79,"line":12285},[77,47444,36789],{"class":87},[77,47446,268],{"class":2123},[77,47448,36794],{"class":87},[77,47450,3197],{"class":2123},[77,47452,36799],{"class":87},[77,47454,47455],{"class":79,"line":12290},[77,47456,36804],{"class":323},[77,47458,47459,47461,47463,47465],{"class":79,"line":12296},[77,47460,34918],{"class":94},[77,47462,2622],{"class":87},[77,47464,36813],{"class":271},[77,47466,36816],{"class":87},[77,47468,47469],{"class":79,"line":12317},[77,47470,4875],{"emptyLinePlaceholder":2549},[77,47472,47473],{"class":79,"line":12323},[77,47474,36825],{"class":323},[77,47476,47477,47479,47481,47483,47485],{"class":79,"line":12337},[77,47478,4008],{"class":2123},[77,47480,33687],{"class":94},[77,47482,5424],{"class":2123},[77,47484,33692],{"class":271},[77,47486,6214],{"class":87},[77,47488,47489],{"class":79,"line":12343},[77,47490,36842],{"class":323},[77,47492,47493,47495,47497],{"class":79,"line":12370},[77,47494,33756],{"class":87},[77,47496,268],{"class":2123},[77,47498,47017],{"class":87},[77,47500,47501],{"class":79,"line":12379},[77,47502,36855],{"class":323},[77,47504,47505],{"class":79,"line":12385},[77,47506,36860],{"class":323},[77,47508,47509,47511,47513],{"class":79,"line":12393},[77,47510,36865],{"class":87},[77,47512,36868],{"class":271},[77,47514,32965],{"class":87},[77,47516,47517],{"class":79,"line":12398},[77,47518,36875],{"class":323},[77,47520,47521,47523,47525],{"class":79,"line":19074},[77,47522,36488],{"class":87},[77,47524,268],{"class":2123},[77,47526,36884],{"class":87},[77,47528,47529],{"class":79,"line":19080},[77,47530,36889],{"class":323},[77,47532,47533],{"class":79,"line":19103},[77,47534,36894],{"class":87},[77,47536,47537],{"class":79,"line":19109},[77,47538,4875],{"emptyLinePlaceholder":2549},[77,47540,47541],{"class":79,"line":19132},[77,47542,36903],{"class":323},[77,47544,47545],{"class":79,"line":19146},[77,47546,36908],{"class":323},[77,47548,47549,47551,47553,47555,47557,47559,47561],{"class":79,"line":19166},[77,47550,33704],{"class":87},[77,47552,268],{"class":2123},[77,47554,33711],{"class":271},[77,47556,4180],{"class":2123},[77,47558,33716],{"class":87},[77,47560,4177],{"class":2123},[77,47562,36585],{"class":271},[77,47564,47565,47567,47569],{"class":79,"line":19172},[77,47566,33756],{"class":87},[77,47568,268],{"class":2123},[77,47570,34756],{"class":87},[77,47572,47573],{"class":79,"line":19183},[77,47574,36937],{"class":323},[77,47576,47577],{"class":79,"line":19206},[77,47578,36942],{"class":323},[77,47580,47581,47583,47585,47587,47589,47591,47593,47595,47597,47599,47601,47603,47605,47607,47609,47611,47613,47615,47617,47619,47621,47623,47625],{"class":79,"line":19228},[77,47582,36947],{"class":87},[77,47584,268],{"class":2123},[77,47586,3503],{"class":87},[77,47588,36954],{"class":271},[77,47590,2992],{"class":87},[77,47592,36959],{"class":271},[77,47594,2992],{"class":87},[77,47596,36964],{"class":271},[77,47598,2992],{"class":87},[77,47600,36969],{"class":271},[77,47602,2992],{"class":87},[77,47604,36974],{"class":271},[77,47606,2992],{"class":87},[77,47608,36979],{"class":271},[77,47610,2992],{"class":87},[77,47612,36984],{"class":271},[77,47614,2992],{"class":87},[77,47616,36989],{"class":271},[77,47618,2992],{"class":87},[77,47620,36994],{"class":271},[77,47622,2992],{"class":87},[77,47624,36999],{"class":271},[77,47626,35713],{"class":87},[77,47628,47629,47631],{"class":79,"line":19233},[77,47630,36644],{"class":2123},[77,47632,35351],{"class":87},[77,47634,47635],{"class":79,"line":19239},[77,47636,37012],{"class":323},[77,47638,47639,47641,47643,47645],{"class":79,"line":19253},[77,47640,5878],{"class":2123},[77,47642,37019],{"class":87},[77,47644,28511],{"class":2123},[77,47646,36663],{"class":87},[77,47648,47649,47651,47653],{"class":79,"line":19266},[77,47650,35077],{"class":87},[77,47652,268],{"class":2123},[77,47654,35082],{"class":87},[77,47656,47657,47659,47661],{"class":79,"line":19271},[77,47658,35092],{"class":87},[77,47660,268],{"class":2123},[77,47662,35097],{"class":87},[77,47664,47665],{"class":79,"line":19285},[77,47666,4875],{"emptyLinePlaceholder":2549},[77,47668,47669],{"class":79,"line":19290},[77,47670,37048],{"class":323},[77,47672,47673],{"class":79,"line":19296},[77,47674,35342],{"class":87},[77,47676,47677],{"class":79,"line":19301},[77,47678,37057],{"class":323},[77,47680,47681,47683,47685],{"class":79,"line":19315},[77,47682,35127],{"class":87},[77,47684,268],{"class":2123},[77,47686,35132],{"class":87},[77,47688,47689],{"class":79,"line":19320},[77,47690,37070],{"class":323},[77,47692,47693,47695,47697,47699,47701,47703,47705],{"class":79,"line":19325},[77,47694,35144],{"class":87},[77,47696,268],{"class":2123},[77,47698,35149],{"class":87},[77,47700,35152],{"class":7691},[77,47702,268],{"class":2123},[77,47704,2120],{"class":94},[77,47706,2628],{"class":87},[77,47708,47709],{"class":79,"line":19339},[77,47710,37091],{"class":323},[77,47712,47713,47715,47717],{"class":79,"line":19351},[77,47714,37096],{"class":87},[77,47716,268],{"class":2123},[77,47718,37101],{"class":87},[77,47720,47721,47723,47725],{"class":79,"line":19356},[77,47722,37106],{"class":87},[77,47724,268],{"class":2123},[77,47726,37111],{"class":87},[77,47728,47729,47731,47733,47735,47737,47739,47741,47743],{"class":79,"line":19369},[77,47730,37116],{"class":94},[77,47732,2622],{"class":87},[77,47734,37121],{"class":271},[77,47736,37124],{"class":87},[77,47738,37127],{"class":271},[77,47740,2992],{"class":87},[77,47742,37132],{"class":271},[77,47744,37135],{"class":87},[19,47746,47748],{"id":47747},"_24训练自己的数据集","2.4.训练自己的数据集",[24,47750,47751],{},"猫狗分类任务",[24,47753,47754],{},"划分数据集和验证集",[67,47756,47758],{"className":32846,"code":47757,"language":32848,"meta":72,"style":72},"# 创建脚本，用于划分数据集和验证集\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",[74,47759,47760,47765,47772,47777,47788,47795,47799,47809,47823,47832,47836,47841,47851,47871,47875,47880,47890,47901,47914,47918,47923,47932,47942,47953,47957,47962,47972,47976,47981,47986,47991,47996,48001,48005,48015,48042,48055,48067,48094,48099,48104,48118,48123,48135,48150,48165,48173,48177,48182,48188,48200,48213,48218,48223,48228,48278,48284,48288],{"__ignoreMap":72},[77,47761,47762],{"class":79,"line":80},[77,47763,47764],{"class":323},"# 创建脚本，用于划分数据集和验证集\n",[77,47766,47767,47769],{"class":79,"line":91},[77,47768,32860],{"class":2123},[77,47770,47771],{"class":87}," os\n",[77,47773,47774],{"class":79,"line":107},[77,47775,47776],{"class":323},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[77,47778,47779,47781,47784,47786],{"class":79,"line":191},[77,47780,33205],{"class":2123},[77,47782,47783],{"class":87}," shutil ",[77,47785,32860],{"class":2123},[77,47787,34289],{"class":87},[77,47789,47790,47792],{"class":79,"line":1543},[77,47791,32860],{"class":2123},[77,47793,47794],{"class":87}," random\n",[77,47796,47797],{"class":79,"line":1549},[77,47798,4875],{"emptyLinePlaceholder":2549},[77,47800,47801,47803,47806],{"class":79,"line":1566},[77,47802,34414],{"class":2123},[77,47804,47805],{"class":83}," mkfile",[77,47807,47808],{"class":87},"(file):\n",[77,47810,47811,47813,47815,47818,47821],{"class":79,"line":1572},[77,47812,5576],{"class":2123},[77,47814,41396],{"class":2123},[77,47816,47817],{"class":87}," os.path.exists(",[77,47819,47820],{"class":7691},"file",[77,47822,33254],{"class":87},[77,47824,47825,47828,47830],{"class":79,"line":1589},[77,47826,47827],{"class":87},"        os.makedirs(",[77,47829,47820],{"class":7691},[77,47831,2628],{"class":87},[77,47833,47834],{"class":79,"line":1595},[77,47835,4875],{"emptyLinePlaceholder":2549},[77,47837,47838],{"class":79,"line":4088},[77,47839,47840],{"class":323},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[77,47842,47843,47846,47848],{"class":79,"line":4093},[77,47844,47845],{"class":87},"file_path",[77,47847,268],{"class":2123},[77,47849,47850],{"class":271},"'data_cat_dog'\n",[77,47852,47853,47856,47858,47861,47863,47866,47868],{"class":79,"line":4099},[77,47854,47855],{"class":87},"flower_class",[77,47857,268],{"class":2123},[77,47859,47860],{"class":87},"[cla ",[77,47862,5500],{"class":2123},[77,47864,47865],{"class":87}," cla ",[77,47867,28511],{"class":2123},[77,47869,47870],{"class":87}," os.listdir(file_path)]\n",[77,47872,47873],{"class":79,"line":4104},[77,47874,4875],{"emptyLinePlaceholder":2549},[77,47876,47877],{"class":79,"line":4118},[77,47878,47879],{"class":323},"# 创建训练集train文件夹\n",[77,47881,47882,47885,47888],{"class":79,"line":4123},[77,47883,47884],{"class":87},"mkfile(",[77,47886,47887],{"class":271},"'data\u002Ftrain'",[77,47889,2628],{"class":87},[77,47891,47892,47894,47896,47898],{"class":79,"line":4129},[77,47893,5500],{"class":2123},[77,47895,47865],{"class":87},[77,47897,28511],{"class":2123},[77,47899,47900],{"class":87}," flower_class:\n",[77,47902,47903,47906,47909,47911],{"class":79,"line":4150},[77,47904,47905],{"class":87},"    mkfile(",[77,47907,47908],{"class":271},"'data\u002Ftrain\u002F'",[77,47910,3094],{"class":2123},[77,47912,47913],{"class":87},"cla)\n",[77,47915,47916],{"class":79,"line":4155},[77,47917,4875],{"emptyLinePlaceholder":2549},[77,47919,47920],{"class":79,"line":4169},[77,47921,47922],{"class":323},"# 创建验证集val文件夹\n",[77,47924,47925,47927,47930],{"class":79,"line":4174},[77,47926,47884],{"class":87},[77,47928,47929],{"class":271},"'data\u002Ftest'",[77,47931,2628],{"class":87},[77,47933,47934,47936,47938,47940],{"class":79,"line":4203},[77,47935,5500],{"class":2123},[77,47937,47865],{"class":87},[77,47939,28511],{"class":2123},[77,47941,47900],{"class":87},[77,47943,47944,47946,47949,47951],{"class":79,"line":4208},[77,47945,47905],{"class":87},[77,47947,47948],{"class":271},"'data\u002Ftest\u002F'",[77,47950,3094],{"class":2123},[77,47952,47913],{"class":87},[77,47954,47955],{"class":79,"line":4225},[77,47956,4875],{"emptyLinePlaceholder":2549},[77,47958,47959],{"class":79,"line":4230},[77,47960,47961],{"class":323},"# 划分比例，训练集：测试集=9：1\n",[77,47963,47964,47967,47969],{"class":79,"line":4235},[77,47965,47966],{"class":87},"split_rate",[77,47968,268],{"class":2123},[77,47970,47971],{"class":94},"0.1\n",[77,47973,47974],{"class":79,"line":4240},[77,47975,4875],{"emptyLinePlaceholder":2549},[77,47977,47978],{"class":79,"line":4254},[77,47979,47980],{"class":323},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[77,47982,47983],{"class":79,"line":4259},[77,47984,47985],{"class":323},"# cla_path：当前类别的原始图片路径\n",[77,47987,47988],{"class":79,"line":5052},[77,47989,47990],{"class":323},"# images：当前类别下所有图片的文件名列表\n",[77,47992,47993],{"class":79,"line":5066},[77,47994,47995],{"class":323},"# num：该类别图片总数\n",[77,47997,47998],{"class":79,"line":5074},[77,47999,48000],{"class":323},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[77,48002,48003],{"class":79,"line":5079},[77,48004,4875],{"emptyLinePlaceholder":2549},[77,48006,48007,48009,48011,48013],{"class":79,"line":5085},[77,48008,5500],{"class":2123},[77,48010,47865],{"class":87},[77,48012,28511],{"class":2123},[77,48014,47900],{"class":87},[77,48016,48017,48020,48022,48025,48027,48030,48033,48035,48037,48039],{"class":79,"line":5091},[77,48018,48019],{"class":87},"    cla_path ",[77,48021,268],{"class":2123},[77,48023,48024],{"class":87}," file_path ",[77,48026,3094],{"class":2123},[77,48028,48029],{"class":271}," '\u002F'",[77,48031,48032],{"class":2123}," +",[77,48034,47865],{"class":87},[77,48036,3094],{"class":2123},[77,48038,48029],{"class":271},[77,48040,48041],{"class":323},"  # 某一类别的子目录\n",[77,48043,48044,48047,48049,48052],{"class":79,"line":5096},[77,48045,48046],{"class":87},"    images ",[77,48048,268],{"class":2123},[77,48050,48051],{"class":87}," os.listdir(cla_path)  ",[77,48053,48054],{"class":323},"# iamges 列表存储了该目录下所有图像的名称\n",[77,48056,48057,48060,48062,48064],{"class":79,"line":10422},[77,48058,48059],{"class":87},"    num ",[77,48061,268],{"class":2123},[77,48063,9806],{"class":94},[77,48065,48066],{"class":87},"(images)\n",[77,48068,48069,48072,48074,48077,48079,48081,48083,48086,48088,48091],{"class":79,"line":10446},[77,48070,48071],{"class":87},"    eval_index ",[77,48073,268],{"class":2123},[77,48075,48076],{"class":87}," random.sample(images, ",[77,48078,3106],{"class":7691},[77,48080,268],{"class":2123},[77,48082,2625],{"class":94},[77,48084,48085],{"class":87},"(num ",[77,48087,3068],{"class":2123},[77,48089,48090],{"class":87}," split_rate))  ",[77,48092,48093],{"class":323},"# 从images列表中随机抽取 k 个图像名称\n",[77,48095,48096],{"class":79,"line":10451},[77,48097,48098],{"class":323},"    # 遍历该类别下的所有图片\n",[77,48100,48101],{"class":79,"line":10457},[77,48102,48103],{"class":323},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[77,48105,48106,48108,48111,48113,48115],{"class":79,"line":10484},[77,48107,5676],{"class":2123},[77,48109,48110],{"class":87}," index, image ",[77,48112,28511],{"class":2123},[77,48114,34073],{"class":94},[77,48116,48117],{"class":87},"(images):\n",[77,48119,48120],{"class":79,"line":10489},[77,48121,48122],{"class":323},"        # eval_index 中保存验证集val的图像名称\n",[77,48124,48125,48127,48130,48132],{"class":79,"line":10495},[77,48126,4972],{"class":2123},[77,48128,48129],{"class":87}," image ",[77,48131,28511],{"class":2123},[77,48133,48134],{"class":87}," eval_index:\n",[77,48136,48137,48140,48142,48145,48147],{"class":79,"line":10507},[77,48138,48139],{"class":87},"            image_path ",[77,48141,268],{"class":2123},[77,48143,48144],{"class":87}," cla_path ",[77,48146,3094],{"class":2123},[77,48148,48149],{"class":87}," image\n",[77,48151,48152,48155,48157,48160,48162],{"class":79,"line":10519},[77,48153,48154],{"class":87},"            new_path ",[77,48156,268],{"class":2123},[77,48158,48159],{"class":271}," 'data\u002Ftest\u002F'",[77,48161,48032],{"class":2123},[77,48163,48164],{"class":87}," cla\n",[77,48166,48167,48170],{"class":79,"line":10531},[77,48168,48169],{"class":87},"            copy(image_path, new_path)  ",[77,48171,48172],{"class":323},"# 将选中的图像复制到新路径\n",[77,48174,48175],{"class":79,"line":12189},[77,48176,4875],{"emptyLinePlaceholder":2549},[77,48178,48179],{"class":79,"line":12214},[77,48180,48181],{"class":323},"        # 其余的图像保存在训练集train中\n",[77,48183,48184,48186],{"class":79,"line":12237},[77,48185,5009],{"class":2123},[77,48187,6214],{"class":87},[77,48189,48190,48192,48194,48196,48198],{"class":79,"line":12261},[77,48191,48139],{"class":87},[77,48193,268],{"class":2123},[77,48195,48144],{"class":87},[77,48197,3094],{"class":2123},[77,48199,48149],{"class":87},[77,48201,48202,48204,48206,48209,48211],{"class":79,"line":12266},[77,48203,48154],{"class":87},[77,48205,268],{"class":2123},[77,48207,48208],{"class":271}," 'data\u002Ftrain\u002F'",[77,48210,48032],{"class":2123},[77,48212,48164],{"class":87},[77,48214,48215],{"class":79,"line":12271},[77,48216,48217],{"class":87},"            copy(image_path, new_path)\n",[77,48219,48220],{"class":79,"line":12276},[77,48221,48222],{"class":323},"            # 打印进度条信息\n",[77,48224,48225],{"class":79,"line":12285},[77,48226,48227],{"class":323},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[77,48229,48230,48232,48234,48236,48239,48241,48243,48246,48248,48250,48252,48255,48258,48260,48262,48265,48268,48270,48272,48275],{"class":79,"line":12290},[77,48231,34918],{"class":94},[77,48233,2622],{"class":87},[77,48235,2865],{"class":271},[77,48237,48238],{"class":94},"\\r",[77,48240,3503],{"class":271},[77,48242,34926],{"class":94},[77,48244,48245],{"class":271},"] processing [",[77,48247,34926],{"class":94},[77,48249,3197],{"class":271},[77,48251,34926],{"class":94},[77,48253,48254],{"class":271},"]\"",[77,48256,48257],{"class":87},".format(cla, index ",[77,48259,3094],{"class":2123},[77,48261,27586],{"class":94},[77,48263,48264],{"class":87},", num), ",[77,48266,48267],{"class":7691},"end",[77,48269,268],{"class":2123},[77,48271,444],{"class":271},[77,48273,48274],{"class":87},")  ",[77,48276,48277],{"class":323},"# processing bar\n",[77,48279,48280,48282],{"class":79,"line":12296},[77,48281,33766],{"class":94},[77,48283,4451],{"class":87},[77,48285,48286],{"class":79,"line":12317},[77,48287,4875],{"emptyLinePlaceholder":2549},[77,48289,48290,48292,48294,48297],{"class":79,"line":12323},[77,48291,32883],{"class":94},[77,48293,2622],{"class":87},[77,48295,48296],{"class":271},"\"processing done!\"",[77,48298,2628],{"class":87},[24,48300,48301],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24468,48303,48305],{"id":48304},"_242模型代码","2.4.2.模型代码",[24,48307,48308],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[67,48310,48312],{"className":32846,"code":48311,"language":32848,"meta":72,"style":72},"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",[74,48313,48314,48320,48330,48340,48344,48360,48368,48382,48392,48396,48426,48430,48464,48510,48514,48548,48594,48598,48602,48636,48666,48670,48678,48692,48714,48736,48754,48758,48772,48776,48780,48796,48800,48808,48822,48832,48876,48880,48908,48912,48922,48950,48954,48990,48994,49022,49026,49036,49068,49100,49128,49132,49142,49174,49206,49238,49270,49302,49330,49334,49344,49376,49408,49420,49424,49436,49440,49444,49456,49464,49484,49488,49492,49496,49500,49504,49508,49522,49530,49538,49550,49564,49572,49576,49584,49594,49604,49614,49624,49634,49640,49644,49648,49660,49680,49688],{"__ignoreMap":72},[77,48315,48316,48318],{"class":79,"line":80},[77,48317,32860],{"class":2123},[77,48319,32863],{"class":87},[77,48321,48322,48324,48326,48328],{"class":79,"line":91},[77,48323,33205],{"class":2123},[77,48325,33208],{"class":87},[77,48327,32860],{"class":2123},[77,48329,33213],{"class":87},[77,48331,48332,48334,48336,48338],{"class":79,"line":107},[77,48333,33205],{"class":2123},[77,48335,33225],{"class":87},[77,48337,32860],{"class":2123},[77,48339,33230],{"class":87},[77,48341,48342],{"class":79,"line":191},[77,48343,4875],{"emptyLinePlaceholder":2549},[77,48345,48346,48348,48350,48352,48354,48356,48358],{"class":79,"line":1543},[77,48347,17166],{"class":2123},[77,48349,43959],{"class":83},[77,48351,2622],{"class":87},[77,48353,33246],{"class":83},[77,48355,3171],{"class":87},[77,48357,33251],{"class":83},[77,48359,33254],{"class":87},[77,48361,48362,48364,48366],{"class":79,"line":1549},[77,48363,33269],{"class":2123},[77,48365,33272],{"class":94},[77,48367,43978],{"class":87},[77,48369,48370,48372,48374,48376,48378,48380],{"class":79,"line":1566},[77,48371,33285],{"class":94},[77,48373,43985],{"class":87},[77,48375,33291],{"class":94},[77,48377,33294],{"class":87},[77,48379,33297],{"class":94},[77,48381,4451],{"class":87},[77,48383,48384,48386,48388,48390],{"class":79,"line":1572},[77,48385,33313],{"class":94},[77,48387,37237],{"class":87},[77,48389,268],{"class":2123},[77,48391,37242],{"class":87},[77,48393,48394],{"class":79,"line":1589},[77,48395,44008],{"class":323},[77,48397,48398,48400,48402,48404,48406,48408,48410,48412,48414,48416,48418,48420,48422,48424],{"class":79,"line":1595},[77,48399,33313],{"class":94},[77,48401,44015],{"class":87},[77,48403,268],{"class":2123},[77,48405,33321],{"class":87},[77,48407,33324],{"class":7691},[77,48409,268],{"class":2123},[77,48411,44026],{"class":87},[77,48413,33333],{"class":7691},[77,48415,268],{"class":2123},[77,48417,44033],{"class":87},[77,48419,33342],{"class":7691},[77,48421,268],{"class":2123},[77,48423,2120],{"class":94},[77,48425,2628],{"class":87},[77,48427,48428],{"class":79,"line":4088},[77,48429,44046],{"class":323},[77,48431,48432,48434,48436,48438,48440,48442,48444,48446,48448,48450,48452,48454,48456,48458,48460,48462],{"class":79,"line":4093},[77,48433,33313],{"class":94},[77,48435,44053],{"class":87},[77,48437,268],{"class":2123},[77,48439,33321],{"class":87},[77,48441,33324],{"class":7691},[77,48443,268],{"class":2123},[77,48445,44026],{"class":87},[77,48447,33333],{"class":7691},[77,48449,268],{"class":2123},[77,48451,44070],{"class":87},[77,48453,1939],{"class":94},[77,48455,44075],{"class":87},[77,48457,33342],{"class":7691},[77,48459,268],{"class":2123},[77,48461,2120],{"class":94},[77,48463,2628],{"class":87},[77,48465,48466,48468,48470,48472,48474,48476,48478,48480,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500,48502,48504,48506,48508],{"class":79,"line":4099},[77,48467,33313],{"class":94},[77,48469,44090],{"class":87},[77,48471,268],{"class":2123},[77,48473,33321],{"class":87},[77,48475,33324],{"class":7691},[77,48477,268],{"class":2123},[77,48479,44070],{"class":87},[77,48481,1939],{"class":94},[77,48483,44075],{"class":87},[77,48485,33333],{"class":7691},[77,48487,268],{"class":2123},[77,48489,44070],{"class":87},[77,48491,2120],{"class":94},[77,48493,44075],{"class":87},[77,48495,33342],{"class":7691},[77,48497,268],{"class":2123},[77,48499,2690],{"class":94},[77,48501,2992],{"class":87},[77,48503,1196],{"class":7691},[77,48505,268],{"class":2123},[77,48507,2120],{"class":94},[77,48509,2628],{"class":87},[77,48511,48512],{"class":79,"line":4104},[77,48513,44135],{"class":323},[77,48515,48516,48518,48520,48522,48524,48526,48528,48530,48532,48534,48536,48538,48540,48542,48544,48546],{"class":79,"line":4118},[77,48517,33313],{"class":94},[77,48519,44142],{"class":87},[77,48521,268],{"class":2123},[77,48523,33321],{"class":87},[77,48525,33324],{"class":7691},[77,48527,268],{"class":2123},[77,48529,44026],{"class":87},[77,48531,33333],{"class":7691},[77,48533,268],{"class":2123},[77,48535,44159],{"class":87},[77,48537,1939],{"class":94},[77,48539,44075],{"class":87},[77,48541,33342],{"class":7691},[77,48543,268],{"class":2123},[77,48545,2120],{"class":94},[77,48547,2628],{"class":87},[77,48549,48550,48552,48554,48556,48558,48560,48562,48564,48566,48568,48570,48572,48574,48576,48578,48580,48582,48584,48586,48588,48590,48592],{"class":79,"line":4123},[77,48551,33313],{"class":94},[77,48553,44178],{"class":87},[77,48555,268],{"class":2123},[77,48557,33321],{"class":87},[77,48559,33324],{"class":7691},[77,48561,268],{"class":2123},[77,48563,44159],{"class":87},[77,48565,1939],{"class":94},[77,48567,44075],{"class":87},[77,48569,33333],{"class":7691},[77,48571,268],{"class":2123},[77,48573,44159],{"class":87},[77,48575,2120],{"class":94},[77,48577,44075],{"class":87},[77,48579,33342],{"class":7691},[77,48581,268],{"class":2123},[77,48583,2933],{"class":94},[77,48585,2992],{"class":87},[77,48587,1196],{"class":7691},[77,48589,268],{"class":2123},[77,48591,2696],{"class":94},[77,48593,2628],{"class":87},[77,48595,48596],{"class":79,"line":4129},[77,48597,44223],{"class":323},[77,48599,48600],{"class":79,"line":4150},[77,48601,44228],{"class":323},[77,48603,48604,48606,48608,48610,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632,48634],{"class":79,"line":4155},[77,48605,33313],{"class":94},[77,48607,44235],{"class":87},[77,48609,268],{"class":2123},[77,48611,37295],{"class":87},[77,48613,33342],{"class":7691},[77,48615,268],{"class":2123},[77,48617,2690],{"class":94},[77,48619,2992],{"class":87},[77,48621,33396],{"class":7691},[77,48623,268],{"class":2123},[77,48625,2120],{"class":94},[77,48627,2992],{"class":87},[77,48629,1196],{"class":7691},[77,48631,268],{"class":2123},[77,48633,2120],{"class":94},[77,48635,2628],{"class":87},[77,48637,48638,48640,48642,48644,48646,48648,48650,48652,48654,48656,48658,48660,48662,48664],{"class":79,"line":4169},[77,48639,33313],{"class":94},[77,48641,44270],{"class":87},[77,48643,268],{"class":2123},[77,48645,33321],{"class":87},[77,48647,33324],{"class":7691},[77,48649,268],{"class":2123},[77,48651,44026],{"class":87},[77,48653,33333],{"class":7691},[77,48655,268],{"class":2123},[77,48657,44287],{"class":87},[77,48659,33342],{"class":7691},[77,48661,268],{"class":2123},[77,48663,2120],{"class":94},[77,48665,2628],{"class":87},[77,48667,48668],{"class":79,"line":4174},[77,48669,4875],{"emptyLinePlaceholder":2549},[77,48671,48672,48674,48676],{"class":79,"line":4203},[77,48673,33269],{"class":2123},[77,48675,33560],{"class":83},[77,48677,33563],{"class":87},[77,48679,48680,48682,48684,48686,48688,48690],{"class":79,"line":4208},[77,48681,44312],{"class":87},[77,48683,268],{"class":2123},[77,48685,33291],{"class":94},[77,48687,37650],{"class":87},[77,48689,33291],{"class":94},[77,48691,44323],{"class":87},[77,48693,48694,48696,48698,48700,48702,48704,48706,48708,48710,48712],{"class":79,"line":4225},[77,48695,9560],{"class":87},[77,48697,268],{"class":2123},[77,48699,33291],{"class":94},[77,48701,37650],{"class":87},[77,48703,33291],{"class":94},[77,48705,44338],{"class":87},[77,48707,33291],{"class":94},[77,48709,37650],{"class":87},[77,48711,33291],{"class":94},[77,48713,44347],{"class":87},[77,48715,48716,48718,48720,48722,48724,48726,48728,48730,48732,48734],{"class":79,"line":4230},[77,48717,44352],{"class":87},[77,48719,268],{"class":2123},[77,48721,33291],{"class":94},[77,48723,37650],{"class":87},[77,48725,33291],{"class":94},[77,48727,44363],{"class":87},[77,48729,33291],{"class":94},[77,48731,37650],{"class":87},[77,48733,33291],{"class":94},[77,48735,44372],{"class":87},[77,48737,48738,48740,48742,48744,48746,48748,48750,48752],{"class":79,"line":4235},[77,48739,44377],{"class":87},[77,48741,268],{"class":2123},[77,48743,33291],{"class":94},[77,48745,37650],{"class":87},[77,48747,33291],{"class":94},[77,48749,44388],{"class":87},[77,48751,33291],{"class":94},[77,48753,44393],{"class":87},[77,48755,48756],{"class":79,"line":4240},[77,48757,44398],{"class":323},[77,48759,48760,48762,48764,48766,48768,48770],{"class":79,"line":4254},[77,48761,17224],{"class":2123},[77,48763,44405],{"class":87},[77,48765,35152],{"class":7691},[77,48767,268],{"class":2123},[77,48769,2120],{"class":94},[77,48771,2628],{"class":87},[77,48773,48774],{"class":79,"line":4259},[77,48775,4875],{"emptyLinePlaceholder":2549},[77,48777,48778],{"class":79,"line":5052},[77,48779,44426],{"class":323},[77,48781,48782,48784,48786,48788,48790,48792,48794],{"class":79,"line":5066},[77,48783,17166],{"class":2123},[77,48785,44433],{"class":83},[77,48787,2622],{"class":87},[77,48789,33246],{"class":83},[77,48791,3171],{"class":87},[77,48793,33251],{"class":83},[77,48795,33254],{"class":87},[77,48797,48798],{"class":79,"line":5074},[77,48799,44448],{"class":323},[77,48801,48802,48804,48806],{"class":79,"line":5079},[77,48803,33269],{"class":2123},[77,48805,33272],{"class":94},[77,48807,44457],{"class":87},[77,48809,48810,48812,48814,48816,48818,48820],{"class":79,"line":5085},[77,48811,33285],{"class":94},[77,48813,44464],{"class":87},[77,48815,33291],{"class":94},[77,48817,33294],{"class":87},[77,48819,33297],{"class":94},[77,48821,4451],{"class":87},[77,48823,48824,48826,48828,48830],{"class":79,"line":5091},[77,48825,33313],{"class":94},[77,48827,44479],{"class":87},[77,48829,268],{"class":2123},[77,48831,40475],{"class":87},[77,48833,48834,48836,48838,48840,48842,48844,48846,48848,48850,48852,48854,48856,48858,48860,48862,48864,48866,48868,48870,48872,48874],{"class":79,"line":5096},[77,48835,40480],{"class":87},[77,48837,33324],{"class":7691},[77,48839,268],{"class":2123},[77,48841,2690],{"class":94},[77,48843,2992],{"class":87},[77,48845,33333],{"class":7691},[77,48847,268],{"class":2123},[77,48849,2819],{"class":94},[77,48851,2992],{"class":87},[77,48853,33342],{"class":7691},[77,48855,268],{"class":2123},[77,48857,2983],{"class":94},[77,48859,2992],{"class":87},[77,48861,33396],{"class":7691},[77,48863,268],{"class":2123},[77,48865,2696],{"class":94},[77,48867,2992],{"class":87},[77,48869,1196],{"class":7691},[77,48871,268],{"class":2123},[77,48873,2690],{"class":94},[77,48875,40513],{"class":87},[77,48877,48878],{"class":79,"line":10422},[77,48879,40518],{"class":87},[77,48881,48882,48884,48886,48888,48890,48892,48894,48896,48898,48900,48902,48904,48906],{"class":79,"line":10446},[77,48883,40563],{"class":87},[77,48885,33342],{"class":7691},[77,48887,268],{"class":2123},[77,48889,2690],{"class":94},[77,48891,2992],{"class":87},[77,48893,33396],{"class":7691},[77,48895,268],{"class":2123},[77,48897,2696],{"class":94},[77,48899,2992],{"class":87},[77,48901,1196],{"class":7691},[77,48903,268],{"class":2123},[77,48905,2120],{"class":94},[77,48907,2628],{"class":87},[77,48909,48910],{"class":79,"line":10451},[77,48911,40592],{"class":87},[77,48913,48914,48916,48918,48920],{"class":79,"line":10457},[77,48915,33313],{"class":94},[77,48917,44570],{"class":87},[77,48919,268],{"class":2123},[77,48921,40475],{"class":87},[77,48923,48924,48926,48928,48930,48932,48934,48936,48938,48940,48942,48944,48946,48948],{"class":79,"line":10484},[77,48925,40480],{"class":87},[77,48927,33324],{"class":7691},[77,48929,268],{"class":2123},[77,48931,2819],{"class":94},[77,48933,2992],{"class":87},[77,48935,33333],{"class":7691},[77,48937,268],{"class":2123},[77,48939,2819],{"class":94},[77,48941,2992],{"class":87},[77,48943,33342],{"class":7691},[77,48945,268],{"class":2123},[77,48947,2120],{"class":94},[77,48949,40513],{"class":87},[77,48951,48952],{"class":79,"line":10489},[77,48953,40518],{"class":87},[77,48955,48956,48958,48960,48962,48964,48966,48968,48970,48972,48974,48976,48978,48980,48982,48984,48986,48988],{"class":79,"line":10495},[77,48957,40480],{"class":87},[77,48959,33324],{"class":7691},[77,48961,268],{"class":2123},[77,48963,2819],{"class":94},[77,48965,2992],{"class":87},[77,48967,33333],{"class":7691},[77,48969,268],{"class":2123},[77,48971,44625],{"class":94},[77,48973,2992],{"class":87},[77,48975,33342],{"class":7691},[77,48977,268],{"class":2123},[77,48979,2690],{"class":94},[77,48981,2992],{"class":87},[77,48983,1196],{"class":7691},[77,48985,268],{"class":2123},[77,48987,2120],{"class":94},[77,48989,40513],{"class":87},[77,48991,48992],{"class":79,"line":10507},[77,48993,40518],{"class":87},[77,48995,48996,48998,49000,49002,49004,49006,49008,49010,49012,49014,49016,49018,49020],{"class":79,"line":10519},[77,48997,40563],{"class":87},[77,48999,33342],{"class":7691},[77,49001,268],{"class":2123},[77,49003,2690],{"class":94},[77,49005,2992],{"class":87},[77,49007,33396],{"class":7691},[77,49009,268],{"class":2123},[77,49011,2696],{"class":94},[77,49013,2992],{"class":87},[77,49015,1196],{"class":7691},[77,49017,268],{"class":2123},[77,49019,2120],{"class":94},[77,49021,2628],{"class":87},[77,49023,49024],{"class":79,"line":10531},[77,49025,40592],{"class":87},[77,49027,49028,49030,49032,49034],{"class":79,"line":12189},[77,49029,33313],{"class":94},[77,49031,44686],{"class":87},[77,49033,268],{"class":2123},[77,49035,40475],{"class":87},[77,49037,49038,49040,49042,49044,49046,49048,49050,49052,49054,49056,49058,49060,49062,49064,49066],{"class":79,"line":12214},[77,49039,44695],{"class":87},[77,49041,44625],{"class":94},[77,49043,2992],{"class":87},[77,49045,2819],{"class":94},[77,49047,44704],{"class":87},[77,49049,2825],{"class":94},[77,49051,2992],{"class":87},[77,49053,34537],{"class":94},[77,49055,44713],{"class":87},[77,49057,3214],{"class":94},[77,49059,2992],{"class":87},[77,49061,2813],{"class":94},[77,49063,44722],{"class":87},[77,49065,2813],{"class":94},[77,49067,40513],{"class":87},[77,49069,49070,49072,49074,49076,49078,49080,49082,49084,49086,49088,49090,49092,49094,49096,49098],{"class":79,"line":12237},[77,49071,44695],{"class":87},[77,49073,37336],{"class":94},[77,49075,2992],{"class":87},[77,49077,34537],{"class":94},[77,49079,44704],{"class":87},[77,49081,34537],{"class":94},[77,49083,2992],{"class":87},[77,49085,44625],{"class":94},[77,49087,44713],{"class":87},[77,49089,2813],{"class":94},[77,49091,2992],{"class":87},[77,49093,2825],{"class":94},[77,49095,44722],{"class":87},[77,49097,2819],{"class":94},[77,49099,40513],{"class":87},[77,49101,49102,49104,49106,49108,49110,49112,49114,49116,49118,49120,49122,49124,49126],{"class":79,"line":12261},[77,49103,40563],{"class":87},[77,49105,33342],{"class":7691},[77,49107,268],{"class":2123},[77,49109,2690],{"class":94},[77,49111,2992],{"class":87},[77,49113,33396],{"class":7691},[77,49115,268],{"class":2123},[77,49117,2696],{"class":94},[77,49119,2992],{"class":87},[77,49121,1196],{"class":7691},[77,49123,268],{"class":2123},[77,49125,2120],{"class":94},[77,49127,2628],{"class":87},[77,49129,49130],{"class":79,"line":12266},[77,49131,40592],{"class":87},[77,49133,49134,49136,49138,49140],{"class":79,"line":12271},[77,49135,33313],{"class":94},[77,49137,44797],{"class":87},[77,49139,268],{"class":2123},[77,49141,40475],{"class":87},[77,49143,49144,49146,49148,49150,49152,49154,49156,49158,49160,49162,49164,49166,49168,49170,49172],{"class":79,"line":12276},[77,49145,44695],{"class":87},[77,49147,44808],{"class":94},[77,49149,2992],{"class":87},[77,49151,44625],{"class":94},[77,49153,44704],{"class":87},[77,49155,2825],{"class":94},[77,49157,2992],{"class":87},[77,49159,44821],{"class":94},[77,49161,44713],{"class":87},[77,49163,3214],{"class":94},[77,49165,2992],{"class":87},[77,49167,3220],{"class":94},[77,49169,44722],{"class":87},[77,49171,2819],{"class":94},[77,49173,40513],{"class":87},[77,49175,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194,49196,49198,49200,49202,49204],{"class":79,"line":12285},[77,49177,44695],{"class":87},[77,49179,40923],{"class":94},[77,49181,2992],{"class":87},[77,49183,23518],{"class":94},[77,49185,44704],{"class":87},[77,49187,3231],{"class":94},[77,49189,2992],{"class":87},[77,49191,33968],{"class":94},[77,49193,44713],{"class":87},[77,49195,3413],{"class":94},[77,49197,2992],{"class":87},[77,49199,2819],{"class":94},[77,49201,44722],{"class":87},[77,49203,2819],{"class":94},[77,49205,40513],{"class":87},[77,49207,49208,49210,49212,49214,49216,49218,49220,49222,49224,49226,49228,49230,49232,49234,49236],{"class":79,"line":12290},[77,49209,44695],{"class":87},[77,49211,40923],{"class":94},[77,49213,2992],{"class":87},[77,49215,34537],{"class":94},[77,49217,44704],{"class":87},[77,49219,34537],{"class":94},[77,49221,2992],{"class":87},[77,49223,37336],{"class":94},[77,49225,44713],{"class":87},[77,49227,3413],{"class":94},[77,49229,2992],{"class":87},[77,49231,2819],{"class":94},[77,49233,44722],{"class":87},[77,49235,2819],{"class":94},[77,49237,40513],{"class":87},[77,49239,49240,49242,49244,49246,49248,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268],{"class":79,"line":12296},[77,49241,44695],{"class":87},[77,49243,40923],{"class":94},[77,49245,2992],{"class":87},[77,49247,3231],{"class":94},[77,49249,44704],{"class":87},[77,49251,34537],{"class":94},[77,49253,2992],{"class":87},[77,49255,44918],{"class":94},[77,49257,44713],{"class":87},[77,49259,2813],{"class":94},[77,49261,2992],{"class":87},[77,49263,2819],{"class":94},[77,49265,44722],{"class":87},[77,49267,2819],{"class":94},[77,49269,40513],{"class":87},[77,49271,49272,49274,49276,49278,49280,49282,49284,49286,49288,49290,49292,49294,49296,49298,49300],{"class":79,"line":12317},[77,49273,44695],{"class":87},[77,49275,44939],{"class":94},[77,49277,2992],{"class":87},[77,49279,37336],{"class":94},[77,49281,44704],{"class":87},[77,49283,23518],{"class":94},[77,49285,2992],{"class":87},[77,49287,44952],{"class":94},[77,49289,44713],{"class":87},[77,49291,2813],{"class":94},[77,49293,2992],{"class":87},[77,49295,34537],{"class":94},[77,49297,44722],{"class":87},[77,49299,34537],{"class":94},[77,49301,40513],{"class":87},[77,49303,49304,49306,49308,49310,49312,49314,49316,49318,49320,49322,49324,49326,49328],{"class":79,"line":12323},[77,49305,40563],{"class":87},[77,49307,33342],{"class":7691},[77,49309,268],{"class":2123},[77,49311,2690],{"class":94},[77,49313,2992],{"class":87},[77,49315,33396],{"class":7691},[77,49317,268],{"class":2123},[77,49319,2696],{"class":94},[77,49321,2992],{"class":87},[77,49323,1196],{"class":7691},[77,49325,268],{"class":2123},[77,49327,2120],{"class":94},[77,49329,2628],{"class":87},[77,49331,49332],{"class":79,"line":12337},[77,49333,40592],{"class":87},[77,49335,49336,49338,49340,49342],{"class":79,"line":12343},[77,49337,33313],{"class":94},[77,49339,45005],{"class":87},[77,49341,268],{"class":2123},[77,49343,40475],{"class":87},[77,49345,49346,49348,49350,49352,49354,49356,49358,49360,49362,49364,49366,49368,49370,49372,49374],{"class":79,"line":12370},[77,49347,44695],{"class":87},[77,49349,45016],{"class":94},[77,49351,2992],{"class":87},[77,49353,37336],{"class":94},[77,49355,44704],{"class":87},[77,49357,23518],{"class":94},[77,49359,2992],{"class":87},[77,49361,44952],{"class":94},[77,49363,44713],{"class":87},[77,49365,2813],{"class":94},[77,49367,2992],{"class":87},[77,49369,34537],{"class":94},[77,49371,44722],{"class":87},[77,49373,34537],{"class":94},[77,49375,40513],{"class":87},[77,49377,49378,49380,49382,49384,49386,49388,49390,49392,49394,49396,49398,49400,49402,49404,49406],{"class":79,"line":12379},[77,49379,44695],{"class":87},[77,49381,45016],{"class":94},[77,49383,2992],{"class":87},[77,49385,37406],{"class":94},[77,49387,44704],{"class":87},[77,49389,44625],{"class":94},[77,49391,2992],{"class":87},[77,49393,37406],{"class":94},[77,49395,44713],{"class":87},[77,49397,3220],{"class":94},[77,49399,2992],{"class":87},[77,49401,34537],{"class":94},[77,49403,44722],{"class":87},[77,49405,34537],{"class":94},[77,49407,40513],{"class":87},[77,49409,49410,49412,49414,49416,49418],{"class":79,"line":12385},[77,49411,45079],{"class":87},[77,49413,2120],{"class":94},[77,49415,2992],{"class":87},[77,49417,2120],{"class":94},[77,49419,45088],{"class":87},[77,49421,49422],{"class":79,"line":12393},[77,49423,41256],{"class":87},[77,49425,49426,49428,49430,49432,49434],{"class":79,"line":12398},[77,49427,41261],{"class":87},[77,49429,45099],{"class":94},[77,49431,2992],{"class":87},[77,49433,2696],{"class":94},[77,49435,2628],{"class":87},[77,49437,49438],{"class":79,"line":19074},[77,49439,40592],{"class":87},[77,49441,49442],{"class":79,"line":19080},[77,49443,45114],{"class":323},[77,49445,49446,49448,49450,49452,49454],{"class":79,"line":19103},[77,49447,5878],{"class":2123},[77,49449,41334],{"class":87},[77,49451,28511],{"class":2123},[77,49453,41339],{"class":94},[77,49455,41342],{"class":87},[77,49457,49458,49460,49462],{"class":79,"line":19109},[77,49459,7117],{"class":2123},[77,49461,41354],{"class":94},[77,49463,41357],{"class":87},[77,49465,49466,49468,49470,49472,49474,49476,49478,49480,49482],{"class":79,"line":19132},[77,49467,41367],{"class":87},[77,49469,45141],{"class":7691},[77,49471,268],{"class":2123},[77,49473,45146],{"class":271},[77,49475,2992],{"class":87},[77,49477,41370],{"class":7691},[77,49479,268],{"class":2123},[77,49481,41375],{"class":271},[77,49483,2628],{"class":87},[77,49485,49486],{"class":79,"line":19146},[77,49487,45161],{"class":323},[77,49489,49490],{"class":79,"line":19166},[77,49491,45166],{"class":323},[77,49493,49494],{"class":79,"line":19172},[77,49495,45171],{"class":323},[77,49497,49498],{"class":79,"line":19183},[77,49499,45176],{"class":323},[77,49501,49502],{"class":79,"line":19206},[77,49503,45181],{"class":323},[77,49505,49506],{"class":79,"line":19228},[77,49507,45186],{"class":323},[77,49509,49510,49512,49514,49516,49518,49520],{"class":79,"line":19233},[77,49511,41387],{"class":2123},[77,49513,41390],{"class":87},[77,49515,41393],{"class":2123},[77,49517,41396],{"class":2123},[77,49519,41399],{"class":94},[77,49521,6214],{"class":87},[77,49523,49524,49526,49528],{"class":79,"line":19239},[77,49525,41411],{"class":87},[77,49527,1939],{"class":94},[77,49529,2628],{"class":87},[77,49531,49532,49534,49536],{"class":79,"line":19253},[77,49533,45213],{"class":2123},[77,49535,41354],{"class":94},[77,49537,41430],{"class":87},[77,49539,49540,49542,49544,49546,49548],{"class":79,"line":19266},[77,49541,45222],{"class":87},[77,49543,1939],{"class":94},[77,49545,2992],{"class":87},[77,49547,41452],{"class":94},[77,49549,2628],{"class":87},[77,49551,49552,49554,49556,49558,49560,49562],{"class":79,"line":19271},[77,49553,45235],{"class":2123},[77,49555,41390],{"class":87},[77,49557,41393],{"class":2123},[77,49559,41396],{"class":2123},[77,49561,41399],{"class":94},[77,49563,6214],{"class":87},[77,49565,49566,49568,49570],{"class":79,"line":19285},[77,49567,45250],{"class":87},[77,49569,1939],{"class":94},[77,49571,2628],{"class":87},[77,49573,49574],{"class":79,"line":19290},[77,49575,37631],{"class":323},[77,49577,49578,49580,49582],{"class":79,"line":19296},[77,49579,33269],{"class":2123},[77,49581,33560],{"class":83},[77,49583,33563],{"class":87},[77,49585,49586,49588,49590,49592],{"class":79,"line":19301},[77,49587,33568],{"class":87},[77,49589,268],{"class":2123},[77,49591,33291],{"class":94},[77,49593,45277],{"class":87},[77,49595,49596,49598,49600,49602],{"class":79,"line":19315},[77,49597,33568],{"class":87},[77,49599,268],{"class":2123},[77,49601,33291],{"class":94},[77,49603,45288],{"class":87},[77,49605,49606,49608,49610,49612],{"class":79,"line":19320},[77,49607,33568],{"class":87},[77,49609,268],{"class":2123},[77,49611,33291],{"class":94},[77,49613,45299],{"class":87},[77,49615,49616,49618,49620,49622],{"class":79,"line":19325},[77,49617,33568],{"class":87},[77,49619,268],{"class":2123},[77,49621,33291],{"class":94},[77,49623,45310],{"class":87},[77,49625,49626,49628,49630,49632],{"class":79,"line":19339},[77,49627,33568],{"class":87},[77,49629,268],{"class":2123},[77,49631,33291],{"class":94},[77,49633,45321],{"class":87},[77,49635,49636,49638],{"class":79,"line":19351},[77,49637,17224],{"class":2123},[77,49639,33676],{"class":87},[77,49641,49642],{"class":79,"line":19356},[77,49643,4875],{"emptyLinePlaceholder":2549},[77,49645,49646],{"class":79,"line":19369},[77,49647,45336],{"class":323},[77,49649,49650,49652,49654,49656,49658],{"class":79,"line":19374},[77,49651,4008],{"class":2123},[77,49653,33687],{"class":94},[77,49655,5424],{"class":2123},[77,49657,33692],{"class":271},[77,49659,6214],{"class":87},[77,49661,49662,49664,49666,49668,49670,49672,49674,49676,49678],{"class":79,"line":19379},[77,49663,33704],{"class":87},[77,49665,268],{"class":2123},[77,49667,32919],{"class":87},[77,49669,33711],{"class":271},[77,49671,4180],{"class":2123},[77,49673,33716],{"class":87},[77,49675,4177],{"class":2123},[77,49677,32944],{"class":271},[77,49679,2628],{"class":87},[77,49681,49682,49684,49686],{"class":79,"line":19384},[77,49683,33756],{"class":87},[77,49685,268],{"class":2123},[77,49687,45377],{"class":87},[77,49689,49690,49692,49694,49696,49698,49700,49702,49704],{"class":79,"line":19397},[77,49691,33766],{"class":94},[77,49693,33769],{"class":87},[77,49695,2120],{"class":94},[77,49697,2992],{"class":87},[77,49699,33968],{"class":94},[77,49701,2992],{"class":87},[77,49703,33968],{"class":94},[77,49705,33782],{"class":87},[24468,49707,49709],{"id":49708},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[24,49711,49712],{},"计算图片的均值与方差，用于训练中归一化处理操作",[67,49714,49716],{"className":32846,"code":49715,"language":32848,"meta":72,"style":72},"# 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",[74,49717,49718,49723,49736,49741,49747,49752,49762,49766,49771,49781,49785,49790,49800,49817,49821,49826,49838,49850,49881,49890,49900,49910,49914,49919,49934,49938,49943,49948,49953,49963,49968,49993,49997,50002,50017,50021,50034,50038,50043,50048,50053,50058,50063,50073,50083,50106,50114,50122,50130,50134,50146,50150,50155,50159,50163,50170,50190,50214,50221,50235,50240,50245,50249,50263,50267,50279],{"__ignoreMap":72},[77,49719,49720],{"class":79,"line":80},[77,49721,49722],{"class":323},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[77,49724,49725,49727,49730,49733],{"class":79,"line":91},[77,49726,33205],{"class":2123},[77,49728,49729],{"class":94}," PIL",[77,49731,49732],{"class":2123}," import",[77,49734,49735],{"class":87}," Image\n",[77,49737,49738],{"class":79,"line":107},[77,49739,49740],{"class":323},"# os 用来处理文件夹和文件路径\n",[77,49742,49743,49745],{"class":79,"line":191},[77,49744,32860],{"class":2123},[77,49746,47771],{"class":87},[77,49748,49749],{"class":79,"line":1543},[77,49750,49751],{"class":323},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[77,49753,49754,49756,49758,49760],{"class":79,"line":1549},[77,49755,32860],{"class":2123},[77,49757,33847],{"class":87},[77,49759,33850],{"class":2123},[77,49761,33853],{"class":87},[77,49763,49764],{"class":79,"line":1566},[77,49765,4875],{"emptyLinePlaceholder":2549},[77,49767,49768],{"class":79,"line":1572},[77,49769,49770],{"class":323},"# 文件夹路径，包含所有图片文件\n",[77,49772,49773,49776,49778],{"class":79,"line":1589},[77,49774,49775],{"class":87},"folder_path ",[77,49777,268],{"class":2123},[77,49779,49780],{"class":271}," 'data_cat_dog'\n",[77,49782,49783],{"class":79,"line":1595},[77,49784,4875],{"emptyLinePlaceholder":2549},[77,49786,49787],{"class":79,"line":4088},[77,49788,49789],{"class":323},"# 初始化累积变量\n",[77,49791,49792,49795,49797],{"class":79,"line":4093},[77,49793,49794],{"class":87},"total_pixels ",[77,49796,268],{"class":2123},[77,49798,49799],{"class":94}," 0\n",[77,49801,49802,49805,49807,49810,49812,49814],{"class":79,"line":4099},[77,49803,49804],{"class":87},"sum_normalized_pixel_values ",[77,49806,268],{"class":2123},[77,49808,49809],{"class":87}," np.zeros(",[77,49811,2690],{"class":94},[77,49813,48274],{"class":87},[77,49815,49816],{"class":323},"# 如果是RGB图像，需要三个通道的均值和方差\n",[77,49818,49819],{"class":79,"line":4104},[77,49820,4875],{"emptyLinePlaceholder":2549},[77,49822,49823],{"class":79,"line":4118},[77,49824,49825],{"class":323},"# 遍历文件夹中的图片文件\n",[77,49827,49828,49830,49833,49835],{"class":79,"line":4123},[77,49829,5500],{"class":2123},[77,49831,49832],{"class":87}," root, dirs, files ",[77,49834,28511],{"class":2123},[77,49836,49837],{"class":87}," os.walk(folder_path):\n",[77,49839,49840,49842,49845,49847],{"class":79,"line":4129},[77,49841,5676],{"class":2123},[77,49843,49844],{"class":87}," filename ",[77,49846,28511],{"class":2123},[77,49848,49849],{"class":87}," files:\n",[77,49851,49852,49854,49857,49860,49862,49865,49867,49870,49872,49875,49878],{"class":79,"line":4150},[77,49853,4972],{"class":2123},[77,49855,49856],{"class":87}," filename.endswith((",[77,49858,49859],{"class":271},"'.jpg'",[77,49861,680],{"class":87},[77,49863,49864],{"class":271},"'.jpeg'",[77,49866,680],{"class":87},[77,49868,49869],{"class":271},"'.png'",[77,49871,680],{"class":87},[77,49873,49874],{"class":271},"'.bmp'",[77,49876,49877],{"class":87},")):  ",[77,49879,49880],{"class":323},"# 可根据实际情况添加其他格式\n",[77,49882,49883,49885,49887],{"class":79,"line":4155},[77,49884,48139],{"class":87},[77,49886,268],{"class":2123},[77,49888,49889],{"class":87}," os.path.join(root, filename)\n",[77,49891,49892,49895,49897],{"class":79,"line":4169},[77,49893,49894],{"class":87},"            image ",[77,49896,268],{"class":2123},[77,49898,49899],{"class":87}," Image.open(image_path)\n",[77,49901,49902,49905,49907],{"class":79,"line":4174},[77,49903,49904],{"class":87},"            image_array ",[77,49906,268],{"class":2123},[77,49908,49909],{"class":87}," np.array(image)\n",[77,49911,49912],{"class":79,"line":4203},[77,49913,4875],{"emptyLinePlaceholder":2549},[77,49915,49916],{"class":79,"line":4208},[77,49917,49918],{"class":323},"            # 归一化像素值到0-1之间\n",[77,49920,49921,49924,49926,49929,49931],{"class":79,"line":4225},[77,49922,49923],{"class":87},"            normalized_image_array ",[77,49925,268],{"class":2123},[77,49927,49928],{"class":87}," image_array ",[77,49930,3197],{"class":2123},[77,49932,49933],{"class":94}," 255.0\n",[77,49935,49936],{"class":79,"line":4230},[77,49937,4875],{"emptyLinePlaceholder":2549},[77,49939,49940],{"class":79,"line":4235},[77,49941,49942],{"class":323},"            # print(image_path)\n",[77,49944,49945],{"class":79,"line":4240},[77,49946,49947],{"class":323},"            # print(normalized_image_array.shape)\n",[77,49949,49950],{"class":79,"line":4254},[77,49951,49952],{"class":323},"            # 累积归一化后的像素值和像素数量\n",[77,49954,49955,49958,49960],{"class":79,"line":4259},[77,49956,49957],{"class":87},"            total_pixels ",[77,49959,11950],{"class":2123},[77,49961,49962],{"class":87}," normalized_image_array.size\n",[77,49964,49965],{"class":79,"line":5052},[77,49966,49967],{"class":323},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[77,49969,49970,49973,49975,49978,49981,49983,49985,49987,49989,49991],{"class":79,"line":5066},[77,49971,49972],{"class":87},"            sum_normalized_pixel_values ",[77,49974,11950],{"class":2123},[77,49976,49977],{"class":87}," np.sum(normalized_image_array, ",[77,49979,49980],{"class":7691},"axis",[77,49982,268],{"class":2123},[77,49984,2622],{"class":87},[77,49986,1939],{"class":94},[77,49988,680],{"class":87},[77,49990,2120],{"class":94},[77,49992,32965],{"class":87},[77,49994,49995],{"class":79,"line":5074},[77,49996,4875],{"emptyLinePlaceholder":2549},[77,49998,49999],{"class":79,"line":5079},[77,50000,50001],{"class":323},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[77,50003,50004,50007,50009,50012,50014],{"class":79,"line":5085},[77,50005,50006],{"class":87},"mean ",[77,50008,268],{"class":2123},[77,50010,50011],{"class":87}," sum_normalized_pixel_values ",[77,50013,3197],{"class":2123},[77,50015,50016],{"class":87}," total_pixels\n",[77,50018,50019],{"class":79,"line":5091},[77,50020,4875],{"emptyLinePlaceholder":2549},[77,50022,50023,50026,50028,50030,50032],{"class":79,"line":5096},[77,50024,50025],{"class":87},"sum_squared_diff ",[77,50027,268],{"class":2123},[77,50029,49809],{"class":87},[77,50031,2690],{"class":94},[77,50033,2628],{"class":87},[77,50035,50036],{"class":79,"line":10422},[77,50037,4875],{"emptyLinePlaceholder":2549},[77,50039,50040],{"class":79,"line":10446},[77,50041,50042],{"class":323},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[77,50044,50045],{"class":79,"line":10451},[77,50046,50047],{"class":323},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[77,50049,50050],{"class":79,"line":10457},[77,50051,50052],{"class":323},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[77,50054,50055],{"class":79,"line":10484},[77,50056,50057],{"class":323},"# Image.open(image_path)：打开图片\n",[77,50059,50060],{"class":79,"line":10489},[77,50061,50062],{"class":323},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[77,50064,50065,50067,50069,50071],{"class":79,"line":10495},[77,50066,5500],{"class":2123},[77,50068,49832],{"class":87},[77,50070,28511],{"class":2123},[77,50072,49837],{"class":87},[77,50074,50075,50077,50079,50081],{"class":79,"line":10507},[77,50076,5676],{"class":2123},[77,50078,49844],{"class":87},[77,50080,28511],{"class":2123},[77,50082,49849],{"class":87},[77,50084,50085,50087,50089,50091,50093,50095,50097,50099,50101,50103],{"class":79,"line":10519},[77,50086,4972],{"class":2123},[77,50088,49856],{"class":87},[77,50090,49859],{"class":271},[77,50092,680],{"class":87},[77,50094,49864],{"class":271},[77,50096,680],{"class":87},[77,50098,49869],{"class":271},[77,50100,680],{"class":87},[77,50102,49874],{"class":271},[77,50104,50105],{"class":87},")):\n",[77,50107,50108,50110,50112],{"class":79,"line":10531},[77,50109,48139],{"class":87},[77,50111,268],{"class":2123},[77,50113,49889],{"class":87},[77,50115,50116,50118,50120],{"class":79,"line":12189},[77,50117,49894],{"class":87},[77,50119,268],{"class":2123},[77,50121,49899],{"class":87},[77,50123,50124,50126,50128],{"class":79,"line":12214},[77,50125,49904],{"class":87},[77,50127,268],{"class":2123},[77,50129,49909],{"class":87},[77,50131,50132],{"class":79,"line":12237},[77,50133,49918],{"class":323},[77,50135,50136,50138,50140,50142,50144],{"class":79,"line":12261},[77,50137,49923],{"class":87},[77,50139,268],{"class":2123},[77,50141,49928],{"class":87},[77,50143,3197],{"class":2123},[77,50145,49933],{"class":94},[77,50147,50148],{"class":79,"line":12266},[77,50149,49947],{"class":323},[77,50151,50152],{"class":79,"line":12271},[77,50153,50154],{"class":323},"            # print(mean.shape)\n",[77,50156,50157],{"class":79,"line":12276},[77,50158,49942],{"class":323},[77,50160,50161],{"class":79,"line":12285},[77,50162,4875],{"emptyLinePlaceholder":2549},[77,50164,50165,50168],{"class":79,"line":12290},[77,50166,50167],{"class":2123},"            try",[77,50169,6214],{"class":87},[77,50171,50172,50175,50177,50180,50182,50185,50187],{"class":79,"line":12296},[77,50173,50174],{"class":87},"                diff ",[77,50176,268],{"class":2123},[77,50178,50179],{"class":87}," (normalized_image_array ",[77,50181,3145],{"class":2123},[77,50183,50184],{"class":87}," mean) ",[77,50186,13134],{"class":2123},[77,50188,50189],{"class":94}," 2\n",[77,50191,50192,50195,50197,50200,50202,50204,50206,50208,50210,50212],{"class":79,"line":12317},[77,50193,50194],{"class":87},"                sum_squared_diff ",[77,50196,11950],{"class":2123},[77,50198,50199],{"class":87}," np.sum(diff, ",[77,50201,49980],{"class":7691},[77,50203,268],{"class":2123},[77,50205,2622],{"class":87},[77,50207,1939],{"class":94},[77,50209,680],{"class":87},[77,50211,2120],{"class":94},[77,50213,32965],{"class":87},[77,50215,50216,50219],{"class":79,"line":12323},[77,50217,50218],{"class":2123},"            except",[77,50220,6214],{"class":87},[77,50222,50223,50226,50228,50230,50233],{"class":79,"line":12337},[77,50224,50225],{"class":94},"                print",[77,50227,2622],{"class":87},[77,50229,2672],{"class":2123},[77,50231,50232],{"class":271},"\"捕获到自定义异常\"",[77,50234,2628],{"class":87},[77,50236,50237],{"class":79,"line":12343},[77,50238,50239],{"class":323},"            # diff = (normalized_image_array - mean) ** 2\n",[77,50241,50242],{"class":79,"line":12370},[77,50243,50244],{"class":323},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[77,50246,50247],{"class":79,"line":12379},[77,50248,4875],{"emptyLinePlaceholder":2549},[77,50250,50251,50254,50256,50259,50261],{"class":79,"line":12385},[77,50252,50253],{"class":87},"variance ",[77,50255,268],{"class":2123},[77,50257,50258],{"class":87}," sum_squared_diff ",[77,50260,3197],{"class":2123},[77,50262,50016],{"class":87},[77,50264,50265],{"class":79,"line":12393},[77,50266,4875],{"emptyLinePlaceholder":2549},[77,50268,50269,50271,50273,50276],{"class":79,"line":12398},[77,50270,32883],{"class":94},[77,50272,2622],{"class":87},[77,50274,50275],{"class":271},"\"Mean:\"",[77,50277,50278],{"class":87},", mean)\n",[77,50280,50281,50283,50285,50288],{"class":79,"line":19074},[77,50282,32883],{"class":94},[77,50284,2622],{"class":87},[77,50286,50287],{"class":271},"\"Variance:\"",[77,50289,50290],{"class":87},", variance)\n",[67,50292,50294],{"className":32846,"code":50293,"language":32848,"meta":72,"style":72},"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",[74,50295,50296,50302,50308,50318,50324,50334,50348,50358,50368,50378,50382,50392,50402,50406,50410,50418,50423,50428,50447,50451,50456,50461,50466,50471,50512,50517,50527,50532,50545,50550,50555,50560,50565,50570,50574,50579,50584,50606,50610,50642,50656,50666,50676,50680,50690,50704,50714,50724,50734,50740,50744,50748,50752,50756,50760,50768,50788,50792,50796,50800,50804,50820,50824,50828,50836,50840,50844,50852,50856,50860,50864,50872,50876,50880,50884,50892,50896,50904,50908,50916,50920,50928,50932,50940,50944,50948,50956,50960,50964,50976,51000,51014,51018,51022,51026,51034,51038,51046,51050,51058,51062,51070,51074,51082,51086,51094,51098,51110,51114,51122,51126,51134,51138,51142,51146,51150,51158,51162,51178,51182,51190,51194,51198,51202,51206,51210,51214,51218,51234,51238,51250,51254,51266,51270,51282,51286,51294,51298,51306,51310,51314,51318,51324,51328,51336,51340,51356,51360,51368,51372,51388,51400,51404,51416,51420,51424,51432,51436,51440,51448,51452,51460,51464,51472,51476,51480,51522,51564,51568,51572,51588,51592,51608,51612,51616,51624,51628,51632,51644,51682,51686,51690,51698,51702,51716,51726,51732,51738,51744,51750,51754,51758,51764,51768,51772,51780,51784,51802,51806,51810,51814,51830,51834,51838,51842,51846,51850,51870,51890,51894,51898,51902,51910,51918,51922,51938,51958,51978,51982,51987,51996,52005,52010,52015,52020,52033,52038,52047,52056,52073],{"__ignoreMap":72},[77,50297,50298,50300],{"class":79,"line":80},[77,50299,32860],{"class":2123},[77,50301,34289],{"class":87},[77,50303,50304,50306],{"class":79,"line":91},[77,50305,32860],{"class":2123},[77,50307,34296],{"class":87},[77,50309,50310,50312,50314,50316],{"class":79,"line":107},[77,50311,32860],{"class":2123},[77,50313,34307],{"class":87},[77,50315,33850],{"class":2123},[77,50317,34312],{"class":87},[77,50319,50320,50322],{"class":79,"line":191},[77,50321,32860],{"class":2123},[77,50323,32863],{"class":87},[77,50325,50326,50328,50330,50332],{"class":79,"line":1543},[77,50327,33205],{"class":2123},[77,50329,33882],{"class":87},[77,50331,32860],{"class":2123},[77,50333,34329],{"class":87},[77,50335,50336,50338,50340,50342,50345],{"class":79,"line":1549},[77,50337,33205],{"class":2123},[77,50339,33835],{"class":87},[77,50341,32860],{"class":2123},[77,50343,50344],{"class":87}," ImageFolder ",[77,50346,50347],{"class":323},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[77,50349,50350,50352,50354,50356],{"class":79,"line":1566},[77,50351,33205],{"class":2123},[77,50353,33865],{"class":87},[77,50355,32860],{"class":2123},[77,50357,33870],{"class":87},[77,50359,50360,50362,50364,50366],{"class":79,"line":1572},[77,50361,32860],{"class":2123},[77,50363,33882],{"class":87},[77,50365,33850],{"class":2123},[77,50367,33887],{"class":87},[77,50369,50370,50372,50374,50376],{"class":79,"line":1589},[77,50371,32860],{"class":2123},[77,50373,33899],{"class":87},[77,50375,33850],{"class":2123},[77,50377,33904],{"class":87},[77,50379,50380],{"class":79,"line":1595},[77,50381,34374],{"class":323},[77,50383,50384,50386,50388,50390],{"class":79,"line":4088},[77,50385,33205],{"class":2123},[77,50387,34381],{"class":87},[77,50389,32860],{"class":2123},[77,50391,45497],{"class":87},[77,50393,50394,50396,50398,50400],{"class":79,"line":4093},[77,50395,33205],{"class":2123},[77,50397,33208],{"class":87},[77,50399,32860],{"class":2123},[77,50401,33213],{"class":87},[77,50403,50404],{"class":79,"line":4099},[77,50405,4875],{"emptyLinePlaceholder":2549},[77,50407,50408],{"class":79,"line":4104},[77,50409,34409],{"class":323},[77,50411,50412,50414,50416],{"class":79,"line":4118},[77,50413,34414],{"class":2123},[77,50415,34417],{"class":83},[77,50417,34420],{"class":87},[77,50419,50420],{"class":79,"line":4123},[77,50421,50422],{"class":323},"    # 导入自己的数据集，并进行数据处理\n",[77,50424,50425],{"class":79,"line":4129},[77,50426,50427],{"class":323},"    # 定义数据集的路径\n",[77,50429,50430,50433,50435,50437,50439,50441,50445],{"class":79,"line":4150},[77,50431,50432],{"class":94},"    ROOT_PATH",[77,50434,268],{"class":2123},[77,50436,3283],{"class":2123},[77,50438,2865],{"class":271},[77,50440,3171],{"class":94},[77,50442,50444],{"class":50443},"sA_wV","\u002Fdata\u002Ftrain",[77,50446,27601],{"class":271},[77,50448,50449],{"class":79,"line":4155},[77,50450,4875],{"emptyLinePlaceholder":2549},[77,50452,50453],{"class":79,"line":4169},[77,50454,50455],{"class":323},"    # 定义归一化方法\n",[77,50457,50458],{"class":79,"line":4174},[77,50459,50460],{"class":323},"    # 这里需要先计算一下数据集的均值和方差\n",[77,50462,50463],{"class":79,"line":4203},[77,50464,50465],{"class":323},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[77,50467,50468],{"class":79,"line":4208},[77,50469,50470],{"class":323},"    # 第一个参数是均值，第二个参数是方差\n",[77,50472,50473,50476,50478,50481,50484,50486,50489,50491,50494,50497,50500,50502,50505,50507,50510],{"class":79,"line":4225},[77,50474,50475],{"class":87},"    normalize",[77,50477,268],{"class":2123},[77,50479,50480],{"class":87},"transforms.Normalize([",[77,50482,50483],{"class":94},"0.162",[77,50485,2992],{"class":87},[77,50487,50488],{"class":94},"0.151",[77,50490,2992],{"class":87},[77,50492,50493],{"class":94},"0.138",[77,50495,50496],{"class":87},"],[",[77,50498,50499],{"class":94},"0.058",[77,50501,2992],{"class":87},[77,50503,50504],{"class":94},"0.052",[77,50506,2992],{"class":87},[77,50508,50509],{"class":94},"0.048",[77,50511,7132],{"class":87},[77,50513,50514],{"class":79,"line":4230},[77,50515,50516],{"class":323},"    # 定义数据集处理方法变量\n",[77,50518,50519,50522,50524],{"class":79,"line":4235},[77,50520,50521],{"class":87},"    train_transform",[77,50523,268],{"class":2123},[77,50525,50526],{"class":87},"transforms.Compose([\n",[77,50528,50529],{"class":79,"line":4240},[77,50530,50531],{"class":323},"        # 调整图像大小为224*224\n",[77,50533,50534,50537,50539,50541,50543],{"class":79,"line":4254},[77,50535,50536],{"class":87},"        transforms.Resize((",[77,50538,33968],{"class":94},[77,50540,2992],{"class":87},[77,50542,33968],{"class":94},[77,50544,45088],{"class":87},[77,50546,50547],{"class":79,"line":4259},[77,50548,50549],{"class":323},"        # 将图像转换为张量\n",[77,50551,50552],{"class":79,"line":5052},[77,50553,50554],{"class":87},"        transforms.ToTensor(),\n",[77,50556,50557],{"class":79,"line":5066},[77,50558,50559],{"class":87},"        normalize])\n",[77,50561,50562],{"class":79,"line":5074},[77,50563,50564],{"class":323},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[77,50566,50567],{"class":79,"line":5079},[77,50568,50569],{"class":323},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[77,50571,50572],{"class":79,"line":5085},[77,50573,4875],{"emptyLinePlaceholder":2549},[77,50575,50576],{"class":79,"line":5091},[77,50577,50578],{"class":323},"    # 加载数据集\n",[77,50580,50581],{"class":79,"line":5096},[77,50582,50583],{"class":323},"    # 传入数据集路径与处理方法\n",[77,50585,50586,50588,50590,50593,50596,50598,50601,50603],{"class":79,"line":10422},[77,50587,34425],{"class":87},[77,50589,268],{"class":2123},[77,50591,50592],{"class":87},"ImageFolder(",[77,50594,50595],{"class":94},"ROOT_PATH",[77,50597,2992],{"class":87},[77,50599,50600],{"class":7691},"transform",[77,50602,268],{"class":2123},[77,50604,50605],{"class":87},"train_transform)\n",[77,50607,50608],{"class":79,"line":10446},[77,50609,4875],{"emptyLinePlaceholder":2549},[77,50611,50612,50614,50616,50618,50620,50622,50624,50626,50628,50630,50632,50634,50636,50638,50640],{"class":79,"line":10451},[77,50613,34477],{"class":87},[77,50615,268],{"class":2123},[77,50617,34482],{"class":87},[77,50619,34485],{"class":94},[77,50621,2622],{"class":87},[77,50623,34490],{"class":94},[77,50625,3068],{"class":2123},[77,50627,9833],{"class":94},[77,50629,34497],{"class":87},[77,50631,34485],{"class":94},[77,50633,2622],{"class":87},[77,50635,34504],{"class":94},[77,50637,3068],{"class":2123},[77,50639,9833],{"class":94},[77,50641,34511],{"class":87},[77,50643,50644,50646,50648,50650,50652,50654],{"class":79,"line":10457},[77,50645,34516],{"class":87},[77,50647,268],{"class":2123},[77,50649,34521],{"class":87},[77,50651,34004],{"class":7691},[77,50653,268],{"class":2123},[77,50655,34009],{"class":87},[77,50657,50658,50660,50662,50664],{"class":79,"line":10484},[77,50659,34532],{"class":7691},[77,50661,268],{"class":2123},[77,50663,2813],{"class":94},[77,50665,33933],{"class":87},[77,50667,50668,50670,50672,50674],{"class":79,"line":10489},[77,50669,34544],{"class":7691},[77,50671,268],{"class":2123},[77,50673,33943],{"class":94},[77,50675,33933],{"class":87},[77,50677,50678],{"class":79,"line":10495},[77,50679,34555],{"class":323},[77,50681,50682,50684,50686,50688],{"class":79,"line":10507},[77,50683,34560],{"class":7691},[77,50685,268],{"class":2123},[77,50687,3009],{"class":94},[77,50689,2628],{"class":87},[77,50691,50692,50694,50696,50698,50700,50702],{"class":79,"line":10519},[77,50693,34571],{"class":87},[77,50695,268],{"class":2123},[77,50697,34001],{"class":87},[77,50699,34004],{"class":7691},[77,50701,268],{"class":2123},[77,50703,34582],{"class":87},[77,50705,50706,50708,50710,50712],{"class":79,"line":10531},[77,50707,34587],{"class":7691},[77,50709,268],{"class":2123},[77,50711,2813],{"class":94},[77,50713,33933],{"class":87},[77,50715,50716,50718,50720,50722],{"class":79,"line":12189},[77,50717,34598],{"class":7691},[77,50719,268],{"class":2123},[77,50721,33943],{"class":94},[77,50723,33933],{"class":87},[77,50725,50726,50728,50730,50732],{"class":79,"line":12214},[77,50727,34609],{"class":7691},[77,50729,268],{"class":2123},[77,50731,3009],{"class":94},[77,50733,2628],{"class":87},[77,50735,50736,50738],{"class":79,"line":12237},[77,50737,6565],{"class":2123},[77,50739,34622],{"class":87},[77,50741,50742],{"class":79,"line":12261},[77,50743,4875],{"emptyLinePlaceholder":2549},[77,50745,50746],{"class":79,"line":12266},[77,50747,34631],{"class":323},[77,50749,50750],{"class":79,"line":12271},[77,50751,34636],{"class":323},[77,50753,50754],{"class":79,"line":12276},[77,50755,4875],{"emptyLinePlaceholder":2549},[77,50757,50758],{"class":79,"line":12285},[77,50759,34645],{"class":323},[77,50761,50762,50764,50766],{"class":79,"line":12290},[77,50763,34414],{"class":2123},[77,50765,34652],{"class":83},[77,50767,34655],{"class":87},[77,50769,50770,50772,50774,50776,50778,50780,50782,50784,50786],{"class":79,"line":12296},[77,50771,33704],{"class":87},[77,50773,268],{"class":2123},[77,50775,32919],{"class":87},[77,50777,33711],{"class":271},[77,50779,4180],{"class":2123},[77,50781,33716],{"class":87},[77,50783,4177],{"class":2123},[77,50785,34674],{"class":271},[77,50787,2628],{"class":87},[77,50789,50790],{"class":79,"line":12317},[77,50791,4875],{"emptyLinePlaceholder":2549},[77,50793,50794],{"class":79,"line":12323},[77,50795,34689],{"class":323},[77,50797,50798],{"class":79,"line":12337},[77,50799,34694],{"class":323},[77,50801,50802],{"class":79,"line":12343},[77,50803,34699],{"class":323},[77,50805,50806,50808,50810,50812,50814,50816,50818],{"class":79,"line":12370},[77,50807,34704],{"class":87},[77,50809,268],{"class":2123},[77,50811,34709],{"class":87},[77,50813,34712],{"class":7691},[77,50815,268],{"class":2123},[77,50817,34717],{"class":94},[77,50819,2628],{"class":87},[77,50821,50822],{"class":79,"line":12379},[77,50823,4875],{"emptyLinePlaceholder":2549},[77,50825,50826],{"class":79,"line":12385},[77,50827,34728],{"class":323},[77,50829,50830,50832,50834],{"class":79,"line":12393},[77,50831,34733],{"class":87},[77,50833,268],{"class":2123},[77,50835,34738],{"class":87},[77,50837,50838],{"class":79,"line":12398},[77,50839,4875],{"emptyLinePlaceholder":2549},[77,50841,50842],{"class":79,"line":19074},[77,50843,34747],{"class":323},[77,50845,50846,50848,50850],{"class":79,"line":19080},[77,50847,33756],{"class":87},[77,50849,268],{"class":2123},[77,50851,34756],{"class":87},[77,50853,50854],{"class":79,"line":19103},[77,50855,34761],{"class":323},[77,50857,50858],{"class":79,"line":19109},[77,50859,34766],{"class":323},[77,50861,50862],{"class":79,"line":19132},[77,50863,34771],{"class":323},[77,50865,50866,50868,50870],{"class":79,"line":19146},[77,50867,34776],{"class":87},[77,50869,268],{"class":2123},[77,50871,34781],{"class":87},[77,50873,50874],{"class":79,"line":19166},[77,50875,4875],{"emptyLinePlaceholder":2549},[77,50877,50878],{"class":79,"line":19172},[77,50879,34794],{"class":323},[77,50881,50882],{"class":79,"line":19183},[77,50883,34799],{"class":323},[77,50885,50886,50888,50890],{"class":79,"line":19206},[77,50887,34804],{"class":87},[77,50889,268],{"class":2123},[77,50891,34809],{"class":94},[77,50893,50894],{"class":79,"line":19228},[77,50895,34814],{"class":323},[77,50897,50898,50900,50902],{"class":79,"line":19233},[77,50899,34819],{"class":87},[77,50901,268],{"class":2123},[77,50903,34824],{"class":87},[77,50905,50906],{"class":79,"line":19239},[77,50907,34829],{"class":323},[77,50909,50910,50912,50914],{"class":79,"line":19253},[77,50911,34834],{"class":87},[77,50913,268],{"class":2123},[77,50915,34824],{"class":87},[77,50917,50918],{"class":79,"line":19266},[77,50919,34843],{"class":323},[77,50921,50922,50924,50926],{"class":79,"line":19271},[77,50923,34848],{"class":87},[77,50925,268],{"class":2123},[77,50927,34824],{"class":87},[77,50929,50930],{"class":79,"line":19285},[77,50931,34857],{"class":323},[77,50933,50934,50936,50938],{"class":79,"line":19290},[77,50935,34862],{"class":87},[77,50937,268],{"class":2123},[77,50939,34824],{"class":87},[77,50941,50942],{"class":79,"line":19296},[77,50943,4875],{"emptyLinePlaceholder":2549},[77,50945,50946],{"class":79,"line":19301},[77,50947,34875],{"class":323},[77,50949,50950,50952,50954],{"class":79,"line":19315},[77,50951,34880],{"class":87},[77,50953,268],{"class":2123},[77,50955,34885],{"class":87},[77,50957,50958],{"class":79,"line":19320},[77,50959,4875],{"emptyLinePlaceholder":2549},[77,50961,50962],{"class":79,"line":19325},[77,50963,34898],{"class":323},[77,50965,50966,50968,50970,50972,50974],{"class":79,"line":19339},[77,50967,5676],{"class":2123},[77,50969,34905],{"class":87},[77,50971,28511],{"class":2123},[77,50973,34910],{"class":94},[77,50975,34913],{"class":87},[77,50977,50978,50980,50982,50984,50986,50988,50990,50992,50994,50996,50998],{"class":79,"line":19351},[77,50979,34918],{"class":94},[77,50981,2622],{"class":87},[77,50983,34923],{"class":271},[77,50985,34926],{"class":94},[77,50987,3197],{"class":271},[77,50989,34926],{"class":94},[77,50991,2865],{"class":271},[77,50993,34935],{"class":87},[77,50995,3145],{"class":2123},[77,50997,2120],{"class":94},[77,50999,32965],{"class":87},[77,51001,51002,51004,51006,51008,51010,51012],{"class":79,"line":19356},[77,51003,34918],{"class":94},[77,51005,2622],{"class":87},[77,51007,34950],{"class":271},[77,51009,3068],{"class":2123},[77,51011,3059],{"class":94},[77,51013,2628],{"class":87},[77,51015,51016],{"class":79,"line":19369},[77,51017,4875],{"emptyLinePlaceholder":2549},[77,51019,51020],{"class":79,"line":19374},[77,51021,34965],{"class":323},[77,51023,51024],{"class":79,"line":19379},[77,51025,34970],{"class":323},[77,51027,51028,51030,51032],{"class":79,"line":19384},[77,51029,34975],{"class":87},[77,51031,268],{"class":2123},[77,51033,34809],{"class":94},[77,51035,51036],{"class":79,"line":19397},[77,51037,34984],{"class":323},[77,51039,51040,51042,51044],{"class":79,"line":19402},[77,51041,34989],{"class":87},[77,51043,268],{"class":2123},[77,51045,5560],{"class":94},[77,51047,51048],{"class":79,"line":35100},[77,51049,34998],{"class":323},[77,51051,51052,51054,51056],{"class":79,"line":35106},[77,51053,35003],{"class":87},[77,51055,268],{"class":2123},[77,51057,34809],{"class":94},[77,51059,51060],{"class":79,"line":35112},[77,51061,35012],{"class":323},[77,51063,51064,51066,51068],{"class":79,"line":35118},[77,51065,35017],{"class":87},[77,51067,268],{"class":2123},[77,51069,5560],{"class":94},[77,51071,51072],{"class":79,"line":35124},[77,51073,35026],{"class":323},[77,51075,51076,51078,51080],{"class":79,"line":35135},[77,51077,35031],{"class":87},[77,51079,268],{"class":2123},[77,51081,5560],{"class":94},[77,51083,51084],{"class":79,"line":35141},[77,51085,35040],{"class":323},[77,51087,51088,51090,51092],{"class":79,"line":35161},[77,51089,35045],{"class":87},[77,51091,268],{"class":2123},[77,51093,5560],{"class":94},[77,51095,51096],{"class":79,"line":35167},[77,51097,35054],{"class":323},[77,51099,51100,51102,51104,51106,51108],{"class":79,"line":35178},[77,51101,5878],{"class":2123},[77,51103,34068],{"class":87},[77,51105,28511],{"class":2123},[77,51107,34073],{"class":94},[77,51109,35067],{"class":87},[77,51111,51112],{"class":79,"line":35184},[77,51113,35072],{"class":323},[77,51115,51116,51118,51120],{"class":79,"line":35190},[77,51117,35077],{"class":87},[77,51119,268],{"class":2123},[77,51121,35082],{"class":87},[77,51123,51124],{"class":79,"line":35196},[77,51125,35087],{"class":323},[77,51127,51128,51130,51132],{"class":79,"line":35202},[77,51129,35092],{"class":87},[77,51131,268],{"class":2123},[77,51133,35097],{"class":87},[77,51135,51136],{"class":79,"line":35208},[77,51137,35103],{"class":323},[77,51139,51140],{"class":79,"line":35214},[77,51141,35109],{"class":87},[77,51143,51144],{"class":79,"line":35220},[77,51145,35115],{"class":323},[77,51147,51148],{"class":79,"line":35240},[77,51149,35121],{"class":323},[77,51151,51152,51154,51156],{"class":79,"line":35246},[77,51153,35127],{"class":87},[77,51155,268],{"class":2123},[77,51157,35132],{"class":87},[77,51159,51160],{"class":79,"line":35262},[77,51161,35138],{"class":323},[77,51163,51164,51166,51168,51170,51172,51174,51176],{"class":79,"line":35268},[77,51165,35144],{"class":87},[77,51167,268],{"class":2123},[77,51169,35149],{"class":87},[77,51171,35152],{"class":7691},[77,51173,268],{"class":2123},[77,51175,2120],{"class":94},[77,51177,2628],{"class":87},[77,51179,51180],{"class":79,"line":35282},[77,51181,35164],{"class":323},[77,51183,51184,51186,51188],{"class":79,"line":35288},[77,51185,35170],{"class":87},[77,51187,268],{"class":2123},[77,51189,35175],{"class":87},[77,51191,51192],{"class":79,"line":35303},[77,51193,35181],{"class":323},[77,51195,51196],{"class":79,"line":35309},[77,51197,35187],{"class":87},[77,51199,51200],{"class":79,"line":35318},[77,51201,35193],{"class":323},[77,51203,51204],{"class":79,"line":35324},[77,51205,35199],{"class":87},[77,51207,51208],{"class":79,"line":35333},[77,51209,35205],{"class":323},[77,51211,51212],{"class":79,"line":35339},[77,51213,35211],{"class":87},[77,51215,51216],{"class":79,"line":35345},[77,51217,35217],{"class":323},[77,51219,51220,51222,51224,51226,51228,51230,51232],{"class":79,"line":35354},[77,51221,35223],{"class":87},[77,51223,11950],{"class":2123},[77,51225,35228],{"class":87},[77,51227,3068],{"class":2123},[77,51229,35233],{"class":87},[77,51231,1939],{"class":94},[77,51233,2628],{"class":87},[77,51235,51236],{"class":79,"line":35360},[77,51237,35243],{"class":323},[77,51239,51240,51242,51244,51246,51248],{"class":79,"line":35371},[77,51241,35249],{"class":87},[77,51243,11950],{"class":2123},[77,51245,35254],{"class":87},[77,51247,5424],{"class":2123},[77,51249,35259],{"class":87},[77,51251,51252],{"class":79,"line":35377},[77,51253,35265],{"class":323},[77,51255,51256,51258,51260,51262,51264],{"class":79,"line":35396},[77,51257,35271],{"class":87},[77,51259,11950],{"class":2123},[77,51261,35233],{"class":87},[77,51263,1939],{"class":94},[77,51265,2628],{"class":87},[77,51267,51268],{"class":79,"line":35402},[77,51269,35285],{"class":323},[77,51271,51272,51274,51276,51278,51280],{"class":79,"line":35413},[77,51273,5878],{"class":2123},[77,51275,35293],{"class":87},[77,51277,28511],{"class":2123},[77,51279,34073],{"class":94},[77,51281,35300],{"class":87},[77,51283,51284],{"class":79,"line":35419},[77,51285,35306],{"class":323},[77,51287,51288,51290,51292],{"class":79,"line":35439},[77,51289,35077],{"class":87},[77,51291,268],{"class":2123},[77,51293,35082],{"class":87},[77,51295,51296],{"class":79,"line":35455},[77,51297,35321],{"class":323},[77,51299,51300,51302,51304],{"class":79,"line":35461},[77,51301,35092],{"class":87},[77,51303,268],{"class":2123},[77,51305,35097],{"class":87},[77,51307,51308],{"class":79,"line":35475},[77,51309,35336],{"class":323},[77,51311,51312],{"class":79,"line":35481},[77,51313,35342],{"class":87},[77,51315,51316],{"class":79,"line":35487},[77,51317,38822],{"class":323},[77,51319,51320,51322],{"class":79,"line":35498},[77,51321,35348],{"class":2123},[77,51323,35351],{"class":87},[77,51325,51326],{"class":79,"line":35504},[77,51327,35357],{"class":323},[77,51329,51330,51332,51334],{"class":79,"line":35510},[77,51331,38837],{"class":87},[77,51333,268],{"class":2123},[77,51335,35132],{"class":87},[77,51337,51338],{"class":79,"line":35520},[77,51339,35374],{"class":323},[77,51341,51342,51344,51346,51348,51350,51352,51354],{"class":79,"line":35526},[77,51343,38850],{"class":87},[77,51345,268],{"class":2123},[77,51347,35149],{"class":87},[77,51349,35152],{"class":7691},[77,51351,268],{"class":2123},[77,51353,2120],{"class":94},[77,51355,2628],{"class":87},[77,51357,51358],{"class":79,"line":35537},[77,51359,35399],{"class":323},[77,51361,51362,51364,51366],{"class":79,"line":35543},[77,51363,38871],{"class":87},[77,51365,268],{"class":2123},[77,51367,35175],{"class":87},[77,51369,51370],{"class":79,"line":35553},[77,51371,35416],{"class":323},[77,51373,51374,51376,51378,51380,51382,51384,51386],{"class":79,"line":35558},[77,51375,38884],{"class":87},[77,51377,11950],{"class":2123},[77,51379,38889],{"class":87},[77,51381,3068],{"class":2123},[77,51383,35233],{"class":87},[77,51385,1939],{"class":94},[77,51387,2628],{"class":87},[77,51389,51390,51392,51394,51396,51398],{"class":79,"line":35564},[77,51391,38902],{"class":87},[77,51393,11950],{"class":2123},[77,51395,35254],{"class":87},[77,51397,5424],{"class":2123},[77,51399,35259],{"class":87},[77,51401,51402],{"class":79,"line":35613},[77,51403,38915],{"class":323},[77,51405,51406,51408,51410,51412,51414],{"class":79,"line":35660},[77,51407,38920],{"class":87},[77,51409,11950],{"class":2123},[77,51411,35233],{"class":87},[77,51413,1939],{"class":94},[77,51415,2628],{"class":87},[77,51417,51418],{"class":79,"line":35665},[77,51419,35478],{"class":323},[77,51421,51422],{"class":79,"line":35671},[77,51423,35484],{"class":323},[77,51425,51426,51428,51430],{"class":79,"line":35690},[77,51427,35490],{"class":87},[77,51429,3197],{"class":2123},[77,51431,35495],{"class":87},[77,51433,51434],{"class":79,"line":35696},[77,51435,35501],{"class":323},[77,51437,51438],{"class":79,"line":35716},[77,51439,35507],{"class":323},[77,51441,51442,51444,51446],{"class":79,"line":35722},[77,51443,35513],{"class":87},[77,51445,3197],{"class":2123},[77,51447,35495],{"class":87},[77,51449,51450],{"class":79,"line":35728},[77,51451,35523],{"class":323},[77,51453,51454,51456,51458],{"class":79,"line":35738},[77,51455,35529],{"class":87},[77,51457,3197],{"class":2123},[77,51459,35534],{"class":87},[77,51461,51462],{"class":79,"line":35743},[77,51463,35540],{"class":323},[77,51465,51466,51468,51470],{"class":79,"line":35749},[77,51467,35546],{"class":87},[77,51469,3197],{"class":2123},[77,51471,35534],{"class":87},[77,51473,51474],{"class":79,"line":35765},[77,51475,4875],{"emptyLinePlaceholder":2549},[77,51477,51478],{"class":79,"line":35810},[77,51479,35561],{"class":323},[77,51481,51482,51484,51486,51488,51490,51492,51494,51496,51498,51500,51502,51504,51506,51508,51510,51512,51514,51516,51518,51520],{"class":79,"line":35816},[77,51483,34918],{"class":94},[77,51485,2622],{"class":87},[77,51487,6067],{"class":271},[77,51489,34926],{"class":94},[77,51491,35575],{"class":271},[77,51493,3509],{"class":94},[77,51495,35580],{"class":2123},[77,51497,3558],{"class":94},[77,51499,35585],{"class":271},[77,51501,3509],{"class":94},[77,51503,35580],{"class":2123},[77,51505,3558],{"class":94},[77,51507,6067],{"class":271},[77,51509,35596],{"class":87},[77,51511,3145],{"class":2123},[77,51513,2120],{"class":94},[77,51515,35603],{"class":87},[77,51517,3145],{"class":2123},[77,51519,2120],{"class":94},[77,51521,35610],{"class":87},[77,51523,51524,51526,51528,51530,51532,51534,51536,51538,51540,51542,51544,51546,51548,51550,51552,51554,51556,51558,51560,51562],{"class":79,"line":35822},[77,51525,34918],{"class":94},[77,51527,2622],{"class":87},[77,51529,6067],{"class":271},[77,51531,34926],{"class":94},[77,51533,35624],{"class":271},[77,51535,3509],{"class":94},[77,51537,35580],{"class":2123},[77,51539,3558],{"class":94},[77,51541,35633],{"class":271},[77,51543,3509],{"class":94},[77,51545,35580],{"class":2123},[77,51547,3558],{"class":94},[77,51549,6067],{"class":271},[77,51551,35644],{"class":87},[77,51553,3145],{"class":2123},[77,51555,2120],{"class":94},[77,51557,35651],{"class":87},[77,51559,3145],{"class":2123},[77,51561,2120],{"class":94},[77,51563,35610],{"class":87},[77,51565,51566],{"class":79,"line":35828},[77,51567,4875],{"emptyLinePlaceholder":2549},[77,51569,51570],{"class":79,"line":35839},[77,51571,35668],{"class":323},[77,51573,51574,51576,51578,51580,51582,51584,51586],{"class":79,"line":35845},[77,51575,4972],{"class":2123},[77,51577,35676],{"class":87},[77,51579,3145],{"class":2123},[77,51581,2120],{"class":94},[77,51583,3552],{"class":87},[77,51585,3572],{"class":2123},[77,51587,35687],{"class":87},[77,51589,51590],{"class":79,"line":35851},[77,51591,35693],{"class":323},[77,51593,51594,51596,51598,51600,51602,51604,51606],{"class":79,"line":35857},[77,51595,35699],{"class":87},[77,51597,2661],{"class":94},[77,51599,268],{"class":2123},[77,51601,35706],{"class":87},[77,51603,3145],{"class":2123},[77,51605,2120],{"class":94},[77,51607,35713],{"class":87},[77,51609,51610],{"class":79,"line":35875},[77,51611,35719],{"class":323},[77,51613,51614],{"class":79,"line":35889},[77,51615,35725],{"class":323},[77,51617,51618,51620,51622],{"class":79,"line":35898},[77,51619,35731],{"class":87},[77,51621,268],{"class":2123},[77,51623,34781],{"class":87},[77,51625,51626],{"class":79,"line":35907},[77,51627,4875],{"emptyLinePlaceholder":2549},[77,51629,51630],{"class":79,"line":35916},[77,51631,35746],{"class":323},[77,51633,51634,51636,51638,51640,51642],{"class":79,"line":35925},[77,51635,35752],{"class":87},[77,51637,268],{"class":2123},[77,51639,35757],{"class":87},[77,51641,3145],{"class":2123},[77,51643,35762],{"class":87},[77,51645,51646,51648,51650,51652,51654,51656,51658,51660,51662,51664,51666,51668,51670,51672,51674,51676,51678,51680],{"class":79,"line":35931},[77,51647,34918],{"class":94},[77,51649,2622],{"class":87},[77,51651,35772],{"class":271},[77,51653,3509],{"class":94},[77,51655,35777],{"class":2123},[77,51657,3558],{"class":94},[77,51659,3157],{"class":271},[77,51661,3509],{"class":94},[77,51663,35777],{"class":2123},[77,51665,3558],{"class":94},[77,51667,35790],{"class":271},[77,51669,35793],{"class":87},[77,51671,35796],{"class":2123},[77,51673,3520],{"class":94},[77,51675,35801],{"class":87},[77,51677,2942],{"class":2123},[77,51679,3520],{"class":94},[77,51681,32965],{"class":87},[77,51683,51684],{"class":79,"line":35937},[77,51685,39199],{"class":323},[77,51687,51688],{"class":79,"line":35945},[77,51689,39204],{"class":323},[77,51691,51692,51694,51696],{"class":79,"line":35950},[77,51693,39209],{"class":87},[77,51695,35834],{"class":271},[77,51697,2628],{"class":87},[77,51699,51700],{"class":79,"line":35956},[77,51701,35854],{"class":323},[77,51703,51704,51706,51708,51710,51712,51714],{"class":79,"line":35967},[77,51705,35860],{"class":87},[77,51707,268],{"class":2123},[77,51709,35865],{"class":87},[77,51711,35868],{"class":7691},[77,51713,268],{"class":2123},[77,51715,4023],{"class":87},[77,51717,51718,51720,51722,51724],{"class":79,"line":35973},[77,51719,35878],{"class":271},[77,51721,3472],{"class":87},[77,51723,35883],{"class":94},[77,51725,35886],{"class":87},[77,51727,51728,51730],{"class":79,"line":35993},[77,51729,35892],{"class":271},[77,51731,35895],{"class":87},[77,51733,51734,51736],{"class":79,"line":35999},[77,51735,35901],{"class":271},[77,51737,35904],{"class":87},[77,51739,51740,51742],{"class":79,"line":36005},[77,51741,35910],{"class":271},[77,51743,35913],{"class":87},[77,51745,51746,51748],{"class":79,"line":36011},[77,51747,35919],{"class":271},[77,51749,35922],{"class":87},[77,51751,51752],{"class":79,"line":36028},[77,51753,35928],{"class":87},[77,51755,51756],{"class":79,"line":36034},[77,51757,35934],{"class":323},[77,51759,51760,51762],{"class":79,"line":36040},[77,51761,6565],{"class":2123},[77,51763,35942],{"class":87},[77,51765,51766],{"class":79,"line":36046},[77,51767,4875],{"emptyLinePlaceholder":2549},[77,51769,51770],{"class":79,"line":36052},[77,51771,35953],{"class":323},[77,51773,51774,51776,51778],{"class":79,"line":36058},[77,51775,34414],{"class":2123},[77,51777,35961],{"class":83},[77,51779,35964],{"class":87},[77,51781,51782],{"class":79,"line":36084},[77,51783,35970],{"class":323},[77,51785,51786,51788,51790,51792,51794,51796,51798,51800],{"class":79,"line":36108},[77,51787,35976],{"class":87},[77,51789,34160],{"class":7691},[77,51791,268],{"class":2123},[77,51793,2622],{"class":87},[77,51795,3111],{"class":94},[77,51797,2992],{"class":87},[77,51799,2907],{"class":94},[77,51801,32965],{"class":87},[77,51803,51804],{"class":79,"line":36114},[77,51805,35996],{"class":323},[77,51807,51808],{"class":79,"line":36120},[77,51809,36002],{"class":323},[77,51811,51812],{"class":79,"line":36126},[77,51813,36008],{"class":323},[77,51815,51816,51818,51820,51822,51824,51826,51828],{"class":79,"line":36137},[77,51817,34194],{"class":87},[77,51819,2120],{"class":94},[77,51821,2992],{"class":87},[77,51823,2696],{"class":94},[77,51825,2992],{"class":87},[77,51827,2120],{"class":94},[77,51829,2628],{"class":87},[77,51831,51832],{"class":79,"line":36148},[77,51833,36031],{"class":323},[77,51835,51836],{"class":79,"line":36154},[77,51837,36037],{"class":323},[77,51839,51840],{"class":79,"line":36171},[77,51841,36043],{"class":323},[77,51843,51844],{"class":79,"line":36194},[77,51845,36049],{"class":323},[77,51847,51848],{"class":79,"line":36217},[77,51849,36055],{"class":323},[77,51851,51852,51854,51856,51858,51860,51862,51864,51866,51868],{"class":79,"line":36223},[77,51853,36061],{"class":87},[77,51855,36064],{"class":271},[77,51857,36067],{"class":87},[77,51859,36070],{"class":271},[77,51861,2992],{"class":87},[77,51863,2254],{"class":7691},[77,51865,268],{"class":2123},[77,51867,36079],{"class":271},[77,51869,2628],{"class":87},[77,51871,51872,51874,51876,51878,51880,51882,51884,51886,51888],{"class":79,"line":36228},[77,51873,36061],{"class":87},[77,51875,36064],{"class":271},[77,51877,36091],{"class":87},[77,51879,36094],{"class":271},[77,51881,2992],{"class":87},[77,51883,2254],{"class":7691},[77,51885,268],{"class":2123},[77,51887,36103],{"class":271},[77,51889,2628],{"class":87},[77,51891,51892],{"class":79,"line":36237},[77,51893,36111],{"class":323},[77,51895,51896],{"class":79,"line":36247},[77,51897,36117],{"class":87},[77,51899,51900],{"class":79,"line":36253},[77,51901,36123],{"class":323},[77,51903,51904,51906,51908],{"class":79,"line":36258},[77,51905,36129],{"class":87},[77,51907,36132],{"class":271},[77,51909,2628],{"class":87},[77,51911,51912,51914,51916],{"class":79,"line":36264},[77,51913,36140],{"class":87},[77,51915,36143],{"class":271},[77,51917,2628],{"class":87},[77,51919,51920],{"class":79,"line":36277},[77,51921,36151],{"class":323},[77,51923,51924,51926,51928,51930,51932,51934,51936],{"class":79,"line":36283},[77,51925,34194],{"class":87},[77,51927,2120],{"class":94},[77,51929,2992],{"class":87},[77,51931,2696],{"class":94},[77,51933,2992],{"class":87},[77,51935,2696],{"class":94},[77,51937,2628],{"class":87},[77,51939,51940,51942,51944,51946,51948,51950,51952,51954,51956],{"class":79,"line":36294},[77,51941,36061],{"class":87},[77,51943,36064],{"class":271},[77,51945,36178],{"class":87},[77,51947,36070],{"class":271},[77,51949,2992],{"class":87},[77,51951,2254],{"class":7691},[77,51953,268],{"class":2123},[77,51955,36189],{"class":271},[77,51957,2628],{"class":87},[77,51959,51960,51962,51964,51966,51968,51970,51972,51974,51976],{"class":79,"line":36305},[77,51961,36061],{"class":87},[77,51963,36064],{"class":271},[77,51965,36201],{"class":87},[77,51967,36094],{"class":271},[77,51969,2992],{"class":87},[77,51971,2254],{"class":7691},[77,51973,268],{"class":2123},[77,51975,36212],{"class":271},[77,51977,2628],{"class":87},[77,51979,51980],{"class":79,"line":36324},[77,51981,36220],{"class":323},[77,51983,51985],{"class":79,"line":51984},219,[77,51986,36117],{"class":87},[77,51988,51990,51992,51994],{"class":79,"line":51989},220,[77,51991,36129],{"class":87},[77,51993,36064],{"class":271},[77,51995,2628],{"class":87},[77,51997,51999,52001,52003],{"class":79,"line":51998},221,[77,52000,36140],{"class":87},[77,52002,36242],{"class":271},[77,52004,2628],{"class":87},[77,52006,52008],{"class":79,"line":52007},222,[77,52009,36250],{"class":87},[77,52011,52013],{"class":79,"line":52012},223,[77,52014,4875],{"emptyLinePlaceholder":2549},[77,52016,52018],{"class":79,"line":52017},224,[77,52019,36261],{"class":323},[77,52021,52023,52025,52027,52029,52031],{"class":79,"line":52022},225,[77,52024,4008],{"class":2123},[77,52026,33687],{"class":94},[77,52028,5424],{"class":2123},[77,52030,33692],{"class":271},[77,52032,6214],{"class":87},[77,52034,52036],{"class":79,"line":52035},226,[77,52037,36280],{"class":323},[77,52039,52041,52043,52045],{"class":79,"line":52040},227,[77,52042,47012],{"class":87},[77,52044,268],{"class":2123},[77,52046,47017],{"class":87},[77,52048,52050,52052,52054],{"class":79,"line":52049},228,[77,52051,36297],{"class":87},[77,52053,268],{"class":2123},[77,52055,36302],{"class":87},[77,52057,52059,52061,52063,52065,52067,52069,52071],{"class":79,"line":52058},229,[77,52060,35860],{"class":87},[77,52062,268],{"class":2123},[77,52064,47034],{"class":87},[77,52066,36315],{"class":7691},[77,52068,268],{"class":2123},[77,52070,3520],{"class":94},[77,52072,2628],{"class":87},[77,52074,52076],{"class":79,"line":52075},230,[77,52077,36327],{"class":87},[24468,52079,52081],{"id":52080},"_242测试代码","2.4.2.测试代码",[24,52083,52084],{},"使用测试集进行测试与推理",[67,52086,52088],{"className":32846,"code":52087,"language":32848,"meta":72,"style":72},"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",[74,52089,52090,52096,52106,52116,52127,52137,52141,52145,52153,52158,52162,52179,52183,52187,52191,52195,52199,52231,52235,52243,52247,52259,52263,52267,52271,52275,52279,52283,52287,52291,52309,52323,52327,52337,52347,52357,52363,52367,52371,52379,52383,52399,52407,52411,52415,52423,52431,52435,52439,52443,52447,52453,52457,52467,52475,52483,52487,52491,52495,52503,52507,52523,52527,52531,52535,52547,52551,52563,52567,52571,52583,52587,52597,52601,52605,52617,52621,52629,52633,52637,52645,52649,52657,52661,52665,52669,52673,52677,52693,52701,52705,52709,52727,52733,52737,52747,52755,52763,52767,52771,52775,52779,52787,52791,52807,52811,52819,52827],{"__ignoreMap":72},[77,52091,52092,52094],{"class":79,"line":80},[77,52093,32860],{"class":2123},[77,52095,32863],{"class":87},[77,52097,52098,52100,52102,52104],{"class":79,"line":91},[77,52099,32860],{"class":2123},[77,52101,33882],{"class":87},[77,52103,33850],{"class":2123},[77,52105,33887],{"class":87},[77,52107,52108,52110,52112,52114],{"class":79,"line":107},[77,52109,33205],{"class":2123},[77,52111,33865],{"class":87},[77,52113,32860],{"class":2123},[77,52115,33870],{"class":87},[77,52117,52118,52120,52122,52124],{"class":79,"line":191},[77,52119,33205],{"class":2123},[77,52121,33835],{"class":87},[77,52123,32860],{"class":2123},[77,52125,52126],{"class":87}," ImageFolder\n",[77,52128,52129,52131,52133,52135],{"class":79,"line":1543},[77,52130,33205],{"class":2123},[77,52132,34381],{"class":87},[77,52134,32860],{"class":2123},[77,52136,47106],{"class":87},[77,52138,52139],{"class":79,"line":1549},[77,52140,4875],{"emptyLinePlaceholder":2549},[77,52142,52143],{"class":79,"line":1566},[77,52144,36417],{"class":323},[77,52146,52147,52149,52151],{"class":79,"line":1572},[77,52148,34414],{"class":2123},[77,52150,36424],{"class":83},[77,52152,34420],{"class":87},[77,52154,52155],{"class":79,"line":1589},[77,52156,52157],{"class":323},"   # 导入自己的数据集，并进行数据处理\n",[77,52159,52160],{"class":79,"line":1595},[77,52161,50427],{"class":323},[77,52163,52164,52166,52168,52170,52172,52174,52177],{"class":79,"line":4088},[77,52165,50432],{"class":94},[77,52167,268],{"class":2123},[77,52169,3283],{"class":2123},[77,52171,2865],{"class":271},[77,52173,3171],{"class":94},[77,52175,52176],{"class":50443},"\u002Fdata\u002Ftest",[77,52178,27601],{"class":271},[77,52180,52181],{"class":79,"line":4093},[77,52182,4875],{"emptyLinePlaceholder":2549},[77,52184,52185],{"class":79,"line":4099},[77,52186,50455],{"class":323},[77,52188,52189],{"class":79,"line":4104},[77,52190,50460],{"class":323},[77,52192,52193],{"class":79,"line":4118},[77,52194,50465],{"class":323},[77,52196,52197],{"class":79,"line":4123},[77,52198,50470],{"class":323},[77,52200,52201,52203,52205,52207,52209,52211,52213,52215,52217,52219,52221,52223,52225,52227,52229],{"class":79,"line":4129},[77,52202,50475],{"class":87},[77,52204,268],{"class":2123},[77,52206,50480],{"class":87},[77,52208,50483],{"class":94},[77,52210,2992],{"class":87},[77,52212,50488],{"class":94},[77,52214,2992],{"class":87},[77,52216,50493],{"class":94},[77,52218,50496],{"class":87},[77,52220,50499],{"class":94},[77,52222,2992],{"class":87},[77,52224,50504],{"class":94},[77,52226,2992],{"class":87},[77,52228,50509],{"class":94},[77,52230,7132],{"class":87},[77,52232,52233],{"class":79,"line":4150},[77,52234,50516],{"class":323},[77,52236,52237,52239,52241],{"class":79,"line":4155},[77,52238,50521],{"class":87},[77,52240,268],{"class":2123},[77,52242,50526],{"class":87},[77,52244,52245],{"class":79,"line":4169},[77,52246,50531],{"class":323},[77,52248,52249,52251,52253,52255,52257],{"class":79,"line":4174},[77,52250,50536],{"class":87},[77,52252,33968],{"class":94},[77,52254,2992],{"class":87},[77,52256,33968],{"class":94},[77,52258,45088],{"class":87},[77,52260,52261],{"class":79,"line":4203},[77,52262,50549],{"class":323},[77,52264,52265],{"class":79,"line":4208},[77,52266,50554],{"class":87},[77,52268,52269],{"class":79,"line":4225},[77,52270,50559],{"class":87},[77,52272,52273],{"class":79,"line":4230},[77,52274,50564],{"class":323},[77,52276,52277],{"class":79,"line":4235},[77,52278,50569],{"class":323},[77,52280,52281],{"class":79,"line":4240},[77,52282,4875],{"emptyLinePlaceholder":2549},[77,52284,52285],{"class":79,"line":4254},[77,52286,50578],{"class":323},[77,52288,52289],{"class":79,"line":4259},[77,52290,50583],{"class":323},[77,52292,52293,52295,52297,52299,52301,52303,52305,52307],{"class":79,"line":5052},[77,52294,36431],{"class":87},[77,52296,268],{"class":2123},[77,52298,50592],{"class":87},[77,52300,50595],{"class":94},[77,52302,2992],{"class":87},[77,52304,50600],{"class":7691},[77,52306,268],{"class":2123},[77,52308,50605],{"class":87},[77,52310,52311,52313,52315,52317,52319,52321],{"class":79,"line":5066},[77,52312,36488],{"class":87},[77,52314,268],{"class":2123},[77,52316,34001],{"class":87},[77,52318,34004],{"class":7691},[77,52320,268],{"class":2123},[77,52322,36499],{"class":87},[77,52324,52325],{"class":79,"line":5074},[77,52326,36504],{"class":323},[77,52328,52329,52331,52333,52335],{"class":79,"line":5079},[77,52330,36509],{"class":7691},[77,52332,268],{"class":2123},[77,52334,2120],{"class":94},[77,52336,33933],{"class":87},[77,52338,52339,52341,52343,52345],{"class":79,"line":5085},[77,52340,36520],{"class":7691},[77,52342,268],{"class":2123},[77,52344,33943],{"class":94},[77,52346,33933],{"class":87},[77,52348,52349,52351,52353,52355],{"class":79,"line":5091},[77,52350,36531],{"class":7691},[77,52352,268],{"class":2123},[77,52354,1939],{"class":94},[77,52356,2628],{"class":87},[77,52358,52359,52361],{"class":79,"line":5096},[77,52360,6565],{"class":2123},[77,52362,36544],{"class":87},[77,52364,52365],{"class":79,"line":10422},[77,52366,4875],{"emptyLinePlaceholder":2549},[77,52368,52369],{"class":79,"line":10446},[77,52370,36553],{"class":323},[77,52372,52373,52375,52377],{"class":79,"line":10451},[77,52374,34414],{"class":2123},[77,52376,36560],{"class":83},[77,52378,36563],{"class":87},[77,52380,52381],{"class":79,"line":10457},[77,52382,36568],{"class":323},[77,52384,52385,52387,52389,52391,52393,52395,52397],{"class":79,"line":10484},[77,52386,33704],{"class":87},[77,52388,268],{"class":2123},[77,52390,33711],{"class":271},[77,52392,4180],{"class":2123},[77,52394,33716],{"class":87},[77,52396,4177],{"class":2123},[77,52398,36585],{"class":271},[77,52400,52401,52403,52405],{"class":79,"line":10489},[77,52402,33756],{"class":87},[77,52404,268],{"class":2123},[77,52406,34756],{"class":87},[77,52408,52409],{"class":79,"line":10495},[77,52410,4875],{"emptyLinePlaceholder":2549},[77,52412,52413],{"class":79,"line":10507},[77,52414,36602],{"class":323},[77,52416,52417,52419,52421],{"class":79,"line":10519},[77,52418,36607],{"class":87},[77,52420,268],{"class":2123},[77,52422,34809],{"class":94},[77,52424,52425,52427,52429],{"class":79,"line":10531},[77,52426,36616],{"class":87},[77,52428,268],{"class":2123},[77,52430,5560],{"class":94},[77,52432,52433],{"class":79,"line":12189},[77,52434,4875],{"emptyLinePlaceholder":2549},[77,52436,52437],{"class":79,"line":12214},[77,52438,36629],{"class":323},[77,52440,52441],{"class":79,"line":12237},[77,52442,36634],{"class":323},[77,52444,52445],{"class":79,"line":12261},[77,52446,36639],{"class":323},[77,52448,52449,52451],{"class":79,"line":12266},[77,52450,36644],{"class":2123},[77,52452,35351],{"class":87},[77,52454,52455],{"class":79,"line":12271},[77,52456,36651],{"class":323},[77,52458,52459,52461,52463,52465],{"class":79,"line":12276},[77,52460,5878],{"class":2123},[77,52462,36658],{"class":87},[77,52464,28511],{"class":2123},[77,52466,36663],{"class":87},[77,52468,52469,52471,52473],{"class":79,"line":12285},[77,52470,36668],{"class":87},[77,52472,268],{"class":2123},[77,52474,36673],{"class":87},[77,52476,52477,52479,52481],{"class":79,"line":12290},[77,52478,36678],{"class":87},[77,52480,268],{"class":2123},[77,52482,36683],{"class":87},[77,52484,52485],{"class":79,"line":12296},[77,52486,36688],{"class":323},[77,52488,52489],{"class":79,"line":12317},[77,52490,35342],{"class":87},[77,52492,52493],{"class":79,"line":12323},[77,52494,36697],{"class":323},[77,52496,52497,52499,52501],{"class":79,"line":12337},[77,52498,35127],{"class":87},[77,52500,268],{"class":2123},[77,52502,36706],{"class":87},[77,52504,52505],{"class":79,"line":12343},[77,52506,36711],{"class":323},[77,52508,52509,52511,52513,52515,52517,52519,52521],{"class":79,"line":12370},[77,52510,35144],{"class":87},[77,52512,268],{"class":2123},[77,52514,35149],{"class":87},[77,52516,35152],{"class":7691},[77,52518,268],{"class":2123},[77,52520,2120],{"class":94},[77,52522,2628],{"class":87},[77,52524,52525],{"class":79,"line":12379},[77,52526,36732],{"class":323},[77,52528,52529],{"class":79,"line":12385},[77,52530,36737],{"class":323},[77,52532,52533],{"class":79,"line":12393},[77,52534,36742],{"class":323},[77,52536,52537,52539,52541,52543,52545],{"class":79,"line":12398},[77,52538,36747],{"class":87},[77,52540,11950],{"class":2123},[77,52542,35254],{"class":87},[77,52544,5424],{"class":2123},[77,52546,36756],{"class":87},[77,52548,52549],{"class":79,"line":19074},[77,52550,36761],{"class":323},[77,52552,52553,52555,52557,52559,52561],{"class":79,"line":19080},[77,52554,36766],{"class":87},[77,52556,11950],{"class":2123},[77,52558,36771],{"class":87},[77,52560,1939],{"class":94},[77,52562,2628],{"class":87},[77,52564,52565],{"class":79,"line":19103},[77,52566,4875],{"emptyLinePlaceholder":2549},[77,52568,52569],{"class":79,"line":19109},[77,52570,36784],{"class":323},[77,52572,52573,52575,52577,52579,52581],{"class":79,"line":19132},[77,52574,36789],{"class":87},[77,52576,268],{"class":2123},[77,52578,36794],{"class":87},[77,52580,3197],{"class":2123},[77,52582,36799],{"class":87},[77,52584,52585],{"class":79,"line":19146},[77,52586,36804],{"class":323},[77,52588,52589,52591,52593,52595],{"class":79,"line":19166},[77,52590,34918],{"class":94},[77,52592,2622],{"class":87},[77,52594,36813],{"class":271},[77,52596,36816],{"class":87},[77,52598,52599],{"class":79,"line":19172},[77,52600,4875],{"emptyLinePlaceholder":2549},[77,52602,52603],{"class":79,"line":19183},[77,52604,36825],{"class":323},[77,52606,52607,52609,52611,52613,52615],{"class":79,"line":19206},[77,52608,4008],{"class":2123},[77,52610,33687],{"class":94},[77,52612,5424],{"class":2123},[77,52614,33692],{"class":271},[77,52616,6214],{"class":87},[77,52618,52619],{"class":79,"line":19228},[77,52620,36842],{"class":323},[77,52622,52623,52625,52627],{"class":79,"line":19233},[77,52624,33756],{"class":87},[77,52626,268],{"class":2123},[77,52628,47017],{"class":87},[77,52630,52631],{"class":79,"line":19239},[77,52632,36855],{"class":323},[77,52634,52635],{"class":79,"line":19253},[77,52636,36860],{"class":323},[77,52638,52639,52641,52643],{"class":79,"line":19266},[77,52640,36865],{"class":87},[77,52642,36868],{"class":271},[77,52644,32965],{"class":87},[77,52646,52647],{"class":79,"line":19271},[77,52648,36875],{"class":323},[77,52650,52651,52653,52655],{"class":79,"line":19285},[77,52652,36488],{"class":87},[77,52654,268],{"class":2123},[77,52656,36884],{"class":87},[77,52658,52659],{"class":79,"line":19290},[77,52660,36889],{"class":323},[77,52662,52663],{"class":79,"line":19296},[77,52664,36894],{"class":87},[77,52666,52667],{"class":79,"line":19301},[77,52668,4875],{"emptyLinePlaceholder":2549},[77,52670,52671],{"class":79,"line":19315},[77,52672,36903],{"class":323},[77,52674,52675],{"class":79,"line":19320},[77,52676,36908],{"class":323},[77,52678,52679,52681,52683,52685,52687,52689,52691],{"class":79,"line":19325},[77,52680,33704],{"class":87},[77,52682,268],{"class":2123},[77,52684,33711],{"class":271},[77,52686,4180],{"class":2123},[77,52688,33716],{"class":87},[77,52690,4177],{"class":2123},[77,52692,36585],{"class":271},[77,52694,52695,52697,52699],{"class":79,"line":19339},[77,52696,33756],{"class":87},[77,52698,268],{"class":2123},[77,52700,34756],{"class":87},[77,52702,52703],{"class":79,"line":19351},[77,52704,36937],{"class":323},[77,52706,52707],{"class":79,"line":19356},[77,52708,36942],{"class":323},[77,52710,52711,52713,52715,52717,52720,52722,52725],{"class":79,"line":19369},[77,52712,36947],{"class":87},[77,52714,268],{"class":2123},[77,52716,3503],{"class":87},[77,52718,52719],{"class":271},"'猫'",[77,52721,2992],{"class":87},[77,52723,52724],{"class":271},"'狗'",[77,52726,35713],{"class":87},[77,52728,52729,52731],{"class":79,"line":19374},[77,52730,36644],{"class":2123},[77,52732,35351],{"class":87},[77,52734,52735],{"class":79,"line":19379},[77,52736,37012],{"class":323},[77,52738,52739,52741,52743,52745],{"class":79,"line":19384},[77,52740,5878],{"class":2123},[77,52742,37019],{"class":87},[77,52744,28511],{"class":2123},[77,52746,36663],{"class":87},[77,52748,52749,52751,52753],{"class":79,"line":19397},[77,52750,35077],{"class":87},[77,52752,268],{"class":2123},[77,52754,35082],{"class":87},[77,52756,52757,52759,52761],{"class":79,"line":19402},[77,52758,35092],{"class":87},[77,52760,268],{"class":2123},[77,52762,35097],{"class":87},[77,52764,52765],{"class":79,"line":35100},[77,52766,4875],{"emptyLinePlaceholder":2549},[77,52768,52769],{"class":79,"line":35106},[77,52770,37048],{"class":323},[77,52772,52773],{"class":79,"line":35112},[77,52774,35342],{"class":87},[77,52776,52777],{"class":79,"line":35118},[77,52778,37057],{"class":323},[77,52780,52781,52783,52785],{"class":79,"line":35124},[77,52782,35127],{"class":87},[77,52784,268],{"class":2123},[77,52786,35132],{"class":87},[77,52788,52789],{"class":79,"line":35135},[77,52790,37070],{"class":323},[77,52792,52793,52795,52797,52799,52801,52803,52805],{"class":79,"line":35141},[77,52794,35144],{"class":87},[77,52796,268],{"class":2123},[77,52798,35149],{"class":87},[77,52800,35152],{"class":7691},[77,52802,268],{"class":2123},[77,52804,2120],{"class":94},[77,52806,2628],{"class":87},[77,52808,52809],{"class":79,"line":35161},[77,52810,37091],{"class":323},[77,52812,52813,52815,52817],{"class":79,"line":35167},[77,52814,37096],{"class":87},[77,52816,268],{"class":2123},[77,52818,37101],{"class":87},[77,52820,52821,52823,52825],{"class":79,"line":35178},[77,52822,37106],{"class":87},[77,52824,268],{"class":2123},[77,52826,37111],{"class":87},[77,52828,52829,52831,52833,52835,52837,52839,52841,52843],{"class":79,"line":35184},[77,52830,37116],{"class":94},[77,52832,2622],{"class":87},[77,52834,37121],{"class":271},[77,52836,37124],{"class":87},[77,52838,37127],{"class":271},[77,52840,2992],{"class":87},[77,52842,37132],{"class":271},[77,52844,37135],{"class":87},[2520,52846,52847],{},"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":72,"searchDepth":91,"depth":91,"links":52849},[52850,52851,52852,52853],{"id":33059,"depth":107,"text":33060},{"id":40305,"depth":107,"text":40306},{"id":43738,"depth":107,"text":43739},{"id":47747,"depth":107,"text":47748},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33051,"description":2546},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52860,"title":52861,"body":52862,"description":2546,"extension":2547,"meta":52869,"navigation":2549,"path":52870,"seo":52871,"stem":52872,"__hash__":52873},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52863,"toc":52867},[52864],[10,52865,52861],{"id":52866},"_3yolo模型学习",{"title":72,"searchDepth":91,"depth":91,"links":52868},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52861,"description":2546},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52875,"title":52876,"body":52877,"description":52884,"extension":2547,"meta":52885,"navigation":2549,"path":52887,"seo":52888,"stem":52889,"__hash__":52890},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52878,"toc":52882},[52879],[24,52880,52881],{},"yolo模型还未补充",{"title":72,"searchDepth":91,"depth":91,"links":52883},[],"深度学习学习",{"category":52886},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52876,"description":52884},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52892,"title":52893,"body":52894,"description":2546,"extension":2547,"meta":52919,"navigation":2549,"path":52920,"seo":52921,"stem":52922,"__hash__":52923},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52895,"toc":52917},[52896,52899,52902,52907,52914],[10,52897,52893],{"id":52898},"_1工具",[24,52900,52901],{},"提示错误插件：有问题会提前报错",[24,52903,52904],{},[40,52905],{"alt":72,"src":52906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[24,52908,52909],{},[417,52910,52913],{"href":52911,"rel":52912},"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",[26332],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[24,52915,52916],{},"alt键加上下箭头可以实现语句的移动",{"title":72,"searchDepth":91,"depth":91,"links":52918},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52893,"description":2546},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52925,"title":52926,"body":52927,"description":2546,"extension":2547,"meta":55783,"navigation":2549,"path":55784,"seo":55785,"stem":55786,"__hash__":55787},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52928,"toc":55734},[52929,52932,52936,52940,52945,52948,52953,52957,52964,52969,52976,52981,52988,52993,52997,53002,53005,53009,53014,53018,53023,53026,53029,53032,53035,53038,53041,53044,53047,53052,53057,53062,53066,53069,53072,53076,53081,53084,53092,53097,53114,53122,53127,53132,53137,53142,53147,53150,53155,53160,53164,53173,53178,53183,53187,53192,53195,53199,53204,53212,53217,53222,53225,53230,53235,53240,53243,53246,53249,53254,53259,53262,53267,53270,53275,53278,53281,53284,53289,53292,53295,53310,53315,53320,53325,53328,53331,53334,53348,53351,53356,53361,53364,53367,53370,53373,53376,53379,53382,53386,53390,53395,53399,53402,53407,53412,53415,53420,53423,53427,53432,53435,53438,53441,53444,53447,53450,53453,53456,53459,53463,53468,53473,53478,53481,53484,53488,53493,53496,53500,53503,53506,53511,53514,53517,53521,53525,53528,53533,53538,53541,53570,53575,53580,53585,53590,53594,53599,53603,53608,53611,53615,53619,53624,53628,53633,53638,53642,53647,53650,53652,53655,53660,53664,53669,53673,53677,53682,53687,53692,53697,53701,53706,53711,53716,53719,53722,53727,53730,53735,53740,53745,53750,53754,54553,54557,54900,54905,54908,54911,54914,54917,54920,54923,54926,54929,54931,54934,54936,54939,54943,54948,54951,54954,54957,54961,54966,54971,54991,54994,54998,55003,55008,55025,55029,55058,55062,55084,55086,55125,55133,55139,55143,55146,55149,55154,55159,55162,55165,55168,55173,55178,55181,55184,55187,55190,55193,55196,55199,55202,55205,55208,55211,55213,55216,55219,55222,55225,55228,55231,55234,55237,55241,55246,55249,55254,55257,55260,55263,55266,55269,55272,55275,55277,55280,55283,55286,55289,55292,55295,55299,55302,55311,55314,55319,55322,55327,55330,55333,55336,55339,55342,55345,55348,55352,55356,55359,55362,55367,55372,55377,55381,55386,55391,55394,55397,55400,55403,55406,55411,55414,55419,55421,55426,55429,55433,55438,55441,55444,55449,55453,55456,55461,55464,55467,55496,55501,55504,55507,55510,55513,55516,55520,55523,55609,55613,55616,55621,55626,55633,55636,55639,55642,55645,55648,55653,55658,55661,55664,55667,55670,55673,55676,55679,55682,55685,55687,55690,55694,55699,55704,55709,55712,55717,55722,55725,55728,55731],[10,52930,52926],{"id":52931},"_2基础语法",[14,52933,52935],{"id":52934},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[19,52937,52939],{"id":52938},"_211-js组成","2.1.1 js组成",[139,52941,52942],{},[54,52943,52944],{},"js是编程语言，html和css不是编程语言，是标记语言",[24,52946,52947],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[139,52949,52950],{"start":91},[54,52951,52952],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[19,52954,52956],{"id":52955},"_212-js书写位置","2.1.2 js书写位置",[139,52958,52959],{},[54,52960,52961],{},[27,52962,52963],{},"内部 JavaScript",[24,52965,52966],{},[40,52967],{"alt":72,"src":52968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[139,52970,52971],{"start":91},[54,52972,52973],{},[27,52974,52975],{},"外部 JavaScript",[24,52977,52978],{},[40,52979],{"alt":72,"src":52980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[139,52982,52983],{"start":107},[54,52984,52985],{},[27,52986,52987],{},"内联 JavaScript",[24,52989,52990],{},[40,52991],{"alt":72,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[19,52994,52996],{"id":52995},"_213-javascript注释","2.1.3 JavaScript注释",[24,52998,52999],{},[40,53000],{"alt":72,"src":53001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[24,53003,53004],{},"alt+shift+a一定要记住！",[19,53006,53008],{"id":53007},"_214-javascript结束符","2.1.4 JavaScript结束符",[24,53010,53011],{},[40,53012],{"alt":72,"src":53013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[19,53015,53017],{"id":53016},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[139,53019,53020],{},[54,53021,53022],{},"输出语法：",[24,53024,53025],{},"①document.write('要出的内容')",[24,53027,53028],{},"向body内输出内容；",[24,53030,53031],{},"如果输出的内容写的是标签，也会被解析cheng",[24,53033,53034],{},"②alert('要出的内容')",[24,53036,53037],{},"页面弹出警告对话框",[24,53039,53040],{},"③console.log('控制台打印')",[24,53042,53043],{},"控制台输出语法，程序员调试使用",[24,53045,53046],{},"输入log就行，自动生成：",[24,53048,53049],{},[40,53050],{"alt":72,"src":53051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[139,53053,53054],{"start":91},[54,53055,53056],{},"输入语法：",[24,53058,53059],{},[40,53060],{"alt":72,"src":53061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[19,53063,53065],{"id":53064},"_2116-字面量","21.1.6 字面量",[24,53067,53068],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[24,53070,53071],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53073,53075],{"id":53074},"_22-变量","2.2 变量",[139,53077,53078],{},[54,53079,53080],{},"变量声明",[24,53082,53083],{},"let 变量名",[51,53085,53086,53089],{},[54,53087,53088],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[54,53090,53091],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[139,53093,53094],{"start":91},[54,53095,53096],{},"变量赋值",[67,53098,53102],{"className":53099,"code":53100,"language":53101,"meta":72,"style":72},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[74,53103,53104,53109],{"__ignoreMap":72},[77,53105,53106],{"class":79,"line":80},[77,53107,53108],{"class":87},"let age\n",[77,53110,53111],{"class":79,"line":91},[77,53112,53113],{"class":87},"age=18\n",[139,53115,53116,53119],{"start":107},[54,53117,53118],{},"连这些（变量的初始化）：let age=18",[54,53120,53121],{},"更新变量",[24,53123,53124],{},[40,53125],{"alt":72,"src":53126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[139,53128,53129],{"start":1543},[54,53130,53131],{},"声明多个变量",[24,53133,53134],{},[40,53135],{"alt":72,"src":53136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[139,53138,53139],{"start":1549},[54,53140,53141],{},"变量命名规则与规范",[24,53143,53144],{},[40,53145],{"alt":72,"src":53146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[24,53148,53149],{},"遵守小驼峰！",[139,53151,53152],{"start":1566},[54,53153,53154],{},"变量拓展-let和var的区别",[24,53156,53157],{},[40,53158],{"alt":72,"src":53159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53161,53163],{"id":53162},"_23-数组","2.3 数组",[67,53165,53167],{"className":53099,"code":53166,"language":53101,"meta":72,"style":72},"let arr = []\n",[74,53168,53169],{"__ignoreMap":72},[77,53170,53171],{"class":79,"line":80},[77,53172,53166],{"class":87},[24,53174,53175],{},[40,53176],{"alt":72,"src":53177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[24,53179,53180],{},[40,53181],{"alt":72,"src":53182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,53184,53186],{"id":53185},"_24-常量","2.4 常量",[24,53188,53189],{},[40,53190],{"alt":72,"src":53191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[24,53193,53194],{},"const — 类似于 let ，但是变量的值无法被修改",[14,53196,53198],{"id":53197},"_25-数据类型","2.5 数据类型",[24,53200,53201],{},[40,53202],{"alt":72,"src":53203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[139,53205,53206,53209],{},[54,53207,53208],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[54,53210,53211],{},"算数运算符：",[24,53213,53214],{},[40,53215],{"alt":72,"src":53216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[139,53218,53219],{"start":107},[54,53220,53221],{},"数字类型（Number）",[24,53223,53224],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[24,53226,53227],{},[40,53228],{"alt":72,"src":53229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[139,53231,53232],{"start":191},[54,53233,53234],{},"字符串类型（string）",[24,53236,53237],{},[40,53238],{"alt":72,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[24,53241,53242],{},"反引号也是可以使用的",[24,53244,53245],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[24,53247,53248],{},"例如：document.write(\"我今年\"+age+\"岁\")",[139,53250,53251],{"start":1543},[54,53252,53253],{},"模板字符串",[24,53255,53256],{},[40,53257],{"alt":72,"src":53258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[24,53260,53261],{},"类似于python的字符串格式化",[139,53263,53264],{"start":1549},[54,53265,53266],{},"布尔类型",[24,53268,53269],{},"true 和 false",[139,53271,53272],{"start":1566},[54,53273,53274],{},"未定义类型（underfined）",[24,53276,53277],{},"表示没有赋值",[24,53279,53280],{},"未定义类型是比较特殊的类型，只有一个值undefined",[24,53282,53283],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[139,53285,53286],{"start":1572},[54,53287,53288],{},"null（空类型）",[24,53290,53291],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[24,53293,53294],{},"赋值了，但是内容为空",[67,53296,53298],{"className":53099,"code":53297,"language":53101,"meta":72,"style":72},"typeof null\n输出的是'object'，是一个对象数据类型\n",[74,53299,53300,53305],{"__ignoreMap":72},[77,53301,53302],{"class":79,"line":80},[77,53303,53304],{"class":87},"typeof null\n",[77,53306,53307],{"class":79,"line":91},[77,53308,53309],{"class":87},"输出的是'object'，是一个对象数据类型\n",[139,53311,53312],{"start":1589},[54,53313,53314],{},"控制台检测数据类型",[24,53316,53317],{},[40,53318],{"alt":72,"src":53319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[139,53321,53322],{"start":1595},[54,53323,53324],{},"类型转换",[24,53326,53327],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[24,53329,53330],{},"转换方式：隐式转换和显示转换",[24,53332,53333],{},"①隐式转换",[51,53335,53336,53339,53342,53345],{},[54,53337,53338],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[54,53340,53341],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[54,53343,53344],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[54,53346,53347],{},"任何数据和字符串相加结果都是字符串",[24,53349,53350],{},"②显示转换",[24,53352,53353],{},[40,53354],{"alt":72,"src":53355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[24,53357,53358],{},[40,53359],{"alt":72,"src":53360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[24,53362,53363],{},"在输入的时候要用好隐式转换，简单写起来",[24,53365,53366],{},"let num = +prompt(’请输入数字：‘)",[24,53368,53369],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[24,53371,53372],{},"console.log(parseInt('12.333px'))",[24,53374,53375],{},"输出为：12",[24,53377,53378],{},"console.log(parseInt('a'a'a12.333px'))",[24,53380,53381],{},"输出：NaN",[14,53383,53385],{"id":53384},"_26-运算符","2.6 运算符",[19,53387,53389],{"id":53388},"_261-赋值运算符","2.6.1 赋值运算符",[24,53391,53392],{},[40,53393],{"alt":72,"src":53394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[19,53396,53398],{"id":53397},"_262-一元运算符","2.6.2 一元运算符",[24,53400,53401],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[24,53403,53404],{},[40,53405],{"alt":72,"src":53406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[24,53408,53409],{},[40,53410],{"alt":72,"src":53411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[24,53413,53414],{},"两者的区别：",[24,53416,53417],{},[40,53418],{"alt":72,"src":53419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[24,53421,53422],{},"前置先自加；后置后加，代码执行完之后再加",[19,53424,53426],{"id":53425},"_263-比较运算符","2.6.3 比较运算符",[24,53428,53429],{},[40,53430],{"alt":72,"src":53431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[24,53433,53434],{},"比较运算符也有隐式转换",[24,53436,53437],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[24,53439,53440],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[24,53442,53443],{},"要使用三等，开发的时候",[24,53445,53446],{},"NaN不等于任何人，包括它自己",[24,53448,53449],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[24,53451,53452],{},"7\u002F10=0.7",[24,53454,53455],{},"最后：0.5+0.2=0.7",[24,53457,53458],{},"字符串比较，比较的是字符对应的ASCII码",[19,53460,53462],{"id":53461},"_264-逻辑运算符","2.6.4 逻辑运算符",[24,53464,53465],{},[40,53466],{"alt":72,"src":53467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[24,53469,53470],{},[40,53471],{"alt":72,"src":53472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[24,53474,53475],{},[40,53476],{"alt":72,"src":53477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[24,53479,53480],{},"上述题目选D",[24,53482,53483],{},"与真2假1；或真1假2",[19,53485,53487],{"id":53486},"_265-运算符优先级","2.6.5 运算符优先级",[24,53489,53490],{},[40,53491],{"alt":72,"src":53492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[24,53494,53495],{},"先算逻辑与，后算逻辑或",[14,53497,53499],{"id":53498},"_27-语句","2.7 语句",[24,53501,53502],{},"表达式：是可以被求值的代码，会有结果给我们",[24,53504,53505],{},"语句：语句是可以被执行的代码，例如prompt()",[24,53507,53508],{},[40,53509],{"alt":72,"src":53510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[24,53512,53513],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[24,53515,53516],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[19,53518,53520],{"id":53519},"_271-分支语句","2.7.1 分支语句",[24468,53522,53524],{"id":53523},"_2711-if分支语句","2.7.1.1 if分支语句",[24,53526,53527],{},"if语句单行简单的话，可以不写{}，写在一行就行",[139,53529,53530],{},[54,53531,53532],{},"单分支语句",[24,53534,53535],{},[40,53536],{"alt":72,"src":53537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[24,53539,53540],{},"除了0，所有数字都为真",[67,53542,53544],{"className":53099,"code":53543,"language":53101,"meta":72,"style":72},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[74,53545,53546,53551,53556,53561,53565],{"__ignoreMap":72},[77,53547,53548],{"class":79,"line":80},[77,53549,53550],{"class":87},"if（0) {\n",[77,53552,53553],{"class":79,"line":91},[77,53554,53555],{"class":87},"    let a=1\n",[77,53557,53558],{"class":79,"line":107},[77,53559,53560],{"class":87},"    alert(typeof a)\n",[77,53562,53563],{"class":79,"line":191},[77,53564,110],{"class":87},[77,53566,53567],{"class":79,"line":1543},[77,53568,53569],{"class":87},"不输出，括号为假\n",[139,53571,53572],{"start":91},[54,53573,53574],{},"双分支语句",[24,53576,53577],{},[40,53578],{"alt":72,"src":53579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[139,53581,53582],{"start":107},[54,53583,53584],{},"多分支语句",[24,53586,53587],{},[40,53588],{"alt":72,"src":53589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24468,53591,53593],{"id":53592},"_2712-三元运算符","2.7.1.2 三元运算符",[24,53595,53596],{},[40,53597],{"alt":72,"src":53598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24468,53600,53602],{"id":53601},"_2713-switch语句","2.7.1.3 switch语句",[24,53604,53605],{},[40,53606],{"alt":72,"src":53607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[24,53609,53610],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[19,53612,53614],{"id":53613},"_272-循环语句","2.7.2 循环语句",[24468,53616,53618],{"id":53617},"_2721-断点演示","2.7.2.1 断点演示",[24,53620,53621],{},[40,53622],{"alt":72,"src":53623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24468,53625,53627],{"id":53626},"_2722-while循环","2.7.2.2 while循环",[24,53629,53630],{},[40,53631],{"alt":72,"src":53632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[24,53634,53635],{},[40,53636],{"alt":72,"src":53637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24468,53639,53641],{"id":53640},"_2723-for循环","2.7.2.3 for循环",[24,53643,53644],{},[40,53645],{"alt":72,"src":53646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[24,53648,53649],{},"for(;;) {",[24,53651,3558],{},[24,53653,53654],{},"表示无限循环",[24,53656,53657],{},[40,53658],{"alt":72,"src":53659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24468,53661,53663],{"id":53662},"_2724-循环的退出","2.7.2.4 循环的退出",[24,53665,53666],{},[40,53667],{"alt":72,"src":53668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53670,53672],{"id":53671},"_28-数组","2.8 数组",[19,53674,53676],{"id":53675},"_281-基础认识","2.8.1 基础认识",[24,53678,53679],{},[40,53680],{"alt":72,"src":53681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[24,53683,53684],{},[40,53685],{"alt":72,"src":53686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[24,53688,53689],{},[40,53690],{"alt":72,"src":53691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[24,53693,53694],{},[40,53695],{"alt":72,"src":53696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[19,53698,53700],{"id":53699},"_282-操作数组","2.8.2 操作数组",[24,53702,53703],{},[40,53704],{"alt":72,"src":53705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[139,53707,53708],{},[54,53709,53710],{},"添加元素",[24,53712,53713],{},[40,53714],{"alt":72,"src":53715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[24,53717,53718],{},"console.log(arr.push('green'))",[24,53720,53721],{},"输出结果：为新数组的长度",[24,53723,53724],{},[40,53725],{"alt":72,"src":53726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[24,53728,53729],{},"push用的非常多，一定要记住",[139,53731,53732],{},[54,53733,53734],{},"删除元素",[24,53736,53737],{},[40,53738],{"alt":72,"src":53739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[24,53741,53742],{},[40,53743],{"alt":72,"src":53744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[24,53746,53747],{},[40,53748],{"alt":72,"src":53749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[19,53751,53753],{"id":53752},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[67,53755,53757],{"className":53099,"code":53756,"language":53101,"meta":72,"style":72},"\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",[74,53758,53759,53772,53788,53792,53801,53819,53843,53865,53879,53887,53894,53905,53916,53920,53924,53931,53943,53957,53970,53988,54005,54019,54031,54043,54055,54059,54063,54073,54083,54095,54107,54119,54130,54134,54138,54150,54154,54168,54172,54176,54187,54201,54213,54227,54231,54240,54248,54252,54261,54265,54274,54279,54284,54297,54325,54330,54335,54360,54365,54369,54374,54379,54394,54398,54403,54433,54445,54461,54477,54491,54496,54503,54507,54512,54525,54533,54541,54545],{"__ignoreMap":72},[77,53760,53761,53764,53767,53770],{"class":79,"line":80},[77,53762,53763],{"class":87},"\u003C!",[77,53765,53766],{"class":158},"DOCTYPE",[77,53768,53769],{"class":83}," html",[77,53771,291],{"class":87},[77,53773,53774,53776,53778,53781,53783,53786],{"class":79,"line":91},[77,53775,260],{"class":87},[77,53777,53101],{"class":158},[77,53779,53780],{"class":83}," lang",[77,53782,268],{"class":87},[77,53784,53785],{"class":271},"\"en\"",[77,53787,291],{"class":87},[77,53789,53790],{"class":79,"line":107},[77,53791,4875],{"emptyLinePlaceholder":2549},[77,53793,53794,53796,53799],{"class":79,"line":191},[77,53795,260],{"class":87},[77,53797,53798],{"class":158},"head",[77,53800,291],{"class":87},[77,53802,53803,53806,53809,53812,53814,53817],{"class":79,"line":1543},[77,53804,53805],{"class":87},"    \u003C",[77,53807,53808],{"class":158},"meta",[77,53810,53811],{"class":83}," charset",[77,53813,268],{"class":87},[77,53815,53816],{"class":271},"\"UTF-8\"",[77,53818,291],{"class":87},[77,53820,53821,53823,53825,53828,53830,53833,53836,53838,53841],{"class":79,"line":1549},[77,53822,53805],{"class":87},[77,53824,53808],{"class":158},[77,53826,53827],{"class":83}," http-equiv",[77,53829,268],{"class":87},[77,53831,53832],{"class":271},"\"X-UA-Compatible\"",[77,53834,53835],{"class":83}," content",[77,53837,268],{"class":87},[77,53839,53840],{"class":271},"\"IE=edge\"",[77,53842,291],{"class":87},[77,53844,53845,53847,53849,53851,53853,53856,53858,53860,53863],{"class":79,"line":1566},[77,53846,53805],{"class":87},[77,53848,53808],{"class":158},[77,53850,2495],{"class":83},[77,53852,268],{"class":87},[77,53854,53855],{"class":271},"\"viewport\"",[77,53857,53835],{"class":83},[77,53859,268],{"class":87},[77,53861,53862],{"class":271},"\"width=device-width, initial-scale=1.0\"",[77,53864,291],{"class":87},[77,53866,53867,53869,53872,53875,53877],{"class":79,"line":1572},[77,53868,53805],{"class":87},[77,53870,53871],{"class":158},"title",[77,53873,53874],{"class":87},">Document\u003C\u002F",[77,53876,53871],{"class":158},[77,53878,291],{"class":87},[77,53880,53881,53883,53885],{"class":79,"line":1589},[77,53882,53805],{"class":87},[77,53884,2520],{"class":158},[77,53886,291],{"class":87},[77,53888,53889,53892],{"class":79,"line":1595},[77,53890,53891],{"class":158},"        *",[77,53893,88],{"class":87},[77,53895,53896,53899,53901,53903],{"class":79,"line":4088},[77,53897,53898],{"class":94},"            margin",[77,53900,98],{"class":87},[77,53902,1939],{"class":94},[77,53904,104],{"class":87},[77,53906,53907,53910,53912,53914],{"class":79,"line":4093},[77,53908,53909],{"class":94},"            padding",[77,53911,98],{"class":87},[77,53913,1939],{"class":94},[77,53915,104],{"class":87},[77,53917,53918],{"class":79,"line":4099},[77,53919,5004],{"class":87},[77,53921,53922],{"class":79,"line":4104},[77,53923,4875],{"emptyLinePlaceholder":2549},[77,53925,53926,53929],{"class":79,"line":4118},[77,53927,53928],{"class":83},"        .box",[77,53930,88],{"class":87},[77,53932,53933,53936,53938,53941],{"class":79,"line":4123},[77,53934,53935],{"class":94},"            display",[77,53937,98],{"class":87},[77,53939,53940],{"class":94},"flex",[77,53942,104],{"class":87},[77,53944,53945,53948,53950,53953,53955],{"class":79,"line":4129},[77,53946,53947],{"class":94},"            width",[77,53949,98],{"class":87},[77,53951,53952],{"class":94},"700",[77,53954,2124],{"class":2123},[77,53956,104],{"class":87},[77,53958,53959,53962,53964,53966,53968],{"class":79,"line":4150},[77,53960,53961],{"class":94},"            height",[77,53963,98],{"class":87},[77,53965,6448],{"class":94},[77,53967,2124],{"class":2123},[77,53969,104],{"class":87},[77,53971,53972,53975,53977,53979,53981,53983,53986],{"class":79,"line":4155},[77,53973,53974],{"class":94},"            border-left",[77,53976,98],{"class":87},[77,53978,2120],{"class":94},[77,53980,2124],{"class":2123},[77,53982,2127],{"class":94},[77,53984,53985],{"class":94}," pink",[77,53987,104],{"class":87},[77,53989,53990,53993,53995,53997,53999,54001,54003],{"class":79,"line":4169},[77,53991,53992],{"class":94},"            border-bottom",[77,53994,98],{"class":87},[77,53996,2120],{"class":94},[77,53998,2124],{"class":2123},[77,54000,2127],{"class":94},[77,54002,53985],{"class":94},[77,54004,104],{"class":87},[77,54006,54007,54009,54011,54013,54015,54017],{"class":79,"line":4174},[77,54008,53898],{"class":94},[77,54010,98],{"class":87},[77,54012,3269],{"class":94},[77,54014,2124],{"class":2123},[77,54016,1942],{"class":94},[77,54018,104],{"class":87},[77,54020,54021,54024,54026,54029],{"class":79,"line":4203},[77,54022,54023],{"class":94},"            justify-content",[77,54025,98],{"class":87},[77,54027,54028],{"class":94},"space-around",[77,54030,104],{"class":87},[77,54032,54033,54036,54038,54041],{"class":79,"line":4208},[77,54034,54035],{"class":94},"            align-items",[77,54037,98],{"class":87},[77,54039,54040],{"class":94},"flex-end",[77,54042,104],{"class":87},[77,54044,54045,54048,54050,54053],{"class":79,"line":4225},[77,54046,54047],{"class":94},"            text-align",[77,54049,98],{"class":87},[77,54051,54052],{"class":94},"center",[77,54054,104],{"class":87},[77,54056,54057],{"class":79,"line":4230},[77,54058,5004],{"class":87},[77,54060,54061],{"class":79,"line":4235},[77,54062,4875],{"emptyLinePlaceholder":2549},[77,54064,54065,54067,54069,54071],{"class":79,"line":4240},[77,54066,53928],{"class":83},[77,54068,3572],{"class":2123},[77,54070,331],{"class":158},[77,54072,88],{"class":87},[77,54074,54075,54077,54079,54081],{"class":79,"line":4254},[77,54076,53935],{"class":94},[77,54078,98],{"class":87},[77,54080,53940],{"class":94},[77,54082,104],{"class":87},[77,54084,54085,54087,54089,54091,54093],{"class":79,"line":4259},[77,54086,53947],{"class":94},[77,54088,98],{"class":87},[77,54090,3269],{"class":94},[77,54092,2124],{"class":2123},[77,54094,104],{"class":87},[77,54096,54097,54100,54102,54105],{"class":79,"line":5052},[77,54098,54099],{"class":94},"            background-color",[77,54101,98],{"class":87},[77,54103,54104],{"class":94},"pink",[77,54106,104],{"class":87},[77,54108,54109,54112,54114,54117],{"class":79,"line":5066},[77,54110,54111],{"class":94},"            flex-direction",[77,54113,98],{"class":87},[77,54115,54116],{"class":94},"column",[77,54118,104],{"class":87},[77,54120,54121,54123,54125,54128],{"class":79,"line":5074},[77,54122,54023],{"class":94},[77,54124,98],{"class":87},[77,54126,54127],{"class":94},"space-between",[77,54129,104],{"class":87},[77,54131,54132],{"class":79,"line":5079},[77,54133,5004],{"class":87},[77,54135,54136],{"class":79,"line":5085},[77,54137,4875],{"emptyLinePlaceholder":2549},[77,54139,54140,54142,54145,54148],{"class":79,"line":5091},[77,54141,53928],{"class":83},[77,54143,54144],{"class":158}," div",[77,54146,54147],{"class":158}," span",[77,54149,88],{"class":87},[77,54151,54152],{"class":79,"line":5096},[77,54153,4875],{"emptyLinePlaceholder":2549},[77,54155,54156,54159,54161,54164,54166],{"class":79,"line":10422},[77,54157,54158],{"class":94},"            margin-top",[77,54160,98],{"class":87},[77,54162,54163],{"class":94},"-20",[77,54165,2124],{"class":2123},[77,54167,104],{"class":87},[77,54169,54170],{"class":79,"line":10446},[77,54171,5004],{"class":87},[77,54173,54174],{"class":79,"line":10451},[77,54175,4875],{"emptyLinePlaceholder":2549},[77,54177,54178,54180,54182,54185],{"class":79,"line":10457},[77,54179,53928],{"class":83},[77,54181,54144],{"class":158},[77,54183,54184],{"class":158}," h4",[77,54186,88],{"class":87},[77,54188,54189,54192,54194,54197,54199],{"class":79,"line":10484},[77,54190,54191],{"class":94},"            margin-bottom",[77,54193,98],{"class":87},[77,54195,54196],{"class":94},"-35",[77,54198,2124],{"class":2123},[77,54200,104],{"class":87},[77,54202,54203,54205,54207,54209,54211],{"class":79,"line":10489},[77,54204,53947],{"class":94},[77,54206,98],{"class":87},[77,54208,2970],{"class":94},[77,54210,2124],{"class":2123},[77,54212,104],{"class":87},[77,54214,54215,54218,54220,54223,54225],{"class":79,"line":10495},[77,54216,54217],{"class":94},"            margin-left",[77,54219,98],{"class":87},[77,54221,54222],{"class":94},"-10",[77,54224,2124],{"class":2123},[77,54226,104],{"class":87},[77,54228,54229],{"class":79,"line":10507},[77,54230,5004],{"class":87},[77,54232,54233,54236,54238],{"class":79,"line":10519},[77,54234,54235],{"class":87},"    \u003C\u002F",[77,54237,2520],{"class":158},[77,54239,291],{"class":87},[77,54241,54242,54244,54246],{"class":79,"line":10531},[77,54243,351],{"class":87},[77,54245,53798],{"class":158},[77,54247,291],{"class":87},[77,54249,54250],{"class":79,"line":12189},[77,54251,4875],{"emptyLinePlaceholder":2549},[77,54253,54254,54256,54259],{"class":79,"line":12214},[77,54255,260],{"class":87},[77,54257,54258],{"class":158},"body",[77,54260,291],{"class":87},[77,54262,54263],{"class":79,"line":12237},[77,54264,4875],{"emptyLinePlaceholder":2549},[77,54266,54267,54269,54272],{"class":79,"line":12261},[77,54268,53805],{"class":87},[77,54270,54271],{"class":158},"script",[77,54273,291],{"class":87},[77,54275,54276],{"class":79,"line":12266},[77,54277,54278],{"class":323},"        \u002F\u002F 1. 四次弹框效果\n",[77,54280,54281],{"class":79,"line":12271},[77,54282,54283],{"class":323},"        \u002F\u002F 声明一个新的数组\n",[77,54285,54286,54289,54292,54294],{"class":79,"line":12276},[77,54287,54288],{"class":2123},"        let",[77,54290,54291],{"class":87}," arr ",[77,54293,268],{"class":2123},[77,54295,54296],{"class":87}," []\n",[77,54298,54299,54301,54303,54306,54308,54310,54312,54314,54316,54319,54321,54323],{"class":79,"line":12285},[77,54300,5878],{"class":2123},[77,54302,4134],{"class":87},[77,54304,54305],{"class":2123},"let",[77,54307,11911],{"class":87},[77,54309,268],{"class":2123},[77,54311,27586],{"class":94},[77,54313,11918],{"class":87},[77,54315,4064],{"class":2123},[77,54317,54318],{"class":94}," 4",[77,54320,5689],{"class":87},[77,54322,4767],{"class":2123},[77,54324,14914],{"class":87},[77,54326,54327],{"class":79,"line":12290},[77,54328,54329],{"class":323},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[77,54331,54332],{"class":79,"line":12296},[77,54333,54334],{"class":323},"            \u002F\u002F arr.push(num)\n",[77,54336,54337,54340,54343,54345,54348,54350,54353,54355,54358],{"class":79,"line":12317},[77,54338,54339],{"class":87},"            arr.",[77,54341,54342],{"class":83},"push",[77,54344,2622],{"class":87},[77,54346,54347],{"class":83},"prompt",[77,54349,2622],{"class":87},[77,54351,54352],{"class":271},"`请输入第${",[77,54354,646],{"class":87},[77,54356,54357],{"class":271},"}季度的数据:`",[77,54359,32965],{"class":87},[77,54361,54362],{"class":79,"line":12323},[77,54363,54364],{"class":323},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[77,54366,54367],{"class":79,"line":12337},[77,54368,5004],{"class":87},[77,54370,54371],{"class":79,"line":12343},[77,54372,54373],{"class":323},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[77,54375,54376],{"class":79,"line":12370},[77,54377,54378],{"class":323},"        \u002F\u002F 盒子开头\n",[77,54380,54381,54384,54387,54389,54392],{"class":79,"line":12379},[77,54382,54383],{"class":87},"        document.",[77,54385,54386],{"class":83},"write",[77,54388,2622],{"class":87},[77,54390,54391],{"class":271},"` \u003Cdiv class=\"box\">`",[77,54393,2628],{"class":87},[77,54395,54396],{"class":79,"line":12385},[77,54397,4875],{"emptyLinePlaceholder":2549},[77,54399,54400],{"class":79,"line":12393},[77,54401,54402],{"class":323},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[77,54404,54405,54407,54409,54411,54413,54415,54417,54419,54421,54424,54427,54429,54431],{"class":79,"line":12398},[77,54406,5878],{"class":2123},[77,54408,4134],{"class":87},[77,54410,54305],{"class":2123},[77,54412,11911],{"class":87},[77,54414,268],{"class":2123},[77,54416,6568],{"class":94},[77,54418,11918],{"class":87},[77,54420,260],{"class":2123},[77,54422,54423],{"class":87}," arr.",[77,54425,54426],{"class":94},"length",[77,54428,5689],{"class":87},[77,54430,4767],{"class":2123},[77,54432,14914],{"class":87},[77,54434,54435,54438,54440,54442],{"class":79,"line":19074},[77,54436,54437],{"class":87},"            document.",[77,54439,54386],{"class":83},[77,54441,2622],{"class":87},[77,54443,54444],{"class":271},"`\n",[77,54446,54447,54450,54452,54454,54456,54458],{"class":79,"line":19080},[77,54448,54449],{"class":271},"              \u003Cdiv style=\"height: ${",[77,54451,6355],{"class":87},[77,54453,3503],{"class":271},[77,54455,646],{"class":87},[77,54457,3552],{"class":271},[77,54459,54460],{"class":271},"}px;\">\n",[77,54462,54463,54466,54468,54470,54472,54474],{"class":79,"line":19103},[77,54464,54465],{"class":271},"                \u003Cspan>${",[77,54467,6355],{"class":87},[77,54469,3503],{"class":271},[77,54471,646],{"class":87},[77,54473,3552],{"class":271},[77,54475,54476],{"class":271},"}\u003C\u002Fspan>\n",[77,54478,54479,54482,54484,54486,54488],{"class":79,"line":19109},[77,54480,54481],{"class":271},"                \u003Ch4>第${",[77,54483,646],{"class":87},[77,54485,48032],{"class":2123},[77,54487,27586],{"class":94},[77,54489,54490],{"class":271},"}季度\u003C\u002Fh4>\n",[77,54492,54493],{"class":79,"line":19132},[77,54494,54495],{"class":271},"              \u003C\u002Fdiv>          \n",[77,54497,54498,54501],{"class":79,"line":19146},[77,54499,54500],{"class":271},"            `",[77,54502,2628],{"class":87},[77,54504,54505],{"class":79,"line":19166},[77,54506,5004],{"class":87},[77,54508,54509],{"class":79,"line":19172},[77,54510,54511],{"class":323},"        \u002F\u002F 盒子结尾\n",[77,54513,54514,54516,54518,54520,54523],{"class":79,"line":19183},[77,54515,54383],{"class":87},[77,54517,54386],{"class":83},[77,54519,2622],{"class":87},[77,54521,54522],{"class":271},"` \u003C\u002Fdiv>`",[77,54524,2628],{"class":87},[77,54526,54527,54529,54531],{"class":79,"line":19206},[77,54528,54235],{"class":87},[77,54530,54271],{"class":158},[77,54532,291],{"class":87},[77,54534,54535,54537,54539],{"class":79,"line":19228},[77,54536,351],{"class":87},[77,54538,54258],{"class":158},[77,54540,291],{"class":87},[77,54542,54543],{"class":79,"line":19233},[77,54544,4875],{"emptyLinePlaceholder":2549},[77,54546,54547,54549,54551],{"class":79,"line":19239},[77,54548,351],{"class":87},[77,54550,53101],{"class":158},[77,54552,291],{"class":87},[19,54554,54556],{"id":54555},"_284-冒泡排序","2.8.4 冒泡排序",[67,54558,54560],{"className":53099,"code":54559,"language":53101,"meta":72,"style":72},"\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",[74,54561,54562,54572,54586,54590,54598,54613,54633,54645,54653,54657,54665,54673,54705,54738,54775,54780,54799,54804,54817,54832,54848,54852,54857,54861,54871,54880,54888,54892],{"__ignoreMap":72},[77,54563,54564,54566,54568,54570],{"class":79,"line":80},[77,54565,53763],{"class":87},[77,54567,53766],{"class":158},[77,54569,53769],{"class":83},[77,54571,291],{"class":87},[77,54573,54574,54576,54578,54580,54582,54584],{"class":79,"line":91},[77,54575,260],{"class":87},[77,54577,53101],{"class":158},[77,54579,53780],{"class":83},[77,54581,268],{"class":87},[77,54583,53785],{"class":271},[77,54585,291],{"class":87},[77,54587,54588],{"class":79,"line":107},[77,54589,4875],{"emptyLinePlaceholder":2549},[77,54591,54592,54594,54596],{"class":79,"line":191},[77,54593,260],{"class":87},[77,54595,53798],{"class":158},[77,54597,291],{"class":87},[77,54599,54600,54603,54605,54607,54609,54611],{"class":79,"line":1543},[77,54601,54602],{"class":87},"  \u003C",[77,54604,53808],{"class":158},[77,54606,53811],{"class":83},[77,54608,268],{"class":87},[77,54610,53816],{"class":271},[77,54612,291],{"class":87},[77,54614,54615,54617,54619,54621,54623,54625,54627,54629,54631],{"class":79,"line":1549},[77,54616,54602],{"class":87},[77,54618,53808],{"class":158},[77,54620,2495],{"class":83},[77,54622,268],{"class":87},[77,54624,53855],{"class":271},[77,54626,53835],{"class":83},[77,54628,268],{"class":87},[77,54630,53862],{"class":271},[77,54632,291],{"class":87},[77,54634,54635,54637,54639,54641,54643],{"class":79,"line":1566},[77,54636,54602],{"class":87},[77,54638,53871],{"class":158},[77,54640,53874],{"class":87},[77,54642,53871],{"class":158},[77,54644,291],{"class":87},[77,54646,54647,54649,54651],{"class":79,"line":1572},[77,54648,351],{"class":87},[77,54650,53798],{"class":158},[77,54652,291],{"class":87},[77,54654,54655],{"class":79,"line":1589},[77,54656,4875],{"emptyLinePlaceholder":2549},[77,54658,54659,54661,54663],{"class":79,"line":1595},[77,54660,260],{"class":87},[77,54662,54258],{"class":158},[77,54664,291],{"class":87},[77,54666,54667,54669,54671],{"class":79,"line":4088},[77,54668,54602],{"class":87},[77,54670,54271],{"class":158},[77,54672,291],{"class":87},[77,54674,54675,54678,54680,54682,54685,54687,54689,54691,54693,54695,54697,54699,54701,54703],{"class":79,"line":4093},[77,54676,54677],{"class":2123},"    let",[77,54679,54291],{"class":87},[77,54681,268],{"class":2123},[77,54683,54684],{"class":87}," [",[77,54686,2933],{"class":94},[77,54688,680],{"class":87},[77,54690,2907],{"class":94},[77,54692,680],{"class":87},[77,54694,2690],{"class":94},[77,54696,680],{"class":87},[77,54698,2696],{"class":94},[77,54700,680],{"class":87},[77,54702,2120],{"class":94},[77,54704,35713],{"class":87},[77,54706,54707,54709,54711,54713,54715,54717,54719,54721,54723,54725,54727,54730,54732,54734,54736],{"class":79,"line":4099},[77,54708,5676],{"class":2123},[77,54710,4134],{"class":87},[77,54712,54305],{"class":2123},[77,54714,11911],{"class":87},[77,54716,268],{"class":2123},[77,54718,6568],{"class":94},[77,54720,11918],{"class":87},[77,54722,260],{"class":2123},[77,54724,54423],{"class":87},[77,54726,54426],{"class":94},[77,54728,54729],{"class":2123}," -",[77,54731,27586],{"class":94},[77,54733,5689],{"class":87},[77,54735,4767],{"class":2123},[77,54737,14914],{"class":87},[77,54739,54740,54743,54745,54747,54749,54751,54753,54755,54757,54759,54761,54763,54765,54767,54769,54771,54773],{"class":79,"line":4104},[77,54741,54742],{"class":2123},"      for",[77,54744,4134],{"class":87},[77,54746,54305],{"class":2123},[77,54748,11973],{"class":87},[77,54750,268],{"class":2123},[77,54752,6568],{"class":94},[77,54754,11980],{"class":87},[77,54756,260],{"class":2123},[77,54758,54423],{"class":87},[77,54760,54426],{"class":94},[77,54762,54729],{"class":2123},[77,54764,11911],{"class":87},[77,54766,3145],{"class":2123},[77,54768,27586],{"class":94},[77,54770,11987],{"class":87},[77,54772,4767],{"class":2123},[77,54774,14914],{"class":87},[77,54776,54777],{"class":79,"line":4118},[77,54778,54779],{"class":323},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[77,54781,54782,54784,54787,54789,54792,54794,54796],{"class":79,"line":4123},[77,54783,4972],{"class":2123},[77,54785,54786],{"class":87}," (arr[j] ",[77,54788,3572],{"class":2123},[77,54790,54791],{"class":87}," arr[j ",[77,54793,3094],{"class":2123},[77,54795,27586],{"class":94},[77,54797,54798],{"class":87},"]) {\n",[77,54800,54801],{"class":79,"line":4129},[77,54802,54803],{"class":323},"          \u002F\u002F 交换两个变量\n",[77,54805,54806,54809,54812,54814],{"class":79,"line":4150},[77,54807,54808],{"class":2123},"          let",[77,54810,54811],{"class":87}," tmp ",[77,54813,268],{"class":2123},[77,54815,54816],{"class":87}," arr[j]\n",[77,54818,54819,54822,54824,54826,54828,54830],{"class":79,"line":4155},[77,54820,54821],{"class":87},"          arr[j] ",[77,54823,268],{"class":2123},[77,54825,54791],{"class":87},[77,54827,3094],{"class":2123},[77,54829,27586],{"class":94},[77,54831,35713],{"class":87},[77,54833,54834,54837,54839,54841,54843,54845],{"class":79,"line":4169},[77,54835,54836],{"class":87},"          arr[j ",[77,54838,3094],{"class":2123},[77,54840,27586],{"class":94},[77,54842,6918],{"class":87},[77,54844,268],{"class":2123},[77,54846,54847],{"class":87}," tmp\n",[77,54849,54850],{"class":79,"line":4174},[77,54851,5004],{"class":87},[77,54853,54854],{"class":79,"line":4203},[77,54855,54856],{"class":87},"      }\n",[77,54858,54859],{"class":79,"line":4208},[77,54860,4662],{"class":87},[77,54862,54863,54866,54868],{"class":79,"line":4225},[77,54864,54865],{"class":87},"    document.",[77,54867,54386],{"class":83},[77,54869,54870],{"class":87},"(arr)\n",[77,54872,54873,54876,54878],{"class":79,"line":4230},[77,54874,54875],{"class":87},"  \u003C\u002F",[77,54877,54271],{"class":158},[77,54879,291],{"class":87},[77,54881,54882,54884,54886],{"class":79,"line":4235},[77,54883,351],{"class":87},[77,54885,54258],{"class":158},[77,54887,291],{"class":87},[77,54889,54890],{"class":79,"line":4240},[77,54891,4875],{"emptyLinePlaceholder":2549},[77,54893,54894,54896,54898],{"class":79,"line":4254},[77,54895,351],{"class":87},[77,54897,53101],{"class":158},[77,54899,291],{"class":87},[24,54901,54902],{},[40,54903],{"alt":72,"src":54904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[24,54906,54907],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[24,54909,54910],{},"let arr = [4, 2, 5, 1, 3]",[24,54912,54913],{},"\u002F\u002F 1.升序排列写法",[24,54915,54916],{},"arr.sort(function (a, b) {",[24,54918,54919],{},"return a - b",[24,54921,54922],{},"})",[24,54924,54925],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[24,54927,54928],{},"\u002F\u002F 降序排列写法",[24,54930,54916],{},[24,54932,54933],{},"return b - a",[24,54935,54922],{},[24,54937,54938],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54940,54942],{"id":54941},"_29-函数","2.9 函数",[24,54944,54945],{},[40,54946],{"alt":72,"src":54947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[24,54949,54950],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[24,54952,54953],{},"函数的声明用function",[24,54955,54956],{},"函数里边可以嵌套函数",[19,54958,54960],{"id":54959},"_291-函数传参","2.9.1 函数传参",[24,54962,54963],{},[40,54964],{"alt":72,"src":54965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[24,54967,54968],{},[40,54969],{"alt":72,"src":54970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[51,54972,54973,54976,54979,54982,54985,54988],{},[54,54974,54975],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[54,54977,54978],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[54,54980,54981],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[54,54983,54984],{},"开发中尽量保持形参和实参个数一致",[54,54986,54987],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[54,54989,54990],{},"形参只在函数中有用，所以不需要进行声明这个变量",[24,54992,54993],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[19,54995,54997],{"id":54996},"_292-函数的返回值","2.9.2 函数的返回值",[24,54999,55000],{},[40,55001],{"alt":72,"src":55002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[24,55004,55005],{},[40,55006],{"alt":72,"src":55007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[51,55009,55010,55013,55016,55019,55022],{},[54,55011,55012],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[54,55014,55015],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[54,55017,55018],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[54,55020,55021],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[54,55023,55024],{},"断点调试:进入函数内部看执行过程F11",[19,55026,55028],{"id":55027},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[67,55030,55032],{"className":53099,"code":55031,"language":53101,"meta":72,"style":72},"    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",[74,55033,55034,55039,55044,55048,55053],{"__ignoreMap":72},[77,55035,55036],{"class":79,"line":80},[77,55037,55038],{"class":87},"    function fn(a, b) {\n",[77,55040,55041],{"class":79,"line":91},[77,55042,55043],{"class":87},"      console.log(a + b);\n",[77,55045,55046],{"class":79,"line":107},[77,55047,4662],{"class":87},[77,55049,55050],{"class":79,"line":191},[77,55051,55052],{"class":87},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[77,55054,55055],{"class":79,"line":1543},[77,55056,55057],{"class":87},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[19,55059,55061],{"id":55060},"_294-作用域","2.9.4 作用域",[51,55063,55064,55070,55075,55078,55081],{},[54,55065,55066,55067],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[27,55068,55069],{},"作用域",[54,55071,55072],{},[27,55073,55074],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[54,55076,55077],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[54,55079,55080],{},"函数内部可以直接所使用全局变量",[54,55082,55083],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[24,55085,17105],{},[67,55087,55089],{"className":53099,"code":55088,"language":53101,"meta":72,"style":72},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[74,55090,55091,55096,55101,55105,55110,55115,55120],{"__ignoreMap":72},[77,55092,55093],{"class":79,"line":80},[77,55094,55095],{"class":87},"    function fun() {\n",[77,55097,55098],{"class":79,"line":91},[77,55099,55100],{"class":87},"      num = 10\n",[77,55102,55103],{"class":79,"line":107},[77,55104,4662],{"class":87},[77,55106,55107],{"class":79,"line":191},[77,55108,55109],{"class":87},"    fun()\n",[77,55111,55112],{"class":79,"line":1543},[77,55113,55114],{"class":87},"    console.log(num)\n",[77,55116,55117],{"class":79,"line":1549},[77,55118,55119],{"class":87},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[77,55121,55122],{"class":79,"line":1566},[77,55123,55124],{"class":87},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[51,55126,55127,55130],{},[54,55128,55129],{},"函数内部的形参可以看做是局部变量",[54,55131,55132],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[24,55134,55135,55136],{},"变量访问原则： ",[27,55137,55138],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[19,55140,55142],{"id":55141},"_295-匿名函数","2.9.5 匿名函数",[24,55144,55145],{},"函数可以分为具名函数和匿名函数",[24,55147,55148],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[139,55150,55151],{},[54,55152,55153],{},"函数表达式",[24,55155,55156],{},[40,55157],{"alt":72,"src":55158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[24,55160,55161],{},"里边也可以写参数",[24,55163,55164],{},"具名函数调用位置可以随意调整；",[24,55166,55167],{},"匿名函数函数表达式形式只能在声明后才可以使用",[139,55169,55170],{"start":91},[54,55171,55172],{},"立即执行函数",[24,55174,55175],{},[40,55176],{"alt":72,"src":55177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[24,55179,55180],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[24,55182,55183],{},"写法：两个小括号，然后在第一个小括号中写function",[24,55185,55186],{},"(function () {})();",[24,55188,55189],{},"不要落下最后的;",[24,55191,55192],{},"立即执行函数必须要加;",[24,55194,55195],{},"分号写前写后都没问题",[24,55197,55198],{},"写前：",[24,55200,55201],{},"(function() {})()",[24,55203,55204],{},";(function () {})();",[24,55206,55207],{},"写后:",[24,55209,55210],{},"(function() {})();",[24,55212,55186],{},[24,55214,55215],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[24,55217,55218],{},"还有一种写法：",[24,55220,55221],{},"(function(){}());",[24,55223,55224],{},"或者:",[24,55226,55227],{},"!function(){}();",[24,55229,55230],{},"立即执行函数有时候也是可以加名字的：",[24,55232,55233],{},"(function flexible(window,document) {}(window,document));",[24,55235,55236],{},"省一些调用方法",[19,55238,55240],{"id":55239},"_296-逻辑中断","2.9.6 逻辑中断!!!",[24,55242,55243],{},[40,55244],{"alt":72,"src":55245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[24,55247,55248],{},"这样就不用非得给x,y初始化了",[24,55250,55251],{},[40,55252],{"alt":72,"src":55253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[24,55255,55256],{},"代码执行时先看左边",[24,55258,55259],{},"例如：console.log(false && 3+5)",[24,55261,55262],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[24,55264,55265],{},"&&都是真时，就返回最后一个真值",[24,55267,55268],{},"console.log(11 && 22)",[24,55270,55271],{},"输出22",[24,55273,55274],{},"逻辑与：遇真则真",[24,55276,17105],{},[24,55278,55279],{},"let age=1",[24,55281,55282],{},"console.log(11 || age++)",[24,55284,55285],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[24,55287,55288],{},"console.log(11 || 22)",[24,55290,55291],{},"||逻辑或遇到真就直接输出，输出结果为11",[24,55293,55294],{},"||如果都是假的话，就取最后一个假的值了",[19,55296,55298],{"id":55297},"_297-转换为boolean型","2.9.7 转换为Boolean型",[24,55300,55301],{},"显示转换：",[24,55303,55304,55307,55308],{},[27,55305,55306],{},"记忆","： ",[27,55309,55310],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[24,55312,55313],{},"空字符串为假，其他字符串全为真",[24,55315,55316],{},[40,55317],{"alt":72,"src":55318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[24,55320,55321],{},"隐式转换：",[24,55323,55324],{},[40,55325],{"alt":72,"src":55326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[24,55328,55329],{},"隐式转换:",[24,55331,55332],{},"null+3=3",[24,55334,55335],{},"undefined+3=NaN",[24,55337,55338],{},"null==undefined 输出true,他两个都当0看",[24,55340,55341],{},"null===undefined 输出false",[24,55343,55344],{},"undefined做任何操作都是NaN",[24,55346,55347],{},"NaN不等于NaN，NaN表示计算错误",[14,55349,55351],{"id":55350},"_210-对象","2.10 对象",[19,55353,55355],{"id":55354},"_2101-对象的介绍","2.10.1 对象的介绍",[24,55357,55358],{},"对象也是一种数据类型，里边的数据是无序的",[24,55360,55361],{},"对象由属性和方法组成",[24,55363,55364],{},[40,55365],{"alt":72,"src":55366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[24,55368,55369],{},[40,55370],{"alt":72,"src":55371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[24,55373,55374],{},[40,55375],{"alt":72,"src":55376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[19,55378,55380],{"id":55379},"_2102-对象属性","2.10.2 对象属性",[24,55382,55383],{},[40,55384],{"alt":72,"src":55385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[139,55387,55388],{},[54,55389,55390],{},"查询对象",[24,55392,55393],{},"对象名.属性 goods.uname",[24,55395,55396],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[24,55398,55399],{},"不带字符串的属性名也可以使用 对象名['属性名']",[24,55401,55402],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[24,55404,55405],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[139,55407,55408],{"start":91},[54,55409,55410],{},"重新赋值",[24,55412,55413],{},"对象名.属性=新值",[139,55415,55416],{"start":107},[54,55417,55418],{},"增加新数据",[24,55420,55413],{},[139,55422,55423],{"start":191},[54,55424,55425],{},"删除对象中的属性",[24,55427,55428],{},"delete 对象名.属性",[19,55430,55432],{"id":55431},"_2103-对象方法","2.10.3 对象方法",[24,55434,55435],{},[40,55436],{"alt":72,"src":55437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[24,55439,55440],{},"后边跟的是匿名函数",[24,55442,55443],{},"对象外面的叫函数；对象内部的叫方法",[24,55445,55446],{},[40,55447],{"alt":72,"src":55448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[19,55450,55452],{"id":55451},"_2104-遍历对象","2.10.4 遍历对象",[24,55454,55455],{},"理解为加括号的python字典遍历",[24,55457,55458],{},[40,55459],{"alt":72,"src":55460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[24,55462,55463],{},"k是字符串类型",[24,55465,55466],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[67,55468,55470],{"className":53099,"code":55469,"language":53101,"meta":72,"style":72},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[74,55471,55472,55477,55482,55487,55492],{"__ignoreMap":72},[77,55473,55474],{"class":79,"line":80},[77,55475,55476],{"class":87},"   let arr = [1, 2, 3]\n",[77,55478,55479],{"class":79,"line":91},[77,55480,55481],{"class":87},"    for (let k in arr) {\n",[77,55483,55484],{"class":79,"line":107},[77,55485,55486],{"class":87},"      console.log(k)\n",[77,55488,55489],{"class":79,"line":191},[77,55490,55491],{"class":87},"      console.log(arr[k])\n",[77,55493,55494],{"class":79,"line":1543},[77,55495,4662],{"class":87},[24,55497,55498],{},[40,55499],{"alt":72,"src":55500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[24,55502,55503],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[24,55505,55506],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[24,55508,55509],{},"for in 得到的k是属性名",[54271,55511,55512],{},"\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",[24,55514,55515],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[19,55517,55519],{"id":55518},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[24,55521,55522],{},"数组中放对象信息",[67,55524,55528],{"className":55525,"code":55526,"language":55527,"meta":72,"style":72},"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",[74,55529,55530,55538,55543,55548,55553,55558,55563,55568,55573,55578,55583,55588,55593,55597,55601],{"__ignoreMap":72},[77,55531,55532,55534,55536],{"class":79,"line":80},[77,55533,260],{"class":87},[77,55535,54271],{"class":158},[77,55537,291],{"class":87},[77,55539,55540],{"class":79,"line":91},[77,55541,55542],{"class":87},"    let students = [\n",[77,55544,55545],{"class":79,"line":107},[77,55546,55547],{"class":87},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[77,55549,55550],{"class":79,"line":191},[77,55551,55552],{"class":87},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[77,55554,55555],{"class":79,"line":1543},[77,55556,55557],{"class":87},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[77,55559,55560],{"class":79,"line":1549},[77,55561,55562],{"class":87},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[77,55564,55565],{"class":79,"line":1566},[77,55566,55567],{"class":87},"    ]\n",[77,55569,55570],{"class":79,"line":1572},[77,55571,55572],{"class":87},"    for (let i = 0; i \u003C students.length; i++) {\n",[77,55574,55575],{"class":79,"line":1589},[77,55576,55577],{"class":87},"      for (let k in students[i]) {\n",[77,55579,55580],{"class":79,"line":1595},[77,55581,55582],{"class":87},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[77,55584,55585],{"class":79,"line":4088},[77,55586,55587],{"class":87},"        \u002F\u002F输出每个人的名字：\n",[77,55589,55590],{"class":79,"line":4093},[77,55591,55592],{"class":87},"        \u002F\u002Fconsole.log(students[i].name)\n",[77,55594,55595],{"class":79,"line":4099},[77,55596,54856],{"class":87},[77,55598,55599],{"class":79,"line":4104},[77,55600,4662],{"class":87},[77,55602,55603,55605,55607],{"class":79,"line":4118},[77,55604,54875],{"class":87},[77,55606,54271],{"class":158},[77,55608,291],{"class":87},[19,55610,55612],{"id":55611},"_2106-内置对象","2.10.6 内置对象",[24,55614,55615],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[139,55617,55618],{},[54,55619,55620],{},"数学对象Math",[24,55622,55623],{},[40,55624],{"alt":72,"src":55625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[24,55627,55628],{},[417,55629,55632],{"href":55630,"rel":55631},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26332],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[24,55634,55635],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[24,55637,55638],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[24,55640,55641],{},"数组不可以使用Math中的max,min来求最大值与最小值",[24,55643,55644],{},"null是一个空对象，可以认为：null类似于let obj={}",[24,55646,55647],{},"null属于对象数据类型",[139,55649,55650],{"start":91},[54,55651,55652],{},"生成任意范围随机数",[24,55654,55655],{},[40,55656],{"alt":72,"src":55657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[24,55659,55660],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[24,55662,55663],{},"乘以几就取不到几",[24,55665,55666],{},"取数组中的随机元素：",[24,55668,55669],{},"let arr = ['red', 'green', 'blue']",[24,55671,55672],{},"let random = Math.floor(Math.random() * arr.length)",[24,55674,55675],{},"console.log(arr[random])",[24,55677,55678],{},"这个函数得到的是全闭区间",[24,55680,55681],{},"function getRandom(N, M) {",[24,55683,55684],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[24,55686,3558],{},[24,55688,55689],{},"console.log(getRandom(4, 8))",[19,55691,55693],{"id":55692},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[24,55695,55696],{},[40,55697],{"alt":72,"src":55698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[24,55700,55701],{},[40,55702],{"alt":72,"src":55703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[24,55705,55706],{},[40,55707],{"alt":72,"src":55708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[24,55710,55711],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[24,55713,55714],{},[40,55715],{"alt":72,"src":55716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[24,55718,55719],{},[40,55720],{"alt":72,"src":55721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[24,55723,55724],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[24,55726,55727],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[24,55729,55730],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2520,55732,55733],{},"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":72,"searchDepth":91,"depth":91,"links":55735},[55736,55744,55745,55746,55747,55748,55755,55759,55765,55774],{"id":52934,"depth":91,"text":52935,"children":55737},[55738,55739,55740,55741,55742,55743],{"id":52938,"depth":107,"text":52939},{"id":52955,"depth":107,"text":52956},{"id":52995,"depth":107,"text":52996},{"id":53007,"depth":107,"text":53008},{"id":53016,"depth":107,"text":53017},{"id":53064,"depth":107,"text":53065},{"id":53074,"depth":91,"text":53075},{"id":53162,"depth":91,"text":53163},{"id":53185,"depth":91,"text":53186},{"id":53197,"depth":91,"text":53198},{"id":53384,"depth":91,"text":53385,"children":55749},[55750,55751,55752,55753,55754],{"id":53388,"depth":107,"text":53389},{"id":53397,"depth":107,"text":53398},{"id":53425,"depth":107,"text":53426},{"id":53461,"depth":107,"text":53462},{"id":53486,"depth":107,"text":53487},{"id":53498,"depth":91,"text":53499,"children":55756},[55757,55758],{"id":53519,"depth":107,"text":53520},{"id":53613,"depth":107,"text":53614},{"id":53671,"depth":91,"text":53672,"children":55760},[55761,55762,55763,55764],{"id":53675,"depth":107,"text":53676},{"id":53699,"depth":107,"text":53700},{"id":53752,"depth":107,"text":53753},{"id":54555,"depth":107,"text":54556},{"id":54941,"depth":91,"text":54942,"children":55766},[55767,55768,55769,55770,55771,55772,55773],{"id":54959,"depth":107,"text":54960},{"id":54996,"depth":107,"text":54997},{"id":55027,"depth":107,"text":55028},{"id":55060,"depth":107,"text":55061},{"id":55141,"depth":107,"text":55142},{"id":55239,"depth":107,"text":55240},{"id":55297,"depth":107,"text":55298},{"id":55350,"depth":91,"text":55351,"children":55775},[55776,55777,55778,55779,55780,55781,55782],{"id":55354,"depth":107,"text":55355},{"id":55379,"depth":107,"text":55380},{"id":55431,"depth":107,"text":55432},{"id":55451,"depth":107,"text":55452},{"id":55518,"depth":107,"text":55519},{"id":55611,"depth":107,"text":55612},{"id":55692,"depth":107,"text":55693},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52926,"description":2546},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55789,"title":55790,"body":55791,"description":2546,"extension":2547,"meta":79111,"navigation":2549,"path":79112,"seo":79113,"stem":79114,"__hash__":79115},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55792,"toc":79051},[55793,55796,55799,55802,55807,55810,55813,55816,55820,55824,55830,55835,55843,55850,55853,55857,55862,55867,55872,55875,55878,55889,55892,55896,55899,55902,55907,55912,55917,55920,55923,56014,56017,56022,56025,56030,56033,56036,56041,56044,56049,56053,56056,56070,56074,56079,56082,56085,56089,56094,56097,56101,56105,56110,56114,56119,56122,56125,56128,56131,56134,56137,56142,56147,56174,56177,56180,56183,56188,56191,56194,56197,56200,56204,56233,56237,56242,56247,56250,56253,56256,56261,56374,56379,56384,56545,56550,56553,56557,56562,56567,56570,56573,56576,56579,56582,56585,56588,56591,56594,56597,56600,56603,56606,56609,56611,56614,56617,56620,56625,56629,57026,57029,57035,57039,57044,58320,58325,58328,58331,58334,58339,59535,59539,59545,59550,59553,59558,59563,59567,59571,59576,59579,59584,59587,59590,59594,60502,60505,60509,60730,60733,60736,60739,60965,60968,61192,61195,61199,61204,61207,61210,61438,61441,61474,61477,61481,61486,61490,61493,61496,61499,61502,61505,61508,61511,61516,62796,62800,62803,63894,63898,63901,63904,63907,63910,63914,63917,63920,63922,63930,65408,65412,65415,65418,65421,65630,65633,65637,65641,65646,65651,65654,65657,65662,65666,65671,65674,65783,65787,65792,65797,65800,65803,65807,65812,65817,65822,65825,65828,65839,65842,65847,65852,65855,65858,65931,65935,65940,65943,65945,65956,65960,65965,67291,67294,67297,67300,67302,67305,67308,67311,67314,67317,67320,67323,67326,67329,67332,67335,67338,67340,67342,67345,67349,68443,68446,68449,68465,68479,68482,68487,68493,68498,68502,68506,68511,68515,68520,68962,68967,68970,68974,68979,68982,68985,68989,68994,68998,69003,69008,69012,69017,69022,69025,69030,69035,69039,69044,69049,69153,69156,69160,69165,69531,69534,69537,69540,69543,69546,69549,69552,69555,70851,70855,70860,70865,70868,70871,70874,70877,70879,70884,70889,70892,70896,70901,70906,70911,70914,70917,70920,70923,70926,70931,70934,70938,70943,70948,70952,70957,70960,70965,70968,70971,70974,70977,70980,70985,70988,70991,70994,70997,71001,71006,71009,71013,71018,71021,71024,71028,71057,71060,71064,71068,71073,71077,71082,71085,71088,71091,71094,71097,71100,71103,71106,71109,71112,71115,71118,71121,71124,71128,71133,71138,71141,71145,71149,71154,71157,71161,71164,71167,71172,71177,71182,71187,71192,71195,71198,71203,71208,71212,71217,71220,71225,71228,71231,71234,71237,71242,71245,71254,71258,71263,71266,71269,71273,71276,71281,71285,71288,71294,71300,71304,71330,71333,72894,72897,73389,73392,73397,73402,73407,73411,73416,73421,73426,73430,73435,73438,73441,73444,73447,73451,73454,73459,73462,73467,73471,73476,73479,73484,73489,73494,73497,73500,73505,73510,73513,73516,73520,73523,73528,73531,73536,73539,73544,73549,73554,73557,73562,73627,73630,73641,73645,73650,73822,73826,73831,73834,73837,73840,73844,73855,73859,73862,73867,73872,73875,73878,73881,73884,73887,73889,73892,73895,73898,73903,73906,73911,73914,73918,73921,73924,73938,73942,73945,74000,74005,74008,74011,74016,74019,74023,74028,74158,74162,74167,74172,74253,74258,74262,74265,74270,74275,74281,74284,74287,74290,74294,74299,74302,74313,74317,74334,77380,77384,77387,77390,77393,77414,77418,77421,77429,77432,77437,77440,77443,77448,77453,77457,77478,77482,77487,77490,77493,77496,77499,77503,77508,77511,77515,77520,77523,77528,77531,77536,77539,77544,78747,78751,78756,78759,78764,79048],[10,55794,55790],{"id":55795},"_3web-apis",[24,55797,55798],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[24,55800,55801],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[24,55803,55804],{},[40,55805],{"alt":72,"src":55806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[24,55808,55809],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[24,55811,55812],{},"建议数组和对象使用 const 来声明",[24,55814,55815],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55817,55819],{"id":55818},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[19,55821,55823],{"id":55822},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[24,55825,55826,55829],{},[74,55827,55828],{},"document"," = HTML 文件解析后的对象化表示；",[24,55831,55832,55834],{},[74,55833,55828],{}," ≠ HTML 文件本身",[24,55836,55837,55842],{},[27,55838,55839],{},[74,55840,55841],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[24,55844,55845,55849],{},[27,55846,55847],{},[74,55848,55828],{}," ：容器里的内容，代表当前加载的网页（DOM）",[24,55851,55852],{},"document实际上为window.document的简写",[19,55854,55856],{"id":55855},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[24,55858,55859],{},[40,55860],{"alt":72,"src":55861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[24,55863,55864],{},[40,55865],{"alt":72,"src":55866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[24,55868,55869],{},[40,55870],{"alt":72,"src":55871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[24,55873,55874],{},"console.dir()",[24,55876,55877],{},"dir用来打印对象",[51,55879,55880,55883,55886],{},[54,55881,55882],{},"任何一个标签，都是一个对象",[54,55884,55885],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[54,55887,55888],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[24,55890,55891],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[19,55893,55895],{"id":55894},"_312-获取dom对象","3.1.2 获取DoM对象",[24,55897,55898],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[24,55900,55901],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[24,55903,55904],{},[27,55905,55906],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[139,55908,55909],{},[54,55910,55911],{},"利用CSS选择器来获取标签元素",[24,55913,55914],{},[40,55915],{"alt":72,"src":55916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[24,55918,55919],{},"里边的选择器必须必须加引号！！！",[24,55921,55922],{},"只选择第一个元素",[67,55924,55926],{"className":55525,"code":55925,"language":55527,"meta":72,"style":72},"\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",[74,55927,55928,55936,55956,55975,55983,55988,55993,55998,56006],{"__ignoreMap":72},[77,55929,55930,55932,55934],{"class":79,"line":80},[77,55931,260],{"class":87},[77,55933,54258],{"class":158},[77,55935,291],{"class":87},[77,55937,55938,55940,55942,55944,55946,55949,55952,55954],{"class":79,"line":91},[77,55939,54602],{"class":87},[77,55941,331],{"class":158},[77,55943,334],{"class":83},[77,55945,268],{"class":87},[77,55947,55948],{"class":271},"\"box\"",[77,55950,55951],{"class":87},">123\u003C\u002F",[77,55953,331],{"class":158},[77,55955,291],{"class":87},[77,55957,55958,55960,55962,55964,55966,55968,55971,55973],{"class":79,"line":107},[77,55959,54602],{"class":87},[77,55961,331],{"class":158},[77,55963,334],{"class":83},[77,55965,268],{"class":87},[77,55967,55948],{"class":271},[77,55969,55970],{"class":87},">456\u003C\u002F",[77,55972,331],{"class":158},[77,55974,291],{"class":87},[77,55976,55977,55979,55981],{"class":79,"line":191},[77,55978,54602],{"class":87},[77,55980,54271],{"class":158},[77,55982,291],{"class":87},[77,55984,55985],{"class":79,"line":1543},[77,55986,55987],{"class":87},"    \u002F\u002F 1.获取匹配的第一个元素\n",[77,55989,55990],{"class":79,"line":1549},[77,55991,55992],{"class":87},"    const box = document.querySelector('div')\n",[77,55994,55995],{"class":79,"line":1566},[77,55996,55997],{"class":87},"    console.dir(box)\n",[77,55999,56000,56002,56004],{"class":79,"line":1572},[77,56001,54875],{"class":87},[77,56003,54271],{"class":158},[77,56005,291],{"class":87},[77,56007,56008,56010,56012],{"class":79,"line":1589},[77,56009,351],{"class":87},[77,56011,54258],{"class":158},[77,56013,291],{"class":87},[24,56015,56016],{},"只选123，不选456",[24,56018,56019],{},[40,56020],{"alt":72,"src":56021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[24,56023,56024],{},"返回的是一个数组的集合，不能对其进行直接修改",[24,56026,56027],{},[40,56028],{"alt":72,"src":56029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[24,56031,56032],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[24,56034,56035],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[139,56037,56038],{"start":91},[54,56039,56040],{},"其他方法来获取标签元素",[24,56042,56043],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[24,56045,56046],{},[40,56047],{"alt":72,"src":56048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[19,56050,56052],{"id":56051},"_313-操作元素的内容","3.1.3 操作元素的内容",[24,56054,56055],{},"设置修改DOM元素内容有两种方式：",[51,56057,56058,56061,56064,56067],{},[54,56059,56060],{},"元素.innerText=''",[54,56062,56063],{},"元素.innerHTML=''",[54,56065,56066],{},"不写字符串输出数字也是可以的",[54,56068,56069],{},"元素.innerHtml=1",[24468,56071,56073],{"id":56072},"_3131-innertext","3.1.3.1 innerText",[24,56075,56076],{},[40,56077],{"alt":72,"src":56078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[24,56080,56081],{},"思路：实现了修改盒子中的内容！",[24,56083,56084],{},"它只显示纯文本，不解析标签",[24468,56086,56088],{"id":56087},"_3132-innerhtml","3.1.3.2 innerHTML",[24,56090,56091],{},[40,56092],{"alt":72,"src":56093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[24,56095,56096],{},"相比于innerText，他的强大之处在于可以解析标签",[19,56098,56100],{"id":56099},"_314-操作元素属性","3.1.4 操作元素属性",[24468,56102,56104],{"id":56103},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[24,56106,56107],{},[40,56108],{"alt":72,"src":56109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24468,56111,56113],{"id":56112},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[24,56115,56116],{},[40,56117],{"alt":72,"src":56118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[24,56120,56121],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[24,56123,56124],{},"div.style.backgroundColor = 'hotpink'",[24,56126,56127],{},"如果按照css的写法，-表示减，就会出错",[24,56129,56130],{},"body元素不需要再获取，直接用就行！！！！！！",[24,56132,56133],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[24,56135,56136],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[24,56138,56139],{},[40,56140],{"alt":72,"src":56141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[24,56143,56144],{},[40,56145],{"alt":72,"src":56146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[139,56148,56149,56152,56155,56158,56161,56164],{},[54,56150,56151],{},"className这个方式就是修改很多样式的时候来使用的！",[54,56153,56154],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[54,56156,56157],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[54,56159,56160],{},"className为属性名，如果还用class的话就导致与关键字冲突",[54,56162,56163],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[54,56165,56166,56167,56171],{},"解析标签的时候就变为了",[331,56168],{"className":56169},[1479,56170],"box",[56172,56173],"br",{},[24,56175,56176],{},"例子：",[331,56178],{"className":56179},[1479],[54271,56181,56182],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[24,56184,56185],{},[40,56186],{"alt":72,"src":56187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[24,56189,56190],{},"追加和删除类名用classList",[24,56192,56193],{},"常用于类似于开关的操作",[24,56195,56196],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[24,56198,56199],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24468,56201,56203],{"id":56202},"_3143-牢记点","3.1.4.3 牢记点",[139,56205,56206,56209,56212,56215,56218,56221,56224,56227,56230],{},[54,56207,56208],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[54,56210,56211],{},"使用style属性操作css时不要忘记引号",[54,56213,56214],{},"使用className或者classList时也不要忘记引号",[54,56216,56217],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[54,56219,56220],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[54,56222,56223],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[54,56225,56226],{},"若： let arr=['1','2',3] arr[0]=1",[54,56228,56229],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[54,56231,56232],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[19,56234,56236],{"id":56235},"_315-操作表单元素","3.1.5 操作表单元素",[139,56238,56239],{},[54,56240,56241],{},"天生的属性",[24,56243,56244],{},[40,56245],{"alt":72,"src":56246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[24,56248,56249],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[24,56251,56252],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[24,56254,56255],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[24,56257,56258],{},[40,56259],{"alt":72,"src":56260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[67,56262,56264],{"className":53099,"code":56263,"language":53101,"meta":72,"style":72},"在复选框中如果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",[74,56265,56266,56271,56301,56306,56311,56316,56321,56325,56330,56335,56352,56364,56369],{"__ignoreMap":72},[77,56267,56268],{"class":79,"line":80},[77,56269,56270],{"class":87},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[77,56272,56273,56275,56277,56279,56281,56284,56286,56288,56290,56292,56294,56296,56299],{"class":79,"line":91},[77,56274,260],{"class":87},[77,56276,159],{"class":158},[77,56278,2487],{"class":83},[77,56280,268],{"class":87},[77,56282,56283],{"class":271},"\"checkbox\"",[77,56285,2495],{"class":83},[77,56287,268],{"class":87},[77,56289,444],{"class":271},[77,56291,17430],{"class":83},[77,56293,268],{"class":87},[77,56295,444],{"class":271},[77,56297,56298],{"class":83}," checked",[77,56300,291],{"class":87},[77,56302,56303],{"class":79,"line":107},[77,56304,56305],{"class":87},"不选的话：\n",[77,56307,56308],{"class":79,"line":191},[77,56309,56310],{"class":87},"const input = document.querySelector('input')\n",[77,56312,56313],{"class":79,"line":1543},[77,56314,56315],{"class":87},"input.checked=false\n",[77,56317,56318],{"class":79,"line":1549},[77,56319,56320],{"class":87},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[77,56322,56323],{"class":79,"line":1566},[77,56324,4875],{"emptyLinePlaceholder":2549},[77,56326,56327],{"class":79,"line":1572},[77,56328,56329],{"class":87},"禁用按钮：\n",[77,56331,56332],{"class":79,"line":1589},[77,56333,56334],{"class":87},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[77,56336,56337,56339,56342,56345,56348,56350],{"class":79,"line":1595},[77,56338,260],{"class":87},[77,56340,56341],{"class":158},"button",[77,56343,56344],{"class":83}," disabled",[77,56346,56347],{"class":87},">点击\u003C\u002F",[77,56349,56341],{"class":158},[77,56351,291],{"class":87},[77,56353,56354,56356,56358,56360,56362],{"class":79,"line":4088},[77,56355,260],{"class":87},[77,56357,56341],{"class":158},[77,56359,56347],{"class":87},[77,56361,56341],{"class":158},[77,56363,291],{"class":87},[77,56365,56366],{"class":79,"line":4093},[77,56367,56368],{"class":87},"const bt = document.querySelector('button')\n",[77,56370,56371],{"class":79,"line":4099},[77,56372,56373],{"class":87},"bt.disabled = false\n",[139,56375,56376],{"start":91},[54,56377,56378],{},"自定义属性",[24,56380,56381],{},[40,56382],{"alt":72,"src":56383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[67,56385,56387],{"className":55525,"code":56386,"language":55527,"meta":72,"style":72},"\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",[74,56388,56389,56397,56425,56444,56463,56482,56501,56509,56514,56519,56524,56529,56537],{"__ignoreMap":72},[77,56390,56391,56393,56395],{"class":79,"line":80},[77,56392,260],{"class":87},[77,56394,54258],{"class":158},[77,56396,291],{"class":87},[77,56398,56399,56401,56403,56406,56408,56410,56413,56415,56418,56421,56423],{"class":79,"line":91},[77,56400,54602],{"class":87},[77,56402,331],{"class":158},[77,56404,56405],{"class":83}," data-id",[77,56407,268],{"class":87},[77,56409,6153],{"class":271},[77,56411,56412],{"class":83}," data-spm",[77,56414,268],{"class":87},[77,56416,56417],{"class":271},"\"我不知道\"",[77,56419,56420],{"class":87},">1\u003C\u002F",[77,56422,331],{"class":158},[77,56424,291],{"class":87},[77,56426,56427,56429,56431,56433,56435,56437,56440,56442],{"class":79,"line":107},[77,56428,54602],{"class":87},[77,56430,331],{"class":158},[77,56432,56405],{"class":83},[77,56434,268],{"class":87},[77,56436,6176],{"class":271},[77,56438,56439],{"class":87},">2\u003C\u002F",[77,56441,331],{"class":158},[77,56443,291],{"class":87},[77,56445,56446,56448,56450,56452,56454,56456,56459,56461],{"class":79,"line":191},[77,56447,54602],{"class":87},[77,56449,331],{"class":158},[77,56451,56405],{"class":83},[77,56453,268],{"class":87},[77,56455,6189],{"class":271},[77,56457,56458],{"class":87},">3\u003C\u002F",[77,56460,331],{"class":158},[77,56462,291],{"class":87},[77,56464,56465,56467,56469,56471,56473,56475,56478,56480],{"class":79,"line":1543},[77,56466,54602],{"class":87},[77,56468,331],{"class":158},[77,56470,56405],{"class":83},[77,56472,268],{"class":87},[77,56474,6202],{"class":271},[77,56476,56477],{"class":87},">4\u003C\u002F",[77,56479,331],{"class":158},[77,56481,291],{"class":87},[77,56483,56484,56486,56488,56490,56492,56494,56497,56499],{"class":79,"line":1549},[77,56485,54602],{"class":87},[77,56487,331],{"class":158},[77,56489,56405],{"class":83},[77,56491,268],{"class":87},[77,56493,6223],{"class":271},[77,56495,56496],{"class":87},">5\u003C\u002F",[77,56498,331],{"class":158},[77,56500,291],{"class":87},[77,56502,56503,56505,56507],{"class":79,"line":1566},[77,56504,54602],{"class":87},[77,56506,54271],{"class":158},[77,56508,291],{"class":87},[77,56510,56511],{"class":79,"line":1572},[77,56512,56513],{"class":87},"    const one = document.querySelector('div')\n",[77,56515,56516],{"class":79,"line":1589},[77,56517,56518],{"class":87},"    console.log(one.dataset)\n",[77,56520,56521],{"class":79,"line":1595},[77,56522,56523],{"class":87},"    console.log(one.dataset.id)\n",[77,56525,56526],{"class":79,"line":4088},[77,56527,56528],{"class":87},"    console.log(one.dataset.spm)\n",[77,56530,56531,56533,56535],{"class":79,"line":4093},[77,56532,54875],{"class":87},[77,56534,54271],{"class":158},[77,56536,291],{"class":87},[77,56538,56539,56541,56543],{"class":79,"line":4099},[77,56540,351],{"class":87},[77,56542,54258],{"class":158},[77,56544,291],{"class":87},[24,56546,56547],{},[40,56548],{"alt":72,"src":56549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[24,56551,56552],{},"document.querySelector选择的是第一个对象（元素）",[19,56554,56556],{"id":56555},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[24,56558,56559],{},[40,56560],{"alt":72,"src":56561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[24,56563,56564],{},[40,56565],{"alt":72,"src":56566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[24,56568,56569],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54271,56571,56572],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[24,56574,56575],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54271,56577,56578],{},"\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",[24,56580,56581],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[24,56583,56584],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[24,56586,56587],{},"单位为毫秒！！！",[24,56589,56590],{},"可以搭配匿名函数来用！！！",[24,56592,56593],{},"setInterval(function () {",[24,56595,56596],{},"alert('两秒执行一次')",[24,56598,56599],{},"}, 2000)",[24,56601,56602],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[24,56604,56605],{},"function fn() {",[24,56607,56608],{},"document.write(1)",[24,56610,3558],{},[24,56612,56613],{},"setInterval(fn, 1000)",[24,56615,56616],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[24,56618,56619],{},"setInterval('fn()', 1000)",[24,56621,56622],{},[40,56623],{"alt":72,"src":56624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24468,56626,56628],{"id":56627},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[67,56630,56632],{"className":53099,"code":56631,"language":53101,"meta":72,"style":72},"\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",[74,56633,56634,56644,56658,56662,56670,56684,56704,56716,56724,56728,56736,56773,56778,56783,56788,56796,56804,56826,56834,56839,56861,56866,56871,56882,56887,56907,56915,56930,56945,56956,56961,56971,56981,56985,56994,56998,57006,57014,57018],{"__ignoreMap":72},[77,56635,56636,56638,56640,56642],{"class":79,"line":80},[77,56637,53763],{"class":87},[77,56639,53766],{"class":158},[77,56641,53769],{"class":83},[77,56643,291],{"class":87},[77,56645,56646,56648,56650,56652,56654,56656],{"class":79,"line":91},[77,56647,260],{"class":87},[77,56649,53101],{"class":158},[77,56651,53780],{"class":83},[77,56653,268],{"class":87},[77,56655,53785],{"class":271},[77,56657,291],{"class":87},[77,56659,56660],{"class":79,"line":107},[77,56661,4875],{"emptyLinePlaceholder":2549},[77,56663,56664,56666,56668],{"class":79,"line":191},[77,56665,260],{"class":87},[77,56667,53798],{"class":158},[77,56669,291],{"class":87},[77,56671,56672,56674,56676,56678,56680,56682],{"class":79,"line":1543},[77,56673,54602],{"class":87},[77,56675,53808],{"class":158},[77,56677,53811],{"class":83},[77,56679,268],{"class":87},[77,56681,53816],{"class":271},[77,56683,291],{"class":87},[77,56685,56686,56688,56690,56692,56694,56696,56698,56700,56702],{"class":79,"line":1549},[77,56687,54602],{"class":87},[77,56689,53808],{"class":158},[77,56691,2495],{"class":83},[77,56693,268],{"class":87},[77,56695,53855],{"class":271},[77,56697,53835],{"class":83},[77,56699,268],{"class":87},[77,56701,53862],{"class":271},[77,56703,291],{"class":87},[77,56705,56706,56708,56710,56712,56714],{"class":79,"line":1566},[77,56707,54602],{"class":87},[77,56709,53871],{"class":158},[77,56711,53874],{"class":87},[77,56713,53871],{"class":158},[77,56715,291],{"class":87},[77,56717,56718,56720,56722],{"class":79,"line":1572},[77,56719,351],{"class":87},[77,56721,53798],{"class":158},[77,56723,291],{"class":87},[77,56725,56726],{"class":79,"line":1589},[77,56727,4875],{"emptyLinePlaceholder":2549},[77,56729,56730,56732,56734],{"class":79,"line":1595},[77,56731,260],{"class":87},[77,56733,54258],{"class":158},[77,56735,291],{"class":87},[77,56737,56738,56740,56743,56745,56747,56749,56751,56753,56755,56758,56760,56763,56766,56768,56771],{"class":79,"line":4088},[77,56739,54602],{"class":87},[77,56741,56742],{"class":158},"textarea",[77,56744,2495],{"class":83},[77,56746,268],{"class":87},[77,56748,444],{"class":271},[77,56750,17430],{"class":83},[77,56752,268],{"class":87},[77,56754,444],{"class":271},[77,56756,56757],{"class":83}," cols",[77,56759,268],{"class":87},[77,56761,56762],{"class":271},"\"30\"",[77,56764,56765],{"class":83}," rows",[77,56767,268],{"class":87},[77,56769,56770],{"class":271},"\"10\"",[77,56772,291],{"class":87},[77,56774,56775],{"class":79,"line":4093},[77,56776,56777],{"class":87},"        用户注册协议\n",[77,56779,56780],{"class":79,"line":4099},[77,56781,56782],{"class":87},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[77,56784,56785],{"class":79,"line":4104},[77,56786,56787],{"class":87},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[77,56789,56790,56792,56794],{"class":79,"line":4118},[77,56791,54235],{"class":87},[77,56793,56742],{"class":158},[77,56795,291],{"class":87},[77,56797,56798,56800,56802],{"class":79,"line":4123},[77,56799,54602],{"class":87},[77,56801,56172],{"class":158},[77,56803,291],{"class":87},[77,56805,56806,56808,56810,56812,56814,56817,56819,56822,56824],{"class":79,"line":4129},[77,56807,54602],{"class":87},[77,56809,56341],{"class":158},[77,56811,334],{"class":83},[77,56813,268],{"class":87},[77,56815,56816],{"class":271},"\"btn\"",[77,56818,56344],{"class":83},[77,56820,56821],{"class":87},">我已经阅读用户协议(5)\u003C\u002F",[77,56823,56341],{"class":158},[77,56825,291],{"class":87},[77,56827,56828,56830,56832],{"class":79,"line":4150},[77,56829,54602],{"class":87},[77,56831,54271],{"class":158},[77,56833,291],{"class":87},[77,56835,56836],{"class":79,"line":4155},[77,56837,56838],{"class":323},"    \u002F\u002F 1. 获取元素\n",[77,56840,56841,56843,56846,56848,56851,56854,56856,56859],{"class":79,"line":4169},[77,56842,13694],{"class":2123},[77,56844,56845],{"class":94}," btn",[77,56847,16036],{"class":2123},[77,56849,56850],{"class":87}," document.",[77,56852,56853],{"class":83},"querySelector",[77,56855,2622],{"class":87},[77,56857,56858],{"class":271},"'.btn'",[77,56860,2628],{"class":87},[77,56862,56863],{"class":79,"line":4174},[77,56864,56865],{"class":323},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[77,56867,56868],{"class":79,"line":4203},[77,56869,56870],{"class":323},"    \u002F\u002F 2. 倒计时\n",[77,56872,56873,56875,56877,56879],{"class":79,"line":4208},[77,56874,54677],{"class":2123},[77,56876,11911],{"class":87},[77,56878,268],{"class":2123},[77,56880,56881],{"class":94}," 5\n",[77,56883,56884],{"class":79,"line":4225},[77,56885,56886],{"class":323},"    \u002F\u002F 2.1 开启定时器\n",[77,56888,56889,56891,56894,56896,56899,56901,56904],{"class":79,"line":4230},[77,56890,54677],{"class":2123},[77,56892,56893],{"class":87}," n ",[77,56895,268],{"class":2123},[77,56897,56898],{"class":83}," setInterval",[77,56900,2622],{"class":87},[77,56902,56903],{"class":2123},"function",[77,56905,56906],{"class":87}," () {\n",[77,56908,56909,56912],{"class":79,"line":4235},[77,56910,56911],{"class":87},"      i",[77,56913,56914],{"class":2123},"--\n",[77,56916,56917,56920,56922,56925,56927],{"class":79,"line":4240},[77,56918,56919],{"class":87},"      btn.innerHTML ",[77,56921,268],{"class":2123},[77,56923,56924],{"class":271}," `我已经阅读用户协议(${",[77,56926,646],{"class":87},[77,56928,56929],{"class":271},"})`\n",[77,56931,56932,56935,56938,56941,56943],{"class":79,"line":4254},[77,56933,56934],{"class":2123},"      if",[77,56936,56937],{"class":87}," (i ",[77,56939,56940],{"class":2123},"===",[77,56942,6568],{"class":94},[77,56944,14914],{"class":87},[77,56946,56947,56950,56953],{"class":79,"line":4259},[77,56948,56949],{"class":83},"        clearInterval",[77,56951,56952],{"class":87},"(n)  ",[77,56954,56955],{"class":323},"\u002F\u002F 关闭定时器\n",[77,56957,56958],{"class":79,"line":5052},[77,56959,56960],{"class":323},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[77,56962,56963,56966,56968],{"class":79,"line":5066},[77,56964,56965],{"class":87},"        btn.disabled ",[77,56967,268],{"class":2123},[77,56969,56970],{"class":94}," false\n",[77,56972,56973,56976,56978],{"class":79,"line":5074},[77,56974,56975],{"class":87},"        btn.innerHTML ",[77,56977,268],{"class":2123},[77,56979,56980],{"class":271}," '同意'\n",[77,56982,56983],{"class":79,"line":5079},[77,56984,54856],{"class":87},[77,56986,56987,56990,56992],{"class":79,"line":5085},[77,56988,56989],{"class":87},"    }, ",[77,56991,8885],{"class":94},[77,56993,2628],{"class":87},[77,56995,56996],{"class":79,"line":5091},[77,56997,4875],{"emptyLinePlaceholder":2549},[77,56999,57000,57002,57004],{"class":79,"line":5096},[77,57001,54875],{"class":87},[77,57003,54271],{"class":158},[77,57005,291],{"class":87},[77,57007,57008,57010,57012],{"class":79,"line":10422},[77,57009,351],{"class":87},[77,57011,54258],{"class":158},[77,57013,291],{"class":87},[77,57015,57016],{"class":79,"line":10446},[77,57017,4875],{"emptyLinePlaceholder":2549},[77,57019,57020,57022,57024],{"class":79,"line":10451},[77,57021,351],{"class":87},[77,57023,53101],{"class":158},[77,57025,291],{"class":87},[24,57027,57028],{},"不要一直想着用死循环,避免死循环",[24,57030,57031,57034],{},[74,57032,57033],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24468,57036,57038],{"id":57037},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[139,57040,57041],{},[54,57042,57043],{},"法1",[67,57045,57047],{"className":53099,"code":57046,"language":53101,"meta":72,"style":72},"\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",[74,57048,57049,57059,57073,57077,57085,57099,57119,57131,57139,57145,57156,57167,57171,57175,57182,57193,57197,57201,57208,57219,57233,57246,57260,57264,57268,57275,57285,57296,57307,57319,57331,57342,57346,57350,57358,57368,57381,57393,57406,57410,57414,57421,57431,57443,57455,57466,57477,57487,57499,57511,57515,57519,57528,57540,57552,57580,57593,57597,57601,57608,57619,57623,57631,57639,57643,57651,57665,57680,57702,57710,57725,57738,57746,57767,57779,57791,57803,57815,57827,57839,57851,57860,57868,57876,57884,57896,57919,57938,57957,57976,57995,58014,58033,58053,58057,58077,58096,58116,58137,58148,58165,58175,58185,58195,58200,58205,58210,58215,58240,58253,58257,58280,58284,58292,58300,58308,58312],{"__ignoreMap":72},[77,57050,57051,57053,57055,57057],{"class":79,"line":80},[77,57052,53763],{"class":87},[77,57054,53766],{"class":158},[77,57056,53769],{"class":83},[77,57058,291],{"class":87},[77,57060,57061,57063,57065,57067,57069,57071],{"class":79,"line":91},[77,57062,260],{"class":87},[77,57064,53101],{"class":158},[77,57066,53780],{"class":83},[77,57068,268],{"class":87},[77,57070,53785],{"class":271},[77,57072,291],{"class":87},[77,57074,57075],{"class":79,"line":107},[77,57076,4875],{"emptyLinePlaceholder":2549},[77,57078,57079,57081,57083],{"class":79,"line":191},[77,57080,260],{"class":87},[77,57082,53798],{"class":158},[77,57084,291],{"class":87},[77,57086,57087,57089,57091,57093,57095,57097],{"class":79,"line":1543},[77,57088,54602],{"class":87},[77,57090,53808],{"class":158},[77,57092,53811],{"class":83},[77,57094,268],{"class":87},[77,57096,53816],{"class":271},[77,57098,291],{"class":87},[77,57100,57101,57103,57105,57107,57109,57111,57113,57115,57117],{"class":79,"line":1549},[77,57102,54602],{"class":87},[77,57104,53808],{"class":158},[77,57106,2495],{"class":83},[77,57108,268],{"class":87},[77,57110,53855],{"class":271},[77,57112,53835],{"class":83},[77,57114,268],{"class":87},[77,57116,53862],{"class":271},[77,57118,291],{"class":87},[77,57120,57121,57123,57125,57127,57129],{"class":79,"line":1566},[77,57122,54602],{"class":87},[77,57124,53871],{"class":158},[77,57126,53874],{"class":87},[77,57128,53871],{"class":158},[77,57130,291],{"class":87},[77,57132,57133,57135,57137],{"class":79,"line":1572},[77,57134,54602],{"class":87},[77,57136,2520],{"class":158},[77,57138,291],{"class":87},[77,57140,57141,57143],{"class":79,"line":1589},[77,57142,8878],{"class":158},[77,57144,88],{"class":87},[77,57146,57147,57150,57152,57154],{"class":79,"line":1595},[77,57148,57149],{"class":94},"      padding",[77,57151,98],{"class":87},[77,57153,1939],{"class":94},[77,57155,104],{"class":87},[77,57157,57158,57161,57163,57165],{"class":79,"line":4088},[77,57159,57160],{"class":94},"      margin",[77,57162,98],{"class":87},[77,57164,1939],{"class":94},[77,57166,104],{"class":87},[77,57168,57169],{"class":79,"line":4093},[77,57170,4662],{"class":87},[77,57172,57173],{"class":79,"line":4099},[77,57174,4875],{"emptyLinePlaceholder":2549},[77,57176,57177,57180],{"class":79,"line":4104},[77,57178,57179],{"class":158},"    li",[77,57181,88],{"class":87},[77,57183,57184,57187,57189,57191],{"class":79,"line":4118},[77,57185,57186],{"class":94},"      list-style",[77,57188,98],{"class":87},[77,57190,186],{"class":94},[77,57192,104],{"class":87},[77,57194,57195],{"class":79,"line":4123},[77,57196,4662],{"class":87},[77,57198,57199],{"class":79,"line":4129},[77,57200,4875],{"emptyLinePlaceholder":2549},[77,57202,57203,57206],{"class":79,"line":4150},[77,57204,57205],{"class":83},"    .box",[77,57207,88],{"class":87},[77,57209,57210,57213,57215,57217],{"class":79,"line":4155},[77,57211,57212],{"class":94},"      position",[77,57214,98],{"class":87},[77,57216,1538],{"class":94},[77,57218,104],{"class":87},[77,57220,57221,57224,57226,57229,57231],{"class":79,"line":4169},[77,57222,57223],{"class":94},"      width",[77,57225,98],{"class":87},[77,57227,57228],{"class":94},"976",[77,57230,2124],{"class":2123},[77,57232,104],{"class":87},[77,57234,57235,57238,57240,57242,57244],{"class":79,"line":4174},[77,57236,57237],{"class":94},"      height",[77,57239,98],{"class":87},[77,57241,4016],{"class":94},[77,57243,2124],{"class":2123},[77,57245,104],{"class":87},[77,57247,57248,57250,57252,57254,57256,57258],{"class":79,"line":4203},[77,57249,57160],{"class":94},[77,57251,98],{"class":87},[77,57253,2925],{"class":94},[77,57255,2124],{"class":2123},[77,57257,1942],{"class":94},[77,57259,104],{"class":87},[77,57261,57262],{"class":79,"line":4208},[77,57263,4662],{"class":87},[77,57265,57266],{"class":79,"line":4225},[77,57267,4875],{"emptyLinePlaceholder":2549},[77,57269,57270,57273],{"class":79,"line":4230},[77,57271,57272],{"class":83},"    .slider-footer",[77,57274,88],{"class":87},[77,57276,57277,57279,57281,57283],{"class":79,"line":4235},[77,57278,57212],{"class":94},[77,57280,98],{"class":87},[77,57282,1561],{"class":94},[77,57284,104],{"class":87},[77,57286,57287,57290,57292,57294],{"class":79,"line":4240},[77,57288,57289],{"class":94},"      left",[77,57291,98],{"class":87},[77,57293,1939],{"class":94},[77,57295,104],{"class":87},[77,57297,57298,57301,57303,57305],{"class":79,"line":4254},[77,57299,57300],{"class":94},"      bottom",[77,57302,98],{"class":87},[77,57304,1939],{"class":94},[77,57306,104],{"class":87},[77,57308,57309,57311,57313,57315,57317],{"class":79,"line":4259},[77,57310,57223],{"class":94},[77,57312,98],{"class":87},[77,57314,2925],{"class":94},[77,57316,2942],{"class":2123},[77,57318,104],{"class":87},[77,57320,57321,57323,57325,57327,57329],{"class":79,"line":5052},[77,57322,57237],{"class":94},[77,57324,98],{"class":87},[77,57326,3188],{"class":94},[77,57328,2942],{"class":2123},[77,57330,104],{"class":87},[77,57332,57333,57336,57338,57340],{"class":79,"line":5066},[77,57334,57335],{"class":94},"      background-color",[77,57337,98],{"class":87},[77,57339,174],{"class":94},[77,57341,104],{"class":87},[77,57343,57344],{"class":79,"line":5074},[77,57345,4662],{"class":87},[77,57347,57348],{"class":79,"line":5079},[77,57349,4875],{"emptyLinePlaceholder":2549},[77,57351,57352,57354,57356],{"class":79,"line":5085},[77,57353,57272],{"class":83},[77,57355,9300],{"class":158},[77,57357,88],{"class":87},[77,57359,57360,57362,57364,57366],{"class":79,"line":5091},[77,57361,57212],{"class":94},[77,57363,98],{"class":87},[77,57365,1561],{"class":94},[77,57367,104],{"class":87},[77,57369,57370,57373,57375,57377,57379],{"class":79,"line":5096},[77,57371,57372],{"class":94},"      font-size",[77,57374,98],{"class":87},[77,57376,3514],{"class":94},[77,57378,2124],{"class":2123},[77,57380,104],{"class":87},[77,57382,57383,57385,57387,57389,57391],{"class":79,"line":10422},[77,57384,57289],{"class":94},[77,57386,98],{"class":87},[77,57388,3313],{"class":94},[77,57390,2124],{"class":2123},[77,57392,104],{"class":87},[77,57394,57395,57398,57400,57402,57404],{"class":79,"line":10446},[77,57396,57397],{"class":94},"      top",[77,57399,98],{"class":87},[77,57401,2933],{"class":94},[77,57403,2124],{"class":2123},[77,57405,104],{"class":87},[77,57407,57408],{"class":79,"line":10451},[77,57409,4662],{"class":87},[77,57411,57412],{"class":79,"line":10457},[77,57413,4875],{"emptyLinePlaceholder":2549},[77,57415,57416,57419],{"class":79,"line":10484},[77,57417,57418],{"class":158},"    ul",[77,57420,88],{"class":87},[77,57422,57423,57425,57427,57429],{"class":79,"line":10489},[77,57424,57212],{"class":94},[77,57426,98],{"class":87},[77,57428,1561],{"class":94},[77,57430,104],{"class":87},[77,57432,57433,57435,57437,57439,57441],{"class":79,"line":10495},[77,57434,57397],{"class":94},[77,57436,98],{"class":87},[77,57438,3394],{"class":94},[77,57440,2124],{"class":2123},[77,57442,104],{"class":87},[77,57444,57445,57447,57449,57451,57453],{"class":79,"line":10507},[77,57446,57289],{"class":94},[77,57448,98],{"class":87},[77,57450,3313],{"class":94},[77,57452,2124],{"class":2123},[77,57454,104],{"class":87},[77,57456,57457,57460,57462,57464],{"class":79,"line":10519},[77,57458,57459],{"class":94},"      display",[77,57461,98],{"class":87},[77,57463,53940],{"class":94},[77,57465,104],{"class":87},[77,57467,57468,57471,57473,57475],{"class":79,"line":10531},[77,57469,57470],{"class":94},"      justify-content",[77,57472,98],{"class":87},[77,57474,54127],{"class":94},[77,57476,104],{"class":87},[77,57478,57479,57481,57483,57485],{"class":79,"line":12189},[77,57480,57212],{"class":94},[77,57482,98],{"class":87},[77,57484,1561],{"class":94},[77,57486,104],{"class":87},[77,57488,57489,57491,57493,57495,57497],{"class":79,"line":12214},[77,57490,57223],{"class":94},[77,57492,98],{"class":87},[77,57494,6467],{"class":94},[77,57496,2124],{"class":2123},[77,57498,104],{"class":87},[77,57500,57501,57503,57505,57507,57509],{"class":79,"line":12237},[77,57502,57237],{"class":94},[77,57504,98],{"class":87},[77,57506,3313],{"class":94},[77,57508,2124],{"class":2123},[77,57510,104],{"class":87},[77,57512,57513],{"class":79,"line":12261},[77,57514,4662],{"class":87},[77,57516,57517],{"class":79,"line":12266},[77,57518,4875],{"emptyLinePlaceholder":2549},[77,57520,57521,57523,57526],{"class":79,"line":12271},[77,57522,57418],{"class":158},[77,57524,57525],{"class":158}," li",[77,57527,88],{"class":87},[77,57529,57530,57532,57534,57536,57538],{"class":79,"line":12276},[77,57531,57223],{"class":94},[77,57533,98],{"class":87},[77,57535,3313],{"class":94},[77,57537,2124],{"class":2123},[77,57539,104],{"class":87},[77,57541,57542,57544,57546,57548,57550],{"class":79,"line":12285},[77,57543,57237],{"class":94},[77,57545,98],{"class":87},[77,57547,3313],{"class":94},[77,57549,2124],{"class":2123},[77,57551,104],{"class":87},[77,57553,57554,57556,57558,57561,57563,57565,57567,57569,57571,57573,57575,57578],{"class":79,"line":12290},[77,57555,57335],{"class":94},[77,57557,98],{"class":87},[77,57559,57560],{"class":94},"rgba",[77,57562,2622],{"class":87},[77,57564,1939],{"class":94},[77,57566,680],{"class":87},[77,57568,1939],{"class":94},[77,57570,680],{"class":87},[77,57572,1939],{"class":94},[77,57574,680],{"class":87},[77,57576,57577],{"class":94},".4",[77,57579,5194],{"class":87},[77,57581,57582,57585,57587,57589,57591],{"class":79,"line":12296},[77,57583,57584],{"class":94},"      border-radius",[77,57586,98],{"class":87},[77,57588,3059],{"class":94},[77,57590,2124],{"class":2123},[77,57592,104],{"class":87},[77,57594,57595],{"class":79,"line":12317},[77,57596,4662],{"class":87},[77,57598,57599],{"class":79,"line":12323},[77,57600,4875],{"emptyLinePlaceholder":2549},[77,57602,57603,57606],{"class":79,"line":12337},[77,57604,57605],{"class":83},"    .activate",[77,57607,88],{"class":87},[77,57609,57610,57612,57614,57617],{"class":79,"line":12343},[77,57611,57335],{"class":94},[77,57613,98],{"class":87},[77,57615,57616],{"class":94},"#f7f7f7",[77,57618,104],{"class":87},[77,57620,57621],{"class":79,"line":12370},[77,57622,4662],{"class":87},[77,57624,57625,57627,57629],{"class":79,"line":12379},[77,57626,54875],{"class":87},[77,57628,2520],{"class":158},[77,57630,291],{"class":87},[77,57632,57633,57635,57637],{"class":79,"line":12385},[77,57634,351],{"class":87},[77,57636,53798],{"class":158},[77,57638,291],{"class":87},[77,57640,57641],{"class":79,"line":12393},[77,57642,4875],{"emptyLinePlaceholder":2549},[77,57644,57645,57647,57649],{"class":79,"line":12398},[77,57646,260],{"class":87},[77,57648,54258],{"class":158},[77,57650,291],{"class":87},[77,57652,57653,57655,57657,57659,57661,57663],{"class":79,"line":19074},[77,57654,54602],{"class":87},[77,57656,331],{"class":158},[77,57658,334],{"class":83},[77,57660,268],{"class":87},[77,57662,55948],{"class":271},[77,57664,291],{"class":87},[77,57666,57667,57669,57671,57673,57675,57678],{"class":79,"line":19080},[77,57668,53805],{"class":87},[77,57670,331],{"class":158},[77,57672,334],{"class":83},[77,57674,268],{"class":87},[77,57676,57677],{"class":271},"\"slider-wrapper\"",[77,57679,291],{"class":87},[77,57681,57682,57685,57687,57689,57691,57694,57696,57698,57700],{"class":79,"line":19103},[77,57683,57684],{"class":87},"      \u003C",[77,57686,40],{"class":158},[77,57688,265],{"class":83},[77,57690,268],{"class":87},[77,57692,57693],{"class":271},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[77,57695,275],{"class":83},[77,57697,268],{"class":87},[77,57699,444],{"class":271},[77,57701,291],{"class":87},[77,57703,57704,57706,57708],{"class":79,"line":19109},[77,57705,54235],{"class":87},[77,57707,331],{"class":158},[77,57709,291],{"class":87},[77,57711,57712,57714,57716,57718,57720,57723],{"class":79,"line":19132},[77,57713,53805],{"class":87},[77,57715,331],{"class":158},[77,57717,334],{"class":83},[77,57719,268],{"class":87},[77,57721,57722],{"class":271},"\"slider-footer\"",[77,57724,291],{"class":87},[77,57726,57727,57729,57731,57734,57736],{"class":79,"line":19146},[77,57728,57684],{"class":87},[77,57730,24],{"class":158},[77,57732,57733],{"class":87},">对人类来说会不会太超前了?\u003C\u002F",[77,57735,24],{"class":158},[77,57737,291],{"class":87},[77,57739,57740,57742,57744],{"class":79,"line":19166},[77,57741,57684],{"class":87},[77,57743,51],{"class":158},[77,57745,291],{"class":87},[77,57747,57748,57751,57753,57755,57757,57760,57763,57765],{"class":79,"line":19172},[77,57749,57750],{"class":87},"        \u003C",[77,57752,54],{"class":158},[77,57754,334],{"class":83},[77,57756,268],{"class":87},[77,57758,57759],{"class":271},"\"activate\"",[77,57761,57762],{"class":87},">\u003C\u002F",[77,57764,54],{"class":158},[77,57766,291],{"class":87},[77,57768,57769,57771,57773,57775,57777],{"class":79,"line":19183},[77,57770,57750],{"class":87},[77,57772,54],{"class":158},[77,57774,57762],{"class":87},[77,57776,54],{"class":158},[77,57778,291],{"class":87},[77,57780,57781,57783,57785,57787,57789],{"class":79,"line":19206},[77,57782,57750],{"class":87},[77,57784,54],{"class":158},[77,57786,57762],{"class":87},[77,57788,54],{"class":158},[77,57790,291],{"class":87},[77,57792,57793,57795,57797,57799,57801],{"class":79,"line":19228},[77,57794,57750],{"class":87},[77,57796,54],{"class":158},[77,57798,57762],{"class":87},[77,57800,54],{"class":158},[77,57802,291],{"class":87},[77,57804,57805,57807,57809,57811,57813],{"class":79,"line":19233},[77,57806,57750],{"class":87},[77,57808,54],{"class":158},[77,57810,57762],{"class":87},[77,57812,54],{"class":158},[77,57814,291],{"class":87},[77,57816,57817,57819,57821,57823,57825],{"class":79,"line":19239},[77,57818,57750],{"class":87},[77,57820,54],{"class":158},[77,57822,57762],{"class":87},[77,57824,54],{"class":158},[77,57826,291],{"class":87},[77,57828,57829,57831,57833,57835,57837],{"class":79,"line":19253},[77,57830,57750],{"class":87},[77,57832,54],{"class":158},[77,57834,57762],{"class":87},[77,57836,54],{"class":158},[77,57838,291],{"class":87},[77,57840,57841,57843,57845,57847,57849],{"class":79,"line":19266},[77,57842,57750],{"class":87},[77,57844,54],{"class":158},[77,57846,57762],{"class":87},[77,57848,54],{"class":158},[77,57850,291],{"class":87},[77,57852,57853,57856,57858],{"class":79,"line":19271},[77,57854,57855],{"class":87},"      \u003C\u002F",[77,57857,51],{"class":158},[77,57859,291],{"class":87},[77,57861,57862,57864,57866],{"class":79,"line":19285},[77,57863,54235],{"class":87},[77,57865,331],{"class":158},[77,57867,291],{"class":87},[77,57869,57870,57872,57874],{"class":79,"line":19290},[77,57871,54875],{"class":87},[77,57873,331],{"class":158},[77,57875,291],{"class":87},[77,57877,57878,57880,57882],{"class":79,"line":19296},[77,57879,54602],{"class":87},[77,57881,54271],{"class":158},[77,57883,291],{"class":87},[77,57885,57886,57888,57891,57893],{"class":79,"line":19301},[77,57887,13694],{"class":2123},[77,57889,57890],{"class":94}," arrImage",[77,57892,16036],{"class":2123},[77,57894,57895],{"class":87}," [\n",[77,57897,57898,57901,57904,57907,57910,57913,57916],{"class":79,"line":19315},[77,57899,57900],{"class":87},"      { url: ",[77,57902,57903],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[77,57905,57906],{"class":87},", title: ",[77,57908,57909],{"class":271},"'对人类来说会不会太超前了?'",[77,57911,57912],{"class":87},", color: ",[77,57914,57915],{"class":271},"'rgba(100,67,68)'",[77,57917,57918],{"class":87}," },\n",[77,57920,57921,57923,57926,57928,57931,57933,57936],{"class":79,"line":19320},[77,57922,57900],{"class":87},[77,57924,57925],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[77,57927,57906],{"class":87},[77,57929,57930],{"class":271},"'开启剑与雪的黑暗传说!'",[77,57932,57912],{"class":87},[77,57934,57935],{"class":271},"'rgba(43,35,26)'",[77,57937,57918],{"class":87},[77,57939,57940,57942,57945,57947,57950,57952,57955],{"class":79,"line":19325},[77,57941,57900],{"class":87},[77,57943,57944],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[77,57946,57906],{"class":87},[77,57948,57949],{"class":271},"'真正的jo厨出现了!'",[77,57951,57912],{"class":87},[77,57953,57954],{"class":271},"'rgba(36,31,33)'",[77,57956,57918],{"class":87},[77,57958,57959,57961,57964,57966,57969,57971,57974],{"class":79,"line":19339},[77,57960,57900],{"class":87},[77,57962,57963],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[77,57965,57906],{"class":87},[77,57967,57968],{"class":271},"'李玉刚:让世界通过b站看到东方大国文化'",[77,57970,57912],{"class":87},[77,57972,57973],{"class":271},"'rgba(139,98,66)'",[77,57975,57918],{"class":87},[77,57977,57978,57980,57983,57985,57988,57990,57993],{"class":79,"line":19351},[77,57979,57900],{"class":87},[77,57981,57982],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[77,57984,57906],{"class":87},[77,57986,57987],{"class":271},"'快来分享你的寒假日常吧'",[77,57989,57912],{"class":87},[77,57991,57992],{"class":271},"'rgba(67,90,92)'",[77,57994,57918],{"class":87},[77,57996,57997,57999,58002,58004,58007,58009,58012],{"class":79,"line":19356},[77,57998,57900],{"class":87},[77,58000,58001],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[77,58003,57906],{"class":87},[77,58005,58006],{"class":271},"'哔哩哔哩小年YEAR'",[77,58008,57912],{"class":87},[77,58010,58011],{"class":271},"'rgba(166,131,143)'",[77,58013,57918],{"class":87},[77,58015,58016,58018,58021,58023,58026,58028,58031],{"class":79,"line":19369},[77,58017,57900],{"class":87},[77,58019,58020],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[77,58022,57906],{"class":87},[77,58024,58025],{"class":271},"'一站式解决你的电脑配置问题'",[77,58027,57912],{"class":87},[77,58029,58030],{"class":271},"'rgba(53,29,25)'",[77,58032,57918],{"class":87},[77,58034,58035,58037,58040,58042,58045,58047,58050],{"class":79,"line":19374},[77,58036,57900],{"class":87},[77,58038,58039],{"class":271},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[77,58041,57906],{"class":87},[77,58043,58044],{"class":271},"'谁不想和小猫咪贴贴呢?'",[77,58046,57912],{"class":87},[77,58048,58049],{"class":271},"'rgba(99,72,114)'",[77,58051,58052],{"class":87}," }\n",[77,58054,58055],{"class":79,"line":19379},[77,58056,55567],{"class":87},[77,58058,58059,58061,58064,58066,58068,58070,58072,58075],{"class":79,"line":19384},[77,58060,13694],{"class":2123},[77,58062,58063],{"class":94}," img",[77,58065,16036],{"class":2123},[77,58067,56850],{"class":87},[77,58069,56853],{"class":83},[77,58071,2622],{"class":87},[77,58073,58074],{"class":271},"'.slider-wrapper img'",[77,58076,2628],{"class":87},[77,58078,58079,58081,58083,58085,58087,58089,58091,58094],{"class":79,"line":19397},[77,58080,13694],{"class":2123},[77,58082,9300],{"class":94},[77,58084,16036],{"class":2123},[77,58086,56850],{"class":87},[77,58088,56853],{"class":83},[77,58090,2622],{"class":87},[77,58092,58093],{"class":271},"'.slider-footer p'",[77,58095,2628],{"class":87},[77,58097,58098,58100,58103,58105,58107,58109,58111,58114],{"class":79,"line":19402},[77,58099,13694],{"class":2123},[77,58101,58102],{"class":94}," color",[77,58104,16036],{"class":2123},[77,58106,56850],{"class":87},[77,58108,56853],{"class":83},[77,58110,2622],{"class":87},[77,58112,58113],{"class":271},"'.slider-footer'",[77,58115,2628],{"class":87},[77,58117,58118,58120,58123,58125,58127,58130,58132,58135],{"class":79,"line":35100},[77,58119,13694],{"class":2123},[77,58121,58122],{"class":94}," lis",[77,58124,16036],{"class":2123},[77,58126,56850],{"class":87},[77,58128,58129],{"class":83},"querySelectorAll",[77,58131,2622],{"class":87},[77,58133,58134],{"class":271},"'.slider-footer ul li'",[77,58136,2628],{"class":87},[77,58138,58139,58141,58143,58145],{"class":79,"line":35106},[77,58140,54677],{"class":2123},[77,58142,11911],{"class":87},[77,58144,268],{"class":2123},[77,58146,58147],{"class":94}," 1\n",[77,58149,58150,58152,58155,58157,58159,58161,58163],{"class":79,"line":35112},[77,58151,54677],{"class":2123},[77,58153,58154],{"class":87}," timer ",[77,58156,268],{"class":2123},[77,58158,56898],{"class":83},[77,58160,2622],{"class":87},[77,58162,56903],{"class":2123},[77,58164,56906],{"class":87},[77,58166,58167,58170,58172],{"class":79,"line":35118},[77,58168,58169],{"class":87},"      img.src ",[77,58171,268],{"class":2123},[77,58173,58174],{"class":87}," arrImage[i].url\n",[77,58176,58177,58180,58182],{"class":79,"line":35124},[77,58178,58179],{"class":87},"      p.innerHTML ",[77,58181,268],{"class":2123},[77,58183,58184],{"class":87}," arrImage[i].title\n",[77,58186,58187,58190,58192],{"class":79,"line":35135},[77,58188,58189],{"class":87},"      color.style.backgroundColor ",[77,58191,268],{"class":2123},[77,58193,58194],{"class":87}," arrImage[i].color\n",[77,58196,58197],{"class":79,"line":35141},[77,58198,58199],{"class":323},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[77,58201,58202],{"class":79,"line":35161},[77,58203,58204],{"class":323},"      \u002F\u002F li.classList.add('activate')\n",[77,58206,58207],{"class":79,"line":35167},[77,58208,58209],{"class":323},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[77,58211,58212],{"class":79,"line":35178},[77,58213,58214],{"class":323},"      \u002F\u002F lis[i].classList.remove('activate')\n",[77,58216,58217,58220,58222,58224,58227,58230,58233,58235,58238],{"class":79,"line":35184},[77,58218,58219],{"class":87},"      document.",[77,58221,56853],{"class":83},[77,58223,2622],{"class":87},[77,58225,58226],{"class":271},"'.activate'",[77,58228,58229],{"class":87},")?.classList.",[77,58231,58232],{"class":83},"toggle",[77,58234,2622],{"class":87},[77,58236,58237],{"class":271},"'activate'",[77,58239,2628],{"class":87},[77,58241,58242,58245,58247,58249,58251],{"class":79,"line":35190},[77,58243,58244],{"class":87},"      lis[i].classList.",[77,58246,7809],{"class":83},[77,58248,2622],{"class":87},[77,58250,58237],{"class":271},[77,58252,2628],{"class":87},[77,58254,58255],{"class":79,"line":35196},[77,58256,4875],{"emptyLinePlaceholder":2549},[77,58258,58259,58262,58264,58266,58268,58270,58272,58274,58277],{"class":79,"line":35202},[77,58260,58261],{"class":87},"      i ",[77,58263,268],{"class":2123},[77,58265,56937],{"class":87},[77,58267,3094],{"class":2123},[77,58269,27586],{"class":94},[77,58271,16186],{"class":87},[77,58273,2942],{"class":2123},[77,58275,58276],{"class":87}," arrImage.",[77,58278,58279],{"class":94},"length\n",[77,58281,58282],{"class":79,"line":35208},[77,58283,4875],{"emptyLinePlaceholder":2549},[77,58285,58286,58288,58290],{"class":79,"line":35214},[77,58287,56989],{"class":87},[77,58289,8885],{"class":94},[77,58291,2628],{"class":87},[77,58293,58294,58296,58298],{"class":79,"line":35220},[77,58295,54875],{"class":87},[77,58297,54271],{"class":158},[77,58299,291],{"class":87},[77,58301,58302,58304,58306],{"class":79,"line":35240},[77,58303,351],{"class":87},[77,58305,54258],{"class":158},[77,58307,291],{"class":87},[77,58309,58310],{"class":79,"line":35246},[77,58311,4875],{"emptyLinePlaceholder":2549},[77,58313,58314,58316,58318],{"class":79,"line":35262},[77,58315,351],{"class":87},[77,58317,53101],{"class":158},[77,58319,291],{"class":87},[24,58321,58322],{},[40,58323],{"alt":72,"src":58324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[24,58326,58327],{},"?.就是短路保护,确保输出正常进行",[24,58329,58330],{},"不要忘记取余%,有时候可以用",[24,58332,58333],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[139,58335,58336],{"start":91},[54,58337,58338],{},"法2",[67,58340,58342],{"className":53099,"code":58341,"language":53101,"meta":72,"style":72},"\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",[74,58343,58344,58354,58368,58372,58380,58394,58414,58426,58434,58440,58450,58460,58464,58468,58474,58484,58488,58492,58498,58508,58520,58532,58546,58550,58554,58560,58570,58580,58590,58602,58614,58624,58628,58632,58640,58650,58662,58674,58686,58690,58694,58700,58710,58722,58734,58744,58754,58764,58776,58788,58792,58796,58804,58816,58828,58854,58866,58870,58874,58880,58890,58894,58902,58910,58914,58922,58936,58950,58970,58978,58992,59004,59012,59030,59042,59054,59066,59078,59090,59102,59114,59122,59130,59138,59146,59157,59173,59189,59205,59221,59237,59253,59269,59285,59289,59294,59312,59330,59340,59345,59350,59361,59367,59382,59391,59395,59400,59409,59414,59423,59428,59433,59438,59461,59491,59495,59503,59507,59515,59523,59527],{"__ignoreMap":72},[77,58345,58346,58348,58350,58352],{"class":79,"line":80},[77,58347,53763],{"class":87},[77,58349,53766],{"class":158},[77,58351,53769],{"class":83},[77,58353,291],{"class":87},[77,58355,58356,58358,58360,58362,58364,58366],{"class":79,"line":91},[77,58357,260],{"class":87},[77,58359,53101],{"class":158},[77,58361,53780],{"class":83},[77,58363,268],{"class":87},[77,58365,53785],{"class":271},[77,58367,291],{"class":87},[77,58369,58370],{"class":79,"line":107},[77,58371,4875],{"emptyLinePlaceholder":2549},[77,58373,58374,58376,58378],{"class":79,"line":191},[77,58375,260],{"class":87},[77,58377,53798],{"class":158},[77,58379,291],{"class":87},[77,58381,58382,58384,58386,58388,58390,58392],{"class":79,"line":1543},[77,58383,54602],{"class":87},[77,58385,53808],{"class":158},[77,58387,53811],{"class":83},[77,58389,268],{"class":87},[77,58391,53816],{"class":271},[77,58393,291],{"class":87},[77,58395,58396,58398,58400,58402,58404,58406,58408,58410,58412],{"class":79,"line":1549},[77,58397,54602],{"class":87},[77,58399,53808],{"class":158},[77,58401,2495],{"class":83},[77,58403,268],{"class":87},[77,58405,53855],{"class":271},[77,58407,53835],{"class":83},[77,58409,268],{"class":87},[77,58411,53862],{"class":271},[77,58413,291],{"class":87},[77,58415,58416,58418,58420,58422,58424],{"class":79,"line":1566},[77,58417,54602],{"class":87},[77,58419,53871],{"class":158},[77,58421,53874],{"class":87},[77,58423,53871],{"class":158},[77,58425,291],{"class":87},[77,58427,58428,58430,58432],{"class":79,"line":1572},[77,58429,54602],{"class":87},[77,58431,2520],{"class":158},[77,58433,291],{"class":87},[77,58435,58436,58438],{"class":79,"line":1589},[77,58437,8878],{"class":158},[77,58439,88],{"class":87},[77,58441,58442,58444,58446,58448],{"class":79,"line":1595},[77,58443,57149],{"class":94},[77,58445,98],{"class":87},[77,58447,1939],{"class":94},[77,58449,104],{"class":87},[77,58451,58452,58454,58456,58458],{"class":79,"line":4088},[77,58453,57160],{"class":94},[77,58455,98],{"class":87},[77,58457,1939],{"class":94},[77,58459,104],{"class":87},[77,58461,58462],{"class":79,"line":4093},[77,58463,4662],{"class":87},[77,58465,58466],{"class":79,"line":4099},[77,58467,4875],{"emptyLinePlaceholder":2549},[77,58469,58470,58472],{"class":79,"line":4104},[77,58471,57179],{"class":158},[77,58473,88],{"class":87},[77,58475,58476,58478,58480,58482],{"class":79,"line":4118},[77,58477,57186],{"class":94},[77,58479,98],{"class":87},[77,58481,186],{"class":94},[77,58483,104],{"class":87},[77,58485,58486],{"class":79,"line":4123},[77,58487,4662],{"class":87},[77,58489,58490],{"class":79,"line":4129},[77,58491,4875],{"emptyLinePlaceholder":2549},[77,58493,58494,58496],{"class":79,"line":4150},[77,58495,57205],{"class":83},[77,58497,88],{"class":87},[77,58499,58500,58502,58504,58506],{"class":79,"line":4155},[77,58501,57212],{"class":94},[77,58503,98],{"class":87},[77,58505,1538],{"class":94},[77,58507,104],{"class":87},[77,58509,58510,58512,58514,58516,58518],{"class":79,"line":4169},[77,58511,57223],{"class":94},[77,58513,98],{"class":87},[77,58515,57228],{"class":94},[77,58517,2124],{"class":2123},[77,58519,104],{"class":87},[77,58521,58522,58524,58526,58528,58530],{"class":79,"line":4174},[77,58523,57237],{"class":94},[77,58525,98],{"class":87},[77,58527,4016],{"class":94},[77,58529,2124],{"class":2123},[77,58531,104],{"class":87},[77,58533,58534,58536,58538,58540,58542,58544],{"class":79,"line":4203},[77,58535,57160],{"class":94},[77,58537,98],{"class":87},[77,58539,2925],{"class":94},[77,58541,2124],{"class":2123},[77,58543,1942],{"class":94},[77,58545,104],{"class":87},[77,58547,58548],{"class":79,"line":4208},[77,58549,4662],{"class":87},[77,58551,58552],{"class":79,"line":4225},[77,58553,4875],{"emptyLinePlaceholder":2549},[77,58555,58556,58558],{"class":79,"line":4230},[77,58557,57272],{"class":83},[77,58559,88],{"class":87},[77,58561,58562,58564,58566,58568],{"class":79,"line":4235},[77,58563,57212],{"class":94},[77,58565,98],{"class":87},[77,58567,1561],{"class":94},[77,58569,104],{"class":87},[77,58571,58572,58574,58576,58578],{"class":79,"line":4240},[77,58573,57289],{"class":94},[77,58575,98],{"class":87},[77,58577,1939],{"class":94},[77,58579,104],{"class":87},[77,58581,58582,58584,58586,58588],{"class":79,"line":4254},[77,58583,57300],{"class":94},[77,58585,98],{"class":87},[77,58587,1939],{"class":94},[77,58589,104],{"class":87},[77,58591,58592,58594,58596,58598,58600],{"class":79,"line":4259},[77,58593,57223],{"class":94},[77,58595,98],{"class":87},[77,58597,2925],{"class":94},[77,58599,2942],{"class":2123},[77,58601,104],{"class":87},[77,58603,58604,58606,58608,58610,58612],{"class":79,"line":5052},[77,58605,57237],{"class":94},[77,58607,98],{"class":87},[77,58609,3188],{"class":94},[77,58611,2942],{"class":2123},[77,58613,104],{"class":87},[77,58615,58616,58618,58620,58622],{"class":79,"line":5066},[77,58617,57335],{"class":94},[77,58619,98],{"class":87},[77,58621,174],{"class":94},[77,58623,104],{"class":87},[77,58625,58626],{"class":79,"line":5074},[77,58627,4662],{"class":87},[77,58629,58630],{"class":79,"line":5079},[77,58631,4875],{"emptyLinePlaceholder":2549},[77,58633,58634,58636,58638],{"class":79,"line":5085},[77,58635,57272],{"class":83},[77,58637,9300],{"class":158},[77,58639,88],{"class":87},[77,58641,58642,58644,58646,58648],{"class":79,"line":5091},[77,58643,57212],{"class":94},[77,58645,98],{"class":87},[77,58647,1561],{"class":94},[77,58649,104],{"class":87},[77,58651,58652,58654,58656,58658,58660],{"class":79,"line":5096},[77,58653,57372],{"class":94},[77,58655,98],{"class":87},[77,58657,3514],{"class":94},[77,58659,2124],{"class":2123},[77,58661,104],{"class":87},[77,58663,58664,58666,58668,58670,58672],{"class":79,"line":10422},[77,58665,57289],{"class":94},[77,58667,98],{"class":87},[77,58669,3313],{"class":94},[77,58671,2124],{"class":2123},[77,58673,104],{"class":87},[77,58675,58676,58678,58680,58682,58684],{"class":79,"line":10446},[77,58677,57397],{"class":94},[77,58679,98],{"class":87},[77,58681,2933],{"class":94},[77,58683,2124],{"class":2123},[77,58685,104],{"class":87},[77,58687,58688],{"class":79,"line":10451},[77,58689,4662],{"class":87},[77,58691,58692],{"class":79,"line":10457},[77,58693,4875],{"emptyLinePlaceholder":2549},[77,58695,58696,58698],{"class":79,"line":10484},[77,58697,57418],{"class":158},[77,58699,88],{"class":87},[77,58701,58702,58704,58706,58708],{"class":79,"line":10489},[77,58703,57212],{"class":94},[77,58705,98],{"class":87},[77,58707,1561],{"class":94},[77,58709,104],{"class":87},[77,58711,58712,58714,58716,58718,58720],{"class":79,"line":10495},[77,58713,57397],{"class":94},[77,58715,98],{"class":87},[77,58717,3394],{"class":94},[77,58719,2124],{"class":2123},[77,58721,104],{"class":87},[77,58723,58724,58726,58728,58730,58732],{"class":79,"line":10507},[77,58725,57289],{"class":94},[77,58727,98],{"class":87},[77,58729,3313],{"class":94},[77,58731,2124],{"class":2123},[77,58733,104],{"class":87},[77,58735,58736,58738,58740,58742],{"class":79,"line":10519},[77,58737,57459],{"class":94},[77,58739,98],{"class":87},[77,58741,53940],{"class":94},[77,58743,104],{"class":87},[77,58745,58746,58748,58750,58752],{"class":79,"line":10531},[77,58747,57470],{"class":94},[77,58749,98],{"class":87},[77,58751,54127],{"class":94},[77,58753,104],{"class":87},[77,58755,58756,58758,58760,58762],{"class":79,"line":12189},[77,58757,57212],{"class":94},[77,58759,98],{"class":87},[77,58761,1561],{"class":94},[77,58763,104],{"class":87},[77,58765,58766,58768,58770,58772,58774],{"class":79,"line":12214},[77,58767,57223],{"class":94},[77,58769,98],{"class":87},[77,58771,6467],{"class":94},[77,58773,2124],{"class":2123},[77,58775,104],{"class":87},[77,58777,58778,58780,58782,58784,58786],{"class":79,"line":12237},[77,58779,57237],{"class":94},[77,58781,98],{"class":87},[77,58783,3313],{"class":94},[77,58785,2124],{"class":2123},[77,58787,104],{"class":87},[77,58789,58790],{"class":79,"line":12261},[77,58791,4662],{"class":87},[77,58793,58794],{"class":79,"line":12266},[77,58795,4875],{"emptyLinePlaceholder":2549},[77,58797,58798,58800,58802],{"class":79,"line":12271},[77,58799,57418],{"class":158},[77,58801,57525],{"class":158},[77,58803,88],{"class":87},[77,58805,58806,58808,58810,58812,58814],{"class":79,"line":12276},[77,58807,57223],{"class":94},[77,58809,98],{"class":87},[77,58811,3313],{"class":94},[77,58813,2124],{"class":2123},[77,58815,104],{"class":87},[77,58817,58818,58820,58822,58824,58826],{"class":79,"line":12285},[77,58819,57237],{"class":94},[77,58821,98],{"class":87},[77,58823,3313],{"class":94},[77,58825,2124],{"class":2123},[77,58827,104],{"class":87},[77,58829,58830,58832,58834,58836,58838,58840,58842,58844,58846,58848,58850,58852],{"class":79,"line":12290},[77,58831,57335],{"class":94},[77,58833,98],{"class":87},[77,58835,57560],{"class":94},[77,58837,2622],{"class":87},[77,58839,1939],{"class":94},[77,58841,680],{"class":87},[77,58843,1939],{"class":94},[77,58845,680],{"class":87},[77,58847,1939],{"class":94},[77,58849,680],{"class":87},[77,58851,57577],{"class":94},[77,58853,5194],{"class":87},[77,58855,58856,58858,58860,58862,58864],{"class":79,"line":12296},[77,58857,57584],{"class":94},[77,58859,98],{"class":87},[77,58861,3059],{"class":94},[77,58863,2124],{"class":2123},[77,58865,104],{"class":87},[77,58867,58868],{"class":79,"line":12317},[77,58869,4662],{"class":87},[77,58871,58872],{"class":79,"line":12323},[77,58873,4875],{"emptyLinePlaceholder":2549},[77,58875,58876,58878],{"class":79,"line":12337},[77,58877,57605],{"class":83},[77,58879,88],{"class":87},[77,58881,58882,58884,58886,58888],{"class":79,"line":12343},[77,58883,57335],{"class":94},[77,58885,98],{"class":87},[77,58887,57616],{"class":94},[77,58889,104],{"class":87},[77,58891,58892],{"class":79,"line":12370},[77,58893,4662],{"class":87},[77,58895,58896,58898,58900],{"class":79,"line":12379},[77,58897,54875],{"class":87},[77,58899,2520],{"class":158},[77,58901,291],{"class":87},[77,58903,58904,58906,58908],{"class":79,"line":12385},[77,58905,351],{"class":87},[77,58907,53798],{"class":158},[77,58909,291],{"class":87},[77,58911,58912],{"class":79,"line":12393},[77,58913,4875],{"emptyLinePlaceholder":2549},[77,58915,58916,58918,58920],{"class":79,"line":12398},[77,58917,260],{"class":87},[77,58919,54258],{"class":158},[77,58921,291],{"class":87},[77,58923,58924,58926,58928,58930,58932,58934],{"class":79,"line":19074},[77,58925,54602],{"class":87},[77,58927,331],{"class":158},[77,58929,334],{"class":83},[77,58931,268],{"class":87},[77,58933,55948],{"class":271},[77,58935,291],{"class":87},[77,58937,58938,58940,58942,58944,58946,58948],{"class":79,"line":19080},[77,58939,53805],{"class":87},[77,58941,331],{"class":158},[77,58943,334],{"class":83},[77,58945,268],{"class":87},[77,58947,57677],{"class":271},[77,58949,291],{"class":87},[77,58951,58952,58954,58956,58958,58960,58962,58964,58966,58968],{"class":79,"line":19103},[77,58953,57684],{"class":87},[77,58955,40],{"class":158},[77,58957,265],{"class":83},[77,58959,268],{"class":87},[77,58961,57693],{"class":271},[77,58963,275],{"class":83},[77,58965,268],{"class":87},[77,58967,444],{"class":271},[77,58969,291],{"class":87},[77,58971,58972,58974,58976],{"class":79,"line":19109},[77,58973,54235],{"class":87},[77,58975,331],{"class":158},[77,58977,291],{"class":87},[77,58979,58980,58982,58984,58986,58988,58990],{"class":79,"line":19132},[77,58981,53805],{"class":87},[77,58983,331],{"class":158},[77,58985,334],{"class":83},[77,58987,268],{"class":87},[77,58989,57722],{"class":271},[77,58991,291],{"class":87},[77,58993,58994,58996,58998,59000,59002],{"class":79,"line":19146},[77,58995,57684],{"class":87},[77,58997,24],{"class":158},[77,58999,57733],{"class":87},[77,59001,24],{"class":158},[77,59003,291],{"class":87},[77,59005,59006,59008,59010],{"class":79,"line":19166},[77,59007,57684],{"class":87},[77,59009,51],{"class":158},[77,59011,291],{"class":87},[77,59013,59014,59016,59018,59020,59022,59024,59026,59028],{"class":79,"line":19172},[77,59015,57750],{"class":87},[77,59017,54],{"class":158},[77,59019,334],{"class":83},[77,59021,268],{"class":87},[77,59023,57759],{"class":271},[77,59025,57762],{"class":87},[77,59027,54],{"class":158},[77,59029,291],{"class":87},[77,59031,59032,59034,59036,59038,59040],{"class":79,"line":19183},[77,59033,57750],{"class":87},[77,59035,54],{"class":158},[77,59037,57762],{"class":87},[77,59039,54],{"class":158},[77,59041,291],{"class":87},[77,59043,59044,59046,59048,59050,59052],{"class":79,"line":19206},[77,59045,57750],{"class":87},[77,59047,54],{"class":158},[77,59049,57762],{"class":87},[77,59051,54],{"class":158},[77,59053,291],{"class":87},[77,59055,59056,59058,59060,59062,59064],{"class":79,"line":19228},[77,59057,57750],{"class":87},[77,59059,54],{"class":158},[77,59061,57762],{"class":87},[77,59063,54],{"class":158},[77,59065,291],{"class":87},[77,59067,59068,59070,59072,59074,59076],{"class":79,"line":19233},[77,59069,57750],{"class":87},[77,59071,54],{"class":158},[77,59073,57762],{"class":87},[77,59075,54],{"class":158},[77,59077,291],{"class":87},[77,59079,59080,59082,59084,59086,59088],{"class":79,"line":19239},[77,59081,57750],{"class":87},[77,59083,54],{"class":158},[77,59085,57762],{"class":87},[77,59087,54],{"class":158},[77,59089,291],{"class":87},[77,59091,59092,59094,59096,59098,59100],{"class":79,"line":19253},[77,59093,57750],{"class":87},[77,59095,54],{"class":158},[77,59097,57762],{"class":87},[77,59099,54],{"class":158},[77,59101,291],{"class":87},[77,59103,59104,59106,59108,59110,59112],{"class":79,"line":19266},[77,59105,57750],{"class":87},[77,59107,54],{"class":158},[77,59109,57762],{"class":87},[77,59111,54],{"class":158},[77,59113,291],{"class":87},[77,59115,59116,59118,59120],{"class":79,"line":19271},[77,59117,57855],{"class":87},[77,59119,51],{"class":158},[77,59121,291],{"class":87},[77,59123,59124,59126,59128],{"class":79,"line":19285},[77,59125,54235],{"class":87},[77,59127,331],{"class":158},[77,59129,291],{"class":87},[77,59131,59132,59134,59136],{"class":79,"line":19290},[77,59133,54875],{"class":87},[77,59135,331],{"class":158},[77,59137,291],{"class":87},[77,59139,59140,59142,59144],{"class":79,"line":19296},[77,59141,54602],{"class":87},[77,59143,54271],{"class":158},[77,59145,291],{"class":87},[77,59147,59148,59150,59153,59155],{"class":79,"line":19301},[77,59149,13694],{"class":2123},[77,59151,59152],{"class":94}," sliderData",[77,59154,16036],{"class":2123},[77,59156,57895],{"class":87},[77,59158,59159,59161,59163,59165,59167,59169,59171],{"class":79,"line":19315},[77,59160,57900],{"class":87},[77,59162,57903],{"class":271},[77,59164,57906],{"class":87},[77,59166,57909],{"class":271},[77,59168,57912],{"class":87},[77,59170,57915],{"class":271},[77,59172,57918],{"class":87},[77,59174,59175,59177,59179,59181,59183,59185,59187],{"class":79,"line":19320},[77,59176,57900],{"class":87},[77,59178,57925],{"class":271},[77,59180,57906],{"class":87},[77,59182,57930],{"class":271},[77,59184,57912],{"class":87},[77,59186,57935],{"class":271},[77,59188,57918],{"class":87},[77,59190,59191,59193,59195,59197,59199,59201,59203],{"class":79,"line":19325},[77,59192,57900],{"class":87},[77,59194,57944],{"class":271},[77,59196,57906],{"class":87},[77,59198,57949],{"class":271},[77,59200,57912],{"class":87},[77,59202,57954],{"class":271},[77,59204,57918],{"class":87},[77,59206,59207,59209,59211,59213,59215,59217,59219],{"class":79,"line":19339},[77,59208,57900],{"class":87},[77,59210,57963],{"class":271},[77,59212,57906],{"class":87},[77,59214,57968],{"class":271},[77,59216,57912],{"class":87},[77,59218,57973],{"class":271},[77,59220,57918],{"class":87},[77,59222,59223,59225,59227,59229,59231,59233,59235],{"class":79,"line":19351},[77,59224,57900],{"class":87},[77,59226,57982],{"class":271},[77,59228,57906],{"class":87},[77,59230,57987],{"class":271},[77,59232,57912],{"class":87},[77,59234,57992],{"class":271},[77,59236,57918],{"class":87},[77,59238,59239,59241,59243,59245,59247,59249,59251],{"class":79,"line":19356},[77,59240,57900],{"class":87},[77,59242,58001],{"class":271},[77,59244,57906],{"class":87},[77,59246,58006],{"class":271},[77,59248,57912],{"class":87},[77,59250,58011],{"class":271},[77,59252,57918],{"class":87},[77,59254,59255,59257,59259,59261,59263,59265,59267],{"class":79,"line":19369},[77,59256,57900],{"class":87},[77,59258,58020],{"class":271},[77,59260,57906],{"class":87},[77,59262,58025],{"class":271},[77,59264,57912],{"class":87},[77,59266,58030],{"class":271},[77,59268,57918],{"class":87},[77,59270,59271,59273,59275,59277,59279,59281,59283],{"class":79,"line":19374},[77,59272,57900],{"class":87},[77,59274,58039],{"class":271},[77,59276,57906],{"class":87},[77,59278,58044],{"class":271},[77,59280,57912],{"class":87},[77,59282,58049],{"class":271},[77,59284,58052],{"class":87},[77,59286,59287],{"class":79,"line":19379},[77,59288,55567],{"class":87},[77,59290,59291],{"class":79,"line":19384},[77,59292,59293],{"class":323},"    \u002F\u002F 1.获取元素\n",[77,59295,59296,59298,59300,59302,59304,59306,59308,59310],{"class":79,"line":19397},[77,59297,13694],{"class":2123},[77,59299,58063],{"class":94},[77,59301,16036],{"class":2123},[77,59303,56850],{"class":87},[77,59305,56853],{"class":83},[77,59307,2622],{"class":87},[77,59309,58074],{"class":271},[77,59311,2628],{"class":87},[77,59313,59314,59316,59318,59320,59322,59324,59326,59328],{"class":79,"line":19402},[77,59315,13694],{"class":2123},[77,59317,9300],{"class":94},[77,59319,16036],{"class":2123},[77,59321,56850],{"class":87},[77,59323,56853],{"class":83},[77,59325,2622],{"class":87},[77,59327,58093],{"class":271},[77,59329,2628],{"class":87},[77,59331,59332,59334,59336,59338],{"class":79,"line":35100},[77,59333,54677],{"class":2123},[77,59335,11911],{"class":87},[77,59337,268],{"class":2123},[77,59339,49799],{"class":94},[77,59341,59342],{"class":79,"line":35106},[77,59343,59344],{"class":323},"    \u002F\u002F 2.开启定时器\n",[77,59346,59347],{"class":79,"line":35112},[77,59348,59349],{"class":323},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[77,59351,59352,59355,59357,59359],{"class":79,"line":35118},[77,59353,59354],{"class":83},"    setInterval",[77,59356,2622],{"class":87},[77,59358,56903],{"class":2123},[77,59360,56906],{"class":87},[77,59362,59363,59365],{"class":79,"line":35124},[77,59364,56911],{"class":87},[77,59366,5177],{"class":2123},[77,59368,59369,59371,59373,59375,59378,59380],{"class":79,"line":35135},[77,59370,56934],{"class":2123},[77,59372,56937],{"class":87},[77,59374,4186],{"class":2123},[77,59376,59377],{"class":87}," sliderData.",[77,59379,54426],{"class":94},[77,59381,14914],{"class":87},[77,59383,59384,59387,59389],{"class":79,"line":35141},[77,59385,59386],{"class":87},"        i ",[77,59388,268],{"class":2123},[77,59390,49799],{"class":94},[77,59392,59393],{"class":79,"line":35161},[77,59394,54856],{"class":87},[77,59396,59397],{"class":79,"line":35167},[77,59398,59399],{"class":323},"      \u002F\u002F 更换图片路径\n",[77,59401,59402,59404,59406],{"class":79,"line":35178},[77,59403,58169],{"class":87},[77,59405,268],{"class":2123},[77,59407,59408],{"class":87}," sliderData[i].url\n",[77,59410,59411],{"class":79,"line":35184},[77,59412,59413],{"class":323},"      \u002F\u002F 把文字写到p里面\n",[77,59415,59416,59418,59420],{"class":79,"line":35190},[77,59417,58179],{"class":87},[77,59419,268],{"class":2123},[77,59421,59422],{"class":87}," sliderData[i].title\n",[77,59424,59425],{"class":79,"line":35196},[77,59426,59427],{"class":323},"      \u002F\u002F 小圆点\n",[77,59429,59430],{"class":79,"line":35202},[77,59431,59432],{"class":323},"      \u002F\u002F 先删除以前的active\n",[77,59434,59435],{"class":79,"line":35208},[77,59436,59437],{"class":323},"      \u002F\u002F 只让当前li添加active\n",[77,59439,59440,59442,59444,59446,59449,59452,59455,59457,59459],{"class":79,"line":35214},[77,59441,58219],{"class":87},[77,59443,56853],{"class":83},[77,59445,2622],{"class":87},[77,59447,59448],{"class":271},"'.slider-footer .activate'",[77,59450,59451],{"class":87},").classList.",[77,59453,59454],{"class":83},"remove",[77,59456,2622],{"class":87},[77,59458,58237],{"class":271},[77,59460,2628],{"class":87},[77,59462,59463,59465,59467,59469,59472,59474,59476,59478,59481,59483,59485,59487,59489],{"class":79,"line":35220},[77,59464,58219],{"class":87},[77,59466,56853],{"class":83},[77,59468,2622],{"class":87},[77,59470,59471],{"class":271},"`.slider-footer ul li:nth-child(${",[77,59473,646],{"class":87},[77,59475,48032],{"class":2123},[77,59477,27586],{"class":94},[77,59479,59480],{"class":271},"})`",[77,59482,59451],{"class":87},[77,59484,7809],{"class":83},[77,59486,2622],{"class":87},[77,59488,58237],{"class":271},[77,59490,2628],{"class":87},[77,59492,59493],{"class":79,"line":35240},[77,59494,4875],{"emptyLinePlaceholder":2549},[77,59496,59497,59499,59501],{"class":79,"line":35246},[77,59498,56989],{"class":87},[77,59500,8885],{"class":94},[77,59502,2628],{"class":87},[77,59504,59505],{"class":79,"line":35262},[77,59506,4875],{"emptyLinePlaceholder":2549},[77,59508,59509,59511,59513],{"class":79,"line":35268},[77,59510,54875],{"class":87},[77,59512,54271],{"class":158},[77,59514,291],{"class":87},[77,59516,59517,59519,59521],{"class":79,"line":35282},[77,59518,351],{"class":87},[77,59520,54258],{"class":158},[77,59522,291],{"class":87},[77,59524,59525],{"class":79,"line":35288},[77,59526,4875],{"emptyLinePlaceholder":2549},[77,59528,59529,59531,59533],{"class":79,"line":35303},[77,59530,351],{"class":87},[77,59532,53101],{"class":158},[77,59534,291],{"class":87},[19,59536,59538],{"id":59537},"_317-重要知识点","3.1.7 重要知识点",[24,59540,59541,59542],{},"浏览器在渲染文本时， ",[27,59543,59544],{},"没有空格或换行符就没有“断行点”",[24,59546,59547],{},[40,59548],{"alt":72,"src":59549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[24,59551,59552],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[24,59554,59555],{},[40,59556],{"alt":72,"src":59557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[24,59559,59560],{},[40,59561],{"alt":72,"src":59562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59564,59566],{"id":59565},"_32-dom事件基础","3.2 DOM事件基础",[19,59568,59570],{"id":59569},"_321-事件监听","3.2.1 事件监听",[24,59572,59573],{},[40,59574],{"alt":72,"src":59575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[24,59577,59578],{},"事件监听有响应的发生",[24,59580,59581],{},[40,59582],{"alt":72,"src":59583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[24,59585,59586],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[24,59588,59589],{},"对于有名函数,要执行的函数名后边不要加()",[19,59591,59593],{"id":59592},"_322-随机点名案例","3.2.2 随机点名案例",[67,59595,59597],{"className":53099,"code":59596,"language":53101,"meta":72,"style":72},"\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",[74,59598,59599,59609,59623,59627,59635,59649,59669,59681,59689,59695,59705,59715,59719,59723,59730,59741,59745,59749,59755,59767,59781,59791,59803,59816,59820,59824,59831,59835,59848,59860,59872,59876,59880,59884,59891,59901,59905,59909,59918,59930,59942,59957,59961,59969,59977,59981,59989,60002,60016,60029,60049,60057,60072,60092,60112,60120,60124,60132,60137,60173,60193,60198,60217,60222,60233,60238,60249,60254,60273,60288,60293,60319,60329,60338,60343,60359,60364,60369,60374,60389,60393,60397,60402,60421,60438,60446,60451,60466,60470,60474,60482,60490,60494],{"__ignoreMap":72},[77,59600,59601,59603,59605,59607],{"class":79,"line":80},[77,59602,53763],{"class":87},[77,59604,53766],{"class":158},[77,59606,53769],{"class":83},[77,59608,291],{"class":87},[77,59610,59611,59613,59615,59617,59619,59621],{"class":79,"line":91},[77,59612,260],{"class":87},[77,59614,53101],{"class":158},[77,59616,53780],{"class":83},[77,59618,268],{"class":87},[77,59620,53785],{"class":271},[77,59622,291],{"class":87},[77,59624,59625],{"class":79,"line":107},[77,59626,4875],{"emptyLinePlaceholder":2549},[77,59628,59629,59631,59633],{"class":79,"line":191},[77,59630,260],{"class":87},[77,59632,53798],{"class":158},[77,59634,291],{"class":87},[77,59636,59637,59639,59641,59643,59645,59647],{"class":79,"line":1543},[77,59638,54602],{"class":87},[77,59640,53808],{"class":158},[77,59642,53811],{"class":83},[77,59644,268],{"class":87},[77,59646,53816],{"class":271},[77,59648,291],{"class":87},[77,59650,59651,59653,59655,59657,59659,59661,59663,59665,59667],{"class":79,"line":1549},[77,59652,54602],{"class":87},[77,59654,53808],{"class":158},[77,59656,2495],{"class":83},[77,59658,268],{"class":87},[77,59660,53855],{"class":271},[77,59662,53835],{"class":83},[77,59664,268],{"class":87},[77,59666,53862],{"class":271},[77,59668,291],{"class":87},[77,59670,59671,59673,59675,59677,59679],{"class":79,"line":1566},[77,59672,54602],{"class":87},[77,59674,53871],{"class":158},[77,59676,53874],{"class":87},[77,59678,53871],{"class":158},[77,59680,291],{"class":87},[77,59682,59683,59685,59687],{"class":79,"line":1572},[77,59684,54602],{"class":87},[77,59686,2520],{"class":158},[77,59688,291],{"class":87},[77,59690,59691,59693],{"class":79,"line":1589},[77,59692,8878],{"class":158},[77,59694,88],{"class":87},[77,59696,59697,59699,59701,59703],{"class":79,"line":1595},[77,59698,57160],{"class":94},[77,59700,98],{"class":87},[77,59702,1939],{"class":94},[77,59704,104],{"class":87},[77,59706,59707,59709,59711,59713],{"class":79,"line":4088},[77,59708,57149],{"class":94},[77,59710,98],{"class":87},[77,59712,1939],{"class":94},[77,59714,104],{"class":87},[77,59716,59717],{"class":79,"line":4093},[77,59718,4662],{"class":87},[77,59720,59721],{"class":79,"line":4099},[77,59722,4875],{"emptyLinePlaceholder":2549},[77,59724,59725,59728],{"class":79,"line":4104},[77,59726,59727],{"class":158},"    h2",[77,59729,88],{"class":87},[77,59731,59732,59735,59737,59739],{"class":79,"line":4118},[77,59733,59734],{"class":94},"      text-align",[77,59736,98],{"class":87},[77,59738,54052],{"class":94},[77,59740,104],{"class":87},[77,59742,59743],{"class":79,"line":4123},[77,59744,4662],{"class":87},[77,59746,59747],{"class":79,"line":4129},[77,59748,4875],{"emptyLinePlaceholder":2549},[77,59750,59751,59753],{"class":79,"line":4150},[77,59752,57205],{"class":83},[77,59754,88],{"class":87},[77,59756,59757,59759,59761,59763,59765],{"class":79,"line":4155},[77,59758,57223],{"class":94},[77,59760,98],{"class":87},[77,59762,4016],{"class":94},[77,59764,2124],{"class":2123},[77,59766,104],{"class":87},[77,59768,59769,59771,59773,59775,59777,59779],{"class":79,"line":4169},[77,59770,57160],{"class":94},[77,59772,98],{"class":87},[77,59774,3269],{"class":94},[77,59776,2124],{"class":2123},[77,59778,1942],{"class":94},[77,59780,104],{"class":87},[77,59782,59783,59785,59787,59789],{"class":79,"line":4174},[77,59784,57459],{"class":94},[77,59786,98],{"class":87},[77,59788,53940],{"class":94},[77,59790,104],{"class":87},[77,59792,59793,59795,59797,59799,59801],{"class":79,"line":4203},[77,59794,57372],{"class":94},[77,59796,98],{"class":87},[77,59798,3438],{"class":94},[77,59800,2124],{"class":2123},[77,59802,104],{"class":87},[77,59804,59805,59808,59810,59812,59814],{"class":79,"line":4208},[77,59806,59807],{"class":94},"      line-height",[77,59809,98],{"class":87},[77,59811,3015],{"class":94},[77,59813,2124],{"class":2123},[77,59815,104],{"class":87},[77,59817,59818],{"class":79,"line":4225},[77,59819,4662],{"class":87},[77,59821,59822],{"class":79,"line":4230},[77,59823,4875],{"emptyLinePlaceholder":2549},[77,59825,59826,59829],{"class":79,"line":4235},[77,59827,59828],{"class":83},"    .qs",[77,59830,88],{"class":87},[77,59832,59833],{"class":79,"line":4240},[77,59834,4875],{"emptyLinePlaceholder":2549},[77,59836,59837,59839,59841,59844,59846],{"class":79,"line":4254},[77,59838,57223],{"class":94},[77,59840,98],{"class":87},[77,59842,59843],{"class":94},"450",[77,59845,2124],{"class":2123},[77,59847,104],{"class":87},[77,59849,59850,59852,59854,59856,59858],{"class":79,"line":4259},[77,59851,57237],{"class":94},[77,59853,98],{"class":87},[77,59855,3015],{"class":94},[77,59857,2124],{"class":2123},[77,59859,104],{"class":87},[77,59861,59862,59865,59867,59870],{"class":79,"line":5052},[77,59863,59864],{"class":94},"      color",[77,59866,98],{"class":87},[77,59868,59869],{"class":94},"red",[77,59871,104],{"class":87},[77,59873,59874],{"class":79,"line":5066},[77,59875,4875],{"emptyLinePlaceholder":2549},[77,59877,59878],{"class":79,"line":5074},[77,59879,4662],{"class":87},[77,59881,59882],{"class":79,"line":5079},[77,59883,4875],{"emptyLinePlaceholder":2549},[77,59885,59886,59889],{"class":79,"line":5085},[77,59887,59888],{"class":83},"    .btns",[77,59890,88],{"class":87},[77,59892,59893,59895,59897,59899],{"class":79,"line":5091},[77,59894,59734],{"class":94},[77,59896,98],{"class":87},[77,59898,54052],{"class":94},[77,59900,104],{"class":87},[77,59902,59903],{"class":79,"line":5096},[77,59904,4662],{"class":87},[77,59906,59907],{"class":79,"line":10422},[77,59908,4875],{"emptyLinePlaceholder":2549},[77,59910,59911,59913,59916],{"class":79,"line":10446},[77,59912,59888],{"class":83},[77,59914,59915],{"class":158}," button",[77,59917,88],{"class":87},[77,59919,59920,59922,59924,59926,59928],{"class":79,"line":10451},[77,59921,57223],{"class":94},[77,59923,98],{"class":87},[77,59925,3430],{"class":94},[77,59927,2124],{"class":2123},[77,59929,104],{"class":87},[77,59931,59932,59934,59936,59938,59940],{"class":79,"line":10457},[77,59933,57237],{"class":94},[77,59935,98],{"class":87},[77,59937,2887],{"class":94},[77,59939,2124],{"class":2123},[77,59941,104],{"class":87},[77,59943,59944,59946,59948,59950,59953,59955],{"class":79,"line":10484},[77,59945,57160],{"class":94},[77,59947,98],{"class":87},[77,59949,1939],{"class":94},[77,59951,59952],{"class":94}," 50",[77,59954,2124],{"class":2123},[77,59956,104],{"class":87},[77,59958,59959],{"class":79,"line":10489},[77,59960,4662],{"class":87},[77,59962,59963,59965,59967],{"class":79,"line":10495},[77,59964,54875],{"class":87},[77,59966,2520],{"class":158},[77,59968,291],{"class":87},[77,59970,59971,59973,59975],{"class":79,"line":10507},[77,59972,351],{"class":87},[77,59974,53798],{"class":158},[77,59976,291],{"class":87},[77,59978,59979],{"class":79,"line":10519},[77,59980,4875],{"emptyLinePlaceholder":2549},[77,59982,59983,59985,59987],{"class":79,"line":10531},[77,59984,260],{"class":87},[77,59986,54258],{"class":158},[77,59988,291],{"class":87},[77,59990,59991,59993,59995,59998,60000],{"class":79,"line":12189},[77,59992,54602],{"class":87},[77,59994,14],{"class":158},[77,59996,59997],{"class":87},">随机点名\u003C\u002F",[77,59999,14],{"class":158},[77,60001,291],{"class":87},[77,60003,60004,60006,60008,60010,60012,60014],{"class":79,"line":12214},[77,60005,54602],{"class":87},[77,60007,331],{"class":158},[77,60009,334],{"class":83},[77,60011,268],{"class":87},[77,60013,55948],{"class":271},[77,60015,291],{"class":87},[77,60017,60018,60020,60022,60025,60027],{"class":79,"line":12237},[77,60019,53805],{"class":87},[77,60021,77],{"class":158},[77,60023,60024],{"class":87},">名字是：\u003C\u002F",[77,60026,77],{"class":158},[77,60028,291],{"class":87},[77,60030,60031,60033,60035,60037,60039,60042,60045,60047],{"class":79,"line":12261},[77,60032,53805],{"class":87},[77,60034,331],{"class":158},[77,60036,334],{"class":83},[77,60038,268],{"class":87},[77,60040,60041],{"class":271},"\"qs\"",[77,60043,60044],{"class":87},">这里显示姓名\u003C\u002F",[77,60046,331],{"class":158},[77,60048,291],{"class":87},[77,60050,60051,60053,60055],{"class":79,"line":12266},[77,60052,54875],{"class":87},[77,60054,331],{"class":158},[77,60056,291],{"class":87},[77,60058,60059,60061,60063,60065,60067,60070],{"class":79,"line":12271},[77,60060,54602],{"class":87},[77,60062,331],{"class":158},[77,60064,334],{"class":83},[77,60066,268],{"class":87},[77,60068,60069],{"class":271},"\"btns\"",[77,60071,291],{"class":87},[77,60073,60074,60076,60078,60080,60082,60085,60088,60090],{"class":79,"line":12276},[77,60075,53805],{"class":87},[77,60077,56341],{"class":158},[77,60079,334],{"class":83},[77,60081,268],{"class":87},[77,60083,60084],{"class":271},"\"start\"",[77,60086,60087],{"class":87},">开始\u003C\u002F",[77,60089,56341],{"class":158},[77,60091,291],{"class":87},[77,60093,60094,60096,60098,60100,60102,60105,60108,60110],{"class":79,"line":12285},[77,60095,53805],{"class":87},[77,60097,56341],{"class":158},[77,60099,334],{"class":83},[77,60101,268],{"class":87},[77,60103,60104],{"class":271},"\"end\"",[77,60106,60107],{"class":87},">结束\u003C\u002F",[77,60109,56341],{"class":158},[77,60111,291],{"class":87},[77,60113,60114,60116,60118],{"class":79,"line":12290},[77,60115,54875],{"class":87},[77,60117,331],{"class":158},[77,60119,291],{"class":87},[77,60121,60122],{"class":79,"line":12296},[77,60123,4875],{"emptyLinePlaceholder":2549},[77,60125,60126,60128,60130],{"class":79,"line":12317},[77,60127,54602],{"class":87},[77,60129,54271],{"class":158},[77,60131,291],{"class":87},[77,60133,60134],{"class":79,"line":12323},[77,60135,60136],{"class":323},"    \u002F\u002F 数据数组\n",[77,60138,60139,60141,60144,60146,60148,60151,60153,60156,60158,60161,60163,60166,60168,60171],{"class":79,"line":12337},[77,60140,13694],{"class":2123},[77,60142,60143],{"class":94}," arr",[77,60145,16036],{"class":2123},[77,60147,54684],{"class":87},[77,60149,60150],{"class":271},"'马超'",[77,60152,680],{"class":87},[77,60154,60155],{"class":271},"'黄忠'",[77,60157,680],{"class":87},[77,60159,60160],{"class":271},"'赵云'",[77,60162,680],{"class":87},[77,60164,60165],{"class":271},"'关羽'",[77,60167,680],{"class":87},[77,60169,60170],{"class":271},"'张飞'",[77,60172,35713],{"class":87},[77,60174,60175,60177,60180,60182,60184,60186,60188,60191],{"class":79,"line":12343},[77,60176,13694],{"class":2123},[77,60178,60179],{"class":94}," qs",[77,60181,16036],{"class":2123},[77,60183,56850],{"class":87},[77,60185,56853],{"class":83},[77,60187,2622],{"class":87},[77,60189,60190],{"class":271},"'.qs'",[77,60192,2628],{"class":87},[77,60194,60195],{"class":79,"line":12370},[77,60196,60197],{"class":323},"    \u002F\u002F 1.业务1.开始按钮模块\n",[77,60199,60200,60202,60204,60206,60208,60210,60212,60215],{"class":79,"line":12379},[77,60201,13694],{"class":2123},[77,60203,6659],{"class":94},[77,60205,16036],{"class":2123},[77,60207,56850],{"class":87},[77,60209,56853],{"class":83},[77,60211,2622],{"class":87},[77,60213,60214],{"class":271},"'.start'",[77,60216,2628],{"class":87},[77,60218,60219],{"class":79,"line":12385},[77,60220,60221],{"class":323},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[77,60223,60224,60226,60229,60231],{"class":79,"line":12393},[77,60225,54677],{"class":2123},[77,60227,60228],{"class":87}," timerId ",[77,60230,268],{"class":2123},[77,60232,49799],{"class":94},[77,60234,60235],{"class":79,"line":12398},[77,60236,60237],{"class":323},"    \u002F\u002F 随机号要全局变量\n",[77,60239,60240,60242,60245,60247],{"class":79,"line":19074},[77,60241,54677],{"class":2123},[77,60243,60244],{"class":87}," random ",[77,60246,268],{"class":2123},[77,60248,49799],{"class":94},[77,60250,60251],{"class":79,"line":19080},[77,60252,60253],{"class":323},"    \u002F\u002F 1.1 添加点击事件\n",[77,60255,60256,60259,60262,60264,60267,60269,60271],{"class":79,"line":19103},[77,60257,60258],{"class":87},"    start.",[77,60260,60261],{"class":83},"addEventListener",[77,60263,2622],{"class":87},[77,60265,60266],{"class":271},"'click'",[77,60268,680],{"class":87},[77,60270,56903],{"class":2123},[77,60272,56906],{"class":87},[77,60274,60275,60278,60280,60282,60284,60286],{"class":79,"line":19109},[77,60276,60277],{"class":87},"      timerId ",[77,60279,268],{"class":2123},[77,60281,56898],{"class":83},[77,60283,2622],{"class":87},[77,60285,56903],{"class":2123},[77,60287,56906],{"class":87},[77,60289,60290],{"class":79,"line":19132},[77,60291,60292],{"class":323},"        \u002F\u002F 随机数\n",[77,60294,60295,60298,60300,60303,60306,60309,60311,60313,60315,60317],{"class":79,"line":19146},[77,60296,60297],{"class":87},"        random ",[77,60299,268],{"class":2123},[77,60301,60302],{"class":83}," parseInt",[77,60304,60305],{"class":87},"(Math.",[77,60307,60308],{"class":83},"random",[77,60310,15522],{"class":87},[77,60312,3068],{"class":2123},[77,60314,54423],{"class":87},[77,60316,54426],{"class":94},[77,60318,2628],{"class":87},[77,60320,60321,60324,60326],{"class":79,"line":19166},[77,60322,60323],{"class":87},"        qs.innerHTML ",[77,60325,268],{"class":2123},[77,60327,60328],{"class":87}," arr[random]\n",[77,60330,60331,60334,60336],{"class":79,"line":19172},[77,60332,60333],{"class":87},"      }, ",[77,60335,2887],{"class":94},[77,60337,2628],{"class":87},[77,60339,60340],{"class":79,"line":19183},[77,60341,60342],{"class":323},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[77,60344,60345,60347,60350,60352,60355,60357],{"class":79,"line":19206},[77,60346,56934],{"class":2123},[77,60348,60349],{"class":87}," (arr.",[77,60351,54426],{"class":94},[77,60353,60354],{"class":2123}," ===",[77,60356,27586],{"class":94},[77,60358,14914],{"class":87},[77,60360,60361],{"class":79,"line":19228},[77,60362,60363],{"class":323},"        \u002F\u002F start.disabled = true\n",[77,60365,60366],{"class":79,"line":19233},[77,60367,60368],{"class":323},"        \u002F\u002F end.disabled = true\n",[77,60370,60371],{"class":79,"line":19239},[77,60372,60373],{"class":323},"        \u002F\u002F 可以合起来写\n",[77,60375,60376,60379,60381,60384,60386],{"class":79,"line":19253},[77,60377,60378],{"class":87},"        start.disabled ",[77,60380,268],{"class":2123},[77,60382,60383],{"class":87}," end.disabled ",[77,60385,268],{"class":2123},[77,60387,60388],{"class":94}," true\n",[77,60390,60391],{"class":79,"line":19266},[77,60392,54856],{"class":87},[77,60394,60395],{"class":79,"line":19271},[77,60396,35928],{"class":87},[77,60398,60399],{"class":79,"line":19285},[77,60400,60401],{"class":323},"    \u002F\u002F 1.2 关闭按钮模块\n",[77,60403,60404,60406,60408,60410,60412,60414,60416,60419],{"class":79,"line":19290},[77,60405,13694],{"class":2123},[77,60407,6675],{"class":94},[77,60409,16036],{"class":2123},[77,60411,56850],{"class":87},[77,60413,56853],{"class":83},[77,60415,2622],{"class":87},[77,60417,60418],{"class":271},"'.end'",[77,60420,2628],{"class":87},[77,60422,60423,60426,60428,60430,60432,60434,60436],{"class":79,"line":19296},[77,60424,60425],{"class":87},"    end.",[77,60427,60261],{"class":83},[77,60429,2622],{"class":87},[77,60431,60266],{"class":271},[77,60433,680],{"class":87},[77,60435,56903],{"class":2123},[77,60437,56906],{"class":87},[77,60439,60440,60443],{"class":79,"line":19301},[77,60441,60442],{"class":83},"      clearInterval",[77,60444,60445],{"class":87},"(timerId)\n",[77,60447,60448],{"class":79,"line":19315},[77,60449,60450],{"class":323},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[77,60452,60453,60456,60459,60462,60464],{"class":79,"line":19320},[77,60454,60455],{"class":87},"      arr.",[77,60457,60458],{"class":83},"splice",[77,60460,60461],{"class":87},"(random, ",[77,60463,2120],{"class":94},[77,60465,2628],{"class":87},[77,60467,60468],{"class":79,"line":19325},[77,60469,35928],{"class":87},[77,60471,60472],{"class":79,"line":19339},[77,60473,4875],{"emptyLinePlaceholder":2549},[77,60475,60476,60478,60480],{"class":79,"line":19351},[77,60477,54875],{"class":87},[77,60479,54271],{"class":158},[77,60481,291],{"class":87},[77,60483,60484,60486,60488],{"class":79,"line":19356},[77,60485,351],{"class":87},[77,60487,54258],{"class":158},[77,60489,291],{"class":87},[77,60491,60492],{"class":79,"line":19369},[77,60493,4875],{"emptyLinePlaceholder":2549},[77,60495,60496,60498,60500],{"class":79,"line":19374},[77,60497,351],{"class":87},[77,60499,53101],{"class":158},[77,60501,291],{"class":87},[24,60503,60504],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[19,60506,60508],{"id":60507},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[67,60510,60512],{"className":53099,"code":60511,"language":53101,"meta":72,"style":72},"\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",[74,60513,60514,60524,60538,60542,60550,60564,60584,60596,60604,60608,60616,60628,60636,60655,60672,60688,60698,60702,60710,60718,60722],{"__ignoreMap":72},[77,60515,60516,60518,60520,60522],{"class":79,"line":80},[77,60517,53763],{"class":87},[77,60519,53766],{"class":158},[77,60521,53769],{"class":83},[77,60523,291],{"class":87},[77,60525,60526,60528,60530,60532,60534,60536],{"class":79,"line":91},[77,60527,260],{"class":87},[77,60529,53101],{"class":158},[77,60531,53780],{"class":83},[77,60533,268],{"class":87},[77,60535,53785],{"class":271},[77,60537,291],{"class":87},[77,60539,60540],{"class":79,"line":107},[77,60541,4875],{"emptyLinePlaceholder":2549},[77,60543,60544,60546,60548],{"class":79,"line":191},[77,60545,260],{"class":87},[77,60547,53798],{"class":158},[77,60549,291],{"class":87},[77,60551,60552,60554,60556,60558,60560,60562],{"class":79,"line":1543},[77,60553,54602],{"class":87},[77,60555,53808],{"class":158},[77,60557,53811],{"class":83},[77,60559,268],{"class":87},[77,60561,53816],{"class":271},[77,60563,291],{"class":87},[77,60565,60566,60568,60570,60572,60574,60576,60578,60580,60582],{"class":79,"line":1549},[77,60567,54602],{"class":87},[77,60569,53808],{"class":158},[77,60571,2495],{"class":83},[77,60573,268],{"class":87},[77,60575,53855],{"class":271},[77,60577,53835],{"class":83},[77,60579,268],{"class":87},[77,60581,53862],{"class":271},[77,60583,291],{"class":87},[77,60585,60586,60588,60590,60592,60594],{"class":79,"line":1566},[77,60587,54602],{"class":87},[77,60589,53871],{"class":158},[77,60591,53874],{"class":87},[77,60593,53871],{"class":158},[77,60595,291],{"class":87},[77,60597,60598,60600,60602],{"class":79,"line":1572},[77,60599,351],{"class":87},[77,60601,53798],{"class":158},[77,60603,291],{"class":87},[77,60605,60606],{"class":79,"line":1589},[77,60607,4875],{"emptyLinePlaceholder":2549},[77,60609,60610,60612,60614],{"class":79,"line":1595},[77,60611,260],{"class":87},[77,60613,54258],{"class":158},[77,60615,291],{"class":87},[77,60617,60618,60620,60622,60624,60626],{"class":79,"line":4088},[77,60619,54602],{"class":87},[77,60621,56341],{"class":158},[77,60623,56347],{"class":87},[77,60625,56341],{"class":158},[77,60627,291],{"class":87},[77,60629,60630,60632,60634],{"class":79,"line":4093},[77,60631,54602],{"class":87},[77,60633,54271],{"class":158},[77,60635,291],{"class":87},[77,60637,60638,60640,60642,60644,60646,60648,60650,60653],{"class":79,"line":4099},[77,60639,13694],{"class":2123},[77,60641,56845],{"class":94},[77,60643,16036],{"class":2123},[77,60645,56850],{"class":87},[77,60647,56853],{"class":83},[77,60649,2622],{"class":87},[77,60651,60652],{"class":271},"'button'",[77,60654,2628],{"class":87},[77,60656,60657,60660,60662,60664,60666,60668,60670],{"class":79,"line":4104},[77,60658,60659],{"class":87},"    btn.",[77,60661,60261],{"class":83},[77,60663,2622],{"class":87},[77,60665,60266],{"class":271},[77,60667,680],{"class":87},[77,60669,56903],{"class":2123},[77,60671,56906],{"class":87},[77,60673,60674,60677,60679,60681,60684,60686],{"class":79,"line":4118},[77,60675,60676],{"class":2123},"      const",[77,60678,4715],{"class":94},[77,60680,16036],{"class":2123},[77,60682,60683],{"class":87}," Math.",[77,60685,60308],{"class":83},[77,60687,4451],{"class":87},[77,60689,60690,60693,60696],{"class":79,"line":4123},[77,60691,60692],{"class":87},"      console.",[77,60694,60695],{"class":83},"log",[77,60697,2635],{"class":87},[77,60699,60700],{"class":79,"line":4129},[77,60701,35928],{"class":87},[77,60703,60704,60706,60708],{"class":79,"line":4150},[77,60705,54875],{"class":87},[77,60707,54271],{"class":158},[77,60709,291],{"class":87},[77,60711,60712,60714,60716],{"class":79,"line":4155},[77,60713,351],{"class":87},[77,60715,54258],{"class":158},[77,60717,291],{"class":87},[77,60719,60720],{"class":79,"line":4169},[77,60721,4875],{"emptyLinePlaceholder":2549},[77,60723,60724,60726,60728],{"class":79,"line":4174},[77,60725,351],{"class":87},[77,60727,53101],{"class":158},[77,60729,291],{"class":87},[24,60731,60732],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[24,60734,60735],{},"常量不可以重新赋值",[24,60737,60738],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[67,60740,60742],{"className":53099,"code":60741,"language":53101,"meta":72,"style":72},"\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",[74,60743,60744,60754,60768,60772,60780,60794,60814,60826,60834,60838,60846,60858,60866,60877,60895,60911,60925,60933,60937,60945,60953,60957],{"__ignoreMap":72},[77,60745,60746,60748,60750,60752],{"class":79,"line":80},[77,60747,53763],{"class":87},[77,60749,53766],{"class":158},[77,60751,53769],{"class":83},[77,60753,291],{"class":87},[77,60755,60756,60758,60760,60762,60764,60766],{"class":79,"line":91},[77,60757,260],{"class":87},[77,60759,53101],{"class":158},[77,60761,53780],{"class":83},[77,60763,268],{"class":87},[77,60765,53785],{"class":271},[77,60767,291],{"class":87},[77,60769,60770],{"class":79,"line":107},[77,60771,4875],{"emptyLinePlaceholder":2549},[77,60773,60774,60776,60778],{"class":79,"line":191},[77,60775,260],{"class":87},[77,60777,53798],{"class":158},[77,60779,291],{"class":87},[77,60781,60782,60784,60786,60788,60790,60792],{"class":79,"line":1543},[77,60783,54602],{"class":87},[77,60785,53808],{"class":158},[77,60787,53811],{"class":83},[77,60789,268],{"class":87},[77,60791,53816],{"class":271},[77,60793,291],{"class":87},[77,60795,60796,60798,60800,60802,60804,60806,60808,60810,60812],{"class":79,"line":1549},[77,60797,54602],{"class":87},[77,60799,53808],{"class":158},[77,60801,2495],{"class":83},[77,60803,268],{"class":87},[77,60805,53855],{"class":271},[77,60807,53835],{"class":83},[77,60809,268],{"class":87},[77,60811,53862],{"class":271},[77,60813,291],{"class":87},[77,60815,60816,60818,60820,60822,60824],{"class":79,"line":1566},[77,60817,54602],{"class":87},[77,60819,53871],{"class":158},[77,60821,53874],{"class":87},[77,60823,53871],{"class":158},[77,60825,291],{"class":87},[77,60827,60828,60830,60832],{"class":79,"line":1572},[77,60829,351],{"class":87},[77,60831,53798],{"class":158},[77,60833,291],{"class":87},[77,60835,60836],{"class":79,"line":1589},[77,60837,4875],{"emptyLinePlaceholder":2549},[77,60839,60840,60842,60844],{"class":79,"line":1595},[77,60841,260],{"class":87},[77,60843,54258],{"class":158},[77,60845,291],{"class":87},[77,60847,60848,60850,60852,60854,60856],{"class":79,"line":4088},[77,60849,54602],{"class":87},[77,60851,56341],{"class":158},[77,60853,56347],{"class":87},[77,60855,56341],{"class":158},[77,60857,291],{"class":87},[77,60859,60860,60862,60864],{"class":79,"line":4093},[77,60861,54602],{"class":87},[77,60863,54271],{"class":158},[77,60865,291],{"class":87},[77,60867,60868,60870,60872,60874],{"class":79,"line":4099},[77,60869,13694],{"class":2123},[77,60871,4715],{"class":94},[77,60873,16036],{"class":2123},[77,60875,60876],{"class":94}," 10\n",[77,60878,60879,60881,60883,60885,60887,60889,60891,60893],{"class":79,"line":4104},[77,60880,13694],{"class":2123},[77,60882,56845],{"class":94},[77,60884,16036],{"class":2123},[77,60886,56850],{"class":87},[77,60888,56853],{"class":83},[77,60890,2622],{"class":87},[77,60892,60652],{"class":271},[77,60894,2628],{"class":87},[77,60896,60897,60899,60901,60903,60905,60907,60909],{"class":79,"line":4118},[77,60898,60659],{"class":87},[77,60900,60261],{"class":83},[77,60902,2622],{"class":87},[77,60904,60266],{"class":271},[77,60906,680],{"class":87},[77,60908,56903],{"class":2123},[77,60910,56906],{"class":87},[77,60912,60913,60915,60917,60919,60921,60923],{"class":79,"line":4123},[77,60914,60676],{"class":2123},[77,60916,4715],{"class":94},[77,60918,16036],{"class":2123},[77,60920,60683],{"class":87},[77,60922,60308],{"class":83},[77,60924,4451],{"class":87},[77,60926,60927,60929,60931],{"class":79,"line":4129},[77,60928,60692],{"class":87},[77,60930,60695],{"class":83},[77,60932,2635],{"class":87},[77,60934,60935],{"class":79,"line":4150},[77,60936,35928],{"class":87},[77,60938,60939,60941,60943],{"class":79,"line":4155},[77,60940,54875],{"class":87},[77,60942,54271],{"class":158},[77,60944,291],{"class":87},[77,60946,60947,60949,60951],{"class":79,"line":4169},[77,60948,351],{"class":87},[77,60950,54258],{"class":158},[77,60952,291],{"class":87},[77,60954,60955],{"class":79,"line":4174},[77,60956,4875],{"emptyLinePlaceholder":2549},[77,60958,60959,60961,60963],{"class":79,"line":4203},[77,60960,351],{"class":87},[77,60962,53101],{"class":158},[77,60964,291],{"class":87},[24,60966,60967],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[67,60969,60971],{"className":53099,"code":60970,"language":53101,"meta":72,"style":72},"\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",[74,60972,60973,60983,60997,61001,61009,61023,61043,61055,61063,61067,61075,61087,61095,61105,61123,61139,61152,61160,61164,61172,61180,61184],{"__ignoreMap":72},[77,60974,60975,60977,60979,60981],{"class":79,"line":80},[77,60976,53763],{"class":87},[77,60978,53766],{"class":158},[77,60980,53769],{"class":83},[77,60982,291],{"class":87},[77,60984,60985,60987,60989,60991,60993,60995],{"class":79,"line":91},[77,60986,260],{"class":87},[77,60988,53101],{"class":158},[77,60990,53780],{"class":83},[77,60992,268],{"class":87},[77,60994,53785],{"class":271},[77,60996,291],{"class":87},[77,60998,60999],{"class":79,"line":107},[77,61000,4875],{"emptyLinePlaceholder":2549},[77,61002,61003,61005,61007],{"class":79,"line":191},[77,61004,260],{"class":87},[77,61006,53798],{"class":158},[77,61008,291],{"class":87},[77,61010,61011,61013,61015,61017,61019,61021],{"class":79,"line":1543},[77,61012,54602],{"class":87},[77,61014,53808],{"class":158},[77,61016,53811],{"class":83},[77,61018,268],{"class":87},[77,61020,53816],{"class":271},[77,61022,291],{"class":87},[77,61024,61025,61027,61029,61031,61033,61035,61037,61039,61041],{"class":79,"line":1549},[77,61026,54602],{"class":87},[77,61028,53808],{"class":158},[77,61030,2495],{"class":83},[77,61032,268],{"class":87},[77,61034,53855],{"class":271},[77,61036,53835],{"class":83},[77,61038,268],{"class":87},[77,61040,53862],{"class":271},[77,61042,291],{"class":87},[77,61044,61045,61047,61049,61051,61053],{"class":79,"line":1566},[77,61046,54602],{"class":87},[77,61048,53871],{"class":158},[77,61050,53874],{"class":87},[77,61052,53871],{"class":158},[77,61054,291],{"class":87},[77,61056,61057,61059,61061],{"class":79,"line":1572},[77,61058,351],{"class":87},[77,61060,53798],{"class":158},[77,61062,291],{"class":87},[77,61064,61065],{"class":79,"line":1589},[77,61066,4875],{"emptyLinePlaceholder":2549},[77,61068,61069,61071,61073],{"class":79,"line":1595},[77,61070,260],{"class":87},[77,61072,54258],{"class":158},[77,61074,291],{"class":87},[77,61076,61077,61079,61081,61083,61085],{"class":79,"line":4088},[77,61078,54602],{"class":87},[77,61080,56341],{"class":158},[77,61082,56347],{"class":87},[77,61084,56341],{"class":158},[77,61086,291],{"class":87},[77,61088,61089,61091,61093],{"class":79,"line":4093},[77,61090,54602],{"class":87},[77,61092,54271],{"class":158},[77,61094,291],{"class":87},[77,61096,61097,61099,61101,61103],{"class":79,"line":4099},[77,61098,13694],{"class":2123},[77,61100,4715],{"class":94},[77,61102,16036],{"class":2123},[77,61104,60876],{"class":94},[77,61106,61107,61109,61111,61113,61115,61117,61119,61121],{"class":79,"line":4104},[77,61108,13694],{"class":2123},[77,61110,56845],{"class":94},[77,61112,16036],{"class":2123},[77,61114,56850],{"class":87},[77,61116,56853],{"class":83},[77,61118,2622],{"class":87},[77,61120,60652],{"class":271},[77,61122,2628],{"class":87},[77,61124,61125,61127,61129,61131,61133,61135,61137],{"class":79,"line":4118},[77,61126,60659],{"class":87},[77,61128,60261],{"class":83},[77,61130,2622],{"class":87},[77,61132,60266],{"class":271},[77,61134,680],{"class":87},[77,61136,56903],{"class":2123},[77,61138,56906],{"class":87},[77,61140,61141,61144,61146,61148,61150],{"class":79,"line":4123},[77,61142,61143],{"class":87},"      num ",[77,61145,268],{"class":2123},[77,61147,60683],{"class":87},[77,61149,60308],{"class":83},[77,61151,4451],{"class":87},[77,61153,61154,61156,61158],{"class":79,"line":4129},[77,61155,60692],{"class":87},[77,61157,60695],{"class":83},[77,61159,2635],{"class":87},[77,61161,61162],{"class":79,"line":4150},[77,61163,35928],{"class":87},[77,61165,61166,61168,61170],{"class":79,"line":4155},[77,61167,54875],{"class":87},[77,61169,54271],{"class":158},[77,61171,291],{"class":87},[77,61173,61174,61176,61178],{"class":79,"line":4169},[77,61175,351],{"class":87},[77,61177,54258],{"class":158},[77,61179,291],{"class":87},[77,61181,61182],{"class":79,"line":4174},[77,61183,4875],{"emptyLinePlaceholder":2549},[77,61185,61186,61188,61190],{"class":79,"line":4203},[77,61187,351],{"class":87},[77,61189,53101],{"class":158},[77,61191,291],{"class":87},[24,61193,61194],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[19,61196,61198],{"id":61197},"_324-事件监听版本","3.2.4 事件监听版本",[24,61200,61201],{},[40,61202],{"alt":72,"src":61203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[24,61205,61206],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[24,61208,61209],{},"这种方式会覆盖前边的事件监听:",[67,61211,61213],{"className":53099,"code":61212,"language":53101,"meta":72,"style":72},"\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",[74,61214,61215,61225,61239,61243,61251,61265,61285,61297,61305,61309,61317,61329,61337,61355,61369,61380,61384,61396,61406,61410,61418,61426,61430],{"__ignoreMap":72},[77,61216,61217,61219,61221,61223],{"class":79,"line":80},[77,61218,53763],{"class":87},[77,61220,53766],{"class":158},[77,61222,53769],{"class":83},[77,61224,291],{"class":87},[77,61226,61227,61229,61231,61233,61235,61237],{"class":79,"line":91},[77,61228,260],{"class":87},[77,61230,53101],{"class":158},[77,61232,53780],{"class":83},[77,61234,268],{"class":87},[77,61236,53785],{"class":271},[77,61238,291],{"class":87},[77,61240,61241],{"class":79,"line":107},[77,61242,4875],{"emptyLinePlaceholder":2549},[77,61244,61245,61247,61249],{"class":79,"line":191},[77,61246,260],{"class":87},[77,61248,53798],{"class":158},[77,61250,291],{"class":87},[77,61252,61253,61255,61257,61259,61261,61263],{"class":79,"line":1543},[77,61254,54602],{"class":87},[77,61256,53808],{"class":158},[77,61258,53811],{"class":83},[77,61260,268],{"class":87},[77,61262,53816],{"class":271},[77,61264,291],{"class":87},[77,61266,61267,61269,61271,61273,61275,61277,61279,61281,61283],{"class":79,"line":1549},[77,61268,54602],{"class":87},[77,61270,53808],{"class":158},[77,61272,2495],{"class":83},[77,61274,268],{"class":87},[77,61276,53855],{"class":271},[77,61278,53835],{"class":83},[77,61280,268],{"class":87},[77,61282,53862],{"class":271},[77,61284,291],{"class":87},[77,61286,61287,61289,61291,61293,61295],{"class":79,"line":1566},[77,61288,54602],{"class":87},[77,61290,53871],{"class":158},[77,61292,53874],{"class":87},[77,61294,53871],{"class":158},[77,61296,291],{"class":87},[77,61298,61299,61301,61303],{"class":79,"line":1572},[77,61300,351],{"class":87},[77,61302,53798],{"class":158},[77,61304,291],{"class":87},[77,61306,61307],{"class":79,"line":1589},[77,61308,4875],{"emptyLinePlaceholder":2549},[77,61310,61311,61313,61315],{"class":79,"line":1595},[77,61312,260],{"class":87},[77,61314,54258],{"class":158},[77,61316,291],{"class":87},[77,61318,61319,61321,61323,61325,61327],{"class":79,"line":4088},[77,61320,54602],{"class":87},[77,61322,56341],{"class":158},[77,61324,56347],{"class":87},[77,61326,56341],{"class":158},[77,61328,291],{"class":87},[77,61330,61331,61333,61335],{"class":79,"line":4093},[77,61332,54602],{"class":87},[77,61334,54271],{"class":158},[77,61336,291],{"class":87},[77,61338,61339,61341,61343,61345,61347,61349,61351,61353],{"class":79,"line":4099},[77,61340,13694],{"class":2123},[77,61342,56845],{"class":94},[77,61344,16036],{"class":2123},[77,61346,56850],{"class":87},[77,61348,56853],{"class":83},[77,61350,2622],{"class":87},[77,61352,60652],{"class":271},[77,61354,2628],{"class":87},[77,61356,61357,61359,61362,61364,61367],{"class":79,"line":4104},[77,61358,60659],{"class":87},[77,61360,61361],{"class":83},"onclick",[77,61363,16036],{"class":2123},[77,61365,61366],{"class":2123}," function",[77,61368,56906],{"class":87},[77,61370,61371,61374,61376,61378],{"class":79,"line":4118},[77,61372,61373],{"class":83},"      alert",[77,61375,2622],{"class":87},[77,61377,3085],{"class":94},[77,61379,2628],{"class":87},[77,61381,61382],{"class":79,"line":4123},[77,61383,4662],{"class":87},[77,61385,61386,61388,61390,61392,61394],{"class":79,"line":4129},[77,61387,60659],{"class":87},[77,61389,61361],{"class":83},[77,61391,16036],{"class":2123},[77,61393,61366],{"class":2123},[77,61395,56906],{"class":87},[77,61397,61398,61400,61402,61404],{"class":79,"line":4150},[77,61399,61373],{"class":83},[77,61401,2622],{"class":87},[77,61403,3363],{"class":94},[77,61405,2628],{"class":87},[77,61407,61408],{"class":79,"line":4155},[77,61409,4662],{"class":87},[77,61411,61412,61414,61416],{"class":79,"line":4169},[77,61413,54875],{"class":87},[77,61415,54271],{"class":158},[77,61417,291],{"class":87},[77,61419,61420,61422,61424],{"class":79,"line":4174},[77,61421,351],{"class":87},[77,61423,54258],{"class":158},[77,61425,291],{"class":87},[77,61427,61428],{"class":79,"line":4203},[77,61429,4875],{"emptyLinePlaceholder":2549},[77,61431,61432,61434,61436],{"class":79,"line":4208},[77,61433,351],{"class":87},[77,61435,53101],{"class":158},[77,61437,291],{"class":87},[24,61439,61440],{},"只要点击就输出结果为22,前边11被覆盖了",[67,61442,61444],{"className":53099,"code":61443,"language":53101,"meta":72,"style":72},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[74,61445,61446,61451,61456,61460,61465,61470],{"__ignoreMap":72},[77,61447,61448],{"class":79,"line":80},[77,61449,61450],{"class":87},"  btn.addEventListener('click', function () {\n",[77,61452,61453],{"class":79,"line":91},[77,61454,61455],{"class":87},"      alert(11)\n",[77,61457,61458],{"class":79,"line":107},[77,61459,35928],{"class":87},[77,61461,61462],{"class":79,"line":191},[77,61463,61464],{"class":87},"    btn.addEventListener('click', function () {\n",[77,61466,61467],{"class":79,"line":1543},[77,61468,61469],{"class":87},"      alert(22)\n",[77,61471,61472],{"class":79,"line":1549},[77,61473,35928],{"class":87},[24,61475,61476],{},"点击第一次输出11,第二次点击为22",[19,61478,61480],{"id":61479},"_325-事件类型","3.2.5 事件类型",[24,61482,61483],{},[40,61484],{"alt":72,"src":61485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24468,61487,61489],{"id":61488},"_3251-鼠标事件","3.2.5.1 鼠标事件",[24,61491,61492],{},"补充知识:",[24,61494,61495],{},"轮播图自动播放模块,可以使用",[24,61497,61498],{},"let timerId = setInterval(function () {",[24,61500,61501],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[24,61503,61504],{},"用js方法模拟进行点击事件,click必须加()",[24,61506,61507],{},"next.click()",[24,61509,61510],{},"}, 1000)",[24,61512,61513],{},[40,61514],{"alt":72,"src":61515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[67,61517,61519],{"className":55525,"code":61518,"language":55527,"meta":72,"style":72},"\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",[74,61520,61521,61525,61535,61549,61553,61561,61576,61596,61616,61629,61637,61642,61647,61651,61655,61660,61665,61670,61675,61679,61683,61688,61693,61698,61702,61706,61711,61715,61720,61725,61729,61733,61738,61743,61748,61753,61758,61762,61766,61771,61776,61781,61786,61791,61795,61799,61804,61809,61814,61819,61824,61829,61834,61839,61844,61849,61853,61857,61862,61867,61871,61875,61880,61885,61889,61894,61899,61903,61907,61912,61916,61921,61926,61930,61935,61939,61943,61948,61953,61958,61963,61968,61973,61978,61982,61986,61990,61995,62000,62005,62010,62014,62022,62030,62034,62042,62057,62071,62092,62100,62114,62127,62142,62161,62173,62185,62197,62209,62221,62233,62245,62253,62268,62292,62316,62324,62332,62340,62348,62353,62358,62363,62368,62373,62378,62383,62388,62393,62398,62402,62407,62412,62417,62422,62427,62432,62437,62442,62447,62451,62456,62461,62466,62471,62476,62481,62486,62491,62496,62501,62506,62511,62515,62519,62524,62529,62534,62538,62543,62548,62553,62558,62563,62567,62572,62576,62580,62584,62588,62592,62596,62601,62606,62611,62616,62621,62626,62631,62636,62641,62645,62649,62654,62659,62664,62669,62674,62678,62683,62688,62693,62698,62703,62708,62712,62716,62721,62725,62730,62734,62739,62744,62749,62754,62759,62764,62768,62776,62784,62788],{"__ignoreMap":72},[77,61522,61523],{"class":79,"line":80},[77,61524,4875],{"emptyLinePlaceholder":2549},[77,61526,61527,61529,61531,61533],{"class":79,"line":91},[77,61528,53763],{"class":87},[77,61530,53766],{"class":2123},[77,61532,53769],{"class":94},[77,61534,291],{"class":87},[77,61536,61537,61539,61541,61543,61545,61547],{"class":79,"line":107},[77,61538,260],{"class":87},[77,61540,53101],{"class":158},[77,61542,53780],{"class":83},[77,61544,268],{"class":87},[77,61546,53785],{"class":271},[77,61548,291],{"class":87},[77,61550,61551],{"class":79,"line":191},[77,61552,4875],{"emptyLinePlaceholder":2549},[77,61554,61555,61557,61559],{"class":79,"line":1543},[77,61556,260],{"class":87},[77,61558,53798],{"class":158},[77,61560,291],{"class":87},[77,61562,61563,61565,61567,61569,61571,61573],{"class":79,"line":1549},[77,61564,54602],{"class":87},[77,61566,53808],{"class":158},[77,61568,53811],{"class":83},[77,61570,268],{"class":87},[77,61572,53816],{"class":271},[77,61574,61575],{"class":87}," \u002F>\n",[77,61577,61578,61580,61582,61584,61586,61588,61590,61592,61594],{"class":79,"line":1566},[77,61579,54602],{"class":87},[77,61581,53808],{"class":158},[77,61583,53827],{"class":83},[77,61585,268],{"class":87},[77,61587,53832],{"class":271},[77,61589,53835],{"class":83},[77,61591,268],{"class":87},[77,61593,53840],{"class":271},[77,61595,61575],{"class":87},[77,61597,61598,61600,61602,61604,61606,61608,61610,61612,61614],{"class":79,"line":1572},[77,61599,54602],{"class":87},[77,61601,53808],{"class":158},[77,61603,2495],{"class":83},[77,61605,268],{"class":87},[77,61607,53855],{"class":271},[77,61609,53835],{"class":83},[77,61611,268],{"class":87},[77,61613,53862],{"class":271},[77,61615,61575],{"class":87},[77,61617,61618,61620,61622,61625,61627],{"class":79,"line":1589},[77,61619,54602],{"class":87},[77,61621,53871],{"class":158},[77,61623,61624],{"class":87},">轮播图点击切换\u003C\u002F",[77,61626,53871],{"class":158},[77,61628,291],{"class":87},[77,61630,61631,61633,61635],{"class":79,"line":1595},[77,61632,54602],{"class":87},[77,61634,2520],{"class":158},[77,61636,291],{"class":87},[77,61638,61639],{"class":79,"line":4088},[77,61640,61641],{"class":87},"    * {\n",[77,61643,61644],{"class":79,"line":4093},[77,61645,61646],{"class":87},"      box-sizing: border-box;\n",[77,61648,61649],{"class":79,"line":4099},[77,61650,4662],{"class":87},[77,61652,61653],{"class":79,"line":4104},[77,61654,4875],{"emptyLinePlaceholder":2549},[77,61656,61657],{"class":79,"line":4118},[77,61658,61659],{"class":87},"    .slider {\n",[77,61661,61662],{"class":79,"line":4123},[77,61663,61664],{"class":87},"      width: 560px;\n",[77,61666,61667],{"class":79,"line":4129},[77,61668,61669],{"class":87},"      height: 400px;\n",[77,61671,61672],{"class":79,"line":4150},[77,61673,61674],{"class":87},"      overflow: hidden;\n",[77,61676,61677],{"class":79,"line":4155},[77,61678,4662],{"class":87},[77,61680,61681],{"class":79,"line":4169},[77,61682,4875],{"emptyLinePlaceholder":2549},[77,61684,61685],{"class":79,"line":4174},[77,61686,61687],{"class":87},"    .slider-wrapper {\n",[77,61689,61690],{"class":79,"line":4203},[77,61691,61692],{"class":87},"      width: 100%;\n",[77,61694,61695],{"class":79,"line":4208},[77,61696,61697],{"class":87},"      height: 320px;\n",[77,61699,61700],{"class":79,"line":4225},[77,61701,4662],{"class":87},[77,61703,61704],{"class":79,"line":4230},[77,61705,4875],{"emptyLinePlaceholder":2549},[77,61707,61708],{"class":79,"line":4235},[77,61709,61710],{"class":87},"    .slider-wrapper img {\n",[77,61712,61713],{"class":79,"line":4240},[77,61714,61692],{"class":87},[77,61716,61717],{"class":79,"line":4254},[77,61718,61719],{"class":87},"      height: 100%;\n",[77,61721,61722],{"class":79,"line":4259},[77,61723,61724],{"class":87},"      display: block;\n",[77,61726,61727],{"class":79,"line":5052},[77,61728,4662],{"class":87},[77,61730,61731],{"class":79,"line":5066},[77,61732,4875],{"emptyLinePlaceholder":2549},[77,61734,61735],{"class":79,"line":5074},[77,61736,61737],{"class":87},"    .slider-footer {\n",[77,61739,61740],{"class":79,"line":5079},[77,61741,61742],{"class":87},"      height: 80px;\n",[77,61744,61745],{"class":79,"line":5085},[77,61746,61747],{"class":87},"      background-color: rgb(100, 67, 68);\n",[77,61749,61750],{"class":79,"line":5091},[77,61751,61752],{"class":87},"      padding: 12px 12px 0 12px;\n",[77,61754,61755],{"class":79,"line":5096},[77,61756,61757],{"class":87},"      position: relative;\n",[77,61759,61760],{"class":79,"line":10422},[77,61761,4662],{"class":87},[77,61763,61764],{"class":79,"line":10446},[77,61765,4875],{"emptyLinePlaceholder":2549},[77,61767,61768],{"class":79,"line":10451},[77,61769,61770],{"class":87},"    .slider-footer .toggle {\n",[77,61772,61773],{"class":79,"line":10457},[77,61774,61775],{"class":87},"      position: absolute;\n",[77,61777,61778],{"class":79,"line":10484},[77,61779,61780],{"class":87},"      right: 0;\n",[77,61782,61783],{"class":79,"line":10489},[77,61784,61785],{"class":87},"      top: 12px;\n",[77,61787,61788],{"class":79,"line":10495},[77,61789,61790],{"class":87},"      display: flex;\n",[77,61792,61793],{"class":79,"line":10507},[77,61794,4662],{"class":87},[77,61796,61797],{"class":79,"line":10519},[77,61798,4875],{"emptyLinePlaceholder":2549},[77,61800,61801],{"class":79,"line":10531},[77,61802,61803],{"class":87},"    .slider-footer .toggle button {\n",[77,61805,61806],{"class":79,"line":12189},[77,61807,61808],{"class":87},"      margin-right: 12px;\n",[77,61810,61811],{"class":79,"line":12214},[77,61812,61813],{"class":87},"      width: 28px;\n",[77,61815,61816],{"class":79,"line":12237},[77,61817,61818],{"class":87},"      height: 28px;\n",[77,61820,61821],{"class":79,"line":12261},[77,61822,61823],{"class":87},"      appearance: none;\n",[77,61825,61826],{"class":79,"line":12266},[77,61827,61828],{"class":87},"      border: none;\n",[77,61830,61831],{"class":79,"line":12271},[77,61832,61833],{"class":87},"      background: rgba(255, 255, 255, 0.1);\n",[77,61835,61836],{"class":79,"line":12276},[77,61837,61838],{"class":87},"      color: #fff;\n",[77,61840,61841],{"class":79,"line":12285},[77,61842,61843],{"class":87},"      border-radius: 4px;\n",[77,61845,61846],{"class":79,"line":12290},[77,61847,61848],{"class":87},"      cursor: pointer;\n",[77,61850,61851],{"class":79,"line":12296},[77,61852,4662],{"class":87},[77,61854,61855],{"class":79,"line":12317},[77,61856,4875],{"emptyLinePlaceholder":2549},[77,61858,61859],{"class":79,"line":12323},[77,61860,61861],{"class":87},"    .slider-footer .toggle button:hover {\n",[77,61863,61864],{"class":79,"line":12337},[77,61865,61866],{"class":87},"      background: rgba(255, 255, 255, 0.2);\n",[77,61868,61869],{"class":79,"line":12343},[77,61870,4662],{"class":87},[77,61872,61873],{"class":79,"line":12370},[77,61874,4875],{"emptyLinePlaceholder":2549},[77,61876,61877],{"class":79,"line":12379},[77,61878,61879],{"class":87},"    .slider-footer p {\n",[77,61881,61882],{"class":79,"line":12385},[77,61883,61884],{"class":87},"      margin: 0;\n",[77,61886,61887],{"class":79,"line":12393},[77,61888,61838],{"class":87},[77,61890,61891],{"class":79,"line":12398},[77,61892,61893],{"class":87},"      font-size: 18px;\n",[77,61895,61896],{"class":79,"line":19074},[77,61897,61898],{"class":87},"      margin-bottom: 10px;\n",[77,61900,61901],{"class":79,"line":19080},[77,61902,4662],{"class":87},[77,61904,61905],{"class":79,"line":19103},[77,61906,4875],{"emptyLinePlaceholder":2549},[77,61908,61909],{"class":79,"line":19109},[77,61910,61911],{"class":87},"    .slider-indicator {\n",[77,61913,61914],{"class":79,"line":19132},[77,61915,61884],{"class":87},[77,61917,61918],{"class":79,"line":19146},[77,61919,61920],{"class":87},"      padding: 0;\n",[77,61922,61923],{"class":79,"line":19166},[77,61924,61925],{"class":87},"      list-style: none;\n",[77,61927,61928],{"class":79,"line":19172},[77,61929,61790],{"class":87},[77,61931,61932],{"class":79,"line":19183},[77,61933,61934],{"class":87},"      align-items: center;\n",[77,61936,61937],{"class":79,"line":19206},[77,61938,4662],{"class":87},[77,61940,61941],{"class":79,"line":19228},[77,61942,4875],{"emptyLinePlaceholder":2549},[77,61944,61945],{"class":79,"line":19233},[77,61946,61947],{"class":87},"    .slider-indicator li {\n",[77,61949,61950],{"class":79,"line":19239},[77,61951,61952],{"class":87},"      width: 8px;\n",[77,61954,61955],{"class":79,"line":19253},[77,61956,61957],{"class":87},"      height: 8px;\n",[77,61959,61960],{"class":79,"line":19266},[77,61961,61962],{"class":87},"      margin: 4px;\n",[77,61964,61965],{"class":79,"line":19271},[77,61966,61967],{"class":87},"      border-radius: 50%;\n",[77,61969,61970],{"class":79,"line":19285},[77,61971,61972],{"class":87},"      background: #fff;\n",[77,61974,61975],{"class":79,"line":19290},[77,61976,61977],{"class":87},"      opacity: 0.4;\n",[77,61979,61980],{"class":79,"line":19296},[77,61981,61848],{"class":87},[77,61983,61984],{"class":79,"line":19301},[77,61985,4662],{"class":87},[77,61987,61988],{"class":79,"line":19315},[77,61989,4875],{"emptyLinePlaceholder":2549},[77,61991,61992],{"class":79,"line":19320},[77,61993,61994],{"class":87},"    .slider-indicator li.active {\n",[77,61996,61997],{"class":79,"line":19325},[77,61998,61999],{"class":87},"      width: 12px;\n",[77,62001,62002],{"class":79,"line":19339},[77,62003,62004],{"class":87},"      height: 12px;\n",[77,62006,62007],{"class":79,"line":19351},[77,62008,62009],{"class":87},"      opacity: 1;\n",[77,62011,62012],{"class":79,"line":19356},[77,62013,4662],{"class":87},[77,62015,62016,62018,62020],{"class":79,"line":19369},[77,62017,54875],{"class":87},[77,62019,2520],{"class":158},[77,62021,291],{"class":87},[77,62023,62024,62026,62028],{"class":79,"line":19374},[77,62025,351],{"class":87},[77,62027,53798],{"class":158},[77,62029,291],{"class":87},[77,62031,62032],{"class":79,"line":19379},[77,62033,4875],{"emptyLinePlaceholder":2549},[77,62035,62036,62038,62040],{"class":79,"line":19384},[77,62037,260],{"class":87},[77,62039,54258],{"class":158},[77,62041,291],{"class":87},[77,62043,62044,62046,62048,62050,62052,62055],{"class":79,"line":19397},[77,62045,54602],{"class":87},[77,62047,331],{"class":158},[77,62049,334],{"class":83},[77,62051,268],{"class":87},[77,62053,62054],{"class":271},"\"slider\"",[77,62056,291],{"class":87},[77,62058,62059,62061,62063,62065,62067,62069],{"class":79,"line":19402},[77,62060,53805],{"class":87},[77,62062,331],{"class":158},[77,62064,334],{"class":83},[77,62066,268],{"class":87},[77,62068,57677],{"class":271},[77,62070,291],{"class":87},[77,62072,62073,62075,62077,62079,62081,62084,62086,62088,62090],{"class":79,"line":35100},[77,62074,57684],{"class":87},[77,62076,40],{"class":158},[77,62078,265],{"class":83},[77,62080,268],{"class":87},[77,62082,62083],{"class":271},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[77,62085,275],{"class":83},[77,62087,268],{"class":87},[77,62089,444],{"class":271},[77,62091,61575],{"class":87},[77,62093,62094,62096,62098],{"class":79,"line":35106},[77,62095,54235],{"class":87},[77,62097,331],{"class":158},[77,62099,291],{"class":87},[77,62101,62102,62104,62106,62108,62110,62112],{"class":79,"line":35112},[77,62103,53805],{"class":87},[77,62105,331],{"class":158},[77,62107,334],{"class":83},[77,62109,268],{"class":87},[77,62111,57722],{"class":271},[77,62113,291],{"class":87},[77,62115,62116,62118,62120,62123,62125],{"class":79,"line":35118},[77,62117,57684],{"class":87},[77,62119,24],{"class":158},[77,62121,62122],{"class":87},">对人类来说会不会太超前了？\u003C\u002F",[77,62124,24],{"class":158},[77,62126,291],{"class":87},[77,62128,62129,62131,62133,62135,62137,62140],{"class":79,"line":35124},[77,62130,57684],{"class":87},[77,62132,51],{"class":158},[77,62134,334],{"class":83},[77,62136,268],{"class":87},[77,62138,62139],{"class":271},"\"slider-indicator\"",[77,62141,291],{"class":87},[77,62143,62144,62146,62148,62150,62152,62155,62157,62159],{"class":79,"line":35135},[77,62145,57750],{"class":87},[77,62147,54],{"class":158},[77,62149,334],{"class":83},[77,62151,268],{"class":87},[77,62153,62154],{"class":271},"\"active\"",[77,62156,57762],{"class":87},[77,62158,54],{"class":158},[77,62160,291],{"class":87},[77,62162,62163,62165,62167,62169,62171],{"class":79,"line":35141},[77,62164,57750],{"class":87},[77,62166,54],{"class":158},[77,62168,57762],{"class":87},[77,62170,54],{"class":158},[77,62172,291],{"class":87},[77,62174,62175,62177,62179,62181,62183],{"class":79,"line":35161},[77,62176,57750],{"class":87},[77,62178,54],{"class":158},[77,62180,57762],{"class":87},[77,62182,54],{"class":158},[77,62184,291],{"class":87},[77,62186,62187,62189,62191,62193,62195],{"class":79,"line":35167},[77,62188,57750],{"class":87},[77,62190,54],{"class":158},[77,62192,57762],{"class":87},[77,62194,54],{"class":158},[77,62196,291],{"class":87},[77,62198,62199,62201,62203,62205,62207],{"class":79,"line":35178},[77,62200,57750],{"class":87},[77,62202,54],{"class":158},[77,62204,57762],{"class":87},[77,62206,54],{"class":158},[77,62208,291],{"class":87},[77,62210,62211,62213,62215,62217,62219],{"class":79,"line":35184},[77,62212,57750],{"class":87},[77,62214,54],{"class":158},[77,62216,57762],{"class":87},[77,62218,54],{"class":158},[77,62220,291],{"class":87},[77,62222,62223,62225,62227,62229,62231],{"class":79,"line":35190},[77,62224,57750],{"class":87},[77,62226,54],{"class":158},[77,62228,57762],{"class":87},[77,62230,54],{"class":158},[77,62232,291],{"class":87},[77,62234,62235,62237,62239,62241,62243],{"class":79,"line":35196},[77,62236,57750],{"class":87},[77,62238,54],{"class":158},[77,62240,57762],{"class":87},[77,62242,54],{"class":158},[77,62244,291],{"class":87},[77,62246,62247,62249,62251],{"class":79,"line":35202},[77,62248,57855],{"class":87},[77,62250,51],{"class":158},[77,62252,291],{"class":87},[77,62254,62255,62257,62259,62261,62263,62266],{"class":79,"line":35208},[77,62256,57684],{"class":87},[77,62258,331],{"class":158},[77,62260,334],{"class":83},[77,62262,268],{"class":87},[77,62264,62265],{"class":271},"\"toggle\"",[77,62267,291],{"class":87},[77,62269,62270,62272,62274,62276,62278,62281,62283,62286,62288,62290],{"class":79,"line":35214},[77,62271,57750],{"class":87},[77,62273,56341],{"class":158},[77,62275,334],{"class":83},[77,62277,268],{"class":87},[77,62279,62280],{"class":271},"\"prev\"",[77,62282,3572],{"class":87},[77,62284,62285],{"class":94},"&lt;",[77,62287,351],{"class":87},[77,62289,56341],{"class":158},[77,62291,291],{"class":87},[77,62293,62294,62296,62298,62300,62302,62305,62307,62310,62312,62314],{"class":79,"line":35220},[77,62295,57750],{"class":87},[77,62297,56341],{"class":158},[77,62299,334],{"class":83},[77,62301,268],{"class":87},[77,62303,62304],{"class":271},"\"next\"",[77,62306,3572],{"class":87},[77,62308,62309],{"class":94},"&gt;",[77,62311,351],{"class":87},[77,62313,56341],{"class":158},[77,62315,291],{"class":87},[77,62317,62318,62320,62322],{"class":79,"line":35240},[77,62319,57855],{"class":87},[77,62321,331],{"class":158},[77,62323,291],{"class":87},[77,62325,62326,62328,62330],{"class":79,"line":35246},[77,62327,54235],{"class":87},[77,62329,331],{"class":158},[77,62331,291],{"class":87},[77,62333,62334,62336,62338],{"class":79,"line":35262},[77,62335,54875],{"class":87},[77,62337,331],{"class":158},[77,62339,291],{"class":87},[77,62341,62342,62344,62346],{"class":79,"line":35268},[77,62343,54602],{"class":87},[77,62345,54271],{"class":158},[77,62347,291],{"class":87},[77,62349,62350],{"class":79,"line":35282},[77,62351,62352],{"class":87},"    \u002F\u002F 1. 初始数据\n",[77,62354,62355],{"class":79,"line":35288},[77,62356,62357],{"class":87},"    const data = [\n",[77,62359,62360],{"class":79,"line":35303},[77,62361,62362],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[77,62364,62365],{"class":79,"line":35309},[77,62366,62367],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[77,62369,62370],{"class":79,"line":35318},[77,62371,62372],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[77,62374,62375],{"class":79,"line":35324},[77,62376,62377],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[77,62379,62380],{"class":79,"line":35333},[77,62381,62382],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[77,62384,62385],{"class":79,"line":35339},[77,62386,62387],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[77,62389,62390],{"class":79,"line":35345},[77,62391,62392],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[77,62394,62395],{"class":79,"line":35354},[77,62396,62397],{"class":87},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[77,62399,62400],{"class":79,"line":35360},[77,62401,55567],{"class":87},[77,62403,62404],{"class":79,"line":35371},[77,62405,62406],{"class":87},"    \u002F\u002F 获取元素\n",[77,62408,62409],{"class":79,"line":35377},[77,62410,62411],{"class":87},"    const img = document.querySelector('.slider-wrapper img')\n",[77,62413,62414],{"class":79,"line":35396},[77,62415,62416],{"class":87},"    const p = document.querySelector('.slider-footer p')\n",[77,62418,62419],{"class":79,"line":35402},[77,62420,62421],{"class":87},"    const footer = document.querySelector('.slider-footer')\n",[77,62423,62424],{"class":79,"line":35413},[77,62425,62426],{"class":87},"    \u002F\u002F 1. 右按钮业务\n",[77,62428,62429],{"class":79,"line":35419},[77,62430,62431],{"class":87},"    \u002F\u002F 1.1 获取右侧按钮 \n",[77,62433,62434],{"class":79,"line":35439},[77,62435,62436],{"class":87},"    const next = document.querySelector('.next')\n",[77,62438,62439],{"class":79,"line":35455},[77,62440,62441],{"class":87},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[77,62443,62444],{"class":79,"line":35461},[77,62445,62446],{"class":87},"    \u002F\u002F 1.2 注册点击事件\n",[77,62448,62449],{"class":79,"line":35475},[77,62450,4875],{"emptyLinePlaceholder":2549},[77,62452,62453],{"class":79,"line":35481},[77,62454,62455],{"class":87},"    next.addEventListener('click', function () {\n",[77,62457,62458],{"class":79,"line":35487},[77,62459,62460],{"class":87},"      \u002F\u002F console.log(11)\n",[77,62462,62463],{"class":79,"line":35498},[77,62464,62465],{"class":87},"      i++\n",[77,62467,62468],{"class":79,"line":35504},[77,62469,62470],{"class":87},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[77,62472,62473],{"class":79,"line":35510},[77,62474,62475],{"class":87},"      \u002F\u002F if (i >= 8) {\n",[77,62477,62478],{"class":79,"line":35520},[77,62479,62480],{"class":87},"      \u002F\u002F   i = 0\n",[77,62482,62483],{"class":79,"line":35526},[77,62484,62485],{"class":87},"      \u002F\u002F }\n",[77,62487,62488],{"class":79,"line":35537},[77,62489,62490],{"class":87},"      i = i >= data.length ? 0 : i\n",[77,62492,62493],{"class":79,"line":35543},[77,62494,62495],{"class":87},"      \u002F\u002F 1.3 得到对应的对象\n",[77,62497,62498],{"class":79,"line":35553},[77,62499,62500],{"class":87},"      \u002F\u002F console.log(data[i])\n",[77,62502,62503],{"class":79,"line":35558},[77,62504,62505],{"class":87},"      \u002F\u002F 调用函数\n",[77,62507,62508],{"class":79,"line":35564},[77,62509,62510],{"class":87},"      toggle()\n",[77,62512,62513],{"class":79,"line":35613},[77,62514,35928],{"class":87},[77,62516,62517],{"class":79,"line":35660},[77,62518,4875],{"emptyLinePlaceholder":2549},[77,62520,62521],{"class":79,"line":35665},[77,62522,62523],{"class":87},"    \u002F\u002F 2. 左侧按钮业务\n",[77,62525,62526],{"class":79,"line":35671},[77,62527,62528],{"class":87},"    \u002F\u002F 2.1 获取左侧按钮 \n",[77,62530,62531],{"class":79,"line":35690},[77,62532,62533],{"class":87},"    const prev = document.querySelector('.prev')\n",[77,62535,62536],{"class":79,"line":35696},[77,62537,62446],{"class":87},[77,62539,62540],{"class":79,"line":35716},[77,62541,62542],{"class":87},"    prev.addEventListener('click', function () {\n",[77,62544,62545],{"class":79,"line":35722},[77,62546,62547],{"class":87},"      i--\n",[77,62549,62550],{"class":79,"line":35728},[77,62551,62552],{"class":87},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[77,62554,62555],{"class":79,"line":35738},[77,62556,62557],{"class":87},"      \u002F\u002F if (i \u003C 0) {\n",[77,62559,62560],{"class":79,"line":35743},[77,62561,62562],{"class":87},"      \u002F\u002F   i = 7\n",[77,62564,62565],{"class":79,"line":35749},[77,62566,62485],{"class":87},[77,62568,62569],{"class":79,"line":35765},[77,62570,62571],{"class":87},"      i = i \u003C 0 ? data.length - 1 : i\n",[77,62573,62574],{"class":79,"line":35810},[77,62575,62495],{"class":87},[77,62577,62578],{"class":79,"line":35816},[77,62579,62500],{"class":87},[77,62581,62582],{"class":79,"line":35822},[77,62583,62505],{"class":87},[77,62585,62586],{"class":79,"line":35828},[77,62587,62510],{"class":87},[77,62589,62590],{"class":79,"line":35839},[77,62591,35928],{"class":87},[77,62593,62594],{"class":79,"line":35845},[77,62595,4875],{"emptyLinePlaceholder":2549},[77,62597,62598],{"class":79,"line":35851},[77,62599,62600],{"class":87},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[77,62602,62603],{"class":79,"line":35857},[77,62604,62605],{"class":87},"    function toggle() {\n",[77,62607,62608],{"class":79,"line":35875},[77,62609,62610],{"class":87},"      \u002F\u002F 1.4 渲染对应的数据\n",[77,62612,62613],{"class":79,"line":35889},[77,62614,62615],{"class":87},"      img.src = data[i].url\n",[77,62617,62618],{"class":79,"line":35898},[77,62619,62620],{"class":87},"      p.innerHTML = data[i].title\n",[77,62622,62623],{"class":79,"line":35907},[77,62624,62625],{"class":87},"      footer.style.backgroundColor = data[i].color\n",[77,62627,62628],{"class":79,"line":35916},[77,62629,62630],{"class":87},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[77,62632,62633],{"class":79,"line":35925},[77,62634,62635],{"class":87},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[77,62637,62638],{"class":79,"line":35931},[77,62639,62640],{"class":87},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[77,62642,62643],{"class":79,"line":35937},[77,62644,4662],{"class":87},[77,62646,62647],{"class":79,"line":35945},[77,62648,4875],{"emptyLinePlaceholder":2549},[77,62650,62651],{"class":79,"line":35950},[77,62652,62653],{"class":87},"    \u002F\u002F 3. 自动播放模块\n",[77,62655,62656],{"class":79,"line":35956},[77,62657,62658],{"class":87},"    let timerId = setInterval(function () {\n",[77,62660,62661],{"class":79,"line":35967},[77,62662,62663],{"class":87},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[77,62665,62666],{"class":79,"line":35973},[77,62667,62668],{"class":87},"      next.click()\n",[77,62670,62671],{"class":79,"line":35993},[77,62672,62673],{"class":87},"    }, 1000)\n",[77,62675,62676],{"class":79,"line":35999},[77,62677,4875],{"emptyLinePlaceholder":2549},[77,62679,62680],{"class":79,"line":36005},[77,62681,62682],{"class":87},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[77,62684,62685],{"class":79,"line":36011},[77,62686,62687],{"class":87},"    const slider = document.querySelector('.slider')\n",[77,62689,62690],{"class":79,"line":36028},[77,62691,62692],{"class":87},"    \u002F\u002F 注册事件\n",[77,62694,62695],{"class":79,"line":36034},[77,62696,62697],{"class":87},"    slider.addEventListener('mouseenter', function () {\n",[77,62699,62700],{"class":79,"line":36040},[77,62701,62702],{"class":87},"      \u002F\u002F 停止定时器\n",[77,62704,62705],{"class":79,"line":36046},[77,62706,62707],{"class":87},"      clearInterval(timerId)\n",[77,62709,62710],{"class":79,"line":36052},[77,62711,35928],{"class":87},[77,62713,62714],{"class":79,"line":36058},[77,62715,4875],{"emptyLinePlaceholder":2549},[77,62717,62718],{"class":79,"line":36084},[77,62719,62720],{"class":87},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[77,62722,62723],{"class":79,"line":36108},[77,62724,62692],{"class":87},[77,62726,62727],{"class":79,"line":36114},[77,62728,62729],{"class":87},"    slider.addEventListener('mouseleave', function () {\n",[77,62731,62732],{"class":79,"line":36120},[77,62733,62702],{"class":87},[77,62735,62736],{"class":79,"line":36126},[77,62737,62738],{"class":87},"      if (timerId) clearInterval(timerId)\n",[77,62740,62741],{"class":79,"line":36137},[77,62742,62743],{"class":87},"      \u002F\u002F 开启定时器\n",[77,62745,62746],{"class":79,"line":36148},[77,62747,62748],{"class":87},"      timerId = setInterval(function () {\n",[77,62750,62751],{"class":79,"line":36154},[77,62752,62753],{"class":87},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[77,62755,62756],{"class":79,"line":36171},[77,62757,62758],{"class":87},"        next.click()\n",[77,62760,62761],{"class":79,"line":36194},[77,62762,62763],{"class":87},"      }, 1000)\n",[77,62765,62766],{"class":79,"line":36217},[77,62767,35928],{"class":87},[77,62769,62770,62772,62774],{"class":79,"line":36223},[77,62771,54875],{"class":87},[77,62773,54271],{"class":158},[77,62775,291],{"class":87},[77,62777,62778,62780,62782],{"class":79,"line":36228},[77,62779,351],{"class":87},[77,62781,54258],{"class":158},[77,62783,291],{"class":87},[77,62785,62786],{"class":79,"line":36237},[77,62787,4875],{"emptyLinePlaceholder":2549},[77,62789,62790,62792,62794],{"class":79,"line":36247},[77,62791,351],{"class":87},[77,62793,53101],{"class":158},[77,62795,291],{"class":87},[24468,62797,62799],{"id":62798},"_3252-焦点事件","3.2.5.2 焦点事件",[24,62801,62802],{},"小米搜索框案例：",[67,62804,62806],{"className":53099,"code":62805,"language":53101,"meta":72,"style":72},"\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",[74,62807,62808,62818,62832,62836,62844,62858,62878,62898,62910,62918,62924,62934,62944,62956,62960,62964,62971,62975,62986,62990,62994,63001,63012,63025,63039,63043,63047,63056,63068,63080,63094,63107,63120,63138,63149,63153,63157,63166,63183,63187,63191,63198,63208,63218,63229,63242,63254,63270,63281,63293,63297,63301,63309,63319,63336,63348,63360,63371,63375,63379,63390,63401,63405,63413,63417,63425,63429,63437,63452,63474,63489,63520,63547,63574,63601,63628,63655,63682,63691,63699,63707,63712,63732,63752,63757,63762,63780,63785,63795,63800,63814,63819,63824,63841,63850,63862,63866,63874,63882,63886],{"__ignoreMap":72},[77,62809,62810,62812,62814,62816],{"class":79,"line":80},[77,62811,53763],{"class":87},[77,62813,53766],{"class":158},[77,62815,53769],{"class":83},[77,62817,291],{"class":87},[77,62819,62820,62822,62824,62826,62828,62830],{"class":79,"line":91},[77,62821,260],{"class":87},[77,62823,53101],{"class":158},[77,62825,53780],{"class":83},[77,62827,268],{"class":87},[77,62829,53785],{"class":271},[77,62831,291],{"class":87},[77,62833,62834],{"class":79,"line":107},[77,62835,4875],{"emptyLinePlaceholder":2549},[77,62837,62838,62840,62842],{"class":79,"line":191},[77,62839,260],{"class":87},[77,62841,53798],{"class":158},[77,62843,291],{"class":87},[77,62845,62846,62848,62850,62852,62854,62856],{"class":79,"line":1543},[77,62847,53805],{"class":87},[77,62849,53808],{"class":158},[77,62851,53811],{"class":83},[77,62853,268],{"class":87},[77,62855,53816],{"class":271},[77,62857,291],{"class":87},[77,62859,62860,62862,62864,62866,62868,62870,62872,62874,62876],{"class":79,"line":1549},[77,62861,53805],{"class":87},[77,62863,53808],{"class":158},[77,62865,53827],{"class":83},[77,62867,268],{"class":87},[77,62869,53832],{"class":271},[77,62871,53835],{"class":83},[77,62873,268],{"class":87},[77,62875,53840],{"class":271},[77,62877,291],{"class":87},[77,62879,62880,62882,62884,62886,62888,62890,62892,62894,62896],{"class":79,"line":1566},[77,62881,53805],{"class":87},[77,62883,53808],{"class":158},[77,62885,2495],{"class":83},[77,62887,268],{"class":87},[77,62889,53855],{"class":271},[77,62891,53835],{"class":83},[77,62893,268],{"class":87},[77,62895,53862],{"class":271},[77,62897,291],{"class":87},[77,62899,62900,62902,62904,62906,62908],{"class":79,"line":1572},[77,62901,53805],{"class":87},[77,62903,53871],{"class":158},[77,62905,53874],{"class":87},[77,62907,53871],{"class":158},[77,62909,291],{"class":87},[77,62911,62912,62914,62916],{"class":79,"line":1589},[77,62913,53805],{"class":87},[77,62915,2520],{"class":158},[77,62917,291],{"class":87},[77,62919,62920,62922],{"class":79,"line":1595},[77,62921,53891],{"class":158},[77,62923,88],{"class":87},[77,62925,62926,62928,62930,62932],{"class":79,"line":4088},[77,62927,53898],{"class":94},[77,62929,98],{"class":87},[77,62931,1939],{"class":94},[77,62933,104],{"class":87},[77,62935,62936,62938,62940,62942],{"class":79,"line":4093},[77,62937,53909],{"class":94},[77,62939,98],{"class":87},[77,62941,1939],{"class":94},[77,62943,104],{"class":87},[77,62945,62946,62949,62951,62954],{"class":79,"line":4099},[77,62947,62948],{"class":94},"            box-sizing",[77,62950,98],{"class":87},[77,62952,62953],{"class":94},"border-box",[77,62955,104],{"class":87},[77,62957,62958],{"class":79,"line":4104},[77,62959,5004],{"class":87},[77,62961,62962],{"class":79,"line":4118},[77,62963,4875],{"emptyLinePlaceholder":2549},[77,62965,62966,62969],{"class":79,"line":4123},[77,62967,62968],{"class":158},"        ul",[77,62970,88],{"class":87},[77,62972,62973],{"class":79,"line":4129},[77,62974,4875],{"emptyLinePlaceholder":2549},[77,62976,62977,62980,62982,62984],{"class":79,"line":4150},[77,62978,62979],{"class":94},"            list-style",[77,62981,98],{"class":87},[77,62983,186],{"class":94},[77,62985,104],{"class":87},[77,62987,62988],{"class":79,"line":4155},[77,62989,5004],{"class":87},[77,62991,62992],{"class":79,"line":4169},[77,62993,4875],{"emptyLinePlaceholder":2549},[77,62995,62996,62999],{"class":79,"line":4174},[77,62997,62998],{"class":83},"        .mi",[77,63000,88],{"class":87},[77,63002,63003,63006,63008,63010],{"class":79,"line":4203},[77,63004,63005],{"class":94},"            position",[77,63007,98],{"class":87},[77,63009,1538],{"class":94},[77,63011,104],{"class":87},[77,63013,63014,63016,63018,63021,63023],{"class":79,"line":4208},[77,63015,53947],{"class":94},[77,63017,98],{"class":87},[77,63019,63020],{"class":94},"223",[77,63022,2124],{"class":2123},[77,63024,104],{"class":87},[77,63026,63027,63029,63031,63033,63035,63037],{"class":79,"line":4225},[77,63028,53898],{"class":94},[77,63030,98],{"class":87},[77,63032,2925],{"class":94},[77,63034,2124],{"class":2123},[77,63036,1942],{"class":94},[77,63038,104],{"class":87},[77,63040,63041],{"class":79,"line":4230},[77,63042,5004],{"class":87},[77,63044,63045],{"class":79,"line":4235},[77,63046,4875],{"emptyLinePlaceholder":2549},[77,63048,63049,63051,63054],{"class":79,"line":4240},[77,63050,62998],{"class":83},[77,63052,63053],{"class":158}," input",[77,63055,88],{"class":87},[77,63057,63058,63060,63062,63064,63066],{"class":79,"line":4254},[77,63059,53947],{"class":94},[77,63061,98],{"class":87},[77,63063,63020],{"class":94},[77,63065,2124],{"class":2123},[77,63067,104],{"class":87},[77,63069,63070,63072,63074,63076,63078],{"class":79,"line":4259},[77,63071,53961],{"class":94},[77,63073,98],{"class":87},[77,63075,3220],{"class":94},[77,63077,2124],{"class":2123},[77,63079,104],{"class":87},[77,63081,63082,63084,63086,63088,63090,63092],{"class":79,"line":5052},[77,63083,53909],{"class":94},[77,63085,98],{"class":87},[77,63087,1939],{"class":94},[77,63089,4513],{"class":94},[77,63091,2124],{"class":2123},[77,63093,104],{"class":87},[77,63095,63096,63099,63101,63103,63105],{"class":79,"line":5066},[77,63097,63098],{"class":94},"            font-size",[77,63100,98],{"class":87},[77,63102,3162],{"class":94},[77,63104,2124],{"class":2123},[77,63106,104],{"class":87},[77,63108,63109,63112,63114,63116,63118],{"class":79,"line":5074},[77,63110,63111],{"class":94},"            line-height",[77,63113,98],{"class":87},[77,63115,3220],{"class":94},[77,63117,2124],{"class":2123},[77,63119,104],{"class":87},[77,63121,63122,63125,63127,63129,63131,63133,63136],{"class":79,"line":5079},[77,63123,63124],{"class":94},"            border",[77,63126,98],{"class":87},[77,63128,2120],{"class":94},[77,63130,2124],{"class":2123},[77,63132,2127],{"class":94},[77,63134,63135],{"class":94}," #e0e0e0",[77,63137,104],{"class":87},[77,63139,63140,63143,63145,63147],{"class":79,"line":5085},[77,63141,63142],{"class":94},"            outline",[77,63144,98],{"class":87},[77,63146,186],{"class":94},[77,63148,104],{"class":87},[77,63150,63151],{"class":79,"line":5091},[77,63152,5004],{"class":87},[77,63154,63155],{"class":79,"line":5096},[77,63156,4875],{"emptyLinePlaceholder":2549},[77,63158,63159,63161,63164],{"class":79,"line":10422},[77,63160,62998],{"class":83},[77,63162,63163],{"class":83}," .search",[77,63165,88],{"class":87},[77,63167,63168,63170,63172,63174,63176,63178,63181],{"class":79,"line":10446},[77,63169,63124],{"class":94},[77,63171,98],{"class":87},[77,63173,2120],{"class":94},[77,63175,2124],{"class":2123},[77,63177,2127],{"class":94},[77,63179,63180],{"class":94}," #ff6700",[77,63182,104],{"class":87},[77,63184,63185],{"class":79,"line":10451},[77,63186,5004],{"class":87},[77,63188,63189],{"class":79,"line":10457},[77,63190,4875],{"emptyLinePlaceholder":2549},[77,63192,63193,63196],{"class":79,"line":10484},[77,63194,63195],{"class":83},"        .result-list",[77,63197,88],{"class":87},[77,63199,63200,63202,63204,63206],{"class":79,"line":10489},[77,63201,53935],{"class":94},[77,63203,98],{"class":87},[77,63205,186],{"class":94},[77,63207,104],{"class":87},[77,63209,63210,63212,63214,63216],{"class":79,"line":10495},[77,63211,63005],{"class":94},[77,63213,98],{"class":87},[77,63215,1561],{"class":94},[77,63217,104],{"class":87},[77,63219,63220,63223,63225,63227],{"class":79,"line":10507},[77,63221,63222],{"class":94},"            left",[77,63224,98],{"class":87},[77,63226,1939],{"class":94},[77,63228,104],{"class":87},[77,63230,63231,63234,63236,63238,63240],{"class":79,"line":10519},[77,63232,63233],{"class":94},"            top",[77,63235,98],{"class":87},[77,63237,3220],{"class":94},[77,63239,2124],{"class":2123},[77,63241,104],{"class":87},[77,63243,63244,63246,63248,63250,63252],{"class":79,"line":10531},[77,63245,53947],{"class":94},[77,63247,98],{"class":87},[77,63249,63020],{"class":94},[77,63251,2124],{"class":2123},[77,63253,104],{"class":87},[77,63255,63256,63258,63260,63262,63264,63266,63268],{"class":79,"line":12189},[77,63257,63124],{"class":94},[77,63259,98],{"class":87},[77,63261,2120],{"class":94},[77,63263,2124],{"class":2123},[77,63265,2127],{"class":94},[77,63267,63180],{"class":94},[77,63269,104],{"class":87},[77,63271,63272,63275,63277,63279],{"class":79,"line":12214},[77,63273,63274],{"class":94},"            border-top",[77,63276,98],{"class":87},[77,63278,1939],{"class":94},[77,63280,104],{"class":87},[77,63282,63283,63286,63288,63291],{"class":79,"line":12237},[77,63284,63285],{"class":94},"            background",[77,63287,98],{"class":87},[77,63289,63290],{"class":94},"#fff",[77,63292,104],{"class":87},[77,63294,63295],{"class":79,"line":12261},[77,63296,5004],{"class":87},[77,63298,63299],{"class":79,"line":12266},[77,63300,4875],{"emptyLinePlaceholder":2549},[77,63302,63303,63305,63307],{"class":79,"line":12271},[77,63304,63195],{"class":83},[77,63306,3876],{"class":158},[77,63308,88],{"class":87},[77,63310,63311,63313,63315,63317],{"class":79,"line":12276},[77,63312,53935],{"class":94},[77,63314,98],{"class":87},[77,63316,456],{"class":94},[77,63318,104],{"class":87},[77,63320,63321,63323,63325,63327,63329,63332,63334],{"class":79,"line":12285},[77,63322,53909],{"class":94},[77,63324,98],{"class":87},[77,63326,2958],{"class":94},[77,63328,2124],{"class":2123},[77,63330,63331],{"class":94}," 15",[77,63333,2124],{"class":2123},[77,63335,104],{"class":87},[77,63337,63338,63340,63342,63344,63346],{"class":79,"line":12290},[77,63339,63098],{"class":94},[77,63341,98],{"class":87},[77,63343,3111],{"class":94},[77,63345,2124],{"class":2123},[77,63347,104],{"class":87},[77,63349,63350,63353,63355,63358],{"class":79,"line":12296},[77,63351,63352],{"class":94},"            color",[77,63354,98],{"class":87},[77,63356,63357],{"class":94},"#424242",[77,63359,104],{"class":87},[77,63361,63362,63365,63367,63369],{"class":79,"line":12317},[77,63363,63364],{"class":94},"            text-decoration",[77,63366,98],{"class":87},[77,63368,186],{"class":94},[77,63370,104],{"class":87},[77,63372,63373],{"class":79,"line":12323},[77,63374,5004],{"class":87},[77,63376,63377],{"class":79,"line":12337},[77,63378,4875],{"emptyLinePlaceholder":2549},[77,63380,63381,63383,63385,63388],{"class":79,"line":12343},[77,63382,63195],{"class":83},[77,63384,3876],{"class":158},[77,63386,63387],{"class":83},":hover",[77,63389,88],{"class":87},[77,63391,63392,63394,63396,63399],{"class":79,"line":12370},[77,63393,54099],{"class":94},[77,63395,98],{"class":87},[77,63397,63398],{"class":94},"#eee",[77,63400,104],{"class":87},[77,63402,63403],{"class":79,"line":12379},[77,63404,5004],{"class":87},[77,63406,63407,63409,63411],{"class":79,"line":12385},[77,63408,54235],{"class":87},[77,63410,2520],{"class":158},[77,63412,291],{"class":87},[77,63414,63415],{"class":79,"line":12393},[77,63416,4875],{"emptyLinePlaceholder":2549},[77,63418,63419,63421,63423],{"class":79,"line":12398},[77,63420,351],{"class":87},[77,63422,53798],{"class":158},[77,63424,291],{"class":87},[77,63426,63427],{"class":79,"line":19074},[77,63428,4875],{"emptyLinePlaceholder":2549},[77,63430,63431,63433,63435],{"class":79,"line":19080},[77,63432,260],{"class":87},[77,63434,54258],{"class":158},[77,63436,291],{"class":87},[77,63438,63439,63441,63443,63445,63447,63450],{"class":79,"line":19103},[77,63440,53805],{"class":87},[77,63442,331],{"class":158},[77,63444,334],{"class":83},[77,63446,268],{"class":87},[77,63448,63449],{"class":271},"\"mi\"",[77,63451,291],{"class":87},[77,63453,63454,63456,63458,63460,63462,63465,63467,63469,63472],{"class":79,"line":19109},[77,63455,57750],{"class":87},[77,63457,159],{"class":158},[77,63459,2487],{"class":83},[77,63461,268],{"class":87},[77,63463,63464],{"class":271},"\"search\"",[77,63466,2503],{"class":83},[77,63468,268],{"class":87},[77,63470,63471],{"class":271},"\"小米笔记本\"",[77,63473,291],{"class":87},[77,63475,63476,63478,63480,63482,63484,63487],{"class":79,"line":19132},[77,63477,57750],{"class":87},[77,63479,51],{"class":158},[77,63481,334],{"class":83},[77,63483,268],{"class":87},[77,63485,63486],{"class":271},"\"result-list\"",[77,63488,291],{"class":87},[77,63490,63491,63494,63496,63499,63501,63504,63506,63509,63512,63514,63516,63518],{"class":79,"line":19146},[77,63492,63493],{"class":87},"            \u003C",[77,63495,54],{"class":158},[77,63497,63498],{"class":87},">\u003C",[77,63500,417],{"class":158},[77,63502,63503],{"class":83}," href",[77,63505,268],{"class":87},[77,63507,63508],{"class":271},"\"#\"",[77,63510,63511],{"class":87},">全部商品\u003C\u002F",[77,63513,417],{"class":158},[77,63515,57762],{"class":87},[77,63517,54],{"class":158},[77,63519,291],{"class":87},[77,63521,63522,63524,63526,63528,63530,63532,63534,63536,63539,63541,63543,63545],{"class":79,"line":19166},[77,63523,63493],{"class":87},[77,63525,54],{"class":158},[77,63527,63498],{"class":87},[77,63529,417],{"class":158},[77,63531,63503],{"class":83},[77,63533,268],{"class":87},[77,63535,63508],{"class":271},[77,63537,63538],{"class":87},">小米11\u003C\u002F",[77,63540,417],{"class":158},[77,63542,57762],{"class":87},[77,63544,54],{"class":158},[77,63546,291],{"class":87},[77,63548,63549,63551,63553,63555,63557,63559,63561,63563,63566,63568,63570,63572],{"class":79,"line":19172},[77,63550,63493],{"class":87},[77,63552,54],{"class":158},[77,63554,63498],{"class":87},[77,63556,417],{"class":158},[77,63558,63503],{"class":83},[77,63560,268],{"class":87},[77,63562,63508],{"class":271},[77,63564,63565],{"class":87},">小米10S\u003C\u002F",[77,63567,417],{"class":158},[77,63569,57762],{"class":87},[77,63571,54],{"class":158},[77,63573,291],{"class":87},[77,63575,63576,63578,63580,63582,63584,63586,63588,63590,63593,63595,63597,63599],{"class":79,"line":19183},[77,63577,63493],{"class":87},[77,63579,54],{"class":158},[77,63581,63498],{"class":87},[77,63583,417],{"class":158},[77,63585,63503],{"class":83},[77,63587,268],{"class":87},[77,63589,63508],{"class":271},[77,63591,63592],{"class":87},">小米笔记本\u003C\u002F",[77,63594,417],{"class":158},[77,63596,57762],{"class":87},[77,63598,54],{"class":158},[77,63600,291],{"class":87},[77,63602,63603,63605,63607,63609,63611,63613,63615,63617,63620,63622,63624,63626],{"class":79,"line":19206},[77,63604,63493],{"class":87},[77,63606,54],{"class":158},[77,63608,63498],{"class":87},[77,63610,417],{"class":158},[77,63612,63503],{"class":83},[77,63614,268],{"class":87},[77,63616,63508],{"class":271},[77,63618,63619],{"class":87},">小米手机\u003C\u002F",[77,63621,417],{"class":158},[77,63623,57762],{"class":87},[77,63625,54],{"class":158},[77,63627,291],{"class":87},[77,63629,63630,63632,63634,63636,63638,63640,63642,63644,63647,63649,63651,63653],{"class":79,"line":19228},[77,63631,63493],{"class":87},[77,63633,54],{"class":158},[77,63635,63498],{"class":87},[77,63637,417],{"class":158},[77,63639,63503],{"class":83},[77,63641,268],{"class":87},[77,63643,63508],{"class":271},[77,63645,63646],{"class":87},">黑鲨4\u003C\u002F",[77,63648,417],{"class":158},[77,63650,57762],{"class":87},[77,63652,54],{"class":158},[77,63654,291],{"class":87},[77,63656,63657,63659,63661,63663,63665,63667,63669,63671,63674,63676,63678,63680],{"class":79,"line":19233},[77,63658,63493],{"class":87},[77,63660,54],{"class":158},[77,63662,63498],{"class":87},[77,63664,417],{"class":158},[77,63666,63503],{"class":83},[77,63668,268],{"class":87},[77,63670,63508],{"class":271},[77,63672,63673],{"class":87},">空调\u003C\u002F",[77,63675,417],{"class":158},[77,63677,57762],{"class":87},[77,63679,54],{"class":158},[77,63681,291],{"class":87},[77,63683,63684,63687,63689],{"class":79,"line":19239},[77,63685,63686],{"class":87},"        \u003C\u002F",[77,63688,51],{"class":158},[77,63690,291],{"class":87},[77,63692,63693,63695,63697],{"class":79,"line":19253},[77,63694,54235],{"class":87},[77,63696,331],{"class":158},[77,63698,291],{"class":87},[77,63700,63701,63703,63705],{"class":79,"line":19266},[77,63702,53805],{"class":87},[77,63704,54271],{"class":158},[77,63706,291],{"class":87},[77,63708,63709],{"class":79,"line":19271},[77,63710,63711],{"class":323},"        \u002F\u002F 1. 获取元素\n",[77,63713,63714,63717,63719,63721,63723,63725,63727,63730],{"class":79,"line":19285},[77,63715,63716],{"class":2123},"        const",[77,63718,63053],{"class":94},[77,63720,16036],{"class":2123},[77,63722,56850],{"class":87},[77,63724,56853],{"class":83},[77,63726,2622],{"class":87},[77,63728,63729],{"class":271},"'[type=search]'",[77,63731,2628],{"class":87},[77,63733,63734,63736,63739,63741,63743,63745,63747,63750],{"class":79,"line":19290},[77,63735,63716],{"class":2123},[77,63737,63738],{"class":94}," ul",[77,63740,16036],{"class":2123},[77,63742,56850],{"class":87},[77,63744,56853],{"class":83},[77,63746,2622],{"class":87},[77,63748,63749],{"class":271},"'.result-list'",[77,63751,2628],{"class":87},[77,63753,63754],{"class":79,"line":19296},[77,63755,63756],{"class":323},"        \u002F\u002F console.log(input)\n",[77,63758,63759],{"class":79,"line":19301},[77,63760,63761],{"class":323},"        \u002F\u002F 2. 监听事件 获得焦点\n",[77,63763,63764,63767,63769,63771,63774,63776,63778],{"class":79,"line":19315},[77,63765,63766],{"class":87},"        input.",[77,63768,60261],{"class":83},[77,63770,2622],{"class":87},[77,63772,63773],{"class":271},"'focus'",[77,63775,680],{"class":87},[77,63777,56903],{"class":2123},[77,63779,56906],{"class":87},[77,63781,63782],{"class":79,"line":19320},[77,63783,63784],{"class":323},"            \u002F\u002F ul显示\n",[77,63786,63787,63790,63792],{"class":79,"line":19325},[77,63788,63789],{"class":87},"            ul.style.display ",[77,63791,268],{"class":2123},[77,63793,63794],{"class":271}," 'block'\n",[77,63796,63797],{"class":79,"line":19339},[77,63798,63799],{"class":323},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[77,63801,63802,63805,63807,63809,63812],{"class":79,"line":19351},[77,63803,63804],{"class":87},"            input.classList.",[77,63806,7809],{"class":83},[77,63808,2622],{"class":87},[77,63810,63811],{"class":271},"'search'",[77,63813,2628],{"class":87},[77,63815,63816],{"class":79,"line":19356},[77,63817,63818],{"class":87},"        })\n",[77,63820,63821],{"class":79,"line":19369},[77,63822,63823],{"class":323},"        \u002F\u002F 3. 监听事件 失去焦点\n",[77,63825,63826,63828,63830,63832,63835,63837,63839],{"class":79,"line":19374},[77,63827,63766],{"class":87},[77,63829,60261],{"class":83},[77,63831,2622],{"class":87},[77,63833,63834],{"class":271},"'blur'",[77,63836,680],{"class":87},[77,63838,56903],{"class":2123},[77,63840,56906],{"class":87},[77,63842,63843,63845,63847],{"class":79,"line":19379},[77,63844,63789],{"class":87},[77,63846,268],{"class":2123},[77,63848,63849],{"class":271}," 'none'\n",[77,63851,63852,63854,63856,63858,63860],{"class":79,"line":19384},[77,63853,63804],{"class":87},[77,63855,59454],{"class":83},[77,63857,2622],{"class":87},[77,63859,63811],{"class":271},[77,63861,2628],{"class":87},[77,63863,63864],{"class":79,"line":19397},[77,63865,63818],{"class":87},[77,63867,63868,63870,63872],{"class":79,"line":19402},[77,63869,54235],{"class":87},[77,63871,54271],{"class":158},[77,63873,291],{"class":87},[77,63875,63876,63878,63880],{"class":79,"line":35100},[77,63877,351],{"class":87},[77,63879,54258],{"class":158},[77,63881,291],{"class":87},[77,63883,63884],{"class":79,"line":35106},[77,63885,4875],{"emptyLinePlaceholder":2549},[77,63887,63888,63890,63892],{"class":79,"line":35112},[77,63889,351],{"class":87},[77,63891,53101],{"class":158},[77,63893,291],{"class":87},[24468,63895,63897],{"id":63896},"_3253-键盘事件","3.2.5.3 键盘事件",[24,63899,63900],{},"评论字数统计案例",[24,63902,63903],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[24,63905,63906],{},"牢记focus伪类选择器",[53808,63908],{"charSet":63909},"UTF-8",[53808,63911],{"name":63912,"content":63913},"viewport","width=device-width, initial-scale=1.0",[53871,63915,63916],{},"Document",[2520,63918,63919],{},"\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",[159,63921],{"type":7662},[51,63923,63924,63927],{},[54,63925,63926],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[54,63928,63929],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[67,63931,63933],{"className":53099,"code":63932,"language":53101,"meta":72,"style":72},"\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",[74,63934,63935,63945,63959,63963,63971,63985,64005,64025,64038,64046,64053,64066,64080,64090,64100,64104,64108,64115,64127,64139,64151,64162,64191,64204,64208,64212,64221,64232,64244,64255,64266,64278,64289,64301,64317,64329,64333,64337,64347,64358,64368,64380,64384,64388,64396,64407,64417,64428,64440,64453,64465,64477,64481,64485,64494,64506,64517,64530,64541,64555,64559,64563,64570,64582,64594,64604,64608,64612,64621,64633,64643,64647,64651,64662,64672,64691,64704,64708,64712,64722,64732,64736,64740,64751,64762,64774,64786,64790,64794,64805,64816,64830,64834,64838,64849,64859,64871,64875,64883,64891,64895,64903,64918,64937,64977,64990,64998,65012,65032,65040,65055,65078,65096,65111,65131,65150,65170,65178,65186,65194,65202,65222,65242,65247,65264,65273,65277,65282,65298,65306,65310,65315,65332,65337,65362,65366,65370,65375,65380,65388,65396,65400],{"__ignoreMap":72},[77,63936,63937,63939,63941,63943],{"class":79,"line":80},[77,63938,53763],{"class":87},[77,63940,53766],{"class":158},[77,63942,53769],{"class":83},[77,63944,291],{"class":87},[77,63946,63947,63949,63951,63953,63955,63957],{"class":79,"line":91},[77,63948,260],{"class":87},[77,63950,53101],{"class":158},[77,63952,53780],{"class":83},[77,63954,268],{"class":87},[77,63956,53785],{"class":271},[77,63958,291],{"class":87},[77,63960,63961],{"class":79,"line":107},[77,63962,4875],{"emptyLinePlaceholder":2549},[77,63964,63965,63967,63969],{"class":79,"line":191},[77,63966,260],{"class":87},[77,63968,53798],{"class":158},[77,63970,291],{"class":87},[77,63972,63973,63975,63977,63979,63981,63983],{"class":79,"line":1543},[77,63974,54602],{"class":87},[77,63976,53808],{"class":158},[77,63978,53811],{"class":83},[77,63980,268],{"class":87},[77,63982,53816],{"class":271},[77,63984,291],{"class":87},[77,63986,63987,63989,63991,63993,63995,63997,63999,64001,64003],{"class":79,"line":1549},[77,63988,54602],{"class":87},[77,63990,53808],{"class":158},[77,63992,53827],{"class":83},[77,63994,268],{"class":87},[77,63996,53832],{"class":271},[77,63998,53835],{"class":83},[77,64000,268],{"class":87},[77,64002,53840],{"class":271},[77,64004,291],{"class":87},[77,64006,64007,64009,64011,64013,64015,64017,64019,64021,64023],{"class":79,"line":1566},[77,64008,54602],{"class":87},[77,64010,53808],{"class":158},[77,64012,2495],{"class":83},[77,64014,268],{"class":87},[77,64016,53855],{"class":271},[77,64018,53835],{"class":83},[77,64020,268],{"class":87},[77,64022,53862],{"class":271},[77,64024,291],{"class":87},[77,64026,64027,64029,64031,64034,64036],{"class":79,"line":1572},[77,64028,54602],{"class":87},[77,64030,53871],{"class":158},[77,64032,64033],{"class":87},">评论回车发布\u003C\u002F",[77,64035,53871],{"class":158},[77,64037,291],{"class":87},[77,64039,64040,64042,64044],{"class":79,"line":1589},[77,64041,54602],{"class":87},[77,64043,2520],{"class":158},[77,64045,291],{"class":87},[77,64047,64048,64051],{"class":79,"line":1595},[77,64049,64050],{"class":83},"    .wrapper",[77,64052,88],{"class":87},[77,64054,64055,64058,64060,64062,64064],{"class":79,"line":4088},[77,64056,64057],{"class":94},"      min-width",[77,64059,98],{"class":87},[77,64061,6462],{"class":94},[77,64063,2124],{"class":2123},[77,64065,104],{"class":87},[77,64067,64068,64071,64073,64076,64078],{"class":79,"line":4093},[77,64069,64070],{"class":94},"      max-width",[77,64072,98],{"class":87},[77,64074,64075],{"class":94},"800",[77,64077,2124],{"class":2123},[77,64079,104],{"class":87},[77,64081,64082,64084,64086,64088],{"class":79,"line":4099},[77,64083,57459],{"class":94},[77,64085,98],{"class":87},[77,64087,53940],{"class":94},[77,64089,104],{"class":87},[77,64091,64092,64094,64096,64098],{"class":79,"line":4104},[77,64093,57470],{"class":94},[77,64095,98],{"class":87},[77,64097,54040],{"class":94},[77,64099,104],{"class":87},[77,64101,64102],{"class":79,"line":4118},[77,64103,4662],{"class":87},[77,64105,64106],{"class":79,"line":4123},[77,64107,4875],{"emptyLinePlaceholder":2549},[77,64109,64110,64113],{"class":79,"line":4129},[77,64111,64112],{"class":83},"    .avatar",[77,64114,88],{"class":87},[77,64116,64117,64119,64121,64123,64125],{"class":79,"line":4150},[77,64118,57223],{"class":94},[77,64120,98],{"class":87},[77,64122,3220],{"class":94},[77,64124,2124],{"class":2123},[77,64126,104],{"class":87},[77,64128,64129,64131,64133,64135,64137],{"class":79,"line":4155},[77,64130,57237],{"class":94},[77,64132,98],{"class":87},[77,64134,3220],{"class":94},[77,64136,2124],{"class":2123},[77,64138,104],{"class":87},[77,64140,64141,64143,64145,64147,64149],{"class":79,"line":4169},[77,64142,57584],{"class":94},[77,64144,98],{"class":87},[77,64146,3269],{"class":94},[77,64148,2942],{"class":2123},[77,64150,104],{"class":87},[77,64152,64153,64156,64158,64160],{"class":79,"line":4174},[77,64154,64155],{"class":94},"      overflow",[77,64157,98],{"class":87},[77,64159,556],{"class":94},[77,64161,104],{"class":87},[77,64163,64164,64167,64169,64172,64174,64177,64179,64182,64184,64186,64189],{"class":79,"line":4203},[77,64165,64166],{"class":94},"      background",[77,64168,98],{"class":87},[77,64170,64171],{"class":94},"url",[77,64173,2622],{"class":87},[77,64175,64176],{"class":7691},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[77,64178,16186],{"class":87},[77,64180,64181],{"class":94},"no-repeat",[77,64183,19614],{"class":94},[77,64185,27446],{"class":87},[77,64187,64188],{"class":94},"cover",[77,64190,104],{"class":87},[77,64192,64193,64196,64198,64200,64202],{"class":79,"line":4208},[77,64194,64195],{"class":94},"      margin-right",[77,64197,98],{"class":87},[77,64199,3313],{"class":94},[77,64201,2124],{"class":2123},[77,64203,104],{"class":87},[77,64205,64206],{"class":79,"line":4225},[77,64207,4662],{"class":87},[77,64209,64210],{"class":79,"line":4230},[77,64211,4875],{"emptyLinePlaceholder":2549},[77,64213,64214,64216,64219],{"class":79,"line":4235},[77,64215,64050],{"class":83},[77,64217,64218],{"class":158}," textarea",[77,64220,88],{"class":87},[77,64222,64223,64226,64228,64230],{"class":79,"line":4240},[77,64224,64225],{"class":94},"      outline",[77,64227,98],{"class":87},[77,64229,186],{"class":94},[77,64231,104],{"class":87},[77,64233,64234,64237,64239,64242],{"class":79,"line":4254},[77,64235,64236],{"class":94},"      border-color",[77,64238,98],{"class":87},[77,64240,64241],{"class":94},"transparent",[77,64243,104],{"class":87},[77,64245,64246,64249,64251,64253],{"class":79,"line":4259},[77,64247,64248],{"class":94},"      resize",[77,64250,98],{"class":87},[77,64252,186],{"class":94},[77,64254,104],{"class":87},[77,64256,64257,64259,64261,64264],{"class":79,"line":5052},[77,64258,64166],{"class":94},[77,64260,98],{"class":87},[77,64262,64263],{"class":94},"#f5f5f5",[77,64265,104],{"class":87},[77,64267,64268,64270,64272,64274,64276],{"class":79,"line":5066},[77,64269,57584],{"class":94},[77,64271,98],{"class":87},[77,64273,2907],{"class":94},[77,64275,2124],{"class":2123},[77,64277,104],{"class":87},[77,64279,64280,64283,64285,64287],{"class":79,"line":5074},[77,64281,64282],{"class":94},"      flex",[77,64284,98],{"class":87},[77,64286,2120],{"class":94},[77,64288,104],{"class":87},[77,64290,64291,64293,64295,64297,64299],{"class":79,"line":5079},[77,64292,57149],{"class":94},[77,64294,98],{"class":87},[77,64296,3059],{"class":94},[77,64298,2124],{"class":2123},[77,64300,104],{"class":87},[77,64302,64303,64306,64308,64310,64313,64315],{"class":79,"line":5085},[77,64304,64305],{"class":94},"      transition",[77,64307,98],{"class":87},[77,64309,30589],{"class":94},[77,64311,64312],{"class":94}," 0.5",[77,64314,3308],{"class":2123},[77,64316,104],{"class":87},[77,64318,64319,64321,64323,64325,64327],{"class":79,"line":5091},[77,64320,57237],{"class":94},[77,64322,98],{"class":87},[77,64324,3563],{"class":94},[77,64326,2124],{"class":2123},[77,64328,104],{"class":87},[77,64330,64331],{"class":79,"line":5096},[77,64332,4662],{"class":87},[77,64334,64335],{"class":79,"line":10422},[77,64336,4875],{"emptyLinePlaceholder":2549},[77,64338,64339,64341,64343,64345],{"class":79,"line":10446},[77,64340,64050],{"class":83},[77,64342,64218],{"class":158},[77,64344,162],{"class":83},[77,64346,88],{"class":87},[77,64348,64349,64351,64353,64356],{"class":79,"line":10451},[77,64350,64236],{"class":94},[77,64352,98],{"class":87},[77,64354,64355],{"class":94},"#e4e4e4",[77,64357,104],{"class":87},[77,64359,64360,64362,64364,64366],{"class":79,"line":10457},[77,64361,64166],{"class":94},[77,64363,98],{"class":87},[77,64365,63290],{"class":94},[77,64367,104],{"class":87},[77,64369,64370,64372,64374,64376,64378],{"class":79,"line":10484},[77,64371,57237],{"class":94},[77,64373,98],{"class":87},[77,64375,3269],{"class":94},[77,64377,2124],{"class":2123},[77,64379,104],{"class":87},[77,64381,64382],{"class":79,"line":10489},[77,64383,4662],{"class":87},[77,64385,64386],{"class":79,"line":10495},[77,64387,4875],{"emptyLinePlaceholder":2549},[77,64389,64390,64392,64394],{"class":79,"line":10507},[77,64391,64050],{"class":83},[77,64393,59915],{"class":158},[77,64395,88],{"class":87},[77,64397,64398,64400,64402,64405],{"class":79,"line":10519},[77,64399,64166],{"class":94},[77,64401,98],{"class":87},[77,64403,64404],{"class":94},"#00aeec",[77,64406,104],{"class":87},[77,64408,64409,64411,64413,64415],{"class":79,"line":10531},[77,64410,59864],{"class":94},[77,64412,98],{"class":87},[77,64414,63290],{"class":94},[77,64416,104],{"class":87},[77,64418,64419,64422,64424,64426],{"class":79,"line":12189},[77,64420,64421],{"class":94},"      border",[77,64423,98],{"class":87},[77,64425,186],{"class":94},[77,64427,104],{"class":87},[77,64429,64430,64432,64434,64436,64438],{"class":79,"line":12214},[77,64431,57584],{"class":94},[77,64433,98],{"class":87},[77,64435,2907],{"class":94},[77,64437,2124],{"class":2123},[77,64439,104],{"class":87},[77,64441,64442,64445,64447,64449,64451],{"class":79,"line":12237},[77,64443,64444],{"class":94},"      margin-left",[77,64446,98],{"class":87},[77,64448,3059],{"class":94},[77,64450,2124],{"class":2123},[77,64452,104],{"class":87},[77,64454,64455,64457,64459,64461,64463],{"class":79,"line":12261},[77,64456,57223],{"class":94},[77,64458,98],{"class":87},[77,64460,2970],{"class":94},[77,64462,2124],{"class":2123},[77,64464,104],{"class":87},[77,64466,64467,64470,64472,64475],{"class":79,"line":12266},[77,64468,64469],{"class":94},"      cursor",[77,64471,98],{"class":87},[77,64473,64474],{"class":94},"pointer",[77,64476,104],{"class":87},[77,64478,64479],{"class":79,"line":12271},[77,64480,4662],{"class":87},[77,64482,64483],{"class":79,"line":12276},[77,64484,4875],{"emptyLinePlaceholder":2549},[77,64486,64487,64489,64492],{"class":79,"line":12285},[77,64488,64050],{"class":83},[77,64490,64491],{"class":83}," .total",[77,64493,88],{"class":87},[77,64495,64496,64498,64500,64502,64504],{"class":79,"line":12290},[77,64497,64195],{"class":94},[77,64499,98],{"class":87},[77,64501,3225],{"class":94},[77,64503,2124],{"class":2123},[77,64505,104],{"class":87},[77,64507,64508,64510,64512,64515],{"class":79,"line":12296},[77,64509,59864],{"class":94},[77,64511,98],{"class":87},[77,64513,64514],{"class":94},"#999",[77,64516,104],{"class":87},[77,64518,64519,64522,64524,64526,64528],{"class":79,"line":12317},[77,64520,64521],{"class":94},"      margin-top",[77,64523,98],{"class":87},[77,64525,2933],{"class":94},[77,64527,2124],{"class":2123},[77,64529,104],{"class":87},[77,64531,64532,64535,64537,64539],{"class":79,"line":12323},[77,64533,64534],{"class":94},"      opacity",[77,64536,98],{"class":87},[77,64538,1939],{"class":94},[77,64540,104],{"class":87},[77,64542,64543,64545,64547,64549,64551,64553],{"class":79,"line":12337},[77,64544,64305],{"class":94},[77,64546,98],{"class":87},[77,64548,30589],{"class":94},[77,64550,64312],{"class":94},[77,64552,3308],{"class":2123},[77,64554,104],{"class":87},[77,64556,64557],{"class":79,"line":12343},[77,64558,4662],{"class":87},[77,64560,64561],{"class":79,"line":12370},[77,64562,4875],{"emptyLinePlaceholder":2549},[77,64564,64565,64568],{"class":79,"line":12379},[77,64566,64567],{"class":83},"    .list",[77,64569,88],{"class":87},[77,64571,64572,64574,64576,64578,64580],{"class":79,"line":12385},[77,64573,64057],{"class":94},[77,64575,98],{"class":87},[77,64577,6462],{"class":94},[77,64579,2124],{"class":2123},[77,64581,104],{"class":87},[77,64583,64584,64586,64588,64590,64592],{"class":79,"line":12393},[77,64585,64070],{"class":94},[77,64587,98],{"class":87},[77,64589,64075],{"class":94},[77,64591,2124],{"class":2123},[77,64593,104],{"class":87},[77,64595,64596,64598,64600,64602],{"class":79,"line":12398},[77,64597,57459],{"class":94},[77,64599,98],{"class":87},[77,64601,53940],{"class":94},[77,64603,104],{"class":87},[77,64605,64606],{"class":79,"line":19074},[77,64607,4662],{"class":87},[77,64609,64610],{"class":79,"line":19080},[77,64611,4875],{"emptyLinePlaceholder":2549},[77,64613,64614,64616,64619],{"class":79,"line":19103},[77,64615,64567],{"class":83},[77,64617,64618],{"class":83}," .item",[77,64620,88],{"class":87},[77,64622,64623,64625,64627,64629,64631],{"class":79,"line":19109},[77,64624,57223],{"class":94},[77,64626,98],{"class":87},[77,64628,2925],{"class":94},[77,64630,2942],{"class":2123},[77,64632,104],{"class":87},[77,64634,64635,64637,64639,64641],{"class":79,"line":19132},[77,64636,57459],{"class":94},[77,64638,98],{"class":87},[77,64640,53940],{"class":94},[77,64642,104],{"class":87},[77,64644,64645],{"class":79,"line":19146},[77,64646,4662],{"class":87},[77,64648,64649],{"class":79,"line":19166},[77,64650,4875],{"emptyLinePlaceholder":2549},[77,64652,64653,64655,64657,64660],{"class":79,"line":19172},[77,64654,64567],{"class":83},[77,64656,64618],{"class":83},[77,64658,64659],{"class":83}," .info",[77,64661,88],{"class":87},[77,64663,64664,64666,64668,64670],{"class":79,"line":19183},[77,64665,64282],{"class":94},[77,64667,98],{"class":87},[77,64669,2120],{"class":94},[77,64671,104],{"class":87},[77,64673,64674,64677,64679,64681,64683,64686,64689],{"class":79,"line":19206},[77,64675,64676],{"class":94},"      border-bottom",[77,64678,98],{"class":87},[77,64680,2120],{"class":94},[77,64682,2124],{"class":2123},[77,64684,64685],{"class":94}," dashed",[77,64687,64688],{"class":94}," #e4e4e4",[77,64690,104],{"class":87},[77,64692,64693,64696,64698,64700,64702],{"class":79,"line":19228},[77,64694,64695],{"class":94},"      padding-bottom",[77,64697,98],{"class":87},[77,64699,3059],{"class":94},[77,64701,2124],{"class":2123},[77,64703,104],{"class":87},[77,64705,64706],{"class":79,"line":19233},[77,64707,4662],{"class":87},[77,64709,64710],{"class":79,"line":19239},[77,64711,4875],{"emptyLinePlaceholder":2549},[77,64713,64714,64716,64718,64720],{"class":79,"line":19253},[77,64715,64567],{"class":83},[77,64717,64618],{"class":83},[77,64719,9300],{"class":158},[77,64721,88],{"class":87},[77,64723,64724,64726,64728,64730],{"class":79,"line":19266},[77,64725,57160],{"class":94},[77,64727,98],{"class":87},[77,64729,1939],{"class":94},[77,64731,104],{"class":87},[77,64733,64734],{"class":79,"line":19271},[77,64735,4662],{"class":87},[77,64737,64738],{"class":79,"line":19285},[77,64739,4875],{"emptyLinePlaceholder":2549},[77,64741,64742,64744,64746,64749],{"class":79,"line":19290},[77,64743,64567],{"class":83},[77,64745,64618],{"class":83},[77,64747,64748],{"class":83}," .name",[77,64750,88],{"class":87},[77,64752,64753,64755,64757,64760],{"class":79,"line":19296},[77,64754,59864],{"class":94},[77,64756,98],{"class":87},[77,64758,64759],{"class":94},"#FB7299",[77,64761,104],{"class":87},[77,64763,64764,64766,64768,64770,64772],{"class":79,"line":19301},[77,64765,57372],{"class":94},[77,64767,98],{"class":87},[77,64769,3162],{"class":94},[77,64771,2124],{"class":2123},[77,64773,104],{"class":87},[77,64775,64776,64779,64781,64784],{"class":79,"line":19315},[77,64777,64778],{"class":94},"      font-weight",[77,64780,98],{"class":87},[77,64782,64783],{"class":94},"bold",[77,64785,104],{"class":87},[77,64787,64788],{"class":79,"line":19320},[77,64789,4662],{"class":87},[77,64791,64792],{"class":79,"line":19325},[77,64793,4875],{"emptyLinePlaceholder":2549},[77,64795,64796,64798,64800,64803],{"class":79,"line":19339},[77,64797,64567],{"class":83},[77,64799,64618],{"class":83},[77,64801,64802],{"class":83}," .text",[77,64804,88],{"class":87},[77,64806,64807,64809,64811,64814],{"class":79,"line":19351},[77,64808,59864],{"class":94},[77,64810,98],{"class":87},[77,64812,64813],{"class":94},"#333",[77,64815,104],{"class":87},[77,64817,64818,64820,64822,64824,64826,64828],{"class":79,"line":19356},[77,64819,57149],{"class":94},[77,64821,98],{"class":87},[77,64823,3059],{"class":94},[77,64825,2124],{"class":2123},[77,64827,6568],{"class":94},[77,64829,104],{"class":87},[77,64831,64832],{"class":79,"line":19369},[77,64833,4662],{"class":87},[77,64835,64836],{"class":79,"line":19374},[77,64837,4875],{"emptyLinePlaceholder":2549},[77,64839,64840,64842,64844,64847],{"class":79,"line":19379},[77,64841,64567],{"class":83},[77,64843,64618],{"class":83},[77,64845,64846],{"class":83}," .time",[77,64848,88],{"class":87},[77,64850,64851,64853,64855,64857],{"class":79,"line":19384},[77,64852,59864],{"class":94},[77,64854,98],{"class":87},[77,64856,64514],{"class":94},[77,64858,104],{"class":87},[77,64860,64861,64863,64865,64867,64869],{"class":79,"line":19397},[77,64862,57372],{"class":94},[77,64864,98],{"class":87},[77,64866,3111],{"class":94},[77,64868,2124],{"class":2123},[77,64870,104],{"class":87},[77,64872,64873],{"class":79,"line":19402},[77,64874,4662],{"class":87},[77,64876,64877,64879,64881],{"class":79,"line":35100},[77,64878,54875],{"class":87},[77,64880,2520],{"class":158},[77,64882,291],{"class":87},[77,64884,64885,64887,64889],{"class":79,"line":35106},[77,64886,351],{"class":87},[77,64888,53798],{"class":158},[77,64890,291],{"class":87},[77,64892,64893],{"class":79,"line":35112},[77,64894,4875],{"emptyLinePlaceholder":2549},[77,64896,64897,64899,64901],{"class":79,"line":35118},[77,64898,260],{"class":87},[77,64900,54258],{"class":158},[77,64902,291],{"class":87},[77,64904,64905,64907,64909,64911,64913,64916],{"class":79,"line":35124},[77,64906,54602],{"class":87},[77,64908,331],{"class":158},[77,64910,334],{"class":83},[77,64912,268],{"class":87},[77,64914,64915],{"class":271},"\"wrapper\"",[77,64917,291],{"class":87},[77,64919,64920,64922,64924,64926,64928,64931,64933,64935],{"class":79,"line":35135},[77,64921,53805],{"class":87},[77,64923,646],{"class":158},[77,64925,334],{"class":83},[77,64927,268],{"class":87},[77,64929,64930],{"class":271},"\"avatar\"",[77,64932,57762],{"class":87},[77,64934,646],{"class":158},[77,64936,291],{"class":87},[77,64938,64939,64941,64943,64945,64947,64950,64952,64954,64957,64959,64961,64963,64966,64968,64971,64973,64975],{"class":79,"line":35141},[77,64940,53805],{"class":87},[77,64942,56742],{"class":158},[77,64944,17430],{"class":83},[77,64946,268],{"class":87},[77,64948,64949],{"class":271},"\"tx\"",[77,64951,2503],{"class":83},[77,64953,268],{"class":87},[77,64955,64956],{"class":271},"\"发一条友善的评论\"",[77,64958,56765],{"class":83},[77,64960,268],{"class":87},[77,64962,6176],{"class":271},[77,64964,64965],{"class":83}," maxlength",[77,64967,268],{"class":87},[77,64969,64970],{"class":271},"\"200\"",[77,64972,57762],{"class":87},[77,64974,56742],{"class":158},[77,64976,291],{"class":87},[77,64978,64979,64981,64983,64986,64988],{"class":79,"line":35161},[77,64980,53805],{"class":87},[77,64982,56341],{"class":158},[77,64984,64985],{"class":87},">发布\u003C\u002F",[77,64987,56341],{"class":158},[77,64989,291],{"class":87},[77,64991,64992,64994,64996],{"class":79,"line":35167},[77,64993,54875],{"class":87},[77,64995,331],{"class":158},[77,64997,291],{"class":87},[77,64999,65000,65002,65004,65006,65008,65010],{"class":79,"line":35178},[77,65001,54602],{"class":87},[77,65003,331],{"class":158},[77,65005,334],{"class":83},[77,65007,268],{"class":87},[77,65009,64915],{"class":271},[77,65011,291],{"class":87},[77,65013,65014,65016,65018,65020,65022,65025,65028,65030],{"class":79,"line":35184},[77,65015,53805],{"class":87},[77,65017,77],{"class":158},[77,65019,334],{"class":83},[77,65021,268],{"class":87},[77,65023,65024],{"class":271},"\"total\"",[77,65026,65027],{"class":87},">0\u002F200字\u003C\u002F",[77,65029,77],{"class":158},[77,65031,291],{"class":87},[77,65033,65034,65036,65038],{"class":79,"line":35190},[77,65035,54875],{"class":87},[77,65037,331],{"class":158},[77,65039,291],{"class":87},[77,65041,65042,65044,65046,65048,65050,65053],{"class":79,"line":35196},[77,65043,54602],{"class":87},[77,65045,331],{"class":158},[77,65047,334],{"class":83},[77,65049,268],{"class":87},[77,65051,65052],{"class":271},"\"list\"",[77,65054,291],{"class":87},[77,65056,65057,65059,65061,65063,65065,65068,65071,65073,65076],{"class":79,"line":35202},[77,65058,53805],{"class":87},[77,65060,331],{"class":158},[77,65062,334],{"class":83},[77,65064,268],{"class":87},[77,65066,65067],{"class":271},"\"item\"",[77,65069,65070],{"class":83}," style",[77,65072,268],{"class":87},[77,65074,65075],{"class":271},"\"display: none;\"",[77,65077,291],{"class":87},[77,65079,65080,65082,65084,65086,65088,65090,65092,65094],{"class":79,"line":35208},[77,65081,57684],{"class":87},[77,65083,646],{"class":158},[77,65085,334],{"class":83},[77,65087,268],{"class":87},[77,65089,64930],{"class":271},[77,65091,57762],{"class":87},[77,65093,646],{"class":158},[77,65095,291],{"class":87},[77,65097,65098,65100,65102,65104,65106,65109],{"class":79,"line":35214},[77,65099,57684],{"class":87},[77,65101,331],{"class":158},[77,65103,334],{"class":83},[77,65105,268],{"class":87},[77,65107,65108],{"class":271},"\"info\"",[77,65110,291],{"class":87},[77,65112,65113,65115,65117,65119,65121,65124,65127,65129],{"class":79,"line":35220},[77,65114,57750],{"class":87},[77,65116,24],{"class":158},[77,65118,334],{"class":83},[77,65120,268],{"class":87},[77,65122,65123],{"class":271},"\"name\"",[77,65125,65126],{"class":87},">清风徐来\u003C\u002F",[77,65128,24],{"class":158},[77,65130,291],{"class":87},[77,65132,65133,65135,65137,65139,65141,65143,65146,65148],{"class":79,"line":35240},[77,65134,57750],{"class":87},[77,65136,24],{"class":158},[77,65138,334],{"class":83},[77,65140,268],{"class":87},[77,65142,2492],{"class":271},[77,65144,65145],{"class":87},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[77,65147,24],{"class":158},[77,65149,291],{"class":87},[77,65151,65152,65154,65156,65158,65160,65163,65166,65168],{"class":79,"line":35246},[77,65153,57750],{"class":87},[77,65155,24],{"class":158},[77,65157,334],{"class":83},[77,65159,268],{"class":87},[77,65161,65162],{"class":271},"\"time\"",[77,65164,65165],{"class":87},">2022-10-10 20:29:21\u003C\u002F",[77,65167,24],{"class":158},[77,65169,291],{"class":87},[77,65171,65172,65174,65176],{"class":79,"line":35262},[77,65173,57855],{"class":87},[77,65175,331],{"class":158},[77,65177,291],{"class":87},[77,65179,65180,65182,65184],{"class":79,"line":35268},[77,65181,54235],{"class":87},[77,65183,331],{"class":158},[77,65185,291],{"class":87},[77,65187,65188,65190,65192],{"class":79,"line":35282},[77,65189,54875],{"class":87},[77,65191,331],{"class":158},[77,65193,291],{"class":87},[77,65195,65196,65198,65200],{"class":79,"line":35288},[77,65197,54602],{"class":87},[77,65199,54271],{"class":158},[77,65201,291],{"class":87},[77,65203,65204,65206,65209,65211,65213,65215,65217,65220],{"class":79,"line":35303},[77,65205,13694],{"class":2123},[77,65207,65208],{"class":94}," tx",[77,65210,16036],{"class":2123},[77,65212,56850],{"class":87},[77,65214,56853],{"class":83},[77,65216,2622],{"class":87},[77,65218,65219],{"class":271},"'#tx'",[77,65221,2628],{"class":87},[77,65223,65224,65226,65229,65231,65233,65235,65237,65240],{"class":79,"line":35309},[77,65225,13694],{"class":2123},[77,65227,65228],{"class":94}," total",[77,65230,16036],{"class":2123},[77,65232,56850],{"class":87},[77,65234,56853],{"class":83},[77,65236,2622],{"class":87},[77,65238,65239],{"class":271},"'.total'",[77,65241,2628],{"class":87},[77,65243,65244],{"class":79,"line":35318},[77,65245,65246],{"class":323},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[77,65248,65249,65252,65254,65256,65258,65260,65262],{"class":79,"line":35324},[77,65250,65251],{"class":87},"    tx.",[77,65253,60261],{"class":83},[77,65255,2622],{"class":87},[77,65257,63773],{"class":271},[77,65259,680],{"class":87},[77,65261,56903],{"class":2123},[77,65263,56906],{"class":87},[77,65265,65266,65269,65271],{"class":79,"line":35333},[77,65267,65268],{"class":87},"      total.style.opacity ",[77,65270,268],{"class":2123},[77,65272,58147],{"class":94},[77,65274,65275],{"class":79,"line":35339},[77,65276,35928],{"class":87},[77,65278,65279],{"class":79,"line":35345},[77,65280,65281],{"class":323},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[77,65283,65284,65286,65288,65290,65292,65294,65296],{"class":79,"line":35354},[77,65285,65251],{"class":87},[77,65287,60261],{"class":83},[77,65289,2622],{"class":87},[77,65291,63834],{"class":271},[77,65293,680],{"class":87},[77,65295,56903],{"class":2123},[77,65297,56906],{"class":87},[77,65299,65300,65302,65304],{"class":79,"line":35360},[77,65301,65268],{"class":87},[77,65303,268],{"class":2123},[77,65305,49799],{"class":94},[77,65307,65308],{"class":79,"line":35371},[77,65309,35928],{"class":87},[77,65311,65312],{"class":79,"line":35377},[77,65313,65314],{"class":323},"    \u002F\u002F 3. 检测用户输入\n",[77,65316,65317,65319,65321,65323,65326,65328,65330],{"class":79,"line":35396},[77,65318,65251],{"class":87},[77,65320,60261],{"class":83},[77,65322,2622],{"class":87},[77,65324,65325],{"class":271},"'input'",[77,65327,680],{"class":87},[77,65329,56903],{"class":2123},[77,65331,56906],{"class":87},[77,65333,65334],{"class":79,"line":35402},[77,65335,65336],{"class":323},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[77,65338,65339,65342,65344,65347,65350,65352,65355,65357,65359],{"class":79,"line":35413},[77,65340,65341],{"class":87},"      total.innerHTML ",[77,65343,268],{"class":2123},[77,65345,65346],{"class":271}," `${",[77,65348,65349],{"class":87},"tx",[77,65351,3171],{"class":271},[77,65353,65354],{"class":87},"value",[77,65356,3171],{"class":271},[77,65358,54426],{"class":94},[77,65360,65361],{"class":271},"}\u002F200字`\n",[77,65363,65364],{"class":79,"line":35419},[77,65365,35928],{"class":87},[77,65367,65368],{"class":79,"line":35439},[77,65369,4875],{"emptyLinePlaceholder":2549},[77,65371,65372],{"class":79,"line":35455},[77,65373,65374],{"class":323},"    \u002F\u002F const str = 'andy'\n",[77,65376,65377],{"class":79,"line":35461},[77,65378,65379],{"class":323},"    \u002F\u002F console.log(str.length)\n",[77,65381,65382,65384,65386],{"class":79,"line":35475},[77,65383,54875],{"class":87},[77,65385,54271],{"class":158},[77,65387,291],{"class":87},[77,65389,65390,65392,65394],{"class":79,"line":35481},[77,65391,351],{"class":87},[77,65393,54258],{"class":158},[77,65395,291],{"class":87},[77,65397,65398],{"class":79,"line":35487},[77,65399,4875],{"emptyLinePlaceholder":2549},[77,65401,65402,65404,65406],{"class":79,"line":35498},[77,65403,351],{"class":87},[77,65405,53101],{"class":158},[77,65407,291],{"class":87},[24468,65409,65411],{"id":65410},"_3254-change事件","3.2.5.4 change事件",[24,65413,65414],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[24,65416,65417],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[24,65419,65420],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[67,65422,65424],{"className":53099,"code":65423,"language":53101,"meta":72,"style":72},"\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",[74,65425,65426,65436,65450,65454,65462,65476,65496,65508,65516,65520,65528,65542,65550,65568,65586,65598,65602,65610,65618,65622],{"__ignoreMap":72},[77,65427,65428,65430,65432,65434],{"class":79,"line":80},[77,65429,53763],{"class":87},[77,65431,53766],{"class":158},[77,65433,53769],{"class":83},[77,65435,291],{"class":87},[77,65437,65438,65440,65442,65444,65446,65448],{"class":79,"line":91},[77,65439,260],{"class":87},[77,65441,53101],{"class":158},[77,65443,53780],{"class":83},[77,65445,268],{"class":87},[77,65447,53785],{"class":271},[77,65449,291],{"class":87},[77,65451,65452],{"class":79,"line":107},[77,65453,4875],{"emptyLinePlaceholder":2549},[77,65455,65456,65458,65460],{"class":79,"line":191},[77,65457,260],{"class":87},[77,65459,53798],{"class":158},[77,65461,291],{"class":87},[77,65463,65464,65466,65468,65470,65472,65474],{"class":79,"line":1543},[77,65465,54602],{"class":87},[77,65467,53808],{"class":158},[77,65469,53811],{"class":83},[77,65471,268],{"class":87},[77,65473,53816],{"class":271},[77,65475,291],{"class":87},[77,65477,65478,65480,65482,65484,65486,65488,65490,65492,65494],{"class":79,"line":1549},[77,65479,54602],{"class":87},[77,65481,53808],{"class":158},[77,65483,2495],{"class":83},[77,65485,268],{"class":87},[77,65487,53855],{"class":271},[77,65489,53835],{"class":83},[77,65491,268],{"class":87},[77,65493,53862],{"class":271},[77,65495,291],{"class":87},[77,65497,65498,65500,65502,65504,65506],{"class":79,"line":1566},[77,65499,54602],{"class":87},[77,65501,53871],{"class":158},[77,65503,53874],{"class":87},[77,65505,53871],{"class":158},[77,65507,291],{"class":87},[77,65509,65510,65512,65514],{"class":79,"line":1572},[77,65511,351],{"class":87},[77,65513,53798],{"class":158},[77,65515,291],{"class":87},[77,65517,65518],{"class":79,"line":1589},[77,65519,4875],{"emptyLinePlaceholder":2549},[77,65521,65522,65524,65526],{"class":79,"line":1595},[77,65523,260],{"class":87},[77,65525,54258],{"class":158},[77,65527,291],{"class":87},[77,65529,65530,65532,65534,65536,65538,65540],{"class":79,"line":4088},[77,65531,54602],{"class":87},[77,65533,159],{"class":158},[77,65535,2487],{"class":83},[77,65537,268],{"class":87},[77,65539,2492],{"class":271},[77,65541,291],{"class":87},[77,65543,65544,65546,65548],{"class":79,"line":4093},[77,65545,54602],{"class":87},[77,65547,54271],{"class":158},[77,65549,291],{"class":87},[77,65551,65552,65554,65556,65558,65560,65562,65564,65566],{"class":79,"line":4099},[77,65553,13694],{"class":2123},[77,65555,63053],{"class":94},[77,65557,16036],{"class":2123},[77,65559,56850],{"class":87},[77,65561,56853],{"class":83},[77,65563,2622],{"class":87},[77,65565,65325],{"class":271},[77,65567,2628],{"class":87},[77,65569,65570,65573,65575,65577,65580,65582,65584],{"class":79,"line":4104},[77,65571,65572],{"class":87},"    input.",[77,65574,60261],{"class":83},[77,65576,2622],{"class":87},[77,65578,65579],{"class":271},"'change'",[77,65581,680],{"class":87},[77,65583,56903],{"class":2123},[77,65585,56906],{"class":87},[77,65587,65588,65590,65592,65594,65596],{"class":79,"line":4118},[77,65589,60692],{"class":87},[77,65591,60695],{"class":83},[77,65593,2622],{"class":87},[77,65595,3206],{"class":94},[77,65597,2628],{"class":87},[77,65599,65600],{"class":79,"line":4123},[77,65601,35928],{"class":87},[77,65603,65604,65606,65608],{"class":79,"line":4129},[77,65605,54875],{"class":87},[77,65607,54271],{"class":158},[77,65609,291],{"class":87},[77,65611,65612,65614,65616],{"class":79,"line":4150},[77,65613,351],{"class":87},[77,65615,54258],{"class":158},[77,65617,291],{"class":87},[77,65619,65620],{"class":79,"line":4155},[77,65621,4875],{"emptyLinePlaceholder":2549},[77,65623,65624,65626,65628],{"class":79,"line":4169},[77,65625,351],{"class":87},[77,65627,53101],{"class":158},[77,65629,291],{"class":87},[24,65631,65632],{},"总结：内容发生改变才回去触发",[19,65634,65636],{"id":65635},"_326-事件对象","3.2.6 事件对象",[24468,65638,65640],{"id":65639},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[24,65642,65643],{},[40,65644],{"alt":72,"src":65645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[24,65647,65648],{},[40,65649],{"alt":72,"src":65650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[24,65652,65653],{},"点击一次，就输出了事件对象，它是个对象",[24,65655,65656],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[24,65658,65659],{},[40,65660],{"alt":72,"src":65661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24468,65663,65665],{"id":65664},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[24,65667,65668],{},[40,65669],{"alt":72,"src":65670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[24,65672,65673],{},"实现按特殊字符才是实现打印输出效果：",[67,65675,65677],{"className":55525,"code":65676,"language":55527,"meta":72,"style":72},"\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",[74,65678,65679,65687,65692,65706,65714,65719,65724,65729,65734,65739,65744,65749,65754,65759,65763,65767,65775],{"__ignoreMap":72},[77,65680,65681,65683,65685],{"class":79,"line":80},[77,65682,260],{"class":87},[77,65684,54258],{"class":158},[77,65686,291],{"class":87},[77,65688,65689],{"class":79,"line":91},[77,65690,65691],{"class":323},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[77,65693,65694,65696,65698,65700,65702,65704],{"class":79,"line":107},[77,65695,54602],{"class":87},[77,65697,159],{"class":158},[77,65699,2487],{"class":83},[77,65701,268],{"class":87},[77,65703,2492],{"class":271},[77,65705,291],{"class":87},[77,65707,65708,65710,65712],{"class":79,"line":191},[77,65709,54602],{"class":87},[77,65711,54271],{"class":158},[77,65713,291],{"class":87},[77,65715,65716],{"class":79,"line":1543},[77,65717,65718],{"class":87},"    \u002F\u002F const btn = document.querySelector('button')\n",[77,65720,65721],{"class":79,"line":1549},[77,65722,65723],{"class":87},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[77,65725,65726],{"class":79,"line":1566},[77,65727,65728],{"class":87},"    \u002F\u002F   console.log(e);\n",[77,65730,65731],{"class":79,"line":1572},[77,65732,65733],{"class":87},"    \u002F\u002F })\n",[77,65735,65736],{"class":79,"line":1589},[77,65737,65738],{"class":87},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[77,65740,65741],{"class":79,"line":1595},[77,65742,65743],{"class":87},"    const input = document.querySelector('input')\n",[77,65745,65746],{"class":79,"line":4088},[77,65747,65748],{"class":87},"    input.addEventListener('keyup', function (e) {\n",[77,65750,65751],{"class":79,"line":4093},[77,65752,65753],{"class":87},"      if (e.key === 'Enter') {\n",[77,65755,65756],{"class":79,"line":4099},[77,65757,65758],{"class":87},"        console.log('我按下了回车键')\n",[77,65760,65761],{"class":79,"line":4104},[77,65762,54856],{"class":87},[77,65764,65765],{"class":79,"line":4118},[77,65766,35928],{"class":87},[77,65768,65769,65771,65773],{"class":79,"line":4123},[77,65770,54875],{"class":87},[77,65772,54271],{"class":158},[77,65774,291],{"class":87},[77,65776,65777,65779,65781],{"class":79,"line":4129},[77,65778,351],{"class":87},[77,65780,54258],{"class":158},[77,65782,291],{"class":87},[24468,65784,65786],{"id":65785},"_3263-trim方法","3.2.6.3 trim方法",[24,65788,65789],{},[40,65790],{"alt":72,"src":65791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[24,65793,65794],{},[40,65795],{"alt":72,"src":65796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[24,65798,65799],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[24,65801,65802],{},"str.trim()",[19,65804,65806],{"id":65805},"_327-环境对象","3.2.7 环境对象",[24,65808,65809],{},[40,65810],{"alt":72,"src":65811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[24,65813,65814],{},[40,65815],{"alt":72,"src":65816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[24,65818,65819],{},[40,65820],{"alt":72,"src":65821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[24,65823,65824],{},"实际函数调用是window.fn()",[24,65826,65827],{},"普通函数里面this指向的是window",[51,65829,65830,65833,65836],{},[54,65831,65832],{},"在普通函数下，this指向的是window",[54,65834,65835],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[54,65837,65838],{},"箭头函数没有this",[24,65840,65841],{},"粗略记法就是：谁调用，this就指向谁",[24,65843,65844],{},[40,65845],{"alt":72,"src":65846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[24,65848,65849],{},[40,65850],{"alt":72,"src":65851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[24,65853,65854],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[24,65856,65857],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[67,65859,65861],{"className":55525,"code":65860,"language":55527,"meta":72,"style":72},"\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",[74,65862,65863,65871,65883,65891,65896,65901,65906,65911,65915,65923],{"__ignoreMap":72},[77,65864,65865,65867,65869],{"class":79,"line":80},[77,65866,260],{"class":87},[77,65868,54258],{"class":158},[77,65870,291],{"class":87},[77,65872,65873,65875,65877,65879,65881],{"class":79,"line":91},[77,65874,54602],{"class":87},[77,65876,56341],{"class":158},[77,65878,56347],{"class":87},[77,65880,56341],{"class":158},[77,65882,291],{"class":87},[77,65884,65885,65887,65889],{"class":79,"line":107},[77,65886,54602],{"class":87},[77,65888,54271],{"class":158},[77,65890,291],{"class":87},[77,65892,65893],{"class":79,"line":191},[77,65894,65895],{"class":87},"    const button = document.querySelector('button')\n",[77,65897,65898],{"class":79,"line":1543},[77,65899,65900],{"class":87},"    button.addEventListener('click', function () {\n",[77,65902,65903],{"class":79,"line":1549},[77,65904,65905],{"class":87},"      \u002F\u002F console.log(this);\n",[77,65907,65908],{"class":79,"line":1566},[77,65909,65910],{"class":87},"      this.style.color = 'pink'\n",[77,65912,65913],{"class":79,"line":1572},[77,65914,35928],{"class":87},[77,65916,65917,65919,65921],{"class":79,"line":1589},[77,65918,54875],{"class":87},[77,65920,54271],{"class":158},[77,65922,291],{"class":87},[77,65924,65925,65927,65929],{"class":79,"line":1595},[77,65926,351],{"class":87},[77,65928,54258],{"class":158},[77,65930,291],{"class":87},[19,65932,65934],{"id":65933},"_328-回调函数","3.2.8 回调函数",[24,65936,65937],{},[40,65938],{"alt":72,"src":65939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[24,65941,65942],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[24,65944,13805],{},[51,65946,65947,65950,65953],{},[54,65948,65949],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[54,65951,65952],{},"回调函数本质还是函数，只不过把它当成参数使用",[54,65954,65955],{},"使用匿名函数做为回调函数比较常见",[19,65957,65959],{"id":65958},"_329-tab栏切换","3.2.9 tab栏切换",[24,65961,65962],{},[40,65963],{"alt":72,"src":65964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[67,65966,65968],{"className":53099,"code":65967,"language":53101,"meta":72,"style":72},"\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",[74,65969,65970,65980,65994,65998,66006,66020,66040,66060,66073,66081,66087,66097,66107,66111,66115,66122,66135,66148,66160,66176,66180,66184,66191,66203,66215,66227,66237,66247,66251,66255,66264,66276,66287,66299,66303,66307,66315,66325,66335,66345,66349,66353,66363,66377,66389,66393,66397,66409,66420,66437,66447,66451,66455,66470,66481,66491,66495,66499,66506,66521,66525,66529,66537,66547,66551,66555,66564,66574,66578,66586,66594,66598,66606,66621,66636,66649,66657,66691,66718,66745,66772,66799,66807,66815,66830,66867,66902,66937,66972,67007,67015,67023,67031,67036,67041,67061,67066,67095,67100,67105,67123,67128,67133,67138,67160,67165,67181,67185,67190,67195,67216,67221,67250,67254,67259,67263,67271,67279,67283],{"__ignoreMap":72},[77,65971,65972,65974,65976,65978],{"class":79,"line":80},[77,65973,53763],{"class":87},[77,65975,53766],{"class":158},[77,65977,53769],{"class":83},[77,65979,291],{"class":87},[77,65981,65982,65984,65986,65988,65990,65992],{"class":79,"line":91},[77,65983,260],{"class":87},[77,65985,53101],{"class":158},[77,65987,53780],{"class":83},[77,65989,268],{"class":87},[77,65991,53785],{"class":271},[77,65993,291],{"class":87},[77,65995,65996],{"class":79,"line":107},[77,65997,4875],{"emptyLinePlaceholder":2549},[77,65999,66000,66002,66004],{"class":79,"line":191},[77,66001,260],{"class":87},[77,66003,53798],{"class":158},[77,66005,291],{"class":87},[77,66007,66008,66010,66012,66014,66016,66018],{"class":79,"line":1543},[77,66009,54602],{"class":87},[77,66011,53808],{"class":158},[77,66013,53811],{"class":83},[77,66015,268],{"class":87},[77,66017,53816],{"class":271},[77,66019,61575],{"class":87},[77,66021,66022,66024,66026,66028,66030,66032,66034,66036,66038],{"class":79,"line":1549},[77,66023,54602],{"class":87},[77,66025,53808],{"class":158},[77,66027,53827],{"class":83},[77,66029,268],{"class":87},[77,66031,53832],{"class":271},[77,66033,53835],{"class":83},[77,66035,268],{"class":87},[77,66037,53840],{"class":271},[77,66039,61575],{"class":87},[77,66041,66042,66044,66046,66048,66050,66052,66054,66056,66058],{"class":79,"line":1566},[77,66043,54602],{"class":87},[77,66045,53808],{"class":158},[77,66047,2495],{"class":83},[77,66049,268],{"class":87},[77,66051,53855],{"class":271},[77,66053,53835],{"class":83},[77,66055,268],{"class":87},[77,66057,53862],{"class":271},[77,66059,61575],{"class":87},[77,66061,66062,66064,66066,66069,66071],{"class":79,"line":1572},[77,66063,54602],{"class":87},[77,66065,53871],{"class":158},[77,66067,66068],{"class":87},">tab栏切换\u003C\u002F",[77,66070,53871],{"class":158},[77,66072,291],{"class":87},[77,66074,66075,66077,66079],{"class":79,"line":1589},[77,66076,54602],{"class":87},[77,66078,2520],{"class":158},[77,66080,291],{"class":87},[77,66082,66083,66085],{"class":79,"line":1595},[77,66084,8878],{"class":158},[77,66086,88],{"class":87},[77,66088,66089,66091,66093,66095],{"class":79,"line":4088},[77,66090,57160],{"class":94},[77,66092,98],{"class":87},[77,66094,1939],{"class":94},[77,66096,104],{"class":87},[77,66098,66099,66101,66103,66105],{"class":79,"line":4093},[77,66100,57149],{"class":94},[77,66102,98],{"class":87},[77,66104,1939],{"class":94},[77,66106,104],{"class":87},[77,66108,66109],{"class":79,"line":4099},[77,66110,4662],{"class":87},[77,66112,66113],{"class":79,"line":4104},[77,66114,4875],{"emptyLinePlaceholder":2549},[77,66116,66117,66120],{"class":79,"line":4118},[77,66118,66119],{"class":83},"    .tab",[77,66121,88],{"class":87},[77,66123,66124,66126,66128,66131,66133],{"class":79,"line":4123},[77,66125,57223],{"class":94},[77,66127,98],{"class":87},[77,66129,66130],{"class":94},"590",[77,66132,2124],{"class":2123},[77,66134,104],{"class":87},[77,66136,66137,66139,66141,66144,66146],{"class":79,"line":4129},[77,66138,57237],{"class":94},[77,66140,98],{"class":87},[77,66142,66143],{"class":94},"340",[77,66145,2124],{"class":2123},[77,66147,104],{"class":87},[77,66149,66150,66152,66154,66156,66158],{"class":79,"line":4150},[77,66151,57160],{"class":94},[77,66153,98],{"class":87},[77,66155,3313],{"class":94},[77,66157,2124],{"class":2123},[77,66159,104],{"class":87},[77,66161,66162,66164,66166,66168,66170,66172,66174],{"class":79,"line":4155},[77,66163,64421],{"class":94},[77,66165,98],{"class":87},[77,66167,2120],{"class":94},[77,66169,2124],{"class":2123},[77,66171,2127],{"class":94},[77,66173,64688],{"class":94},[77,66175,104],{"class":87},[77,66177,66178],{"class":79,"line":4169},[77,66179,4662],{"class":87},[77,66181,66182],{"class":79,"line":4174},[77,66183,4875],{"emptyLinePlaceholder":2549},[77,66185,66186,66189],{"class":79,"line":4203},[77,66187,66188],{"class":83},"    .tab-nav",[77,66190,88],{"class":87},[77,66192,66193,66195,66197,66199,66201],{"class":79,"line":4208},[77,66194,57223],{"class":94},[77,66196,98],{"class":87},[77,66198,2925],{"class":94},[77,66200,2942],{"class":2123},[77,66202,104],{"class":87},[77,66204,66205,66207,66209,66211,66213],{"class":79,"line":4225},[77,66206,57237],{"class":94},[77,66208,98],{"class":87},[77,66210,3520],{"class":94},[77,66212,2124],{"class":2123},[77,66214,104],{"class":87},[77,66216,66217,66219,66221,66223,66225],{"class":79,"line":4230},[77,66218,59807],{"class":94},[77,66220,98],{"class":87},[77,66222,3520],{"class":94},[77,66224,2124],{"class":2123},[77,66226,104],{"class":87},[77,66228,66229,66231,66233,66235],{"class":79,"line":4235},[77,66230,57459],{"class":94},[77,66232,98],{"class":87},[77,66234,53940],{"class":94},[77,66236,104],{"class":87},[77,66238,66239,66241,66243,66245],{"class":79,"line":4240},[77,66240,57470],{"class":94},[77,66242,98],{"class":87},[77,66244,54127],{"class":94},[77,66246,104],{"class":87},[77,66248,66249],{"class":79,"line":4254},[77,66250,4662],{"class":87},[77,66252,66253],{"class":79,"line":4259},[77,66254,4875],{"emptyLinePlaceholder":2549},[77,66256,66257,66259,66262],{"class":79,"line":5052},[77,66258,66188],{"class":83},[77,66260,66261],{"class":158}," h3",[77,66263,88],{"class":87},[77,66265,66266,66268,66270,66272,66274],{"class":79,"line":5066},[77,66267,57372],{"class":94},[77,66269,98],{"class":87},[77,66271,3413],{"class":94},[77,66273,2124],{"class":2123},[77,66275,104],{"class":87},[77,66277,66278,66280,66282,66285],{"class":79,"line":5074},[77,66279,64778],{"class":94},[77,66281,98],{"class":87},[77,66283,66284],{"class":94},"normal",[77,66286,104],{"class":87},[77,66288,66289,66291,66293,66295,66297],{"class":79,"line":5079},[77,66290,64444],{"class":94},[77,66292,98],{"class":87},[77,66294,3313],{"class":94},[77,66296,2124],{"class":2123},[77,66298,104],{"class":87},[77,66300,66301],{"class":79,"line":5085},[77,66302,4662],{"class":87},[77,66304,66305],{"class":79,"line":5091},[77,66306,4875],{"emptyLinePlaceholder":2549},[77,66308,66309,66311,66313],{"class":79,"line":5096},[77,66310,66188],{"class":83},[77,66312,63738],{"class":158},[77,66314,88],{"class":87},[77,66316,66317,66319,66321,66323],{"class":79,"line":10422},[77,66318,57186],{"class":94},[77,66320,98],{"class":87},[77,66322,186],{"class":94},[77,66324,104],{"class":87},[77,66326,66327,66329,66331,66333],{"class":79,"line":10446},[77,66328,57459],{"class":94},[77,66330,98],{"class":87},[77,66332,53940],{"class":94},[77,66334,104],{"class":87},[77,66336,66337,66339,66341,66343],{"class":79,"line":10451},[77,66338,57470],{"class":94},[77,66340,98],{"class":87},[77,66342,54040],{"class":94},[77,66344,104],{"class":87},[77,66346,66347],{"class":79,"line":10457},[77,66348,4662],{"class":87},[77,66350,66351],{"class":79,"line":10484},[77,66352,4875],{"emptyLinePlaceholder":2549},[77,66354,66355,66357,66359,66361],{"class":79,"line":10489},[77,66356,66188],{"class":83},[77,66358,63738],{"class":158},[77,66360,57525],{"class":158},[77,66362,88],{"class":87},[77,66364,66365,66367,66369,66371,66373,66375],{"class":79,"line":10495},[77,66366,57160],{"class":94},[77,66368,98],{"class":87},[77,66370,1939],{"class":94},[77,66372,11424],{"class":94},[77,66374,2124],{"class":2123},[77,66376,104],{"class":87},[77,66378,66379,66381,66383,66385,66387],{"class":79,"line":10507},[77,66380,57372],{"class":94},[77,66382,98],{"class":87},[77,66384,3162],{"class":94},[77,66386,2124],{"class":2123},[77,66388,104],{"class":87},[77,66390,66391],{"class":79,"line":10519},[77,66392,4662],{"class":87},[77,66394,66395],{"class":79,"line":10531},[77,66396,4875],{"emptyLinePlaceholder":2549},[77,66398,66399,66401,66403,66405,66407],{"class":79,"line":12189},[77,66400,66188],{"class":83},[77,66402,63738],{"class":158},[77,66404,57525],{"class":158},[77,66406,3876],{"class":158},[77,66408,88],{"class":87},[77,66410,66411,66414,66416,66418],{"class":79,"line":12214},[77,66412,66413],{"class":94},"      text-decoration",[77,66415,98],{"class":87},[77,66417,186],{"class":94},[77,66419,104],{"class":87},[77,66421,66422,66424,66426,66428,66430,66432,66435],{"class":79,"line":12237},[77,66423,64676],{"class":94},[77,66425,98],{"class":87},[77,66427,2696],{"class":94},[77,66429,2124],{"class":2123},[77,66431,2127],{"class":94},[77,66433,66434],{"class":94}," transparent",[77,66436,104],{"class":87},[77,66438,66439,66441,66443,66445],{"class":79,"line":12261},[77,66440,59864],{"class":94},[77,66442,98],{"class":87},[77,66444,64813],{"class":94},[77,66446,104],{"class":87},[77,66448,66449],{"class":79,"line":12266},[77,66450,4662],{"class":87},[77,66452,66453],{"class":79,"line":12271},[77,66454,4875],{"emptyLinePlaceholder":2549},[77,66456,66457,66459,66461,66463,66465,66468],{"class":79,"line":12276},[77,66458,66188],{"class":83},[77,66460,63738],{"class":158},[77,66462,57525],{"class":158},[77,66464,3876],{"class":158},[77,66466,66467],{"class":83},".active",[77,66469,88],{"class":87},[77,66471,66472,66474,66476,66479],{"class":79,"line":12285},[77,66473,64236],{"class":94},[77,66475,98],{"class":87},[77,66477,66478],{"class":94},"#e1251b",[77,66480,104],{"class":87},[77,66482,66483,66485,66487,66489],{"class":79,"line":12290},[77,66484,59864],{"class":94},[77,66486,98],{"class":87},[77,66488,66478],{"class":94},[77,66490,104],{"class":87},[77,66492,66493],{"class":79,"line":12296},[77,66494,4662],{"class":87},[77,66496,66497],{"class":79,"line":12317},[77,66498,4875],{"emptyLinePlaceholder":2549},[77,66500,66501,66504],{"class":79,"line":12323},[77,66502,66503],{"class":83},"    .tab-content",[77,66505,88],{"class":87},[77,66507,66508,66510,66512,66514,66517,66519],{"class":79,"line":12337},[77,66509,57149],{"class":94},[77,66511,98],{"class":87},[77,66513,1939],{"class":94},[77,66515,66516],{"class":94}," 16",[77,66518,2124],{"class":2123},[77,66520,104],{"class":87},[77,66522,66523],{"class":79,"line":12343},[77,66524,4662],{"class":87},[77,66526,66527],{"class":79,"line":12370},[77,66528,4875],{"emptyLinePlaceholder":2549},[77,66530,66531,66533,66535],{"class":79,"line":12379},[77,66532,66503],{"class":83},[77,66534,64618],{"class":83},[77,66536,88],{"class":87},[77,66538,66539,66541,66543,66545],{"class":79,"line":12385},[77,66540,57459],{"class":94},[77,66542,98],{"class":87},[77,66544,186],{"class":94},[77,66546,104],{"class":87},[77,66548,66549],{"class":79,"line":12393},[77,66550,4662],{"class":87},[77,66552,66553],{"class":79,"line":12398},[77,66554,4875],{"emptyLinePlaceholder":2549},[77,66556,66557,66559,66562],{"class":79,"line":19074},[77,66558,66503],{"class":83},[77,66560,66561],{"class":83}," .item.active",[77,66563,88],{"class":87},[77,66565,66566,66568,66570,66572],{"class":79,"line":19080},[77,66567,57459],{"class":94},[77,66569,98],{"class":87},[77,66571,456],{"class":94},[77,66573,104],{"class":87},[77,66575,66576],{"class":79,"line":19103},[77,66577,4662],{"class":87},[77,66579,66580,66582,66584],{"class":79,"line":19109},[77,66581,54875],{"class":87},[77,66583,2520],{"class":158},[77,66585,291],{"class":87},[77,66587,66588,66590,66592],{"class":79,"line":19132},[77,66589,351],{"class":87},[77,66591,53798],{"class":158},[77,66593,291],{"class":87},[77,66595,66596],{"class":79,"line":19146},[77,66597,4875],{"emptyLinePlaceholder":2549},[77,66599,66600,66602,66604],{"class":79,"line":19166},[77,66601,260],{"class":87},[77,66603,54258],{"class":158},[77,66605,291],{"class":87},[77,66607,66608,66610,66612,66614,66616,66619],{"class":79,"line":19172},[77,66609,54602],{"class":87},[77,66611,331],{"class":158},[77,66613,334],{"class":83},[77,66615,268],{"class":87},[77,66617,66618],{"class":271},"\"tab\"",[77,66620,291],{"class":87},[77,66622,66623,66625,66627,66629,66631,66634],{"class":79,"line":19183},[77,66624,53805],{"class":87},[77,66626,331],{"class":158},[77,66628,334],{"class":83},[77,66630,268],{"class":87},[77,66632,66633],{"class":271},"\"tab-nav\"",[77,66635,291],{"class":87},[77,66637,66638,66640,66642,66645,66647],{"class":79,"line":19206},[77,66639,57684],{"class":87},[77,66641,19],{"class":158},[77,66643,66644],{"class":87},">每日特价\u003C\u002F",[77,66646,19],{"class":158},[77,66648,291],{"class":87},[77,66650,66651,66653,66655],{"class":79,"line":19228},[77,66652,57684],{"class":87},[77,66654,51],{"class":158},[77,66656,291],{"class":87},[77,66658,66659,66661,66663,66665,66667,66669,66671,66673,66675,66677,66680,66683,66685,66687,66689],{"class":79,"line":19233},[77,66660,57750],{"class":87},[77,66662,54],{"class":158},[77,66664,63498],{"class":87},[77,66666,417],{"class":158},[77,66668,334],{"class":83},[77,66670,268],{"class":87},[77,66672,62154],{"class":271},[77,66674,63503],{"class":83},[77,66676,268],{"class":87},[77,66678,66679],{"class":271},"\"javascript:;\"",[77,66681,66682],{"class":87},">精选\u003C\u002F",[77,66684,417],{"class":158},[77,66686,57762],{"class":87},[77,66688,54],{"class":158},[77,66690,291],{"class":87},[77,66692,66693,66695,66697,66699,66701,66703,66705,66707,66710,66712,66714,66716],{"class":79,"line":19239},[77,66694,57750],{"class":87},[77,66696,54],{"class":158},[77,66698,63498],{"class":87},[77,66700,417],{"class":158},[77,66702,63503],{"class":83},[77,66704,268],{"class":87},[77,66706,66679],{"class":271},[77,66708,66709],{"class":87},">美食\u003C\u002F",[77,66711,417],{"class":158},[77,66713,57762],{"class":87},[77,66715,54],{"class":158},[77,66717,291],{"class":87},[77,66719,66720,66722,66724,66726,66728,66730,66732,66734,66737,66739,66741,66743],{"class":79,"line":19253},[77,66721,57750],{"class":87},[77,66723,54],{"class":158},[77,66725,63498],{"class":87},[77,66727,417],{"class":158},[77,66729,63503],{"class":83},[77,66731,268],{"class":87},[77,66733,66679],{"class":271},[77,66735,66736],{"class":87},">百货\u003C\u002F",[77,66738,417],{"class":158},[77,66740,57762],{"class":87},[77,66742,54],{"class":158},[77,66744,291],{"class":87},[77,66746,66747,66749,66751,66753,66755,66757,66759,66761,66764,66766,66768,66770],{"class":79,"line":19266},[77,66748,57750],{"class":87},[77,66750,54],{"class":158},[77,66752,63498],{"class":87},[77,66754,417],{"class":158},[77,66756,63503],{"class":83},[77,66758,268],{"class":87},[77,66760,66679],{"class":271},[77,66762,66763],{"class":87},">个护\u003C\u002F",[77,66765,417],{"class":158},[77,66767,57762],{"class":87},[77,66769,54],{"class":158},[77,66771,291],{"class":87},[77,66773,66774,66776,66778,66780,66782,66784,66786,66788,66791,66793,66795,66797],{"class":79,"line":19271},[77,66775,57750],{"class":87},[77,66777,54],{"class":158},[77,66779,63498],{"class":87},[77,66781,417],{"class":158},[77,66783,63503],{"class":83},[77,66785,268],{"class":87},[77,66787,66679],{"class":271},[77,66789,66790],{"class":87},">预告\u003C\u002F",[77,66792,417],{"class":158},[77,66794,57762],{"class":87},[77,66796,54],{"class":158},[77,66798,291],{"class":87},[77,66800,66801,66803,66805],{"class":79,"line":19285},[77,66802,57855],{"class":87},[77,66804,51],{"class":158},[77,66806,291],{"class":87},[77,66808,66809,66811,66813],{"class":79,"line":19290},[77,66810,54235],{"class":87},[77,66812,331],{"class":158},[77,66814,291],{"class":87},[77,66816,66817,66819,66821,66823,66825,66828],{"class":79,"line":19296},[77,66818,53805],{"class":87},[77,66820,331],{"class":158},[77,66822,334],{"class":83},[77,66824,268],{"class":87},[77,66826,66827],{"class":271},"\"tab-content\"",[77,66829,291],{"class":87},[77,66831,66832,66834,66836,66838,66840,66843,66845,66847,66849,66851,66854,66856,66858,66860,66863,66865],{"class":79,"line":19301},[77,66833,57684],{"class":87},[77,66835,331],{"class":158},[77,66837,334],{"class":83},[77,66839,268],{"class":87},[77,66841,66842],{"class":271},"\"item active\"",[77,66844,63498],{"class":87},[77,66846,40],{"class":158},[77,66848,265],{"class":83},[77,66850,268],{"class":87},[77,66852,66853],{"class":271},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[77,66855,275],{"class":83},[77,66857,268],{"class":87},[77,66859,444],{"class":271},[77,66861,66862],{"class":87}," \u002F>\u003C\u002F",[77,66864,331],{"class":158},[77,66866,291],{"class":87},[77,66868,66869,66871,66873,66875,66877,66879,66881,66883,66885,66887,66890,66892,66894,66896,66898,66900],{"class":79,"line":19315},[77,66870,57684],{"class":87},[77,66872,331],{"class":158},[77,66874,334],{"class":83},[77,66876,268],{"class":87},[77,66878,65067],{"class":271},[77,66880,63498],{"class":87},[77,66882,40],{"class":158},[77,66884,265],{"class":83},[77,66886,268],{"class":87},[77,66888,66889],{"class":271},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[77,66891,275],{"class":83},[77,66893,268],{"class":87},[77,66895,444],{"class":271},[77,66897,66862],{"class":87},[77,66899,331],{"class":158},[77,66901,291],{"class":87},[77,66903,66904,66906,66908,66910,66912,66914,66916,66918,66920,66922,66925,66927,66929,66931,66933,66935],{"class":79,"line":19320},[77,66905,57684],{"class":87},[77,66907,331],{"class":158},[77,66909,334],{"class":83},[77,66911,268],{"class":87},[77,66913,65067],{"class":271},[77,66915,63498],{"class":87},[77,66917,40],{"class":158},[77,66919,265],{"class":83},[77,66921,268],{"class":87},[77,66923,66924],{"class":271},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[77,66926,275],{"class":83},[77,66928,268],{"class":87},[77,66930,444],{"class":271},[77,66932,66862],{"class":87},[77,66934,331],{"class":158},[77,66936,291],{"class":87},[77,66938,66939,66941,66943,66945,66947,66949,66951,66953,66955,66957,66960,66962,66964,66966,66968,66970],{"class":79,"line":19325},[77,66940,57684],{"class":87},[77,66942,331],{"class":158},[77,66944,334],{"class":83},[77,66946,268],{"class":87},[77,66948,65067],{"class":271},[77,66950,63498],{"class":87},[77,66952,40],{"class":158},[77,66954,265],{"class":83},[77,66956,268],{"class":87},[77,66958,66959],{"class":271},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[77,66961,275],{"class":83},[77,66963,268],{"class":87},[77,66965,444],{"class":271},[77,66967,66862],{"class":87},[77,66969,331],{"class":158},[77,66971,291],{"class":87},[77,66973,66974,66976,66978,66980,66982,66984,66986,66988,66990,66992,66995,66997,66999,67001,67003,67005],{"class":79,"line":19339},[77,66975,57684],{"class":87},[77,66977,331],{"class":158},[77,66979,334],{"class":83},[77,66981,268],{"class":87},[77,66983,65067],{"class":271},[77,66985,63498],{"class":87},[77,66987,40],{"class":158},[77,66989,265],{"class":83},[77,66991,268],{"class":87},[77,66993,66994],{"class":271},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[77,66996,275],{"class":83},[77,66998,268],{"class":87},[77,67000,444],{"class":271},[77,67002,66862],{"class":87},[77,67004,331],{"class":158},[77,67006,291],{"class":87},[77,67008,67009,67011,67013],{"class":79,"line":19351},[77,67010,54235],{"class":87},[77,67012,331],{"class":158},[77,67014,291],{"class":87},[77,67016,67017,67019,67021],{"class":79,"line":19356},[77,67018,54875],{"class":87},[77,67020,331],{"class":158},[77,67022,291],{"class":87},[77,67024,67025,67027,67029],{"class":79,"line":19369},[77,67026,54602],{"class":87},[77,67028,54271],{"class":158},[77,67030,291],{"class":87},[77,67032,67033],{"class":79,"line":19374},[77,67034,67035],{"class":323},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[77,67037,67038],{"class":79,"line":19379},[77,67039,67040],{"class":323},"    \u002F\u002F 1.1 获取 a 元素 \n",[77,67042,67043,67045,67048,67050,67052,67054,67056,67059],{"class":79,"line":19384},[77,67044,13694],{"class":2123},[77,67046,67047],{"class":94}," as",[77,67049,16036],{"class":2123},[77,67051,56850],{"class":87},[77,67053,58129],{"class":83},[77,67055,2622],{"class":87},[77,67057,67058],{"class":271},"'.tab-nav a'",[77,67060,2628],{"class":87},[77,67062,67063],{"class":79,"line":19397},[77,67064,67065],{"class":323},"    \u002F\u002F console.log(as) \n",[77,67067,67068,67070,67072,67074,67076,67078,67080,67082,67084,67087,67089,67091,67093],{"class":79,"line":19402},[77,67069,5676],{"class":2123},[77,67071,4134],{"class":87},[77,67073,54305],{"class":2123},[77,67075,11911],{"class":87},[77,67077,268],{"class":2123},[77,67079,6568],{"class":94},[77,67081,11918],{"class":87},[77,67083,260],{"class":2123},[77,67085,67086],{"class":87}," as.",[77,67088,54426],{"class":94},[77,67090,5689],{"class":87},[77,67092,4767],{"class":2123},[77,67094,14914],{"class":87},[77,67096,67097],{"class":79,"line":35100},[77,67098,67099],{"class":323},"      \u002F\u002F console.log(as[i])\n",[77,67101,67102],{"class":79,"line":35106},[77,67103,67104],{"class":323},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[77,67106,67107,67110,67112,67114,67117,67119,67121],{"class":79,"line":35112},[77,67108,67109],{"class":87},"      as[i].",[77,67111,60261],{"class":83},[77,67113,2622],{"class":87},[77,67115,67116],{"class":271},"'mouseenter'",[77,67118,680],{"class":87},[77,67120,56903],{"class":2123},[77,67122,56906],{"class":87},[77,67124,67125],{"class":79,"line":35118},[77,67126,67127],{"class":323},"        \u002F\u002F console.log('鼠标经过')\n",[77,67129,67130],{"class":79,"line":35124},[77,67131,67132],{"class":323},"        \u002F\u002F 排他思想  \n",[77,67134,67135],{"class":79,"line":35135},[77,67136,67137],{"class":323},"        \u002F\u002F 干掉别人 移除类active\n",[77,67139,67140,67142,67144,67146,67149,67151,67153,67155,67158],{"class":79,"line":35141},[77,67141,54383],{"class":87},[77,67143,56853],{"class":83},[77,67145,2622],{"class":87},[77,67147,67148],{"class":271},"'.tab-nav .active'",[77,67150,59451],{"class":87},[77,67152,59454],{"class":83},[77,67154,2622],{"class":87},[77,67156,67157],{"class":271},"'active'",[77,67159,2628],{"class":87},[77,67161,67162],{"class":79,"line":35161},[77,67163,67164],{"class":323},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[77,67166,67167,67170,67173,67175,67177,67179],{"class":79,"line":35167},[77,67168,67169],{"class":94},"        this",[77,67171,67172],{"class":87},".classList.",[77,67174,7809],{"class":83},[77,67176,2622],{"class":87},[77,67178,67157],{"class":271},[77,67180,2628],{"class":87},[77,67182,67183],{"class":79,"line":35178},[77,67184,4875],{"emptyLinePlaceholder":2549},[77,67186,67187],{"class":79,"line":35184},[77,67188,67189],{"class":323},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[77,67191,67192],{"class":79,"line":35190},[77,67193,67194],{"class":323},"        \u002F\u002F 干掉别人\n",[77,67196,67197,67199,67201,67203,67206,67208,67210,67212,67214],{"class":79,"line":35196},[77,67198,54383],{"class":87},[77,67200,56853],{"class":83},[77,67202,2622],{"class":87},[77,67204,67205],{"class":271},"'.tab-content .active'",[77,67207,59451],{"class":87},[77,67209,59454],{"class":83},[77,67211,2622],{"class":87},[77,67213,67157],{"class":271},[77,67215,2628],{"class":87},[77,67217,67218],{"class":79,"line":35202},[77,67219,67220],{"class":323},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[77,67222,67223,67225,67227,67229,67232,67234,67236,67238,67240,67242,67244,67246,67248],{"class":79,"line":35208},[77,67224,54383],{"class":87},[77,67226,56853],{"class":83},[77,67228,2622],{"class":87},[77,67230,67231],{"class":271},"`.tab-content .item:nth-child(${",[77,67233,646],{"class":87},[77,67235,48032],{"class":2123},[77,67237,27586],{"class":94},[77,67239,59480],{"class":271},[77,67241,59451],{"class":87},[77,67243,7809],{"class":83},[77,67245,2622],{"class":87},[77,67247,67157],{"class":271},[77,67249,2628],{"class":87},[77,67251,67252],{"class":79,"line":35214},[77,67253,4875],{"emptyLinePlaceholder":2549},[77,67255,67256],{"class":79,"line":35220},[77,67257,67258],{"class":87},"      })\n",[77,67260,67261],{"class":79,"line":35240},[77,67262,4662],{"class":87},[77,67264,67265,67267,67269],{"class":79,"line":35246},[77,67266,54875],{"class":87},[77,67268,54271],{"class":158},[77,67270,291],{"class":87},[77,67272,67273,67275,67277],{"class":79,"line":35262},[77,67274,351],{"class":87},[77,67276,54258],{"class":158},[77,67278,291],{"class":87},[77,67280,67281],{"class":79,"line":35268},[77,67282,4875],{"emptyLinePlaceholder":2549},[77,67284,67285,67287,67289],{"class":79,"line":35282},[77,67286,351],{"class":87},[77,67288,53101],{"class":158},[77,67290,291],{"class":87},[24,67292,67293],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[24,67295,67296],{},"在监听事件中，this指向的就是他的调用者",[24,67298,67299],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[24,67301,56176],{},[24,67303,67304],{},"(function () {",[24,67306,67307],{},"const list = document.querySelector('.xtx-elevator-list')",[24,67309,67310],{},"list.addEventListener('click', function (e) {",[24,67312,67313],{},"if (e.target.tagName === 'A') {",[24,67315,67316],{},"\u002F\u002F 排他思想",[24,67318,67319],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[24,67321,67322],{},"const old = document.querySelector('.xtx-elevator-list .active')",[24,67324,67325],{},"\u002F\u002F console.log(old);",[24,67327,67328],{},"\u002F\u002F 判断",[24,67330,67331],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[24,67333,67334],{},"if (old) old.classList.remove('active')",[24,67336,67337],{},"e.target.classList.add('active')",[24,67339,3558],{},[24,67341,54922],{},[24,67343,67344],{},"})();",[19,67346,67348],{"id":67347},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[67,67350,67352],{"className":53099,"code":67351,"language":53101,"meta":72,"style":72},"\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",[74,67353,67354,67364,67368,67376,67380,67394,67408,67420,67428,67434,67444,67454,67458,67462,67469,67481,67492,67509,67522,67536,67546,67550,67554,67561,67572,67590,67600,67612,67616,67620,67627,67644,67655,67667,67671,67675,67682,67694,67698,67706,67714,67718,67726,67734,67742,67757,67801,67809,67822,67835,67848,67856,67864,67872,67900,67908,67920,67933,67946,67954,67962,67970,67996,68004,68017,68029,68042,68050,68058,68066,68092,68100,68113,68125,68138,68146,68154,68162,68167,68187,68192,68212,68217,68234,68239,68247,68252,68281,68294,68298,68302,68307,68311,68339,68344,68361,68366,68371,68376,68381,68407,68411,68415,68423,68431,68435],{"__ignoreMap":72},[77,67355,67356,67358,67360,67362],{"class":79,"line":80},[77,67357,53763],{"class":87},[77,67359,53766],{"class":158},[77,67361,53769],{"class":83},[77,67363,291],{"class":87},[77,67365,67366],{"class":79,"line":91},[77,67367,4875],{"emptyLinePlaceholder":2549},[77,67369,67370,67372,67374],{"class":79,"line":107},[77,67371,260],{"class":87},[77,67373,53101],{"class":158},[77,67375,291],{"class":87},[77,67377,67378],{"class":79,"line":191},[77,67379,4875],{"emptyLinePlaceholder":2549},[77,67381,67382,67384,67386,67388,67390,67392],{"class":79,"line":1543},[77,67383,260],{"class":87},[77,67385,53798],{"class":158},[77,67387,53780],{"class":83},[77,67389,268],{"class":87},[77,67391,53785],{"class":271},[77,67393,291],{"class":87},[77,67395,67396,67398,67400,67402,67404,67406],{"class":79,"line":1549},[77,67397,54602],{"class":87},[77,67399,53808],{"class":158},[77,67401,53811],{"class":83},[77,67403,268],{"class":87},[77,67405,53816],{"class":271},[77,67407,291],{"class":87},[77,67409,67410,67412,67414,67416,67418],{"class":79,"line":1566},[77,67411,54602],{"class":87},[77,67413,53871],{"class":158},[77,67415,57762],{"class":87},[77,67417,53871],{"class":158},[77,67419,291],{"class":87},[77,67421,67422,67424,67426],{"class":79,"line":1572},[77,67423,54602],{"class":87},[77,67425,2520],{"class":158},[77,67427,291],{"class":87},[77,67429,67430,67432],{"class":79,"line":1589},[77,67431,8878],{"class":158},[77,67433,88],{"class":87},[77,67435,67436,67438,67440,67442],{"class":79,"line":1595},[77,67437,57160],{"class":94},[77,67439,98],{"class":87},[77,67441,1939],{"class":94},[77,67443,104],{"class":87},[77,67445,67446,67448,67450,67452],{"class":79,"line":4088},[77,67447,57149],{"class":94},[77,67449,98],{"class":87},[77,67451,1939],{"class":94},[77,67453,104],{"class":87},[77,67455,67456],{"class":79,"line":4093},[77,67457,4662],{"class":87},[77,67459,67460],{"class":79,"line":4099},[77,67461,4875],{"emptyLinePlaceholder":2549},[77,67463,67464,67467],{"class":79,"line":4104},[77,67465,67466],{"class":158},"    table",[77,67468,88],{"class":87},[77,67470,67471,67474,67476,67479],{"class":79,"line":4118},[77,67472,67473],{"class":94},"      border-collapse",[77,67475,98],{"class":87},[77,67477,67478],{"class":94},"collapse",[77,67480,104],{"class":87},[77,67482,67483,67486,67488,67490],{"class":79,"line":4123},[77,67484,67485],{"class":94},"      border-spacing",[77,67487,98],{"class":87},[77,67489,1939],{"class":94},[77,67491,104],{"class":87},[77,67493,67494,67496,67498,67500,67502,67504,67507],{"class":79,"line":4129},[77,67495,64421],{"class":94},[77,67497,98],{"class":87},[77,67499,2120],{"class":94},[77,67501,2124],{"class":2123},[77,67503,2127],{"class":94},[77,67505,67506],{"class":94}," #c0c0c0",[77,67508,104],{"class":87},[77,67510,67511,67513,67515,67518,67520],{"class":79,"line":4150},[77,67512,57223],{"class":94},[77,67514,98],{"class":87},[77,67516,67517],{"class":94},"500",[77,67519,2124],{"class":2123},[77,67521,104],{"class":87},[77,67523,67524,67526,67528,67530,67532,67534],{"class":79,"line":4155},[77,67525,57160],{"class":94},[77,67527,98],{"class":87},[77,67529,2925],{"class":94},[77,67531,2124],{"class":2123},[77,67533,1942],{"class":94},[77,67535,104],{"class":87},[77,67537,67538,67540,67542,67544],{"class":79,"line":4169},[77,67539,59734],{"class":94},[77,67541,98],{"class":87},[77,67543,54052],{"class":94},[77,67545,104],{"class":87},[77,67547,67548],{"class":79,"line":4174},[77,67549,4662],{"class":87},[77,67551,67552],{"class":79,"line":4203},[77,67553,4875],{"emptyLinePlaceholder":2549},[77,67555,67556,67559],{"class":79,"line":4208},[77,67557,67558],{"class":158},"    th",[77,67560,88],{"class":87},[77,67562,67563,67565,67567,67570],{"class":79,"line":4225},[77,67564,57335],{"class":94},[77,67566,98],{"class":87},[77,67568,67569],{"class":94},"#09c",[77,67571,104],{"class":87},[77,67573,67574,67577,67579,67581,67583,67585,67588],{"class":79,"line":4230},[77,67575,67576],{"class":94},"      font",[77,67578,98],{"class":87},[77,67580,64783],{"class":94},[77,67582,66516],{"class":94},[77,67584,2124],{"class":2123},[77,67586,67587],{"class":271}," \"微软雅黑\"",[77,67589,104],{"class":87},[77,67591,67592,67594,67596,67598],{"class":79,"line":4235},[77,67593,59864],{"class":94},[77,67595,98],{"class":87},[77,67597,63290],{"class":94},[77,67599,104],{"class":87},[77,67601,67602,67604,67606,67608,67610],{"class":79,"line":4240},[77,67603,57237],{"class":94},[77,67605,98],{"class":87},[77,67607,3413],{"class":94},[77,67609,2124],{"class":2123},[77,67611,104],{"class":87},[77,67613,67614],{"class":79,"line":4254},[77,67615,4662],{"class":87},[77,67617,67618],{"class":79,"line":4259},[77,67619,4875],{"emptyLinePlaceholder":2549},[77,67621,67622,67625],{"class":79,"line":5052},[77,67623,67624],{"class":158},"    td",[77,67626,88],{"class":87},[77,67628,67629,67631,67633,67635,67637,67639,67642],{"class":79,"line":5066},[77,67630,64421],{"class":94},[77,67632,98],{"class":87},[77,67634,2120],{"class":94},[77,67636,2124],{"class":2123},[77,67638,2127],{"class":94},[77,67640,67641],{"class":94}," #d0d0d0",[77,67643,104],{"class":87},[77,67645,67646,67648,67650,67653],{"class":79,"line":5074},[77,67647,59864],{"class":94},[77,67649,98],{"class":87},[77,67651,67652],{"class":94},"#404060",[77,67654,104],{"class":87},[77,67656,67657,67659,67661,67663,67665],{"class":79,"line":5079},[77,67658,57149],{"class":94},[77,67660,98],{"class":87},[77,67662,3059],{"class":94},[77,67664,2124],{"class":2123},[77,67666,104],{"class":87},[77,67668,67669],{"class":79,"line":5085},[77,67670,4662],{"class":87},[77,67672,67673],{"class":79,"line":5091},[77,67674,4875],{"emptyLinePlaceholder":2549},[77,67676,67677,67680],{"class":79,"line":5096},[77,67678,67679],{"class":83},"    .allCheck",[77,67681,88],{"class":87},[77,67683,67684,67686,67688,67690,67692],{"class":79,"line":10422},[77,67685,57223],{"class":94},[77,67687,98],{"class":87},[77,67689,3225],{"class":94},[77,67691,2124],{"class":2123},[77,67693,104],{"class":87},[77,67695,67696],{"class":79,"line":10446},[77,67697,4662],{"class":87},[77,67699,67700,67702,67704],{"class":79,"line":10451},[77,67701,54875],{"class":87},[77,67703,2520],{"class":158},[77,67705,291],{"class":87},[77,67707,67708,67710,67712],{"class":79,"line":10457},[77,67709,351],{"class":87},[77,67711,53798],{"class":158},[77,67713,291],{"class":87},[77,67715,67716],{"class":79,"line":10484},[77,67717,4875],{"emptyLinePlaceholder":2549},[77,67719,67720,67722,67724],{"class":79,"line":10489},[77,67721,260],{"class":87},[77,67723,54258],{"class":158},[77,67725,291],{"class":87},[77,67727,67728,67730,67732],{"class":79,"line":10495},[77,67729,54602],{"class":87},[77,67731,2755],{"class":158},[77,67733,291],{"class":87},[77,67735,67736,67738,67740],{"class":79,"line":10507},[77,67737,53805],{"class":87},[77,67739,2761],{"class":158},[77,67741,291],{"class":87},[77,67743,67744,67746,67748,67750,67752,67755],{"class":79,"line":10519},[77,67745,57684],{"class":87},[77,67747,2764],{"class":158},[77,67749,334],{"class":83},[77,67751,268],{"class":87},[77,67753,67754],{"class":271},"\"allCheck\"",[77,67756,291],{"class":87},[77,67758,67759,67761,67763,67765,67767,67769,67771,67773,67775,67777,67779,67782,67785,67787,67789,67791,67794,67797,67799],{"class":79,"line":10531},[77,67760,57750],{"class":87},[77,67762,159],{"class":158},[77,67764,2487],{"class":83},[77,67766,268],{"class":87},[77,67768,56283],{"class":271},[77,67770,2495],{"class":83},[77,67772,268],{"class":87},[77,67774,444],{"class":271},[77,67776,17430],{"class":83},[77,67778,268],{"class":87},[77,67780,67781],{"class":271},"\"checkAll\"",[77,67783,67784],{"class":87},"> \u003C",[77,67786,77],{"class":158},[77,67788,334],{"class":83},[77,67790,268],{"class":87},[77,67792,67793],{"class":271},"\"all\"",[77,67795,67796],{"class":87},">全选\u003C\u002F",[77,67798,77],{"class":158},[77,67800,291],{"class":87},[77,67802,67803,67805,67807],{"class":79,"line":12189},[77,67804,57855],{"class":87},[77,67806,2764],{"class":158},[77,67808,291],{"class":87},[77,67810,67811,67813,67815,67818,67820],{"class":79,"line":12214},[77,67812,57684],{"class":87},[77,67814,2764],{"class":158},[77,67816,67817],{"class":87},">商品\u003C\u002F",[77,67819,2764],{"class":158},[77,67821,291],{"class":87},[77,67823,67824,67826,67828,67831,67833],{"class":79,"line":12237},[77,67825,57684],{"class":87},[77,67827,2764],{"class":158},[77,67829,67830],{"class":87},">商家\u003C\u002F",[77,67832,2764],{"class":158},[77,67834,291],{"class":87},[77,67836,67837,67839,67841,67844,67846],{"class":79,"line":12261},[77,67838,57684],{"class":87},[77,67840,2764],{"class":158},[77,67842,67843],{"class":87},">价格\u003C\u002F",[77,67845,2764],{"class":158},[77,67847,291],{"class":87},[77,67849,67850,67852,67854],{"class":79,"line":12266},[77,67851,54235],{"class":87},[77,67853,2761],{"class":158},[77,67855,291],{"class":87},[77,67857,67858,67860,67862],{"class":79,"line":12271},[77,67859,53805],{"class":87},[77,67861,2761],{"class":158},[77,67863,291],{"class":87},[77,67865,67866,67868,67870],{"class":79,"line":12276},[77,67867,57684],{"class":87},[77,67869,2806],{"class":158},[77,67871,291],{"class":87},[77,67873,67874,67876,67878,67880,67882,67884,67886,67888,67891,67893,67895,67898],{"class":79,"line":12285},[77,67875,57750],{"class":87},[77,67877,159],{"class":158},[77,67879,2487],{"class":83},[77,67881,268],{"class":87},[77,67883,56283],{"class":271},[77,67885,2495],{"class":83},[77,67887,268],{"class":87},[77,67889,67890],{"class":271},"\"check\"",[77,67892,334],{"class":83},[77,67894,268],{"class":87},[77,67896,67897],{"class":271},"\"ck\"",[77,67899,291],{"class":87},[77,67901,67902,67904,67906],{"class":79,"line":12290},[77,67903,57855],{"class":87},[77,67905,2806],{"class":158},[77,67907,291],{"class":87},[77,67909,67910,67912,67914,67916,67918],{"class":79,"line":12296},[77,67911,57684],{"class":87},[77,67913,2806],{"class":158},[77,67915,63619],{"class":87},[77,67917,2806],{"class":158},[77,67919,291],{"class":87},[77,67921,67922,67924,67926,67929,67931],{"class":79,"line":12317},[77,67923,57684],{"class":87},[77,67925,2806],{"class":158},[77,67927,67928],{"class":87},">小米\u003C\u002F",[77,67930,2806],{"class":158},[77,67932,291],{"class":87},[77,67934,67935,67937,67939,67942,67944],{"class":79,"line":12323},[77,67936,57684],{"class":87},[77,67938,2806],{"class":158},[77,67940,67941],{"class":87},">￥1999\u003C\u002F",[77,67943,2806],{"class":158},[77,67945,291],{"class":87},[77,67947,67948,67950,67952],{"class":79,"line":12337},[77,67949,54235],{"class":87},[77,67951,2761],{"class":158},[77,67953,291],{"class":87},[77,67955,67956,67958,67960],{"class":79,"line":12343},[77,67957,53805],{"class":87},[77,67959,2761],{"class":158},[77,67961,291],{"class":87},[77,67963,67964,67966,67968],{"class":79,"line":12370},[77,67965,57684],{"class":87},[77,67967,2806],{"class":158},[77,67969,291],{"class":87},[77,67971,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994],{"class":79,"line":12379},[77,67973,57750],{"class":87},[77,67975,159],{"class":158},[77,67977,2487],{"class":83},[77,67979,268],{"class":87},[77,67981,56283],{"class":271},[77,67983,2495],{"class":83},[77,67985,268],{"class":87},[77,67987,67890],{"class":271},[77,67989,334],{"class":83},[77,67991,268],{"class":87},[77,67993,67897],{"class":271},[77,67995,291],{"class":87},[77,67997,67998,68000,68002],{"class":79,"line":12385},[77,67999,57855],{"class":87},[77,68001,2806],{"class":158},[77,68003,291],{"class":87},[77,68005,68006,68008,68010,68013,68015],{"class":79,"line":12393},[77,68007,57684],{"class":87},[77,68009,2806],{"class":158},[77,68011,68012],{"class":87},">小米净水器\u003C\u002F",[77,68014,2806],{"class":158},[77,68016,291],{"class":87},[77,68018,68019,68021,68023,68025,68027],{"class":79,"line":12398},[77,68020,57684],{"class":87},[77,68022,2806],{"class":158},[77,68024,67928],{"class":87},[77,68026,2806],{"class":158},[77,68028,291],{"class":87},[77,68030,68031,68033,68035,68038,68040],{"class":79,"line":19074},[77,68032,57684],{"class":87},[77,68034,2806],{"class":158},[77,68036,68037],{"class":87},">￥4999\u003C\u002F",[77,68039,2806],{"class":158},[77,68041,291],{"class":87},[77,68043,68044,68046,68048],{"class":79,"line":19080},[77,68045,54235],{"class":87},[77,68047,2761],{"class":158},[77,68049,291],{"class":87},[77,68051,68052,68054,68056],{"class":79,"line":19103},[77,68053,53805],{"class":87},[77,68055,2761],{"class":158},[77,68057,291],{"class":87},[77,68059,68060,68062,68064],{"class":79,"line":19109},[77,68061,57684],{"class":87},[77,68063,2806],{"class":158},[77,68065,291],{"class":87},[77,68067,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090],{"class":79,"line":19132},[77,68069,57750],{"class":87},[77,68071,159],{"class":158},[77,68073,2487],{"class":83},[77,68075,268],{"class":87},[77,68077,56283],{"class":271},[77,68079,2495],{"class":83},[77,68081,268],{"class":87},[77,68083,67890],{"class":271},[77,68085,334],{"class":83},[77,68087,268],{"class":87},[77,68089,67897],{"class":271},[77,68091,291],{"class":87},[77,68093,68094,68096,68098],{"class":79,"line":19146},[77,68095,57855],{"class":87},[77,68097,2806],{"class":158},[77,68099,291],{"class":87},[77,68101,68102,68104,68106,68109,68111],{"class":79,"line":19166},[77,68103,57684],{"class":87},[77,68105,2806],{"class":158},[77,68107,68108],{"class":87},">小米电视\u003C\u002F",[77,68110,2806],{"class":158},[77,68112,291],{"class":87},[77,68114,68115,68117,68119,68121,68123],{"class":79,"line":19172},[77,68116,57684],{"class":87},[77,68118,2806],{"class":158},[77,68120,67928],{"class":87},[77,68122,2806],{"class":158},[77,68124,291],{"class":87},[77,68126,68127,68129,68131,68134,68136],{"class":79,"line":19183},[77,68128,57684],{"class":87},[77,68130,2806],{"class":158},[77,68132,68133],{"class":87},">￥5999\u003C\u002F",[77,68135,2806],{"class":158},[77,68137,291],{"class":87},[77,68139,68140,68142,68144],{"class":79,"line":19206},[77,68141,54235],{"class":87},[77,68143,2761],{"class":158},[77,68145,291],{"class":87},[77,68147,68148,68150,68152],{"class":79,"line":19228},[77,68149,54875],{"class":87},[77,68151,2755],{"class":158},[77,68153,291],{"class":87},[77,68155,68156,68158,68160],{"class":79,"line":19233},[77,68157,54602],{"class":87},[77,68159,54271],{"class":158},[77,68161,291],{"class":87},[77,68163,68164],{"class":79,"line":19239},[77,68165,68166],{"class":323},"    \u002F\u002F 1. 获取大复选框\n",[77,68168,68169,68171,68174,68176,68178,68180,68182,68185],{"class":79,"line":19253},[77,68170,13694],{"class":2123},[77,68172,68173],{"class":94}," checkAll",[77,68175,16036],{"class":2123},[77,68177,56850],{"class":87},[77,68179,56853],{"class":83},[77,68181,2622],{"class":87},[77,68183,68184],{"class":271},"'#checkAll'",[77,68186,2628],{"class":87},[77,68188,68189],{"class":79,"line":19266},[77,68190,68191],{"class":323},"    \u002F\u002F 2. 获取所有的小复选框\n",[77,68193,68194,68196,68199,68201,68203,68205,68207,68210],{"class":79,"line":19271},[77,68195,13694],{"class":2123},[77,68197,68198],{"class":94}," cks",[77,68200,16036],{"class":2123},[77,68202,56850],{"class":87},[77,68204,58129],{"class":83},[77,68206,2622],{"class":87},[77,68208,68209],{"class":271},"'.ck'",[77,68211,2628],{"class":87},[77,68213,68214],{"class":79,"line":19285},[77,68215,68216],{"class":323},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[77,68218,68219,68222,68224,68226,68228,68230,68232],{"class":79,"line":19290},[77,68220,68221],{"class":87},"    checkAll.",[77,68223,60261],{"class":83},[77,68225,2622],{"class":87},[77,68227,60266],{"class":271},[77,68229,680],{"class":87},[77,68231,56903],{"class":2123},[77,68233,56906],{"class":87},[77,68235,68236],{"class":79,"line":19296},[77,68237,68238],{"class":323},"      \u002F\u002F 得到当前大复选框的选中状态\n",[77,68240,68241,68244],{"class":79,"line":19301},[77,68242,68243],{"class":323},"      \u002F\u002F console.log(checkAll.checked)",[77,68245,68246],{"class":323},"  \u002F\u002F 得到 是 true 或者是 false\n",[77,68248,68249],{"class":79,"line":19315},[77,68250,68251],{"class":323},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[77,68253,68254,68256,68258,68260,68262,68264,68266,68268,68270,68273,68275,68277,68279],{"class":79,"line":19320},[77,68255,54742],{"class":2123},[77,68257,4134],{"class":87},[77,68259,54305],{"class":2123},[77,68261,11911],{"class":87},[77,68263,268],{"class":2123},[77,68265,6568],{"class":94},[77,68267,11918],{"class":87},[77,68269,260],{"class":2123},[77,68271,68272],{"class":87}," cks.",[77,68274,54426],{"class":94},[77,68276,5689],{"class":87},[77,68278,4767],{"class":2123},[77,68280,14914],{"class":87},[77,68282,68283,68286,68288,68291],{"class":79,"line":19325},[77,68284,68285],{"class":87},"        cks[i].checked ",[77,68287,268],{"class":2123},[77,68289,68290],{"class":94}," this",[77,68292,68293],{"class":87},".checked\n",[77,68295,68296],{"class":79,"line":19339},[77,68297,54856],{"class":87},[77,68299,68300],{"class":79,"line":19351},[77,68301,35928],{"class":87},[77,68303,68304],{"class":79,"line":19356},[77,68305,68306],{"class":323},"    \u002F\u002F 5. 小复选框控制大复选框\n",[77,68308,68309],{"class":79,"line":19369},[77,68310,4875],{"emptyLinePlaceholder":2549},[77,68312,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337],{"class":79,"line":19374},[77,68314,5676],{"class":2123},[77,68316,4134],{"class":87},[77,68318,54305],{"class":2123},[77,68320,11911],{"class":87},[77,68322,268],{"class":2123},[77,68324,6568],{"class":94},[77,68326,11918],{"class":87},[77,68328,260],{"class":2123},[77,68330,68272],{"class":87},[77,68332,54426],{"class":94},[77,68334,5689],{"class":87},[77,68336,4767],{"class":2123},[77,68338,14914],{"class":87},[77,68340,68341],{"class":79,"line":19379},[77,68342,68343],{"class":323},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[77,68345,68346,68349,68351,68353,68355,68357,68359],{"class":79,"line":19384},[77,68347,68348],{"class":87},"      cks[i].",[77,68350,60261],{"class":83},[77,68352,2622],{"class":87},[77,68354,60266],{"class":271},[77,68356,680],{"class":87},[77,68358,56903],{"class":2123},[77,68360,56906],{"class":87},[77,68362,68363],{"class":79,"line":19397},[77,68364,68365],{"class":323},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[77,68367,68368],{"class":79,"line":19402},[77,68369,68370],{"class":323},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[77,68372,68373],{"class":79,"line":35100},[77,68374,68375],{"class":323},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[77,68377,68378],{"class":79,"line":35106},[77,68379,68380],{"class":323},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[77,68382,68383,68386,68388,68390,68392,68394,68397,68399,68401,68403,68405],{"class":79,"line":35112},[77,68384,68385],{"class":87},"        checkAll.checked ",[77,68387,268],{"class":2123},[77,68389,56850],{"class":87},[77,68391,58129],{"class":83},[77,68393,2622],{"class":87},[77,68395,68396],{"class":271},"'.ck:checked'",[77,68398,33294],{"class":87},[77,68400,54426],{"class":94},[77,68402,60354],{"class":2123},[77,68404,68272],{"class":87},[77,68406,58279],{"class":94},[77,68408,68409],{"class":79,"line":35118},[77,68410,67258],{"class":87},[77,68412,68413],{"class":79,"line":35124},[77,68414,4662],{"class":87},[77,68416,68417,68419,68421],{"class":79,"line":35135},[77,68418,54875],{"class":87},[77,68420,54271],{"class":158},[77,68422,291],{"class":87},[77,68424,68425,68427,68429],{"class":79,"line":35141},[77,68426,351],{"class":87},[77,68428,54258],{"class":158},[77,68430,291],{"class":87},[77,68432,68433],{"class":79,"line":35161},[77,68434,4875],{"emptyLinePlaceholder":2549},[77,68436,68437,68439,68441],{"class":79,"line":35167},[77,68438,351],{"class":87},[77,68440,53101],{"class":158},[77,68442,291],{"class":87},[24,68444,68445],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[24,68447,68448],{},"用好之间比较得到的布尔值！！！",[24,68450,68451,68452,68455,68456,4134,68459,3197,68461,68464],{},"在 JS 里访问的时候，",[74,68453,68454],{},"checkbox.checked"," 是一个 ",[27,68457,68458],{},"布尔值",[74,68460,3840],{},[74,68462,68463],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[24,68466,68467,68468,68471,68472],{},"HTML 的 ",[74,68469,68470],{},"checked=\"checked\""," 只是 ",[27,68473,68474,68475,68478],{},"初始值；JS 的 ",[74,68476,68477],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[24,68480,68481],{},"：checked是一个伪类选择器",[24,68483,68484],{},[40,68485],{"alt":72,"src":68486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[24,68488,68489,68492],{},[68490,68491],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[24,68494,68495],{},[40,68496],{"alt":72,"src":68497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68499,68501],{"id":68500},"_33-dom事件进阶","3.3 DOM事件进阶",[19,68503,68505],{"id":68504},"_331-事件流","3.3.1 事件流",[24,68507,68508],{},[40,68509],{"alt":72,"src":68510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24468,68512,68514],{"id":68513},"_3311-事件捕获","3.3.1.1 事件捕获",[24,68516,68517],{},[40,68518],{"alt":72,"src":68519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[67,68521,68523],{"className":53099,"code":68522,"language":53101,"meta":72,"style":72},"\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",[74,68524,68525,68535,68549,68553,68561,68575,68595,68607,68615,68622,68634,68646,68656,68660,68664,68671,68683,68695,68705,68709,68717,68725,68729,68737,68752,68771,68779,68787,68807,68827,68843,68854,68862,68879,68890,68898,68915,68926,68934,68942,68950,68954],{"__ignoreMap":72},[77,68526,68527,68529,68531,68533],{"class":79,"line":80},[77,68528,53763],{"class":87},[77,68530,53766],{"class":158},[77,68532,53769],{"class":83},[77,68534,291],{"class":87},[77,68536,68537,68539,68541,68543,68545,68547],{"class":79,"line":91},[77,68538,260],{"class":87},[77,68540,53101],{"class":158},[77,68542,53780],{"class":83},[77,68544,268],{"class":87},[77,68546,53785],{"class":271},[77,68548,291],{"class":87},[77,68550,68551],{"class":79,"line":107},[77,68552,4875],{"emptyLinePlaceholder":2549},[77,68554,68555,68557,68559],{"class":79,"line":191},[77,68556,260],{"class":87},[77,68558,53798],{"class":158},[77,68560,291],{"class":87},[77,68562,68563,68565,68567,68569,68571,68573],{"class":79,"line":1543},[77,68564,54602],{"class":87},[77,68566,53808],{"class":158},[77,68568,53811],{"class":83},[77,68570,268],{"class":87},[77,68572,53816],{"class":271},[77,68574,291],{"class":87},[77,68576,68577,68579,68581,68583,68585,68587,68589,68591,68593],{"class":79,"line":1549},[77,68578,54602],{"class":87},[77,68580,53808],{"class":158},[77,68582,2495],{"class":83},[77,68584,268],{"class":87},[77,68586,53855],{"class":271},[77,68588,53835],{"class":83},[77,68590,268],{"class":87},[77,68592,53862],{"class":271},[77,68594,291],{"class":87},[77,68596,68597,68599,68601,68603,68605],{"class":79,"line":1566},[77,68598,54602],{"class":87},[77,68600,53871],{"class":158},[77,68602,53874],{"class":87},[77,68604,53871],{"class":158},[77,68606,291],{"class":87},[77,68608,68609,68611,68613],{"class":79,"line":1572},[77,68610,54602],{"class":87},[77,68612,2520],{"class":158},[77,68614,291],{"class":87},[77,68616,68617,68620],{"class":79,"line":1589},[77,68618,68619],{"class":83},"    .father",[77,68621,88],{"class":87},[77,68623,68624,68626,68628,68630,68632],{"class":79,"line":1595},[77,68625,57223],{"class":94},[77,68627,98],{"class":87},[77,68629,67517],{"class":94},[77,68631,2124],{"class":2123},[77,68633,104],{"class":87},[77,68635,68636,68638,68640,68642,68644],{"class":79,"line":4088},[77,68637,57237],{"class":94},[77,68639,98],{"class":87},[77,68641,67517],{"class":94},[77,68643,2124],{"class":2123},[77,68645,104],{"class":87},[77,68647,68648,68650,68652,68654],{"class":79,"line":4093},[77,68649,57335],{"class":94},[77,68651,98],{"class":87},[77,68653,54104],{"class":94},[77,68655,104],{"class":87},[77,68657,68658],{"class":79,"line":4099},[77,68659,4662],{"class":87},[77,68661,68662],{"class":79,"line":4104},[77,68663,4875],{"emptyLinePlaceholder":2549},[77,68665,68666,68669],{"class":79,"line":4118},[77,68667,68668],{"class":83},"    .son",[77,68670,88],{"class":87},[77,68672,68673,68675,68677,68679,68681],{"class":79,"line":4123},[77,68674,57223],{"class":94},[77,68676,98],{"class":87},[77,68678,4198],{"class":94},[77,68680,2124],{"class":2123},[77,68682,104],{"class":87},[77,68684,68685,68687,68689,68691,68693],{"class":79,"line":4129},[77,68686,57237],{"class":94},[77,68688,98],{"class":87},[77,68690,4198],{"class":94},[77,68692,2124],{"class":2123},[77,68694,104],{"class":87},[77,68696,68697,68699,68701,68703],{"class":79,"line":4150},[77,68698,57335],{"class":94},[77,68700,98],{"class":87},[77,68702,174],{"class":94},[77,68704,104],{"class":87},[77,68706,68707],{"class":79,"line":4155},[77,68708,4662],{"class":87},[77,68710,68711,68713,68715],{"class":79,"line":4169},[77,68712,54875],{"class":87},[77,68714,2520],{"class":158},[77,68716,291],{"class":87},[77,68718,68719,68721,68723],{"class":79,"line":4174},[77,68720,351],{"class":87},[77,68722,53798],{"class":158},[77,68724,291],{"class":87},[77,68726,68727],{"class":79,"line":4203},[77,68728,4875],{"emptyLinePlaceholder":2549},[77,68730,68731,68733,68735],{"class":79,"line":4208},[77,68732,260],{"class":87},[77,68734,54258],{"class":158},[77,68736,291],{"class":87},[77,68738,68739,68741,68743,68745,68747,68750],{"class":79,"line":4225},[77,68740,54602],{"class":87},[77,68742,331],{"class":158},[77,68744,334],{"class":83},[77,68746,268],{"class":87},[77,68748,68749],{"class":271},"\"father\"",[77,68751,291],{"class":87},[77,68753,68754,68756,68758,68760,68762,68765,68767,68769],{"class":79,"line":4230},[77,68755,53805],{"class":87},[77,68757,331],{"class":158},[77,68759,334],{"class":83},[77,68761,268],{"class":87},[77,68763,68764],{"class":271},"\"son\"",[77,68766,57762],{"class":87},[77,68768,331],{"class":158},[77,68770,291],{"class":87},[77,68772,68773,68775,68777],{"class":79,"line":4235},[77,68774,54875],{"class":87},[77,68776,331],{"class":158},[77,68778,291],{"class":87},[77,68780,68781,68783,68785],{"class":79,"line":4240},[77,68782,54602],{"class":87},[77,68784,54271],{"class":158},[77,68786,291],{"class":87},[77,68788,68789,68791,68794,68796,68798,68800,68802,68805],{"class":79,"line":4254},[77,68790,13694],{"class":2123},[77,68792,68793],{"class":94}," fa",[77,68795,16036],{"class":2123},[77,68797,56850],{"class":87},[77,68799,56853],{"class":83},[77,68801,2622],{"class":87},[77,68803,68804],{"class":271},"'.father'",[77,68806,2628],{"class":87},[77,68808,68809,68811,68814,68816,68818,68820,68822,68825],{"class":79,"line":4259},[77,68810,13694],{"class":2123},[77,68812,68813],{"class":94}," son",[77,68815,16036],{"class":2123},[77,68817,56850],{"class":87},[77,68819,56853],{"class":83},[77,68821,2622],{"class":87},[77,68823,68824],{"class":271},"'.son'",[77,68826,2628],{"class":87},[77,68828,68829,68831,68833,68835,68837,68839,68841],{"class":79,"line":5052},[77,68830,54865],{"class":87},[77,68832,60261],{"class":83},[77,68834,2622],{"class":87},[77,68836,60266],{"class":271},[77,68838,680],{"class":87},[77,68840,56903],{"class":2123},[77,68842,56906],{"class":87},[77,68844,68845,68847,68849,68852],{"class":79,"line":5066},[77,68846,61373],{"class":83},[77,68848,2622],{"class":87},[77,68850,68851],{"class":271},"'woshiu1'",[77,68853,2628],{"class":87},[77,68855,68856,68858,68860],{"class":79,"line":5074},[77,68857,56989],{"class":87},[77,68859,3840],{"class":94},[77,68861,2628],{"class":87},[77,68863,68864,68867,68869,68871,68873,68875,68877],{"class":79,"line":5079},[77,68865,68866],{"class":87},"    fa.",[77,68868,60261],{"class":83},[77,68870,2622],{"class":87},[77,68872,60266],{"class":271},[77,68874,680],{"class":87},[77,68876,56903],{"class":2123},[77,68878,56906],{"class":87},[77,68880,68881,68883,68885,68888],{"class":79,"line":5085},[77,68882,61373],{"class":83},[77,68884,2622],{"class":87},[77,68886,68887],{"class":271},"'1'",[77,68889,2628],{"class":87},[77,68891,68892,68894,68896],{"class":79,"line":5091},[77,68893,56989],{"class":87},[77,68895,3840],{"class":94},[77,68897,2628],{"class":87},[77,68899,68900,68903,68905,68907,68909,68911,68913],{"class":79,"line":5096},[77,68901,68902],{"class":87},"    son.",[77,68904,60261],{"class":83},[77,68906,2622],{"class":87},[77,68908,60266],{"class":271},[77,68910,680],{"class":87},[77,68912,56903],{"class":2123},[77,68914,56906],{"class":87},[77,68916,68917,68919,68921,68924],{"class":79,"line":10422},[77,68918,61373],{"class":83},[77,68920,2622],{"class":87},[77,68922,68923],{"class":271},"'2'",[77,68925,2628],{"class":87},[77,68927,68928,68930,68932],{"class":79,"line":10446},[77,68929,56989],{"class":87},[77,68931,3840],{"class":94},[77,68933,2628],{"class":87},[77,68935,68936,68938,68940],{"class":79,"line":10451},[77,68937,54875],{"class":87},[77,68939,54271],{"class":158},[77,68941,291],{"class":87},[77,68943,68944,68946,68948],{"class":79,"line":10457},[77,68945,351],{"class":87},[77,68947,54258],{"class":158},[77,68949,291],{"class":87},[77,68951,68952],{"class":79,"line":10484},[77,68953,4875],{"emptyLinePlaceholder":2549},[77,68955,68956,68958,68960],{"class":79,"line":10489},[77,68957,351],{"class":87},[77,68959,53101],{"class":158},[77,68961,291],{"class":87},[24,68963,68964],{},[40,68965],{"alt":72,"src":68966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[24,68968,68969],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24468,68971,68973],{"id":68972},"_3312-事件冒泡","3.3.1.2 事件冒泡",[24,68975,68976],{},[40,68977],{"alt":72,"src":68978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[24,68980,68981],{},"反着来",[24,68983,68984],{},"注意是同名事件，比如都是‘click’",[24468,68986,68988],{"id":68987},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[24,68990,68991],{},[40,68992],{"alt":72,"src":68993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24468,68995,68997],{"id":68996},"_3314-解绑事件","3.3.1.4 解绑事件",[24,68999,69000],{},[40,69001],{"alt":72,"src":69002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[24,69004,69005],{},[40,69006],{"alt":72,"src":69007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24468,69009,69011],{"id":69010},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[139,69013,69014],{},[54,69015,69016],{},"事件类型的区别",[24,69018,69019],{},[40,69020],{"alt":72,"src":69021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[24,69023,69024],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[139,69026,69027],{"start":91},[54,69028,69029],{},"注册事件的区别",[24,69031,69032],{},[40,69033],{"alt":72,"src":69034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24468,69036,69038],{"id":69037},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[24,69040,69041],{},[40,69042],{"alt":72,"src":69043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[24,69045,69046],{},[40,69047],{"alt":72,"src":69048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[67,69050,69052],{"className":55525,"code":69051,"language":55527,"meta":72,"style":72},"\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",[74,69053,69054,69062,69079,69102,69110,69115,69120,69125,69129,69137,69145],{"__ignoreMap":72},[77,69055,69056,69058,69060],{"class":79,"line":80},[77,69057,260],{"class":87},[77,69059,54258],{"class":158},[77,69061,291],{"class":87},[77,69063,69064,69066,69069,69072,69074,69077],{"class":79,"line":91},[77,69065,54602],{"class":87},[77,69067,69068],{"class":158},"form",[77,69070,69071],{"class":83}," action",[77,69073,268],{"class":87},[77,69075,69076],{"class":271},"\"http:\u002F\u002Fwww.itcast.cn\"",[77,69078,291],{"class":87},[77,69080,69081,69083,69085,69087,69089,69092,69095,69097,69100],{"class":79,"line":107},[77,69082,53805],{"class":87},[77,69084,159],{"class":158},[77,69086,2487],{"class":83},[77,69088,268],{"class":87},[77,69090,69091],{"class":271},"\"submit\"",[77,69093,69094],{"class":83}," value",[77,69096,268],{"class":87},[77,69098,69099],{"class":271},"\"免费注册\"",[77,69101,291],{"class":87},[77,69103,69104,69106,69108],{"class":79,"line":191},[77,69105,53805],{"class":87},[77,69107,54271],{"class":158},[77,69109,291],{"class":87},[77,69111,69112],{"class":79,"line":1543},[77,69113,69114],{"class":87},"      const form = document.querySelector('form')\n",[77,69116,69117],{"class":79,"line":1549},[77,69118,69119],{"class":87},"      form.addEventListener('submit', function (e) {\n",[77,69121,69122],{"class":79,"line":1566},[77,69123,69124],{"class":87},"        e.preventDefault()\n",[77,69126,69127],{"class":79,"line":1572},[77,69128,67258],{"class":87},[77,69130,69131,69133,69135],{"class":79,"line":1589},[77,69132,54235],{"class":87},[77,69134,54271],{"class":158},[77,69136,291],{"class":87},[77,69138,69139,69141,69143],{"class":79,"line":1595},[77,69140,54875],{"class":87},[77,69142,69068],{"class":158},[77,69144,291],{"class":87},[77,69146,69147,69149,69151],{"class":79,"line":4088},[77,69148,351],{"class":87},[77,69150,54258],{"class":158},[77,69152,291],{"class":87},[24,69154,69155],{},"点击不在跳转！！！",[19,69157,69159],{"id":69158},"_332-事件委托","3.3.2 事件委托",[24,69161,69162],{},[40,69163],{"alt":72,"src":69164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[67,69166,69168],{"className":53099,"code":69167,"language":53101,"meta":72,"style":72},"\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",[74,69169,69170,69180,69194,69198,69206,69220,69240,69252,69260,69264,69272,69280,69292,69304,69316,69328,69340,69353,69361,69369,69374,69393,69414,69419,69424,69429,69434,69443,69447,69457,69461,69466,69471,69485,69495,69499,69503,69511,69519,69523],{"__ignoreMap":72},[77,69171,69172,69174,69176,69178],{"class":79,"line":80},[77,69173,53763],{"class":87},[77,69175,53766],{"class":158},[77,69177,53769],{"class":83},[77,69179,291],{"class":87},[77,69181,69182,69184,69186,69188,69190,69192],{"class":79,"line":91},[77,69183,260],{"class":87},[77,69185,53101],{"class":158},[77,69187,53780],{"class":83},[77,69189,268],{"class":87},[77,69191,53785],{"class":271},[77,69193,291],{"class":87},[77,69195,69196],{"class":79,"line":107},[77,69197,4875],{"emptyLinePlaceholder":2549},[77,69199,69200,69202,69204],{"class":79,"line":191},[77,69201,260],{"class":87},[77,69203,53798],{"class":158},[77,69205,291],{"class":87},[77,69207,69208,69210,69212,69214,69216,69218],{"class":79,"line":1543},[77,69209,54602],{"class":87},[77,69211,53808],{"class":158},[77,69213,53811],{"class":83},[77,69215,268],{"class":87},[77,69217,53816],{"class":271},[77,69219,291],{"class":87},[77,69221,69222,69224,69226,69228,69230,69232,69234,69236,69238],{"class":79,"line":1549},[77,69223,54602],{"class":87},[77,69225,53808],{"class":158},[77,69227,2495],{"class":83},[77,69229,268],{"class":87},[77,69231,53855],{"class":271},[77,69233,53835],{"class":83},[77,69235,268],{"class":87},[77,69237,53862],{"class":271},[77,69239,291],{"class":87},[77,69241,69242,69244,69246,69248,69250],{"class":79,"line":1566},[77,69243,54602],{"class":87},[77,69245,53871],{"class":158},[77,69247,53874],{"class":87},[77,69249,53871],{"class":158},[77,69251,291],{"class":87},[77,69253,69254,69256,69258],{"class":79,"line":1572},[77,69255,351],{"class":87},[77,69257,53798],{"class":158},[77,69259,291],{"class":87},[77,69261,69262],{"class":79,"line":1589},[77,69263,4875],{"emptyLinePlaceholder":2549},[77,69265,69266,69268,69270],{"class":79,"line":1595},[77,69267,260],{"class":87},[77,69269,54258],{"class":158},[77,69271,291],{"class":87},[77,69273,69274,69276,69278],{"class":79,"line":4088},[77,69275,54602],{"class":87},[77,69277,51],{"class":158},[77,69279,291],{"class":87},[77,69281,69282,69284,69286,69288,69290],{"class":79,"line":4093},[77,69283,53805],{"class":87},[77,69285,54],{"class":158},[77,69287,56420],{"class":87},[77,69289,54],{"class":158},[77,69291,291],{"class":87},[77,69293,69294,69296,69298,69300,69302],{"class":79,"line":4099},[77,69295,53805],{"class":87},[77,69297,54],{"class":158},[77,69299,56439],{"class":87},[77,69301,54],{"class":158},[77,69303,291],{"class":87},[77,69305,69306,69308,69310,69312,69314],{"class":79,"line":4104},[77,69307,53805],{"class":87},[77,69309,54],{"class":158},[77,69311,56458],{"class":87},[77,69313,54],{"class":158},[77,69315,291],{"class":87},[77,69317,69318,69320,69322,69324,69326],{"class":79,"line":4118},[77,69319,53805],{"class":87},[77,69321,54],{"class":158},[77,69323,56477],{"class":87},[77,69325,54],{"class":158},[77,69327,291],{"class":87},[77,69329,69330,69332,69334,69336,69338],{"class":79,"line":4123},[77,69331,53805],{"class":87},[77,69333,54],{"class":158},[77,69335,56496],{"class":87},[77,69337,54],{"class":158},[77,69339,291],{"class":87},[77,69341,69342,69344,69346,69349,69351],{"class":79,"line":4129},[77,69343,53805],{"class":87},[77,69345,24],{"class":158},[77,69347,69348],{"class":87},">我不需要变色\u003C\u002F",[77,69350,24],{"class":158},[77,69352,291],{"class":87},[77,69354,69355,69357,69359],{"class":79,"line":4150},[77,69356,54875],{"class":87},[77,69358,51],{"class":158},[77,69360,291],{"class":87},[77,69362,69363,69365,69367],{"class":79,"line":4155},[77,69364,54602],{"class":87},[77,69366,54271],{"class":158},[77,69368,291],{"class":87},[77,69370,69371],{"class":79,"line":4169},[77,69372,69373],{"class":323},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[77,69375,69376,69378,69380,69382,69384,69386,69388,69391],{"class":79,"line":4174},[77,69377,13694],{"class":2123},[77,69379,63738],{"class":94},[77,69381,16036],{"class":2123},[77,69383,56850],{"class":87},[77,69385,56853],{"class":83},[77,69387,2622],{"class":87},[77,69389,69390],{"class":271},"'ul'",[77,69392,2628],{"class":87},[77,69394,69395,69398,69400,69402,69404,69406,69408,69410,69412],{"class":79,"line":4203},[77,69396,69397],{"class":87},"    ul.",[77,69399,60261],{"class":83},[77,69401,2622],{"class":87},[77,69403,60266],{"class":271},[77,69405,680],{"class":87},[77,69407,56903],{"class":2123},[77,69409,4134],{"class":87},[77,69411,2693],{"class":7691},[77,69413,14914],{"class":87},[77,69415,69416],{"class":79,"line":4208},[77,69417,69418],{"class":323},"      \u002F\u002F alert(1)\n",[77,69420,69421],{"class":79,"line":4225},[77,69422,69423],{"class":323},"      \u002F\u002F e.target就是我们点击的对象\n",[77,69425,69426],{"class":79,"line":4230},[77,69427,69428],{"class":323},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[77,69430,69431],{"class":79,"line":4235},[77,69432,69433],{"class":323},"      \u002F\u002F e.target.style.color = 'red'\n",[77,69435,69436,69438,69440],{"class":79,"line":4240},[77,69437,60692],{"class":87},[77,69439,60695],{"class":83},[77,69441,69442],{"class":87},"(e)\n",[77,69444,69445],{"class":79,"line":4254},[77,69446,4875],{"emptyLinePlaceholder":2549},[77,69448,69449,69451,69454],{"class":79,"line":4259},[77,69450,60692],{"class":87},[77,69452,69453],{"class":83},"dir",[77,69455,69456],{"class":87},"(e.target)\n",[77,69458,69459],{"class":79,"line":5052},[77,69460,4875],{"emptyLinePlaceholder":2549},[77,69462,69463],{"class":79,"line":5066},[77,69464,69465],{"class":323},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[77,69467,69468],{"class":79,"line":5074},[77,69469,69470],{"class":323},"      \u002F\u002F 通过tagName来进行判断\n",[77,69472,69473,69475,69478,69480,69483],{"class":79,"line":5079},[77,69474,56934],{"class":2123},[77,69476,69477],{"class":87}," (e.target.tagName ",[77,69479,56940],{"class":2123},[77,69481,69482],{"class":271}," 'LI'",[77,69484,14914],{"class":87},[77,69486,69487,69490,69492],{"class":79,"line":5085},[77,69488,69489],{"class":87},"        e.target.style.color ",[77,69491,268],{"class":2123},[77,69493,69494],{"class":271}," 'red'\n",[77,69496,69497],{"class":79,"line":5091},[77,69498,54856],{"class":87},[77,69500,69501],{"class":79,"line":5096},[77,69502,35928],{"class":87},[77,69504,69505,69507,69509],{"class":79,"line":10422},[77,69506,54875],{"class":87},[77,69508,54271],{"class":158},[77,69510,291],{"class":87},[77,69512,69513,69515,69517],{"class":79,"line":10446},[77,69514,351],{"class":87},[77,69516,54258],{"class":158},[77,69518,291],{"class":87},[77,69520,69521],{"class":79,"line":10451},[77,69522,4875],{"emptyLinePlaceholder":2549},[77,69524,69525,69527,69529],{"class":79,"line":10457},[77,69526,351],{"class":87},[77,69528,53101],{"class":158},[77,69530,291],{"class":87},[24,69532,69533],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[24,69535,69536],{},"if(e.target.ragName==='P') {}",[24,69538,69539],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[24,69541,69542],{},"通过事件委托的方式实现tab栏切换改造：",[24,69544,69545],{},"一定要记住自定义属性！！！！！！",[24,69547,69548],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[24,69550,69551],{},"id是自定义的属性名",[24,69553,69554],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[67,69556,69558],{"className":53099,"code":69557,"language":53101,"meta":72,"style":72},"\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",[74,69559,69560,69570,69584,69588,69596,69610,69630,69650,69662,69670,69676,69686,69696,69700,69704,69710,69722,69734,69746,69762,69766,69770,69776,69788,69800,69812,69822,69832,69836,69840,69848,69860,69870,69882,69886,69890,69898,69908,69918,69928,69932,69936,69946,69960,69972,69976,69980,69992,70002,70018,70028,70032,70036,70050,70060,70070,70074,70078,70084,70098,70102,70106,70114,70124,70128,70132,70141,70151,70155,70163,70171,70175,70183,70197,70211,70223,70231,70270,70302,70334,70366,70398,70406,70414,70428,70462,70496,70530,70564,70598,70606,70614,70622,70627,70632,70651,70656,70676,70684,70689,70702,70723,70736,70740,70745,70750,70763,70783,70811,70815,70819,70823,70831,70839,70843],{"__ignoreMap":72},[77,69561,69562,69564,69566,69568],{"class":79,"line":80},[77,69563,53763],{"class":87},[77,69565,53766],{"class":158},[77,69567,53769],{"class":83},[77,69569,291],{"class":87},[77,69571,69572,69574,69576,69578,69580,69582],{"class":79,"line":91},[77,69573,260],{"class":87},[77,69575,53101],{"class":158},[77,69577,53780],{"class":83},[77,69579,268],{"class":87},[77,69581,53785],{"class":271},[77,69583,291],{"class":87},[77,69585,69586],{"class":79,"line":107},[77,69587,4875],{"emptyLinePlaceholder":2549},[77,69589,69590,69592,69594],{"class":79,"line":191},[77,69591,260],{"class":87},[77,69593,53798],{"class":158},[77,69595,291],{"class":87},[77,69597,69598,69600,69602,69604,69606,69608],{"class":79,"line":1543},[77,69599,54602],{"class":87},[77,69601,53808],{"class":158},[77,69603,53811],{"class":83},[77,69605,268],{"class":87},[77,69607,53816],{"class":271},[77,69609,61575],{"class":87},[77,69611,69612,69614,69616,69618,69620,69622,69624,69626,69628],{"class":79,"line":1549},[77,69613,54602],{"class":87},[77,69615,53808],{"class":158},[77,69617,53827],{"class":83},[77,69619,268],{"class":87},[77,69621,53832],{"class":271},[77,69623,53835],{"class":83},[77,69625,268],{"class":87},[77,69627,53840],{"class":271},[77,69629,61575],{"class":87},[77,69631,69632,69634,69636,69638,69640,69642,69644,69646,69648],{"class":79,"line":1566},[77,69633,54602],{"class":87},[77,69635,53808],{"class":158},[77,69637,2495],{"class":83},[77,69639,268],{"class":87},[77,69641,53855],{"class":271},[77,69643,53835],{"class":83},[77,69645,268],{"class":87},[77,69647,53862],{"class":271},[77,69649,61575],{"class":87},[77,69651,69652,69654,69656,69658,69660],{"class":79,"line":1572},[77,69653,54602],{"class":87},[77,69655,53871],{"class":158},[77,69657,66068],{"class":87},[77,69659,53871],{"class":158},[77,69661,291],{"class":87},[77,69663,69664,69666,69668],{"class":79,"line":1589},[77,69665,54602],{"class":87},[77,69667,2520],{"class":158},[77,69669,291],{"class":87},[77,69671,69672,69674],{"class":79,"line":1595},[77,69673,8878],{"class":158},[77,69675,88],{"class":87},[77,69677,69678,69680,69682,69684],{"class":79,"line":4088},[77,69679,57160],{"class":94},[77,69681,98],{"class":87},[77,69683,1939],{"class":94},[77,69685,104],{"class":87},[77,69687,69688,69690,69692,69694],{"class":79,"line":4093},[77,69689,57149],{"class":94},[77,69691,98],{"class":87},[77,69693,1939],{"class":94},[77,69695,104],{"class":87},[77,69697,69698],{"class":79,"line":4099},[77,69699,4662],{"class":87},[77,69701,69702],{"class":79,"line":4104},[77,69703,4875],{"emptyLinePlaceholder":2549},[77,69705,69706,69708],{"class":79,"line":4118},[77,69707,66119],{"class":83},[77,69709,88],{"class":87},[77,69711,69712,69714,69716,69718,69720],{"class":79,"line":4123},[77,69713,57223],{"class":94},[77,69715,98],{"class":87},[77,69717,66130],{"class":94},[77,69719,2124],{"class":2123},[77,69721,104],{"class":87},[77,69723,69724,69726,69728,69730,69732],{"class":79,"line":4129},[77,69725,57237],{"class":94},[77,69727,98],{"class":87},[77,69729,66143],{"class":94},[77,69731,2124],{"class":2123},[77,69733,104],{"class":87},[77,69735,69736,69738,69740,69742,69744],{"class":79,"line":4150},[77,69737,57160],{"class":94},[77,69739,98],{"class":87},[77,69741,3313],{"class":94},[77,69743,2124],{"class":2123},[77,69745,104],{"class":87},[77,69747,69748,69750,69752,69754,69756,69758,69760],{"class":79,"line":4155},[77,69749,64421],{"class":94},[77,69751,98],{"class":87},[77,69753,2120],{"class":94},[77,69755,2124],{"class":2123},[77,69757,2127],{"class":94},[77,69759,64688],{"class":94},[77,69761,104],{"class":87},[77,69763,69764],{"class":79,"line":4169},[77,69765,4662],{"class":87},[77,69767,69768],{"class":79,"line":4174},[77,69769,4875],{"emptyLinePlaceholder":2549},[77,69771,69772,69774],{"class":79,"line":4203},[77,69773,66188],{"class":83},[77,69775,88],{"class":87},[77,69777,69778,69780,69782,69784,69786],{"class":79,"line":4208},[77,69779,57223],{"class":94},[77,69781,98],{"class":87},[77,69783,2925],{"class":94},[77,69785,2942],{"class":2123},[77,69787,104],{"class":87},[77,69789,69790,69792,69794,69796,69798],{"class":79,"line":4225},[77,69791,57237],{"class":94},[77,69793,98],{"class":87},[77,69795,3520],{"class":94},[77,69797,2124],{"class":2123},[77,69799,104],{"class":87},[77,69801,69802,69804,69806,69808,69810],{"class":79,"line":4230},[77,69803,59807],{"class":94},[77,69805,98],{"class":87},[77,69807,3520],{"class":94},[77,69809,2124],{"class":2123},[77,69811,104],{"class":87},[77,69813,69814,69816,69818,69820],{"class":79,"line":4235},[77,69815,57459],{"class":94},[77,69817,98],{"class":87},[77,69819,53940],{"class":94},[77,69821,104],{"class":87},[77,69823,69824,69826,69828,69830],{"class":79,"line":4240},[77,69825,57470],{"class":94},[77,69827,98],{"class":87},[77,69829,54127],{"class":94},[77,69831,104],{"class":87},[77,69833,69834],{"class":79,"line":4254},[77,69835,4662],{"class":87},[77,69837,69838],{"class":79,"line":4259},[77,69839,4875],{"emptyLinePlaceholder":2549},[77,69841,69842,69844,69846],{"class":79,"line":5052},[77,69843,66188],{"class":83},[77,69845,66261],{"class":158},[77,69847,88],{"class":87},[77,69849,69850,69852,69854,69856,69858],{"class":79,"line":5066},[77,69851,57372],{"class":94},[77,69853,98],{"class":87},[77,69855,3413],{"class":94},[77,69857,2124],{"class":2123},[77,69859,104],{"class":87},[77,69861,69862,69864,69866,69868],{"class":79,"line":5074},[77,69863,64778],{"class":94},[77,69865,98],{"class":87},[77,69867,66284],{"class":94},[77,69869,104],{"class":87},[77,69871,69872,69874,69876,69878,69880],{"class":79,"line":5079},[77,69873,64444],{"class":94},[77,69875,98],{"class":87},[77,69877,3313],{"class":94},[77,69879,2124],{"class":2123},[77,69881,104],{"class":87},[77,69883,69884],{"class":79,"line":5085},[77,69885,4662],{"class":87},[77,69887,69888],{"class":79,"line":5091},[77,69889,4875],{"emptyLinePlaceholder":2549},[77,69891,69892,69894,69896],{"class":79,"line":5096},[77,69893,66188],{"class":83},[77,69895,63738],{"class":158},[77,69897,88],{"class":87},[77,69899,69900,69902,69904,69906],{"class":79,"line":10422},[77,69901,57186],{"class":94},[77,69903,98],{"class":87},[77,69905,186],{"class":94},[77,69907,104],{"class":87},[77,69909,69910,69912,69914,69916],{"class":79,"line":10446},[77,69911,57459],{"class":94},[77,69913,98],{"class":87},[77,69915,53940],{"class":94},[77,69917,104],{"class":87},[77,69919,69920,69922,69924,69926],{"class":79,"line":10451},[77,69921,57470],{"class":94},[77,69923,98],{"class":87},[77,69925,54040],{"class":94},[77,69927,104],{"class":87},[77,69929,69930],{"class":79,"line":10457},[77,69931,4662],{"class":87},[77,69933,69934],{"class":79,"line":10484},[77,69935,4875],{"emptyLinePlaceholder":2549},[77,69937,69938,69940,69942,69944],{"class":79,"line":10489},[77,69939,66188],{"class":83},[77,69941,63738],{"class":158},[77,69943,57525],{"class":158},[77,69945,88],{"class":87},[77,69947,69948,69950,69952,69954,69956,69958],{"class":79,"line":10495},[77,69949,57160],{"class":94},[77,69951,98],{"class":87},[77,69953,1939],{"class":94},[77,69955,11424],{"class":94},[77,69957,2124],{"class":2123},[77,69959,104],{"class":87},[77,69961,69962,69964,69966,69968,69970],{"class":79,"line":10507},[77,69963,57372],{"class":94},[77,69965,98],{"class":87},[77,69967,3162],{"class":94},[77,69969,2124],{"class":2123},[77,69971,104],{"class":87},[77,69973,69974],{"class":79,"line":10519},[77,69975,4662],{"class":87},[77,69977,69978],{"class":79,"line":10531},[77,69979,4875],{"emptyLinePlaceholder":2549},[77,69981,69982,69984,69986,69988,69990],{"class":79,"line":12189},[77,69983,66188],{"class":83},[77,69985,63738],{"class":158},[77,69987,57525],{"class":158},[77,69989,3876],{"class":158},[77,69991,88],{"class":87},[77,69993,69994,69996,69998,70000],{"class":79,"line":12214},[77,69995,66413],{"class":94},[77,69997,98],{"class":87},[77,69999,186],{"class":94},[77,70001,104],{"class":87},[77,70003,70004,70006,70008,70010,70012,70014,70016],{"class":79,"line":12237},[77,70005,64676],{"class":94},[77,70007,98],{"class":87},[77,70009,2696],{"class":94},[77,70011,2124],{"class":2123},[77,70013,2127],{"class":94},[77,70015,66434],{"class":94},[77,70017,104],{"class":87},[77,70019,70020,70022,70024,70026],{"class":79,"line":12261},[77,70021,59864],{"class":94},[77,70023,98],{"class":87},[77,70025,64813],{"class":94},[77,70027,104],{"class":87},[77,70029,70030],{"class":79,"line":12266},[77,70031,4662],{"class":87},[77,70033,70034],{"class":79,"line":12271},[77,70035,4875],{"emptyLinePlaceholder":2549},[77,70037,70038,70040,70042,70044,70046,70048],{"class":79,"line":12276},[77,70039,66188],{"class":83},[77,70041,63738],{"class":158},[77,70043,57525],{"class":158},[77,70045,3876],{"class":158},[77,70047,66467],{"class":83},[77,70049,88],{"class":87},[77,70051,70052,70054,70056,70058],{"class":79,"line":12285},[77,70053,64236],{"class":94},[77,70055,98],{"class":87},[77,70057,66478],{"class":94},[77,70059,104],{"class":87},[77,70061,70062,70064,70066,70068],{"class":79,"line":12290},[77,70063,59864],{"class":94},[77,70065,98],{"class":87},[77,70067,66478],{"class":94},[77,70069,104],{"class":87},[77,70071,70072],{"class":79,"line":12296},[77,70073,4662],{"class":87},[77,70075,70076],{"class":79,"line":12317},[77,70077,4875],{"emptyLinePlaceholder":2549},[77,70079,70080,70082],{"class":79,"line":12323},[77,70081,66503],{"class":83},[77,70083,88],{"class":87},[77,70085,70086,70088,70090,70092,70094,70096],{"class":79,"line":12337},[77,70087,57149],{"class":94},[77,70089,98],{"class":87},[77,70091,1939],{"class":94},[77,70093,66516],{"class":94},[77,70095,2124],{"class":2123},[77,70097,104],{"class":87},[77,70099,70100],{"class":79,"line":12343},[77,70101,4662],{"class":87},[77,70103,70104],{"class":79,"line":12370},[77,70105,4875],{"emptyLinePlaceholder":2549},[77,70107,70108,70110,70112],{"class":79,"line":12379},[77,70109,66503],{"class":83},[77,70111,64618],{"class":83},[77,70113,88],{"class":87},[77,70115,70116,70118,70120,70122],{"class":79,"line":12385},[77,70117,57459],{"class":94},[77,70119,98],{"class":87},[77,70121,186],{"class":94},[77,70123,104],{"class":87},[77,70125,70126],{"class":79,"line":12393},[77,70127,4662],{"class":87},[77,70129,70130],{"class":79,"line":12398},[77,70131,4875],{"emptyLinePlaceholder":2549},[77,70133,70134,70136,70139],{"class":79,"line":19074},[77,70135,66503],{"class":83},[77,70137,70138],{"class":83}," .active",[77,70140,88],{"class":87},[77,70142,70143,70145,70147,70149],{"class":79,"line":19080},[77,70144,57459],{"class":94},[77,70146,98],{"class":87},[77,70148,456],{"class":94},[77,70150,104],{"class":87},[77,70152,70153],{"class":79,"line":19103},[77,70154,4662],{"class":87},[77,70156,70157,70159,70161],{"class":79,"line":19109},[77,70158,54875],{"class":87},[77,70160,2520],{"class":158},[77,70162,291],{"class":87},[77,70164,70165,70167,70169],{"class":79,"line":19132},[77,70166,351],{"class":87},[77,70168,53798],{"class":158},[77,70170,291],{"class":87},[77,70172,70173],{"class":79,"line":19146},[77,70174,4875],{"emptyLinePlaceholder":2549},[77,70176,70177,70179,70181],{"class":79,"line":19166},[77,70178,260],{"class":87},[77,70180,54258],{"class":158},[77,70182,291],{"class":87},[77,70184,70185,70187,70189,70191,70193,70195],{"class":79,"line":19172},[77,70186,54602],{"class":87},[77,70188,331],{"class":158},[77,70190,334],{"class":83},[77,70192,268],{"class":87},[77,70194,66618],{"class":271},[77,70196,291],{"class":87},[77,70198,70199,70201,70203,70205,70207,70209],{"class":79,"line":19183},[77,70200,53805],{"class":87},[77,70202,331],{"class":158},[77,70204,334],{"class":83},[77,70206,268],{"class":87},[77,70208,66633],{"class":271},[77,70210,291],{"class":87},[77,70212,70213,70215,70217,70219,70221],{"class":79,"line":19206},[77,70214,57684],{"class":87},[77,70216,19],{"class":158},[77,70218,66644],{"class":87},[77,70220,19],{"class":158},[77,70222,291],{"class":87},[77,70224,70225,70227,70229],{"class":79,"line":19228},[77,70226,57684],{"class":87},[77,70228,51],{"class":158},[77,70230,291],{"class":87},[77,70232,70233,70235,70237,70239,70241,70243,70245,70247,70249,70251,70253,70255,70257,70260,70262,70264,70266,70268],{"class":79,"line":19233},[77,70234,57750],{"class":87},[77,70236,54],{"class":158},[77,70238,63498],{"class":87},[77,70240,417],{"class":158},[77,70242,334],{"class":83},[77,70244,268],{"class":87},[77,70246,62154],{"class":271},[77,70248,63503],{"class":83},[77,70250,268],{"class":87},[77,70252,66679],{"class":271},[77,70254,56405],{"class":83},[77,70256,268],{"class":87},[77,70258,70259],{"class":271},"\"0\"",[77,70261,66682],{"class":87},[77,70263,417],{"class":158},[77,70265,57762],{"class":87},[77,70267,54],{"class":158},[77,70269,291],{"class":87},[77,70271,70272,70274,70276,70278,70280,70282,70284,70286,70288,70290,70292,70294,70296,70298,70300],{"class":79,"line":19239},[77,70273,57750],{"class":87},[77,70275,54],{"class":158},[77,70277,63498],{"class":87},[77,70279,417],{"class":158},[77,70281,63503],{"class":83},[77,70283,268],{"class":87},[77,70285,66679],{"class":271},[77,70287,56405],{"class":83},[77,70289,268],{"class":87},[77,70291,6153],{"class":271},[77,70293,66709],{"class":87},[77,70295,417],{"class":158},[77,70297,57762],{"class":87},[77,70299,54],{"class":158},[77,70301,291],{"class":87},[77,70303,70304,70306,70308,70310,70312,70314,70316,70318,70320,70322,70324,70326,70328,70330,70332],{"class":79,"line":19253},[77,70305,57750],{"class":87},[77,70307,54],{"class":158},[77,70309,63498],{"class":87},[77,70311,417],{"class":158},[77,70313,63503],{"class":83},[77,70315,268],{"class":87},[77,70317,66679],{"class":271},[77,70319,56405],{"class":83},[77,70321,268],{"class":87},[77,70323,6176],{"class":271},[77,70325,66736],{"class":87},[77,70327,417],{"class":158},[77,70329,57762],{"class":87},[77,70331,54],{"class":158},[77,70333,291],{"class":87},[77,70335,70336,70338,70340,70342,70344,70346,70348,70350,70352,70354,70356,70358,70360,70362,70364],{"class":79,"line":19266},[77,70337,57750],{"class":87},[77,70339,54],{"class":158},[77,70341,63498],{"class":87},[77,70343,417],{"class":158},[77,70345,63503],{"class":83},[77,70347,268],{"class":87},[77,70349,66679],{"class":271},[77,70351,56405],{"class":83},[77,70353,268],{"class":87},[77,70355,6189],{"class":271},[77,70357,66763],{"class":87},[77,70359,417],{"class":158},[77,70361,57762],{"class":87},[77,70363,54],{"class":158},[77,70365,291],{"class":87},[77,70367,70368,70370,70372,70374,70376,70378,70380,70382,70384,70386,70388,70390,70392,70394,70396],{"class":79,"line":19271},[77,70369,57750],{"class":87},[77,70371,54],{"class":158},[77,70373,63498],{"class":87},[77,70375,417],{"class":158},[77,70377,63503],{"class":83},[77,70379,268],{"class":87},[77,70381,66679],{"class":271},[77,70383,56405],{"class":83},[77,70385,268],{"class":87},[77,70387,6202],{"class":271},[77,70389,66790],{"class":87},[77,70391,417],{"class":158},[77,70393,57762],{"class":87},[77,70395,54],{"class":158},[77,70397,291],{"class":87},[77,70399,70400,70402,70404],{"class":79,"line":19285},[77,70401,57855],{"class":87},[77,70403,51],{"class":158},[77,70405,291],{"class":87},[77,70407,70408,70410,70412],{"class":79,"line":19290},[77,70409,54235],{"class":87},[77,70411,331],{"class":158},[77,70413,291],{"class":87},[77,70415,70416,70418,70420,70422,70424,70426],{"class":79,"line":19296},[77,70417,53805],{"class":87},[77,70419,331],{"class":158},[77,70421,334],{"class":83},[77,70423,268],{"class":87},[77,70425,66827],{"class":271},[77,70427,291],{"class":87},[77,70429,70430,70432,70434,70436,70438,70440,70442,70444,70446,70448,70450,70452,70454,70456,70458,70460],{"class":79,"line":19301},[77,70431,57684],{"class":87},[77,70433,331],{"class":158},[77,70435,334],{"class":83},[77,70437,268],{"class":87},[77,70439,66842],{"class":271},[77,70441,63498],{"class":87},[77,70443,40],{"class":158},[77,70445,265],{"class":83},[77,70447,268],{"class":87},[77,70449,66853],{"class":271},[77,70451,275],{"class":83},[77,70453,268],{"class":87},[77,70455,444],{"class":271},[77,70457,66862],{"class":87},[77,70459,331],{"class":158},[77,70461,291],{"class":87},[77,70463,70464,70466,70468,70470,70472,70474,70476,70478,70480,70482,70484,70486,70488,70490,70492,70494],{"class":79,"line":19315},[77,70465,57684],{"class":87},[77,70467,331],{"class":158},[77,70469,334],{"class":83},[77,70471,268],{"class":87},[77,70473,65067],{"class":271},[77,70475,63498],{"class":87},[77,70477,40],{"class":158},[77,70479,265],{"class":83},[77,70481,268],{"class":87},[77,70483,66889],{"class":271},[77,70485,275],{"class":83},[77,70487,268],{"class":87},[77,70489,444],{"class":271},[77,70491,66862],{"class":87},[77,70493,331],{"class":158},[77,70495,291],{"class":87},[77,70497,70498,70500,70502,70504,70506,70508,70510,70512,70514,70516,70518,70520,70522,70524,70526,70528],{"class":79,"line":19320},[77,70499,57684],{"class":87},[77,70501,331],{"class":158},[77,70503,334],{"class":83},[77,70505,268],{"class":87},[77,70507,65067],{"class":271},[77,70509,63498],{"class":87},[77,70511,40],{"class":158},[77,70513,265],{"class":83},[77,70515,268],{"class":87},[77,70517,66924],{"class":271},[77,70519,275],{"class":83},[77,70521,268],{"class":87},[77,70523,444],{"class":271},[77,70525,66862],{"class":87},[77,70527,331],{"class":158},[77,70529,291],{"class":87},[77,70531,70532,70534,70536,70538,70540,70542,70544,70546,70548,70550,70552,70554,70556,70558,70560,70562],{"class":79,"line":19325},[77,70533,57684],{"class":87},[77,70535,331],{"class":158},[77,70537,334],{"class":83},[77,70539,268],{"class":87},[77,70541,65067],{"class":271},[77,70543,63498],{"class":87},[77,70545,40],{"class":158},[77,70547,265],{"class":83},[77,70549,268],{"class":87},[77,70551,66959],{"class":271},[77,70553,275],{"class":83},[77,70555,268],{"class":87},[77,70557,444],{"class":271},[77,70559,66862],{"class":87},[77,70561,331],{"class":158},[77,70563,291],{"class":87},[77,70565,70566,70568,70570,70572,70574,70576,70578,70580,70582,70584,70586,70588,70590,70592,70594,70596],{"class":79,"line":19339},[77,70567,57684],{"class":87},[77,70569,331],{"class":158},[77,70571,334],{"class":83},[77,70573,268],{"class":87},[77,70575,65067],{"class":271},[77,70577,63498],{"class":87},[77,70579,40],{"class":158},[77,70581,265],{"class":83},[77,70583,268],{"class":87},[77,70585,66994],{"class":271},[77,70587,275],{"class":83},[77,70589,268],{"class":87},[77,70591,444],{"class":271},[77,70593,66862],{"class":87},[77,70595,331],{"class":158},[77,70597,291],{"class":87},[77,70599,70600,70602,70604],{"class":79,"line":19351},[77,70601,54235],{"class":87},[77,70603,331],{"class":158},[77,70605,291],{"class":87},[77,70607,70608,70610,70612],{"class":79,"line":19356},[77,70609,54875],{"class":87},[77,70611,331],{"class":158},[77,70613,291],{"class":87},[77,70615,70616,70618,70620],{"class":79,"line":19369},[77,70617,54602],{"class":87},[77,70619,54271],{"class":158},[77,70621,291],{"class":87},[77,70623,70624],{"class":79,"line":19374},[77,70625,70626],{"class":323},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[77,70628,70629],{"class":79,"line":19379},[77,70630,70631],{"class":323},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[77,70633,70634,70636,70638,70640,70642,70644,70646,70649],{"class":79,"line":19384},[77,70635,13694],{"class":2123},[77,70637,63738],{"class":94},[77,70639,16036],{"class":2123},[77,70641,56850],{"class":87},[77,70643,56853],{"class":83},[77,70645,2622],{"class":87},[77,70647,70648],{"class":271},"'.tab-nav ul'",[77,70650,2628],{"class":87},[77,70652,70653],{"class":79,"line":19397},[77,70654,70655],{"class":323},"    \u002F\u002F 2.添加事件\n",[77,70657,70658,70660,70662,70664,70666,70668,70670,70672,70674],{"class":79,"line":19402},[77,70659,69397],{"class":87},[77,70661,60261],{"class":83},[77,70663,2622],{"class":87},[77,70665,60266],{"class":271},[77,70667,680],{"class":87},[77,70669,56903],{"class":2123},[77,70671,4134],{"class":87},[77,70673,2693],{"class":7691},[77,70675,14914],{"class":87},[77,70677,70678,70680,70682],{"class":79,"line":35100},[77,70679,60692],{"class":87},[77,70681,69453],{"class":83},[77,70683,69456],{"class":87},[77,70685,70686],{"class":79,"line":35106},[77,70687,70688],{"class":323},"      \u002F\u002Fe.targer是我们点击的对象\n",[77,70690,70691,70693,70695,70697,70700],{"class":79,"line":35112},[77,70692,56934],{"class":2123},[77,70694,69477],{"class":87},[77,70696,56940],{"class":2123},[77,70698,70699],{"class":271}," 'A'",[77,70701,14914],{"class":87},[77,70703,70704,70706,70708,70710,70713,70715,70717,70719,70721],{"class":79,"line":35118},[77,70705,54383],{"class":87},[77,70707,56853],{"class":83},[77,70709,2622],{"class":87},[77,70711,70712],{"class":271},"'.active'",[77,70714,59451],{"class":87},[77,70716,59454],{"class":83},[77,70718,2622],{"class":87},[77,70720,67157],{"class":271},[77,70722,2628],{"class":87},[77,70724,70725,70728,70730,70732,70734],{"class":79,"line":35124},[77,70726,70727],{"class":87},"        e.target.classList.",[77,70729,7809],{"class":83},[77,70731,2622],{"class":87},[77,70733,67157],{"class":271},[77,70735,2628],{"class":87},[77,70737,70738],{"class":79,"line":35135},[77,70739,4875],{"emptyLinePlaceholder":2549},[77,70741,70742],{"class":79,"line":35141},[77,70743,70744],{"class":323},"        \u002F\u002F 下面大盒子模块\n",[77,70746,70747],{"class":79,"line":35161},[77,70748,70749],{"class":323},"        \u002F\u002F console.log(e.target.dataset.id)\n",[77,70751,70752,70754,70756,70758,70760],{"class":79,"line":35167},[77,70753,63716],{"class":2123},[77,70755,5507],{"class":94},[77,70757,16036],{"class":2123},[77,70759,48032],{"class":2123},[77,70761,70762],{"class":87},"e.target.dataset.id\n",[77,70764,70765,70767,70769,70771,70773,70775,70777,70779,70781],{"class":79,"line":35178},[77,70766,54383],{"class":87},[77,70768,56853],{"class":83},[77,70770,2622],{"class":87},[77,70772,67205],{"class":271},[77,70774,59451],{"class":87},[77,70776,59454],{"class":83},[77,70778,2622],{"class":87},[77,70780,67157],{"class":271},[77,70782,2628],{"class":87},[77,70784,70785,70787,70789,70791,70793,70795,70797,70799,70801,70803,70805,70807,70809],{"class":79,"line":35184},[77,70786,54383],{"class":87},[77,70788,56853],{"class":83},[77,70790,2622],{"class":87},[77,70792,67231],{"class":271},[77,70794,646],{"class":87},[77,70796,48032],{"class":2123},[77,70798,27586],{"class":94},[77,70800,59480],{"class":271},[77,70802,59451],{"class":87},[77,70804,7809],{"class":83},[77,70806,2622],{"class":87},[77,70808,67157],{"class":271},[77,70810,2628],{"class":87},[77,70812,70813],{"class":79,"line":35190},[77,70814,4875],{"emptyLinePlaceholder":2549},[77,70816,70817],{"class":79,"line":35196},[77,70818,54856],{"class":87},[77,70820,70821],{"class":79,"line":35202},[77,70822,35928],{"class":87},[77,70824,70825,70827,70829],{"class":79,"line":35208},[77,70826,54875],{"class":87},[77,70828,54271],{"class":158},[77,70830,291],{"class":87},[77,70832,70833,70835,70837],{"class":79,"line":35214},[77,70834,351],{"class":87},[77,70836,54258],{"class":158},[77,70838,291],{"class":87},[77,70840,70841],{"class":79,"line":35220},[77,70842,4875],{"emptyLinePlaceholder":2549},[77,70844,70845,70847,70849],{"class":79,"line":35240},[77,70846,351],{"class":87},[77,70848,53101],{"class":158},[77,70850,291],{"class":87},[19,70852,70854],{"id":70853},"_333-页面加载事件","3.3.3 页面加载事件",[139,70856,70857],{},[54,70858,70859],{},"load",[24,70861,70862],{},[40,70863],{"alt":72,"src":70864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[24,70866,70867],{},"window代表整个窗口，比document还要大",[24,70869,70870],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[24,70872,70873],{},"img.addEventListener('load', function () {",[24,70875,70876],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[24,70878,54922],{},[139,70880,70881],{"start":91},[54,70882,70883],{},"DOMContentLoaded",[24,70885,70886],{},[40,70887],{"alt":72,"src":70888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[24,70890,70891],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[19,70893,70895],{"id":70894},"_334-元素滚动事件","3.3.4 元素滚动事件",[24,70897,70898],{},[40,70899],{"alt":72,"src":70900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[24,70902,70903],{},[40,70904],{"alt":72,"src":70905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[24,70907,70908],{},[40,70909],{"alt":72,"src":70910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[24,70912,70913],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[24,70915,70916],{},"获得的是数字型数据，不带单位",[24,70918,70919],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[24,70921,70922],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[24,70924,70925],{},"它是通过document.documentElement来获取",[24,70927,70928],{},[40,70929],{"alt":72,"src":70930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[24,70932,70933],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[19,70935,70937],{"id":70936},"_335-页面缩放事件","3.3.5 页面缩放事件",[24,70939,70940],{},[40,70941],{"alt":72,"src":70942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[24,70944,70945],{},[40,70946],{"alt":72,"src":70947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[19,70949,70951],{"id":70950},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[24,70953,70954],{},[40,70955],{"alt":72,"src":70956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[24,70958,70959],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[24,70961,70962],{},[40,70963],{"alt":72,"src":70964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[24,70966,70967],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[24,70969,70970],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[24,70972,70973],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[24,70975,70976],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[24,70978,70979],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[24,70981,70982],{},[40,70983],{"alt":72,"src":70984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[24,70986,70987],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[24,70989,70990],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[24,70992,70993],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[24,70995,70996],{},"e.pageX-box.getBoundingClientRect()",[19,70998,71000],{"id":70999},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[24,71002,71003],{},[40,71004],{"alt":72,"src":71005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[24,71007,71008],{},"这个是相对于视口来说的，它是个方法，不是属性值",[19,71010,71012],{"id":71011},"_338-总结","3.3.8 总结",[24,71014,71015],{},[40,71016],{"alt":72,"src":71017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[24,71019,71020],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[24,71022,71023],{},"修改盒子的宽高只能通过width和height来实现",[19,71025,71027],{"id":71026},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[67,71029,71031],{"className":53099,"code":71030,"language":53101,"meta":72,"style":72},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[74,71032,71033,71038,71043,71048,71053],{"__ignoreMap":72},[77,71034,71035],{"class":79,"line":80},[77,71036,71037],{"class":87},"\u002F* 页面滑动 *\u002F\n",[77,71039,71040],{"class":79,"line":91},[77,71041,71042],{"class":87},"html {\n",[77,71044,71045],{"class":79,"line":107},[77,71046,71047],{"class":87},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[77,71049,71050],{"class":79,"line":191},[77,71051,71052],{"class":87},"  scroll-behavior: smooth;\n",[77,71054,71055],{"class":79,"line":1543},[77,71056,110],{"class":87},[24,71058,71059],{},"默认是auto",[19,71061,71063],{"id":71062},"_3310-日期对象","3.3.10 日期对象",[24468,71065,71067],{"id":71066},"_33101-实例化","3.3.10.1 实例化",[24,71069,71070],{},[40,71071],{"alt":72,"src":71072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24468,71074,71076],{"id":71075},"_33102-时期对象方法","3.3.10.2 时期对象方法",[24,71078,71079],{},[40,71080],{"alt":72,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[24,71083,71084],{},"月份+1",[24,71086,71087],{},"老外认为第一天为0，星期天",[24,71089,71090],{},"方法使用的时候必须要跟括号",[24,71092,71093],{},"快速获得日期",[24,71095,71096],{},"\u002F\u002F 得到年月日",[24,71098,71099],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[24,71101,71102],{},"\u002F\u002F 得到当地日期",[24,71104,71105],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[24,71107,71108],{},"\u002F\u002F 得到当地时间",[24,71110,71111],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[24,71113,71114],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[24,71116,71117],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54271,71119,71120],{},"\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",[24,71122,71123],{},"学会去封装函数！",[24468,71125,71127],{"id":71126},"_33103-时间戳","3.3.10.3 时间戳",[24,71129,71130],{},[40,71131],{"alt":72,"src":71132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[24,71134,71135],{},[40,71136],{"alt":72,"src":71137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[24,71139,71140],{},"三种方法记住一个就可以",[19,71142,71144],{"id":71143},"_3311-节点操作","3.3.11 节点操作",[24468,71146,71148],{"id":71147},"_33111-dom节点","3.3.11.1 DOM节点",[24,71150,71151],{},[40,71152],{"alt":72,"src":71153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[24,71155,71156],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24468,71158,71160],{"id":71159},"_33112-查找节点","3.3.11.2 查找节点",[24,71162,71163],{},"前边的document.querySelector()是获取的元素",[24,71165,71166],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[24,71168,71169],{},[40,71170],{"alt":72,"src":71171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[139,71173,71174],{},[54,71175,71176],{},"父节点",[24,71178,71179],{},[40,71180],{"alt":72,"src":71181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[139,71183,71184],{"start":91},[54,71185,71186],{},"子节点",[24,71188,71189],{},[40,71190],{"alt":72,"src":71191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[24,71193,71194],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[24,71196,71197],{},"children获得的是伪数组，是亲儿子",[139,71199,71200],{"start":107},[54,71201,71202],{},"兄弟节点",[24,71204,71205],{},[40,71206],{"alt":72,"src":71207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24468,71209,71211],{"id":71210},"_33113-增加节点","3.3.11.3 增加节点",[24,71213,71214],{},[40,71215],{"alt":72,"src":71216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[24,71218,71219],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[24,71221,71222],{},[40,71223],{"alt":72,"src":71224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[24,71226,71227],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[24,71229,71230],{},"下面是写法的部分展示，就按照下边的格式来写",[24,71232,71233],{},"例：",[54271,71235,71236],{},"\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",[24,71238,71239],{},[40,71240],{"alt":72,"src":71241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[24,71243,71244],{},"false只克隆标签，里边的内容不会克隆过来",[67,71246,71248],{"className":53099,"code":71247,"language":53101,"meta":72,"style":72},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[74,71249,71250],{"__ignoreMap":72},[77,71251,71252],{"class":79,"line":80},[77,71253,71247],{"class":87},[24468,71255,71257],{"id":71256},"_33114-删除节点","3.3.11.4 删除节点",[24,71259,71260],{},[40,71261],{"alt":72,"src":71262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[24,71264,71265],{},"父亲删儿子",[24,71267,71268],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[19,71270,71272],{"id":71271},"_3312-m端事件","3.3.12 M端事件",[24,71274,71275],{},"M端就是移动端",[24,71277,71278],{},[40,71279],{"alt":72,"src":71280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[19,71282,71284],{"id":71283},"_3313-插件","3.3.13 插件",[24,71286,71287],{},"要熟悉官网！！！",[24,71289,71290],{},[417,71291,71292],{"href":71292,"rel":71293},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26332],[24,71295,71296],{},[417,71297,71298],{"href":71298,"rel":71299},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26332],[19,71301,71303],{"id":71302},"_3314-学生信息表","3.3.14 学生信息表",[139,71305,71306,71309,71312,71315,71318,71321,71324,71327],{},[54,71307,71308],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[54,71310,71311],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[54,71313,71314],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[54,71316,71317],{},"用好表单元素自带的属性，value,name等",[54,71319,71320],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[54,71322,71323],{},"不要忘记事件对象",[54,71325,71326],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[54,71328,71329],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[24,71331,71332],{},"结构：",[67,71334,71336],{"className":53099,"code":71335,"language":53101,"meta":72,"style":72},"\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",[74,71337,71338,71348,71362,71366,71374,71388,71408,71429,71442,71466,71474,71478,71486,71499,71520,71548,71576,71581,71603,71623,71642,71650,71678,71700,71720,71740,71760,71780,71800,71808,71828,71836,71840,71853,71861,71869,71877,71890,71903,71916,71929,71942,71955,71968,71976,71984,71992,71997,72002,72007,72012,72017,72022,72027,72032,72037,72042,72047,72052,72057,72065,72073,72081,72085,72105,72124,72144,72164,72184,72204,72208,72213,72233,72238,72248,72253,72258,72278,72300,72305,72315,72319,72323,72328,72333,72362,72376,72391,72395,72399,72403,72408,72419,72432,72437,72442,72447,72452,72457,72461,72466,72471,72480,72485,72490,72502,72507,72514,72518,72523,72533,72538,72548,72553,72581,72602,72612,72632,72650,72667,72684,72701,72718,72722,72732,72737,72742,72747,72758,72762,72766,72770,72775,72780,72801,72813,72818,72823,72828,72842,72847,72854,72858,72862,72870,72874,72882,72886],{"__ignoreMap":72},[77,71339,71340,71342,71344,71346],{"class":79,"line":80},[77,71341,53763],{"class":87},[77,71343,53766],{"class":158},[77,71345,53769],{"class":83},[77,71347,291],{"class":87},[77,71349,71350,71352,71354,71356,71358,71360],{"class":79,"line":91},[77,71351,260],{"class":87},[77,71353,53101],{"class":158},[77,71355,53780],{"class":83},[77,71357,268],{"class":87},[77,71359,53785],{"class":271},[77,71361,291],{"class":87},[77,71363,71364],{"class":79,"line":107},[77,71365,4875],{"emptyLinePlaceholder":2549},[77,71367,71368,71370,71372],{"class":79,"line":191},[77,71369,260],{"class":87},[77,71371,53798],{"class":158},[77,71373,291],{"class":87},[77,71375,71376,71378,71380,71382,71384,71386],{"class":79,"line":1543},[77,71377,54602],{"class":87},[77,71379,53808],{"class":158},[77,71381,53811],{"class":83},[77,71383,268],{"class":87},[77,71385,53816],{"class":271},[77,71387,61575],{"class":87},[77,71389,71390,71392,71394,71396,71398,71400,71402,71404,71406],{"class":79,"line":1549},[77,71391,54602],{"class":87},[77,71393,53808],{"class":158},[77,71395,2495],{"class":83},[77,71397,268],{"class":87},[77,71399,53855],{"class":271},[77,71401,53835],{"class":83},[77,71403,268],{"class":87},[77,71405,53862],{"class":271},[77,71407,61575],{"class":87},[77,71409,71410,71412,71414,71416,71418,71420,71422,71424,71427],{"class":79,"line":1566},[77,71411,54602],{"class":87},[77,71413,53808],{"class":158},[77,71415,53827],{"class":83},[77,71417,268],{"class":87},[77,71419,53832],{"class":271},[77,71421,53835],{"class":83},[77,71423,268],{"class":87},[77,71425,71426],{"class":271},"\"ie=edge\"",[77,71428,61575],{"class":87},[77,71430,71431,71433,71435,71438,71440],{"class":79,"line":1572},[77,71432,54602],{"class":87},[77,71434,53871],{"class":158},[77,71436,71437],{"class":87},">学生信息管理\u003C\u002F",[77,71439,53871],{"class":158},[77,71441,291],{"class":87},[77,71443,71444,71446,71449,71452,71454,71457,71459,71461,71464],{"class":79,"line":1589},[77,71445,54602],{"class":87},[77,71447,71448],{"class":158},"link",[77,71450,71451],{"class":83}," rel",[77,71453,268],{"class":87},[77,71455,71456],{"class":271},"\"stylesheet\"",[77,71458,63503],{"class":83},[77,71460,268],{"class":87},[77,71462,71463],{"class":271},"\"css\u002Findex.css\"",[77,71465,61575],{"class":87},[77,71467,71468,71470,71472],{"class":79,"line":1595},[77,71469,351],{"class":87},[77,71471,53798],{"class":158},[77,71473,291],{"class":87},[77,71475,71476],{"class":79,"line":4088},[77,71477,4875],{"emptyLinePlaceholder":2549},[77,71479,71480,71482,71484],{"class":79,"line":4093},[77,71481,260],{"class":87},[77,71483,54258],{"class":158},[77,71485,291],{"class":87},[77,71487,71488,71490,71492,71495,71497],{"class":79,"line":4099},[77,71489,54602],{"class":87},[77,71491,10],{"class":158},[77,71493,71494],{"class":87},">新增学员\u003C\u002F",[77,71496,10],{"class":158},[77,71498,291],{"class":87},[77,71500,71501,71503,71505,71507,71509,71511,71514,71516,71518],{"class":79,"line":4104},[77,71502,54602],{"class":87},[77,71504,69068],{"class":158},[77,71506,334],{"class":83},[77,71508,268],{"class":87},[77,71510,65108],{"class":271},[77,71512,71513],{"class":83}," autocomplete",[77,71515,268],{"class":87},[77,71517,34243],{"class":271},[77,71519,291],{"class":87},[77,71521,71522,71525,71527,71529,71531,71533,71535,71537,71540,71542,71544,71546],{"class":79,"line":4118},[77,71523,71524],{"class":87},"    姓名：\u003C",[77,71526,159],{"class":158},[77,71528,2487],{"class":83},[77,71530,268],{"class":87},[77,71532,2492],{"class":271},[77,71534,334],{"class":83},[77,71536,268],{"class":87},[77,71538,71539],{"class":271},"\"uname\"",[77,71541,2495],{"class":83},[77,71543,268],{"class":87},[77,71545,71539],{"class":271},[77,71547,61575],{"class":87},[77,71549,71550,71553,71555,71557,71559,71561,71563,71565,71568,71570,71572,71574],{"class":79,"line":4123},[77,71551,71552],{"class":87},"    年龄：\u003C",[77,71554,159],{"class":158},[77,71556,2487],{"class":83},[77,71558,268],{"class":87},[77,71560,2492],{"class":271},[77,71562,334],{"class":83},[77,71564,268],{"class":87},[77,71566,71567],{"class":271},"\"age\"",[77,71569,2495],{"class":83},[77,71571,268],{"class":87},[77,71573,71567],{"class":271},[77,71575,61575],{"class":87},[77,71577,71578],{"class":79,"line":4129},[77,71579,71580],{"class":87},"    性别:\n",[77,71582,71583,71585,71588,71590,71592,71595,71597,71599,71601],{"class":79,"line":4150},[77,71584,53805],{"class":87},[77,71586,71587],{"class":158},"select",[77,71589,2495],{"class":83},[77,71591,268],{"class":87},[77,71593,71594],{"class":271},"\"gender\"",[77,71596,334],{"class":83},[77,71598,268],{"class":87},[77,71600,71594],{"class":271},[77,71602,291],{"class":87},[77,71604,71605,71607,71610,71612,71614,71616,71619,71621],{"class":79,"line":4155},[77,71606,57684],{"class":87},[77,71608,71609],{"class":158},"option",[77,71611,69094],{"class":83},[77,71613,268],{"class":87},[77,71615,12434],{"class":271},[77,71617,71618],{"class":87},">男\u003C\u002F",[77,71620,71609],{"class":158},[77,71622,291],{"class":87},[77,71624,71625,71627,71629,71631,71633,71635,71638,71640],{"class":79,"line":4169},[77,71626,57684],{"class":87},[77,71628,71609],{"class":158},[77,71630,69094],{"class":83},[77,71632,268],{"class":87},[77,71634,12503],{"class":271},[77,71636,71637],{"class":87},">女\u003C\u002F",[77,71639,71609],{"class":158},[77,71641,291],{"class":87},[77,71643,71644,71646,71648],{"class":79,"line":4174},[77,71645,54235],{"class":87},[77,71647,71587],{"class":158},[77,71649,291],{"class":87},[77,71651,71652,71655,71657,71659,71661,71663,71665,71667,71670,71672,71674,71676],{"class":79,"line":4203},[77,71653,71654],{"class":87},"    薪资：\u003C",[77,71656,159],{"class":158},[77,71658,2487],{"class":83},[77,71660,268],{"class":87},[77,71662,2492],{"class":271},[77,71664,334],{"class":83},[77,71666,268],{"class":87},[77,71668,71669],{"class":271},"\"salary\"",[77,71671,2495],{"class":83},[77,71673,268],{"class":87},[77,71675,71669],{"class":271},[77,71677,61575],{"class":87},[77,71679,71680,71683,71685,71687,71689,71692,71694,71696,71698],{"class":79,"line":4208},[77,71681,71682],{"class":87},"    就业城市：\u003C",[77,71684,71587],{"class":158},[77,71686,2495],{"class":83},[77,71688,268],{"class":87},[77,71690,71691],{"class":271},"\"city\"",[77,71693,334],{"class":83},[77,71695,268],{"class":87},[77,71697,71691],{"class":271},[77,71699,291],{"class":87},[77,71701,71702,71704,71706,71708,71710,71713,71716,71718],{"class":79,"line":4225},[77,71703,57684],{"class":87},[77,71705,71609],{"class":158},[77,71707,69094],{"class":83},[77,71709,268],{"class":87},[77,71711,71712],{"class":271},"\"北京\"",[77,71714,71715],{"class":87},">北京\u003C\u002F",[77,71717,71609],{"class":158},[77,71719,291],{"class":87},[77,71721,71722,71724,71726,71728,71730,71733,71736,71738],{"class":79,"line":4230},[77,71723,57684],{"class":87},[77,71725,71609],{"class":158},[77,71727,69094],{"class":83},[77,71729,268],{"class":87},[77,71731,71732],{"class":271},"\"上海\"",[77,71734,71735],{"class":87},">上海\u003C\u002F",[77,71737,71609],{"class":158},[77,71739,291],{"class":87},[77,71741,71742,71744,71746,71748,71750,71753,71756,71758],{"class":79,"line":4235},[77,71743,57684],{"class":87},[77,71745,71609],{"class":158},[77,71747,69094],{"class":83},[77,71749,268],{"class":87},[77,71751,71752],{"class":271},"\"广州\"",[77,71754,71755],{"class":87},">广州\u003C\u002F",[77,71757,71609],{"class":158},[77,71759,291],{"class":87},[77,71761,71762,71764,71766,71768,71770,71773,71776,71778],{"class":79,"line":4240},[77,71763,57684],{"class":87},[77,71765,71609],{"class":158},[77,71767,69094],{"class":83},[77,71769,268],{"class":87},[77,71771,71772],{"class":271},"\"深圳\"",[77,71774,71775],{"class":87},">深圳\u003C\u002F",[77,71777,71609],{"class":158},[77,71779,291],{"class":87},[77,71781,71782,71784,71786,71788,71790,71793,71796,71798],{"class":79,"line":4254},[77,71783,57684],{"class":87},[77,71785,71609],{"class":158},[77,71787,69094],{"class":83},[77,71789,268],{"class":87},[77,71791,71792],{"class":271},"\"曹县\"",[77,71794,71795],{"class":87},">曹县\u003C\u002F",[77,71797,71609],{"class":158},[77,71799,291],{"class":87},[77,71801,71802,71804,71806],{"class":79,"line":4259},[77,71803,54235],{"class":87},[77,71805,71587],{"class":158},[77,71807,291],{"class":87},[77,71809,71810,71812,71814,71816,71818,71821,71824,71826],{"class":79,"line":5052},[77,71811,53805],{"class":87},[77,71813,56341],{"class":158},[77,71815,334],{"class":83},[77,71817,268],{"class":87},[77,71819,71820],{"class":271},"\"add\"",[77,71822,71823],{"class":87},">录入\u003C\u002F",[77,71825,56341],{"class":158},[77,71827,291],{"class":87},[77,71829,71830,71832,71834],{"class":79,"line":5066},[77,71831,54875],{"class":87},[77,71833,69068],{"class":158},[77,71835,291],{"class":87},[77,71837,71838],{"class":79,"line":5074},[77,71839,4875],{"emptyLinePlaceholder":2549},[77,71841,71842,71844,71846,71849,71851],{"class":79,"line":5079},[77,71843,54602],{"class":87},[77,71845,10],{"class":158},[77,71847,71848],{"class":87},">就业榜\u003C\u002F",[77,71850,10],{"class":158},[77,71852,291],{"class":87},[77,71854,71855,71857,71859],{"class":79,"line":5085},[77,71856,54602],{"class":87},[77,71858,2755],{"class":158},[77,71860,291],{"class":87},[77,71862,71863,71865,71867],{"class":79,"line":5091},[77,71864,53805],{"class":87},[77,71866,2758],{"class":158},[77,71868,291],{"class":87},[77,71870,71871,71873,71875],{"class":79,"line":5096},[77,71872,57684],{"class":87},[77,71874,2761],{"class":158},[77,71876,291],{"class":87},[77,71878,71879,71881,71883,71886,71888],{"class":79,"line":10422},[77,71880,57750],{"class":87},[77,71882,2764],{"class":158},[77,71884,71885],{"class":87},">序号\u003C\u002F",[77,71887,2764],{"class":158},[77,71889,291],{"class":87},[77,71891,71892,71894,71896,71899,71901],{"class":79,"line":10446},[77,71893,57750],{"class":87},[77,71895,2764],{"class":158},[77,71897,71898],{"class":87},">姓名\u003C\u002F",[77,71900,2764],{"class":158},[77,71902,291],{"class":87},[77,71904,71905,71907,71909,71912,71914],{"class":79,"line":10451},[77,71906,57750],{"class":87},[77,71908,2764],{"class":158},[77,71910,71911],{"class":87},">年龄\u003C\u002F",[77,71913,2764],{"class":158},[77,71915,291],{"class":87},[77,71917,71918,71920,71922,71925,71927],{"class":79,"line":10457},[77,71919,57750],{"class":87},[77,71921,2764],{"class":158},[77,71923,71924],{"class":87},">性别\u003C\u002F",[77,71926,2764],{"class":158},[77,71928,291],{"class":87},[77,71930,71931,71933,71935,71938,71940],{"class":79,"line":10484},[77,71932,57750],{"class":87},[77,71934,2764],{"class":158},[77,71936,71937],{"class":87},">薪资\u003C\u002F",[77,71939,2764],{"class":158},[77,71941,291],{"class":87},[77,71943,71944,71946,71948,71951,71953],{"class":79,"line":10489},[77,71945,57750],{"class":87},[77,71947,2764],{"class":158},[77,71949,71950],{"class":87},">就业城市\u003C\u002F",[77,71952,2764],{"class":158},[77,71954,291],{"class":87},[77,71956,71957,71959,71961,71964,71966],{"class":79,"line":10495},[77,71958,57750],{"class":87},[77,71960,2764],{"class":158},[77,71962,71963],{"class":87},">操作\u003C\u002F",[77,71965,2764],{"class":158},[77,71967,291],{"class":87},[77,71969,71970,71972,71974],{"class":79,"line":10507},[77,71971,57855],{"class":87},[77,71973,2761],{"class":158},[77,71975,291],{"class":87},[77,71977,71978,71980,71982],{"class":79,"line":10519},[77,71979,54235],{"class":87},[77,71981,2758],{"class":158},[77,71983,291],{"class":87},[77,71985,71986,71988,71990],{"class":79,"line":10531},[77,71987,53805],{"class":87},[77,71989,2801],{"class":158},[77,71991,291],{"class":87},[77,71993,71994],{"class":79,"line":12189},[77,71995,71996],{"class":323},"      \u003C!-- \n",[77,71998,71999],{"class":79,"line":12214},[77,72000,72001],{"class":323},"        \u003Ctr>\n",[77,72003,72004],{"class":79,"line":12237},[77,72005,72006],{"class":323},"          \u003Ctd>1001\u003C\u002Ftd>\n",[77,72008,72009],{"class":79,"line":12261},[77,72010,72011],{"class":323},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[77,72013,72014],{"class":79,"line":12266},[77,72015,72016],{"class":323},"          \u003Ctd>19\u003C\u002Ftd>\n",[77,72018,72019],{"class":79,"line":12271},[77,72020,72021],{"class":323},"          \u003Ctd>男\u003C\u002Ftd>\n",[77,72023,72024],{"class":79,"line":12276},[77,72025,72026],{"class":323},"          \u003Ctd>15000\u003C\u002Ftd>\n",[77,72028,72029],{"class":79,"line":12285},[77,72030,72031],{"class":323},"          \u003Ctd>上海\u003C\u002Ftd>\n",[77,72033,72034],{"class":79,"line":12290},[77,72035,72036],{"class":323},"          \u003Ctd>\n",[77,72038,72039],{"class":79,"line":12296},[77,72040,72041],{"class":323},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[77,72043,72044],{"class":79,"line":12317},[77,72045,72046],{"class":323},"          \u003C\u002Ftd>\n",[77,72048,72049],{"class":79,"line":12323},[77,72050,72051],{"class":323},"        \u003C\u002Ftr> \n",[77,72053,72054],{"class":79,"line":12337},[77,72055,72056],{"class":323},"        -->\n",[77,72058,72059,72061,72063],{"class":79,"line":12343},[77,72060,54235],{"class":87},[77,72062,2801],{"class":158},[77,72064,291],{"class":87},[77,72066,72067,72069,72071],{"class":79,"line":12370},[77,72068,54875],{"class":87},[77,72070,2755],{"class":158},[77,72072,291],{"class":87},[77,72074,72075,72077,72079],{"class":79,"line":12379},[77,72076,54602],{"class":87},[77,72078,54271],{"class":158},[77,72080,291],{"class":87},[77,72082,72083],{"class":79,"line":12385},[77,72084,62406],{"class":323},[77,72086,72087,72089,72092,72094,72096,72098,72100,72103],{"class":79,"line":12393},[77,72088,13694],{"class":2123},[77,72090,72091],{"class":94}," uname",[77,72093,16036],{"class":2123},[77,72095,56850],{"class":87},[77,72097,56853],{"class":83},[77,72099,2622],{"class":87},[77,72101,72102],{"class":271},"'.uname'",[77,72104,2628],{"class":87},[77,72106,72107,72109,72111,72113,72115,72117,72119,72122],{"class":79,"line":12398},[77,72108,13694],{"class":2123},[77,72110,18159],{"class":94},[77,72112,16036],{"class":2123},[77,72114,56850],{"class":87},[77,72116,56853],{"class":83},[77,72118,2622],{"class":87},[77,72120,72121],{"class":271},"'.age'",[77,72123,2628],{"class":87},[77,72125,72126,72128,72131,72133,72135,72137,72139,72142],{"class":79,"line":19074},[77,72127,13694],{"class":2123},[77,72129,72130],{"class":94}," gender",[77,72132,16036],{"class":2123},[77,72134,56850],{"class":87},[77,72136,56853],{"class":83},[77,72138,2622],{"class":87},[77,72140,72141],{"class":271},"'.gender'",[77,72143,2628],{"class":87},[77,72145,72146,72148,72151,72153,72155,72157,72159,72162],{"class":79,"line":19080},[77,72147,13694],{"class":2123},[77,72149,72150],{"class":94}," salary",[77,72152,16036],{"class":2123},[77,72154,56850],{"class":87},[77,72156,56853],{"class":83},[77,72158,2622],{"class":87},[77,72160,72161],{"class":271},"'.salary'",[77,72163,2628],{"class":87},[77,72165,72166,72168,72171,72173,72175,72177,72179,72182],{"class":79,"line":19103},[77,72167,13694],{"class":2123},[77,72169,72170],{"class":94}," city",[77,72172,16036],{"class":2123},[77,72174,56850],{"class":87},[77,72176,56853],{"class":83},[77,72178,2622],{"class":87},[77,72180,72181],{"class":271},"'.city'",[77,72183,2628],{"class":87},[77,72185,72186,72188,72191,72193,72195,72197,72199,72202],{"class":79,"line":19109},[77,72187,13694],{"class":2123},[77,72189,72190],{"class":94}," tbody",[77,72192,16036],{"class":2123},[77,72194,56850],{"class":87},[77,72196,56853],{"class":83},[77,72198,2622],{"class":87},[77,72200,72201],{"class":271},"'tbody'",[77,72203,2628],{"class":87},[77,72205,72206],{"class":79,"line":19132},[77,72207,4875],{"emptyLinePlaceholder":2549},[77,72209,72210],{"class":79,"line":19146},[77,72211,72212],{"class":323},"    \u002F\u002F 获取所有带有name属性的元素\n",[77,72214,72215,72217,72220,72222,72224,72226,72228,72231],{"class":79,"line":19166},[77,72216,13694],{"class":2123},[77,72218,72219],{"class":94}," items",[77,72221,16036],{"class":2123},[77,72223,56850],{"class":87},[77,72225,58129],{"class":83},[77,72227,2622],{"class":87},[77,72229,72230],{"class":271},"'[name]'",[77,72232,2628],{"class":87},[77,72234,72235],{"class":79,"line":19172},[77,72236,72237],{"class":323},"    \u002F\u002F 声明一个空的数组\n",[77,72239,72240,72242,72244,72246],{"class":79,"line":19183},[77,72241,13694],{"class":2123},[77,72243,60143],{"class":94},[77,72245,16036],{"class":2123},[77,72247,54296],{"class":87},[77,72249,72250],{"class":79,"line":19206},[77,72251,72252],{"class":323},"    \u002F\u002F 1.录入模块\n",[77,72254,72255],{"class":79,"line":19228},[77,72256,72257],{"class":323},"    \u002F\u002F 1.1这是一个表单提交事件\n",[77,72259,72260,72262,72265,72267,72269,72271,72273,72276],{"class":79,"line":19233},[77,72261,13694],{"class":2123},[77,72263,72264],{"class":94}," info",[77,72266,16036],{"class":2123},[77,72268,56850],{"class":87},[77,72270,56853],{"class":83},[77,72272,2622],{"class":87},[77,72274,72275],{"class":271},"'.info'",[77,72277,2628],{"class":87},[77,72279,72280,72283,72285,72287,72290,72292,72294,72296,72298],{"class":79,"line":19239},[77,72281,72282],{"class":87},"    info.",[77,72284,60261],{"class":83},[77,72286,2622],{"class":87},[77,72288,72289],{"class":271},"'submit'",[77,72291,680],{"class":87},[77,72293,56903],{"class":2123},[77,72295,4134],{"class":87},[77,72297,2693],{"class":7691},[77,72299,14914],{"class":87},[77,72301,72302],{"class":79,"line":19253},[77,72303,72304],{"class":323},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[77,72306,72307,72310,72313],{"class":79,"line":19266},[77,72308,72309],{"class":87},"      e.",[77,72311,72312],{"class":83},"preventDefault",[77,72314,4451],{"class":87},[77,72316,72317],{"class":79,"line":19271},[77,72318,62460],{"class":323},[77,72320,72321],{"class":79,"line":19285},[77,72322,4875],{"emptyLinePlaceholder":2549},[77,72324,72325],{"class":79,"line":19290},[77,72326,72327],{"class":323},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[77,72329,72330],{"class":79,"line":19296},[77,72331,72332],{"class":323},"      \u002F\u002F 先遍历循环\n",[77,72334,72335,72337,72339,72341,72343,72345,72347,72349,72351,72354,72356,72358,72360],{"class":79,"line":19301},[77,72336,54742],{"class":2123},[77,72338,4134],{"class":87},[77,72340,54305],{"class":2123},[77,72342,11911],{"class":87},[77,72344,268],{"class":2123},[77,72346,6568],{"class":94},[77,72348,11918],{"class":87},[77,72350,260],{"class":2123},[77,72352,72353],{"class":87}," items.",[77,72355,54426],{"class":94},[77,72357,5689],{"class":87},[77,72359,4767],{"class":2123},[77,72361,14914],{"class":87},[77,72363,72364,72366,72369,72371,72374],{"class":79,"line":19315},[77,72365,4972],{"class":2123},[77,72367,72368],{"class":87}," (items[i].value ",[77,72370,56940],{"class":2123},[77,72372,72373],{"class":271}," ''",[77,72375,14914],{"class":87},[77,72377,72378,72381,72384,72386,72389],{"class":79,"line":19320},[77,72379,72380],{"class":2123},"          return",[77,72382,72383],{"class":83}," alert",[77,72385,2622],{"class":87},[77,72387,72388],{"class":271},"'输入内容不能为空'",[77,72390,2628],{"class":87},[77,72392,72393],{"class":79,"line":19325},[77,72394,5004],{"class":87},[77,72396,72397],{"class":79,"line":19339},[77,72398,54856],{"class":87},[77,72400,72401],{"class":79,"line":19351},[77,72402,4875],{"emptyLinePlaceholder":2549},[77,72404,72405],{"class":79,"line":19356},[77,72406,72407],{"class":323},"      \u002F\u002F 创建新的对象\n",[77,72409,72410,72412,72415,72417],{"class":79,"line":19369},[77,72411,60676],{"class":2123},[77,72413,72414],{"class":94}," obj",[77,72416,16036],{"class":2123},[77,72418,88],{"class":87},[77,72420,72421,72424,72426,72428,72430],{"class":79,"line":19374},[77,72422,72423],{"class":87},"        stuID: arr.",[77,72425,54426],{"class":94},[77,72427,48032],{"class":2123},[77,72429,27586],{"class":94},[77,72431,33933],{"class":87},[77,72433,72434],{"class":79,"line":19379},[77,72435,72436],{"class":87},"        uname: uname.value,\n",[77,72438,72439],{"class":79,"line":19384},[77,72440,72441],{"class":87},"        age: age.value,\n",[77,72443,72444],{"class":79,"line":19397},[77,72445,72446],{"class":87},"        gender: gender.value,\n",[77,72448,72449],{"class":79,"line":19402},[77,72450,72451],{"class":87},"        salary: salary.value,\n",[77,72453,72454],{"class":79,"line":35100},[77,72455,72456],{"class":87},"        city: city.value\n",[77,72458,72459],{"class":79,"line":35106},[77,72460,54856],{"class":87},[77,72462,72463],{"class":79,"line":35112},[77,72464,72465],{"class":323},"      \u002F\u002F console.log(obj);\n",[77,72467,72468],{"class":79,"line":35118},[77,72469,72470],{"class":323},"      \u002F\u002F 追加到数组里面\n",[77,72472,72473,72475,72477],{"class":79,"line":35124},[77,72474,60455],{"class":87},[77,72476,54342],{"class":83},[77,72478,72479],{"class":87},"(obj)\n",[77,72481,72482],{"class":79,"line":35135},[77,72483,72484],{"class":323},"      \u002F\u002F console.log(arr);\n",[77,72486,72487],{"class":79,"line":35141},[77,72488,72489],{"class":323},"      \u002F\u002F 清空表单  reset重置表单\n",[77,72491,72492,72495,72497,72500],{"class":79,"line":35161},[77,72493,72494],{"class":94},"      this",[77,72496,3171],{"class":87},[77,72498,72499],{"class":83},"reset",[77,72501,4451],{"class":87},[77,72503,72504],{"class":79,"line":35167},[77,72505,72506],{"class":323},"      \u002F\u002F 调用渲染函数\n",[77,72508,72509,72512],{"class":79,"line":35178},[77,72510,72511],{"class":83},"      render",[77,72513,4451],{"class":87},[77,72515,72516],{"class":79,"line":35184},[77,72517,35928],{"class":87},[77,72519,72520],{"class":79,"line":35190},[77,72521,72522],{"class":323},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[77,72524,72525,72528,72531],{"class":79,"line":35196},[77,72526,72527],{"class":2123},"    function",[77,72529,72530],{"class":83}," render",[77,72532,13326],{"class":87},[77,72534,72535],{"class":79,"line":35202},[77,72536,72537],{"class":323},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[77,72539,72540,72543,72545],{"class":79,"line":35208},[77,72541,72542],{"class":87},"      tbody.innerHTML ",[77,72544,268],{"class":2123},[77,72546,72547],{"class":271}," ''\n",[77,72549,72550],{"class":79,"line":35214},[77,72551,72552],{"class":323},"      \u002F\u002F 遍历数组\n",[77,72554,72555,72557,72559,72561,72563,72565,72567,72569,72571,72573,72575,72577,72579],{"class":79,"line":35220},[77,72556,54742],{"class":2123},[77,72558,4134],{"class":87},[77,72560,54305],{"class":2123},[77,72562,11911],{"class":87},[77,72564,268],{"class":2123},[77,72566,6568],{"class":94},[77,72568,11918],{"class":87},[77,72570,260],{"class":2123},[77,72572,54423],{"class":87},[77,72574,54426],{"class":94},[77,72576,5689],{"class":87},[77,72578,4767],{"class":2123},[77,72580,14914],{"class":87},[77,72582,72583,72585,72588,72590,72592,72595,72597,72600],{"class":79,"line":35240},[77,72584,63716],{"class":2123},[77,72586,72587],{"class":94}," tr",[77,72589,16036],{"class":2123},[77,72591,56850],{"class":87},[77,72593,72594],{"class":83},"createElement",[77,72596,2622],{"class":87},[77,72598,72599],{"class":271},"'tr'",[77,72601,2628],{"class":87},[77,72603,72604,72607,72609],{"class":79,"line":35246},[77,72605,72606],{"class":87},"        tr.innerHTML ",[77,72608,268],{"class":2123},[77,72610,72611],{"class":271}," `\n",[77,72613,72614,72617,72619,72621,72623,72626,72629],{"class":79,"line":35262},[77,72615,72616],{"class":271},"        \u003Ctd>${",[77,72618,6355],{"class":87},[77,72620,3503],{"class":271},[77,72622,646],{"class":87},[77,72624,72625],{"class":271},"].",[77,72627,72628],{"class":87},"stuID",[77,72630,72631],{"class":271},"}\u003C\u002Ftd>\n",[77,72633,72634,72637,72639,72641,72643,72645,72648],{"class":79,"line":35268},[77,72635,72636],{"class":271},"          \u003Ctd>${",[77,72638,6355],{"class":87},[77,72640,3503],{"class":271},[77,72642,646],{"class":87},[77,72644,72625],{"class":271},[77,72646,72647],{"class":87},"uname",[77,72649,72631],{"class":271},[77,72651,72652,72654,72656,72658,72660,72662,72665],{"class":79,"line":35282},[77,72653,72636],{"class":271},[77,72655,6355],{"class":87},[77,72657,3503],{"class":271},[77,72659,646],{"class":87},[77,72661,72625],{"class":271},[77,72663,72664],{"class":87},"age",[77,72666,72631],{"class":271},[77,72668,72669,72671,72673,72675,72677,72679,72682],{"class":79,"line":35288},[77,72670,72636],{"class":271},[77,72672,6355],{"class":87},[77,72674,3503],{"class":271},[77,72676,646],{"class":87},[77,72678,72625],{"class":271},[77,72680,72681],{"class":87},"gender",[77,72683,72631],{"class":271},[77,72685,72686,72688,72690,72692,72694,72696,72699],{"class":79,"line":35303},[77,72687,72636],{"class":271},[77,72689,6355],{"class":87},[77,72691,3503],{"class":271},[77,72693,646],{"class":87},[77,72695,72625],{"class":271},[77,72697,72698],{"class":87},"salary",[77,72700,72631],{"class":271},[77,72702,72703,72705,72707,72709,72711,72713,72716],{"class":79,"line":35309},[77,72704,72636],{"class":271},[77,72706,6355],{"class":87},[77,72708,3503],{"class":271},[77,72710,646],{"class":87},[77,72712,72625],{"class":271},[77,72714,72715],{"class":87},"city",[77,72717,72631],{"class":271},[77,72719,72720],{"class":79,"line":35318},[77,72721,72036],{"class":271},[77,72723,72724,72727,72729],{"class":79,"line":35324},[77,72725,72726],{"class":271},"            \u003Ca href=\"javascript:\" data-id=${",[77,72728,646],{"class":87},[77,72730,72731],{"class":271},"}>删除\u003C\u002Fa>\n",[77,72733,72734],{"class":79,"line":35333},[77,72735,72736],{"class":271},"          \u003C\u002Ftd> \n",[77,72738,72739],{"class":79,"line":35339},[77,72740,72741],{"class":271},"          `\n",[77,72743,72744],{"class":79,"line":35345},[77,72745,72746],{"class":323},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[77,72748,72749,72752,72755],{"class":79,"line":35354},[77,72750,72751],{"class":87},"        tbody.",[77,72753,72754],{"class":83},"appendChild",[77,72756,72757],{"class":87},"(tr)\n",[77,72759,72760],{"class":79,"line":35360},[77,72761,54856],{"class":87},[77,72763,72764],{"class":79,"line":35371},[77,72765,4662],{"class":87},[77,72767,72768],{"class":79,"line":35377},[77,72769,4875],{"emptyLinePlaceholder":2549},[77,72771,72772],{"class":79,"line":35396},[77,72773,72774],{"class":323},"    \u002F\u002F 3.删除委托\n",[77,72776,72777],{"class":79,"line":35402},[77,72778,72779],{"class":323},"    \u002F\u002F 3.1 事件委托 tbody\n",[77,72781,72782,72785,72787,72789,72791,72793,72795,72797,72799],{"class":79,"line":35413},[77,72783,72784],{"class":87},"    tbody.",[77,72786,60261],{"class":83},[77,72788,2622],{"class":87},[77,72790,60266],{"class":271},[77,72792,680],{"class":87},[77,72794,56903],{"class":2123},[77,72796,4134],{"class":87},[77,72798,2693],{"class":7691},[77,72800,14914],{"class":87},[77,72802,72803,72805,72807,72809,72811],{"class":79,"line":35419},[77,72804,56934],{"class":2123},[77,72806,69477],{"class":87},[77,72808,56940],{"class":2123},[77,72810,70699],{"class":271},[77,72812,14914],{"class":87},[77,72814,72815],{"class":79,"line":35439},[77,72816,72817],{"class":323},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[77,72819,72820],{"class":79,"line":35455},[77,72821,72822],{"class":323},"        \u002F\u002F console.log(e.target.dataset.id);\n",[77,72824,72825],{"class":79,"line":35461},[77,72826,72827],{"class":323},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[77,72829,72830,72833,72835,72838,72840],{"class":79,"line":35475},[77,72831,72832],{"class":87},"        arr.",[77,72834,60458],{"class":83},[77,72836,72837],{"class":87},"(e.target.dataset.id, ",[77,72839,2120],{"class":94},[77,72841,2628],{"class":87},[77,72843,72844],{"class":79,"line":35481},[77,72845,72846],{"class":323},"        \u002F\u002F 重新渲染一次\n",[77,72848,72849,72852],{"class":79,"line":35487},[77,72850,72851],{"class":83},"        render",[77,72853,4451],{"class":87},[77,72855,72856],{"class":79,"line":35498},[77,72857,54856],{"class":87},[77,72859,72860],{"class":79,"line":35504},[77,72861,35928],{"class":87},[77,72863,72864,72866,72868],{"class":79,"line":35510},[77,72865,54875],{"class":87},[77,72867,54271],{"class":158},[77,72869,291],{"class":87},[77,72871,72872],{"class":79,"line":35520},[77,72873,4875],{"emptyLinePlaceholder":2549},[77,72875,72876,72878,72880],{"class":79,"line":35526},[77,72877,351],{"class":87},[77,72879,54258],{"class":158},[77,72881,291],{"class":87},[77,72883,72884],{"class":79,"line":35537},[77,72885,4875],{"emptyLinePlaceholder":2549},[77,72887,72888,72890,72892],{"class":79,"line":35543},[77,72889,351],{"class":87},[77,72891,53101],{"class":158},[77,72893,291],{"class":87},[24,72895,72896],{},"样式：",[67,72898,72902],{"className":72899,"code":72900,"language":72901,"meta":72,"style":72},"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",[74,72903,72904,72909,72918,72927,72931,72935,72940,72950,72955,72959,72964,72974,72979,72988,72992,72996,73001,73006,73016,73026,73031,73035,73040,73049,73059,73064,73074,73084,73088,73093,73101,73105,73110,73115,73120,73128,73137,73141,73146,73155,73159,73164,73173,73177,73182,73191,73200,73208,73212,73217,73226,73236,73244,73254,73260,73269,73279,73289,73293,73298,73307,73315,73324,73332,73340,73349,73359,73367,73371,73376,73385],{"__ignoreMap":72},[77,72905,72906],{"class":79,"line":80},[77,72907,72908],{"class":87},"* {\n",[77,72910,72911,72913,72915],{"class":79,"line":91},[77,72912,1934],{"class":158},[77,72914,98],{"class":87},[77,72916,72917],{"class":271},"0;\n",[77,72919,72920,72923,72925],{"class":79,"line":107},[77,72921,72922],{"class":271},"  padding",[77,72924,98],{"class":87},[77,72926,72917],{"class":271},[77,72928,72929],{"class":79,"line":191},[77,72930,110],{"class":87},[77,72932,72933],{"class":79,"line":1543},[77,72934,4875],{"emptyLinePlaceholder":2549},[77,72936,72937],{"class":79,"line":1549},[77,72938,72939],{"class":271},"a {\n",[77,72941,72942,72945,72947],{"class":79,"line":1566},[77,72943,72944],{"class":158},"  text-decoration",[77,72946,98],{"class":87},[77,72948,72949],{"class":271},"none;\n",[77,72951,72952],{"class":79,"line":1572},[77,72953,72954],{"class":271},"  color:#721c24;\n",[77,72956,72957],{"class":79,"line":1589},[77,72958,110],{"class":87},[77,72960,72961],{"class":79,"line":1595},[77,72962,72963],{"class":271},"h1 {\n",[77,72965,72966,72969,72971],{"class":79,"line":4088},[77,72967,72968],{"class":158},"  text-align",[77,72970,98],{"class":87},[77,72972,72973],{"class":271},"center;\n",[77,72975,72976],{"class":79,"line":4093},[77,72977,72978],{"class":271},"  color:#333;\n",[77,72980,72981,72983,72985],{"class":79,"line":4099},[77,72982,1934],{"class":158},[77,72984,98],{"class":87},[77,72986,72987],{"class":271},"20px 0;\n",[77,72989,72990],{"class":79,"line":4104},[77,72991,5149],{"class":87},[77,72993,72994],{"class":79,"line":4118},[77,72995,110],{"class":87},[77,72997,72998],{"class":79,"line":4123},[77,72999,73000],{"class":271},"table {\n",[77,73002,73003],{"class":79,"line":4129},[77,73004,73005],{"class":271},"  margin:0 auto;\n",[77,73007,73008,73011,73013],{"class":79,"line":4150},[77,73009,73010],{"class":158},"  width",[77,73012,98],{"class":87},[77,73014,73015],{"class":271},"800px;\n",[77,73017,73018,73021,73023],{"class":79,"line":4155},[77,73019,73020],{"class":158},"  border-collapse",[77,73022,98],{"class":87},[77,73024,73025],{"class":271},"collapse;\n",[77,73027,73028],{"class":79,"line":4169},[77,73029,73030],{"class":271},"  color:#004085;\n",[77,73032,73033],{"class":79,"line":4174},[77,73034,110],{"class":87},[77,73036,73037],{"class":79,"line":4203},[77,73038,73039],{"class":271},"th {\n",[77,73041,73042,73044,73046],{"class":79,"line":4208},[77,73043,72922],{"class":158},[77,73045,98],{"class":87},[77,73047,73048],{"class":271},"10px;\n",[77,73050,73051,73054,73056],{"class":79,"line":4225},[77,73052,73053],{"class":158},"  background",[77,73055,98],{"class":87},[77,73057,73058],{"class":323},"#cfe5ff;\n",[77,73060,73061],{"class":79,"line":4230},[77,73062,73063],{"class":87},"  \n",[77,73065,73066,73069,73071],{"class":79,"line":4235},[77,73067,73068],{"class":158},"  font-size",[77,73070,98],{"class":87},[77,73072,73073],{"class":271},"20px;\n",[77,73075,73076,73079,73081],{"class":79,"line":4240},[77,73077,73078],{"class":158},"  font-weight",[77,73080,98],{"class":87},[77,73082,73083],{"class":271},"400;\n",[77,73085,73086],{"class":79,"line":4254},[77,73087,110],{"class":87},[77,73089,73090],{"class":79,"line":4259},[77,73091,73092],{"class":271},"td,th {\n",[77,73094,73095,73098],{"class":79,"line":5052},[77,73096,73097],{"class":271},"  border:1px solid",[77,73099,73100],{"class":323}," #b8daff;\n",[77,73102,73103],{"class":79,"line":5066},[77,73104,110],{"class":87},[77,73106,73107],{"class":79,"line":5074},[77,73108,73109],{"class":271},"td {\n",[77,73111,73112],{"class":79,"line":5079},[77,73113,73114],{"class":271},"  padding:10px;\n",[77,73116,73117],{"class":79,"line":5085},[77,73118,73119],{"class":271},"  color:#666;\n",[77,73121,73122,73124,73126],{"class":79,"line":5091},[77,73123,72968],{"class":158},[77,73125,98],{"class":87},[77,73127,72973],{"class":271},[77,73129,73130,73132,73134],{"class":79,"line":5096},[77,73131,73068],{"class":158},[77,73133,98],{"class":87},[77,73135,73136],{"class":271},"16px;\n",[77,73138,73139],{"class":79,"line":10422},[77,73140,110],{"class":87},[77,73142,73143],{"class":79,"line":10446},[77,73144,73145],{"class":271},"tbody tr {\n",[77,73147,73148,73150,73152],{"class":79,"line":10451},[77,73149,73053],{"class":158},[77,73151,98],{"class":87},[77,73153,73154],{"class":323},"#fff;\n",[77,73156,73157],{"class":79,"line":10457},[77,73158,110],{"class":87},[77,73160,73161],{"class":79,"line":10484},[77,73162,73163],{"class":271},"tbody tr:hover {\n",[77,73165,73166,73168,73170],{"class":79,"line":10489},[77,73167,73053],{"class":158},[77,73169,98],{"class":87},[77,73171,73172],{"class":323},"#e1ecf8;\n",[77,73174,73175],{"class":79,"line":10495},[77,73176,110],{"class":87},[77,73178,73179],{"class":79,"line":10507},[77,73180,73181],{"class":271},".info {\n",[77,73183,73184,73186,73188],{"class":79,"line":10519},[77,73185,73010],{"class":158},[77,73187,98],{"class":87},[77,73189,73190],{"class":271},"900px;\n",[77,73192,73193,73195,73197],{"class":79,"line":10531},[77,73194,1934],{"class":158},[77,73196,98],{"class":87},[77,73198,73199],{"class":271},"50px auto;\n",[77,73201,73202,73204,73206],{"class":79,"line":12189},[77,73203,72968],{"class":158},[77,73205,98],{"class":87},[77,73207,72973],{"class":271},[77,73209,73210],{"class":79,"line":12214},[77,73211,110],{"class":87},[77,73213,73214],{"class":79,"line":12237},[77,73215,73216],{"class":271},".info  input, .info select {\n",[77,73218,73219,73221,73223],{"class":79,"line":12261},[77,73220,73010],{"class":158},[77,73222,98],{"class":87},[77,73224,73225],{"class":271},"80px;\n",[77,73227,73228,73231,73233],{"class":79,"line":12266},[77,73229,73230],{"class":158},"  height",[77,73232,98],{"class":87},[77,73234,73235],{"class":271},"27px;\n",[77,73237,73238,73240,73242],{"class":79,"line":12271},[77,73239,181],{"class":158},[77,73241,98],{"class":87},[77,73243,72949],{"class":271},[77,73245,73246,73249,73251],{"class":79,"line":12276},[77,73247,73248],{"class":158},"  border-radius",[77,73250,98],{"class":87},[77,73252,73253],{"class":271},"5px;\n",[77,73255,73256,73258],{"class":79,"line":12285},[77,73257,73097],{"class":271},[77,73259,73100],{"class":323},[77,73261,73262,73265,73267],{"class":79,"line":12290},[77,73263,73264],{"class":158},"  padding-left",[77,73266,98],{"class":87},[77,73268,73253],{"class":271},[77,73270,73271,73274,73276],{"class":79,"line":12296},[77,73272,73273],{"class":158},"  box-sizing",[77,73275,98],{"class":87},[77,73277,73278],{"class":271},"border-box;\n",[77,73280,73281,73284,73286],{"class":79,"line":12317},[77,73282,73283],{"class":158},"  margin-right",[77,73285,98],{"class":87},[77,73287,73288],{"class":271},"15px;\n",[77,73290,73291],{"class":79,"line":12323},[77,73292,110],{"class":87},[77,73294,73295],{"class":79,"line":12337},[77,73296,73297],{"class":271},".info button {\n",[77,73299,73300,73302,73304],{"class":79,"line":12343},[77,73301,73010],{"class":158},[77,73303,98],{"class":87},[77,73305,73306],{"class":271},"60px;\n",[77,73308,73309,73311,73313],{"class":79,"line":12370},[77,73310,73230],{"class":158},[77,73312,98],{"class":87},[77,73314,73235],{"class":271},[77,73316,73317,73319,73321],{"class":79,"line":12379},[77,73318,875],{"class":158},[77,73320,98],{"class":87},[77,73322,73323],{"class":323},"#004085;\n",[77,73325,73326,73328,73330],{"class":79,"line":12385},[77,73327,181],{"class":158},[77,73329,98],{"class":87},[77,73331,72949],{"class":271},[77,73333,73334,73336,73338],{"class":79,"line":12393},[77,73335,2115],{"class":158},[77,73337,98],{"class":87},[77,73339,72917],{"class":271},[77,73341,73342,73345,73347],{"class":79,"line":12398},[77,73343,73344],{"class":158},"  color",[77,73346,98],{"class":87},[77,73348,73154],{"class":323},[77,73350,73351,73354,73356],{"class":79,"line":19074},[77,73352,73353],{"class":158},"  cursor",[77,73355,98],{"class":87},[77,73357,73358],{"class":271},"pointer;\n",[77,73360,73361,73363,73365],{"class":79,"line":19080},[77,73362,73248],{"class":158},[77,73364,98],{"class":87},[77,73366,73253],{"class":271},[77,73368,73369],{"class":79,"line":19103},[77,73370,110],{"class":87},[77,73372,73373],{"class":79,"line":19109},[77,73374,73375],{"class":271},".info .age {\n",[77,73377,73378,73380,73382],{"class":79,"line":19132},[77,73379,73010],{"class":158},[77,73381,98],{"class":87},[77,73383,73384],{"class":271},"50px;\n",[77,73386,73387],{"class":79,"line":19146},[77,73388,110],{"class":87},[24,73390,73391],{},"思路：",[24,73393,73394],{},[40,73395],{"alt":72,"src":73396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[24,73398,73399],{},[40,73400],{"alt":72,"src":73401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[24,73403,73404],{},[40,73405],{"alt":72,"src":73406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[19,73408,73410],{"id":73409},"_3315-重绘回流","3.3.15 重绘回流",[24,73412,73413],{},[40,73414],{"alt":72,"src":73415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[24,73417,73418],{},[40,73419],{"alt":72,"src":73420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[24,73422,73423],{},[40,73424],{"alt":72,"src":73425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73427,73429],{"id":73428},"_34-bom","3.4 BOM",[24,73431,73432],{},[40,73433],{"alt":72,"src":73434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[24,73436,73437],{},"平时写的document省略了window而已，实际上是window.document",[24,73439,73440],{},"函数也是这样，调用的时候实际为window.fn()",[24,73442,73443],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[24,73445,73446],{},"window大部分情况下可以省略",[19,73448,73450],{"id":73449},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[24,73452,73453],{},"只执行一次",[24,73455,73456],{},[40,73457],{"alt":72,"src":73458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[24,73460,73461],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[24,73463,73464],{},[40,73465],{"alt":72,"src":73466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[19,73468,73470],{"id":73469},"_342-js执行机制","3.4.2 JS执行机制",[24,73472,73473],{},[40,73474],{"alt":72,"src":73475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[24,73477,73478],{},"两个的结果都是1111 3333 2222",[24,73480,73481],{},[40,73482],{"alt":72,"src":73483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[24,73485,73486],{},[40,73487],{"alt":72,"src":73488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[24,73490,73491],{},[40,73492],{"alt":72,"src":73493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[24,73495,73496],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[24,73498,73499],{},"工作流程：",[24,73501,73502],{},[40,73503],{"alt":72,"src":73504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[24,73506,73507],{},[40,73508],{"alt":72,"src":73509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[24,73511,73512],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[24,73514,73515],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[19,73517,73519],{"id":73518},"_343-location对象","3.4.3 location对象",[24,73521,73522],{},"location对象属于window这个全局对象下的，可以 省略window",[24,73524,73525],{},[40,73526],{"alt":72,"src":73527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[24,73529,73530],{},"href可以跳转页面",[139,73532,73533],{},[54,73534,73535],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[24,73537,73538],{},"search得到提交信息之后网站后边的地址",[24,73540,73541],{},[40,73542],{"alt":72,"src":73543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[24,73545,73546],{},[40,73547],{"alt":72,"src":73548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[139,73550,73551],{"start":91},[54,73552,73553],{},"hash:这个获取单页面应用#后边的地址",[24,73555,73556],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[24,73558,73559],{},[40,73560],{"alt":72,"src":73561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[67,73563,73565],{"className":55525,"code":73564,"language":55527,"meta":72,"style":72},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[74,73566,73567,73587,73607],{"__ignoreMap":72},[77,73568,73569,73571,73573,73575,73577,73580,73583,73585],{"class":79,"line":80},[77,73570,54602],{"class":87},[77,73572,417],{"class":158},[77,73574,63503],{"class":83},[77,73576,268],{"class":87},[77,73578,73579],{"class":271},"\"#\u002Fmy\"",[77,73581,73582],{"class":87},">我的\u003C\u002F",[77,73584,417],{"class":158},[77,73586,291],{"class":87},[77,73588,73589,73591,73593,73595,73597,73600,73603,73605],{"class":79,"line":91},[77,73590,54602],{"class":87},[77,73592,417],{"class":158},[77,73594,63503],{"class":83},[77,73596,268],{"class":87},[77,73598,73599],{"class":271},"\"#\u002Ffriend\"",[77,73601,73602],{"class":87},">关注\u003C\u002F",[77,73604,417],{"class":158},[77,73606,291],{"class":87},[77,73608,73609,73611,73613,73615,73617,73620,73623,73625],{"class":79,"line":107},[77,73610,54602],{"class":87},[77,73612,417],{"class":158},[77,73614,63503],{"class":83},[77,73616,268],{"class":87},[77,73618,73619],{"class":271},"\"#\u002Fdownload\"",[77,73621,73622],{"class":87},">下载\u003C\u002F",[77,73624,417],{"class":158},[77,73626,291],{"class":87},[24,73628,73629],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[139,73631,73632],{"start":107},[54,73633,73634,73635,73637,73638,73640],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56172,73636],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56172,73639],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[19,73642,73644],{"id":73643},"_345-navigator对象","3.4.5 navigator对象",[24,73646,73647],{},[40,73648],{"alt":72,"src":73649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[67,73651,73655],{"className":73652,"code":73653,"language":73654,"meta":72,"style":72},"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",[74,73656,73657,73662,73673,73685,73690,73741,73782,73787,73800,73812,73817],{"__ignoreMap":72},[77,73658,73659],{"class":79,"line":80},[77,73660,73661],{"class":323},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[77,73663,73664,73666,73668,73670],{"class":79,"line":91},[77,73665,2841],{"class":2123},[77,73667,2622],{"class":87},[77,73669,56903],{"class":2123},[77,73671,73672],{"class":87}," () { \n",[77,73674,73675,73677,73680,73682],{"class":79,"line":107},[77,73676,9267],{"class":2123},[77,73678,73679],{"class":94}," userAgent",[77,73681,16036],{"class":2123},[77,73683,73684],{"class":87}," navigator.userAgent \n",[77,73686,73687],{"class":79,"line":191},[77,73688,73689],{"class":323},"\u002F\u002F 验证是否为Android或iPhone \n",[77,73691,73692,73694,73697,73699,73702,73705,73707,73709,73712,73714,73717,73721,73723,73725,73727,73730,73732,73734,73736,73738],{"class":79,"line":1543},[77,73693,9267],{"class":2123},[77,73695,73696],{"class":94}," android",[77,73698,16036],{"class":2123},[77,73700,73701],{"class":87}," userAgent.",[77,73703,73704],{"class":83},"match",[77,73706,2622],{"class":87},[77,73708,3197],{"class":271},[77,73710,73711],{"class":50443},"(Android);",[77,73713,3598],{"class":2123},[77,73715,73716],{"class":94},"[\\s",[77,73718,73720],{"class":73719},"snhLl","\\\u002F",[77,73722,3552],{"class":94},[77,73724,3094],{"class":2123},[77,73726,2622],{"class":50443},[77,73728,73729],{"class":94},"[\\d.]",[77,73731,3094],{"class":2123},[77,73733,3043],{"class":50443},[77,73735,3598],{"class":2123},[77,73737,3197],{"class":271},[77,73739,73740],{"class":87},") \n",[77,73742,73743,73745,73748,73750,73752,73754,73756,73758,73761,73764,73767,73769,73771,73774,73776,73778,73780],{"class":79,"line":1549},[77,73744,9267],{"class":2123},[77,73746,73747],{"class":94}," iphone",[77,73749,16036],{"class":2123},[77,73751,73701],{"class":87},[77,73753,73704],{"class":83},[77,73755,2622],{"class":87},[77,73757,3197],{"class":271},[77,73759,73760],{"class":50443},"(iPhone",[77,73762,73763],{"class":94},"\\s",[77,73765,73766],{"class":50443},"OS)",[77,73768,73763],{"class":94},[77,73770,2622],{"class":50443},[77,73772,73773],{"class":94},"[\\d_]",[77,73775,3094],{"class":2123},[77,73777,3043],{"class":50443},[77,73779,3197],{"class":271},[77,73781,73740],{"class":87},[77,73783,73784],{"class":79,"line":1566},[77,73785,73786],{"class":323},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[77,73788,73789,73791,73794,73797],{"class":79,"line":1572},[77,73790,4008],{"class":2123},[77,73792,73793],{"class":87}," (android ",[77,73795,73796],{"class":2123},"||",[77,73798,73799],{"class":87}," iphone) { \n",[77,73801,73802,73805,73807,73810],{"class":79,"line":1589},[77,73803,73804],{"class":87},"location.href ",[77,73806,268],{"class":2123},[77,73808,73809],{"class":271}," 'http:\u002F\u002Fm.itcast.cn'",[77,73811,5149],{"class":87},[77,73813,73814],{"class":79,"line":1595},[77,73815,73816],{"class":87},"} \n",[77,73818,73819],{"class":79,"line":4088},[77,73820,73821],{"class":87},"})()\n",[19,73823,73825],{"id":73824},"_346-histroy对象","3.4.6 histroy对象",[24,73827,73828],{},[40,73829],{"alt":72,"src":73830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[24,73832,73833],{},"浏览器地址的前进与后退!!!",[24,73835,73836],{},"history.back() 等效于 history.go(-1)",[24,73838,73839],{},"history.forward() 等效于 history.go(1)",[14,73841,73843],{"id":73842},"_35-本地存储","3.5 本地存储",[139,73845,73846,73849,73852],{},[54,73847,73848],{},"数据存储在用户浏览器中",[54,73850,73851],{},"设置、读取方便、甚至页面刷新不丢失数据",[54,73853,73854],{},"容量较大，sessionStorage和localStorage约 5M 左右",[19,73856,73858],{"id":73857},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[24,73860,73861],{},"只能存储字符串",[24,73863,73864],{},[40,73865],{"alt":72,"src":73866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[24,73868,73869],{},[40,73870],{"alt":72,"src":73871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[24,73873,73874],{},"键值对要加引号,不然就会当变量来看了",[24,73876,73877],{},"localStorage.setItem('uname', 'pink')",[24,73879,73880],{},"刷新之后信息不再丢失",[24,73882,73883],{},"操作key,value会跟着变",[24,73885,73886],{},"删除只删除键就可以,即名字",[24,73888,73877],{},[24,73890,73891],{},"改:",[24,73893,73894],{},"localStorage.setItem('uname','red')",[24,73896,73897],{},"有这个键就是改,没有这个键就是改",[24,73899,73900],{},[40,73901],{"alt":72,"src":73902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[24,73904,73905],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[24,73907,73908],{},[40,73909],{"alt":72,"src":73910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[24,73912,73913],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[19,73915,73917],{"id":73916},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[24,73919,73920],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[24,73922,73923],{},"特性:",[139,73925,73926,73929,73932,73935],{},[54,73927,73928],{},"生命周期为关闭浏览器窗口",[54,73930,73931],{},"在同一个窗口(页面)下数据可以共享",[54,73933,73934],{},"以键值对的形式存储使用",[54,73936,73937],{},"用法跟localStorage 基本相同",[19,73939,73941],{"id":73940},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[24,73943,73944],{},"本地只能存储字符串,无法直接存储复杂数据类型",[67,73946,73948],{"className":55525,"code":73947,"language":55527,"meta":72,"style":72},"\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",[74,73949,73950,73958,73963,73968,73973,73978,73982,73987,73992],{"__ignoreMap":72},[77,73951,73952,73954,73956],{"class":79,"line":80},[77,73953,260],{"class":87},[77,73955,54271],{"class":158},[77,73957,291],{"class":87},[77,73959,73960],{"class":79,"line":91},[77,73961,73962],{"class":87},"    const obj = {\n",[77,73964,73965],{"class":79,"line":107},[77,73966,73967],{"class":87},"      uname: 'pink老师',\n",[77,73969,73970],{"class":79,"line":191},[77,73971,73972],{"class":87},"      age: 18,\n",[77,73974,73975],{"class":79,"line":1543},[77,73976,73977],{"class":87},"      gender: '女'\n",[77,73979,73980],{"class":79,"line":1549},[77,73981,4662],{"class":87},[77,73983,73984],{"class":79,"line":1566},[77,73985,73986],{"class":87},"    \u002F\u002F 存储复杂数据类型\n",[77,73988,73989],{"class":79,"line":1572},[77,73990,73991],{"class":87},"    localStorage.setItem('obj', obj)\n",[77,73993,73994,73996,73998],{"class":79,"line":1589},[77,73995,54875],{"class":87},[77,73997,54271],{"class":158},[77,73999,291],{"class":87},[24,74001,74002],{},[40,74003],{"alt":72,"src":74004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[24,74006,74007],{},"如果获取一下数据:",[24,74009,74010],{},"log(localStorage.getItem('obj'))",[24,74012,74013],{},[40,74014],{"alt":72,"src":74015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[24,74017,74018],{},"发现直接存对象是使用不了的!!!",[24468,74020,74022],{"id":74021},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[24,74024,74025],{},[40,74026],{"alt":72,"src":74027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[67,74029,74031],{"className":53099,"code":74030,"language":53101,"meta":72,"style":72},"\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",[74,74032,74033,74041,74051,74061,74070,74078,74082,74086,74112,74131,74139,74143,74148,74153],{"__ignoreMap":72},[77,74034,74035,74037,74039],{"class":79,"line":80},[77,74036,260],{"class":87},[77,74038,54271],{"class":158},[77,74040,291],{"class":87},[77,74042,74043,74045,74047,74049],{"class":79,"line":91},[77,74044,13694],{"class":2123},[77,74046,72414],{"class":94},[77,74048,16036],{"class":2123},[77,74050,88],{"class":87},[77,74052,74053,74056,74059],{"class":79,"line":107},[77,74054,74055],{"class":87},"      uname: ",[77,74057,74058],{"class":271},"'pink老师'",[77,74060,33933],{"class":87},[77,74062,74063,74066,74068],{"class":79,"line":191},[77,74064,74065],{"class":87},"      age: ",[77,74067,3263],{"class":94},[77,74069,33933],{"class":87},[77,74071,74072,74075],{"class":79,"line":1543},[77,74073,74074],{"class":87},"      gender: ",[77,74076,74077],{"class":271},"'女'\n",[77,74079,74080],{"class":79,"line":1549},[77,74081,4662],{"class":87},[77,74083,74084],{"class":79,"line":1566},[77,74085,73986],{"class":323},[77,74087,74088,74091,74094,74096,74099,74101,74104,74106,74109],{"class":79,"line":1572},[77,74089,74090],{"class":87},"  localStorage.",[77,74092,74093],{"class":83},"setItem",[77,74095,2622],{"class":87},[77,74097,74098],{"class":271},"'obj'",[77,74100,680],{"class":87},[77,74102,74103],{"class":94},"JSON",[77,74105,3171],{"class":87},[77,74107,74108],{"class":83},"stringify",[77,74110,74111],{"class":87},"(obj))\n",[77,74113,74114,74117,74119,74122,74125,74127,74129],{"class":79,"line":1589},[77,74115,74116],{"class":87},"  console.",[77,74118,60695],{"class":83},[77,74120,74121],{"class":87},"(localStorage.",[77,74123,74124],{"class":83},"getItem",[77,74126,2622],{"class":87},[77,74128,74098],{"class":271},[77,74130,32965],{"class":87},[77,74132,74133,74135,74137],{"class":79,"line":1595},[77,74134,54875],{"class":87},[77,74136,54271],{"class":158},[77,74138,291],{"class":87},[77,74140,74141],{"class":79,"line":4088},[77,74142,73063],{"class":87},[77,74144,74145],{"class":79,"line":4093},[77,74146,74147],{"class":87},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[77,74149,74150],{"class":79,"line":4099},[77,74151,74152],{"class":87},"  类型是字符串的\n",[77,74154,74155],{"class":79,"line":4104},[77,74156,74157],{"class":87},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24468,74159,74161],{"id":74160},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[24,74163,74164],{},[40,74165],{"alt":72,"src":74166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[24,74168,74169],{},[40,74170],{"alt":72,"src":74171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[67,74173,74175],{"className":55525,"code":74174,"language":55527,"meta":72,"style":72},"  \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",[74,74176,74177,74185,74189,74193,74197,74201,74205,74210,74215,74220,74225,74230,74235,74240,74245],{"__ignoreMap":72},[77,74178,74179,74181,74183],{"class":79,"line":80},[77,74180,54602],{"class":87},[77,74182,54271],{"class":158},[77,74184,291],{"class":87},[77,74186,74187],{"class":79,"line":91},[77,74188,73962],{"class":87},[77,74190,74191],{"class":79,"line":107},[77,74192,73967],{"class":87},[77,74194,74195],{"class":79,"line":191},[77,74196,73972],{"class":87},[77,74198,74199],{"class":79,"line":1543},[77,74200,73977],{"class":87},[77,74202,74203],{"class":79,"line":1549},[77,74204,4662],{"class":87},[77,74206,74207],{"class":79,"line":1566},[77,74208,74209],{"class":87},"    \u002F\u002F 1.存储复杂数据类型\n",[77,74211,74212],{"class":79,"line":1572},[77,74213,74214],{"class":87},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[77,74216,74217],{"class":79,"line":1589},[77,74218,74219],{"class":87},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[77,74221,74222],{"class":79,"line":1595},[77,74223,74224],{"class":87},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[77,74226,74227],{"class":79,"line":4088},[77,74228,74229],{"class":87},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[77,74231,74232],{"class":79,"line":4093},[77,74233,74234],{"class":87},"    \u002F\u002F 取\n",[77,74236,74237],{"class":79,"line":4099},[77,74238,74239],{"class":87},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[77,74241,74242],{"class":79,"line":4104},[77,74243,74244],{"class":87},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[77,74246,74247,74249,74251],{"class":79,"line":4118},[77,74248,54875],{"class":87},[77,74250,54271],{"class":158},[77,74252,291],{"class":87},[24,74254,74255],{},[40,74256],{"alt":72,"src":74257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[19,74259,74261],{"id":74260},"_356-数组map方法","3.5.6 数组map方法",[24,74263,74264],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[24,74266,74267],{},[40,74268],{"alt":72,"src":74269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[24,74271,74272],{},[40,74273],{"alt":72,"src":74274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[24,74276,74277,74280],{},[27,74278,74279],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[24,74282,74283],{},"map有返回值，但是forEach没有返回值",[24,74285,74286],{},"map是个方法。用的时候要加 ()",[24,74288,74289],{},"map返回的是一个数组",[19,74291,74293],{"id":74292},"_357-数组中join方法","3.5.7 数组中join方法",[24,74295,74296],{},[40,74297],{"alt":72,"src":74298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[24,74300,74301],{},"类似于python中拼接字符串一样！",[139,74303,74304,74307,74310],{},[54,74305,74306],{},"小括号为空则逗号分开",[54,74308,74309],{},"小括号为空字符串 ''，则元素之间没有分隔符",[54,74311,74312],{},"小括号用啥符号就用进行分割",[19,74314,74316],{"id":74315},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[139,74318,74319,74322,74325,74328,74331],{},[54,74320,74321],{},"记住本地时间获取快速方式：new Date().toDateString()",[54,74323,74324],{},"尽量减少DOM操作，用好map+join的渲染方式",[54,74326,74327],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[54,74329,74330],{},"return可以实现函数的结束",[54,74332,74333],{},"禁止跳转是 preventDefault() 不要忘记",[67,74335,74337],{"className":53099,"code":74336,"language":53101,"meta":72,"style":72},"\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",[74,74338,74339,74349,74363,74367,74375,74389,74409,74421,74429,74435,74445,74455,74459,74463,74469,74479,74491,74495,74499,74506,74518,74532,74542,74546,74550,74557,74564,74571,74583,74595,74605,74617,74621,74625,74632,74639,74651,74663,74673,74685,74715,74719,74723,74730,74742,74754,74778,74788,74798,74802,74806,74814,74825,74837,74849,74861,74878,74890,74902,74906,74910,74917,74929,74941,74953,74964,74982,74995,75007,75031,75042,75046,75050,75058,75068,75072,75076,75082,75094,75105,75115,75119,75123,75129,75151,75155,75159,75165,75171,75183,75193,75205,75235,75248,75265,75269,75273,75284,75306,75316,75320,75324,75337,75347,75359,75371,75383,75395,75405,75415,75425,75436,75449,75453,75461,75469,75473,75481,75494,75514,75547,75580,75613,75639,75657,75675,75683,75709,75727,75745,75763,75781,75799,75807,75815,75833,75841,75870,75878,75886,75894,75907,75919,75931,75943,75955,75967,75980,75992,76000,76008,76016,76021,76026,76030,76034,76038,76042,76046,76050,76055,76060,76065,76070,76078,76086,76094,76099,76104,76109,76114,76119,76124,76129,76134,76139,76144,76149,76154,76159,76164,76168,76173,76178,76188,76197,76201,76206,76215,76231,76273,76313,76352,76417,76425,76429,76434,76452,76460,76465,76470,76499,76505,76510,76523,76535,76547,76559,76571,76583,76595,76599,76609,76613,76618,76623,76627,76636,76640,76645,76650,76669,76674,76694,76698,76703,76707,76712,76730,76748,76766,76785,76804,76823,76828,76834,76855,76861,76870,76876,76882,76888,76915,76928,76933,76943,76949,76955,76961,76967,76972,76978,76984,76990,76996,77029,77034,77039,77044,77049,77055,77061,77067,77078,77083,77089,77096,77110,77116,77140,77145,77150,77156,77162,77183,77189,77202,77208,77214,77220,77226,77231,77237,77243,77249,77267,77281,77287,77295,77301,77323,77328,77333,77338,77343,77348,77357,77366,77371],{"__ignoreMap":72},[77,74340,74341,74343,74345,74347],{"class":79,"line":80},[77,74342,53763],{"class":87},[77,74344,53766],{"class":158},[77,74346,53769],{"class":83},[77,74348,291],{"class":87},[77,74350,74351,74353,74355,74357,74359,74361],{"class":79,"line":91},[77,74352,260],{"class":87},[77,74354,53101],{"class":158},[77,74356,53780],{"class":83},[77,74358,268],{"class":87},[77,74360,53785],{"class":271},[77,74362,291],{"class":87},[77,74364,74365],{"class":79,"line":107},[77,74366,4875],{"emptyLinePlaceholder":2549},[77,74368,74369,74371,74373],{"class":79,"line":191},[77,74370,260],{"class":87},[77,74372,53798],{"class":158},[77,74374,291],{"class":87},[77,74376,74377,74379,74381,74383,74385,74387],{"class":79,"line":1543},[77,74378,54602],{"class":87},[77,74380,53808],{"class":158},[77,74382,53811],{"class":83},[77,74384,268],{"class":87},[77,74386,53816],{"class":271},[77,74388,291],{"class":87},[77,74390,74391,74393,74395,74397,74399,74401,74403,74405,74407],{"class":79,"line":1549},[77,74392,54602],{"class":87},[77,74394,53808],{"class":158},[77,74396,2495],{"class":83},[77,74398,268],{"class":87},[77,74400,53855],{"class":271},[77,74402,53835],{"class":83},[77,74404,268],{"class":87},[77,74406,53862],{"class":271},[77,74408,291],{"class":87},[77,74410,74411,74413,74415,74417,74419],{"class":79,"line":1566},[77,74412,54602],{"class":87},[77,74414,53871],{"class":158},[77,74416,53874],{"class":87},[77,74418,53871],{"class":158},[77,74420,291],{"class":87},[77,74422,74423,74425,74427],{"class":79,"line":1572},[77,74424,54602],{"class":87},[77,74426,2520],{"class":158},[77,74428,291],{"class":87},[77,74430,74431,74433],{"class":79,"line":1589},[77,74432,8878],{"class":158},[77,74434,88],{"class":87},[77,74436,74437,74439,74441,74443],{"class":79,"line":1595},[77,74438,57149],{"class":94},[77,74440,98],{"class":87},[77,74442,1939],{"class":94},[77,74444,104],{"class":87},[77,74446,74447,74449,74451,74453],{"class":79,"line":4088},[77,74448,57160],{"class":94},[77,74450,98],{"class":87},[77,74452,1939],{"class":94},[77,74454,104],{"class":87},[77,74456,74457],{"class":79,"line":4093},[77,74458,4662],{"class":87},[77,74460,74461],{"class":79,"line":4099},[77,74462,4875],{"emptyLinePlaceholder":2549},[77,74464,74465,74467],{"class":79,"line":4104},[77,74466,59727],{"class":158},[77,74468,88],{"class":87},[77,74470,74471,74473,74475,74477],{"class":79,"line":4118},[77,74472,59734],{"class":94},[77,74474,98],{"class":87},[77,74476,54052],{"class":94},[77,74478,104],{"class":87},[77,74480,74481,74483,74485,74487,74489],{"class":79,"line":4123},[77,74482,64521],{"class":94},[77,74484,98],{"class":87},[77,74486,3313],{"class":94},[77,74488,2124],{"class":2123},[77,74490,104],{"class":87},[77,74492,74493],{"class":79,"line":4129},[77,74494,4662],{"class":87},[77,74496,74497],{"class":79,"line":4150},[77,74498,4875],{"emptyLinePlaceholder":2549},[77,74500,74501,74504],{"class":79,"line":4155},[77,74502,74503],{"class":83},"    .info",[77,74505,88],{"class":87},[77,74507,74508,74510,74512,74514,74516],{"class":79,"line":4169},[77,74509,57223],{"class":94},[77,74511,98],{"class":87},[77,74513,53952],{"class":94},[77,74515,2124],{"class":2123},[77,74517,104],{"class":87},[77,74519,74520,74522,74524,74526,74528,74530],{"class":79,"line":4174},[77,74521,57160],{"class":94},[77,74523,98],{"class":87},[77,74525,3059],{"class":94},[77,74527,2124],{"class":2123},[77,74529,1942],{"class":94},[77,74531,104],{"class":87},[77,74533,74534,74536,74538,74540],{"class":79,"line":4203},[77,74535,59734],{"class":94},[77,74537,98],{"class":87},[77,74539,54052],{"class":94},[77,74541,104],{"class":87},[77,74543,74544],{"class":79,"line":4208},[77,74545,4662],{"class":87},[77,74547,74548],{"class":79,"line":4225},[77,74549,4875],{"emptyLinePlaceholder":2549},[77,74551,74552,74555],{"class":79,"line":4230},[77,74553,74554],{"class":83},"    .uname",[77,74556,33933],{"class":87},[77,74558,74559,74562],{"class":79,"line":4235},[77,74560,74561],{"class":83},"    .age",[77,74563,33933],{"class":87},[77,74565,74566,74569],{"class":79,"line":4240},[77,74567,74568],{"class":83},"    .salary",[77,74570,88],{"class":87},[77,74572,74573,74575,74577,74579,74581],{"class":79,"line":4254},[77,74574,57223],{"class":94},[77,74576,98],{"class":87},[77,74578,2925],{"class":94},[77,74580,2124],{"class":2123},[77,74582,104],{"class":87},[77,74584,74585,74587,74589,74591,74593],{"class":79,"line":4259},[77,74586,57237],{"class":94},[77,74588,98],{"class":87},[77,74590,3313],{"class":94},[77,74592,2124],{"class":2123},[77,74594,104],{"class":87},[77,74596,74597,74599,74601,74603],{"class":79,"line":5052},[77,74598,64225],{"class":94},[77,74600,98],{"class":87},[77,74602,186],{"class":94},[77,74604,104],{"class":87},[77,74606,74607,74609,74611,74613,74615],{"class":79,"line":5066},[77,74608,64195],{"class":94},[77,74610,98],{"class":87},[77,74612,3188],{"class":94},[77,74614,2124],{"class":2123},[77,74616,104],{"class":87},[77,74618,74619],{"class":79,"line":5074},[77,74620,4662],{"class":87},[77,74622,74623],{"class":79,"line":5079},[77,74624,4875],{"emptyLinePlaceholder":2549},[77,74626,74627,74630],{"class":79,"line":5085},[77,74628,74629],{"class":83},"    .gender",[77,74631,33933],{"class":87},[77,74633,74634,74637],{"class":79,"line":5091},[77,74635,74636],{"class":83},"    .city",[77,74638,88],{"class":87},[77,74640,74641,74643,74645,74647,74649],{"class":79,"line":5096},[77,74642,57223],{"class":94},[77,74644,98],{"class":87},[77,74646,2925],{"class":94},[77,74648,2124],{"class":2123},[77,74650,104],{"class":87},[77,74652,74653,74655,74657,74659,74661],{"class":79,"line":10422},[77,74654,57237],{"class":94},[77,74656,98],{"class":87},[77,74658,3438],{"class":94},[77,74660,2124],{"class":2123},[77,74662,104],{"class":87},[77,74664,74665,74667,74669,74671],{"class":79,"line":10446},[77,74666,64225],{"class":94},[77,74668,98],{"class":87},[77,74670,186],{"class":94},[77,74672,104],{"class":87},[77,74674,74675,74677,74679,74681,74683],{"class":79,"line":10451},[77,74676,64195],{"class":94},[77,74678,98],{"class":87},[77,74680,3188],{"class":94},[77,74682,2124],{"class":2123},[77,74684,104],{"class":87},[77,74686,74687,74689,74691,74693,74695,74697,74700,74702,74704,74706,74709,74711,74713],{"class":79,"line":10457},[77,74688,64421],{"class":94},[77,74690,98],{"class":87},[77,74692,2120],{"class":94},[77,74694,2124],{"class":2123},[77,74696,2127],{"class":94},[77,74698,74699],{"class":94}," rgb",[77,74701,2622],{"class":87},[77,74703,4198],{"class":94},[77,74705,680],{"class":87},[77,74707,74708],{"class":94},"197",[77,74710,680],{"class":87},[77,74712,74708],{"class":94},[77,74714,5194],{"class":87},[77,74716,74717],{"class":79,"line":10484},[77,74718,4662],{"class":87},[77,74720,74721],{"class":79,"line":10489},[77,74722,4875],{"emptyLinePlaceholder":2549},[77,74724,74725,74728],{"class":79,"line":10495},[77,74726,74727],{"class":158},"    button",[77,74729,88],{"class":87},[77,74731,74732,74734,74736,74738,74740],{"class":79,"line":10507},[77,74733,57237],{"class":94},[77,74735,98],{"class":87},[77,74737,3438],{"class":94},[77,74739,2124],{"class":2123},[77,74741,104],{"class":87},[77,74743,74744,74746,74748,74750,74752],{"class":79,"line":10519},[77,74745,57223],{"class":94},[77,74747,98],{"class":87},[77,74749,3097],{"class":94},[77,74751,2124],{"class":2123},[77,74753,104],{"class":87},[77,74755,74756,74758,74760,74763,74765,74767,74769,74772,74774,74776],{"class":79,"line":10531},[77,74757,57335],{"class":94},[77,74759,98],{"class":87},[77,74761,74762],{"class":94},"rgb",[77,74764,2622],{"class":87},[77,74766,3581],{"class":94},[77,74768,680],{"class":87},[77,74770,74771],{"class":94},"187",[77,74773,680],{"class":87},[77,74775,2913],{"class":94},[77,74777,5194],{"class":87},[77,74779,74780,74782,74784,74786],{"class":79,"line":12189},[77,74781,59864],{"class":94},[77,74783,98],{"class":87},[77,74785,63290],{"class":94},[77,74787,104],{"class":87},[77,74789,74790,74792,74794,74796],{"class":79,"line":12214},[77,74791,64421],{"class":94},[77,74793,98],{"class":87},[77,74795,1939],{"class":94},[77,74797,104],{"class":87},[77,74799,74800],{"class":79,"line":12237},[77,74801,4662],{"class":87},[77,74803,74804],{"class":79,"line":12261},[77,74805,4875],{"emptyLinePlaceholder":2549},[77,74807,74808,74810,74812],{"class":79,"line":12266},[77,74809,74727],{"class":158},[77,74811,54147],{"class":158},[77,74813,88],{"class":87},[77,74815,74816,74818,74820,74823],{"class":79,"line":12271},[77,74817,57459],{"class":94},[77,74819,98],{"class":87},[77,74821,74822],{"class":94},"inline-block",[77,74824,104],{"class":87},[77,74826,74827,74829,74831,74833,74835],{"class":79,"line":12276},[77,74828,57223],{"class":94},[77,74830,98],{"class":87},[77,74832,3059],{"class":94},[77,74834,2124],{"class":2123},[77,74836,104],{"class":87},[77,74838,74839,74841,74843,74845,74847],{"class":79,"line":12285},[77,74840,57237],{"class":94},[77,74842,98],{"class":87},[77,74844,3059],{"class":94},[77,74846,2124],{"class":2123},[77,74848,104],{"class":87},[77,74850,74851,74853,74855,74857,74859],{"class":79,"line":12290},[77,74852,59807],{"class":94},[77,74854,98],{"class":87},[77,74856,3085],{"class":94},[77,74858,2124],{"class":2123},[77,74860,104],{"class":87},[77,74862,74863,74865,74867,74869,74871,74873,74876],{"class":79,"line":12296},[77,74864,64421],{"class":94},[77,74866,98],{"class":87},[77,74868,2120],{"class":94},[77,74870,2124],{"class":2123},[77,74872,2127],{"class":94},[77,74874,74875],{"class":94}," #fff",[77,74877,104],{"class":87},[77,74879,74880,74882,74884,74886,74888],{"class":79,"line":12317},[77,74881,57584],{"class":94},[77,74883,98],{"class":87},[77,74885,2933],{"class":94},[77,74887,2124],{"class":2123},[77,74889,104],{"class":87},[77,74891,74892,74894,74896,74898,74900],{"class":79,"line":12323},[77,74893,64195],{"class":94},[77,74895,98],{"class":87},[77,74897,2120],{"class":94},[77,74899,2124],{"class":2123},[77,74901,104],{"class":87},[77,74903,74904],{"class":79,"line":12337},[77,74905,4662],{"class":87},[77,74907,74908],{"class":79,"line":12343},[77,74909,4875],{"emptyLinePlaceholder":2549},[77,74911,74912,74915],{"class":79,"line":12370},[77,74913,74914],{"class":83},"    .total",[77,74916,88],{"class":87},[77,74918,74919,74921,74923,74925,74927],{"class":79,"line":12379},[77,74920,57223],{"class":94},[77,74922,98],{"class":87},[77,74924,64075],{"class":94},[77,74926,2124],{"class":2123},[77,74928,104],{"class":87},[77,74930,74931,74933,74935,74937,74939],{"class":79,"line":12385},[77,74932,57237],{"class":94},[77,74934,98],{"class":87},[77,74936,3015],{"class":94},[77,74938,2124],{"class":2123},[77,74940,104],{"class":87},[77,74942,74943,74945,74947,74949,74951],{"class":79,"line":12393},[77,74944,59807],{"class":94},[77,74946,98],{"class":87},[77,74948,3015],{"class":94},[77,74950,2124],{"class":2123},[77,74952,104],{"class":87},[77,74954,74955,74957,74959,74962],{"class":79,"line":12398},[77,74956,59734],{"class":94},[77,74958,98],{"class":87},[77,74960,74961],{"class":94},"right",[77,74963,104],{"class":87},[77,74965,74966,74968,74970,74972,74974,74976,74978,74980],{"class":79,"line":19074},[77,74967,57160],{"class":94},[77,74969,98],{"class":87},[77,74971,3015],{"class":94},[77,74973,2124],{"class":2123},[77,74975,1942],{"class":94},[77,74977,4513],{"class":94},[77,74979,2124],{"class":2123},[77,74981,104],{"class":87},[77,74983,74984,74987,74989,74991,74993],{"class":79,"line":19080},[77,74985,74986],{"class":94},"      padding-right",[77,74988,98],{"class":87},[77,74990,3059],{"class":94},[77,74992,2124],{"class":2123},[77,74994,104],{"class":87},[77,74996,74997,74999,75001,75003,75005],{"class":79,"line":19103},[77,74998,57372],{"class":94},[77,75000,98],{"class":87},[77,75002,3136],{"class":94},[77,75004,2124],{"class":2123},[77,75006,104],{"class":87},[77,75008,75009,75011,75013,75015,75017,75020,75022,75025,75027,75029],{"class":79,"line":19109},[77,75010,57335],{"class":94},[77,75012,98],{"class":87},[77,75014,74762],{"class":94},[77,75016,2622],{"class":87},[77,75018,75019],{"class":94},"237",[77,75021,680],{"class":87},[77,75023,75024],{"class":94},"235",[77,75026,680],{"class":87},[77,75028,75024],{"class":94},[77,75030,5194],{"class":87},[77,75032,75033,75036,75038,75040],{"class":79,"line":19132},[77,75034,75035],{"class":94},"      box-sizing",[77,75037,98],{"class":87},[77,75039,62953],{"class":94},[77,75041,104],{"class":87},[77,75043,75044],{"class":79,"line":19146},[77,75045,4662],{"class":87},[77,75047,75048],{"class":79,"line":19166},[77,75049,4875],{"emptyLinePlaceholder":2549},[77,75051,75052,75054,75056],{"class":79,"line":19172},[77,75053,74914],{"class":83},[77,75055,54147],{"class":158},[77,75057,88],{"class":87},[77,75059,75060,75062,75064,75066],{"class":79,"line":19183},[77,75061,59864],{"class":94},[77,75063,98],{"class":87},[77,75065,59869],{"class":94},[77,75067,104],{"class":87},[77,75069,75070],{"class":79,"line":19206},[77,75071,4662],{"class":87},[77,75073,75074],{"class":79,"line":19228},[77,75075,4875],{"emptyLinePlaceholder":2549},[77,75077,75078,75080],{"class":79,"line":19233},[77,75079,67466],{"class":158},[77,75081,88],{"class":87},[77,75083,75084,75086,75088,75090,75092],{"class":79,"line":19239},[77,75085,57223],{"class":94},[77,75087,98],{"class":87},[77,75089,64075],{"class":94},[77,75091,2124],{"class":2123},[77,75093,104],{"class":87},[77,75095,75096,75098,75100,75103],{"class":79,"line":19253},[77,75097,57160],{"class":94},[77,75099,98],{"class":87},[77,75101,75102],{"class":94},"auto",[77,75104,104],{"class":87},[77,75106,75107,75109,75111,75113],{"class":79,"line":19266},[77,75108,67473],{"class":94},[77,75110,98],{"class":87},[77,75112,67478],{"class":94},[77,75114,104],{"class":87},[77,75116,75117],{"class":79,"line":19271},[77,75118,4662],{"class":87},[77,75120,75121],{"class":79,"line":19285},[77,75122,4875],{"emptyLinePlaceholder":2549},[77,75124,75125,75127],{"class":79,"line":19290},[77,75126,67558],{"class":158},[77,75128,88],{"class":87},[77,75130,75131,75133,75135,75137,75139,75141,75143,75145,75147,75149],{"class":79,"line":19296},[77,75132,57335],{"class":94},[77,75134,98],{"class":87},[77,75136,74762],{"class":94},[77,75138,2622],{"class":87},[77,75140,75019],{"class":94},[77,75142,680],{"class":87},[77,75144,75024],{"class":94},[77,75146,680],{"class":87},[77,75148,75024],{"class":94},[77,75150,5194],{"class":87},[77,75152,75153],{"class":79,"line":19301},[77,75154,4662],{"class":87},[77,75156,75157],{"class":79,"line":19315},[77,75158,4875],{"emptyLinePlaceholder":2549},[77,75160,75161,75163],{"class":79,"line":19320},[77,75162,67558],{"class":158},[77,75164,33933],{"class":87},[77,75166,75167,75169],{"class":79,"line":19325},[77,75168,67624],{"class":158},[77,75170,88],{"class":87},[77,75172,75173,75175,75177,75179,75181],{"class":79,"line":19339},[77,75174,57237],{"class":94},[77,75176,98],{"class":87},[77,75178,2887],{"class":94},[77,75180,2124],{"class":2123},[77,75182,104],{"class":87},[77,75184,75185,75187,75189,75191],{"class":79,"line":19351},[77,75186,59734],{"class":94},[77,75188,98],{"class":87},[77,75190,101],{"class":94},[77,75192,104],{"class":87},[77,75194,75195,75197,75199,75201,75203],{"class":79,"line":19356},[77,75196,57372],{"class":94},[77,75198,98],{"class":87},[77,75200,3162],{"class":94},[77,75202,2124],{"class":2123},[77,75204,104],{"class":87},[77,75206,75207,75209,75211,75213,75215,75217,75219,75221,75224,75226,75229,75231,75233],{"class":79,"line":19369},[77,75208,64421],{"class":94},[77,75210,98],{"class":87},[77,75212,2120],{"class":94},[77,75214,2124],{"class":2123},[77,75216,2127],{"class":94},[77,75218,74699],{"class":94},[77,75220,2622],{"class":87},[77,75222,75223],{"class":94},"228",[77,75225,680],{"class":87},[77,75227,75228],{"class":94},"225",[77,75230,680],{"class":87},[77,75232,75228],{"class":94},[77,75234,5194],{"class":87},[77,75236,75237,75240,75242,75244,75246],{"class":79,"line":19374},[77,75238,75239],{"class":94},"      padding-left",[77,75241,98],{"class":87},[77,75243,2933],{"class":94},[77,75245,2124],{"class":2123},[77,75247,104],{"class":87},[77,75249,75250,75252,75254,75256,75259,75261,75263],{"class":79,"line":19379},[77,75251,64305],{"class":94},[77,75253,98],{"class":87},[77,75255,30589],{"class":94},[77,75257,75258],{"class":94}," linear",[77,75260,64312],{"class":94},[77,75262,3308],{"class":2123},[77,75264,104],{"class":87},[77,75266,75267],{"class":79,"line":19384},[77,75268,4662],{"class":87},[77,75270,75271],{"class":79,"line":19397},[77,75272,4875],{"emptyLinePlaceholder":2549},[77,75274,75275,75278,75280,75282],{"class":79,"line":19402},[77,75276,75277],{"class":158},"    tbody",[77,75279,72587],{"class":158},[77,75281,63387],{"class":83},[77,75283,88],{"class":87},[77,75285,75286,75288,75290,75292,75294,75296,75298,75300,75302,75304],{"class":79,"line":35100},[77,75287,57335],{"class":94},[77,75289,98],{"class":87},[77,75291,74762],{"class":94},[77,75293,2622],{"class":87},[77,75295,75019],{"class":94},[77,75297,680],{"class":87},[77,75299,75024],{"class":94},[77,75301,680],{"class":87},[77,75303,75024],{"class":94},[77,75305,5194],{"class":87},[77,75307,75308,75310,75312,75314],{"class":79,"line":35106},[77,75309,64469],{"class":94},[77,75311,98],{"class":87},[77,75313,64474],{"class":94},[77,75315,104],{"class":87},[77,75317,75318],{"class":79,"line":35112},[77,75319,4662],{"class":87},[77,75321,75322],{"class":79,"line":35118},[77,75323,4875],{"emptyLinePlaceholder":2549},[77,75325,75326,75328,75330,75333,75335],{"class":79,"line":35124},[77,75327,75277],{"class":158},[77,75329,72587],{"class":158},[77,75331,75332],{"class":158}," td",[77,75334,3876],{"class":158},[77,75336,88],{"class":87},[77,75338,75339,75341,75343,75345],{"class":79,"line":35135},[77,75340,57459],{"class":94},[77,75342,98],{"class":87},[77,75344,456],{"class":94},[77,75346,104],{"class":87},[77,75348,75349,75351,75353,75355,75357],{"class":79,"line":35141},[77,75350,57223],{"class":94},[77,75352,98],{"class":87},[77,75354,3520],{"class":94},[77,75356,2124],{"class":2123},[77,75358,104],{"class":87},[77,75360,75361,75363,75365,75367,75369],{"class":79,"line":35161},[77,75362,57237],{"class":94},[77,75364,98],{"class":87},[77,75366,3438],{"class":94},[77,75368,2124],{"class":2123},[77,75370,104],{"class":87},[77,75372,75373,75375,75377,75379,75381],{"class":79,"line":35167},[77,75374,59807],{"class":94},[77,75376,98],{"class":87},[77,75378,3438],{"class":94},[77,75380,2124],{"class":2123},[77,75382,104],{"class":87},[77,75384,75385,75387,75389,75391,75393],{"class":79,"line":35178},[77,75386,64521],{"class":94},[77,75388,98],{"class":87},[77,75390,2696],{"class":94},[77,75392,2124],{"class":2123},[77,75394,104],{"class":87},[77,75396,75397,75399,75401,75403],{"class":79,"line":35184},[77,75398,59864],{"class":94},[77,75400,98],{"class":87},[77,75402,63290],{"class":94},[77,75404,104],{"class":87},[77,75406,75407,75409,75411,75413],{"class":79,"line":35190},[77,75408,59734],{"class":94},[77,75410,98],{"class":87},[77,75412,54052],{"class":94},[77,75414,104],{"class":87},[77,75416,75417,75419,75421,75423],{"class":79,"line":35196},[77,75418,66413],{"class":94},[77,75420,98],{"class":87},[77,75422,186],{"class":94},[77,75424,104],{"class":87},[77,75426,75427,75429,75431,75434],{"class":79,"line":35202},[77,75428,57335],{"class":94},[77,75430,98],{"class":87},[77,75432,75433],{"class":94},"orange",[77,75435,104],{"class":87},[77,75437,75438,75440,75442,75445,75447],{"class":79,"line":35208},[77,75439,57584],{"class":94},[77,75441,98],{"class":87},[77,75443,75444],{"class":94},"12.5",[77,75446,2124],{"class":2123},[77,75448,104],{"class":87},[77,75450,75451],{"class":79,"line":35214},[77,75452,4662],{"class":87},[77,75454,75455,75457,75459],{"class":79,"line":35220},[77,75456,54875],{"class":87},[77,75458,2520],{"class":158},[77,75460,291],{"class":87},[77,75462,75463,75465,75467],{"class":79,"line":35240},[77,75464,351],{"class":87},[77,75466,53798],{"class":158},[77,75468,291],{"class":87},[77,75470,75471],{"class":79,"line":35246},[77,75472,4875],{"emptyLinePlaceholder":2549},[77,75474,75475,75477,75479],{"class":79,"line":35262},[77,75476,260],{"class":87},[77,75478,54258],{"class":158},[77,75480,291],{"class":87},[77,75482,75483,75485,75487,75490,75492],{"class":79,"line":35268},[77,75484,54602],{"class":87},[77,75486,14],{"class":158},[77,75488,75489],{"class":87},">学生就业统计表\u003C\u002F",[77,75491,14],{"class":158},[77,75493,291],{"class":87},[77,75495,75496,75498,75500,75502,75504,75506,75508,75510,75512],{"class":79,"line":35282},[77,75497,54602],{"class":87},[77,75499,69068],{"class":158},[77,75501,334],{"class":83},[77,75503,268],{"class":87},[77,75505,65108],{"class":271},[77,75507,71513],{"class":83},[77,75509,268],{"class":87},[77,75511,34243],{"class":271},[77,75513,291],{"class":87},[77,75515,75516,75518,75520,75522,75524,75526,75528,75530,75532,75534,75536,75539,75541,75543,75545],{"class":79,"line":35288},[77,75517,53805],{"class":87},[77,75519,159],{"class":158},[77,75521,2487],{"class":83},[77,75523,268],{"class":87},[77,75525,2492],{"class":271},[77,75527,2495],{"class":83},[77,75529,268],{"class":87},[77,75531,71539],{"class":271},[77,75533,2503],{"class":83},[77,75535,268],{"class":87},[77,75537,75538],{"class":271},"\"姓名\"",[77,75540,334],{"class":83},[77,75542,268],{"class":87},[77,75544,71539],{"class":271},[77,75546,291],{"class":87},[77,75548,75549,75551,75553,75555,75557,75559,75561,75563,75565,75567,75569,75572,75574,75576,75578],{"class":79,"line":35303},[77,75550,53805],{"class":87},[77,75552,159],{"class":158},[77,75554,2487],{"class":83},[77,75556,268],{"class":87},[77,75558,2492],{"class":271},[77,75560,2495],{"class":83},[77,75562,268],{"class":87},[77,75564,71567],{"class":271},[77,75566,2503],{"class":83},[77,75568,268],{"class":87},[77,75570,75571],{"class":271},"\"年龄\"",[77,75573,334],{"class":83},[77,75575,268],{"class":87},[77,75577,71567],{"class":271},[77,75579,291],{"class":87},[77,75581,75582,75584,75586,75588,75590,75592,75594,75596,75598,75600,75602,75605,75607,75609,75611],{"class":79,"line":35309},[77,75583,53805],{"class":87},[77,75585,159],{"class":158},[77,75587,2487],{"class":83},[77,75589,268],{"class":87},[77,75591,2492],{"class":271},[77,75593,2495],{"class":83},[77,75595,268],{"class":87},[77,75597,71669],{"class":271},[77,75599,2503],{"class":83},[77,75601,268],{"class":87},[77,75603,75604],{"class":271},"\"薪资\"",[77,75606,334],{"class":83},[77,75608,268],{"class":87},[77,75610,71669],{"class":271},[77,75612,291],{"class":87},[77,75614,75615,75617,75619,75621,75623,75625,75627,75629,75631,75633,75635,75637],{"class":79,"line":35318},[77,75616,53805],{"class":87},[77,75618,71587],{"class":158},[77,75620,2495],{"class":83},[77,75622,268],{"class":87},[77,75624,71594],{"class":271},[77,75626,17430],{"class":83},[77,75628,268],{"class":87},[77,75630,444],{"class":271},[77,75632,334],{"class":83},[77,75634,268],{"class":87},[77,75636,71594],{"class":271},[77,75638,291],{"class":87},[77,75640,75641,75643,75645,75647,75649,75651,75653,75655],{"class":79,"line":35324},[77,75642,57684],{"class":87},[77,75644,71609],{"class":158},[77,75646,69094],{"class":83},[77,75648,268],{"class":87},[77,75650,12434],{"class":271},[77,75652,71618],{"class":87},[77,75654,71609],{"class":158},[77,75656,291],{"class":87},[77,75658,75659,75661,75663,75665,75667,75669,75671,75673],{"class":79,"line":35333},[77,75660,57684],{"class":87},[77,75662,71609],{"class":158},[77,75664,69094],{"class":83},[77,75666,268],{"class":87},[77,75668,12503],{"class":271},[77,75670,71637],{"class":87},[77,75672,71609],{"class":158},[77,75674,291],{"class":87},[77,75676,75677,75679,75681],{"class":79,"line":35339},[77,75678,54235],{"class":87},[77,75680,71587],{"class":158},[77,75682,291],{"class":87},[77,75684,75685,75687,75689,75691,75693,75695,75697,75699,75701,75703,75705,75707],{"class":79,"line":35345},[77,75686,53805],{"class":87},[77,75688,71587],{"class":158},[77,75690,2495],{"class":83},[77,75692,268],{"class":87},[77,75694,71691],{"class":271},[77,75696,17430],{"class":83},[77,75698,268],{"class":87},[77,75700,444],{"class":271},[77,75702,334],{"class":83},[77,75704,268],{"class":87},[77,75706,71691],{"class":271},[77,75708,291],{"class":87},[77,75710,75711,75713,75715,75717,75719,75721,75723,75725],{"class":79,"line":35354},[77,75712,57684],{"class":87},[77,75714,71609],{"class":158},[77,75716,69094],{"class":83},[77,75718,268],{"class":87},[77,75720,71712],{"class":271},[77,75722,71715],{"class":87},[77,75724,71609],{"class":158},[77,75726,291],{"class":87},[77,75728,75729,75731,75733,75735,75737,75739,75741,75743],{"class":79,"line":35360},[77,75730,57684],{"class":87},[77,75732,71609],{"class":158},[77,75734,69094],{"class":83},[77,75736,268],{"class":87},[77,75738,71732],{"class":271},[77,75740,71735],{"class":87},[77,75742,71609],{"class":158},[77,75744,291],{"class":87},[77,75746,75747,75749,75751,75753,75755,75757,75759,75761],{"class":79,"line":35371},[77,75748,57684],{"class":87},[77,75750,71609],{"class":158},[77,75752,69094],{"class":83},[77,75754,268],{"class":87},[77,75756,71752],{"class":271},[77,75758,71755],{"class":87},[77,75760,71609],{"class":158},[77,75762,291],{"class":87},[77,75764,75765,75767,75769,75771,75773,75775,75777,75779],{"class":79,"line":35377},[77,75766,57684],{"class":87},[77,75768,71609],{"class":158},[77,75770,69094],{"class":83},[77,75772,268],{"class":87},[77,75774,71772],{"class":271},[77,75776,71775],{"class":87},[77,75778,71609],{"class":158},[77,75780,291],{"class":87},[77,75782,75783,75785,75787,75789,75791,75793,75795,75797],{"class":79,"line":35396},[77,75784,57684],{"class":87},[77,75786,71609],{"class":158},[77,75788,69094],{"class":83},[77,75790,268],{"class":87},[77,75792,71792],{"class":271},[77,75794,71795],{"class":87},[77,75796,71609],{"class":158},[77,75798,291],{"class":87},[77,75800,75801,75803,75805],{"class":79,"line":35402},[77,75802,54235],{"class":87},[77,75804,71587],{"class":158},[77,75806,291],{"class":87},[77,75808,75809,75811,75813],{"class":79,"line":35413},[77,75810,53805],{"class":87},[77,75812,56341],{"class":158},[77,75814,291],{"class":87},[77,75816,75817,75819,75821,75824,75826,75829,75831],{"class":79,"line":35419},[77,75818,57684],{"class":87},[77,75820,77],{"class":158},[77,75822,75823],{"class":87},">+\u003C\u002F",[77,75825,77],{"class":158},[77,75827,75828],{"class":87},">添加\u003C\u002F",[77,75830,56341],{"class":158},[77,75832,291],{"class":87},[77,75834,75835,75837,75839],{"class":79,"line":35439},[77,75836,54875],{"class":87},[77,75838,69068],{"class":158},[77,75840,291],{"class":87},[77,75842,75843,75845,75847,75849,75851,75853,75856,75858,75861,75863,75866,75868],{"class":79,"line":35455},[77,75844,54602],{"class":87},[77,75846,331],{"class":158},[77,75848,334],{"class":83},[77,75850,268],{"class":87},[77,75852,65024],{"class":271},[77,75854,75855],{"class":87},">共有数据 \u003C",[77,75857,77],{"class":158},[77,75859,75860],{"class":87},">0\u003C\u002F",[77,75862,77],{"class":158},[77,75864,75865],{"class":87},"> 条\u003C\u002F",[77,75867,331],{"class":158},[77,75869,291],{"class":87},[77,75871,75872,75874,75876],{"class":79,"line":35461},[77,75873,54602],{"class":87},[77,75875,2755],{"class":158},[77,75877,291],{"class":87},[77,75879,75880,75882,75884],{"class":79,"line":35475},[77,75881,53805],{"class":87},[77,75883,2758],{"class":158},[77,75885,291],{"class":87},[77,75887,75888,75890,75892],{"class":79,"line":35481},[77,75889,57684],{"class":87},[77,75891,2761],{"class":158},[77,75893,291],{"class":87},[77,75895,75896,75898,75900,75903,75905],{"class":79,"line":35487},[77,75897,57750],{"class":87},[77,75899,2764],{"class":158},[77,75901,75902],{"class":87},">ID\u003C\u002F",[77,75904,2764],{"class":158},[77,75906,291],{"class":87},[77,75908,75909,75911,75913,75915,75917],{"class":79,"line":35498},[77,75910,57750],{"class":87},[77,75912,2764],{"class":158},[77,75914,71898],{"class":87},[77,75916,2764],{"class":158},[77,75918,291],{"class":87},[77,75920,75921,75923,75925,75927,75929],{"class":79,"line":35504},[77,75922,57750],{"class":87},[77,75924,2764],{"class":158},[77,75926,71911],{"class":87},[77,75928,2764],{"class":158},[77,75930,291],{"class":87},[77,75932,75933,75935,75937,75939,75941],{"class":79,"line":35510},[77,75934,57750],{"class":87},[77,75936,2764],{"class":158},[77,75938,71924],{"class":87},[77,75940,2764],{"class":158},[77,75942,291],{"class":87},[77,75944,75945,75947,75949,75951,75953],{"class":79,"line":35520},[77,75946,57750],{"class":87},[77,75948,2764],{"class":158},[77,75950,71937],{"class":87},[77,75952,2764],{"class":158},[77,75954,291],{"class":87},[77,75956,75957,75959,75961,75963,75965],{"class":79,"line":35526},[77,75958,57750],{"class":87},[77,75960,2764],{"class":158},[77,75962,71950],{"class":87},[77,75964,2764],{"class":158},[77,75966,291],{"class":87},[77,75968,75969,75971,75973,75976,75978],{"class":79,"line":35537},[77,75970,57750],{"class":87},[77,75972,2764],{"class":158},[77,75974,75975],{"class":87},">录入时间\u003C\u002F",[77,75977,2764],{"class":158},[77,75979,291],{"class":87},[77,75981,75982,75984,75986,75988,75990],{"class":79,"line":35543},[77,75983,57750],{"class":87},[77,75985,2764],{"class":158},[77,75987,71963],{"class":87},[77,75989,2764],{"class":158},[77,75991,291],{"class":87},[77,75993,75994,75996,75998],{"class":79,"line":35553},[77,75995,57855],{"class":87},[77,75997,2761],{"class":158},[77,75999,291],{"class":87},[77,76001,76002,76004,76006],{"class":79,"line":35558},[77,76003,54235],{"class":87},[77,76005,2758],{"class":158},[77,76007,291],{"class":87},[77,76009,76010,76012,76014],{"class":79,"line":35564},[77,76011,53805],{"class":87},[77,76013,2801],{"class":158},[77,76015,291],{"class":87},[77,76017,76018],{"class":79,"line":35613},[77,76019,76020],{"class":323},"      \u003C!-- \u003Ctr>\n",[77,76022,76023],{"class":79,"line":35660},[77,76024,76025],{"class":323},"        \u003Ctd>1\u003C\u002Ftd>\n",[77,76027,76028],{"class":79,"line":35665},[77,76029,76025],{"class":323},[77,76031,76032],{"class":79,"line":35671},[77,76033,76025],{"class":323},[77,76035,76036],{"class":79,"line":35690},[77,76037,76025],{"class":323},[77,76039,76040],{"class":79,"line":35696},[77,76041,76025],{"class":323},[77,76043,76044],{"class":79,"line":35716},[77,76045,76025],{"class":323},[77,76047,76048],{"class":79,"line":35722},[77,76049,76025],{"class":323},[77,76051,76052],{"class":79,"line":35728},[77,76053,76054],{"class":323},"        \u003Ctd>\n",[77,76056,76057],{"class":79,"line":35738},[77,76058,76059],{"class":323},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[77,76061,76062],{"class":79,"line":35743},[77,76063,76064],{"class":323},"        \u003C\u002Ftd>\n",[77,76066,76067],{"class":79,"line":35749},[77,76068,76069],{"class":323},"      \u003C\u002Ftr> -->\n",[77,76071,76072,76074,76076],{"class":79,"line":35765},[77,76073,54235],{"class":87},[77,76075,2801],{"class":158},[77,76077,291],{"class":87},[77,76079,76080,76082,76084],{"class":79,"line":35810},[77,76081,54875],{"class":87},[77,76083,2755],{"class":158},[77,76085,291],{"class":87},[77,76087,76088,76090,76092],{"class":79,"line":35816},[77,76089,54602],{"class":87},[77,76091,54271],{"class":158},[77,76093,291],{"class":87},[77,76095,76096],{"class":79,"line":35822},[77,76097,76098],{"class":323},"    \u002F\u002F const initData = [{\n",[77,76100,76101],{"class":79,"line":35828},[77,76102,76103],{"class":323},"    \u002F\u002F   unameId: 1,\n",[77,76105,76106],{"class":79,"line":35839},[77,76107,76108],{"class":323},"    \u002F\u002F   uname: '华晨宇',\n",[77,76110,76111],{"class":79,"line":35845},[77,76112,76113],{"class":323},"    \u002F\u002F   age: 22,\n",[77,76115,76116],{"class":79,"line":35851},[77,76117,76118],{"class":323},"    \u002F\u002F   salary: 12000,\n",[77,76120,76121],{"class":79,"line":35857},[77,76122,76123],{"class":323},"    \u002F\u002F   gender: '男',\n",[77,76125,76126],{"class":79,"line":35875},[77,76127,76128],{"class":323},"    \u002F\u002F   city: '北京',\n",[77,76130,76131],{"class":79,"line":35889},[77,76132,76133],{"class":323},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[77,76135,76136],{"class":79,"line":35898},[77,76137,76138],{"class":323},"    \u002F\u002F }]\n",[77,76140,76141],{"class":79,"line":35907},[77,76142,76143],{"class":323},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[77,76145,76146],{"class":79,"line":35916},[77,76147,76148],{"class":323},"    \u002F\u002F 1.渲染业务\n",[77,76150,76151],{"class":79,"line":35925},[77,76152,76153],{"class":323},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[77,76155,76156],{"class":79,"line":35931},[77,76157,76158],{"class":323},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[77,76160,76161],{"class":79,"line":35937},[77,76162,76163],{"class":323},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[77,76165,76166],{"class":79,"line":35945},[77,76167,4875],{"emptyLinePlaceholder":2549},[77,76169,76170],{"class":79,"line":35950},[77,76171,76172],{"class":323},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[77,76174,76175],{"class":79,"line":35956},[77,76176,76177],{"class":323},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[77,76179,76180,76182,76184,76186],{"class":79,"line":35967},[77,76181,13694],{"class":2123},[77,76183,60143],{"class":94},[77,76185,16036],{"class":2123},[77,76187,54296],{"class":87},[77,76189,76190,76193,76195],{"class":79,"line":35973},[77,76191,76192],{"class":87},"    console.",[77,76194,60695],{"class":83},[77,76196,54870],{"class":87},[77,76198,76199],{"class":79,"line":35993},[77,76200,4875],{"emptyLinePlaceholder":2549},[77,76202,76203],{"class":79,"line":35999},[77,76204,76205],{"class":323},"    \u002F\u002F 时间函数\n",[77,76207,76208,76210,76213],{"class":79,"line":36005},[77,76209,72527],{"class":2123},[77,76211,76212],{"class":83}," getTime",[77,76214,13326],{"class":87},[77,76216,76217,76219,76222,76224,76226,76229],{"class":79,"line":36011},[77,76218,60676],{"class":2123},[77,76220,76221],{"class":94}," date",[77,76223,16036],{"class":2123},[77,76225,14051],{"class":2123},[77,76227,76228],{"class":83}," Date",[77,76230,4451],{"class":87},[77,76232,76233,76235,76237,76239,76242,76245,76247,76249,76251,76254,76257,76259,76261,76263,76265,76267,76269,76271],{"class":79,"line":36028},[77,76234,60676],{"class":2123},[77,76236,18561],{"class":94},[77,76238,16036],{"class":2123},[77,76240,76241],{"class":87}," date.",[77,76243,76244],{"class":83},"getHours",[77,76246,15522],{"class":87},[77,76248,260],{"class":2123},[77,76250,4513],{"class":94},[77,76252,76253],{"class":2123}," ?",[77,76255,76256],{"class":271}," '0'",[77,76258,48032],{"class":2123},[77,76260,76241],{"class":87},[77,76262,76244],{"class":83},[77,76264,15522],{"class":87},[77,76266,3472],{"class":2123},[77,76268,76241],{"class":87},[77,76270,76244],{"class":83},[77,76272,4451],{"class":87},[77,76274,76275,76277,76280,76282,76284,76287,76289,76291,76293,76295,76297,76299,76301,76303,76305,76307,76309,76311],{"class":79,"line":36034},[77,76276,60676],{"class":2123},[77,76278,76279],{"class":94}," m",[77,76281,16036],{"class":2123},[77,76283,76241],{"class":87},[77,76285,76286],{"class":83},"getMinutes",[77,76288,15522],{"class":87},[77,76290,260],{"class":2123},[77,76292,4513],{"class":94},[77,76294,76253],{"class":2123},[77,76296,76256],{"class":271},[77,76298,48032],{"class":2123},[77,76300,76241],{"class":87},[77,76302,76286],{"class":83},[77,76304,15522],{"class":87},[77,76306,3472],{"class":2123},[77,76308,76241],{"class":87},[77,76310,76286],{"class":83},[77,76312,4451],{"class":87},[77,76314,76315,76317,76319,76321,76323,76326,76328,76330,76332,76334,76336,76338,76340,76342,76344,76346,76348,76350],{"class":79,"line":36040},[77,76316,60676],{"class":2123},[77,76318,10902],{"class":94},[77,76320,16036],{"class":2123},[77,76322,76241],{"class":87},[77,76324,76325],{"class":83},"getSeconds",[77,76327,15522],{"class":87},[77,76329,260],{"class":2123},[77,76331,4513],{"class":94},[77,76333,76253],{"class":2123},[77,76335,76256],{"class":271},[77,76337,48032],{"class":2123},[77,76339,76241],{"class":87},[77,76341,76325],{"class":83},[77,76343,15522],{"class":87},[77,76345,3472],{"class":2123},[77,76347,76241],{"class":87},[77,76349,76325],{"class":83},[77,76351,4451],{"class":87},[77,76353,76354,76356,76359,76361,76363,76366,76368,76371,76373,76376,76378,76380,76383,76385,76387,76389,76391,76393,76395,76398,76400,76403,76405,76408,76410,76412,76414],{"class":79,"line":36046},[77,76355,60676],{"class":2123},[77,76357,76358],{"class":94}," str",[77,76360,16036],{"class":2123},[77,76362,65346],{"class":271},[77,76364,76365],{"class":87},"date",[77,76367,3171],{"class":271},[77,76369,76370],{"class":83},"getFullYear",[77,76372,4902],{"class":271},[77,76374,76375],{"class":271},"}\u002F${",[77,76377,76365],{"class":87},[77,76379,3171],{"class":271},[77,76381,76382],{"class":83},"getMonth",[77,76384,15522],{"class":271},[77,76386,3094],{"class":2123},[77,76388,27586],{"class":94},[77,76390,76375],{"class":271},[77,76392,76365],{"class":87},[77,76394,3171],{"class":271},[77,76396,76397],{"class":83},"getDate",[77,76399,4902],{"class":271},[77,76401,76402],{"class":271},"} ${",[77,76404,3029],{"class":87},[77,76406,76407],{"class":271},"}:${",[77,76409,3157],{"class":87},[77,76411,76407],{"class":271},[77,76413,3308],{"class":87},[77,76415,76416],{"class":271},"}`\n",[77,76418,76419,76422],{"class":79,"line":36052},[77,76420,76421],{"class":2123},"      return",[77,76423,76424],{"class":87}," str\n",[77,76426,76427],{"class":79,"line":36058},[77,76428,4662],{"class":87},[77,76430,76431],{"class":79,"line":36084},[77,76432,76433],{"class":323},"    \u002F\u002F 渲染函数\n",[77,76435,76436,76438,76440,76442,76444,76446,76448,76450],{"class":79,"line":36108},[77,76437,13694],{"class":2123},[77,76439,72190],{"class":94},[77,76441,16036],{"class":2123},[77,76443,56850],{"class":87},[77,76445,56853],{"class":83},[77,76447,2622],{"class":87},[77,76449,72201],{"class":271},[77,76451,2628],{"class":87},[77,76453,76454,76456,76458],{"class":79,"line":36114},[77,76455,72527],{"class":2123},[77,76457,72530],{"class":83},[77,76459,13326],{"class":87},[77,76461,76462],{"class":79,"line":36120},[77,76463,76464],{"class":323},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[77,76466,76467],{"class":79,"line":36126},[77,76468,76469],{"class":323},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[77,76471,76472,76474,76477,76479,76481,76484,76486,76488,76490,76493,76495,76497],{"class":79,"line":36137},[77,76473,60676],{"class":2123},[77,76475,76476],{"class":94}," trArr",[77,76478,16036],{"class":2123},[77,76480,54423],{"class":87},[77,76482,76483],{"class":83},"map",[77,76485,2622],{"class":87},[77,76487,56903],{"class":2123},[77,76489,4134],{"class":87},[77,76491,76492],{"class":7691},"ele",[77,76494,680],{"class":87},[77,76496,33],{"class":7691},[77,76498,14914],{"class":87},[77,76500,76501,76503],{"class":79,"line":36148},[77,76502,17224],{"class":2123},[77,76504,72611],{"class":271},[77,76506,76507],{"class":79,"line":36154},[77,76508,76509],{"class":271},"      \u003Ctr>\n",[77,76511,76512,76514,76516,76518,76521],{"class":79,"line":36171},[77,76513,72616],{"class":271},[77,76515,76492],{"class":87},[77,76517,3171],{"class":271},[77,76519,76520],{"class":87},"unameId",[77,76522,72631],{"class":271},[77,76524,76525,76527,76529,76531,76533],{"class":79,"line":36194},[77,76526,72616],{"class":271},[77,76528,76492],{"class":87},[77,76530,3171],{"class":271},[77,76532,72647],{"class":87},[77,76534,72631],{"class":271},[77,76536,76537,76539,76541,76543,76545],{"class":79,"line":36217},[77,76538,72616],{"class":271},[77,76540,76492],{"class":87},[77,76542,3171],{"class":271},[77,76544,72664],{"class":87},[77,76546,72631],{"class":271},[77,76548,76549,76551,76553,76555,76557],{"class":79,"line":36223},[77,76550,72616],{"class":271},[77,76552,76492],{"class":87},[77,76554,3171],{"class":271},[77,76556,72681],{"class":87},[77,76558,72631],{"class":271},[77,76560,76561,76563,76565,76567,76569],{"class":79,"line":36228},[77,76562,72616],{"class":271},[77,76564,76492],{"class":87},[77,76566,3171],{"class":271},[77,76568,72698],{"class":87},[77,76570,72631],{"class":271},[77,76572,76573,76575,76577,76579,76581],{"class":79,"line":36237},[77,76574,72616],{"class":271},[77,76576,76492],{"class":87},[77,76578,3171],{"class":271},[77,76580,72715],{"class":87},[77,76582,72631],{"class":271},[77,76584,76585,76587,76589,76591,76593],{"class":79,"line":36247},[77,76586,72616],{"class":271},[77,76588,76492],{"class":87},[77,76590,3171],{"class":271},[77,76592,4862],{"class":87},[77,76594,72631],{"class":271},[77,76596,76597],{"class":79,"line":36253},[77,76598,76054],{"class":271},[77,76600,76601,76604,76606],{"class":79,"line":36258},[77,76602,76603],{"class":271},"          \u003Ca href=\"#\" data-id=\"${",[77,76605,33],{"class":87},[77,76607,76608],{"class":271},"}\">删除\u003C\u002Fa>\n",[77,76610,76611],{"class":79,"line":36264},[77,76612,76064],{"class":271},[77,76614,76615],{"class":79,"line":36277},[77,76616,76617],{"class":271},"      \u003C\u002Ftr>\n",[77,76619,76620],{"class":79,"line":36283},[77,76621,76622],{"class":271},"  `\n",[77,76624,76625],{"class":79,"line":36294},[77,76626,67258],{"class":87},[77,76628,76629,76631,76633],{"class":79,"line":36305},[77,76630,60692],{"class":87},[77,76632,60695],{"class":83},[77,76634,76635],{"class":87},"(trArr)\n",[77,76637,76638],{"class":79,"line":36324},[77,76639,4875],{"emptyLinePlaceholder":2549},[77,76641,76642],{"class":79,"line":51984},[77,76643,76644],{"class":323},"      \u002F\u002F (2) 把数组转换为字符串join\n",[77,76646,76647],{"class":79,"line":51989},[77,76648,76649],{"class":323},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[77,76651,76652,76654,76656,76659,76662,76664,76667],{"class":79,"line":51998},[77,76653,72542],{"class":87},[77,76655,268],{"class":2123},[77,76657,76658],{"class":87}," trArr.",[77,76660,76661],{"class":83},"join",[77,76663,2622],{"class":87},[77,76665,76666],{"class":271},"''",[77,76668,2628],{"class":87},[77,76670,76671],{"class":79,"line":52007},[77,76672,76673],{"class":323},"      \u002F\u002F 显示共有几条\n",[77,76675,76676,76678,76680,76682,76685,76688,76690,76692],{"class":79,"line":52012},[77,76677,58219],{"class":87},[77,76679,56853],{"class":83},[77,76681,2622],{"class":87},[77,76683,76684],{"class":271},"'.total span'",[77,76686,76687],{"class":87},").innerHTML ",[77,76689,268],{"class":2123},[77,76691,54423],{"class":87},[77,76693,58279],{"class":94},[77,76695,76696],{"class":79,"line":52017},[77,76697,4662],{"class":87},[77,76699,76700],{"class":79,"line":52022},[77,76701,76702],{"class":323},"    \u002F\u002F render()\n",[77,76704,76705],{"class":79,"line":52035},[77,76706,4875],{"emptyLinePlaceholder":2549},[77,76708,76709],{"class":79,"line":52040},[77,76710,76711],{"class":323},"    \u002F\u002F 获取DOM对象\n",[77,76713,76714,76716,76718,76720,76722,76724,76726,76728],{"class":79,"line":52049},[77,76715,13694],{"class":2123},[77,76717,72264],{"class":94},[77,76719,16036],{"class":2123},[77,76721,56850],{"class":87},[77,76723,56853],{"class":83},[77,76725,2622],{"class":87},[77,76727,72275],{"class":271},[77,76729,2628],{"class":87},[77,76731,76732,76734,76736,76738,76740,76742,76744,76746],{"class":79,"line":52058},[77,76733,13694],{"class":2123},[77,76735,72091],{"class":94},[77,76737,16036],{"class":2123},[77,76739,56850],{"class":87},[77,76741,56853],{"class":83},[77,76743,2622],{"class":87},[77,76745,72102],{"class":271},[77,76747,2628],{"class":87},[77,76749,76750,76752,76754,76756,76758,76760,76762,76764],{"class":79,"line":52075},[77,76751,13694],{"class":2123},[77,76753,18159],{"class":94},[77,76755,16036],{"class":2123},[77,76757,56850],{"class":87},[77,76759,56853],{"class":83},[77,76761,2622],{"class":87},[77,76763,72121],{"class":271},[77,76765,2628],{"class":87},[77,76767,76769,76771,76773,76775,76777,76779,76781,76783],{"class":79,"line":76768},231,[77,76770,13694],{"class":2123},[77,76772,72150],{"class":94},[77,76774,16036],{"class":2123},[77,76776,56850],{"class":87},[77,76778,56853],{"class":83},[77,76780,2622],{"class":87},[77,76782,72161],{"class":271},[77,76784,2628],{"class":87},[77,76786,76788,76790,76792,76794,76796,76798,76800,76802],{"class":79,"line":76787},232,[77,76789,13694],{"class":2123},[77,76791,72130],{"class":94},[77,76793,16036],{"class":2123},[77,76795,56850],{"class":87},[77,76797,56853],{"class":83},[77,76799,2622],{"class":87},[77,76801,72141],{"class":271},[77,76803,2628],{"class":87},[77,76805,76807,76809,76811,76813,76815,76817,76819,76821],{"class":79,"line":76806},233,[77,76808,13694],{"class":2123},[77,76810,72170],{"class":94},[77,76812,16036],{"class":2123},[77,76814,56850],{"class":87},[77,76816,56853],{"class":83},[77,76818,2622],{"class":87},[77,76820,72181],{"class":271},[77,76822,2628],{"class":87},[77,76824,76826],{"class":79,"line":76825},234,[77,76827,4875],{"emptyLinePlaceholder":2549},[77,76829,76831],{"class":79,"line":76830},235,[77,76832,76833],{"class":323},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[77,76835,76837,76839,76841,76843,76845,76847,76849,76851,76853],{"class":79,"line":76836},236,[77,76838,72282],{"class":87},[77,76840,60261],{"class":83},[77,76842,2622],{"class":87},[77,76844,72289],{"class":271},[77,76846,680],{"class":87},[77,76848,56903],{"class":2123},[77,76850,4134],{"class":87},[77,76852,2693],{"class":7691},[77,76854,14914],{"class":87},[77,76856,76858],{"class":79,"line":76857},237,[77,76859,76860],{"class":323},"      \u002F\u002F 禁止浏览器跳转\n",[77,76862,76864,76866,76868],{"class":79,"line":76863},238,[77,76865,72309],{"class":87},[77,76867,72312],{"class":83},[77,76869,4451],{"class":87},[77,76871,76873],{"class":79,"line":76872},239,[77,76874,76875],{"class":323},"      \u002F\u002F 非空判断\n",[77,76877,76879],{"class":79,"line":76878},240,[77,76880,76881],{"class":323},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[77,76883,76885],{"class":79,"line":76884},241,[77,76886,76887],{"class":323},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[77,76889,76891,76893,76895,76897,76900,76902,76905,76908,76910,76912],{"class":79,"line":76890},242,[77,76892,56934],{"class":2123},[77,76894,4134],{"class":87},[77,76896,2841],{"class":2123},[77,76898,76899],{"class":87},"uname.value ",[77,76901,73796],{"class":2123},[77,76903,76904],{"class":2123}," !",[77,76906,76907],{"class":87},"age.value ",[77,76909,73796],{"class":2123},[77,76911,76904],{"class":2123},[77,76913,76914],{"class":87},"salary.value) {\n",[77,76916,76918,76920,76922,76924,76926],{"class":79,"line":76917},243,[77,76919,17224],{"class":2123},[77,76921,72383],{"class":83},[77,76923,2622],{"class":87},[77,76925,72388],{"class":271},[77,76927,2628],{"class":87},[77,76929,76931],{"class":79,"line":76930},244,[77,76932,54856],{"class":87},[77,76934,76936,76938,76940],{"class":79,"line":76935},245,[77,76937,60455],{"class":87},[77,76939,54342],{"class":83},[77,76941,76942],{"class":87},"({\n",[77,76944,76946],{"class":79,"line":76945},246,[77,76947,76948],{"class":323},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[77,76950,76952],{"class":79,"line":76951},247,[77,76953,76954],{"class":323},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[77,76956,76958],{"class":79,"line":76957},248,[77,76959,76960],{"class":323},"        \u002F\u002F 对象的序号应为数组长度+1\n",[77,76962,76964],{"class":79,"line":76963},249,[77,76965,76966],{"class":323},"        \u002F\u002F unameId: arr.length + 1,\n",[77,76968,76970],{"class":79,"line":76969},250,[77,76971,4875],{"emptyLinePlaceholder":2549},[77,76973,76975],{"class":79,"line":76974},251,[77,76976,76977],{"class":323},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[77,76979,76981],{"class":79,"line":76980},252,[77,76982,76983],{"class":323},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[77,76985,76987],{"class":79,"line":76986},253,[77,76988,76989],{"class":323},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[77,76991,76993],{"class":79,"line":76992},254,[77,76994,76995],{"class":323},"        \u002F\u002F 0当假看\n",[77,76997,76999,77002,77004,77006,77009,77011,77013,77015,77018,77020,77022,77025,77027],{"class":79,"line":76998},255,[77,77000,77001],{"class":87},"        unameId: arr.",[77,77003,54426],{"class":94},[77,77005,76253],{"class":2123},[77,77007,77008],{"class":87}," arr[arr.",[77,77010,54426],{"class":94},[77,77012,54729],{"class":2123},[77,77014,27586],{"class":94},[77,77016,77017],{"class":87},"].unameId ",[77,77019,3094],{"class":2123},[77,77021,27586],{"class":94},[77,77023,77024],{"class":2123}," :",[77,77026,27586],{"class":94},[77,77028,33933],{"class":87},[77,77030,77032],{"class":79,"line":77031},256,[77,77033,72436],{"class":87},[77,77035,77037],{"class":79,"line":77036},257,[77,77038,72441],{"class":87},[77,77040,77042],{"class":79,"line":77041},258,[77,77043,72451],{"class":87},[77,77045,77047],{"class":79,"line":77046},259,[77,77048,72446],{"class":87},[77,77050,77052],{"class":79,"line":77051},260,[77,77053,77054],{"class":87},"        city: city.value,\n",[77,77056,77058],{"class":79,"line":77057},261,[77,77059,77060],{"class":323},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[77,77062,77064],{"class":79,"line":77063},262,[77,77065,77066],{"class":323},"        \u002F\u002F time: new Date().toDateString()\n",[77,77068,77070,77073,77076],{"class":79,"line":77069},263,[77,77071,77072],{"class":87},"        time: ",[77,77074,77075],{"class":83},"getTime",[77,77077,4451],{"class":87},[77,77079,77081],{"class":79,"line":77080},264,[77,77082,67258],{"class":87},[77,77084,77086],{"class":79,"line":77085},265,[77,77087,77088],{"class":323},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[77,77090,77092,77094],{"class":79,"line":77091},266,[77,77093,72511],{"class":83},[77,77095,4451],{"class":87},[77,77097,77099,77101,77103,77105,77107],{"class":79,"line":77098},267,[77,77100,72494],{"class":94},[77,77102,3171],{"class":87},[77,77104,72499],{"class":83},[77,77106,15522],{"class":87},[77,77108,77109],{"class":323},"\u002F\u002F重置表单\n",[77,77111,77113],{"class":79,"line":77112},268,[77,77114,77115],{"class":323},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[77,77117,77119,77122,77124,77126,77129,77131,77133,77135,77137],{"class":79,"line":77118},269,[77,77120,77121],{"class":87},"      localStorage.",[77,77123,74093],{"class":83},[77,77125,2622],{"class":87},[77,77127,77128],{"class":271},"'data'",[77,77130,680],{"class":87},[77,77132,74103],{"class":94},[77,77134,3171],{"class":87},[77,77136,74108],{"class":83},[77,77138,77139],{"class":87},"(arr))\n",[77,77141,77143],{"class":79,"line":77142},270,[77,77144,35928],{"class":87},[77,77146,77148],{"class":79,"line":77147},271,[77,77149,4875],{"emptyLinePlaceholder":2549},[77,77151,77153],{"class":79,"line":77152},272,[77,77154,77155],{"class":323},"    \u002F\u002F 3.删除业务\n",[77,77157,77159],{"class":79,"line":77158},273,[77,77160,77161],{"class":323},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[77,77163,77165,77167,77169,77171,77173,77175,77177,77179,77181],{"class":79,"line":77164},274,[77,77166,72784],{"class":87},[77,77168,60261],{"class":83},[77,77170,2622],{"class":87},[77,77172,60266],{"class":271},[77,77174,680],{"class":87},[77,77176,56903],{"class":2123},[77,77178,4134],{"class":87},[77,77180,2693],{"class":7691},[77,77182,14914],{"class":87},[77,77184,77186],{"class":79,"line":77185},275,[77,77187,77188],{"class":323},"      \u002F\u002F 判断是否点击的是删除按钮\n",[77,77190,77192,77194,77196,77198,77200],{"class":79,"line":77191},276,[77,77193,56934],{"class":2123},[77,77195,69477],{"class":87},[77,77197,56940],{"class":2123},[77,77199,70699],{"class":271},[77,77201,14914],{"class":87},[77,77203,77205],{"class":79,"line":77204},277,[77,77206,77207],{"class":323},"        \u002F\u002F alert(1)\n",[77,77209,77211],{"class":79,"line":77210},278,[77,77212,77213],{"class":323},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[77,77215,77217],{"class":79,"line":77216},279,[77,77218,77219],{"class":323},"        \u002F\u002F console.log(e.target)\n",[77,77221,77223],{"class":79,"line":77222},280,[77,77224,77225],{"class":323},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[77,77227,77229],{"class":79,"line":77228},281,[77,77230,4875],{"emptyLinePlaceholder":2549},[77,77232,77234],{"class":79,"line":77233},282,[77,77235,77236],{"class":323},"        \u002F\u002F 确认框，确然是否真的要删除\n",[77,77238,77240],{"class":79,"line":77239},283,[77,77241,77242],{"class":323},"        \u002F\u002F confirm()为确认框\n",[77,77244,77246],{"class":79,"line":77245},284,[77,77247,77248],{"class":323},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[77,77250,77252,77254,77256,77259,77261,77264],{"class":79,"line":77251},285,[77,77253,4972],{"class":2123},[77,77255,4134],{"class":87},[77,77257,77258],{"class":83},"confirm",[77,77260,2622],{"class":87},[77,77262,77263],{"class":271},"'您确定要删除这条数据吗？'",[77,77265,77266],{"class":87},")) {\n",[77,77268,77270,77273,77275,77277,77279],{"class":79,"line":77269},286,[77,77271,77272],{"class":87},"          arr.",[77,77274,60458],{"class":83},[77,77276,72837],{"class":87},[77,77278,2120],{"class":94},[77,77280,2628],{"class":87},[77,77282,77284],{"class":79,"line":77283},287,[77,77285,77286],{"class":323},"          \u002F\u002F 3.4 重新渲染页面\n",[77,77288,77290,77293],{"class":79,"line":77289},288,[77,77291,77292],{"class":83},"          render",[77,77294,4451],{"class":87},[77,77296,77298],{"class":79,"line":77297},289,[77,77299,77300],{"class":323},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[77,77302,77304,77307,77309,77311,77313,77315,77317,77319,77321],{"class":79,"line":77303},290,[77,77305,77306],{"class":87},"          localStorage.",[77,77308,74093],{"class":83},[77,77310,2622],{"class":87},[77,77312,77128],{"class":271},[77,77314,680],{"class":87},[77,77316,74103],{"class":94},[77,77318,3171],{"class":87},[77,77320,74108],{"class":83},[77,77322,77139],{"class":87},[77,77324,77326],{"class":79,"line":77325},291,[77,77327,5004],{"class":87},[77,77329,77331],{"class":79,"line":77330},292,[77,77332,54856],{"class":87},[77,77334,77336],{"class":79,"line":77335},293,[77,77337,4875],{"emptyLinePlaceholder":2549},[77,77339,77341],{"class":79,"line":77340},294,[77,77342,35928],{"class":87},[77,77344,77346],{"class":79,"line":77345},295,[77,77347,4875],{"emptyLinePlaceholder":2549},[77,77349,77351,77353,77355],{"class":79,"line":77350},296,[77,77352,54875],{"class":87},[77,77354,54271],{"class":158},[77,77356,291],{"class":87},[77,77358,77360,77362,77364],{"class":79,"line":77359},297,[77,77361,351],{"class":87},[77,77363,54258],{"class":158},[77,77365,291],{"class":87},[77,77367,77369],{"class":79,"line":77368},298,[77,77370,4875],{"emptyLinePlaceholder":2549},[77,77372,77374,77376,77378],{"class":79,"line":77373},299,[77,77375,351],{"class":87},[77,77377,53101],{"class":158},[77,77379,291],{"class":87},[14,77381,77383],{"id":77382},"_36-正则表达式","3.6 正则表达式",[24,77385,77386],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[24,77388,77389],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[24,77391,77392],{},"正则表达式的作用：",[51,77394,77395,77402,77408],{},[54,77396,77397,77398,77401],{},"表单验证（ ",[27,77399,77400],{},"匹配"," ）",[54,77403,77404,77405,77401],{},"过滤敏感词（ ",[27,77406,77407],{},"替换",[54,77409,77410,77411,77401],{},"字符串中提取我们想要的部分（ ",[27,77412,77413],{},"提取",[19,77415,77417],{"id":77416},"_361-语法","3.6.1 语法",[24,77419,77420],{},"正则表达式使用步骤：",[139,77422,77423,77426],{},[54,77424,77425],{},"定义规则",[54,77427,77428],{},"查找是否匹配",[24,77430,77431],{},"正则表达式里边不需要写引号",[24,77433,77434],{},[40,77435],{"alt":72,"src":77436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[24,77438,77439],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[24,77441,77442],{},"reg.test(str)",[24,77444,77445],{},[40,77446],{"alt":72,"src":77447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[24,77449,77450],{},[40,77451],{"alt":72,"src":77452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[19,77454,77456],{"id":77455},"_362-元字符","3.6.2 元字符",[139,77458,77459,77462,77465,77468,77475],{},[54,77460,77461],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[54,77463,77464],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[54,77466,77467],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[54,77469,77470,77471],{},"正则验证工具：",[417,77472,77473],{"href":77473,"rel":77474},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26332],[54,77476,77477],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24468,77479,77481],{"id":77480},"_3621-边界符","3.6.2.1 边界符",[24,77483,77484],{},[40,77485],{"alt":72,"src":77486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[24,77488,77489],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[24,77491,77492],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[24,77494,77495],{},"只匹配一次",[24,77497,77498],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24468,77500,77502],{"id":77501},"_3622-量词","3.6.2.2 量词",[24,77504,77505],{},[40,77506],{"alt":72,"src":77507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[24,77509,77510],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24468,77512,77514],{"id":77513},"_3623-元字符","3.6.2.3 元字符",[24,77516,77517],{},[40,77518],{"alt":72,"src":77519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[24,77521,77522],{},"匹配的是a或b或c []只选一个",[24,77524,77525],{},[40,77526],{"alt":72,"src":77527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[24,77529,77530],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[24,77532,77533],{},[40,77534],{"alt":72,"src":77535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[24,77537,77538],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[24,77540,77541],{},[40,77542],{"alt":72,"src":77543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[67,77545,77547],{"className":53099,"code":77546,"language":53101,"meta":72,"style":72},"\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",[74,77548,77549,77559,77573,77577,77585,77599,77619,77631,77639,77643,77651,77659,77664,77695,77722,77750,77754,77759,77787,77818,77823,77828,77859,77891,77923,77927,77932,77963,77993,78023,78027,78032,78063,78094,78124,78154,78158,78163,78196,78200,78205,78236,78267,78271,78276,78307,78337,78368,78372,78377,78409,78440,78471,78498,78529,78561,78594,78625,78656,78688,78719,78727,78735,78739],{"__ignoreMap":72},[77,77550,77551,77553,77555,77557],{"class":79,"line":80},[77,77552,53763],{"class":87},[77,77554,53766],{"class":158},[77,77556,53769],{"class":83},[77,77558,291],{"class":87},[77,77560,77561,77563,77565,77567,77569,77571],{"class":79,"line":91},[77,77562,260],{"class":87},[77,77564,53101],{"class":158},[77,77566,53780],{"class":83},[77,77568,268],{"class":87},[77,77570,53785],{"class":271},[77,77572,291],{"class":87},[77,77574,77575],{"class":79,"line":107},[77,77576,4875],{"emptyLinePlaceholder":2549},[77,77578,77579,77581,77583],{"class":79,"line":191},[77,77580,260],{"class":87},[77,77582,53798],{"class":158},[77,77584,291],{"class":87},[77,77586,77587,77589,77591,77593,77595,77597],{"class":79,"line":1543},[77,77588,54602],{"class":87},[77,77590,53808],{"class":158},[77,77592,53811],{"class":83},[77,77594,268],{"class":87},[77,77596,53816],{"class":271},[77,77598,291],{"class":87},[77,77600,77601,77603,77605,77607,77609,77611,77613,77615,77617],{"class":79,"line":1549},[77,77602,54602],{"class":87},[77,77604,53808],{"class":158},[77,77606,2495],{"class":83},[77,77608,268],{"class":87},[77,77610,53855],{"class":271},[77,77612,53835],{"class":83},[77,77614,268],{"class":87},[77,77616,53862],{"class":271},[77,77618,291],{"class":87},[77,77620,77621,77623,77625,77627,77629],{"class":79,"line":1566},[77,77622,54602],{"class":87},[77,77624,53871],{"class":158},[77,77626,53874],{"class":87},[77,77628,53871],{"class":158},[77,77630,291],{"class":87},[77,77632,77633,77635,77637],{"class":79,"line":1572},[77,77634,351],{"class":87},[77,77636,53798],{"class":158},[77,77638,291],{"class":87},[77,77640,77641],{"class":79,"line":1589},[77,77642,4875],{"emptyLinePlaceholder":2549},[77,77644,77645,77647,77649],{"class":79,"line":1595},[77,77646,260],{"class":87},[77,77648,54258],{"class":158},[77,77650,291],{"class":87},[77,77652,77653,77655,77657],{"class":79,"line":4088},[77,77654,54602],{"class":87},[77,77656,54271],{"class":158},[77,77658,291],{"class":87},[77,77660,77661],{"class":79,"line":4093},[77,77662,77663],{"class":323},"    \u002F\u002F 元字符中\n",[77,77665,77666,77668,77670,77672,77674,77677,77679,77681,77684,77686,77689,77692],{"class":79,"line":4099},[77,77667,76192],{"class":87},[77,77669,60695],{"class":83},[77,77671,2622],{"class":87},[77,77673,3197],{"class":271},[77,77675,77676],{"class":50443},"哈",[77,77678,3197],{"class":271},[77,77680,3171],{"class":87},[77,77682,77683],{"class":83},"test",[77,77685,2622],{"class":87},[77,77687,77688],{"class":271},"'哈'",[77,77690,77691],{"class":87},"))  ",[77,77693,77694],{"class":323},"\u002F\u002Ftrue\n",[77,77696,77697,77699,77701,77703,77705,77707,77709,77711,77713,77715,77718,77720],{"class":79,"line":4104},[77,77698,76192],{"class":87},[77,77700,60695],{"class":83},[77,77702,2622],{"class":87},[77,77704,3197],{"class":271},[77,77706,77676],{"class":50443},[77,77708,3197],{"class":271},[77,77710,3171],{"class":87},[77,77712,77683],{"class":83},[77,77714,2622],{"class":87},[77,77716,77717],{"class":271},"'哈哈'",[77,77719,77691],{"class":87},[77,77721,77694],{"class":323},[77,77723,77724,77726,77728,77730,77732,77734,77736,77738,77740,77742,77745,77748],{"class":79,"line":4118},[77,77725,76192],{"class":87},[77,77727,60695],{"class":83},[77,77729,2622],{"class":87},[77,77731,3197],{"class":271},[77,77733,77676],{"class":50443},[77,77735,3197],{"class":271},[77,77737,3171],{"class":87},[77,77739,77683],{"class":83},[77,77741,2622],{"class":87},[77,77743,77744],{"class":271},"'二哈'",[77,77746,77747],{"class":87},"))   ",[77,77749,77694],{"class":323},[77,77751,77752],{"class":79,"line":4123},[77,77753,4875],{"emptyLinePlaceholder":2549},[77,77755,77756],{"class":79,"line":4129},[77,77757,77758],{"class":323},"    \u002F\u002F 1.边界符\n",[77,77760,77761,77763,77765,77767,77769,77771,77773,77775,77777,77779,77781,77783,77785],{"class":79,"line":4150},[77,77762,76192],{"class":87},[77,77764,60695],{"class":83},[77,77766,2622],{"class":87},[77,77768,3197],{"class":271},[77,77770,3578],{"class":2123},[77,77772,77676],{"class":50443},[77,77774,3197],{"class":271},[77,77776,3171],{"class":87},[77,77778,77683],{"class":83},[77,77780,2622],{"class":87},[77,77782,77688],{"class":271},[77,77784,77691],{"class":87},[77,77786,77694],{"class":323},[77,77788,77789,77791,77793,77795,77797,77799,77801,77803,77805,77807,77809,77811,77813,77815],{"class":79,"line":4155},[77,77790,76192],{"class":87},[77,77792,60695],{"class":83},[77,77794,2622],{"class":87},[77,77796,3197],{"class":271},[77,77798,3578],{"class":2123},[77,77800,77676],{"class":50443},[77,77802,2916],{"class":2123},[77,77804,3197],{"class":271},[77,77806,3171],{"class":87},[77,77808,77683],{"class":83},[77,77810,2622],{"class":87},[77,77812,77717],{"class":271},[77,77814,77691],{"class":87},[77,77816,77817],{"class":323},"\u002F\u002Ffalse\n",[77,77819,77820],{"class":79,"line":4169},[77,77821,77822],{"class":323},"    \u002F\u002F 2.量词\n",[77,77824,77825],{"class":79,"line":4174},[77,77826,77827],{"class":323},"    \u002F\u002F 量词 * 类似于 >= 0\n",[77,77829,77830,77832,77834,77836,77838,77840,77842,77845,77847,77849,77851,77853,77855,77857],{"class":79,"line":4203},[77,77831,76192],{"class":87},[77,77833,60695],{"class":83},[77,77835,2622],{"class":87},[77,77837,3197],{"class":271},[77,77839,3578],{"class":2123},[77,77841,77676],{"class":50443},[77,77843,77844],{"class":2123},"*$",[77,77846,3197],{"class":271},[77,77848,3171],{"class":87},[77,77850,77683],{"class":83},[77,77852,2622],{"class":87},[77,77854,77717],{"class":271},[77,77856,77691],{"class":87},[77,77858,77694],{"class":323},[77,77860,77861,77863,77865,77867,77869,77871,77873,77875,77877,77879,77881,77883,77886,77888],{"class":79,"line":4208},[77,77862,76192],{"class":87},[77,77864,60695],{"class":83},[77,77866,2622],{"class":87},[77,77868,3197],{"class":271},[77,77870,3578],{"class":2123},[77,77872,77676],{"class":50443},[77,77874,77844],{"class":2123},[77,77876,3197],{"class":271},[77,77878,3171],{"class":87},[77,77880,77683],{"class":83},[77,77882,2622],{"class":87},[77,77884,77885],{"class":271},"'二哈好傻'",[77,77887,77691],{"class":87},[77,77889,77890],{"class":323},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[77,77892,77893,77895,77897,77899,77901,77903,77905,77907,77909,77911,77913,77915,77918,77920],{"class":79,"line":4225},[77,77894,76192],{"class":87},[77,77896,60695],{"class":83},[77,77898,2622],{"class":87},[77,77900,3197],{"class":271},[77,77902,3578],{"class":2123},[77,77904,77676],{"class":50443},[77,77906,77844],{"class":2123},[77,77908,3197],{"class":271},[77,77910,3171],{"class":87},[77,77912,77683],{"class":83},[77,77914,2622],{"class":87},[77,77916,77917],{"class":271},"'哈好哈'",[77,77919,77747],{"class":87},[77,77921,77922],{"class":323},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[77,77924,77925],{"class":79,"line":4230},[77,77926,4875],{"emptyLinePlaceholder":2549},[77,77928,77929],{"class":79,"line":4235},[77,77930,77931],{"class":323},"    \u002F\u002F +类似于>=1\n",[77,77933,77934,77936,77938,77940,77942,77944,77946,77949,77951,77953,77955,77957,77959,77961],{"class":79,"line":4240},[77,77935,76192],{"class":87},[77,77937,60695],{"class":83},[77,77939,2622],{"class":87},[77,77941,3197],{"class":271},[77,77943,3578],{"class":2123},[77,77945,77676],{"class":50443},[77,77947,77948],{"class":2123},"+$",[77,77950,3197],{"class":271},[77,77952,3171],{"class":87},[77,77954,77683],{"class":83},[77,77956,2622],{"class":87},[77,77958,77717],{"class":271},[77,77960,77691],{"class":87},[77,77962,77694],{"class":323},[77,77964,77965,77967,77969,77971,77973,77975,77977,77979,77981,77983,77985,77987,77989,77991],{"class":79,"line":4254},[77,77966,76192],{"class":87},[77,77968,60695],{"class":83},[77,77970,2622],{"class":87},[77,77972,3197],{"class":271},[77,77974,3578],{"class":2123},[77,77976,77676],{"class":50443},[77,77978,77948],{"class":2123},[77,77980,3197],{"class":271},[77,77982,3171],{"class":87},[77,77984,77683],{"class":83},[77,77986,2622],{"class":87},[77,77988,77885],{"class":271},[77,77990,77691],{"class":87},[77,77992,77890],{"class":323},[77,77994,77995,77997,77999,78001,78003,78005,78007,78009,78011,78013,78015,78017,78019,78021],{"class":79,"line":4259},[77,77996,76192],{"class":87},[77,77998,60695],{"class":83},[77,78000,2622],{"class":87},[77,78002,3197],{"class":271},[77,78004,3578],{"class":2123},[77,78006,77676],{"class":50443},[77,78008,77948],{"class":2123},[77,78010,3197],{"class":271},[77,78012,3171],{"class":87},[77,78014,77683],{"class":83},[77,78016,2622],{"class":87},[77,78018,77917],{"class":271},[77,78020,77747],{"class":87},[77,78022,77817],{"class":323},[77,78024,78025],{"class":79,"line":5052},[77,78026,4875],{"emptyLinePlaceholder":2549},[77,78028,78029],{"class":79,"line":5066},[77,78030,78031],{"class":323},"    \u002F\u002F ?类似于0次或一次\n",[77,78033,78034,78036,78038,78040,78042,78044,78047,78049,78051,78053,78055,78057,78059,78061],{"class":79,"line":5074},[77,78035,76192],{"class":87},[77,78037,60695],{"class":83},[77,78039,2622],{"class":87},[77,78041,3197],{"class":271},[77,78043,3578],{"class":2123},[77,78045,78046],{"class":50443},"哈？",[77,78048,2916],{"class":2123},[77,78050,3197],{"class":271},[77,78052,3171],{"class":87},[77,78054,77683],{"class":83},[77,78056,2622],{"class":87},[77,78058,76666],{"class":271},[77,78060,77747],{"class":87},[77,78062,77694],{"class":323},[77,78064,78065,78067,78069,78071,78073,78075,78077,78080,78082,78084,78086,78088,78090,78092],{"class":79,"line":5079},[77,78066,76192],{"class":87},[77,78068,60695],{"class":83},[77,78070,2622],{"class":87},[77,78072,3197],{"class":271},[77,78074,3578],{"class":2123},[77,78076,77676],{"class":50443},[77,78078,78079],{"class":2123},"?$",[77,78081,3197],{"class":271},[77,78083,3171],{"class":87},[77,78085,77683],{"class":83},[77,78087,2622],{"class":87},[77,78089,77717],{"class":271},[77,78091,77691],{"class":87},[77,78093,77817],{"class":323},[77,78095,78096,78098,78100,78102,78104,78106,78108,78110,78112,78114,78116,78118,78120,78122],{"class":79,"line":5085},[77,78097,76192],{"class":87},[77,78099,60695],{"class":83},[77,78101,2622],{"class":87},[77,78103,3197],{"class":271},[77,78105,3578],{"class":2123},[77,78107,77676],{"class":50443},[77,78109,78079],{"class":2123},[77,78111,3197],{"class":271},[77,78113,3171],{"class":87},[77,78115,77683],{"class":83},[77,78117,2622],{"class":87},[77,78119,77885],{"class":271},[77,78121,77691],{"class":87},[77,78123,77890],{"class":323},[77,78125,78126,78128,78130,78132,78134,78136,78138,78140,78142,78144,78146,78148,78150,78152],{"class":79,"line":5091},[77,78127,76192],{"class":87},[77,78129,60695],{"class":83},[77,78131,2622],{"class":87},[77,78133,3197],{"class":271},[77,78135,3578],{"class":2123},[77,78137,77676],{"class":50443},[77,78139,78079],{"class":2123},[77,78141,3197],{"class":271},[77,78143,3171],{"class":87},[77,78145,77683],{"class":83},[77,78147,2622],{"class":87},[77,78149,77917],{"class":271},[77,78151,77691],{"class":87},[77,78153,77817],{"class":323},[77,78155,78156],{"class":79,"line":5096},[77,78157,4875],{"emptyLinePlaceholder":2549},[77,78159,78160],{"class":79,"line":10422},[77,78161,78162],{"class":323},"    \u002F\u002F {n}写几，就必须出现几次\n",[77,78164,78165,78167,78169,78171,78173,78175,78177,78180,78182,78184,78186,78188,78191,78194],{"class":79,"line":10446},[77,78166,76192],{"class":87},[77,78168,60695],{"class":83},[77,78170,2622],{"class":87},[77,78172,3197],{"class":271},[77,78174,3578],{"class":2123},[77,78176,77676],{"class":50443},[77,78178,78179],{"class":2123},"{4}$",[77,78181,3197],{"class":271},[77,78183,3171],{"class":87},[77,78185,77683],{"class":83},[77,78187,2622],{"class":87},[77,78189,78190],{"class":271},"'哈哈哈哈'",[77,78192,78193],{"class":87},")) ",[77,78195,77694],{"class":323},[77,78197,78198],{"class":79,"line":10451},[77,78199,4875],{"emptyLinePlaceholder":2549},[77,78201,78202],{"class":79,"line":10457},[77,78203,78204],{"class":323},"    \u002F\u002F {n,}大于等于n次\n",[77,78206,78207,78209,78211,78213,78215,78217,78219,78222,78224,78226,78228,78230,78232,78234],{"class":79,"line":10484},[77,78208,76192],{"class":87},[77,78210,60695],{"class":83},[77,78212,2622],{"class":87},[77,78214,3197],{"class":271},[77,78216,3578],{"class":2123},[77,78218,77676],{"class":50443},[77,78220,78221],{"class":2123},"{4,}$",[77,78223,3197],{"class":271},[77,78225,3171],{"class":87},[77,78227,77683],{"class":83},[77,78229,2622],{"class":87},[77,78231,78190],{"class":271},[77,78233,78193],{"class":87},[77,78235,77694],{"class":323},[77,78237,78238,78240,78242,78244,78246,78248,78250,78252,78254,78256,78258,78260,78263,78265],{"class":79,"line":10489},[77,78239,76192],{"class":87},[77,78241,60695],{"class":83},[77,78243,2622],{"class":87},[77,78245,3197],{"class":271},[77,78247,3578],{"class":2123},[77,78249,77676],{"class":50443},[77,78251,78221],{"class":2123},[77,78253,3197],{"class":271},[77,78255,3171],{"class":87},[77,78257,77683],{"class":83},[77,78259,2622],{"class":87},[77,78261,78262],{"class":271},"'哈哈哈哈哈'",[77,78264,78193],{"class":87},[77,78266,77694],{"class":323},[77,78268,78269],{"class":79,"line":10495},[77,78270,4875],{"emptyLinePlaceholder":2549},[77,78272,78273],{"class":79,"line":10507},[77,78274,78275],{"class":323},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[77,78277,78278,78280,78282,78284,78286,78288,78290,78293,78295,78297,78299,78301,78303,78305],{"class":79,"line":10519},[77,78279,76192],{"class":87},[77,78281,60695],{"class":83},[77,78283,2622],{"class":87},[77,78285,3197],{"class":271},[77,78287,3578],{"class":2123},[77,78289,77676],{"class":50443},[77,78291,78292],{"class":2123},"{4,6}$",[77,78294,3197],{"class":271},[77,78296,3171],{"class":87},[77,78298,77683],{"class":83},[77,78300,2622],{"class":87},[77,78302,78190],{"class":271},[77,78304,78193],{"class":87},[77,78306,77694],{"class":323},[77,78308,78309,78311,78313,78315,78317,78319,78321,78323,78325,78327,78329,78331,78333,78335],{"class":79,"line":10531},[77,78310,76192],{"class":87},[77,78312,60695],{"class":83},[77,78314,2622],{"class":87},[77,78316,3197],{"class":271},[77,78318,3578],{"class":2123},[77,78320,77676],{"class":50443},[77,78322,78292],{"class":2123},[77,78324,3197],{"class":271},[77,78326,3171],{"class":87},[77,78328,77683],{"class":83},[77,78330,2622],{"class":87},[77,78332,78262],{"class":271},[77,78334,78193],{"class":87},[77,78336,77694],{"class":323},[77,78338,78339,78341,78343,78345,78347,78349,78351,78353,78355,78357,78359,78361,78364,78366],{"class":79,"line":12189},[77,78340,76192],{"class":87},[77,78342,60695],{"class":83},[77,78344,2622],{"class":87},[77,78346,3197],{"class":271},[77,78348,3578],{"class":2123},[77,78350,77676],{"class":50443},[77,78352,78292],{"class":2123},[77,78354,3197],{"class":271},[77,78356,3171],{"class":87},[77,78358,77683],{"class":83},[77,78360,2622],{"class":87},[77,78362,78363],{"class":271},"'哈哈哈哈哈哈哈'",[77,78365,78193],{"class":87},[77,78367,77817],{"class":323},[77,78369,78370],{"class":79,"line":12214},[77,78371,4875],{"emptyLinePlaceholder":2549},[77,78373,78374],{"class":79,"line":12237},[77,78375,78376],{"class":323},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[77,78378,78379,78381,78383,78385,78387,78389,78392,78394,78396,78398,78400,78402,78405,78407],{"class":79,"line":12261},[77,78380,76192],{"class":87},[77,78382,60695],{"class":83},[77,78384,2622],{"class":87},[77,78386,3197],{"class":271},[77,78388,3578],{"class":2123},[77,78390,78391],{"class":94},"[abc]",[77,78393,2916],{"class":2123},[77,78395,3197],{"class":271},[77,78397,3171],{"class":87},[77,78399,77683],{"class":83},[77,78401,2622],{"class":87},[77,78403,78404],{"class":271},"'a'",[77,78406,77691],{"class":87},[77,78408,77694],{"class":323},[77,78410,78411,78413,78415,78417,78419,78421,78423,78425,78427,78429,78431,78433,78436,78438],{"class":79,"line":12266},[77,78412,76192],{"class":87},[77,78414,60695],{"class":83},[77,78416,2622],{"class":87},[77,78418,3197],{"class":271},[77,78420,3578],{"class":2123},[77,78422,78391],{"class":94},[77,78424,2916],{"class":2123},[77,78426,3197],{"class":271},[77,78428,3171],{"class":87},[77,78430,77683],{"class":83},[77,78432,2622],{"class":87},[77,78434,78435],{"class":271},"'b'",[77,78437,77691],{"class":87},[77,78439,77694],{"class":323},[77,78441,78442,78444,78446,78448,78450,78452,78454,78456,78458,78460,78462,78464,78467,78469],{"class":79,"line":12271},[77,78443,76192],{"class":87},[77,78445,60695],{"class":83},[77,78447,2622],{"class":87},[77,78449,3197],{"class":271},[77,78451,3578],{"class":2123},[77,78453,78391],{"class":94},[77,78455,2916],{"class":2123},[77,78457,3197],{"class":271},[77,78459,3171],{"class":87},[77,78461,77683],{"class":83},[77,78463,2622],{"class":87},[77,78465,78466],{"class":271},"'c'",[77,78468,77691],{"class":87},[77,78470,77694],{"class":323},[77,78472,78473,78475,78477,78479,78481,78483,78485,78487,78489,78491,78494,78496],{"class":79,"line":12276},[77,78474,76192],{"class":87},[77,78476,60695],{"class":83},[77,78478,2622],{"class":87},[77,78480,3197],{"class":271},[77,78482,78391],{"class":94},[77,78484,3197],{"class":271},[77,78486,3171],{"class":87},[77,78488,77683],{"class":83},[77,78490,2622],{"class":87},[77,78492,78493],{"class":271},"'ab'",[77,78495,77691],{"class":87},[77,78497,77694],{"class":323},[77,78499,78500,78502,78504,78506,78508,78510,78512,78514,78516,78518,78520,78522,78524,78526],{"class":79,"line":12285},[77,78501,76192],{"class":87},[77,78503,60695],{"class":83},[77,78505,2622],{"class":87},[77,78507,3197],{"class":271},[77,78509,3578],{"class":2123},[77,78511,78391],{"class":94},[77,78513,2916],{"class":2123},[77,78515,3197],{"class":271},[77,78517,3171],{"class":87},[77,78519,77683],{"class":83},[77,78521,2622],{"class":87},[77,78523,78493],{"class":271},[77,78525,77691],{"class":87},[77,78527,78528],{"class":323},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[77,78530,78531,78533,78535,78537,78539,78541,78543,78546,78548,78550,78552,78554,78556,78558],{"class":79,"line":12290},[77,78532,76192],{"class":87},[77,78534,60695],{"class":83},[77,78536,2622],{"class":87},[77,78538,3197],{"class":271},[77,78540,3578],{"class":2123},[77,78542,78391],{"class":94},[77,78544,78545],{"class":2123},"{2}$",[77,78547,3197],{"class":271},[77,78549,3171],{"class":87},[77,78551,77683],{"class":83},[77,78553,2622],{"class":87},[77,78555,78493],{"class":271},[77,78557,77691],{"class":87},[77,78559,78560],{"class":323},"\u002F\u002Ftrue   可以选两个\n",[77,78562,78563,78565,78567,78569,78571,78573,78576,78578,78580,78582,78584,78586,78589,78591],{"class":79,"line":12296},[77,78564,76192],{"class":87},[77,78566,60695],{"class":83},[77,78568,2622],{"class":87},[77,78570,3197],{"class":271},[77,78572,3578],{"class":2123},[77,78574,78575],{"class":94},"[a-z]",[77,78577,2916],{"class":2123},[77,78579,3197],{"class":271},[77,78581,3171],{"class":87},[77,78583,77683],{"class":83},[77,78585,2622],{"class":87},[77,78587,78588],{"class":271},"'p'",[77,78590,77747],{"class":87},[77,78592,78593],{"class":323},"\u002F\u002Ftrue   依然只能选一个\n",[77,78595,78596,78598,78600,78602,78604,78606,78609,78611,78613,78615,78617,78619,78621,78623],{"class":79,"line":12317},[77,78597,76192],{"class":87},[77,78599,60695],{"class":83},[77,78601,2622],{"class":87},[77,78603,3197],{"class":271},[77,78605,3578],{"class":2123},[77,78607,78608],{"class":94},"[A-Z]",[77,78610,2916],{"class":2123},[77,78612,3197],{"class":271},[77,78614,3171],{"class":87},[77,78616,77683],{"class":83},[77,78618,2622],{"class":87},[77,78620,78588],{"class":271},[77,78622,77747],{"class":87},[77,78624,77817],{"class":323},[77,78626,78627,78629,78631,78633,78635,78637,78639,78641,78643,78645,78647,78649,78652,78654],{"class":79,"line":12323},[77,78628,76192],{"class":87},[77,78630,60695],{"class":83},[77,78632,2622],{"class":87},[77,78634,3197],{"class":271},[77,78636,3578],{"class":2123},[77,78638,78608],{"class":94},[77,78640,2916],{"class":2123},[77,78642,3197],{"class":271},[77,78644,3171],{"class":87},[77,78646,77683],{"class":83},[77,78648,2622],{"class":87},[77,78650,78651],{"class":271},"'P'",[77,78653,77747],{"class":87},[77,78655,77694],{"class":323},[77,78657,78658,78660,78662,78664,78666,78668,78671,78673,78675,78677,78679,78681,78684,78686],{"class":79,"line":12337},[77,78659,76192],{"class":87},[77,78661,60695],{"class":83},[77,78663,2622],{"class":87},[77,78665,3197],{"class":271},[77,78667,3578],{"class":2123},[77,78669,78670],{"class":94},"[0-9]",[77,78672,2916],{"class":2123},[77,78674,3197],{"class":271},[77,78676,3171],{"class":87},[77,78678,77683],{"class":83},[77,78680,2622],{"class":87},[77,78682,78683],{"class":271},"'0'",[77,78685,77747],{"class":87},[77,78687,77694],{"class":323},[77,78689,78690,78692,78694,78696,78698,78700,78703,78705,78707,78709,78711,78713,78715,78717],{"class":79,"line":12343},[77,78691,76192],{"class":87},[77,78693,60695],{"class":83},[77,78695,2622],{"class":87},[77,78697,3197],{"class":271},[77,78699,3578],{"class":2123},[77,78701,78702],{"class":94},"[a-zA-Z0-9]",[77,78704,2916],{"class":2123},[77,78706,3197],{"class":271},[77,78708,3171],{"class":87},[77,78710,77683],{"class":83},[77,78712,2622],{"class":87},[77,78714,78588],{"class":271},[77,78716,77691],{"class":87},[77,78718,77694],{"class":323},[77,78720,78721,78723,78725],{"class":79,"line":12370},[77,78722,54875],{"class":87},[77,78724,54271],{"class":158},[77,78726,291],{"class":87},[77,78728,78729,78731,78733],{"class":79,"line":12379},[77,78730,351],{"class":87},[77,78732,54258],{"class":158},[77,78734,291],{"class":87},[77,78736,78737],{"class":79,"line":12385},[77,78738,4875],{"emptyLinePlaceholder":2549},[77,78740,78741,78743,78745],{"class":79,"line":12393},[77,78742,351],{"class":87},[77,78744,53101],{"class":158},[77,78746,291],{"class":87},[24468,78748,78750],{"id":78749},"_3624-修饰符","3.6.2.4 修饰符",[24,78752,78753],{},[40,78754],{"alt":72,"src":78755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[24,78757,78758],{},"replace是个方法，使用的时候一定不要忘记括号()",[24,78760,78761],{},[40,78762],{"alt":72,"src":78763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[67,78765,78767],{"className":53099,"code":78766,"language":53101,"meta":72,"style":72},"\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",[74,78768,78769,78779,78793,78801,78815,78835,78847,78855,78863,78871,78903,78934,78939,78971,78982,79015,79024,79032,79040],{"__ignoreMap":72},[77,78770,78771,78773,78775,78777],{"class":79,"line":80},[77,78772,53763],{"class":87},[77,78774,53766],{"class":158},[77,78776,53769],{"class":83},[77,78778,291],{"class":87},[77,78780,78781,78783,78785,78787,78789,78791],{"class":79,"line":91},[77,78782,260],{"class":87},[77,78784,53101],{"class":158},[77,78786,53780],{"class":83},[77,78788,268],{"class":87},[77,78790,53785],{"class":271},[77,78792,291],{"class":87},[77,78794,78795,78797,78799],{"class":79,"line":107},[77,78796,260],{"class":87},[77,78798,53798],{"class":158},[77,78800,291],{"class":87},[77,78802,78803,78805,78807,78809,78811,78813],{"class":79,"line":191},[77,78804,54602],{"class":87},[77,78806,53808],{"class":158},[77,78808,53811],{"class":83},[77,78810,268],{"class":87},[77,78812,53816],{"class":271},[77,78814,291],{"class":87},[77,78816,78817,78819,78821,78823,78825,78827,78829,78831,78833],{"class":79,"line":1543},[77,78818,54602],{"class":87},[77,78820,53808],{"class":158},[77,78822,2495],{"class":83},[77,78824,268],{"class":87},[77,78826,53855],{"class":271},[77,78828,53835],{"class":83},[77,78830,268],{"class":87},[77,78832,53862],{"class":271},[77,78834,291],{"class":87},[77,78836,78837,78839,78841,78843,78845],{"class":79,"line":1549},[77,78838,54602],{"class":87},[77,78840,53871],{"class":158},[77,78842,53874],{"class":87},[77,78844,53871],{"class":158},[77,78846,291],{"class":87},[77,78848,78849,78851,78853],{"class":79,"line":1566},[77,78850,351],{"class":87},[77,78852,53798],{"class":158},[77,78854,291],{"class":87},[77,78856,78857,78859,78861],{"class":79,"line":1572},[77,78858,260],{"class":87},[77,78860,54258],{"class":158},[77,78862,291],{"class":87},[77,78864,78865,78867,78869],{"class":79,"line":1589},[77,78866,54602],{"class":87},[77,78868,54271],{"class":158},[77,78870,291],{"class":87},[77,78872,78873,78875,78877,78879,78881,78883,78886,78888,78890,78892,78894,78896,78899,78901],{"class":79,"line":1595},[77,78874,76192],{"class":87},[77,78876,60695],{"class":83},[77,78878,2622],{"class":87},[77,78880,3197],{"class":271},[77,78882,3578],{"class":2123},[77,78884,78885],{"class":50443},"java",[77,78887,2916],{"class":2123},[77,78889,3197],{"class":271},[77,78891,3171],{"class":87},[77,78893,77683],{"class":83},[77,78895,2622],{"class":87},[77,78897,78898],{"class":271},"'java'",[77,78900,78193],{"class":87},[77,78902,77694],{"class":323},[77,78904,78905,78907,78909,78911,78913,78915,78917,78919,78921,78923,78925,78927,78930,78932],{"class":79,"line":4088},[77,78906,76192],{"class":87},[77,78908,60695],{"class":83},[77,78910,2622],{"class":87},[77,78912,3197],{"class":271},[77,78914,3578],{"class":2123},[77,78916,78885],{"class":50443},[77,78918,2916],{"class":2123},[77,78920,3197],{"class":271},[77,78922,3171],{"class":87},[77,78924,77683],{"class":83},[77,78926,2622],{"class":87},[77,78928,78929],{"class":271},"'Java'",[77,78931,78193],{"class":87},[77,78933,77817],{"class":323},[77,78935,78936],{"class":79,"line":4093},[77,78937,78938],{"class":323},"    \u002F\u002F 不区分大小写、\n",[77,78940,78941,78943,78945,78947,78949,78951,78953,78955,78957,78959,78961,78963,78965,78967,78969],{"class":79,"line":4099},[77,78942,76192],{"class":87},[77,78944,60695],{"class":83},[77,78946,2622],{"class":87},[77,78948,3197],{"class":271},[77,78950,3578],{"class":2123},[77,78952,78885],{"class":50443},[77,78954,2916],{"class":2123},[77,78956,3197],{"class":271},[77,78958,646],{"class":2123},[77,78960,3171],{"class":87},[77,78962,77683],{"class":83},[77,78964,2622],{"class":87},[77,78966,78929],{"class":271},[77,78968,78193],{"class":87},[77,78970,77694],{"class":323},[77,78972,78973,78975,78977,78979],{"class":79,"line":4104},[77,78974,13694],{"class":2123},[77,78976,76358],{"class":94},[77,78978,16036],{"class":2123},[77,78980,78981],{"class":271}," 'java是一门编程语言，学完java工资很高'\n",[77,78983,78984,78986,78989,78991,78994,78997,78999,79001,79003,79005,79008,79010,79013],{"class":79,"line":4118},[77,78985,13694],{"class":2123},[77,78987,78988],{"class":94}," result",[77,78990,16036],{"class":2123},[77,78992,78993],{"class":87}," str.",[77,78995,78996],{"class":83},"replace",[77,78998,2622],{"class":87},[77,79000,3197],{"class":271},[77,79002,78885],{"class":50443},[77,79004,3197],{"class":271},[77,79006,79007],{"class":2123},"ig",[77,79009,680],{"class":87},[77,79011,79012],{"class":271},"'前端'",[77,79014,2628],{"class":87},[77,79016,79017,79019,79021],{"class":79,"line":4123},[77,79018,76192],{"class":87},[77,79020,60695],{"class":83},[77,79022,79023],{"class":87},"(result)\n",[77,79025,79026,79028,79030],{"class":79,"line":4129},[77,79027,54875],{"class":87},[77,79029,54271],{"class":158},[77,79031,291],{"class":87},[77,79033,79034,79036,79038],{"class":79,"line":4150},[77,79035,351],{"class":87},[77,79037,54258],{"class":158},[77,79039,291],{"class":87},[77,79041,79042,79044,79046],{"class":79,"line":4155},[77,79043,351],{"class":87},[77,79045,53101],{"class":158},[77,79047,291],{"class":87},[2520,79049,79050],{},"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":72,"searchDepth":91,"depth":91,"links":79052},[79053,79063,79075,79092,79099,79107],{"id":55818,"depth":91,"text":55819,"children":79054},[79055,79056,79057,79058,79059,79060,79061,79062],{"id":55822,"depth":107,"text":55823},{"id":55855,"depth":107,"text":55856},{"id":55894,"depth":107,"text":55895},{"id":56051,"depth":107,"text":56052},{"id":56099,"depth":107,"text":56100},{"id":56235,"depth":107,"text":56236},{"id":56555,"depth":107,"text":56556},{"id":59537,"depth":107,"text":59538},{"id":59565,"depth":91,"text":59566,"children":79064},[79065,79066,79067,79068,79069,79070,79071,79072,79073,79074],{"id":59569,"depth":107,"text":59570},{"id":59592,"depth":107,"text":59593},{"id":60507,"depth":107,"text":60508},{"id":61197,"depth":107,"text":61198},{"id":61479,"depth":107,"text":61480},{"id":65635,"depth":107,"text":65636},{"id":65805,"depth":107,"text":65806},{"id":65933,"depth":107,"text":65934},{"id":65958,"depth":107,"text":65959},{"id":67347,"depth":107,"text":67348},{"id":68500,"depth":91,"text":68501,"children":79076},[79077,79078,79079,79080,79081,79082,79083,79084,79085,79086,79087,79088,79089,79090,79091],{"id":68504,"depth":107,"text":68505},{"id":69158,"depth":107,"text":69159},{"id":70853,"depth":107,"text":70854},{"id":70894,"depth":107,"text":70895},{"id":70936,"depth":107,"text":70937},{"id":70950,"depth":107,"text":70951},{"id":70999,"depth":107,"text":71000},{"id":71011,"depth":107,"text":71012},{"id":71026,"depth":107,"text":71027},{"id":71062,"depth":107,"text":71063},{"id":71143,"depth":107,"text":71144},{"id":71271,"depth":107,"text":71272},{"id":71283,"depth":107,"text":71284},{"id":71302,"depth":107,"text":71303},{"id":73409,"depth":107,"text":73410},{"id":73428,"depth":91,"text":73429,"children":79093},[79094,79095,79096,79097,79098],{"id":73449,"depth":107,"text":73450},{"id":73469,"depth":107,"text":73470},{"id":73518,"depth":107,"text":73519},{"id":73643,"depth":107,"text":73644},{"id":73824,"depth":107,"text":73825},{"id":73842,"depth":91,"text":73843,"children":79100},[79101,79102,79103,79104,79105,79106],{"id":73857,"depth":107,"text":73858},{"id":73916,"depth":107,"text":73917},{"id":73940,"depth":107,"text":73941},{"id":74260,"depth":107,"text":74261},{"id":74292,"depth":107,"text":74293},{"id":74315,"depth":107,"text":74316},{"id":77382,"depth":91,"text":77383,"children":79108},[79109,79110],{"id":77416,"depth":107,"text":77417},{"id":77455,"depth":107,"text":77456},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55790,"description":2546},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79117,"title":79118,"body":79119,"description":2546,"extension":2547,"meta":95254,"navigation":2549,"path":95255,"seo":95256,"stem":95257,"__hash__":95258},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79120,"toc":95190},[79121,79124,79127,79131,79135,79140,79145,79156,79160,79165,79168,79172,79175,79180,79184,79188,79191,79196,79199,79203,79206,79214,79217,79221,79226,79231,79234,79238,79243,79248,79251,79255,79260,79263,79268,79271,79276,79279,79284,79289,79292,79295,79299,79304,79309,79312,79316,79320,79323,79326,79329,79333,79337,79342,79347,79350,79354,79359,79364,79367,79370,79373,79376,79379,79382,79385,79388,79391,79396,79400,79405,79410,79413,79416,79419,79422,79425,79428,79431,79434,79438,79442,79445,79448,79451,79456,79458,79461,79464,79467,79470,79473,79476,79479,79482,79485,79488,79491,79494,79497,79502,79507,79512,79515,79519,79522,79527,79531,79533,79544,79549,79650,79653,79656,79659,79662,79665,79668,79671,79674,79676,79679,79682,79685,79688,79691,79693,79696,79699,79702,79705,79708,79711,79713,79716,79718,79720,79723,79727,79731,79734,79737,79740,79743,79746,79749,79752,79755,79758,79763,79883,79886,79889,79894,79897,79900,79903,79906,79911,79914,79917,79920,79923,79928,79931,80031,80096,80170,80174,80177,80180,80184,80187,80201,80230,80233,80236,80239,80242,80245,80248,80251,80253,80256,80259,80262,80265,80269,80274,80278,80283,80358,80361,80544,80547,80550,80553,80556,80559,80561,80564,80567,80570,80573,80576,80579,80581,80585,80588,80593,80596,80599,80602,80605,80607,80612,80615,80618,80621,80624,80626,80631,80634,80637,80639,80641,80644,80648,80651,80654,80659,80662,80665,80668,80718,80723,80727,80732,80735,80804,80807,80816,80820,80825,80828,80831,80839,80842,80859,82660,82664,82668,82673,82676,82680,82686,82692,82844,82849,82854,82857,82860,82863,82866,82869,82872,82875,82878,82881,82884,82887,82890,82895,82899,82902,82913,82917,82922,82925,82928,82931,82934,82937,82939,82942,82945,82948,82951,82953,82970,82973,82977,82980,82985,82990,82993,82996,83000,83003,83006,83015,83018,83022,83025,83030,83035,83102,83106,83109,83112,83117,83122,83208,83213,83217,83220,83223,83238,83241,83246,83250,83255,83364,83367,83378,83528,83532,83537,83646,83650,83655,83660,83665,83668,83675,83695,83731,83895,83900,83903,83908,83915,83918,83921,83924,83983,84039,84095,84099,84104,84419,84422,84426,84429,84434,84543,84548,84552,84557,84561,84632,84636,84638,84641,84644,84682,84958,84962,84979,85045,85079,85083,85086,85091,85120,85127,85136,85141,85156,85161,85170,85173,85310,85314,85376,85380,85385,85630,85634,85639,85642,85645,85648,85651,85655,85660,87241,87245,87249,87255,87258,87263,87267,87270,87275,87278,87289,87293,87298,87302,87307,87312,87315,87320,87324,87328,87331,87336,87341,87344,87347,87350,87472,87477,87579,87582,87585,87589,87594,87766,87771,87775,87778,87783,87849,87854,87857,87988,87991,87996,87999,88002,88093,88098,88101,88104,88107,88110,88115,88120,88123,88128,88133,88138,88142,88145,88148,88153,88158,88163,88168,88222,88225,88228,88233,88236,88239,88244,88249,88254,88258,88263,88277,88282,88285,88290,88294,88299,88304,88309,88314,88319,88324,88329,88334,88337,88341,88346,88349,88352,88355,88360,88365,88368,88371,88375,88378,88381,88386,88391,88396,88401,88404,88409,88414,88475,88480,88483,88488,89728,89733,89737,89741,89746,89749,89754,89759,89762,89767,89769,89774,89778,89781,89784,89795,89799,89804,89809,89864,89869,89874,89879,90090,90095,90099,90104,90107,90109,90112,90115,90562,90567,90574,90580,90583,90586,90850,90855,90859,91124,91129,91133,91138,91143,91148,91153,91484,91487,91492,91497,91500,91504,91508,91513,91518,91523,91528,91533,91538,91542,91545,91550,91555,91558,91632,91637,91642,91647,91649,91652,92022,92027,92032,92037,92040,92043,92145,92150,92155,92258,92262,92267,92271,92275,92280,92285,92288,92293,92296,92299,92692,92697,92700,92703,92706,92709,93229,93233,93238,93243,93248,93251,93256,93259,93262,93644,93649,93651,93653,93656,93659,94171,94175,94236,94239,94242,94245,94249,94252,94257,94262,95187],[10,79122,79118],{"id":79123},"_4js进阶",[24,79125,79126],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79128,79130],{"id":79129},"_41-作用域","4.1 作用域",[19,79132,79134],{"id":79133},"_411-局部作用域","4.1.1 局部作用域",[24,79136,79137],{},[40,79138],{"alt":72,"src":79139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[24,79141,79142],{},[40,79143],{"alt":72,"src":79144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[51,79146,79147,79150,79153],{},[54,79148,79149],{},"函数作用域在函数内部",[54,79151,79152],{},"块级作用域在{}",[54,79154,79155],{},"对象的那个{}不是作用域，不是块作用域",[19,79157,79159],{"id":79158},"_412-全局作用域","4.1.2 全局作用域",[24,79161,79162],{},[40,79163],{"alt":72,"src":79164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[24,79166,79167],{},"window.a=10不要这样写",[19,79169,79171],{"id":79170},"_413-作用域链","4.1.3 作用域链",[24,79173,79174],{},"变量查找机制",[24,79176,79177],{},[40,79178],{"alt":72,"src":79179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79181,79183],{"id":79182},"_42-垃圾回收机制","4.2 垃圾回收机制",[19,79185,79187],{"id":79186},"_421-大体介绍","4.2.1 大体介绍",[24,79189,79190],{},"垃圾回收机制(Garbage Collection) 简称 GC",[24,79192,79193],{},[40,79194],{"alt":72,"src":79195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[24,79197,79198],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[19,79200,79202],{"id":79201},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[24,79204,79205],{},"堆栈空间分配区别：",[139,79207,79208,79211],{},[54,79209,79210],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[54,79212,79213],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[24,79215,79216],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24468,79218,79220],{"id":79219},"_4221-引用计数","4.2.2.1 引用计数",[24,79222,79223],{},[40,79224],{"alt":72,"src":79225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[24,79227,79228],{},[40,79229],{"alt":72,"src":79230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[24,79232,79233],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24468,79235,79237],{"id":79236},"_4222-标记清除法","4.2.2.2 标记清除法",[24,79239,79240],{},[40,79241],{"alt":72,"src":79242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[24,79244,79245],{},[40,79246],{"alt":72,"src":79247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[24,79249,79250],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79252,79254],{"id":79253},"_43-闭包","4.3 闭包",[24,79256,79257],{},[40,79258],{"alt":72,"src":79259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[24,79261,79262],{},"闭包：内层函数+外层函数的变量",[24,79264,79265],{},[40,79266],{"alt":72,"src":79267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[24,79269,79270],{},"closure就是闭包",[24,79272,79273],{},[40,79274],{"alt":72,"src":79275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[24,79277,79278],{},"内层函数必须包含外层函数的变量才是闭包",[24,79280,79281],{},[40,79282],{"alt":72,"src":79283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[24,79285,79286],{},[40,79287],{"alt":72,"src":79288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[24,79290,79291],{},"闭包可能会引起内存泄漏",[24,79293,79294],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79296,79298],{"id":79297},"_44-变量提升","4.4 变量提升",[24,79300,79301],{},[40,79302],{"alt":72,"src":79303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[24,79305,79306],{},[40,79307],{"alt":72,"src":79308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[24,79310,79311],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79313,79315],{"id":79314},"_45-函数进阶","4.5 函数进阶",[19,79317,79319],{"id":79318},"_451-函数提升","4.5.1 函数提升",[24,79321,79322],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[24,79324,79325],{},"只提升函数声明，不提升函数调用",[54271,79327,79328],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[19,79330,79332],{"id":79331},"_452-函数参数","4.5.2 函数参数",[24468,79334,79336],{"id":79335},"_4521-动态参数","4.5.2.1 动态参数",[24,79338,79339],{},[40,79340],{"alt":72,"src":79341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[24,79343,79344],{},[40,79345],{"alt":72,"src":79346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[24,79348,79349],{},"箭头函数里边没有arguments",[24468,79351,79353],{"id":79352},"_4522-剩余参数","4.5.2.2 剩余参数",[24,79355,79356],{},[40,79357],{"alt":72,"src":79358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[24,79360,79361],{},[40,79362],{"alt":72,"src":79363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[24,79365,79366],{},"剩余参数使用的时候不需要写...",[24,79368,79369],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[24,79371,79372],{},"  function getSum(a,b,...arr) {",[24,79374,79375],{},"  console.log(11)",[24,79377,79378],{},"  }",[24,79380,79381],{},"  getSum(1,2,3,4)",[24,79383,79384],{},"  将1传给a，2传给b，剩下的传给剩余参数",[24,79386,79387],{},"  getSum(1,2)",[24,79389,79390],{},"  将1传给a，2传给b，剩余参数为一个空数组",[24,79392,79393],{},[40,79394],{"alt":72,"src":79395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24468,79397,79399],{"id":79398},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[24,79401,79402],{},[40,79403],{"alt":72,"src":79404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[24,79406,79407],{},[40,79408],{"alt":72,"src":79409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[24,79411,79412],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[24,79414,79415],{},"展开运算符可以用于数组之间的合并：",[24,79417,79418],{},"const arr1 = [1, 2, 3]",[24,79420,79421],{},"const arr2 = [3, 4, 5]",[24,79423,79424],{},"const arr = [...arr1, ...arr2]",[24,79426,79427],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[24,79429,79430],{},"剩余参数：函数参数使用，得到真数组",[24,79432,79433],{},"展开运算符：数组中使用，数组展开",[19,79435,79437],{"id":79436},"_453-箭头函数","4.5.3 箭头函数",[24468,79439,79441],{"id":79440},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[24,79443,79444],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[24,79446,79447],{},"它不是万能的！！！",[24,79449,79450],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[24,79452,79453],{},[40,79454],{"alt":72,"src":79455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[24,79457,2651],{},[24,79459,79460],{},"① 只有一个形参的时候，可以省略小括号：",[24,79462,79463],{},"const fn=x=>{console.log(x)}",[24,79465,79466],{},"② 只有一行代码时可以省略大括号：",[24,79468,79469],{},"const fn=x=>console.log(11)",[24,79471,79472],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[24,79474,79475],{},"const fn=x=>x+x",[24,79477,79478],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[24,79480,79481],{},"⑤ 阻止表单默认提交：",[24,79483,79484],{},"const form = document.querySelector('form')",[24,79486,79487],{},"form.addEventListener('click', ev => ev.preventDefault())",[24,79489,79490],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[24,79492,79493],{},"const fn=uname=>({uname:uname})",[24,79495,79496],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[24,79498,79499],{},[40,79500],{"alt":72,"src":79501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[24,79503,79504],{},[40,79505],{"alt":72,"src":79506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[24,79508,79509],{},[40,79510],{"alt":72,"src":79511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[24,79513,79514],{},"一定不要忘记用()，有()就理解为自带return",[24468,79516,79518],{"id":79517},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[24,79520,79521],{},"箭头函数是没有动态参数的arguments",[24,79523,79524],{},[40,79525],{"alt":72,"src":79526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24468,79528,79530],{"id":79529},"_4533-箭头函数this","4.5.3.3 箭头函数this",[24,79532,13805],{},[139,79534,79535,79538,79541],{},[54,79536,79537],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[54,79539,79540],{},"事件回调函数使用箭头函数时，this 为全局的 window",[54,79542,79543],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[24,79545,79546],{},[40,79547],{"alt":72,"src":79548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[67,79550,79552],{"className":55525,"code":79551,"language":55527,"meta":72,"style":72},"  \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",[74,79553,79554,79562,79567,79572,79577,79582,79587,79591,79596,79600,79604,79609,79614,79619,79623,79627,79632,79637,79642],{"__ignoreMap":72},[77,79555,79556,79558,79560],{"class":79,"line":80},[77,79557,54602],{"class":87},[77,79559,54271],{"class":158},[77,79561,291],{"class":87},[77,79563,79564],{"class":79,"line":91},[77,79565,79566],{"class":87},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[77,79568,79569],{"class":79,"line":107},[77,79570,79571],{"class":87},"    console.log(this) \u002F\u002F指向window\n",[77,79573,79574],{"class":79,"line":191},[77,79575,79576],{"class":87},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[77,79578,79579],{"class":79,"line":1543},[77,79580,79581],{"class":87},"    function fn() {\n",[77,79583,79584],{"class":79,"line":1549},[77,79585,79586],{"class":87},"      console.log(this)  \u002F\u002F指向window\n",[77,79588,79589],{"class":79,"line":1566},[77,79590,4662],{"class":87},[77,79592,79593],{"class":79,"line":1572},[77,79594,79595],{"class":87},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[77,79597,79598],{"class":79,"line":1589},[77,79599,4875],{"emptyLinePlaceholder":2549},[77,79601,79602],{"class":79,"line":1595},[77,79603,73962],{"class":87},[77,79605,79606],{"class":79,"line":4088},[77,79607,79608],{"class":87},"      name: 'andy',\n",[77,79610,79611],{"class":79,"line":4093},[77,79612,79613],{"class":87},"      sayHai: function () {\n",[77,79615,79616],{"class":79,"line":4099},[77,79617,79618],{"class":87},"        console.log(this)\n",[77,79620,79621],{"class":79,"line":4104},[77,79622,54856],{"class":87},[77,79624,79625],{"class":79,"line":4118},[77,79626,4662],{"class":87},[77,79628,79629],{"class":79,"line":4123},[77,79630,79631],{"class":87},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[77,79633,79634],{"class":79,"line":4129},[77,79635,79636],{"class":87},"    \u002F\u002F 2.箭头函数的this\n",[77,79638,79639],{"class":79,"line":4150},[77,79640,79641],{"class":87},"    const fn = () => console.log(this)\n",[77,79643,79644,79646,79648],{"class":79,"line":4155},[77,79645,54875],{"class":87},[77,79647,54271],{"class":158},[77,79649,291],{"class":87},[24,79651,79652],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[24,79654,79655],{},"const fn = () => console.log(this)",[24,79657,79658],{},"fn() \u002F\u002F指向window",[24,79660,79661],{},"\u002F\u002F 3.对象方法箭头函数 this",[24,79663,79664],{},"①",[24,79666,79667],{},"const obj = {",[24,79669,79670],{},"uname: 'pink老师',",[24,79672,79673],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[24,79675,3558],{},[24,79677,79678],{},"调用对象里边的函数",[24,79680,79681],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[24,79683,79684],{},"obj.sayHai()",[24,79686,79687],{},"②",[24,79689,79690],{},"const obj1 = {",[24,79692,79670],{},[24,79694,79695],{},"sayHai: function () {",[24,79697,79698],{},"let i = 10",[24,79700,79701],{},"const count = () => {",[24,79703,79704],{},"console.log(this)",[24,79706,79707],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[24,79709,79710],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[24,79712,3558],{},[24,79714,79715],{},"count()",[24,79717,3558],{},[24,79719,3558],{},[24,79721,79722],{},"obj1.sayHai()",[14,79724,79726],{"id":79725},"_46-解构赋值","4.6 解构赋值",[19,79728,79730],{"id":79729},"_461-数组解构","4.6.1 数组解构",[24,79732,79733],{},"以前要是使用数组中的值的话：",[24,79735,79736],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[24,79738,79739],{},"const arr=[100,60,80]",[24,79741,79742],{},"const max=arr[0]",[24,79744,79745],{},"const min=arr[1]",[24,79747,79748],{},"const avg=arr[2]",[24,79750,79751],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[24,79753,79754],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[24,79756,79757],{},"这个写法就类似于上边的那种用很多const的方法",[24,79759,79760],{},[40,79761],{"alt":72,"src":79762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[67,79764,79766],{"className":53099,"code":79765,"language":53101,"meta":72,"style":72},"①变量之间交换值:\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",[74,79767,79768,79773,79778,79783,79788,79793,79797,79801,79806,79810,79815,79820,79824,79829,79834,79845,79855,79860,79865,79870,79874,79878],{"__ignoreMap":72},[77,79769,79770],{"class":79,"line":80},[77,79771,79772],{"class":87},"①变量之间交换值:\n",[77,79774,79775],{"class":79,"line":91},[77,79776,79777],{"class":87},"let a=1\n",[77,79779,79780],{"class":79,"line":107},[77,79781,79782],{"class":87},"let b=2;\n",[77,79784,79785],{"class":79,"line":191},[77,79786,79787],{"class":87},"必须加这行代码，不然就会报错\n",[77,79789,79790],{"class":79,"line":1543},[77,79791,79792],{"class":87},"[b,a]=[a,b]\n",[77,79794,79795],{"class":79,"line":1549},[77,79796,4875],{"emptyLinePlaceholder":2549},[77,79798,79799],{"class":79,"line":1566},[77,79800,4875],{"emptyLinePlaceholder":2549},[77,79802,79803],{"class":79,"line":1572},[77,79804,79805],{"class":87},"可以写成下面的方式：\n",[77,79807,79808],{"class":79,"line":1589},[77,79809,79777],{"class":87},[77,79811,79812],{"class":79,"line":1595},[77,79813,79814],{"class":87},"let b=2\n",[77,79816,79817],{"class":79,"line":4088},[77,79818,79819],{"class":87},";[b,a]=[a,b]\n",[77,79821,79822],{"class":79,"line":4093},[77,79823,4875],{"emptyLinePlaceholder":2549},[77,79825,79826],{"class":79,"line":4099},[77,79827,79828],{"class":87},"②排序\n",[77,79830,79831],{"class":79,"line":4104},[77,79832,79833],{"class":87},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[77,79835,79836,79839,79842],{"class":79,"line":4118},[77,79837,79838],{"class":87},"for (let i = 0; i ",[77,79840,260],{"class":79841},"s7hpK",[77,79843,79844],{"class":87}," arr1.length; i++) {\n",[77,79846,79847,79850,79852],{"class":79,"line":4123},[77,79848,79849],{"class":87},"   for (let j = 0; j ",[77,79851,260],{"class":79841},[77,79853,79854],{"class":87}," arr1.length - 1; j++) {\n",[77,79856,79857],{"class":79,"line":4129},[77,79858,79859],{"class":87},"      if (arr1[j] > arr1[j + 1]) {\n",[77,79861,79862],{"class":79,"line":4150},[77,79863,79864],{"class":87},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[77,79866,79867],{"class":79,"line":4155},[77,79868,79869],{"class":87},"       }\n",[77,79871,79872],{"class":79,"line":4169},[77,79873,6784],{"class":87},[77,79875,79876],{"class":79,"line":4174},[77,79877,110],{"class":87},[77,79879,79880],{"class":79,"line":4203},[77,79881,79882],{"class":87},"console.log(arr1)\n",[24,79884,79885],{},"数组解构的细节：",[24,79887,79888],{},"①变量多，单元值少",[24,79890,79891],{},[40,79892],{"alt":72,"src":79893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[24,79895,79896],{},"防止出现undefined的方法：",[24,79898,79899],{},"const [a=0,b=0] =[1]",[24,79901,79902],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[24,79904,79905],{},"②变量少，单元值多",[24,79907,79908],{},[40,79909],{"alt":72,"src":79910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[24,79912,79913],{},"此时可以使用剩余参数来接收多余的值",[24,79915,79916],{},"const [a,b,...c]=[1,2,3,4]",[24,79918,79919],{},"console.log(c) 输出[3,4]",[24,79921,79922],{},"③可以按需导入，忽略某些返回值",[24,79924,79925],{},[40,79926],{"alt":72,"src":79927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[24,79929,79930],{},"④支持多维数组的结构",[67,79932,79936],{"className":79933,"code":79934,"language":79935,"meta":72,"style":72},"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",[74,79937,79938,79966,79982,79997,80012],{"__ignoreMap":72},[77,79939,79940,79942,79944,79946,79948,79950,79952,79954,79957,79959,79961,79963],{"class":79,"line":80},[77,79941,9267],{"class":2123},[77,79943,54291],{"class":87},[77,79945,268],{"class":2123},[77,79947,54684],{"class":87},[77,79949,2120],{"class":94},[77,79951,680],{"class":87},[77,79953,2696],{"class":94},[77,79955,79956],{"class":87},", [",[77,79958,2690],{"class":94},[77,79960,680],{"class":87},[77,79962,2907],{"class":94},[77,79964,79965],{"class":87},"]]\n",[77,79967,79968,79971,79973,79975,79977,79979],{"class":79,"line":91},[77,79969,79970],{"class":87},"console.",[77,79972,60695],{"class":83},[77,79974,6326],{"class":87},[77,79976,1939],{"class":94},[77,79978,6691],{"class":87},[77,79980,79981],{"class":323},"  \u002F\u002F1\n",[77,79983,79984,79986,79988,79990,79992,79994],{"class":79,"line":107},[77,79985,79970],{"class":87},[77,79987,60695],{"class":83},[77,79989,6326],{"class":87},[77,79991,2120],{"class":94},[77,79993,6691],{"class":87},[77,79995,79996],{"class":323},"  \u002F\u002F2\n",[77,79998,79999,80001,80003,80005,80007,80009],{"class":79,"line":191},[77,80000,79970],{"class":87},[77,80002,60695],{"class":83},[77,80004,6326],{"class":87},[77,80006,2696],{"class":94},[77,80008,6691],{"class":87},[77,80010,80011],{"class":323},"  \u002F\u002F[3,4]\n",[77,80013,80014,80016,80018,80020,80022,80024,80026,80028],{"class":79,"line":1543},[77,80015,79970],{"class":87},[77,80017,60695],{"class":83},[77,80019,6326],{"class":87},[77,80021,2696],{"class":94},[77,80023,7376],{"class":87},[77,80025,1939],{"class":94},[77,80027,6691],{"class":87},[77,80029,80030],{"class":323},"  \u002F\u002F3\n",[67,80032,80034],{"className":79933,"code":80033,"language":79935,"meta":72,"style":72},"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",[74,80035,80036,80063,80074,80085],{"__ignoreMap":72},[77,80037,80038,80040,80043,80045,80047,80049,80051,80053,80055,80057,80059,80061],{"class":79,"line":80},[77,80039,9267],{"class":2123},[77,80041,80042],{"class":87}," [a, b, c] ",[77,80044,268],{"class":2123},[77,80046,54684],{"class":87},[77,80048,2120],{"class":94},[77,80050,680],{"class":87},[77,80052,2696],{"class":94},[77,80054,79956],{"class":87},[77,80056,2690],{"class":94},[77,80058,680],{"class":87},[77,80060,2907],{"class":94},[77,80062,79965],{"class":87},[77,80064,80065,80067,80069,80072],{"class":79,"line":91},[77,80066,79970],{"class":87},[77,80068,60695],{"class":83},[77,80070,80071],{"class":87},"(a)",[77,80073,79981],{"class":323},[77,80075,80076,80078,80080,80083],{"class":79,"line":107},[77,80077,79970],{"class":87},[77,80079,60695],{"class":83},[77,80081,80082],{"class":87},"(b)",[77,80084,79996],{"class":323},[77,80086,80087,80089,80091,80094],{"class":79,"line":191},[77,80088,79970],{"class":87},[77,80090,60695],{"class":83},[77,80092,80093],{"class":87},"(c)",[77,80095,80011],{"class":323},[67,80097,80099],{"className":79933,"code":80098,"language":79935,"meta":72,"style":72},"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",[74,80100,80101,80128,80138,80148,80158],{"__ignoreMap":72},[77,80102,80103,80105,80108,80110,80112,80114,80116,80118,80120,80122,80124,80126],{"class":79,"line":80},[77,80104,9267],{"class":2123},[77,80106,80107],{"class":87}," [a, b, [c, d]] ",[77,80109,268],{"class":2123},[77,80111,54684],{"class":87},[77,80113,2120],{"class":94},[77,80115,680],{"class":87},[77,80117,2696],{"class":94},[77,80119,79956],{"class":87},[77,80121,2690],{"class":94},[77,80123,680],{"class":87},[77,80125,2907],{"class":94},[77,80127,79965],{"class":87},[77,80129,80130,80132,80134,80136],{"class":79,"line":91},[77,80131,79970],{"class":87},[77,80133,60695],{"class":83},[77,80135,80071],{"class":87},[77,80137,79981],{"class":323},[77,80139,80140,80142,80144,80146],{"class":79,"line":107},[77,80141,79970],{"class":87},[77,80143,60695],{"class":83},[77,80145,80082],{"class":87},[77,80147,79996],{"class":323},[77,80149,80150,80152,80154,80156],{"class":79,"line":191},[77,80151,79970],{"class":87},[77,80153,60695],{"class":83},[77,80155,80093],{"class":87},[77,80157,80030],{"class":323},[77,80159,80160,80162,80164,80167],{"class":79,"line":1543},[77,80161,79970],{"class":87},[77,80163,60695],{"class":83},[77,80165,80166],{"class":87},"(d)",[77,80168,80169],{"class":323},"  \u002F\u002F4\n",[19,80171,80173],{"id":80172},"_462-对象解构","4.6.2 对象解构",[24,80175,80176],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[24,80178,80179],{},"用的非常非常多！！！！！！",[24468,80181,80183],{"id":80182},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[24,80185,80186],{},"基本语法：",[139,80188,80189,80192,80195,80198],{},[54,80190,80191],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[54,80193,80194],{},"对象属性的值将被赋值给与属性名相同的变量",[54,80196,80197],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[54,80199,80200],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[67,80202,80204],{"className":53099,"code":80203,"language":53101,"meta":72,"style":72},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[74,80205,80206,80211,80216,80221,80225],{"__ignoreMap":72},[77,80207,80208],{"class":79,"line":80},[77,80209,80210],{"class":87},"const obj = {\n",[77,80212,80213],{"class":79,"line":91},[77,80214,80215],{"class":87},"   uname: 'pink老师',\n",[77,80217,80218],{"class":79,"line":107},[77,80219,80220],{"class":87},"   age: 18,\n",[77,80222,80223],{"class":79,"line":191},[77,80224,110],{"class":87},[77,80226,80227],{"class":79,"line":1543},[77,80228,80229],{"class":87},"const { uname, age } = obj\n",[24,80231,80232],{},"上方代码这样写等价于：",[24,80234,80235],{},"const uname等价于obj.uname",[24,80237,80238],{},"变量名可以重新改名：",[24,80240,80241],{},"const uname='red老师'",[24,80243,80244],{},"const user={",[24,80246,80247],{},"  uname:'pink老师',",[24,80249,80250],{},"  age:18",[24,80252,3558],{},[24,80254,80255],{},"const {uname,age}=user",[24,80257,80258],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[24,80260,80261],{},"const {旧变量名：新变量名}=对象",[24,80263,80264],{},"const {uname:username,age}=user",[24468,80266,80268],{"id":80267},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[24,80270,80271],{},[40,80272],{"alt":72,"src":80273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24468,80275,80277],{"id":80276},"_4623-多级对象解构","4.6.2.3 多级对象解构",[24,80279,80280],{},[40,80281],{"alt":72,"src":80282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[67,80284,80286],{"className":55525,"code":80285,"language":55527,"meta":72,"style":72},"  \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",[74,80287,80288,80296,80301,80306,80311,80316,80321,80326,80331,80336,80340,80345,80350],{"__ignoreMap":72},[77,80289,80290,80292,80294],{"class":79,"line":80},[77,80291,54602],{"class":87},[77,80293,54271],{"class":158},[77,80295,291],{"class":87},[77,80297,80298],{"class":79,"line":91},[77,80299,80300],{"class":87},"    const pig = {\n",[77,80302,80303],{"class":79,"line":107},[77,80304,80305],{"class":87},"      name: '佩奇',\n",[77,80307,80308],{"class":79,"line":191},[77,80309,80310],{"class":87},"      family: {\n",[77,80312,80313],{"class":79,"line":1543},[77,80314,80315],{"class":87},"        mother: '猪妈妈',\n",[77,80317,80318],{"class":79,"line":1549},[77,80319,80320],{"class":87},"        father: '猪爸爸',\n",[77,80322,80323],{"class":79,"line":1566},[77,80324,80325],{"class":87},"        sister: '乔治'\n",[77,80327,80328],{"class":79,"line":1572},[77,80329,80330],{"class":87},"      },\n",[77,80332,80333],{"class":79,"line":1589},[77,80334,80335],{"class":87},"      age: 6\n",[77,80337,80338],{"class":79,"line":1595},[77,80339,4662],{"class":87},[77,80341,80342],{"class":79,"line":4088},[77,80343,80344],{"class":87},"    \u002F\u002F 多级对象解构\n",[77,80346,80347],{"class":79,"line":4093},[77,80348,80349],{"class":87},"    const { name, family: { mother, father, sister }, age } = pig\n",[77,80351,80352,80354,80356],{"class":79,"line":4099},[77,80353,54875],{"class":87},[77,80355,54271],{"class":158},[77,80357,291],{"class":87},[24,80359,80360],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[67,80362,80365],{"className":80363,"code":80364,"language":78885,"meta":72,"style":72},"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",[74,80366,80367,80372,80383,80395,80407,80416,80420,80431,80443,80453,80458,80462,80472,80483,80492,80496,80500,80511,80522,80531,80535,80540],{"__ignoreMap":72},[77,80368,80369],{"class":79,"line":80},[77,80370,80371],{"class":323},"    \u002F\u002F 这是后台传递过来的数据\n",[77,80373,80374,80376,80379,80381],{"class":79,"line":91},[77,80375,13694],{"class":2123},[77,80377,80378],{"class":87}," msg ",[77,80380,268],{"class":2123},[77,80382,88],{"class":87},[77,80384,80385,80388,80390,80393],{"class":79,"line":107},[77,80386,80387],{"class":271},"      \"code\"",[77,80389,3472],{"class":2123},[77,80391,80392],{"class":94}," 200",[77,80394,33933],{"class":87},[77,80396,80397,80400,80402,80405],{"class":79,"line":191},[77,80398,80399],{"class":271},"      \"msg\"",[77,80401,3472],{"class":2123},[77,80403,80404],{"class":271}," \"获取新闻列表成功\"",[77,80406,33933],{"class":87},[77,80408,80409,80412,80414],{"class":79,"line":1543},[77,80410,80411],{"class":271},"      \"data\"",[77,80413,3472],{"class":2123},[77,80415,57895],{"class":87},[77,80417,80418],{"class":79,"line":1549},[77,80419,4985],{"class":87},[77,80421,80422,80425,80427,80429],{"class":79,"line":1566},[77,80423,80424],{"class":271},"          \"id\"",[77,80426,3472],{"class":2123},[77,80428,27586],{"class":94},[77,80430,33933],{"class":87},[77,80432,80433,80436,80438,80441],{"class":79,"line":1572},[77,80434,80435],{"class":271},"          \"title\"",[77,80437,3472],{"class":2123},[77,80439,80440],{"class":271}," \"5G商用自己，三大运用商收入下降\"",[77,80442,33933],{"class":87},[77,80444,80445,80448,80450],{"class":79,"line":1589},[77,80446,80447],{"class":271},"          \"count\"",[77,80449,3472],{"class":2123},[77,80451,80452],{"class":94}," 58\n",[77,80454,80455],{"class":79,"line":1595},[77,80456,80457],{"class":87},"        },\n",[77,80459,80460],{"class":79,"line":4088},[77,80461,4985],{"class":87},[77,80463,80464,80466,80468,80470],{"class":79,"line":4093},[77,80465,80424],{"class":271},[77,80467,3472],{"class":2123},[77,80469,17227],{"class":94},[77,80471,33933],{"class":87},[77,80473,80474,80476,80478,80481],{"class":79,"line":4099},[77,80475,80435],{"class":271},[77,80477,3472],{"class":2123},[77,80479,80480],{"class":271}," \"国际媒体头条速览\"",[77,80482,33933],{"class":87},[77,80484,80485,80487,80489],{"class":79,"line":4104},[77,80486,80447],{"class":271},[77,80488,3472],{"class":2123},[77,80490,80491],{"class":94}," 56\n",[77,80493,80494],{"class":79,"line":4118},[77,80495,80457],{"class":87},[77,80497,80498],{"class":79,"line":4123},[77,80499,4985],{"class":87},[77,80501,80502,80504,80506,80509],{"class":79,"line":4129},[77,80503,80424],{"class":271},[77,80505,3472],{"class":2123},[77,80507,80508],{"class":94}," 3",[77,80510,33933],{"class":87},[77,80512,80513,80515,80517,80520],{"class":79,"line":4150},[77,80514,80435],{"class":271},[77,80516,3472],{"class":2123},[77,80518,80519],{"class":271}," \"乌克兰和俄罗斯持续冲突\"",[77,80521,33933],{"class":87},[77,80523,80524,80526,80528],{"class":79,"line":4155},[77,80525,80447],{"class":271},[77,80527,3472],{"class":2123},[77,80529,80530],{"class":94}," 1669\n",[77,80532,80533],{"class":79,"line":4169},[77,80534,80457],{"class":87},[77,80536,80537],{"class":79,"line":4174},[77,80538,80539],{"class":87},"      ]\n",[77,80541,80542],{"class":79,"line":4203},[77,80543,4662],{"class":87},[24,80545,80546],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[24,80548,80549],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[24,80551,80552],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[24,80554,80555],{},"function({data}) {",[24,80557,80558],{},"console.log(data)",[24,80560,3558],{},[24,80562,80563],{},"render(msg)",[24,80565,80566],{},"实参传递给形参的时候解构了",[24,80568,80569],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[24,80571,80572],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[24,80574,80575],{},"function render({data:mydata}) {",[24,80577,80578],{},"  console.log(data)",[24,80580,3558],{},[19,80582,80584],{"id":80583},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[24,80586,80587],{},"有两种情况：一个是数组结构，一个是立即执行函数",[139,80589,80590],{},[54,80591,80592],{},"如果对一个数组进行遍历，有两种方式：",[24,80594,80595],{},"①法1",[24,80597,80598],{},"const arr=[1,2,3]",[24,80600,80601],{},"arr.map(function(item,index) {",[24,80603,80604],{},"  console.log(item)",[24,80606,54922],{},[24,80608,80609],{},[40,80610],{"alt":72,"src":80611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[24,80613,80614],{},"②法2",[24,80616,80617],{},"const str='pink'",[24,80619,80620],{},"[1,2,3].map(function(item,index) {",[24,80622,80623],{},"console.log(item)",[24,80625,54922],{},[24,80627,80628],{},[40,80629],{"alt":72,"src":80630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[24,80632,80633],{},"此时会报错",[24,80635,80636],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[24,80638,80623],{},[24,80640,54922],{},[24,80642,80643],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80645,80647],{"id":80646},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[24,80649,80650],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[24,80652,80653],{},"可以理解为加强版的for循环",[24,80655,80656],{},[40,80657],{"alt":72,"src":80658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[24,80660,80661],{},"里边不写return，不返回数组，只遍历不返回",[24,80663,80664],{},"map是返回数组",[24,80666,80667],{},"forEach主要用于遍历数组对象",[67,80669,80671],{"className":55525,"code":80670,"language":55527,"meta":72,"style":72},"  \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",[74,80672,80673,80681,80686,80691,80696,80701,80705,80710],{"__ignoreMap":72},[77,80674,80675,80677,80679],{"class":79,"line":80},[77,80676,54602],{"class":87},[77,80678,54271],{"class":158},[77,80680,291],{"class":87},[77,80682,80683],{"class":79,"line":91},[77,80684,80685],{"class":87},"    const arr = ['red', 'green', 'pink']\n",[77,80687,80688],{"class":79,"line":107},[77,80689,80690],{"class":87},"    const result = arr.forEach(function (item, index) {\n",[77,80692,80693],{"class":79,"line":191},[77,80694,80695],{"class":87},"      console.log(item)\n",[77,80697,80698],{"class":79,"line":1543},[77,80699,80700],{"class":87},"      console.log(index)\n",[77,80702,80703],{"class":79,"line":1549},[77,80704,35928],{"class":87},[77,80706,80707],{"class":79,"line":1566},[77,80708,80709],{"class":87},"    console.log(result)\n",[77,80711,80712,80714,80716],{"class":79,"line":1572},[77,80713,54875],{"class":87},[77,80715,54271],{"class":158},[77,80717,291],{"class":87},[24,80719,80720],{},[40,80721],{"alt":72,"src":80722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80724,80726],{"id":80725},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[24,80728,80729],{},[40,80730],{"alt":72,"src":80731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[24,80733,80734],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[67,80736,80738],{"className":55525,"code":80737,"language":55527,"meta":72,"style":72},"\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",[74,80739,80740,80748,80756,80761,80766,80770,80774,80779,80783,80788,80796],{"__ignoreMap":72},[77,80741,80742,80744,80746],{"class":79,"line":80},[77,80743,260],{"class":87},[77,80745,54258],{"class":158},[77,80747,291],{"class":87},[77,80749,80750,80752,80754],{"class":79,"line":91},[77,80751,54602],{"class":87},[77,80753,54271],{"class":158},[77,80755,291],{"class":87},[77,80757,80758],{"class":79,"line":107},[77,80759,80760],{"class":87},"    const arr = [10, 20, 30]\n",[77,80762,80763],{"class":79,"line":191},[77,80764,80765],{"class":87},"    const newArr = arr.filter(function (item, index) {\n",[77,80767,80768],{"class":79,"line":1543},[77,80769,80695],{"class":87},[77,80771,80772],{"class":79,"line":1549},[77,80773,80700],{"class":87},[77,80775,80776],{"class":79,"line":1566},[77,80777,80778],{"class":87},"      return item >= 20\n",[77,80780,80781],{"class":79,"line":1572},[77,80782,35928],{"class":87},[77,80784,80785],{"class":79,"line":1589},[77,80786,80787],{"class":87},"    console.log(newArr)\n",[77,80789,80790,80792,80794],{"class":79,"line":1595},[77,80791,54875],{"class":87},[77,80793,54271],{"class":158},[77,80795,291],{"class":87},[77,80797,80798,80800,80802],{"class":79,"line":4088},[77,80799,351],{"class":87},[77,80801,54258],{"class":158},[77,80803,291],{"class":87},[24,80805,80806],{},"这个也可以写成箭头函数：",[67,80808,80810],{"className":53099,"code":80809,"language":53101,"meta":72,"style":72},"const newArr = arr.filter(item => item >= 20)\n",[74,80811,80812],{"__ignoreMap":72},[77,80813,80814],{"class":79,"line":80},[77,80815,80809],{"class":87},[14,80817,80819],{"id":80818},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[24,80821,80822],{},[40,80823],{"alt":72,"src":80824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[24,80826,80827],{},"步骤：",[24,80829,80830],{},"①：渲染页面模块",[51,80832,80833,80836],{},[54,80834,80835],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[54,80837,80838],{},"用forEach+字符串的形式",[24,80840,80841],{},"②：点击不同需求，显示不同页面内容",[51,80843,80844,80847,80850,80853,80856],{},[54,80845,80846],{},"点击采取事件委托方式 .filter",[54,80848,80849],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[54,80851,80852],{},"筛选条件是根据点击的 data-index 来判断",[54,80854,80855],{},"可以使用对象解构，把事件对象解构",[54,80857,80858],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[67,80860,80862],{"className":53099,"code":80861,"language":53101,"meta":72,"style":72},"\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",[74,80863,80864,80874,80888,80892,80900,80914,80934,80946,80954,80960,80970,80980,80990,80994,80998,81004,81017,81029,81039,81051,81055,81059,81066,81079,81091,81108,81126,81139,81143,81147,81159,81169,81173,81177,81184,81225,81252,81262,81266,81270,81278,81290,81294,81298,81306,81318,81330,81341,81345,81349,81358,81370,81381,81385,81389,81398,81410,81422,81426,81430,81437,81447,81459,81471,81486,81490,81494,81502,81518,81528,81538,81548,81560,81564,81568,81578,81589,81599,81603,81611,81619,81623,81631,81646,81672,81697,81722,81741,81749,81763,81768,81773,81778,81783,81788,81796,81804,81809,81820,81825,81835,81845,81855,81865,81869,81873,81882,81891,81900,81909,81913,81917,81926,81935,81944,81953,81957,81961,81970,81979,81988,81997,82001,82005,82014,82023,82032,82041,82045,82049,82058,82067,82076,82085,82089,82093,82102,82111,82120,82129,82133,82137,82146,82155,82163,82172,82176,82180,82184,82189,82201,82206,82218,82222,82239,82266,82275,82280,82290,82300,82309,82314,82319,82323,82328,82345,82349,82354,82362,82367,82394,82399,82419,82424,82436,82441,82446,82451,82462,82476,82513,82531,82564,82581,82605,82609,82614,82620,82624,82628,82632,82640,82648,82652],{"__ignoreMap":72},[77,80865,80866,80868,80870,80872],{"class":79,"line":80},[77,80867,53763],{"class":87},[77,80869,53766],{"class":158},[77,80871,53769],{"class":83},[77,80873,291],{"class":87},[77,80875,80876,80878,80880,80882,80884,80886],{"class":79,"line":91},[77,80877,260],{"class":87},[77,80879,53101],{"class":158},[77,80881,53780],{"class":83},[77,80883,268],{"class":87},[77,80885,53785],{"class":271},[77,80887,291],{"class":87},[77,80889,80890],{"class":79,"line":107},[77,80891,4875],{"emptyLinePlaceholder":2549},[77,80893,80894,80896,80898],{"class":79,"line":191},[77,80895,260],{"class":87},[77,80897,53798],{"class":158},[77,80899,291],{"class":87},[77,80901,80902,80904,80906,80908,80910,80912],{"class":79,"line":1543},[77,80903,54602],{"class":87},[77,80905,53808],{"class":158},[77,80907,53811],{"class":83},[77,80909,268],{"class":87},[77,80911,53816],{"class":271},[77,80913,291],{"class":87},[77,80915,80916,80918,80920,80922,80924,80926,80928,80930,80932],{"class":79,"line":1549},[77,80917,54602],{"class":87},[77,80919,53808],{"class":158},[77,80921,2495],{"class":83},[77,80923,268],{"class":87},[77,80925,53855],{"class":271},[77,80927,53835],{"class":83},[77,80929,268],{"class":87},[77,80931,53862],{"class":271},[77,80933,291],{"class":87},[77,80935,80936,80938,80940,80942,80944],{"class":79,"line":1566},[77,80937,54602],{"class":87},[77,80939,53871],{"class":158},[77,80941,53874],{"class":87},[77,80943,53871],{"class":158},[77,80945,291],{"class":87},[77,80947,80948,80950,80952],{"class":79,"line":1572},[77,80949,54602],{"class":87},[77,80951,2520],{"class":158},[77,80953,291],{"class":87},[77,80955,80956,80958],{"class":79,"line":1589},[77,80957,8878],{"class":158},[77,80959,88],{"class":87},[77,80961,80962,80964,80966,80968],{"class":79,"line":1595},[77,80963,57149],{"class":94},[77,80965,98],{"class":87},[77,80967,1939],{"class":94},[77,80969,104],{"class":87},[77,80971,80972,80974,80976,80978],{"class":79,"line":4088},[77,80973,57160],{"class":94},[77,80975,98],{"class":87},[77,80977,1939],{"class":94},[77,80979,104],{"class":87},[77,80981,80982,80984,80986,80988],{"class":79,"line":4093},[77,80983,75035],{"class":94},[77,80985,98],{"class":87},[77,80987,62953],{"class":94},[77,80989,104],{"class":87},[77,80991,80992],{"class":79,"line":4099},[77,80993,4662],{"class":87},[77,80995,80996],{"class":79,"line":4104},[77,80997,4875],{"emptyLinePlaceholder":2549},[77,80999,81000,81002],{"class":79,"line":4118},[77,81001,64567],{"class":83},[77,81003,88],{"class":87},[77,81005,81006,81008,81010,81013,81015],{"class":79,"line":4123},[77,81007,57223],{"class":94},[77,81009,98],{"class":87},[77,81011,81012],{"class":94},"990",[77,81014,2124],{"class":2123},[77,81016,104],{"class":87},[77,81018,81019,81021,81023,81025,81027],{"class":79,"line":4129},[77,81020,57160],{"class":94},[77,81022,98],{"class":87},[77,81024,1939],{"class":94},[77,81026,1942],{"class":94},[77,81028,104],{"class":87},[77,81030,81031,81033,81035,81037],{"class":79,"line":4150},[77,81032,57459],{"class":94},[77,81034,98],{"class":87},[77,81036,53940],{"class":94},[77,81038,104],{"class":87},[77,81040,81041,81044,81046,81049],{"class":79,"line":4155},[77,81042,81043],{"class":94},"      flex-wrap",[77,81045,98],{"class":87},[77,81047,81048],{"class":94},"wrap",[77,81050,104],{"class":87},[77,81052,81053],{"class":79,"line":4169},[77,81054,4662],{"class":87},[77,81056,81057],{"class":79,"line":4174},[77,81058,4875],{"emptyLinePlaceholder":2549},[77,81060,81061,81064],{"class":79,"line":4203},[77,81062,81063],{"class":83},"    .item",[77,81065,88],{"class":87},[77,81067,81068,81070,81072,81075,81077],{"class":79,"line":4208},[77,81069,57223],{"class":94},[77,81071,98],{"class":87},[77,81073,81074],{"class":94},"240",[77,81076,2124],{"class":2123},[77,81078,104],{"class":87},[77,81080,81081,81083,81085,81087,81089],{"class":79,"line":4225},[77,81082,64444],{"class":94},[77,81084,98],{"class":87},[77,81086,3059],{"class":94},[77,81088,2124],{"class":2123},[77,81090,104],{"class":87},[77,81092,81093,81095,81097,81099,81101,81104,81106],{"class":79,"line":4230},[77,81094,57149],{"class":94},[77,81096,98],{"class":87},[77,81098,3313],{"class":94},[77,81100,2124],{"class":2123},[77,81102,81103],{"class":94}," 30",[77,81105,2124],{"class":2123},[77,81107,104],{"class":87},[77,81109,81110,81112,81114,81116,81119,81122,81124],{"class":79,"line":4235},[77,81111,64305],{"class":94},[77,81113,98],{"class":87},[77,81115,30589],{"class":94},[77,81117,81118],{"class":94}," ease",[77,81120,81121],{"class":94}," .5",[77,81123,3308],{"class":2123},[77,81125,104],{"class":87},[77,81127,81128,81131,81133,81135,81137],{"class":79,"line":4240},[77,81129,81130],{"class":94},"      margin-bottom",[77,81132,98],{"class":87},[77,81134,3313],{"class":94},[77,81136,2124],{"class":2123},[77,81138,104],{"class":87},[77,81140,81141],{"class":79,"line":4254},[77,81142,4662],{"class":87},[77,81144,81145],{"class":79,"line":4259},[77,81146,4875],{"emptyLinePlaceholder":2549},[77,81148,81149,81152,81154,81157],{"class":79,"line":5052},[77,81150,81151],{"class":83},"    .item:nth-child",[77,81153,2622],{"class":87},[77,81155,81156],{"class":94},"4n",[77,81158,14914],{"class":87},[77,81160,81161,81163,81165,81167],{"class":79,"line":5066},[77,81162,64444],{"class":94},[77,81164,98],{"class":87},[77,81166,1939],{"class":94},[77,81168,104],{"class":87},[77,81170,81171],{"class":79,"line":5074},[77,81172,4662],{"class":87},[77,81174,81175],{"class":79,"line":5079},[77,81176,4875],{"emptyLinePlaceholder":2549},[77,81178,81179,81182],{"class":79,"line":5085},[77,81180,81181],{"class":83},"    .item:hover",[77,81183,88],{"class":87},[77,81185,81186,81189,81191,81193,81195,81197,81199,81201,81203,81206,81208,81210,81212,81214,81216,81218,81220,81223],{"class":79,"line":5091},[77,81187,81188],{"class":94},"      box-shadow",[77,81190,98],{"class":87},[77,81192,1939],{"class":94},[77,81194,2124],{"class":2123},[77,81196,6568],{"class":94},[77,81198,2124],{"class":2123},[77,81200,4623],{"class":94},[77,81202,2124],{"class":2123},[77,81204,81205],{"class":94}," rgba",[77,81207,2622],{"class":87},[77,81209,1939],{"class":94},[77,81211,680],{"class":87},[77,81213,1939],{"class":94},[77,81215,680],{"class":87},[77,81217,1939],{"class":94},[77,81219,680],{"class":87},[77,81221,81222],{"class":94},".2",[77,81224,5194],{"class":87},[77,81226,81227,81230,81232,81235,81237,81239,81241,81244,81246,81248,81250],{"class":79,"line":5096},[77,81228,81229],{"class":94},"      transform",[77,81231,98],{"class":87},[77,81233,81234],{"class":94},"translate3d",[77,81236,2622],{"class":87},[77,81238,1939],{"class":94},[77,81240,680],{"class":87},[77,81242,81243],{"class":94},"-4",[77,81245,2124],{"class":2123},[77,81247,680],{"class":87},[77,81249,1939],{"class":94},[77,81251,5194],{"class":87},[77,81253,81254,81256,81258,81260],{"class":79,"line":10422},[77,81255,64469],{"class":94},[77,81257,98],{"class":87},[77,81259,64474],{"class":94},[77,81261,104],{"class":87},[77,81263,81264],{"class":79,"line":10446},[77,81265,4662],{"class":87},[77,81267,81268],{"class":79,"line":10451},[77,81269,4875],{"emptyLinePlaceholder":2549},[77,81271,81272,81274,81276],{"class":79,"line":10457},[77,81273,81063],{"class":83},[77,81275,58063],{"class":158},[77,81277,88],{"class":87},[77,81279,81280,81282,81284,81286,81288],{"class":79,"line":10484},[77,81281,57223],{"class":94},[77,81283,98],{"class":87},[77,81285,2925],{"class":94},[77,81287,2942],{"class":2123},[77,81289,104],{"class":87},[77,81291,81292],{"class":79,"line":10489},[77,81293,4662],{"class":87},[77,81295,81296],{"class":79,"line":10495},[77,81297,4875],{"emptyLinePlaceholder":2549},[77,81299,81300,81302,81304],{"class":79,"line":10507},[77,81301,81063],{"class":83},[77,81303,64748],{"class":83},[77,81305,88],{"class":87},[77,81307,81308,81310,81312,81314,81316],{"class":79,"line":10519},[77,81309,57372],{"class":94},[77,81311,98],{"class":87},[77,81313,3263],{"class":94},[77,81315,2124],{"class":2123},[77,81317,104],{"class":87},[77,81319,81320,81322,81324,81326,81328],{"class":79,"line":10531},[77,81321,81130],{"class":94},[77,81323,98],{"class":87},[77,81325,3059],{"class":94},[77,81327,2124],{"class":2123},[77,81329,104],{"class":87},[77,81331,81332,81334,81336,81339],{"class":79,"line":12189},[77,81333,59864],{"class":94},[77,81335,98],{"class":87},[77,81337,81338],{"class":94},"#666",[77,81340,104],{"class":87},[77,81342,81343],{"class":79,"line":12214},[77,81344,4662],{"class":87},[77,81346,81347],{"class":79,"line":12237},[77,81348,4875],{"emptyLinePlaceholder":2549},[77,81350,81351,81353,81356],{"class":79,"line":12261},[77,81352,81063],{"class":83},[77,81354,81355],{"class":83}," .price",[77,81357,88],{"class":87},[77,81359,81360,81362,81364,81366,81368],{"class":79,"line":12266},[77,81361,57372],{"class":94},[77,81363,98],{"class":87},[77,81365,3363],{"class":94},[77,81367,2124],{"class":2123},[77,81369,104],{"class":87},[77,81371,81372,81374,81376,81379],{"class":79,"line":12271},[77,81373,59864],{"class":94},[77,81375,98],{"class":87},[77,81377,81378],{"class":94},"firebrick",[77,81380,104],{"class":87},[77,81382,81383],{"class":79,"line":12276},[77,81384,4662],{"class":87},[77,81386,81387],{"class":79,"line":12285},[77,81388,4875],{"emptyLinePlaceholder":2549},[77,81390,81391,81393,81396],{"class":79,"line":12290},[77,81392,81063],{"class":83},[77,81394,81395],{"class":83}," .price::before",[77,81397,88],{"class":87},[77,81399,81400,81403,81405,81408],{"class":79,"line":12296},[77,81401,81402],{"class":94},"      content",[77,81404,98],{"class":87},[77,81406,81407],{"class":271},"'￥'",[77,81409,104],{"class":87},[77,81411,81412,81414,81416,81418,81420],{"class":79,"line":12317},[77,81413,57372],{"class":94},[77,81415,98],{"class":87},[77,81417,3162],{"class":94},[77,81419,2124],{"class":2123},[77,81421,104],{"class":87},[77,81423,81424],{"class":79,"line":12323},[77,81425,4662],{"class":87},[77,81427,81428],{"class":79,"line":12337},[77,81429,4875],{"emptyLinePlaceholder":2549},[77,81431,81432,81435],{"class":79,"line":12343},[77,81433,81434],{"class":83},"    .filter",[77,81436,88],{"class":87},[77,81438,81439,81441,81443,81445],{"class":79,"line":12370},[77,81440,57459],{"class":94},[77,81442,98],{"class":87},[77,81444,53940],{"class":94},[77,81446,104],{"class":87},[77,81448,81449,81451,81453,81455,81457],{"class":79,"line":12379},[77,81450,57223],{"class":94},[77,81452,98],{"class":87},[77,81454,81012],{"class":94},[77,81456,2124],{"class":2123},[77,81458,104],{"class":87},[77,81460,81461,81463,81465,81467,81469],{"class":79,"line":12385},[77,81462,57160],{"class":94},[77,81464,98],{"class":87},[77,81466,1939],{"class":94},[77,81468,1942],{"class":94},[77,81470,104],{"class":87},[77,81472,81473,81475,81477,81479,81481,81483],{"class":79,"line":12393},[77,81474,57149],{"class":94},[77,81476,98],{"class":87},[77,81478,3269],{"class":94},[77,81480,2124],{"class":2123},[77,81482,81103],{"class":94},[77,81484,81485],{"class":2123},"px\n",[77,81487,81488],{"class":79,"line":12398},[77,81489,4662],{"class":87},[77,81491,81492],{"class":79,"line":19074},[77,81493,4875],{"emptyLinePlaceholder":2549},[77,81495,81496,81498,81500],{"class":79,"line":19080},[77,81497,81434],{"class":83},[77,81499,3876],{"class":158},[77,81501,88],{"class":87},[77,81503,81504,81506,81508,81510,81512,81514,81516],{"class":79,"line":19103},[77,81505,57149],{"class":94},[77,81507,98],{"class":87},[77,81509,3059],{"class":94},[77,81511,2124],{"class":2123},[77,81513,11424],{"class":94},[77,81515,2124],{"class":2123},[77,81517,104],{"class":87},[77,81519,81520,81522,81524,81526],{"class":79,"line":19109},[77,81521,64166],{"class":94},[77,81523,98],{"class":87},[77,81525,64263],{"class":94},[77,81527,104],{"class":87},[77,81529,81530,81532,81534,81536],{"class":79,"line":19132},[77,81531,59864],{"class":94},[77,81533,98],{"class":87},[77,81535,81338],{"class":94},[77,81537,104],{"class":87},[77,81539,81540,81542,81544,81546],{"class":79,"line":19146},[77,81541,66413],{"class":94},[77,81543,98],{"class":87},[77,81545,186],{"class":94},[77,81547,104],{"class":87},[77,81549,81550,81552,81554,81556,81558],{"class":79,"line":19166},[77,81551,64195],{"class":94},[77,81553,98],{"class":87},[77,81555,3313],{"class":94},[77,81557,2124],{"class":2123},[77,81559,104],{"class":87},[77,81561,81562],{"class":79,"line":19172},[77,81563,4662],{"class":87},[77,81565,81566],{"class":79,"line":19183},[77,81567,4875],{"emptyLinePlaceholder":2549},[77,81569,81570,81572,81574,81576],{"class":79,"line":19206},[77,81571,81434],{"class":83},[77,81573,3876],{"class":158},[77,81575,162],{"class":83},[77,81577,88],{"class":87},[77,81579,81580,81582,81584,81587],{"class":79,"line":19228},[77,81581,57335],{"class":94},[77,81583,98],{"class":87},[77,81585,81586],{"class":94},"#05943c",[77,81588,104],{"class":87},[77,81590,81591,81593,81595,81597],{"class":79,"line":19233},[77,81592,59864],{"class":94},[77,81594,98],{"class":87},[77,81596,63290],{"class":94},[77,81598,104],{"class":87},[77,81600,81601],{"class":79,"line":19239},[77,81602,4662],{"class":87},[77,81604,81605,81607,81609],{"class":79,"line":19253},[77,81606,54875],{"class":87},[77,81608,2520],{"class":158},[77,81610,291],{"class":87},[77,81612,81613,81615,81617],{"class":79,"line":19266},[77,81614,351],{"class":87},[77,81616,53798],{"class":158},[77,81618,291],{"class":87},[77,81620,81621],{"class":79,"line":19271},[77,81622,4875],{"emptyLinePlaceholder":2549},[77,81624,81625,81627,81629],{"class":79,"line":19285},[77,81626,260],{"class":87},[77,81628,54258],{"class":158},[77,81630,291],{"class":87},[77,81632,81633,81635,81637,81639,81641,81644],{"class":79,"line":19290},[77,81634,54602],{"class":87},[77,81636,331],{"class":158},[77,81638,334],{"class":83},[77,81640,268],{"class":87},[77,81642,81643],{"class":271},"\"filter\"",[77,81645,291],{"class":87},[77,81647,81648,81650,81652,81654,81656,81658,81661,81663,81665,81668,81670],{"class":79,"line":19296},[77,81649,53805],{"class":87},[77,81651,417],{"class":158},[77,81653,63503],{"class":83},[77,81655,268],{"class":87},[77,81657,63508],{"class":271},[77,81659,81660],{"class":83}," data-index",[77,81662,268],{"class":87},[77,81664,6153],{"class":271},[77,81666,81667],{"class":87},">0-100元\u003C\u002F",[77,81669,417],{"class":158},[77,81671,291],{"class":87},[77,81673,81674,81676,81678,81680,81682,81684,81686,81688,81690,81693,81695],{"class":79,"line":19301},[77,81675,53805],{"class":87},[77,81677,417],{"class":158},[77,81679,63503],{"class":83},[77,81681,268],{"class":87},[77,81683,63508],{"class":271},[77,81685,81660],{"class":83},[77,81687,268],{"class":87},[77,81689,6176],{"class":271},[77,81691,81692],{"class":87},">100-300元\u003C\u002F",[77,81694,417],{"class":158},[77,81696,291],{"class":87},[77,81698,81699,81701,81703,81705,81707,81709,81711,81713,81715,81718,81720],{"class":79,"line":19315},[77,81700,53805],{"class":87},[77,81702,417],{"class":158},[77,81704,63503],{"class":83},[77,81706,268],{"class":87},[77,81708,63508],{"class":271},[77,81710,81660],{"class":83},[77,81712,268],{"class":87},[77,81714,6189],{"class":271},[77,81716,81717],{"class":87},">300元以上\u003C\u002F",[77,81719,417],{"class":158},[77,81721,291],{"class":87},[77,81723,81724,81726,81728,81730,81732,81734,81737,81739],{"class":79,"line":19320},[77,81725,53805],{"class":87},[77,81727,417],{"class":158},[77,81729,63503],{"class":83},[77,81731,268],{"class":87},[77,81733,63508],{"class":271},[77,81735,81736],{"class":87},">全部区间\u003C\u002F",[77,81738,417],{"class":158},[77,81740,291],{"class":87},[77,81742,81743,81745,81747],{"class":79,"line":19325},[77,81744,54875],{"class":87},[77,81746,331],{"class":158},[77,81748,291],{"class":87},[77,81750,81751,81753,81755,81757,81759,81761],{"class":79,"line":19339},[77,81752,54602],{"class":87},[77,81754,331],{"class":158},[77,81756,334],{"class":83},[77,81758,268],{"class":87},[77,81760,65052],{"class":271},[77,81762,291],{"class":87},[77,81764,81765],{"class":79,"line":19351},[77,81766,81767],{"class":323},"    \u003C!-- \u003Cdiv class=\"item\">\n",[77,81769,81770],{"class":79,"line":19356},[77,81771,81772],{"class":323},"      \u003Cimg src=\"\" alt=\"\">\n",[77,81774,81775],{"class":79,"line":19369},[77,81776,81777],{"class":323},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[77,81779,81780],{"class":79,"line":19374},[77,81781,81782],{"class":323},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[77,81784,81785],{"class":79,"line":19379},[77,81786,81787],{"class":323},"    \u003C\u002Fdiv> -->\n",[77,81789,81790,81792,81794],{"class":79,"line":19384},[77,81791,54875],{"class":87},[77,81793,331],{"class":158},[77,81795,291],{"class":87},[77,81797,81798,81800,81802],{"class":79,"line":19397},[77,81799,54602],{"class":87},[77,81801,54271],{"class":158},[77,81803,291],{"class":87},[77,81805,81806],{"class":79,"line":19402},[77,81807,81808],{"class":323},"    \u002F\u002F 2. 初始化数据\n",[77,81810,81811,81813,81816,81818],{"class":79,"line":35100},[77,81812,13694],{"class":2123},[77,81814,81815],{"class":94}," goodsList",[77,81817,16036],{"class":2123},[77,81819,57895],{"class":87},[77,81821,81822],{"class":79,"line":35106},[77,81823,81824],{"class":87},"      {\n",[77,81826,81827,81830,81833],{"class":79,"line":35112},[77,81828,81829],{"class":87},"        id: ",[77,81831,81832],{"class":271},"'4001172'",[77,81834,33933],{"class":87},[77,81836,81837,81840,81843],{"class":79,"line":35118},[77,81838,81839],{"class":87},"        name: ",[77,81841,81842],{"class":271},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[77,81844,33933],{"class":87},[77,81846,81847,81850,81853],{"class":79,"line":35124},[77,81848,81849],{"class":87},"        price: ",[77,81851,81852],{"class":271},"'289.00'",[77,81854,33933],{"class":87},[77,81856,81857,81860,81863],{"class":79,"line":35135},[77,81858,81859],{"class":87},"        picture: ",[77,81861,81862],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[77,81864,33933],{"class":87},[77,81866,81867],{"class":79,"line":35141},[77,81868,80330],{"class":87},[77,81870,81871],{"class":79,"line":35161},[77,81872,81824],{"class":87},[77,81874,81875,81877,81880],{"class":79,"line":35167},[77,81876,81829],{"class":87},[77,81878,81879],{"class":271},"'4001594'",[77,81881,33933],{"class":87},[77,81883,81884,81886,81889],{"class":79,"line":35178},[77,81885,81839],{"class":87},[77,81887,81888],{"class":271},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[77,81890,33933],{"class":87},[77,81892,81893,81895,81898],{"class":79,"line":35184},[77,81894,81849],{"class":87},[77,81896,81897],{"class":271},"'288.00'",[77,81899,33933],{"class":87},[77,81901,81902,81904,81907],{"class":79,"line":35190},[77,81903,81859],{"class":87},[77,81905,81906],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[77,81908,33933],{"class":87},[77,81910,81911],{"class":79,"line":35196},[77,81912,80330],{"class":87},[77,81914,81915],{"class":79,"line":35202},[77,81916,81824],{"class":87},[77,81918,81919,81921,81924],{"class":79,"line":35208},[77,81920,81829],{"class":87},[77,81922,81923],{"class":271},"'4001009'",[77,81925,33933],{"class":87},[77,81927,81928,81930,81933],{"class":79,"line":35214},[77,81929,81839],{"class":87},[77,81931,81932],{"class":271},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[77,81934,33933],{"class":87},[77,81936,81937,81939,81942],{"class":79,"line":35220},[77,81938,81849],{"class":87},[77,81940,81941],{"class":271},"'109.00'",[77,81943,33933],{"class":87},[77,81945,81946,81948,81951],{"class":79,"line":35240},[77,81947,81859],{"class":87},[77,81949,81950],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[77,81952,33933],{"class":87},[77,81954,81955],{"class":79,"line":35246},[77,81956,80330],{"class":87},[77,81958,81959],{"class":79,"line":35262},[77,81960,81824],{"class":87},[77,81962,81963,81965,81968],{"class":79,"line":35268},[77,81964,81829],{"class":87},[77,81966,81967],{"class":271},"'4001874'",[77,81969,33933],{"class":87},[77,81971,81972,81974,81977],{"class":79,"line":35282},[77,81973,81839],{"class":87},[77,81975,81976],{"class":271},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[77,81978,33933],{"class":87},[77,81980,81981,81983,81986],{"class":79,"line":35288},[77,81982,81849],{"class":87},[77,81984,81985],{"class":271},"'488.00'",[77,81987,33933],{"class":87},[77,81989,81990,81992,81995],{"class":79,"line":35303},[77,81991,81859],{"class":87},[77,81993,81994],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[77,81996,33933],{"class":87},[77,81998,81999],{"class":79,"line":35309},[77,82000,80330],{"class":87},[77,82002,82003],{"class":79,"line":35318},[77,82004,81824],{"class":87},[77,82006,82007,82009,82012],{"class":79,"line":35324},[77,82008,81829],{"class":87},[77,82010,82011],{"class":271},"'4001649'",[77,82013,33933],{"class":87},[77,82015,82016,82018,82021],{"class":79,"line":35333},[77,82017,81839],{"class":87},[77,82019,82020],{"class":271},"'大师监制龙泉青瓷茶叶罐'",[77,82022,33933],{"class":87},[77,82024,82025,82027,82030],{"class":79,"line":35339},[77,82026,81849],{"class":87},[77,82028,82029],{"class":271},"'139.00'",[77,82031,33933],{"class":87},[77,82033,82034,82036,82039],{"class":79,"line":35345},[77,82035,81859],{"class":87},[77,82037,82038],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[77,82040,33933],{"class":87},[77,82042,82043],{"class":79,"line":35354},[77,82044,80330],{"class":87},[77,82046,82047],{"class":79,"line":35360},[77,82048,81824],{"class":87},[77,82050,82051,82053,82056],{"class":79,"line":35371},[77,82052,81829],{"class":87},[77,82054,82055],{"class":271},"'3997185'",[77,82057,33933],{"class":87},[77,82059,82060,82062,82065],{"class":79,"line":35377},[77,82061,81839],{"class":87},[77,82063,82064],{"class":271},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[77,82066,33933],{"class":87},[77,82068,82069,82071,82074],{"class":79,"line":35396},[77,82070,81849],{"class":87},[77,82072,82073],{"class":271},"'108.00'",[77,82075,33933],{"class":87},[77,82077,82078,82080,82083],{"class":79,"line":35402},[77,82079,81859],{"class":87},[77,82081,82082],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[77,82084,33933],{"class":87},[77,82086,82087],{"class":79,"line":35413},[77,82088,80330],{"class":87},[77,82090,82091],{"class":79,"line":35419},[77,82092,81824],{"class":87},[77,82094,82095,82097,82100],{"class":79,"line":35439},[77,82096,81829],{"class":87},[77,82098,82099],{"class":271},"'3997403'",[77,82101,33933],{"class":87},[77,82103,82104,82106,82109],{"class":79,"line":35455},[77,82105,81839],{"class":87},[77,82107,82108],{"class":271},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[77,82110,33933],{"class":87},[77,82112,82113,82115,82118],{"class":79,"line":35461},[77,82114,81849],{"class":87},[77,82116,82117],{"class":271},"'100.00'",[77,82119,33933],{"class":87},[77,82121,82122,82124,82127],{"class":79,"line":35475},[77,82123,81859],{"class":87},[77,82125,82126],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[77,82128,33933],{"class":87},[77,82130,82131],{"class":79,"line":35481},[77,82132,80330],{"class":87},[77,82134,82135],{"class":79,"line":35487},[77,82136,81824],{"class":87},[77,82138,82139,82141,82144],{"class":79,"line":35498},[77,82140,81829],{"class":87},[77,82142,82143],{"class":271},"'3998274'",[77,82145,33933],{"class":87},[77,82147,82148,82150,82153],{"class":79,"line":35504},[77,82149,81839],{"class":87},[77,82151,82152],{"class":271},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[77,82154,33933],{"class":87},[77,82156,82157,82159,82161],{"class":79,"line":35510},[77,82158,81849],{"class":87},[77,82160,82029],{"class":271},[77,82162,33933],{"class":87},[77,82164,82165,82167,82170],{"class":79,"line":35520},[77,82166,81859],{"class":87},[77,82168,82169],{"class":271},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[77,82171,33933],{"class":87},[77,82173,82174],{"class":79,"line":35526},[77,82175,80330],{"class":87},[77,82177,82178],{"class":79,"line":35537},[77,82179,55567],{"class":87},[77,82181,82182],{"class":79,"line":35543},[77,82183,4875],{"emptyLinePlaceholder":2549},[77,82185,82186],{"class":79,"line":35553},[77,82187,82188],{"class":323},"    \u002F\u002F 1.渲染函数\n",[77,82190,82191,82193,82195,82197,82199],{"class":79,"line":35558},[77,82192,72527],{"class":2123},[77,82194,72530],{"class":83},[77,82196,2622],{"class":87},[77,82198,6355],{"class":7691},[77,82200,14914],{"class":87},[77,82202,82203],{"class":79,"line":35564},[77,82204,82205],{"class":323},"      \u002F\u002F 声明空字符串\n",[77,82207,82208,82211,82214,82216],{"class":79,"line":35613},[77,82209,82210],{"class":2123},"      let",[77,82212,82213],{"class":87}," str ",[77,82215,268],{"class":2123},[77,82217,72547],{"class":271},[77,82219,82220],{"class":79,"line":35660},[77,82221,72552],{"class":323},[77,82223,82224,82226,82229,82231,82234,82237],{"class":79,"line":35665},[77,82225,60455],{"class":87},[77,82227,82228],{"class":83},"forEach",[77,82230,2622],{"class":87},[77,82232,82233],{"class":7691},"item",[77,82235,82236],{"class":2123}," =>",[77,82238,88],{"class":87},[77,82240,82241,82243,82245,82248,82250,82253,82255,82258,82261,82263],{"class":79,"line":35671},[77,82242,63716],{"class":2123},[77,82244,1508],{"class":87},[77,82246,82247],{"class":94},"name",[77,82249,680],{"class":87},[77,82251,82252],{"class":94},"price",[77,82254,680],{"class":87},[77,82256,82257],{"class":94},"picture",[77,82259,82260],{"class":87}," } ",[77,82262,268],{"class":2123},[77,82264,82265],{"class":87}," item\n",[77,82267,82268,82271,82273],{"class":79,"line":35690},[77,82269,82270],{"class":87},"        str ",[77,82272,11950],{"class":2123},[77,82274,72611],{"class":271},[77,82276,82277],{"class":79,"line":35696},[77,82278,82279],{"class":271},"          \u003Cdiv class=\"item\">\n",[77,82281,82282,82285,82287],{"class":79,"line":35716},[77,82283,82284],{"class":271},"            \u003Cimg src=\"${",[77,82286,82257],{"class":87},[77,82288,82289],{"class":271},"}\" alt=\"\">\n",[77,82291,82292,82295,82297],{"class":79,"line":35722},[77,82293,82294],{"class":271},"            \u003Cp class=\"name\">${",[77,82296,82247],{"class":87},[77,82298,82299],{"class":271},"}\u003C\u002Fp>\n",[77,82301,82302,82305,82307],{"class":79,"line":35728},[77,82303,82304],{"class":271},"            \u003Cp class=\"price\">${",[77,82306,82252],{"class":87},[77,82308,82299],{"class":271},[77,82310,82311],{"class":79,"line":35738},[77,82312,82313],{"class":271},"          \u003C\u002Fdiv>\n",[77,82315,82316],{"class":79,"line":35743},[77,82317,82318],{"class":271},"        `\n",[77,82320,82321],{"class":79,"line":35749},[77,82322,67258],{"class":87},[77,82324,82325],{"class":79,"line":35765},[77,82326,82327],{"class":323},"      \u002F\u002F 追加给List\n",[77,82329,82330,82332,82334,82336,82339,82341,82343],{"class":79,"line":35810},[77,82331,58219],{"class":87},[77,82333,56853],{"class":83},[77,82335,2622],{"class":87},[77,82337,82338],{"class":271},"'.list'",[77,82340,76687],{"class":87},[77,82342,268],{"class":2123},[77,82344,76424],{"class":87},[77,82346,82347],{"class":79,"line":35816},[77,82348,4662],{"class":87},[77,82350,82351],{"class":79,"line":35822},[77,82352,82353],{"class":323},"    \u002F\u002F 页面一打开就需要渲染\n",[77,82355,82356,82359],{"class":79,"line":35828},[77,82357,82358],{"class":83},"    render",[77,82360,82361],{"class":87},"(goodsList)\n",[77,82363,82364],{"class":79,"line":35839},[77,82365,82366],{"class":323},"    \u002F\u002F 2.过滤筛选\n",[77,82368,82369,82371,82373,82375,82378,82380,82382,82384,82386,82388,82390,82392],{"class":79,"line":35845},[77,82370,54865],{"class":87},[77,82372,56853],{"class":83},[77,82374,2622],{"class":87},[77,82376,82377],{"class":271},"'.filter'",[77,82379,33294],{"class":87},[77,82381,60261],{"class":83},[77,82383,2622],{"class":87},[77,82385,60266],{"class":271},[77,82387,680],{"class":87},[77,82389,2693],{"class":7691},[77,82391,82236],{"class":2123},[77,82393,88],{"class":87},[77,82395,82396],{"class":79,"line":35851},[77,82397,82398],{"class":323},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[77,82400,82401,82403,82405,82408,82410,82412,82414,82416],{"class":79,"line":35857},[77,82402,60676],{"class":2123},[77,82404,1508],{"class":87},[77,82406,82407],{"class":94},"tagName",[77,82409,680],{"class":87},[77,82411,34004],{"class":94},[77,82413,82260],{"class":87},[77,82415,268],{"class":2123},[77,82417,82418],{"class":87}," e.target\n",[77,82420,82421],{"class":79,"line":35875},[77,82422,82423],{"class":323},"      \u002F\u002F 判断\n",[77,82425,82426,82428,82430,82432,82434],{"class":79,"line":35889},[77,82427,56934],{"class":2123},[77,82429,69477],{"class":87},[77,82431,56940],{"class":2123},[77,82433,70699],{"class":271},[77,82435,14914],{"class":87},[77,82437,82438],{"class":79,"line":35898},[77,82439,82440],{"class":323},"        \u002F\u002F console.log(11)\n",[77,82442,82443],{"class":79,"line":35907},[77,82444,82445],{"class":323},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[77,82447,82448],{"class":79,"line":35916},[77,82449,82450],{"class":323},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[77,82452,82453,82455,82457,82459],{"class":79,"line":35925},[77,82454,54288],{"class":2123},[77,82456,54291],{"class":87},[77,82458,268],{"class":2123},[77,82460,82461],{"class":87}," goodsList\n",[77,82463,82464,82466,82469,82471,82474],{"class":79,"line":35931},[77,82465,4972],{"class":2123},[77,82467,82468],{"class":87}," (dataset.index ",[77,82470,56940],{"class":2123},[77,82472,82473],{"class":271}," '1'",[77,82475,14914],{"class":87},[77,82477,82478,82481,82483,82486,82489,82491,82493,82495,82498,82500,82502,82505,82507,82509,82511],{"class":79,"line":35937},[77,82479,82480],{"class":87},"          arr ",[77,82482,268],{"class":2123},[77,82484,82485],{"class":87}," goodsList.",[77,82487,82488],{"class":83},"filter",[77,82490,2622],{"class":87},[77,82492,82233],{"class":7691},[77,82494,82236],{"class":2123},[77,82496,82497],{"class":87}," item.price ",[77,82499,4186],{"class":2123},[77,82501,6568],{"class":94},[77,82503,82504],{"class":2123}," &&",[77,82506,82497],{"class":87},[77,82508,4064],{"class":2123},[77,82510,8229],{"class":94},[77,82512,2628],{"class":87},[77,82514,82515,82518,82520,82522,82524,82526,82529],{"class":79,"line":35945},[77,82516,82517],{"class":87},"        } ",[77,82519,4177],{"class":2123},[77,82521,4180],{"class":2123},[77,82523,82468],{"class":87},[77,82525,56940],{"class":2123},[77,82527,82528],{"class":271}," '2'",[77,82530,14914],{"class":87},[77,82532,82533,82535,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557,82559,82562],{"class":79,"line":35950},[77,82534,82480],{"class":87},[77,82536,268],{"class":2123},[77,82538,82485],{"class":87},[77,82540,82488],{"class":83},[77,82542,2622],{"class":87},[77,82544,82233],{"class":7691},[77,82546,82236],{"class":2123},[77,82548,82497],{"class":87},[77,82550,4186],{"class":2123},[77,82552,8229],{"class":94},[77,82554,82504],{"class":2123},[77,82556,82497],{"class":87},[77,82558,4064],{"class":2123},[77,82560,82561],{"class":94}," 300",[77,82563,2628],{"class":87},[77,82565,82566,82568,82570,82572,82574,82576,82579],{"class":79,"line":35956},[77,82567,82517],{"class":87},[77,82569,4177],{"class":2123},[77,82571,4180],{"class":2123},[77,82573,82468],{"class":87},[77,82575,56940],{"class":2123},[77,82577,82578],{"class":271}," '3'",[77,82580,14914],{"class":87},[77,82582,82583,82585,82587,82589,82591,82593,82595,82597,82599,82601,82603],{"class":79,"line":35967},[77,82584,82480],{"class":87},[77,82586,268],{"class":2123},[77,82588,82485],{"class":87},[77,82590,82488],{"class":83},[77,82592,2622],{"class":87},[77,82594,82233],{"class":7691},[77,82596,82236],{"class":2123},[77,82598,82497],{"class":87},[77,82600,4186],{"class":2123},[77,82602,82561],{"class":94},[77,82604,2628],{"class":87},[77,82606,82607],{"class":79,"line":35973},[77,82608,5004],{"class":87},[77,82610,82611],{"class":79,"line":35993},[77,82612,82613],{"class":323},"        \u002F\u002F 渲染函数\n",[77,82615,82616,82618],{"class":79,"line":35999},[77,82617,72851],{"class":83},[77,82619,54870],{"class":87},[77,82621,82622],{"class":79,"line":36005},[77,82623,54856],{"class":87},[77,82625,82626],{"class":79,"line":36011},[77,82627,4875],{"emptyLinePlaceholder":2549},[77,82629,82630],{"class":79,"line":36028},[77,82631,35928],{"class":87},[77,82633,82634,82636,82638],{"class":79,"line":36034},[77,82635,54875],{"class":87},[77,82637,54271],{"class":158},[77,82639,291],{"class":87},[77,82641,82642,82644,82646],{"class":79,"line":36040},[77,82643,351],{"class":87},[77,82645,54258],{"class":158},[77,82647,291],{"class":87},[77,82649,82650],{"class":79,"line":36046},[77,82651,4875],{"emptyLinePlaceholder":2549},[77,82653,82654,82656,82658],{"class":79,"line":36052},[77,82655,351],{"class":87},[77,82657,53101],{"class":158},[77,82659,291],{"class":87},[14,82661,82663],{"id":82662},"_410-深入了解对象","4.10 深入了解对象",[19,82665,82667],{"id":82666},"_4101-创建对象","4.10.1 创建对象",[24,82669,82670],{},[40,82671],{"alt":72,"src":82672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[24,82674,82675],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[19,82677,82679],{"id":82678},"_4102-构造函数","4.10.2 构造函数",[24,82681,82682,82685],{},[27,82683,82684],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[24,82687,82688,82691],{},[27,82689,82690],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[67,82693,82695],{"className":53099,"code":82694,"language":53101,"meta":72,"style":72},"\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",[74,82696,82697,82705,82710,82731,82744,82756,82768,82772,82777,82804,82809,82836],{"__ignoreMap":72},[77,82698,82699,82701,82703],{"class":79,"line":80},[77,82700,260],{"class":87},[77,82702,54271],{"class":158},[77,82704,291],{"class":87},[77,82706,82707],{"class":79,"line":91},[77,82708,82709],{"class":323},"\u002F\u002F例：\n",[77,82711,82712,82714,82717,82719,82721,82723,82725,82727,82729],{"class":79,"line":107},[77,82713,56903],{"class":2123},[77,82715,82716],{"class":83}," Pig",[77,82718,2622],{"class":87},[77,82720,82247],{"class":7691},[77,82722,2992],{"class":87},[77,82724,72664],{"class":7691},[77,82726,2992],{"class":87},[77,82728,72681],{"class":7691},[77,82730,14914],{"class":87},[77,82732,82733,82736,82739,82741],{"class":79,"line":191},[77,82734,82735],{"class":94},"    this",[77,82737,82738],{"class":87},".name",[77,82740,268],{"class":2123},[77,82742,82743],{"class":87},"name\n",[77,82745,82746,82748,82751,82753],{"class":79,"line":1543},[77,82747,82735],{"class":94},[77,82749,82750],{"class":87},".age",[77,82752,268],{"class":2123},[77,82754,82755],{"class":87},"age\n",[77,82757,82758,82760,82763,82765],{"class":79,"line":1549},[77,82759,82735],{"class":94},[77,82761,82762],{"class":87},".gender",[77,82764,268],{"class":2123},[77,82766,82767],{"class":87},"gender    \n",[77,82769,82770],{"class":79,"line":1566},[77,82771,110],{"class":87},[77,82773,82774],{"class":79,"line":1572},[77,82775,82776],{"class":323},"\u002F\u002F创建佩奇对象\n",[77,82778,82779,82781,82784,82786,82788,82790,82793,82795,82797,82799,82802],{"class":79,"line":1589},[77,82780,9267],{"class":2123},[77,82782,82783],{"class":94}," Peppa",[77,82785,14190],{"class":2123},[77,82787,82716],{"class":83},[77,82789,2622],{"class":87},[77,82791,82792],{"class":271},"'佩奇'",[77,82794,2992],{"class":87},[77,82796,2958],{"class":94},[77,82798,2992],{"class":87},[77,82800,82801],{"class":271},"'女'",[77,82803,2628],{"class":87},[77,82805,82806],{"class":79,"line":1595},[77,82807,82808],{"class":323},"\u002F\u002F创建乔治对象\n",[77,82810,82811,82813,82816,82818,82820,82822,82825,82827,82829,82831,82834],{"class":79,"line":4088},[77,82812,9267],{"class":2123},[77,82814,82815],{"class":94}," George",[77,82817,14190],{"class":2123},[77,82819,82716],{"class":83},[77,82821,2622],{"class":87},[77,82823,82824],{"class":271},"'乔治'",[77,82826,2992],{"class":87},[77,82828,2690],{"class":94},[77,82830,2992],{"class":87},[77,82832,82833],{"class":271},"'男'",[77,82835,2628],{"class":87},[77,82837,82838,82840,82842],{"class":79,"line":4093},[77,82839,351],{"class":87},[77,82841,54271],{"class":158},[77,82843,291],{"class":87},[24,82845,82846],{},[40,82847],{"alt":72,"src":82848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[24,82850,82851],{},[40,82852],{"alt":72,"src":82853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[24,82855,82856],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[24,82858,82859],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[24,82861,82862],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[24,82864,82865],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[24,82867,82868],{},"这里用等号是因为：对象.属性=值",[24,82870,82871],{},"①利用对象字面量创建对象",[24,82873,82874],{},"const o={",[24,82876,82877],{},"name:'pink'",[24,82879,82880],{},"} ②利用new Object创建对象",[24,82882,82883],{},"const o=new Object({name:'pink'})",[24,82885,82886],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[24,82888,82889],{},"构造函数创建对象的执行过程：",[24,82891,82892],{},[40,82893],{"alt":72,"src":82894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[19,82896,82898],{"id":82897},"_4103-实例成员","4.10.3 实例成员",[24,82900,82901],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[139,82903,82904,82907,82910],{},[54,82905,82906],{},"实例对象的属性和方法即为实例成员",[54,82908,82909],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[54,82911,82912],{},"构造函数创建的实例对象彼此独立互不影响",[19,82914,82916],{"id":82915},"_4104-静态成员","4.10.4 静态成员",[24,82918,82919],{},[40,82920],{"alt":72,"src":82921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[24,82923,82924],{},"静态成员有Date.now() Math.PI Math.random()",[24,82926,82927],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[24,82929,82930],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[24,82932,82933],{},"function Pig(name) n {",[24,82935,82936],{},"this.name=name",[24,82938,3558],{},[24,82940,82941],{},"Pig.eyes=2",[24,82943,82944],{},"Pig.sayHai=function () { console.log(this) }",[24,82946,82947],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[24,82949,82950],{},"console.log(Pig.eyes) \u002F\u002F2",[24,82952,13805],{},[139,82954,82955,82958,82961,82964,82967],{},[54,82956,82957],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[54,82959,82960],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[54,82962,82963],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[54,82965,82966],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[54,82968,82969],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[24,82971,82972],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[19,82974,82976],{"id":82975},"_4105-内置构造函数","4.10.5 内置构造函数",[24,82978,82979],{},"内置构造函数包含：",[24,82981,82982],{},[40,82983],{"alt":72,"src":82984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[24,82986,82987],{},[40,82988],{"alt":72,"src":82989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[24,82991,82992],{},"这些基本数据类型，js对他们进行了包装",[54271,82994,82995],{},"\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",[24468,82997,82999],{"id":82998},"_41051-object","4.10.5.1 Object",[24,83001,83002],{},"Object 是内置的构造函数，用于创建普通对象",[24,83004,83005],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[67,83007,83009],{"className":53099,"code":83008,"language":53101,"meta":72,"style":72},"const user=new Object({name:'小明',age:15})\n",[74,83010,83011],{"__ignoreMap":72},[77,83012,83013],{"class":79,"line":80},[77,83014,83008],{"class":87},[24,83016,83017],{},"三个常用的静态方法：",[406,83019,83021],{"id":83020},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[24,83023,83024],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[24,83026,83027],{},[40,83028],{"alt":72,"src":83029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[24,83031,83032],{},[40,83033],{"alt":72,"src":83034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[67,83036,83038],{"className":55525,"code":83037,"language":55527,"meta":72,"style":72},"\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",[74,83039,83040,83048,83056,83061,83066,83071,83076,83081,83086,83094],{"__ignoreMap":72},[77,83041,83042,83044,83046],{"class":79,"line":80},[77,83043,260],{"class":87},[77,83045,54258],{"class":158},[77,83047,291],{"class":87},[77,83049,83050,83052,83054],{"class":79,"line":91},[77,83051,54602],{"class":87},[77,83053,54271],{"class":158},[77,83055,291],{"class":87},[77,83057,83058],{"class":79,"line":107},[77,83059,83060],{"class":87},"    const o = { name: 'pink', age: 6 }\n",[77,83062,83063],{"class":79,"line":191},[77,83064,83065],{"class":87},"    \u002F\u002F 获得所有属性名\n",[77,83067,83068],{"class":79,"line":1543},[77,83069,83070],{"class":87},"    const arr = Object.keys(o)\n",[77,83072,83073],{"class":79,"line":1549},[77,83074,83075],{"class":87},"    console.log(arr)\n",[77,83077,83078],{"class":79,"line":1566},[77,83079,83080],{"class":87},"    \u002F\u002F 获得所有属性值\n",[77,83082,83083],{"class":79,"line":1572},[77,83084,83085],{"class":87},"    console.log(Object.values(o))\n",[77,83087,83088,83090,83092],{"class":79,"line":1589},[77,83089,54875],{"class":87},[77,83091,54271],{"class":158},[77,83093,291],{"class":87},[77,83095,83096,83098,83100],{"class":79,"line":1595},[77,83097,351],{"class":87},[77,83099,54258],{"class":158},[77,83101,291],{"class":87},[406,83103,83105],{"id":83104},"_410512-object-assign","4.10.5.1.2 Object. assign",[24,83107,83108],{},"Object.assign(oo,o)",[24,83110,83111],{},"后的东西添加给前 是追加",[24,83113,83114],{},[40,83115],{"alt":72,"src":83116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[24,83118,83119],{},[40,83120],{"alt":72,"src":83121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[67,83123,83125],{"className":55525,"code":83124,"language":55527,"meta":72,"style":72},"\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",[74,83126,83127,83135,83143,83147,83151,83155,83159,83163,83167,83172,83177,83182,83187,83192,83200],{"__ignoreMap":72},[77,83128,83129,83131,83133],{"class":79,"line":80},[77,83130,260],{"class":87},[77,83132,54258],{"class":158},[77,83134,291],{"class":87},[77,83136,83137,83139,83141],{"class":79,"line":91},[77,83138,54602],{"class":87},[77,83140,54271],{"class":158},[77,83142,291],{"class":87},[77,83144,83145],{"class":79,"line":107},[77,83146,83060],{"class":87},[77,83148,83149],{"class":79,"line":191},[77,83150,83065],{"class":87},[77,83152,83153],{"class":79,"line":1543},[77,83154,83070],{"class":87},[77,83156,83157],{"class":79,"line":1549},[77,83158,83075],{"class":87},[77,83160,83161],{"class":79,"line":1566},[77,83162,83080],{"class":87},[77,83164,83165],{"class":79,"line":1572},[77,83166,83085],{"class":87},[77,83168,83169],{"class":79,"line":1589},[77,83170,83171],{"class":87},"    const oo = {}\n",[77,83173,83174],{"class":79,"line":1595},[77,83175,83176],{"class":87},"    Object.assign(oo, o)\n",[77,83178,83179],{"class":79,"line":4088},[77,83180,83181],{"class":87},"    console.log(oo)\n",[77,83183,83184],{"class":79,"line":4093},[77,83185,83186],{"class":87},"    Object.assign(o, { gender: '女' })\n",[77,83188,83189],{"class":79,"line":4099},[77,83190,83191],{"class":87},"    console.log(o)\n",[77,83193,83194,83196,83198],{"class":79,"line":4104},[77,83195,54875],{"class":87},[77,83197,54271],{"class":158},[77,83199,291],{"class":87},[77,83201,83202,83204,83206],{"class":79,"line":4118},[77,83203,351],{"class":87},[77,83205,54258],{"class":158},[77,83207,291],{"class":87},[24,83209,83210],{},[40,83211],{"alt":72,"src":83212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24468,83214,83216],{"id":83215},"_41052-array","4.10.5.2 Array",[24,83218,83219],{},"Array 是内置的构造函数，用于创建数组",[24,83221,83222],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[67,83224,83226],{"className":53099,"code":83225,"language":53101,"meta":72,"style":72},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[74,83227,83228,83233],{"__ignoreMap":72},[77,83229,83230],{"class":79,"line":80},[77,83231,83232],{"class":87},"const arr=new Array(3,5)\n",[77,83234,83235],{"class":79,"line":91},[77,83236,83237],{"class":87},"console.log(arr)  \u002F\u002F[3,5]\n",[24,83239,83240],{},"Array的实例方法，这个方法是实例成员",[24,83242,83243],{},[40,83244],{"alt":72,"src":83245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[406,83247,83249],{"id":83248},"_410521-reduce","4.10.5.2.1 reduce",[24,83251,83252],{},[40,83253],{"alt":72,"src":83254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[67,83256,83258],{"className":55525,"code":83257,"language":55527,"meta":72,"style":72},"\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",[74,83259,83260,83268,83276,83281,83286,83291,83296,83300,83305,83310,83315,83319,83324,83329,83333,83338,83343,83348,83356],{"__ignoreMap":72},[77,83261,83262,83264,83266],{"class":79,"line":80},[77,83263,260],{"class":87},[77,83265,54258],{"class":158},[77,83267,291],{"class":87},[77,83269,83270,83272,83274],{"class":79,"line":91},[77,83271,54602],{"class":87},[77,83273,54271],{"class":158},[77,83275,291],{"class":87},[77,83277,83278],{"class":79,"line":107},[77,83279,83280],{"class":87},"    const arr = [1, 5, 8]\n",[77,83282,83283],{"class":79,"line":191},[77,83284,83285],{"class":87},"    \u002F\u002F 1.没有初始值\n",[77,83287,83288],{"class":79,"line":1543},[77,83289,83290],{"class":87},"    const total = arr.reduce(function (prev, current) {\n",[77,83292,83293],{"class":79,"line":1549},[77,83294,83295],{"class":87},"      return prev + current\n",[77,83297,83298],{"class":79,"line":1566},[77,83299,35928],{"class":87},[77,83301,83302],{"class":79,"line":1572},[77,83303,83304],{"class":87},"    console.log(total)   \u002F\u002F14\n",[77,83306,83307],{"class":79,"line":1589},[77,83308,83309],{"class":87},"    \u002F\u002F 2.有初始值\n",[77,83311,83312],{"class":79,"line":1595},[77,83313,83314],{"class":87},"    const total1 = arr.reduce(function (prev, current) {\n",[77,83316,83317],{"class":79,"line":4088},[77,83318,83295],{"class":87},[77,83320,83321],{"class":79,"line":4093},[77,83322,83323],{"class":87},"    }, 10)\n",[77,83325,83326],{"class":79,"line":4099},[77,83327,83328],{"class":87},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[77,83330,83331],{"class":79,"line":4104},[77,83332,4875],{"emptyLinePlaceholder":2549},[77,83334,83335],{"class":79,"line":4118},[77,83336,83337],{"class":87},"    \u002F\u002F 3.箭头函数写法\n",[77,83339,83340],{"class":79,"line":4123},[77,83341,83342],{"class":87},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[77,83344,83345],{"class":79,"line":4129},[77,83346,83347],{"class":87},"    console.log(total2)   \u002F\u002F24\n",[77,83349,83350,83352,83354],{"class":79,"line":4150},[77,83351,54875],{"class":87},[77,83353,54271],{"class":158},[77,83355,291],{"class":87},[77,83357,83358,83360,83362],{"class":79,"line":4155},[77,83359,351],{"class":87},[77,83361,54258],{"class":158},[77,83363,291],{"class":87},[24,83365,83366],{},"执行过程：",[139,83368,83369,83372,83375],{},[54,83370,83371],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[54,83373,83374],{},"每一次循环，把返回值给作为下一次循环的上一次值",[54,83376,83377],{},"如果有起始值，则起始值作为上一次值",[67,83379,83381],{"className":55525,"code":83380,"language":55527,"meta":72,"style":72},"\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",[74,83382,83383,83391,83399,83403,83407,83411,83415,83419,83423,83428,83433,83438,83443,83448,83452,83456,83460,83464,83468,83472,83477,83481,83486,83490,83495,83500,83504,83508,83512,83520],{"__ignoreMap":72},[77,83384,83385,83387,83389],{"class":79,"line":80},[77,83386,260],{"class":87},[77,83388,54258],{"class":158},[77,83390,291],{"class":87},[77,83392,83393,83395,83397],{"class":79,"line":91},[77,83394,54602],{"class":87},[77,83396,54271],{"class":158},[77,83398,291],{"class":87},[77,83400,83401],{"class":79,"line":107},[77,83402,83280],{"class":87},[77,83404,83405],{"class":79,"line":191},[77,83406,83285],{"class":87},[77,83408,83409],{"class":79,"line":1543},[77,83410,83290],{"class":87},[77,83412,83413],{"class":79,"line":1549},[77,83414,83295],{"class":87},[77,83416,83417],{"class":79,"line":1566},[77,83418,35928],{"class":87},[77,83420,83421],{"class":79,"line":1572},[77,83422,83304],{"class":87},[77,83424,83425],{"class":79,"line":1589},[77,83426,83427],{"class":87},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[77,83429,83430],{"class":79,"line":1595},[77,83431,83432],{"class":87},"    \u002F\u002F     1              5                    6\n",[77,83434,83435],{"class":79,"line":4088},[77,83436,83437],{"class":87},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[77,83439,83440],{"class":79,"line":4093},[77,83441,83442],{"class":87},"    \u002F\u002F     6              8                    14\n",[77,83444,83445],{"class":79,"line":4099},[77,83446,83447],{"class":87},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[77,83449,83450],{"class":79,"line":4104},[77,83451,83309],{"class":87},[77,83453,83454],{"class":79,"line":4118},[77,83455,83314],{"class":87},[77,83457,83458],{"class":79,"line":4123},[77,83459,83295],{"class":87},[77,83461,83462],{"class":79,"line":4129},[77,83463,83323],{"class":87},[77,83465,83466],{"class":79,"line":4150},[77,83467,83328],{"class":87},[77,83469,83470],{"class":79,"line":4155},[77,83471,83427],{"class":87},[77,83473,83474],{"class":79,"line":4169},[77,83475,83476],{"class":87},"    \u002F\u002F     10             1                     11\n",[77,83478,83479],{"class":79,"line":4174},[77,83480,83437],{"class":87},[77,83482,83483],{"class":79,"line":4203},[77,83484,83485],{"class":87},"    \u002F\u002F     11             5                    16\n",[77,83487,83488],{"class":79,"line":4208},[77,83489,83437],{"class":87},[77,83491,83492],{"class":79,"line":4225},[77,83493,83494],{"class":87},"    \u002F\u002F     16             8                    24\n",[77,83496,83497],{"class":79,"line":4230},[77,83498,83499],{"class":87},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[77,83501,83502],{"class":79,"line":4235},[77,83503,83337],{"class":87},[77,83505,83506],{"class":79,"line":4240},[77,83507,83342],{"class":87},[77,83509,83510],{"class":79,"line":4254},[77,83511,83347],{"class":87},[77,83513,83514,83516,83518],{"class":79,"line":4259},[77,83515,54875],{"class":87},[77,83517,54271],{"class":158},[77,83519,291],{"class":87},[77,83521,83522,83524,83526],{"class":79,"line":5052},[77,83523,351],{"class":87},[77,83525,54258],{"class":158},[77,83527,291],{"class":87},[406,83529,83531],{"id":83530},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[24,83533,83534],{},[40,83535],{"alt":72,"src":83536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[67,83538,83540],{"className":55525,"code":83539,"language":55527,"meta":72,"style":72},"\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",[74,83541,83542,83550,83558,83563,83568,83573,83578,83582,83587,83592,83597,83602,83607,83612,83616,83621,83625,83630,83638],{"__ignoreMap":72},[77,83543,83544,83546,83548],{"class":79,"line":80},[77,83545,260],{"class":87},[77,83547,54258],{"class":158},[77,83549,291],{"class":87},[77,83551,83552,83554,83556],{"class":79,"line":91},[77,83553,54602],{"class":87},[77,83555,54271],{"class":158},[77,83557,291],{"class":87},[77,83559,83560],{"class":79,"line":107},[77,83561,83562],{"class":87},"    const arr = [\n",[77,83564,83565],{"class":79,"line":191},[77,83566,83567],{"class":87},"      { name: '张三', salary: 10000 },\n",[77,83569,83570],{"class":79,"line":1543},[77,83571,83572],{"class":87},"      { name: '李四', salary: 10000 },\n",[77,83574,83575],{"class":79,"line":1549},[77,83576,83577],{"class":87},"      { name: '王五', salary: 10000 }\n",[77,83579,83580],{"class":79,"line":1566},[77,83581,55567],{"class":87},[77,83583,83584],{"class":79,"line":1572},[77,83585,83586],{"class":87},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[77,83588,83589],{"class":79,"line":1589},[77,83590,83591],{"class":87},"    \u002F\u002F prev是累计值\n",[77,83593,83594],{"class":79,"line":1595},[77,83595,83596],{"class":87},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[77,83598,83599],{"class":79,"line":4088},[77,83600,83601],{"class":87},"    console.log(total)\n",[77,83603,83604],{"class":79,"line":4093},[77,83605,83606],{"class":87},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[77,83608,83609],{"class":79,"line":4099},[77,83610,83611],{"class":87},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[77,83613,83614],{"class":79,"line":4104},[77,83615,83606],{"class":87},[77,83617,83618],{"class":79,"line":4118},[77,83619,83620],{"class":87},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[77,83622,83623],{"class":79,"line":4123},[77,83624,83606],{"class":87},[77,83626,83627],{"class":79,"line":4129},[77,83628,83629],{"class":87},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[77,83631,83632,83634,83636],{"class":79,"line":4150},[77,83633,54875],{"class":87},[77,83635,54271],{"class":158},[77,83637,291],{"class":87},[77,83639,83640,83642,83644],{"class":79,"line":4155},[77,83641,351],{"class":87},[77,83643,54258],{"class":158},[77,83645,291],{"class":87},[406,83647,83649],{"id":83648},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[24,83651,83652],{},[40,83653],{"alt":72,"src":83654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[24,83656,83657],{},[40,83658],{"alt":72,"src":83659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[139,83661,83662],{},[54,83663,83664],{},"find()",[24,83666,83667],{},"循环查找，找到第一个就ok",[24,83669,83670],{},[417,83671,83674],{"href":83672,"rel":83673},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26332],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[67,83676,83678],{"className":53099,"code":83677,"language":53101,"meta":72,"style":72},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[74,83679,83680,83685,83690],{"__ignoreMap":72},[77,83681,83682],{"class":79,"line":80},[77,83683,83684],{"class":87},"const array1 = [5, 12, 8, 130, 44]\n",[77,83686,83687],{"class":79,"line":91},[77,83688,83689],{"class":87},"const found = array1.find((element) => element > 10)\n",[77,83691,83692],{"class":79,"line":107},[77,83693,83694],{"class":87},"console.log(found)  \u002F\u002F12\n",[24,83696,83697,83699,83700,83705,83706,83709,83710,83712,83713,83718,83719,83721,83722,83724,83725,83727,83728],{},[74,83698,83664],{}," 方法是一个",[417,83701,83704],{"href":83702,"rel":83703},"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",[26332],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[74,83707,83708],{},"callbackFn"," 函数，直到 ",[74,83711,83708],{}," 返回一个",[417,83714,83717],{"href":83715,"rel":83716},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26332],"真值","。然后 ",[74,83720,83664],{}," 返回该元素并停止迭代数组。如果 ",[74,83723,83708],{}," 从未返回真值，则 ",[74,83726,83664],{}," 返回 ",[74,83729,83730],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[67,83732,83734],{"className":55525,"code":83733,"language":55527,"meta":72,"style":72},"\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",[74,83735,83736,83744,83752,83757,83762,83767,83771,83776,83781,83785,83790,83795,83799,83803,83808,83813,83817,83821,83826,83831,83836,83841,83846,83850,83855,83860,83865,83870,83874,83879,83887],{"__ignoreMap":72},[77,83737,83738,83740,83742],{"class":79,"line":80},[77,83739,260],{"class":87},[77,83741,54258],{"class":158},[77,83743,291],{"class":87},[77,83745,83746,83748,83750],{"class":79,"line":91},[77,83747,54602],{"class":87},[77,83749,54271],{"class":158},[77,83751,291],{"class":87},[77,83753,83754],{"class":79,"line":107},[77,83755,83756],{"class":87},"    const arr = ['red', 'blue', 'green']\n",[77,83758,83759],{"class":79,"line":191},[77,83760,83761],{"class":87},"    const found = arr.find(item => item === 'pink')\n",[77,83763,83764],{"class":79,"line":1543},[77,83765,83766],{"class":87},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[77,83768,83769],{"class":79,"line":1549},[77,83770,4875],{"emptyLinePlaceholder":2549},[77,83772,83773],{"class":79,"line":1566},[77,83774,83775],{"class":87},"    \u002F\u002F 使用场景，用于查找数据\n",[77,83777,83778],{"class":79,"line":1572},[77,83779,83780],{"class":87},"    const arr1 = [\n",[77,83782,83783],{"class":79,"line":1589},[77,83784,81824],{"class":87},[77,83786,83787],{"class":79,"line":1595},[77,83788,83789],{"class":87},"        name: '小米',\n",[77,83791,83792],{"class":79,"line":4088},[77,83793,83794],{"class":87},"        price: 1999\n",[77,83796,83797],{"class":79,"line":4093},[77,83798,80330],{"class":87},[77,83800,83801],{"class":79,"line":4099},[77,83802,81824],{"class":87},[77,83804,83805],{"class":79,"line":4104},[77,83806,83807],{"class":87},"        name: '华为',\n",[77,83809,83810],{"class":79,"line":4118},[77,83811,83812],{"class":87},"        price: 3999\n",[77,83814,83815],{"class":79,"line":4123},[77,83816,54856],{"class":87},[77,83818,83819],{"class":79,"line":4129},[77,83820,55567],{"class":87},[77,83822,83823],{"class":79,"line":4150},[77,83824,83825],{"class":87},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[77,83827,83828],{"class":79,"line":4155},[77,83829,83830],{"class":87},"    \u002F\u002F const found1 = arr1.find(item => {\n",[77,83832,83833],{"class":79,"line":4169},[77,83834,83835],{"class":87},"    \u002F\u002F   if (item.name === '小米') {\n",[77,83837,83838],{"class":79,"line":4174},[77,83839,83840],{"class":87},"    \u002F\u002F     return item\n",[77,83842,83843],{"class":79,"line":4203},[77,83844,83845],{"class":87},"    \u002F\u002F   }\n",[77,83847,83848],{"class":79,"line":4208},[77,83849,65733],{"class":87},[77,83851,83852],{"class":79,"line":4225},[77,83853,83854],{"class":87},"    \u002F\u002F 另一种写法\n",[77,83856,83857],{"class":79,"line":4230},[77,83858,83859],{"class":87},"    const found1 = arr1.find(item => {\n",[77,83861,83862],{"class":79,"line":4235},[77,83863,83864],{"class":87},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[77,83866,83867],{"class":79,"line":4240},[77,83868,83869],{"class":87},"      return item.name = '小米'\n",[77,83871,83872],{"class":79,"line":4254},[77,83873,35928],{"class":87},[77,83875,83876],{"class":79,"line":4259},[77,83877,83878],{"class":87},"    console.log(found1)\n",[77,83880,83881,83883,83885],{"class":79,"line":5052},[77,83882,54875],{"class":87},[77,83884,54271],{"class":158},[77,83886,291],{"class":87},[77,83888,83889,83891,83893],{"class":79,"line":5066},[77,83890,351],{"class":87},[77,83892,54258],{"class":158},[77,83894,291],{"class":87},[24,83896,83897],{},[40,83898],{"alt":72,"src":83899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[24,83901,83902],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[139,83904,83905],{"start":91},[54,83906,83907],{},"every()返回的是布尔值",[24,83909,83910],{},[417,83911,83914],{"href":83912,"rel":83913},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26332],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[24,83916,83917],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[24,83919,83920],{},"some是只有有一个就没问题",[24,83922,83923],{},"every是必须全是才行",[67,83925,83929],{"className":83926,"code":83927,"language":83928,"meta":72,"style":72},"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",[74,83930,83931,83947,83961,83965,83974],{"__ignoreMap":72},[77,83932,83933,83935,83938,83940,83942,83945],{"class":79,"line":80},[77,83934,56903],{"class":2123},[77,83936,83937],{"class":87}," isBigEnough(element, ",[77,83939,33],{"class":2123},[77,83941,680],{"class":87},[77,83943,83944],{"class":2123},"array",[77,83946,14914],{"class":87},[77,83948,83949,83952,83955,83957,83959],{"class":79,"line":91},[77,83950,83951],{"class":2123},"  return",[77,83953,83954],{"class":87}," element ",[77,83956,4186],{"class":2123},[77,83958,4513],{"class":94},[77,83960,104],{"class":87},[77,83962,83963],{"class":79,"line":107},[77,83964,110],{"class":87},[77,83966,83967,83970,83972],{"class":79,"line":191},[77,83968,83969],{"class":87},"[12, 5, 8, 130, 44].every(isBigEnough); ",[77,83971,35796],{"class":2123},[77,83973,56970],{"class":87},[77,83975,83976,83979,83981],{"class":79,"line":1543},[77,83977,83978],{"class":87},"[12, 54, 18, 130, 44].every(isBigEnough); ",[77,83980,35796],{"class":2123},[77,83982,60388],{"class":87},[67,83984,83986],{"className":55525,"code":83985,"language":55527,"meta":72,"style":72},"\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",[74,83987,83988,83996,84004,84009,84013,84018,84023,84031],{"__ignoreMap":72},[77,83989,83990,83992,83994],{"class":79,"line":80},[77,83991,260],{"class":87},[77,83993,54258],{"class":158},[77,83995,291],{"class":87},[77,83997,83998,84000,84002],{"class":79,"line":91},[77,83999,54602],{"class":87},[77,84001,54271],{"class":158},[77,84003,291],{"class":87},[77,84005,84006],{"class":79,"line":107},[77,84007,84008],{"class":87},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[77,84010,84011],{"class":79,"line":191},[77,84012,80760],{"class":87},[77,84014,84015],{"class":79,"line":1543},[77,84016,84017],{"class":87},"    const flag = arr.every(item => item >= 10)\n",[77,84019,84020],{"class":79,"line":1549},[77,84021,84022],{"class":87},"    console.log(flag)    \u002F\u002Ftrue\n",[77,84024,84025,84027,84029],{"class":79,"line":1566},[77,84026,54875],{"class":87},[77,84028,54271],{"class":158},[77,84030,291],{"class":87},[77,84032,84033,84035,84037],{"class":79,"line":1572},[77,84034,351],{"class":87},[77,84036,54258],{"class":158},[77,84038,291],{"class":87},[67,84040,84042],{"className":55525,"code":84041,"language":55527,"meta":72,"style":72},"\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",[74,84043,84044,84052,84060,84064,84069,84074,84079,84087],{"__ignoreMap":72},[77,84045,84046,84048,84050],{"class":79,"line":80},[77,84047,260],{"class":87},[77,84049,54258],{"class":158},[77,84051,291],{"class":87},[77,84053,84054,84056,84058],{"class":79,"line":91},[77,84055,54602],{"class":87},[77,84057,54271],{"class":158},[77,84059,291],{"class":87},[77,84061,84062],{"class":79,"line":107},[77,84063,84008],{"class":87},[77,84065,84066],{"class":79,"line":191},[77,84067,84068],{"class":87},"    const arr = [10, 0, 5]\n",[77,84070,84071],{"class":79,"line":1543},[77,84072,84073],{"class":87},"    const flag = arr.some(item => item >= 10)\n",[77,84075,84076],{"class":79,"line":1549},[77,84077,84078],{"class":87},"    console.log(flag)   \u002F\u002Ftrue\n",[77,84080,84081,84083,84085],{"class":79,"line":1566},[77,84082,54875],{"class":87},[77,84084,54271],{"class":158},[77,84086,291],{"class":87},[77,84088,84089,84091,84093],{"class":79,"line":1572},[77,84090,351],{"class":87},[77,84092,54258],{"class":158},[77,84094,291],{"class":87},[406,84096,84098],{"id":84097},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[24,84100,84101],{},[40,84102],{"alt":72,"src":84103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[67,84105,84107],{"className":53099,"code":84106,"language":53101,"meta":72,"style":72},"\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",[74,84108,84109,84119,84133,84137,84145,84159,84179,84191,84199,84206,84218,84230,84242,84254,84264,84274,84278,84286,84294,84298,84306,84318,84326,84348,84353,84358,84391,84399,84407,84411],{"__ignoreMap":72},[77,84110,84111,84113,84115,84117],{"class":79,"line":80},[77,84112,53763],{"class":87},[77,84114,53766],{"class":158},[77,84116,53769],{"class":83},[77,84118,291],{"class":87},[77,84120,84121,84123,84125,84127,84129,84131],{"class":79,"line":91},[77,84122,260],{"class":87},[77,84124,53101],{"class":158},[77,84126,53780],{"class":83},[77,84128,268],{"class":87},[77,84130,53785],{"class":271},[77,84132,291],{"class":87},[77,84134,84135],{"class":79,"line":107},[77,84136,4875],{"emptyLinePlaceholder":2549},[77,84138,84139,84141,84143],{"class":79,"line":191},[77,84140,260],{"class":87},[77,84142,53798],{"class":158},[77,84144,291],{"class":87},[77,84146,84147,84149,84151,84153,84155,84157],{"class":79,"line":1543},[77,84148,54602],{"class":87},[77,84150,53808],{"class":158},[77,84152,53811],{"class":83},[77,84154,268],{"class":87},[77,84156,53816],{"class":271},[77,84158,291],{"class":87},[77,84160,84161,84163,84165,84167,84169,84171,84173,84175,84177],{"class":79,"line":1549},[77,84162,54602],{"class":87},[77,84164,53808],{"class":158},[77,84166,2495],{"class":83},[77,84168,268],{"class":87},[77,84170,53855],{"class":271},[77,84172,53835],{"class":83},[77,84174,268],{"class":87},[77,84176,53862],{"class":271},[77,84178,291],{"class":87},[77,84180,84181,84183,84185,84187,84189],{"class":79,"line":1566},[77,84182,54602],{"class":87},[77,84184,53871],{"class":158},[77,84186,53874],{"class":87},[77,84188,53871],{"class":158},[77,84190,291],{"class":87},[77,84192,84193,84195,84197],{"class":79,"line":1572},[77,84194,54602],{"class":87},[77,84196,2520],{"class":158},[77,84198,291],{"class":87},[77,84200,84201,84204],{"class":79,"line":1589},[77,84202,84203],{"class":158},"    div",[77,84205,88],{"class":87},[77,84207,84208,84210,84212,84214,84216],{"class":79,"line":1595},[77,84209,57223],{"class":94},[77,84211,98],{"class":87},[77,84213,4198],{"class":94},[77,84215,2124],{"class":2123},[77,84217,104],{"class":87},[77,84219,84220,84222,84224,84226,84228],{"class":79,"line":4088},[77,84221,57237],{"class":94},[77,84223,98],{"class":87},[77,84225,3015],{"class":94},[77,84227,2124],{"class":2123},[77,84229,104],{"class":87},[77,84231,84232,84234,84236,84238,84240],{"class":79,"line":4093},[77,84233,59807],{"class":94},[77,84235,98],{"class":87},[77,84237,3015],{"class":94},[77,84239,2124],{"class":2123},[77,84241,104],{"class":87},[77,84243,84244,84246,84248,84250,84252],{"class":79,"line":4099},[77,84245,67576],{"class":94},[77,84247,98],{"class":87},[77,84249,3111],{"class":94},[77,84251,2124],{"class":2123},[77,84253,104],{"class":87},[77,84255,84256,84258,84260,84262],{"class":79,"line":4104},[77,84257,59734],{"class":94},[77,84259,98],{"class":87},[77,84261,54052],{"class":94},[77,84263,104],{"class":87},[77,84265,84266,84268,84270,84272],{"class":79,"line":4118},[77,84267,57335],{"class":94},[77,84269,98],{"class":87},[77,84271,54104],{"class":94},[77,84273,104],{"class":87},[77,84275,84276],{"class":79,"line":4123},[77,84277,4662],{"class":87},[77,84279,84280,84282,84284],{"class":79,"line":4129},[77,84281,54875],{"class":87},[77,84283,2520],{"class":158},[77,84285,291],{"class":87},[77,84287,84288,84290,84292],{"class":79,"line":4150},[77,84289,351],{"class":87},[77,84291,53798],{"class":158},[77,84293,291],{"class":87},[77,84295,84296],{"class":79,"line":4155},[77,84297,4875],{"emptyLinePlaceholder":2549},[77,84299,84300,84302,84304],{"class":79,"line":4169},[77,84301,260],{"class":87},[77,84303,54258],{"class":158},[77,84305,291],{"class":87},[77,84307,84308,84310,84312,84314,84316],{"class":79,"line":4174},[77,84309,54602],{"class":87},[77,84311,331],{"class":158},[77,84313,57762],{"class":87},[77,84315,331],{"class":158},[77,84317,291],{"class":87},[77,84319,84320,84322,84324],{"class":79,"line":4203},[77,84321,54602],{"class":87},[77,84323,54271],{"class":158},[77,84325,291],{"class":87},[77,84327,84328,84330,84333,84335,84338,84341,84343,84346],{"class":79,"line":4208},[77,84329,13694],{"class":2123},[77,84331,84332],{"class":94}," spec",[77,84334,16036],{"class":2123},[77,84336,84337],{"class":87}," { size: ",[77,84339,84340],{"class":271},"'40cm*40cm'",[77,84342,57912],{"class":87},[77,84344,84345],{"class":271},"'黑色'",[77,84347,58052],{"class":87},[77,84349,84350],{"class":79,"line":4225},[77,84351,84352],{"class":323},"    \u002F\u002F const arr = Object.values(spec)\n",[77,84354,84355],{"class":79,"line":4230},[77,84356,84357],{"class":323},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[77,84359,84360,84362,84364,84366,84369,84371,84373,84376,84379,84382,84384,84386,84389],{"class":79,"line":4235},[77,84361,54865],{"class":87},[77,84363,56853],{"class":83},[77,84365,2622],{"class":87},[77,84367,84368],{"class":271},"'div'",[77,84370,76687],{"class":87},[77,84372,268],{"class":2123},[77,84374,84375],{"class":87}," Object.",[77,84377,84378],{"class":83},"values",[77,84380,84381],{"class":87},"(spec).",[77,84383,76661],{"class":83},[77,84385,2622],{"class":87},[77,84387,84388],{"class":271},"'\u002F'",[77,84390,2628],{"class":87},[77,84392,84393,84395,84397],{"class":79,"line":4240},[77,84394,54875],{"class":87},[77,84396,54271],{"class":158},[77,84398,291],{"class":87},[77,84400,84401,84403,84405],{"class":79,"line":4254},[77,84402,351],{"class":87},[77,84404,54258],{"class":158},[77,84406,291],{"class":87},[77,84408,84409],{"class":79,"line":4259},[77,84410,4875],{"emptyLinePlaceholder":2549},[77,84412,84413,84415,84417],{"class":79,"line":5052},[77,84414,351],{"class":87},[77,84416,53101],{"class":158},[77,84418,291],{"class":87},[24,84420,84421],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[406,84423,84425],{"id":84424},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[24,84427,84428],{},"静态方法，将伪数组转换为真数组",[24,84430,84431],{},[40,84432],{"alt":72,"src":84433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[67,84435,84437],{"className":55525,"code":84436,"language":55527,"meta":72,"style":72},"\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",[74,84438,84439,84447,84455,84467,84479,84491,84499,84507,84512,84517,84522,84527,84535],{"__ignoreMap":72},[77,84440,84441,84443,84445],{"class":79,"line":80},[77,84442,260],{"class":87},[77,84444,54258],{"class":158},[77,84446,291],{"class":87},[77,84448,84449,84451,84453],{"class":79,"line":91},[77,84450,54602],{"class":87},[77,84452,51],{"class":158},[77,84454,291],{"class":87},[77,84456,84457,84459,84461,84463,84465],{"class":79,"line":107},[77,84458,53805],{"class":87},[77,84460,54],{"class":158},[77,84462,57762],{"class":87},[77,84464,54],{"class":158},[77,84466,291],{"class":87},[77,84468,84469,84471,84473,84475,84477],{"class":79,"line":191},[77,84470,53805],{"class":87},[77,84472,54],{"class":158},[77,84474,57762],{"class":87},[77,84476,54],{"class":158},[77,84478,291],{"class":87},[77,84480,84481,84483,84485,84487,84489],{"class":79,"line":1543},[77,84482,53805],{"class":87},[77,84484,54],{"class":158},[77,84486,57762],{"class":87},[77,84488,54],{"class":158},[77,84490,291],{"class":87},[77,84492,84493,84495,84497],{"class":79,"line":1549},[77,84494,54875],{"class":87},[77,84496,51],{"class":158},[77,84498,291],{"class":87},[77,84500,84501,84503,84505],{"class":79,"line":1566},[77,84502,54602],{"class":87},[77,84504,54271],{"class":158},[77,84506,291],{"class":87},[77,84508,84509],{"class":79,"line":1572},[77,84510,84511],{"class":87},"    const lis = document.querySelectorAll('li')\n",[77,84513,84514],{"class":79,"line":1589},[77,84515,84516],{"class":87},"    const liss = Array.from(lis)\n",[77,84518,84519],{"class":79,"line":1595},[77,84520,84521],{"class":87},"    liss.pop()\n",[77,84523,84524],{"class":79,"line":4088},[77,84525,84526],{"class":87},"    console.log(liss)\n",[77,84528,84529,84531,84533],{"class":79,"line":4093},[77,84530,54875],{"class":87},[77,84532,54271],{"class":158},[77,84534,291],{"class":87},[77,84536,84537,84539,84541],{"class":79,"line":4099},[77,84538,351],{"class":87},[77,84540,54258],{"class":158},[77,84542,291],{"class":87},[24,84544,84545],{},[40,84546],{"alt":72,"src":84547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24468,84549,84551],{"id":84550},"_41053-string","4.10.5.3 String",[24,84553,84554],{},[40,84555],{"alt":72,"src":84556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[406,84558,84560],{"id":84559},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[67,84562,84564],{"className":55525,"code":84563,"language":55527,"meta":72,"style":72},"\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",[74,84565,84566,84574,84582,84587,84592,84597,84601,84606,84611,84616,84624],{"__ignoreMap":72},[77,84567,84568,84570,84572],{"class":79,"line":80},[77,84569,260],{"class":87},[77,84571,54258],{"class":158},[77,84573,291],{"class":87},[77,84575,84576,84578,84580],{"class":79,"line":91},[77,84577,54602],{"class":87},[77,84579,54271],{"class":158},[77,84581,291],{"class":87},[77,84583,84584],{"class":79,"line":107},[77,84585,84586],{"class":87},"    \u002F\u002F 把字符串转化为数组\n",[77,84588,84589],{"class":79,"line":191},[77,84590,84591],{"class":87},"    const str = 'pink,red'\n",[77,84593,84594],{"class":79,"line":1543},[77,84595,84596],{"class":87},"    const arr = str.split(',')\n",[77,84598,84599],{"class":79,"line":1549},[77,84600,83075],{"class":87},[77,84602,84603],{"class":79,"line":1566},[77,84604,84605],{"class":87},"    const str1 = '2025-8-25'\n",[77,84607,84608],{"class":79,"line":1572},[77,84609,84610],{"class":87},"    const arr1 = str1.split('-')\n",[77,84612,84613],{"class":79,"line":1589},[77,84614,84615],{"class":87},"    console.log(arr1)\n",[77,84617,84618,84620,84622],{"class":79,"line":1595},[77,84619,54875],{"class":87},[77,84621,54271],{"class":158},[77,84623,291],{"class":87},[77,84625,84626,84628,84630],{"class":79,"line":4088},[77,84627,351],{"class":87},[77,84629,54258],{"class":158},[77,84631,291],{"class":87},[406,84633,84635],{"id":84634},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[24,84637,7656],{},[24,84639,84640],{},"substring(indexStart)",[24,84642,84643],{},"substring(indexStart, indexEnd)",[51,84645,84646,84657,84669,84679],{},[54,84647,84648,84649,84652,84653,84656],{},"如果省略了 ",[74,84650,84651],{},"indexEnd","，则 ",[74,84654,84655],{},"substring()"," 提取字符直到字符串的末尾",[54,84658,84659,84660,84663,84664,84652,84666,84668],{},"如果 ",[74,84661,84662],{},"indexStart"," 等于 ",[74,84665,84651],{},[74,84667,84655],{}," 返回一个空字符串",[54,84670,84659,84671,84673,84674,84652,84676,84678],{},[74,84672,84662],{}," 大于 ",[74,84675,84651],{},[74,84677,84655],{}," 的效果就像交换了这两个参数一样",[54,84680,84681],{},"结束的索引号不包含想要截取的部分",[67,84683,84685],{"className":83926,"code":84684,"language":83928,"meta":72,"style":72},"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",[74,84686,84687,84699,84703,84737,84767,84771,84802,84806,84833,84863,84893,84897,84928],{"__ignoreMap":72},[77,84688,84689,84692,84694,84697],{"class":79,"line":80},[77,84690,84691],{"class":87},"const anyString ",[77,84693,268],{"class":2123},[77,84695,84696],{"class":271}," \"Mozilla\"",[77,84698,104],{"class":87},[77,84700,84701],{"class":79,"line":91},[77,84702,4875],{"emptyLinePlaceholder":2549},[77,84704,84705,84708,84710,84712,84714,84717,84719,84722,84724,84726,84728,84730,84732,84734],{"class":79,"line":107},[77,84706,84707],{"class":94},"console",[77,84709,3171],{"class":87},[77,84711,60695],{"class":94},[77,84713,2622],{"class":87},[77,84715,84716],{"class":94},"anyString",[77,84718,3171],{"class":87},[77,84720,84721],{"class":94},"substring",[77,84723,2622],{"class":87},[77,84725,1939],{"class":94},[77,84727,680],{"class":87},[77,84729,2120],{"class":94},[77,84731,77691],{"class":87},[77,84733,35796],{"class":2123},[77,84735,84736],{"class":271}," 'M'\n",[77,84738,84739,84741,84743,84745,84747,84749,84751,84753,84755,84757,84759,84761,84763,84765],{"class":79,"line":191},[77,84740,84707],{"class":94},[77,84742,3171],{"class":87},[77,84744,60695],{"class":94},[77,84746,2622],{"class":87},[77,84748,84716],{"class":94},[77,84750,3171],{"class":87},[77,84752,84721],{"class":94},[77,84754,2622],{"class":87},[77,84756,2120],{"class":94},[77,84758,680],{"class":87},[77,84760,1939],{"class":94},[77,84762,77691],{"class":87},[77,84764,35796],{"class":2123},[77,84766,84736],{"class":271},[77,84768,84769],{"class":79,"line":1543},[77,84770,4875],{"emptyLinePlaceholder":2549},[77,84772,84773,84775,84777,84779,84781,84783,84785,84787,84789,84791,84793,84795,84797,84799],{"class":79,"line":1549},[77,84774,84707],{"class":94},[77,84776,3171],{"class":87},[77,84778,60695],{"class":94},[77,84780,2622],{"class":87},[77,84782,84716],{"class":94},[77,84784,3171],{"class":87},[77,84786,84721],{"class":94},[77,84788,2622],{"class":87},[77,84790,1939],{"class":94},[77,84792,680],{"class":87},[77,84794,2958],{"class":94},[77,84796,77691],{"class":87},[77,84798,35796],{"class":2123},[77,84800,84801],{"class":271}," 'Mozill'\n",[77,84803,84804],{"class":79,"line":1566},[77,84805,4875],{"emptyLinePlaceholder":2549},[77,84807,84808,84810,84812,84814,84816,84818,84820,84822,84824,84826,84828,84830],{"class":79,"line":1572},[77,84809,84707],{"class":94},[77,84811,3171],{"class":87},[77,84813,60695],{"class":94},[77,84815,2622],{"class":87},[77,84817,84716],{"class":94},[77,84819,3171],{"class":87},[77,84821,84721],{"class":94},[77,84823,2622],{"class":87},[77,84825,2907],{"class":94},[77,84827,77691],{"class":87},[77,84829,35796],{"class":2123},[77,84831,84832],{"class":271}," 'lla'\n",[77,84834,84835,84837,84839,84841,84843,84845,84847,84849,84851,84853,84855,84857,84859,84861],{"class":79,"line":1589},[77,84836,84707],{"class":94},[77,84838,3171],{"class":87},[77,84840,60695],{"class":94},[77,84842,2622],{"class":87},[77,84844,84716],{"class":94},[77,84846,3171],{"class":87},[77,84848,84721],{"class":94},[77,84850,2622],{"class":87},[77,84852,2907],{"class":94},[77,84854,680],{"class":87},[77,84856,2983],{"class":94},[77,84858,77747],{"class":87},[77,84860,35796],{"class":2123},[77,84862,84832],{"class":271},[77,84864,84865,84867,84869,84871,84873,84875,84877,84879,84881,84883,84885,84887,84889,84891],{"class":79,"line":1595},[77,84866,84707],{"class":94},[77,84868,3171],{"class":87},[77,84870,60695],{"class":94},[77,84872,2622],{"class":87},[77,84874,84716],{"class":94},[77,84876,3171],{"class":87},[77,84878,84721],{"class":94},[77,84880,2622],{"class":87},[77,84882,2983],{"class":94},[77,84884,680],{"class":87},[77,84886,2907],{"class":94},[77,84888,77691],{"class":87},[77,84890,35796],{"class":2123},[77,84892,84832],{"class":271},[77,84894,84895],{"class":79,"line":4088},[77,84896,4875],{"emptyLinePlaceholder":2549},[77,84898,84899,84901,84903,84905,84907,84909,84911,84913,84915,84917,84919,84921,84923,84925],{"class":79,"line":4093},[77,84900,84707],{"class":94},[77,84902,3171],{"class":87},[77,84904,60695],{"class":94},[77,84906,2622],{"class":87},[77,84908,84716],{"class":94},[77,84910,3171],{"class":87},[77,84912,84721],{"class":94},[77,84914,2622],{"class":87},[77,84916,1939],{"class":94},[77,84918,680],{"class":87},[77,84920,2983],{"class":94},[77,84922,77691],{"class":87},[77,84924,35796],{"class":2123},[77,84926,84927],{"class":271}," 'Mozilla'\n",[77,84929,84930,84932,84934,84936,84938,84940,84942,84944,84946,84948,84950,84952,84954,84956],{"class":79,"line":4099},[77,84931,84707],{"class":94},[77,84933,3171],{"class":87},[77,84935,60695],{"class":94},[77,84937,2622],{"class":87},[77,84939,84716],{"class":94},[77,84941,3171],{"class":87},[77,84943,84721],{"class":94},[77,84945,2622],{"class":87},[77,84947,1939],{"class":94},[77,84949,680],{"class":87},[77,84951,3059],{"class":94},[77,84953,77691],{"class":87},[77,84955,35796],{"class":2123},[77,84957,84927],{"class":271},[406,84959,84961],{"id":84960},"_410533-startswith","4.10.5.3.3 startsWith",[24,84963,84964,84967,84968,84973,84974,84976,84977],{},[74,84965,84966],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[27,84969,84970],{},[74,84971,84972],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[74,84975,3840],{}," 或 ",[74,84978,68463],{},[67,84980,84982],{"className":79933,"code":84981,"language":79935,"meta":72,"style":72},"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",[74,84983,84984,84996,85015,85020,85040],{"__ignoreMap":72},[77,84985,84986,84988,84991,84993],{"class":79,"line":80},[77,84987,9267],{"class":2123},[77,84989,84990],{"class":87}," str1 ",[77,84992,268],{"class":2123},[77,84994,84995],{"class":271}," \"Saturday night plans\"\n",[77,84997,84998,85000,85002,85005,85008,85010,85013],{"class":79,"line":91},[77,84999,79970],{"class":87},[77,85001,60695],{"class":83},[77,85003,85004],{"class":87},"(str1.",[77,85006,85007],{"class":83},"startsWith",[77,85009,2622],{"class":87},[77,85011,85012],{"class":271},"\"Sat\"",[77,85014,32965],{"class":87},[77,85016,85017],{"class":79,"line":107},[77,85018,85019],{"class":323},"\u002F\u002F Expected output: true\n",[77,85021,85022,85024,85026,85028,85030,85032,85034,85036,85038],{"class":79,"line":191},[77,85023,79970],{"class":87},[77,85025,60695],{"class":83},[77,85027,85004],{"class":87},[77,85029,85007],{"class":83},[77,85031,2622],{"class":87},[77,85033,85012],{"class":271},[77,85035,680],{"class":87},[77,85037,2690],{"class":94},[77,85039,32965],{"class":87},[77,85041,85042],{"class":79,"line":1543},[77,85043,85044],{"class":323},"\u002F\u002F Expected output: false\n",[67,85046,85048],{"className":53099,"code":85047,"language":53101,"meta":72,"style":72},"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",[74,85049,85050,85055,85060,85064,85069,85074],{"__ignoreMap":72},[77,85051,85052],{"class":79,"line":80},[77,85053,85054],{"class":87},"startsWith(searchString)\n",[77,85056,85057],{"class":79,"line":91},[77,85058,85059],{"class":87},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[77,85061,85062],{"class":79,"line":107},[77,85063,4875],{"emptyLinePlaceholder":2549},[77,85065,85066],{"class":79,"line":191},[77,85067,85068],{"class":87},"const str3 = 'pink老师上课中'\n",[77,85070,85071],{"class":79,"line":1543},[77,85072,85073],{"class":87},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[77,85075,85076],{"class":79,"line":1549},[77,85077,85078],{"class":87},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[406,85080,85082],{"id":85081},"_410534-includes","4.10.5.3.4 includes",[24,85084,85085],{},"includes(searchString) includes(searchString, position)",[139,85087,85088],{},[54,85089,85090],{},"searchString:",[24,85092,85093,85094,85096,85097,85102,85103,85108,85109,23970,85112,85115,85116,85119],{},"一个要在 ",[74,85095,3780],{}," 中查找的字符串。",[417,85098,85101],{"href":85099,"rel":85100},"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",[26332],"不能是正则表达式","。所有非正则表达式的值都会被",[417,85104,85107],{"href":85105,"rel":85106},"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",[26332],"强制转换为字符串","，因此如果该参数被省略或传入 ",[74,85110,85111],{},"undefined",[74,85113,85114],{},"includes()"," 方法会在字符串中搜索 ",[74,85117,85118],{},"\"undefined\"","，这通常不是你想要的",[139,85121,85122],{"start":91},[54,85123,85124,3472],{},[74,85125,85126],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[24,85128,85129,85130,85133,85134],{},"在字符串中开始搜索 ",[74,85131,85132],{},"searchString"," 的位置。默认值为 ",[74,85135,1939],{},[139,85137,85138],{"start":107},[54,85139,85140],{},"返回值：",[24,85142,85143,85144,85146,85147,85151,85152],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[74,85145,85132],{}," 为空字符串的情况），则返回 ",[27,85148,85149],{},[74,85150,3840],{}," ，否则返回 ",[27,85153,85154],{},[74,85155,68463],{},[139,85157,85158],{"start":191},[54,85159,85160],{},"异常：",[24,85162,84659,85163,16267,85165,85169],{},[74,85164,85132],{},[417,85166,85168],{"href":85099,"rel":85167},[26332],"是一个正则表达式","，则会抛出",[24,85171,85172],{},"只要是有就是true，不需要非得以谁开头结尾",[67,85174,85176],{"className":79933,"code":85175,"language":79935,"meta":72,"style":72},"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",[74,85177,85178,85189,85212,85231,85251,85273,85292],{"__ignoreMap":72},[77,85179,85180,85182,85184,85186],{"class":79,"line":80},[77,85181,9267],{"class":2123},[77,85183,82213],{"class":87},[77,85185,268],{"class":2123},[77,85187,85188],{"class":271}," \"To be, or not to be, that is the question.\"\n",[77,85190,85191,85193,85195,85198,85201,85203,85206,85209],{"class":79,"line":91},[77,85192,79970],{"class":87},[77,85194,60695],{"class":83},[77,85196,85197],{"class":87},"(str.",[77,85199,85200],{"class":83},"includes",[77,85202,2622],{"class":87},[77,85204,85205],{"class":271},"\"To be\"",[77,85207,85208],{"class":87},"))",[77,85210,85211],{"class":323},"  \u002F\u002F true\n",[77,85213,85214,85216,85218,85220,85222,85224,85227,85229],{"class":79,"line":107},[77,85215,79970],{"class":87},[77,85217,60695],{"class":83},[77,85219,85197],{"class":87},[77,85221,85200],{"class":83},[77,85223,2622],{"class":87},[77,85225,85226],{"class":271},"\"question\"",[77,85228,85208],{"class":87},[77,85230,85211],{"class":323},[77,85232,85233,85235,85237,85239,85241,85243,85246,85248],{"class":79,"line":191},[77,85234,79970],{"class":87},[77,85236,60695],{"class":83},[77,85238,85197],{"class":87},[77,85240,85200],{"class":83},[77,85242,2622],{"class":87},[77,85244,85245],{"class":271},"\"nonexistent\"",[77,85247,85208],{"class":87},[77,85249,85250],{"class":323},"  \u002F\u002F false\n",[77,85252,85253,85255,85257,85259,85261,85263,85265,85267,85269,85271],{"class":79,"line":1543},[77,85254,79970],{"class":87},[77,85256,60695],{"class":83},[77,85258,85197],{"class":87},[77,85260,85200],{"class":83},[77,85262,2622],{"class":87},[77,85264,85205],{"class":271},[77,85266,680],{"class":87},[77,85268,2120],{"class":94},[77,85270,85208],{"class":87},[77,85272,85250],{"class":323},[77,85274,85275,85277,85279,85281,85283,85285,85288,85290],{"class":79,"line":1549},[77,85276,79970],{"class":87},[77,85278,60695],{"class":83},[77,85280,85197],{"class":87},[77,85282,85200],{"class":83},[77,85284,2622],{"class":87},[77,85286,85287],{"class":271},"\"TO BE\"",[77,85289,85208],{"class":87},[77,85291,85250],{"class":323},[77,85293,85294,85296,85298,85300,85302,85304,85306,85308],{"class":79,"line":1566},[77,85295,79970],{"class":87},[77,85297,60695],{"class":83},[77,85299,85197],{"class":87},[77,85301,85200],{"class":83},[77,85303,2622],{"class":87},[77,85305,444],{"class":271},[77,85307,85208],{"class":87},[77,85309,85211],{"class":323},[406,85311,85313],{"id":85312},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[67,85315,85317],{"className":55525,"code":85316,"language":55527,"meta":72,"style":72},"\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",[74,85318,85319,85327,85335,85340,85345,85350,85355,85360,85368],{"__ignoreMap":72},[77,85320,85321,85323,85325],{"class":79,"line":80},[77,85322,260],{"class":87},[77,85324,54258],{"class":158},[77,85326,291],{"class":87},[77,85328,85329,85331,85333],{"class":79,"line":91},[77,85330,54602],{"class":87},[77,85332,54271],{"class":158},[77,85334,291],{"class":87},[77,85336,85337],{"class":79,"line":107},[77,85338,85339],{"class":87},"    const num = 10\n",[77,85341,85342],{"class":79,"line":191},[77,85343,85344],{"class":87},"    \u002F\u002F 强制转换\n",[77,85346,85347],{"class":79,"line":1543},[77,85348,85349],{"class":87},"    console.log(String(num))\n",[77,85351,85352],{"class":79,"line":1549},[77,85353,85354],{"class":87},"    \u002F\u002F toString()方法转换\n",[77,85356,85357],{"class":79,"line":1566},[77,85358,85359],{"class":87},"    console.log(num.toString())\n",[77,85361,85362,85364,85366],{"class":79,"line":1572},[77,85363,54875],{"class":87},[77,85365,54271],{"class":158},[77,85367,291],{"class":87},[77,85369,85370,85372,85374],{"class":79,"line":1589},[77,85371,351],{"class":87},[77,85373,54258],{"class":158},[77,85375,291],{"class":87},[406,85377,85379],{"id":85378},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[24,85381,85382],{},[40,85383],{"alt":72,"src":85384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[67,85386,85388],{"className":53099,"code":85387,"language":53101,"meta":72,"style":72},"\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",[74,85389,85390,85400,85414,85418,85426,85440,85460,85472,85480,85484,85492,85504,85512,85524,85529,85534,85539,85586,85602,85610,85618,85622],{"__ignoreMap":72},[77,85391,85392,85394,85396,85398],{"class":79,"line":80},[77,85393,53763],{"class":87},[77,85395,53766],{"class":158},[77,85397,53769],{"class":83},[77,85399,291],{"class":87},[77,85401,85402,85404,85406,85408,85410,85412],{"class":79,"line":91},[77,85403,260],{"class":87},[77,85405,53101],{"class":158},[77,85407,53780],{"class":83},[77,85409,268],{"class":87},[77,85411,53785],{"class":271},[77,85413,291],{"class":87},[77,85415,85416],{"class":79,"line":107},[77,85417,4875],{"emptyLinePlaceholder":2549},[77,85419,85420,85422,85424],{"class":79,"line":191},[77,85421,260],{"class":87},[77,85423,53798],{"class":158},[77,85425,291],{"class":87},[77,85427,85428,85430,85432,85434,85436,85438],{"class":79,"line":1543},[77,85429,54602],{"class":87},[77,85431,53808],{"class":158},[77,85433,53811],{"class":83},[77,85435,268],{"class":87},[77,85437,53816],{"class":271},[77,85439,291],{"class":87},[77,85441,85442,85444,85446,85448,85450,85452,85454,85456,85458],{"class":79,"line":1549},[77,85443,54602],{"class":87},[77,85445,53808],{"class":158},[77,85447,2495],{"class":83},[77,85449,268],{"class":87},[77,85451,53855],{"class":271},[77,85453,53835],{"class":83},[77,85455,268],{"class":87},[77,85457,53862],{"class":271},[77,85459,291],{"class":87},[77,85461,85462,85464,85466,85468,85470],{"class":79,"line":1566},[77,85463,54602],{"class":87},[77,85465,53871],{"class":158},[77,85467,53874],{"class":87},[77,85469,53871],{"class":158},[77,85471,291],{"class":87},[77,85473,85474,85476,85478],{"class":79,"line":1572},[77,85475,351],{"class":87},[77,85477,53798],{"class":158},[77,85479,291],{"class":87},[77,85481,85482],{"class":79,"line":1589},[77,85483,4875],{"emptyLinePlaceholder":2549},[77,85485,85486,85488,85490],{"class":79,"line":1595},[77,85487,260],{"class":87},[77,85489,54258],{"class":158},[77,85491,291],{"class":87},[77,85493,85494,85496,85498,85500,85502],{"class":79,"line":4088},[77,85495,54602],{"class":87},[77,85497,331],{"class":158},[77,85499,57762],{"class":87},[77,85501,331],{"class":158},[77,85503,291],{"class":87},[77,85505,85506,85508,85510],{"class":79,"line":4093},[77,85507,54602],{"class":87},[77,85509,54271],{"class":158},[77,85511,291],{"class":87},[77,85513,85514,85516,85519,85521],{"class":79,"line":4099},[77,85515,13694],{"class":2123},[77,85517,85518],{"class":94}," gift",[77,85520,16036],{"class":2123},[77,85522,85523],{"class":271}," '50g的茶叶，清洗球'\n",[77,85525,85526],{"class":79,"line":4104},[77,85527,85528],{"class":323},"    \u002F\u002F 1.把字符串拆分为数组\n",[77,85530,85531],{"class":79,"line":4118},[77,85532,85533],{"class":323},"    \u002F\u002F console.log(gift.split(','))\n",[77,85535,85536],{"class":79,"line":4123},[77,85537,85538],{"class":323},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[77,85540,85541,85543,85545,85547,85550,85553,85555,85558,85560,85562,85564,85566,85568,85571,85573,85576,85578,85580,85582,85584],{"class":79,"line":4129},[77,85542,13694],{"class":2123},[77,85544,76358],{"class":94},[77,85546,16036],{"class":2123},[77,85548,85549],{"class":87}," gift.",[77,85551,85552],{"class":83},"split",[77,85554,2622],{"class":87},[77,85556,85557],{"class":271},"'，'",[77,85559,33294],{"class":87},[77,85561,76483],{"class":83},[77,85563,2622],{"class":87},[77,85565,82233],{"class":7691},[77,85567,82236],{"class":2123},[77,85569,85570],{"class":271}," `\u003Cspan>【赠品】${",[77,85572,82233],{"class":87},[77,85574,85575],{"class":271},"}\u003C\u002Fspan>\u003Cbr>`",[77,85577,33294],{"class":87},[77,85579,76661],{"class":83},[77,85581,2622],{"class":87},[77,85583,76666],{"class":271},[77,85585,2628],{"class":87},[77,85587,85588,85590,85592,85594,85596,85598,85600],{"class":79,"line":4150},[77,85589,54865],{"class":87},[77,85591,56853],{"class":83},[77,85593,2622],{"class":87},[77,85595,84368],{"class":271},[77,85597,76687],{"class":87},[77,85599,268],{"class":2123},[77,85601,76424],{"class":87},[77,85603,85604,85606,85608],{"class":79,"line":4155},[77,85605,54875],{"class":87},[77,85607,54271],{"class":158},[77,85609,291],{"class":87},[77,85611,85612,85614,85616],{"class":79,"line":4169},[77,85613,351],{"class":87},[77,85615,54258],{"class":158},[77,85617,291],{"class":87},[77,85619,85620],{"class":79,"line":4174},[77,85621,4875],{"emptyLinePlaceholder":2549},[77,85623,85624,85626,85628],{"class":79,"line":4203},[77,85625,351],{"class":87},[77,85627,53101],{"class":158},[77,85629,291],{"class":87},[24468,85631,85633],{"id":85632},"_41054-number","4.10.5.4 Number",[24,85635,85636],{},[40,85637],{"alt":72,"src":85638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[24,85640,85641],{},"整数也可以进行toFixed来保留小数",[24,85643,85644],{},"比如：",[24,85646,85647],{},"const price=10",[24,85649,85650],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24468,85652,85654],{"id":85653},"_41055-购物车展示","4.10.5.5 购物车展示",[24,85656,85657],{},[40,85658],{"alt":72,"src":85659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[67,85661,85663],{"className":53099,"code":85662,"language":53101,"meta":72,"style":72},"\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",[74,85664,85665,85675,85689,85693,85701,85715,85735,85747,85755,85761,85771,85781,85791,85795,85799,85805,85817,85831,85835,85839,85845,85857,85873,85883,85899,85903,85907,85913,85923,85933,85937,85941,85949,85961,85973,85985,85989,85993,86001,86013,86017,86021,86032,86042,86054,86066,86076,86080,86084,86092,86101,86113,86123,86133,86137,86141,86149,86158,86165,86175,86187,86191,86195,86204,86214,86225,86237,86249,86253,86257,86266,86276,86287,86291,86295,86301,86313,86325,86335,86345,86363,86375,86379,86383,86392,86404,86414,86424,86436,86440,86448,86456,86460,86468,86482,86490,86504,86532,86540,86548,86558,86562,86570,86578,86587,86595,86604,86614,86618,86622,86630,86638,86647,86655,86663,86676,86680,86684,86692,86700,86709,86717,86725,86740,86744,86748,86756,86764,86773,86781,86789,86803,86811,86815,86819,86824,86850,86855,86892,86897,86920,86925,86979,86984,87020,87024,87030,87035,87044,87058,87067,87086,87095,87105,87110,87115,87128,87133,87187,87213,87221,87229,87233],{"__ignoreMap":72},[77,85666,85667,85669,85671,85673],{"class":79,"line":80},[77,85668,53763],{"class":87},[77,85670,53766],{"class":158},[77,85672,53769],{"class":83},[77,85674,291],{"class":87},[77,85676,85677,85679,85681,85683,85685,85687],{"class":79,"line":91},[77,85678,260],{"class":87},[77,85680,53101],{"class":158},[77,85682,53780],{"class":83},[77,85684,268],{"class":87},[77,85686,53785],{"class":271},[77,85688,291],{"class":87},[77,85690,85691],{"class":79,"line":107},[77,85692,4875],{"emptyLinePlaceholder":2549},[77,85694,85695,85697,85699],{"class":79,"line":191},[77,85696,260],{"class":87},[77,85698,53798],{"class":158},[77,85700,291],{"class":87},[77,85702,85703,85705,85707,85709,85711,85713],{"class":79,"line":1543},[77,85704,54602],{"class":87},[77,85706,53808],{"class":158},[77,85708,53811],{"class":83},[77,85710,268],{"class":87},[77,85712,53816],{"class":271},[77,85714,291],{"class":87},[77,85716,85717,85719,85721,85723,85725,85727,85729,85731,85733],{"class":79,"line":1549},[77,85718,54602],{"class":87},[77,85720,53808],{"class":158},[77,85722,2495],{"class":83},[77,85724,268],{"class":87},[77,85726,53855],{"class":271},[77,85728,53835],{"class":83},[77,85730,268],{"class":87},[77,85732,53862],{"class":271},[77,85734,291],{"class":87},[77,85736,85737,85739,85741,85743,85745],{"class":79,"line":1566},[77,85738,54602],{"class":87},[77,85740,53871],{"class":158},[77,85742,53874],{"class":87},[77,85744,53871],{"class":158},[77,85746,291],{"class":87},[77,85748,85749,85751,85753],{"class":79,"line":1572},[77,85750,54602],{"class":87},[77,85752,2520],{"class":158},[77,85754,291],{"class":87},[77,85756,85757,85759],{"class":79,"line":1589},[77,85758,8878],{"class":158},[77,85760,88],{"class":87},[77,85762,85763,85765,85767,85769],{"class":79,"line":1595},[77,85764,57149],{"class":94},[77,85766,98],{"class":87},[77,85768,1939],{"class":94},[77,85770,104],{"class":87},[77,85772,85773,85775,85777,85779],{"class":79,"line":4088},[77,85774,57160],{"class":94},[77,85776,98],{"class":87},[77,85778,1939],{"class":94},[77,85780,104],{"class":87},[77,85782,85783,85785,85787,85789],{"class":79,"line":4093},[77,85784,75035],{"class":94},[77,85786,98],{"class":87},[77,85788,62953],{"class":94},[77,85790,104],{"class":87},[77,85792,85793],{"class":79,"line":4099},[77,85794,4662],{"class":87},[77,85796,85797],{"class":79,"line":4104},[77,85798,4875],{"emptyLinePlaceholder":2549},[77,85800,85801,85803],{"class":79,"line":4118},[77,85802,64567],{"class":83},[77,85804,88],{"class":87},[77,85806,85807,85809,85811,85813,85815],{"class":79,"line":4123},[77,85808,57223],{"class":94},[77,85810,98],{"class":87},[77,85812,81012],{"class":94},[77,85814,2124],{"class":2123},[77,85816,104],{"class":87},[77,85818,85819,85821,85823,85825,85827,85829],{"class":79,"line":4129},[77,85820,57160],{"class":94},[77,85822,98],{"class":87},[77,85824,2925],{"class":94},[77,85826,2124],{"class":2123},[77,85828,1942],{"class":94},[77,85830,104],{"class":87},[77,85832,85833],{"class":79,"line":4150},[77,85834,4662],{"class":87},[77,85836,85837],{"class":79,"line":4155},[77,85838,4875],{"emptyLinePlaceholder":2549},[77,85840,85841,85843],{"class":79,"line":4169},[77,85842,81063],{"class":83},[77,85844,88],{"class":87},[77,85846,85847,85849,85851,85853,85855],{"class":79,"line":4174},[77,85848,57149],{"class":94},[77,85850,98],{"class":87},[77,85852,3188],{"class":94},[77,85854,2124],{"class":2123},[77,85856,104],{"class":87},[77,85858,85859,85861,85863,85865,85867,85869,85871],{"class":79,"line":4203},[77,85860,64305],{"class":94},[77,85862,98],{"class":87},[77,85864,30589],{"class":94},[77,85866,81118],{"class":94},[77,85868,81121],{"class":94},[77,85870,3308],{"class":2123},[77,85872,104],{"class":87},[77,85874,85875,85877,85879,85881],{"class":79,"line":4208},[77,85876,57459],{"class":94},[77,85878,98],{"class":87},[77,85880,53940],{"class":94},[77,85882,104],{"class":87},[77,85884,85885,85887,85889,85891,85893,85895,85897],{"class":79,"line":4225},[77,85886,64421],{"class":94},[77,85888,98],{"class":87},[77,85890,2120],{"class":94},[77,85892,2124],{"class":2123},[77,85894,2127],{"class":94},[77,85896,64688],{"class":94},[77,85898,104],{"class":87},[77,85900,85901],{"class":79,"line":4230},[77,85902,4662],{"class":87},[77,85904,85905],{"class":79,"line":4235},[77,85906,4875],{"emptyLinePlaceholder":2549},[77,85908,85909,85911],{"class":79,"line":4240},[77,85910,81181],{"class":83},[77,85912,88],{"class":87},[77,85914,85915,85917,85919,85921],{"class":79,"line":4254},[77,85916,64469],{"class":94},[77,85918,98],{"class":87},[77,85920,64474],{"class":94},[77,85922,104],{"class":87},[77,85924,85925,85927,85929,85931],{"class":79,"line":4259},[77,85926,57335],{"class":94},[77,85928,98],{"class":87},[77,85930,64263],{"class":94},[77,85932,104],{"class":87},[77,85934,85935],{"class":79,"line":5052},[77,85936,4662],{"class":87},[77,85938,85939],{"class":79,"line":5066},[77,85940,4875],{"emptyLinePlaceholder":2549},[77,85942,85943,85945,85947],{"class":79,"line":5074},[77,85944,81063],{"class":83},[77,85946,58063],{"class":158},[77,85948,88],{"class":87},[77,85950,85951,85953,85955,85957,85959],{"class":79,"line":5079},[77,85952,57223],{"class":94},[77,85954,98],{"class":87},[77,85956,3225],{"class":94},[77,85958,2124],{"class":2123},[77,85960,104],{"class":87},[77,85962,85963,85965,85967,85969,85971],{"class":79,"line":5085},[77,85964,57237],{"class":94},[77,85966,98],{"class":87},[77,85968,3225],{"class":94},[77,85970,2124],{"class":2123},[77,85972,104],{"class":87},[77,85974,85975,85977,85979,85981,85983],{"class":79,"line":5091},[77,85976,64195],{"class":94},[77,85978,98],{"class":87},[77,85980,2933],{"class":94},[77,85982,2124],{"class":2123},[77,85984,104],{"class":87},[77,85986,85987],{"class":79,"line":5096},[77,85988,4662],{"class":87},[77,85990,85991],{"class":79,"line":10422},[77,85992,4875],{"emptyLinePlaceholder":2549},[77,85994,85995,85997,85999],{"class":79,"line":10446},[77,85996,81063],{"class":83},[77,85998,64748],{"class":83},[77,86000,88],{"class":87},[77,86002,86003,86005,86007,86009,86011],{"class":79,"line":10451},[77,86004,57223],{"class":94},[77,86006,98],{"class":87},[77,86008,4198],{"class":94},[77,86010,2124],{"class":2123},[77,86012,104],{"class":87},[77,86014,86015],{"class":79,"line":10457},[77,86016,4662],{"class":87},[77,86018,86019],{"class":79,"line":10484},[77,86020,4875],{"emptyLinePlaceholder":2549},[77,86022,86023,86025,86027,86030],{"class":79,"line":10489},[77,86024,81063],{"class":83},[77,86026,64748],{"class":83},[77,86028,86029],{"class":83}," .tag",[77,86031,88],{"class":87},[77,86033,86034,86036,86038,86040],{"class":79,"line":10495},[77,86035,57459],{"class":94},[77,86037,98],{"class":87},[77,86039,456],{"class":94},[77,86041,104],{"class":87},[77,86043,86044,86046,86048,86050,86052],{"class":79,"line":10507},[77,86045,57149],{"class":94},[77,86047,98],{"class":87},[77,86049,2696],{"class":94},[77,86051,2124],{"class":2123},[77,86053,104],{"class":87},[77,86055,86056,86058,86060,86062,86064],{"class":79,"line":10519},[77,86057,57372],{"class":94},[77,86059,98],{"class":87},[77,86061,3111],{"class":94},[77,86063,2124],{"class":2123},[77,86065,104],{"class":87},[77,86067,86068,86070,86072,86074],{"class":79,"line":10531},[77,86069,59864],{"class":94},[77,86071,98],{"class":87},[77,86073,64514],{"class":94},[77,86075,104],{"class":87},[77,86077,86078],{"class":79,"line":12189},[77,86079,4662],{"class":87},[77,86081,86082],{"class":79,"line":12214},[77,86083,4875],{"emptyLinePlaceholder":2549},[77,86085,86086,86088,86090],{"class":79,"line":12237},[77,86087,81063],{"class":83},[77,86089,81355],{"class":83},[77,86091,33933],{"class":87},[77,86093,86094,86096,86099],{"class":79,"line":12261},[77,86095,81063],{"class":83},[77,86097,86098],{"class":83}," .sub-total",[77,86100,88],{"class":87},[77,86102,86103,86105,86107,86109,86111],{"class":79,"line":12266},[77,86104,57372],{"class":94},[77,86106,98],{"class":87},[77,86108,3263],{"class":94},[77,86110,2124],{"class":2123},[77,86112,104],{"class":87},[77,86114,86115,86117,86119,86121],{"class":79,"line":12271},[77,86116,59864],{"class":94},[77,86118,98],{"class":87},[77,86120,81378],{"class":94},[77,86122,104],{"class":87},[77,86124,86125,86127,86129,86131],{"class":79,"line":12276},[77,86126,64282],{"class":94},[77,86128,98],{"class":87},[77,86130,2120],{"class":94},[77,86132,104],{"class":87},[77,86134,86135],{"class":79,"line":12285},[77,86136,4662],{"class":87},[77,86138,86139],{"class":79,"line":12290},[77,86140,4875],{"emptyLinePlaceholder":2549},[77,86142,86143,86145,86147],{"class":79,"line":12296},[77,86144,81063],{"class":83},[77,86146,81395],{"class":83},[77,86148,33933],{"class":87},[77,86150,86151,86153,86156],{"class":79,"line":12317},[77,86152,81063],{"class":83},[77,86154,86155],{"class":83}," .sub-total::before",[77,86157,33933],{"class":87},[77,86159,86160,86163],{"class":79,"line":12323},[77,86161,86162],{"class":83},"    .amount::before",[77,86164,88],{"class":87},[77,86166,86167,86169,86171,86173],{"class":79,"line":12337},[77,86168,81402],{"class":94},[77,86170,98],{"class":87},[77,86172,81407],{"class":271},[77,86174,104],{"class":87},[77,86176,86177,86179,86181,86183,86185],{"class":79,"line":12343},[77,86178,57372],{"class":94},[77,86180,98],{"class":87},[77,86182,3111],{"class":94},[77,86184,2124],{"class":2123},[77,86186,104],{"class":87},[77,86188,86189],{"class":79,"line":12370},[77,86190,4662],{"class":87},[77,86192,86193],{"class":79,"line":12379},[77,86194,4875],{"emptyLinePlaceholder":2549},[77,86196,86197,86199,86202],{"class":79,"line":12385},[77,86198,81063],{"class":83},[77,86200,86201],{"class":83}," .spec",[77,86203,88],{"class":87},[77,86205,86206,86208,86210,86212],{"class":79,"line":12393},[77,86207,64282],{"class":94},[77,86209,98],{"class":87},[77,86211,2696],{"class":94},[77,86213,104],{"class":87},[77,86215,86216,86218,86220,86223],{"class":79,"line":12398},[77,86217,59864],{"class":94},[77,86219,98],{"class":87},[77,86221,86222],{"class":94},"#888",[77,86224,104],{"class":87},[77,86226,86227,86229,86231,86233,86235],{"class":79,"line":19074},[77,86228,57372],{"class":94},[77,86230,98],{"class":87},[77,86232,3162],{"class":94},[77,86234,2124],{"class":2123},[77,86236,104],{"class":87},[77,86238,86239,86241,86243,86245,86247],{"class":79,"line":19080},[77,86240,64444],{"class":94},[77,86242,98],{"class":87},[77,86244,3313],{"class":94},[77,86246,2124],{"class":2123},[77,86248,104],{"class":87},[77,86250,86251],{"class":79,"line":19103},[77,86252,4662],{"class":87},[77,86254,86255],{"class":79,"line":19109},[77,86256,4875],{"emptyLinePlaceholder":2549},[77,86258,86259,86261,86264],{"class":79,"line":19132},[77,86260,81063],{"class":83},[77,86262,86263],{"class":83}," .count",[77,86265,88],{"class":87},[77,86267,86268,86270,86272,86274],{"class":79,"line":19146},[77,86269,64282],{"class":94},[77,86271,98],{"class":87},[77,86273,2120],{"class":94},[77,86275,104],{"class":87},[77,86277,86278,86280,86282,86285],{"class":79,"line":19166},[77,86279,59864],{"class":94},[77,86281,98],{"class":87},[77,86283,86284],{"class":94},"#aaa",[77,86286,104],{"class":87},[77,86288,86289],{"class":79,"line":19172},[77,86290,4662],{"class":87},[77,86292,86293],{"class":79,"line":19183},[77,86294,4875],{"emptyLinePlaceholder":2549},[77,86296,86297,86299],{"class":79,"line":19206},[77,86298,74914],{"class":83},[77,86300,88],{"class":87},[77,86302,86303,86305,86307,86309,86311],{"class":79,"line":19228},[77,86304,57223],{"class":94},[77,86306,98],{"class":87},[77,86308,81012],{"class":94},[77,86310,2124],{"class":2123},[77,86312,104],{"class":87},[77,86314,86315,86317,86319,86321,86323],{"class":79,"line":19233},[77,86316,57160],{"class":94},[77,86318,98],{"class":87},[77,86320,1939],{"class":94},[77,86322,1942],{"class":94},[77,86324,104],{"class":87},[77,86326,86327,86329,86331,86333],{"class":79,"line":19239},[77,86328,57459],{"class":94},[77,86330,98],{"class":87},[77,86332,53940],{"class":94},[77,86334,104],{"class":87},[77,86336,86337,86339,86341,86343],{"class":79,"line":19253},[77,86338,57470],{"class":94},[77,86340,98],{"class":87},[77,86342,54040],{"class":94},[77,86344,104],{"class":87},[77,86346,86347,86350,86352,86354,86356,86358,86361],{"class":79,"line":19266},[77,86348,86349],{"class":94},"      border-top",[77,86351,98],{"class":87},[77,86353,2120],{"class":94},[77,86355,2124],{"class":2123},[77,86357,2127],{"class":94},[77,86359,86360],{"class":94}," #4e4e4e",[77,86362,104],{"class":87},[77,86364,86365,86367,86369,86371,86373],{"class":79,"line":19271},[77,86366,57149],{"class":94},[77,86368,98],{"class":87},[77,86370,3313],{"class":94},[77,86372,2124],{"class":2123},[77,86374,104],{"class":87},[77,86376,86377],{"class":79,"line":19285},[77,86378,4662],{"class":87},[77,86380,86381],{"class":79,"line":19290},[77,86382,4875],{"emptyLinePlaceholder":2549},[77,86384,86385,86387,86390],{"class":79,"line":19296},[77,86386,74914],{"class":83},[77,86388,86389],{"class":83}," .amount",[77,86391,88],{"class":87},[77,86393,86394,86396,86398,86400,86402],{"class":79,"line":19301},[77,86395,57372],{"class":94},[77,86397,98],{"class":87},[77,86399,3263],{"class":94},[77,86401,2124],{"class":2123},[77,86403,104],{"class":87},[77,86405,86406,86408,86410,86412],{"class":79,"line":19315},[77,86407,59864],{"class":94},[77,86409,98],{"class":87},[77,86411,81378],{"class":94},[77,86413,104],{"class":87},[77,86415,86416,86418,86420,86422],{"class":79,"line":19320},[77,86417,64778],{"class":94},[77,86419,98],{"class":87},[77,86421,53952],{"class":94},[77,86423,104],{"class":87},[77,86425,86426,86428,86430,86432,86434],{"class":79,"line":19325},[77,86427,64195],{"class":94},[77,86429,98],{"class":87},[77,86431,3269],{"class":94},[77,86433,2124],{"class":2123},[77,86435,104],{"class":87},[77,86437,86438],{"class":79,"line":19339},[77,86439,4662],{"class":87},[77,86441,86442,86444,86446],{"class":79,"line":19351},[77,86443,54875],{"class":87},[77,86445,2520],{"class":158},[77,86447,291],{"class":87},[77,86449,86450,86452,86454],{"class":79,"line":19356},[77,86451,351],{"class":87},[77,86453,53798],{"class":158},[77,86455,291],{"class":87},[77,86457,86458],{"class":79,"line":19369},[77,86459,4875],{"emptyLinePlaceholder":2549},[77,86461,86462,86464,86466],{"class":79,"line":19374},[77,86463,260],{"class":87},[77,86465,54258],{"class":158},[77,86467,291],{"class":87},[77,86469,86470,86472,86474,86476,86478,86480],{"class":79,"line":19379},[77,86471,54602],{"class":87},[77,86473,331],{"class":158},[77,86475,334],{"class":83},[77,86477,268],{"class":87},[77,86479,65052],{"class":271},[77,86481,291],{"class":87},[77,86483,86484,86486,86488],{"class":79,"line":19384},[77,86485,54875],{"class":87},[77,86487,331],{"class":158},[77,86489,291],{"class":87},[77,86491,86492,86494,86496,86498,86500,86502],{"class":79,"line":19397},[77,86493,54602],{"class":87},[77,86495,331],{"class":158},[77,86497,334],{"class":83},[77,86499,268],{"class":87},[77,86501,65024],{"class":271},[77,86503,291],{"class":87},[77,86505,86506,86508,86510,86513,86515,86517,86519,86522,86524,86526,86528,86530],{"class":79,"line":19402},[77,86507,53805],{"class":87},[77,86509,331],{"class":158},[77,86511,86512],{"class":87},">合计：\u003C",[77,86514,77],{"class":158},[77,86516,334],{"class":83},[77,86518,268],{"class":87},[77,86520,86521],{"class":271},"\"amount\"",[77,86523,57762],{"class":87},[77,86525,77],{"class":158},[77,86527,57762],{"class":87},[77,86529,331],{"class":158},[77,86531,291],{"class":87},[77,86533,86534,86536,86538],{"class":79,"line":35100},[77,86535,54875],{"class":87},[77,86537,331],{"class":158},[77,86539,291],{"class":87},[77,86541,86542,86544,86546],{"class":79,"line":35106},[77,86543,54602],{"class":87},[77,86545,54271],{"class":158},[77,86547,291],{"class":87},[77,86549,86550,86552,86554,86556],{"class":79,"line":35112},[77,86551,13694],{"class":2123},[77,86553,81815],{"class":94},[77,86555,16036],{"class":2123},[77,86557,57895],{"class":87},[77,86559,86560],{"class":79,"line":35118},[77,86561,81824],{"class":87},[77,86563,86564,86566,86568],{"class":79,"line":35124},[77,86565,81829],{"class":87},[77,86567,81832],{"class":271},[77,86569,33933],{"class":87},[77,86571,86572,86574,86576],{"class":79,"line":35135},[77,86573,81839],{"class":87},[77,86575,81842],{"class":271},[77,86577,33933],{"class":87},[77,86579,86580,86582,86585],{"class":79,"line":35141},[77,86581,81849],{"class":87},[77,86583,86584],{"class":94},"289.9",[77,86586,33933],{"class":87},[77,86588,86589,86591,86593],{"class":79,"line":35161},[77,86590,81859],{"class":87},[77,86592,81862],{"class":271},[77,86594,33933],{"class":87},[77,86596,86597,86600,86602],{"class":79,"line":35167},[77,86598,86599],{"class":87},"        count: ",[77,86601,2696],{"class":94},[77,86603,33933],{"class":87},[77,86605,86606,86609,86612],{"class":79,"line":35178},[77,86607,86608],{"class":87},"        spec: { color: ",[77,86610,86611],{"class":271},"'白色'",[77,86613,58052],{"class":87},[77,86615,86616],{"class":79,"line":35184},[77,86617,80330],{"class":87},[77,86619,86620],{"class":79,"line":35190},[77,86621,81824],{"class":87},[77,86623,86624,86626,86628],{"class":79,"line":35196},[77,86625,81829],{"class":87},[77,86627,81923],{"class":271},[77,86629,33933],{"class":87},[77,86631,86632,86634,86636],{"class":79,"line":35202},[77,86633,81839],{"class":87},[77,86635,81932],{"class":271},[77,86637,33933],{"class":87},[77,86639,86640,86642,86645],{"class":79,"line":35208},[77,86641,81849],{"class":87},[77,86643,86644],{"class":94},"109.8",[77,86646,33933],{"class":87},[77,86648,86649,86651,86653],{"class":79,"line":35214},[77,86650,81859],{"class":87},[77,86652,81950],{"class":271},[77,86654,33933],{"class":87},[77,86656,86657,86659,86661],{"class":79,"line":35220},[77,86658,86599],{"class":87},[77,86660,2690],{"class":94},[77,86662,33933],{"class":87},[77,86664,86665,86668,86670,86672,86674],{"class":79,"line":35240},[77,86666,86667],{"class":87},"        spec: { size: ",[77,86669,84340],{"class":271},[77,86671,57912],{"class":87},[77,86673,84345],{"class":271},[77,86675,58052],{"class":87},[77,86677,86678],{"class":79,"line":35246},[77,86679,80330],{"class":87},[77,86681,86682],{"class":79,"line":35262},[77,86683,81824],{"class":87},[77,86685,86686,86688,86690],{"class":79,"line":35268},[77,86687,81829],{"class":87},[77,86689,81967],{"class":271},[77,86691,33933],{"class":87},[77,86693,86694,86696,86698],{"class":79,"line":35282},[77,86695,81839],{"class":87},[77,86697,81976],{"class":271},[77,86699,33933],{"class":87},[77,86701,86702,86704,86707],{"class":79,"line":35288},[77,86703,81849],{"class":87},[77,86705,86706],{"class":94},"488",[77,86708,33933],{"class":87},[77,86710,86711,86713,86715],{"class":79,"line":35303},[77,86712,81859],{"class":87},[77,86714,81994],{"class":271},[77,86716,33933],{"class":87},[77,86718,86719,86721,86723],{"class":79,"line":35309},[77,86720,86599],{"class":87},[77,86722,2120],{"class":94},[77,86724,33933],{"class":87},[77,86726,86727,86729,86732,86735,86738],{"class":79,"line":35318},[77,86728,86608],{"class":87},[77,86730,86731],{"class":271},"'青色'",[77,86733,86734],{"class":87},", sum: ",[77,86736,86737],{"class":271},"'一大四小'",[77,86739,58052],{"class":87},[77,86741,86742],{"class":79,"line":35324},[77,86743,80330],{"class":87},[77,86745,86746],{"class":79,"line":35333},[77,86747,81824],{"class":87},[77,86749,86750,86752,86754],{"class":79,"line":35339},[77,86751,81829],{"class":87},[77,86753,82011],{"class":271},[77,86755,33933],{"class":87},[77,86757,86758,86760,86762],{"class":79,"line":35345},[77,86759,81839],{"class":87},[77,86761,82020],{"class":271},[77,86763,33933],{"class":87},[77,86765,86766,86768,86771],{"class":79,"line":35354},[77,86767,81849],{"class":87},[77,86769,86770],{"class":94},"139",[77,86772,33933],{"class":87},[77,86774,86775,86777,86779],{"class":79,"line":35360},[77,86776,81859],{"class":87},[77,86778,82038],{"class":271},[77,86780,33933],{"class":87},[77,86782,86783,86785,86787],{"class":79,"line":35371},[77,86784,86599],{"class":87},[77,86786,2120],{"class":94},[77,86788,33933],{"class":87},[77,86790,86791,86793,86796,86798,86801],{"class":79,"line":35377},[77,86792,86667],{"class":87},[77,86794,86795],{"class":271},"'小号'",[77,86797,57912],{"class":87},[77,86799,86800],{"class":271},"'紫色'",[77,86802,57918],{"class":87},[77,86804,86805,86808],{"class":79,"line":35396},[77,86806,86807],{"class":87},"        gift: ",[77,86809,86810],{"class":271},"'50g茶叶,清洗球'\n",[77,86812,86813],{"class":79,"line":35402},[77,86814,54856],{"class":87},[77,86816,86817],{"class":79,"line":35413},[77,86818,55567],{"class":87},[77,86820,86821],{"class":79,"line":35419},[77,86822,86823],{"class":323},"    \u002F\u002F  1.根据数据渲染页面\n",[77,86825,86826,86828,86830,86832,86834,86836,86838,86840,86842,86844,86846,86848],{"class":79,"line":35439},[77,86827,54865],{"class":87},[77,86829,56853],{"class":83},[77,86831,2622],{"class":87},[77,86833,82338],{"class":271},[77,86835,76687],{"class":87},[77,86837,268],{"class":2123},[77,86839,82485],{"class":87},[77,86841,76483],{"class":83},[77,86843,2622],{"class":87},[77,86845,82233],{"class":7691},[77,86847,82236],{"class":2123},[77,86849,88],{"class":87},[77,86851,86852],{"class":79,"line":35455},[77,86853,86854],{"class":323},"      \u002F\u002F 对象解构\n",[77,86856,86857,86859,86861,86863,86865,86867,86869,86872,86874,86876,86878,86881,86883,86886,86888,86890],{"class":79,"line":35461},[77,86858,60676],{"class":2123},[77,86860,1508],{"class":87},[77,86862,82257],{"class":94},[77,86864,680],{"class":87},[77,86866,82247],{"class":94},[77,86868,680],{"class":87},[77,86870,86871],{"class":94},"count",[77,86873,680],{"class":87},[77,86875,82252],{"class":94},[77,86877,680],{"class":87},[77,86879,86880],{"class":94},"spec",[77,86882,680],{"class":87},[77,86884,86885],{"class":94},"gift",[77,86887,82260],{"class":87},[77,86889,268],{"class":2123},[77,86891,82265],{"class":87},[77,86893,86894],{"class":79,"line":35475},[77,86895,86896],{"class":323},"      \u002F\u002F 规格文字模块处理\n",[77,86898,86899,86901,86904,86906,86908,86910,86912,86914,86916,86918],{"class":79,"line":35481},[77,86900,60676],{"class":2123},[77,86902,86903],{"class":94}," text",[77,86905,16036],{"class":2123},[77,86907,84375],{"class":87},[77,86909,84378],{"class":83},[77,86911,84381],{"class":87},[77,86913,76661],{"class":83},[77,86915,2622],{"class":87},[77,86917,84388],{"class":271},[77,86919,2628],{"class":87},[77,86921,86922],{"class":79,"line":35487},[77,86923,86924],{"class":323},"      \u002F\u002F 处理赠品模块\n",[77,86926,86927,86929,86931,86933,86936,86938,86940,86942,86944,86947,86949,86951,86953,86955,86957,86960,86962,86965,86967,86969,86971,86973,86975,86977],{"class":79,"line":35498},[77,86928,60676],{"class":2123},[77,86930,76358],{"class":94},[77,86932,16036],{"class":2123},[77,86934,86935],{"class":87}," gift ",[77,86937,3598],{"class":2123},[77,86939,85549],{"class":87},[77,86941,85552],{"class":83},[77,86943,2622],{"class":87},[77,86945,86946],{"class":271},"','",[77,86948,33294],{"class":87},[77,86950,76483],{"class":83},[77,86952,2622],{"class":87},[77,86954,82233],{"class":7691},[77,86956,82236],{"class":2123},[77,86958,86959],{"class":271}," `\u003Cspan class=\"tag\">【赠品】${",[77,86961,82233],{"class":87},[77,86963,86964],{"class":271},"}\u003C\u002Fspan>`",[77,86966,33294],{"class":87},[77,86968,76661],{"class":83},[77,86970,2622],{"class":87},[77,86972,76666],{"class":271},[77,86974,16186],{"class":87},[77,86976,3472],{"class":2123},[77,86978,72547],{"class":271},[77,86980,86981],{"class":79,"line":35504},[77,86982,86983],{"class":323},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[77,86985,86986,86988,86991,86993,86996,86998,87000,87002,87005,87007,87009,87011,87014,87016,87018],{"class":79,"line":35510},[77,86987,60676],{"class":2123},[77,86989,86990],{"class":94}," subtotal",[77,86992,16036],{"class":2123},[77,86994,86995],{"class":87}," ((price ",[77,86997,3068],{"class":2123},[77,86999,8229],{"class":94},[77,87001,8993],{"class":2123},[77,87003,87004],{"class":87}," count) ",[77,87006,3197],{"class":2123},[77,87008,8229],{"class":94},[77,87010,33294],{"class":87},[77,87012,87013],{"class":83},"toFixed",[77,87015,2622],{"class":87},[77,87017,2696],{"class":94},[77,87019,2628],{"class":87},[77,87021,87022],{"class":79,"line":35520},[77,87023,4875],{"emptyLinePlaceholder":2549},[77,87025,87026,87028],{"class":79,"line":35526},[77,87027,76421],{"class":2123},[77,87029,72611],{"class":271},[77,87031,87032],{"class":79,"line":35537},[77,87033,87034],{"class":271},"        \u003Cdiv class=\"item\">\n",[77,87036,87037,87040,87042],{"class":79,"line":35543},[77,87038,87039],{"class":271},"          \u003Cimg src=\"${",[77,87041,82257],{"class":87},[77,87043,82289],{"class":271},[77,87045,87046,87049,87051,87054,87056],{"class":79,"line":35553},[77,87047,87048],{"class":271},"          \u003Cp class=\"name\">${",[77,87050,82247],{"class":87},[77,87052,87053],{"class":271},"}${",[77,87055,3780],{"class":87},[77,87057,82299],{"class":271},[77,87059,87060,87063,87065],{"class":79,"line":35558},[77,87061,87062],{"class":271},"          \u003Cp class=\"spec\">${",[77,87064,7662],{"class":87},[77,87066,82299],{"class":271},[77,87068,87069,87072,87074,87076,87078,87080,87082,87084],{"class":79,"line":35564},[77,87070,87071],{"class":271},"          \u003Cp class=\"price\">${",[77,87073,82252],{"class":87},[77,87075,3171],{"class":271},[77,87077,87013],{"class":83},[77,87079,2622],{"class":271},[77,87081,2696],{"class":94},[77,87083,3043],{"class":271},[77,87085,82299],{"class":271},[77,87087,87088,87091,87093],{"class":79,"line":35613},[77,87089,87090],{"class":271},"          \u003Cp class=\"count\">x${",[77,87092,86871],{"class":87},[77,87094,82299],{"class":271},[77,87096,87097,87100,87103],{"class":79,"line":35660},[77,87098,87099],{"class":271},"          \u003Cp class=\"sub-total\">${",[77,87101,87102],{"class":87},"subtotal",[77,87104,82299],{"class":271},[77,87106,87107],{"class":79,"line":35665},[77,87108,87109],{"class":271},"        \u003C\u002Fdiv> \n",[77,87111,87112],{"class":79,"line":35671},[77,87113,87114],{"class":271},"             `\n",[77,87116,87117,87120,87122,87124,87126],{"class":79,"line":35690},[77,87118,87119],{"class":87},"    }).",[77,87121,76661],{"class":83},[77,87123,2622],{"class":87},[77,87125,76666],{"class":271},[77,87127,2628],{"class":87},[77,87129,87130],{"class":79,"line":35696},[77,87131,87132],{"class":323},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[77,87134,87135,87137,87139,87141,87143,87146,87148,87151,87153,87155,87157,87160,87163,87165,87168,87170,87172,87174,87177,87179,87181,87183,87185],{"class":79,"line":35716},[77,87136,13694],{"class":2123},[77,87138,65228],{"class":94},[77,87140,16036],{"class":2123},[77,87142,82485],{"class":87},[77,87144,87145],{"class":83},"reduce",[77,87147,4851],{"class":87},[77,87149,87150],{"class":7691},"prev",[77,87152,680],{"class":87},[77,87154,82233],{"class":7691},[77,87156,16186],{"class":87},[77,87158,87159],{"class":2123},"=>",[77,87161,87162],{"class":87}," prev ",[77,87164,3094],{"class":2123},[77,87166,87167],{"class":87}," (item.price ",[77,87169,3068],{"class":2123},[77,87171,8229],{"class":94},[77,87173,8993],{"class":2123},[77,87175,87176],{"class":87}," item.count) ",[77,87178,3197],{"class":2123},[77,87180,8229],{"class":94},[77,87182,680],{"class":87},[77,87184,1939],{"class":94},[77,87186,2628],{"class":87},[77,87188,87189,87191,87193,87195,87198,87200,87202,87205,87207,87209,87211],{"class":79,"line":35722},[77,87190,54865],{"class":87},[77,87192,56853],{"class":83},[77,87194,2622],{"class":87},[77,87196,87197],{"class":271},"'.amount'",[77,87199,76687],{"class":87},[77,87201,268],{"class":2123},[77,87203,87204],{"class":87}," total.",[77,87206,87013],{"class":83},[77,87208,2622],{"class":87},[77,87210,2696],{"class":94},[77,87212,2628],{"class":87},[77,87214,87215,87217,87219],{"class":79,"line":35728},[77,87216,54875],{"class":87},[77,87218,54271],{"class":158},[77,87220,291],{"class":87},[77,87222,87223,87225,87227],{"class":79,"line":35738},[77,87224,351],{"class":87},[77,87226,54258],{"class":158},[77,87228,291],{"class":87},[77,87230,87231],{"class":79,"line":35743},[77,87232,4875],{"emptyLinePlaceholder":2549},[77,87234,87235,87237,87239],{"class":79,"line":35749},[77,87236,351],{"class":87},[77,87238,53101],{"class":158},[77,87240,291],{"class":87},[14,87242,87244],{"id":87243},"_411-编程思想","4.11 编程思想",[19,87246,87248],{"id":87247},"_4111-面向过程介绍","4.11.1 面向过程介绍",[24,87250,87251,87254],{},[27,87252,87253],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[24,87256,87257],{},"调用就可以了",[24,87259,87260],{},[40,87261],{"alt":72,"src":87262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[19,87264,87266],{"id":87265},"_4112-面向对象","4.11.2 面向对象",[24,87268,87269],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[24,87271,87272],{},[40,87273],{"alt":72,"src":87274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[24,87276,87277],{},"面向对象的特性：",[51,87279,87280,87283,87286],{},[54,87281,87282],{},"封装性",[54,87284,87285],{},"继承性",[54,87287,87288],{},"多态性",[19,87290,87292],{"id":87291},"_4113-两者比较","4.11.3 两者比较",[24,87294,87295],{},[40,87296],{"alt":72,"src":87297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87299,87301],{"id":87300},"_412-构造函数回顾","4.12 构造函数回顾",[24,87303,87304],{},[40,87305],{"alt":72,"src":87306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[24,87308,87309],{},[40,87310],{"alt":72,"src":87311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[24,87313,87314],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[24,87316,87317],{},[40,87318],{"alt":72,"src":87319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87321,87323],{"id":87322},"_413-原型","4.13 原型",[19,87325,87327],{"id":87326},"_4131-原型对象的认识","4.13.1 原型对象的认识",[24,87329,87330],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[24,87332,87333],{},[40,87334],{"alt":72,"src":87335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[24,87337,87338],{},[40,87339],{"alt":72,"src":87340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[24,87342,87343],{},"原型是构造函数的属性，它也是一个对象",[24,87345,87346],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[24,87348,87349],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[67,87351,87353],{"className":55525,"code":87352,"language":55527,"meta":72,"style":72},"\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",[74,87354,87355,87363,87368,87376,87381,87386,87391,87396,87401,87405,87409,87413,87418,87423,87427,87432,87437,87442,87447,87452,87456,87464],{"__ignoreMap":72},[77,87356,87357,87359,87361],{"class":79,"line":80},[77,87358,260],{"class":87},[77,87360,54258],{"class":158},[77,87362,291],{"class":87},[77,87364,87365],{"class":79,"line":91},[77,87366,87367],{"class":323},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[77,87369,87370,87372,87374],{"class":79,"line":107},[77,87371,54602],{"class":87},[77,87373,54271],{"class":158},[77,87375,291],{"class":87},[77,87377,87378],{"class":79,"line":191},[77,87379,87380],{"class":87},"    function Star(uname, age) {\n",[77,87382,87383],{"class":79,"line":1543},[77,87384,87385],{"class":87},"      this.uname = uname,\n",[77,87387,87388],{"class":79,"line":1549},[77,87389,87390],{"class":87},"        this.age = age\n",[77,87392,87393],{"class":79,"line":1566},[77,87394,87395],{"class":87},"      \u002F\u002F this.sing = function () {\n",[77,87397,87398],{"class":79,"line":1572},[77,87399,87400],{"class":87},"      \u002F\u002F   console.log('唱歌')\n",[77,87402,87403],{"class":79,"line":1589},[77,87404,4875],{"emptyLinePlaceholder":2549},[77,87406,87407],{"class":79,"line":1595},[77,87408,62485],{"class":87},[77,87410,87411],{"class":79,"line":4088},[77,87412,4662],{"class":87},[77,87414,87415],{"class":79,"line":4093},[77,87416,87417],{"class":87},"    Star.prototype.sing = function () {\n",[77,87419,87420],{"class":79,"line":4099},[77,87421,87422],{"class":87},"      console.log('唱歌')\n",[77,87424,87425],{"class":79,"line":4104},[77,87426,4662],{"class":87},[77,87428,87429],{"class":79,"line":4118},[77,87430,87431],{"class":87},"    \u002F\u002F console.dir(Star.prototype)\n",[77,87433,87434],{"class":79,"line":4123},[77,87435,87436],{"class":87},"    const pink = new Star('pink', 18)\n",[77,87438,87439],{"class":79,"line":4129},[77,87440,87441],{"class":87},"    const red = new Star('red', 20)\n",[77,87443,87444],{"class":79,"line":4150},[77,87445,87446],{"class":87},"    pink.sing()\n",[77,87448,87449],{"class":79,"line":4155},[77,87450,87451],{"class":87},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[77,87453,87454],{"class":79,"line":4169},[77,87455,4875],{"emptyLinePlaceholder":2549},[77,87457,87458,87460,87462],{"class":79,"line":4174},[77,87459,54875],{"class":87},[77,87461,54271],{"class":158},[77,87463,291],{"class":87},[77,87465,87466,87468,87470],{"class":79,"line":4203},[77,87467,351],{"class":87},[77,87469,54258],{"class":158},[77,87471,291],{"class":87},[24,87473,87474],{},[40,87475],{"alt":72,"src":87476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[67,87478,87480],{"className":55525,"code":87479,"language":55527,"meta":72,"style":72},"\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",[74,87481,87482,87490,87498,87503,87508,87513,87518,87522,87527,87532,87537,87541,87546,87550,87554,87559,87563,87571],{"__ignoreMap":72},[77,87483,87484,87486,87488],{"class":79,"line":80},[77,87485,260],{"class":87},[77,87487,54258],{"class":158},[77,87489,291],{"class":87},[77,87491,87492,87494,87496],{"class":79,"line":91},[77,87493,54602],{"class":87},[77,87495,54271],{"class":158},[77,87497,291],{"class":87},[77,87499,87500],{"class":79,"line":107},[77,87501,87502],{"class":87},"    let that\n",[77,87504,87505],{"class":79,"line":191},[77,87506,87507],{"class":87},"    function Star(uname) {\n",[77,87509,87510],{"class":79,"line":1543},[77,87511,87512],{"class":87},"      this.uname = uname\n",[77,87514,87515],{"class":79,"line":1549},[77,87516,87517],{"class":87},"      that = this\n",[77,87519,87520],{"class":79,"line":1566},[77,87521,4662],{"class":87},[77,87523,87524],{"class":79,"line":1572},[77,87525,87526],{"class":87},"    \u002F\u002F 实例对象是 ldh\n",[77,87528,87529],{"class":79,"line":1589},[77,87530,87531],{"class":87},"    const ldh = new Star('刘德华')\n",[77,87533,87534],{"class":79,"line":1595},[77,87535,87536],{"class":87},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[77,87538,87539],{"class":79,"line":4088},[77,87540,4875],{"emptyLinePlaceholder":2549},[77,87542,87543],{"class":79,"line":4093},[77,87544,87545],{"class":87},"    Star.sing = function () {\n",[77,87547,87548],{"class":79,"line":4099},[77,87549,87422],{"class":87},[77,87551,87552],{"class":79,"line":4104},[77,87553,4662],{"class":87},[77,87555,87556],{"class":79,"line":4118},[77,87557,87558],{"class":87},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[77,87560,87561],{"class":79,"line":4123},[77,87562,4875],{"emptyLinePlaceholder":2549},[77,87564,87565,87567,87569],{"class":79,"line":4129},[77,87566,54875],{"class":87},[77,87568,54271],{"class":158},[77,87570,291],{"class":87},[77,87572,87573,87575,87577],{"class":79,"line":4150},[77,87574,351],{"class":87},[77,87576,54258],{"class":158},[77,87578,291],{"class":87},[24,87580,87581],{},"构造函数的this指向的是实例对象；",[24,87583,87584],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[19,87586,87588],{"id":87587},"_4132-数组扩展方法","4.13.2 数组扩展方法",[24,87590,87591],{},[40,87592],{"alt":72,"src":87593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[67,87595,87597],{"className":55525,"code":87596,"language":55527,"meta":72,"style":72},"\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",[74,87598,87599,87607,87615,87620,87625,87630,87635,87640,87645,87650,87655,87660,87665,87669,87674,87679,87684,87689,87693,87698,87703,87708,87713,87717,87722,87727,87732,87737,87741,87746,87750,87758],{"__ignoreMap":72},[77,87600,87601,87603,87605],{"class":79,"line":80},[77,87602,260],{"class":87},[77,87604,54258],{"class":158},[77,87606,291],{"class":87},[77,87608,87609,87611,87613],{"class":79,"line":91},[77,87610,54602],{"class":87},[77,87612,54271],{"class":158},[77,87614,291],{"class":87},[77,87616,87617],{"class":79,"line":107},[77,87618,87619],{"class":87},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[77,87621,87622],{"class":79,"line":191},[77,87623,87624],{"class":87},"    const arr = [1, 2, 3]\n",[77,87626,87627],{"class":79,"line":1543},[77,87628,87629],{"class":87},"    \u002F\u002F 自己定义数组的扩展方法\n",[77,87631,87632],{"class":79,"line":1549},[77,87633,87634],{"class":87},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[77,87636,87637],{"class":79,"line":1566},[77,87638,87639],{"class":87},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[77,87641,87642],{"class":79,"line":1572},[77,87643,87644],{"class":87},"    \u002F\u002F ①.最大值\n",[77,87646,87647],{"class":79,"line":1589},[77,87648,87649],{"class":87},"    Array.prototype.max = function () {\n",[77,87651,87652],{"class":79,"line":1595},[77,87653,87654],{"class":87},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[77,87656,87657],{"class":79,"line":4088},[77,87658,87659],{"class":87},"      return Math.max(...this)\n",[77,87661,87662],{"class":79,"line":4093},[77,87663,87664],{"class":87},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[77,87666,87667],{"class":79,"line":4099},[77,87668,4662],{"class":87},[77,87670,87671],{"class":79,"line":4104},[77,87672,87673],{"class":87},"    console.log(arr.max())\n",[77,87675,87676],{"class":79,"line":4118},[77,87677,87678],{"class":87},"    \u002F\u002F ②最小值\n",[77,87680,87681],{"class":79,"line":4123},[77,87682,87683],{"class":87},"    Array.prototype.min = function () {\n",[77,87685,87686],{"class":79,"line":4129},[77,87687,87688],{"class":87},"      return Math.min(...this)\n",[77,87690,87691],{"class":79,"line":4150},[77,87692,4662],{"class":87},[77,87694,87695],{"class":79,"line":4155},[77,87696,87697],{"class":87},"    console.log(arr.min())\n",[77,87699,87700],{"class":79,"line":4169},[77,87701,87702],{"class":87},"    \u002F\u002F③求和\n",[77,87704,87705],{"class":79,"line":4174},[77,87706,87707],{"class":87},"    Array.prototype.sum = function () {\n",[77,87709,87710],{"class":79,"line":4203},[77,87711,87712],{"class":87},"      return this.reduce((prev, current) => prev + current, 0)\n",[77,87714,87715],{"class":79,"line":4208},[77,87716,4662],{"class":87},[77,87718,87719],{"class":79,"line":4225},[77,87720,87721],{"class":87},"    console.log(arr.sum())\n",[77,87723,87724],{"class":79,"line":4230},[77,87725,87726],{"class":87},"    \u002F\u002F ③排序\n",[77,87728,87729],{"class":79,"line":4235},[77,87730,87731],{"class":87},"    Array.prototype.rever = function () {\n",[77,87733,87734],{"class":79,"line":4240},[77,87735,87736],{"class":87},"      return this.reverse()\n",[77,87738,87739],{"class":79,"line":4254},[77,87740,4662],{"class":87},[77,87742,87743],{"class":79,"line":4259},[77,87744,87745],{"class":87},"    console.log(arr.rever())\n",[77,87747,87748],{"class":79,"line":5052},[77,87749,4875],{"emptyLinePlaceholder":2549},[77,87751,87752,87754,87756],{"class":79,"line":5066},[77,87753,54875],{"class":87},[77,87755,54271],{"class":158},[77,87757,291],{"class":87},[77,87759,87760,87762,87764],{"class":79,"line":5074},[77,87761,351],{"class":87},[77,87763,54258],{"class":158},[77,87765,291],{"class":87},[24,87767,87768],{},[40,87769],{"alt":72,"src":87770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[19,87772,87774],{"id":87773},"_4133-constructor-属性","4.13.3 constructor 属性",[24,87776,87777],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[24,87779,87780],{},[40,87781],{"alt":72,"src":87782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[67,87784,87786],{"className":55525,"code":87785,"language":55527,"meta":72,"style":72},"\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",[74,87787,87788,87796,87804,87809,87814,87818,87823,87828,87833,87841],{"__ignoreMap":72},[77,87789,87790,87792,87794],{"class":79,"line":80},[77,87791,260],{"class":87},[77,87793,54258],{"class":158},[77,87795,291],{"class":87},[77,87797,87798,87800,87802],{"class":79,"line":91},[77,87799,54602],{"class":87},[77,87801,54271],{"class":158},[77,87803,291],{"class":87},[77,87805,87806],{"class":79,"line":107},[77,87807,87808],{"class":87},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[77,87810,87811],{"class":79,"line":191},[77,87812,87813],{"class":87},"    function Star() {\n",[77,87815,87816],{"class":79,"line":1543},[77,87817,4662],{"class":87},[77,87819,87820],{"class":79,"line":1549},[77,87821,87822],{"class":87},"    const ldh = new Star()\n",[77,87824,87825],{"class":79,"line":1566},[77,87826,87827],{"class":87},"    console.log(Star.prototype)\n",[77,87829,87830],{"class":79,"line":1572},[77,87831,87832],{"class":87},"    console.log(Star.prototype.constructor === Star)\n",[77,87834,87835,87837,87839],{"class":79,"line":1589},[77,87836,54875],{"class":87},[77,87838,54271],{"class":158},[77,87840,291],{"class":87},[77,87842,87843,87845,87847],{"class":79,"line":1595},[77,87844,351],{"class":87},[77,87846,54258],{"class":158},[77,87848,291],{"class":87},[24,87850,87851],{},[40,87852],{"alt":72,"src":87853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[24,87855,87856],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[67,87858,87860],{"className":55525,"code":87859,"language":55527,"meta":72,"style":72},"  \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",[74,87861,87862,87870,87874,87878,87882,87887,87892,87897,87901,87906,87911,87916,87921,87926,87931,87935,87939,87944,87949,87954,87958,87963,87968,87972,87976,87980],{"__ignoreMap":72},[77,87863,87864,87866,87868],{"class":79,"line":80},[77,87865,54602],{"class":87},[77,87867,54271],{"class":158},[77,87869,291],{"class":87},[77,87871,87872],{"class":79,"line":91},[77,87873,87808],{"class":87},[77,87875,87876],{"class":79,"line":107},[77,87877,87813],{"class":87},[77,87879,87880],{"class":79,"line":191},[77,87881,4662],{"class":87},[77,87883,87884],{"class":79,"line":1543},[77,87885,87886],{"class":87},"    \u002F\u002F const ldh = new Star()\n",[77,87888,87889],{"class":79,"line":1549},[77,87890,87891],{"class":87},"    \u002F\u002F console.log(Star.prototype)\n",[77,87893,87894],{"class":79,"line":1566},[77,87895,87896],{"class":87},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[77,87898,87899],{"class":79,"line":1572},[77,87900,4875],{"emptyLinePlaceholder":2549},[77,87902,87903],{"class":79,"line":1589},[77,87904,87905],{"class":87},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[77,87907,87908],{"class":79,"line":1595},[77,87909,87910],{"class":87},"    \u002F\u002F Star.prototype.sing = function () {\n",[77,87912,87913],{"class":79,"line":4088},[77,87914,87915],{"class":87},"    \u002F\u002F   console.log('唱歌')\n",[77,87917,87918],{"class":79,"line":4093},[77,87919,87920],{"class":87},"    \u002F\u002F }\n",[77,87922,87923],{"class":79,"line":4099},[77,87924,87925],{"class":87},"    \u002F\u002F Star.prototype.dance = function () {\n",[77,87927,87928],{"class":79,"line":4104},[77,87929,87930],{"class":87},"    \u002F\u002F   console.log('跳舞')\n",[77,87932,87933],{"class":79,"line":4118},[77,87934,87920],{"class":87},[77,87936,87937],{"class":79,"line":4123},[77,87938,87827],{"class":87},[77,87940,87941],{"class":79,"line":4129},[77,87942,87943],{"class":87},"    Star.prototype = {\n",[77,87945,87946],{"class":79,"line":4150},[77,87947,87948],{"class":87},"      sing: function () {\n",[77,87950,87951],{"class":79,"line":4155},[77,87952,87953],{"class":87},"        console.log('唱歌')\n",[77,87955,87956],{"class":79,"line":4169},[77,87957,80330],{"class":87},[77,87959,87960],{"class":79,"line":4174},[77,87961,87962],{"class":87},"      dance: function () {\n",[77,87964,87965],{"class":79,"line":4203},[77,87966,87967],{"class":87},"        console.log('跳舞')\n",[77,87969,87970],{"class":79,"line":4208},[77,87971,54856],{"class":87},[77,87973,87974],{"class":79,"line":4225},[77,87975,4662],{"class":87},[77,87977,87978],{"class":79,"line":4230},[77,87979,87827],{"class":87},[77,87981,87982,87984,87986],{"class":79,"line":4235},[77,87983,54875],{"class":87},[77,87985,54271],{"class":158},[77,87987,291],{"class":87},[24,87989,87990],{},"进行输出结果后会发现：",[24,87992,87993],{},[40,87994],{"alt":72,"src":87995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[24,87997,87998],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[24,88000,88001],{},"所以，要重新指回创造这个原型对象的构造函数",[67,88003,88005],{"className":73652,"code":88004,"language":73654,"meta":72,"style":72},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[74,88006,88007,88021,88026,88031,88042,88055,88060,88071,88085,88089],{"__ignoreMap":72},[77,88008,88009,88012,88014,88017,88019],{"class":79,"line":80},[77,88010,88011],{"class":94},"Star",[77,88013,3171],{"class":87},[77,88015,88016],{"class":94},"prototype",[77,88018,16036],{"class":2123},[77,88020,88],{"class":87},[77,88022,88023],{"class":79,"line":91},[77,88024,88025],{"class":323},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[77,88027,88028],{"class":79,"line":107},[77,88029,88030],{"class":87},"  constructor: Star,\n",[77,88032,88033,88036,88038,88040],{"class":79,"line":191},[77,88034,88035],{"class":83},"  sing",[77,88037,98],{"class":87},[77,88039,56903],{"class":2123},[77,88041,56906],{"class":87},[77,88043,88044,88046,88048,88050,88053],{"class":79,"line":1543},[77,88045,76192],{"class":87},[77,88047,60695],{"class":83},[77,88049,2622],{"class":87},[77,88051,88052],{"class":271},"'唱歌'",[77,88054,2628],{"class":87},[77,88056,88057],{"class":79,"line":1549},[77,88058,88059],{"class":87},"   },\n",[77,88061,88062,88065,88067,88069],{"class":79,"line":1566},[77,88063,88064],{"class":83},"   dance",[77,88066,98],{"class":87},[77,88068,56903],{"class":2123},[77,88070,56906],{"class":87},[77,88072,88073,88076,88078,88080,88083],{"class":79,"line":1572},[77,88074,88075],{"class":87},"     console.",[77,88077,60695],{"class":83},[77,88079,2622],{"class":87},[77,88081,88082],{"class":271},"'跳舞'",[77,88084,2628],{"class":87},[77,88086,88087],{"class":79,"line":1589},[77,88088,6784],{"class":87},[77,88090,88091],{"class":79,"line":1595},[77,88092,110],{"class":87},[24,88094,88095],{},[40,88096],{"alt":72,"src":88097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[24,88099,88100],{},"总结1：",[24,88102,88103],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[24,88105,88106],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[24,88108,88109],{},"constructor指的是他的来源",[24,88111,88112],{},[40,88113],{"alt":72,"src":88114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[24,88116,88117],{},[40,88118],{"alt":72,"src":88119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[24,88121,88122],{},"总结2：",[24,88124,88125],{},[40,88126],{"alt":72,"src":88127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[24,88129,88130],{},[40,88131],{"alt":72,"src":88132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[24,88134,88135],{},[40,88136],{"alt":72,"src":88137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[19,88139,88141],{"id":88140},"_4134-对象原型","4.13.4 对象原型",[24,88143,88144],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[24,88146,88147],{},"对象原型就是__proto__这个属性",[24,88149,88150],{},[40,88151],{"alt":72,"src":88152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[24,88154,88155],{},[40,88156],{"alt":72,"src":88157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[24,88159,88160],{},[40,88161],{"alt":72,"src":88162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[24,88164,88165],{},[40,88166],{"alt":72,"src":88167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[67,88169,88171],{"className":55525,"code":88170,"language":55527,"meta":72,"style":72},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[74,88172,88173,88181,88189,88193,88197,88201,88206,88214],{"__ignoreMap":72},[77,88174,88175,88177,88179],{"class":79,"line":80},[77,88176,260],{"class":87},[77,88178,54258],{"class":158},[77,88180,291],{"class":87},[77,88182,88183,88185,88187],{"class":79,"line":91},[77,88184,54602],{"class":87},[77,88186,54271],{"class":158},[77,88188,291],{"class":87},[77,88190,88191],{"class":79,"line":107},[77,88192,87813],{"class":87},[77,88194,88195],{"class":79,"line":191},[77,88196,4662],{"class":87},[77,88198,88199],{"class":79,"line":1543},[77,88200,87822],{"class":87},[77,88202,88203],{"class":79,"line":1549},[77,88204,88205],{"class":87},"    console.log(ldh)\n",[77,88207,88208,88210,88212],{"class":79,"line":1566},[77,88209,54875],{"class":87},[77,88211,54271],{"class":158},[77,88213,291],{"class":87},[77,88215,88216,88218,88220],{"class":79,"line":1572},[77,88217,351],{"class":87},[77,88219,54258],{"class":158},[77,88221,291],{"class":87},[24,88223,88224],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[24,88226,88227],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[24,88229,88230],{},[40,88231],{"alt":72,"src":88232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[24,88234,88235],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[24,88237,88238],{},"对象原型指向原型对象",[24,88240,88241],{},[40,88242],{"alt":72,"src":88243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[24,88245,88246],{},[40,88247],{"alt":72,"src":88248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[24,88250,88251],{},[40,88252],{"alt":72,"src":88253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[19,88255,88257],{"id":88256},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[24,88259,88260],{},[40,88261],{"alt":72,"src":88262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[139,88264,88265,88268,88271,88274],{},[54,88266,88267],{},"构造函数通过new的形式实例化得到实例对象",[54,88269,88270],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[54,88272,88273],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[54,88275,88276],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[24,88278,88279],{},[40,88280],{"alt":72,"src":88281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[24,88283,88284],{},"题目梳理：",[24,88286,88287],{},[40,88288],{"alt":72,"src":88289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[19,88291,88293],{"id":88292},"_4136-原型继承","4.13.6 原型继承",[24,88295,88296],{},[40,88297],{"alt":72,"src":88298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[24,88300,88301],{},[40,88302],{"alt":72,"src":88303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[24,88305,88306],{},[40,88307],{"alt":72,"src":88308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[24,88310,88311],{},[40,88312],{"alt":72,"src":88313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[24,88315,88316],{},[40,88317],{"alt":72,"src":88318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[24,88320,88321],{},[40,88322],{"alt":72,"src":88323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[24,88325,88326],{},[40,88327],{"alt":72,"src":88328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[24,88330,88331],{},[40,88332],{"alt":72,"src":88333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[24,88335,88336],{},"回顾：构造函数每次new得到对象都是不同的",[19,88338,88340],{"id":88339},"_4137-原型链","4.13.7 原型链",[24,88342,88343],{},[40,88344],{"alt":72,"src":88345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[24,88347,88348],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[24,88350,88351],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[24,88353,88354],{},"大哥是Object",[24,88356,88357],{},[40,88358],{"alt":72,"src":88359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[24,88361,88362],{},[40,88363],{"alt":72,"src":88364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[24,88366,88367],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[24,88369,88370],{},"万物皆对象",[19,88372,88374],{"id":88373},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[24,88376,88377],{},"模态框",[24,88379,88380],{},"以后遇见这个效果直接使用这个就行",[24,88382,88383],{},[40,88384],{"alt":72,"src":88385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[24,88387,88388],{},[40,88389],{"alt":72,"src":88390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[24,88392,88393],{},[40,88394],{"alt":72,"src":88395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[24,88397,88398],{},[40,88399],{"alt":72,"src":88400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[24,88402,88403],{},"补充知识点：",[139,88405,88406],{},[54,88407,88408],{},"append()",[24,88410,88411],{},[40,88412],{"alt":72,"src":88413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[67,88415,88417],{"className":53099,"code":88416,"language":53101,"meta":72,"style":72},"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",[74,88418,88419,88424,88429,88434,88438,88442,88446,88451,88456,88461,88465],{"__ignoreMap":72},[77,88420,88421],{"class":79,"line":80},[77,88422,88423],{"class":87},"append(param1)\n",[77,88425,88426],{"class":79,"line":91},[77,88427,88428],{"class":87},"append(param1, param2)\n",[77,88430,88431],{"class":79,"line":107},[77,88432,88433],{"class":87},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[77,88435,88436],{"class":79,"line":191},[77,88437,4875],{"emptyLinePlaceholder":2549},[77,88439,88440],{"class":79,"line":1543},[77,88441,4875],{"emptyLinePlaceholder":2549},[77,88443,88444],{"class":79,"line":1549},[77,88445,4875],{"emptyLinePlaceholder":2549},[77,88447,88448],{"class":79,"line":1566},[77,88449,88450],{"class":87},"let div = document.createElement(\"div\");\n",[77,88452,88453],{"class":79,"line":1572},[77,88454,88455],{"class":87},"let p = document.createElement(\"p\");\n",[77,88457,88458],{"class":79,"line":1589},[77,88459,88460],{"class":87},"div.append(p);\n",[77,88462,88463],{"class":79,"line":1595},[77,88464,4875],{"emptyLinePlaceholder":2549},[77,88466,88467,88470,88472],{"class":79,"line":4088},[77,88468,88469],{"class":87},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[77,88471,24],{"class":158},[77,88473,88474],{"class":87},"> ]\n",[139,88476,88477],{"start":91},[54,88478,88479],{},"remove()",[24,88481,88482],{},"自己删自己",[24,88484,88485],{},[40,88486],{"alt":72,"src":88487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[67,88489,88491],{"className":53099,"code":88490,"language":53101,"meta":72,"style":72},"\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",[74,88492,88493,88503,88517,88521,88529,88543,88563,88575,88583,88590,88602,88615,88650,88662,88672,88684,88696,88708,88735,88745,88749,88753,88762,88774,88788,88798,88810,88814,88818,88828,88839,88849,88859,88872,88885,88895,88899,88903,88912,88922,88934,88938,88942,88951,88961,88971,88983,88987,88991,89001,89017,89028,89038,89048,89060,89072,89084,89088,89092,89105,89116,89120,89128,89136,89140,89148,89168,89188,89196,89201,89227,89232,89237,89256,89261,89273,89278,89289,89299,89309,89314,89319,89323,89328,89333,89338,89358,89363,89383,89388,89402,89407,89412,89417,89433,89437,89442,89471,89476,89481,89486,89497,89501,89505,89509,89514,89539,89544,89569,89574,89583,89587,89592,89617,89621,89646,89650,89659,89663,89668,89686,89696,89700,89708,89716,89720],{"__ignoreMap":72},[77,88494,88495,88497,88499,88501],{"class":79,"line":80},[77,88496,53763],{"class":87},[77,88498,53766],{"class":158},[77,88500,53769],{"class":83},[77,88502,291],{"class":87},[77,88504,88505,88507,88509,88511,88513,88515],{"class":79,"line":91},[77,88506,260],{"class":87},[77,88508,53101],{"class":158},[77,88510,53780],{"class":83},[77,88512,268],{"class":87},[77,88514,53785],{"class":271},[77,88516,291],{"class":87},[77,88518,88519],{"class":79,"line":107},[77,88520,4875],{"emptyLinePlaceholder":2549},[77,88522,88523,88525,88527],{"class":79,"line":191},[77,88524,260],{"class":87},[77,88526,53798],{"class":158},[77,88528,291],{"class":87},[77,88530,88531,88533,88535,88537,88539,88541],{"class":79,"line":1543},[77,88532,54602],{"class":87},[77,88534,53808],{"class":158},[77,88536,53811],{"class":83},[77,88538,268],{"class":87},[77,88540,53816],{"class":271},[77,88542,291],{"class":87},[77,88544,88545,88547,88549,88551,88553,88555,88557,88559,88561],{"class":79,"line":1549},[77,88546,54602],{"class":87},[77,88548,53808],{"class":158},[77,88550,2495],{"class":83},[77,88552,268],{"class":87},[77,88554,53855],{"class":271},[77,88556,53835],{"class":83},[77,88558,268],{"class":87},[77,88560,53862],{"class":271},[77,88562,291],{"class":87},[77,88564,88565,88567,88569,88571,88573],{"class":79,"line":1566},[77,88566,54602],{"class":87},[77,88568,53871],{"class":158},[77,88570,53874],{"class":87},[77,88572,53871],{"class":158},[77,88574,291],{"class":87},[77,88576,88577,88579,88581],{"class":79,"line":1572},[77,88578,54602],{"class":87},[77,88580,2520],{"class":158},[77,88582,291],{"class":87},[77,88584,88585,88588],{"class":79,"line":1589},[77,88586,88587],{"class":83},"    .modal",[77,88589,88],{"class":87},[77,88591,88592,88594,88596,88598,88600],{"class":79,"line":1595},[77,88593,57223],{"class":94},[77,88595,98],{"class":87},[77,88597,6448],{"class":94},[77,88599,2124],{"class":2123},[77,88601,104],{"class":87},[77,88603,88604,88607,88609,88611,88613],{"class":79,"line":4088},[77,88605,88606],{"class":94},"      min-height",[77,88608,98],{"class":87},[77,88610,2925],{"class":94},[77,88612,2124],{"class":2123},[77,88614,104],{"class":87},[77,88616,88617,88619,88621,88623,88625,88627,88629,88631,88633,88635,88637,88639,88641,88643,88645,88648],{"class":79,"line":4093},[77,88618,81188],{"class":94},[77,88620,98],{"class":87},[77,88622,1939],{"class":94},[77,88624,6568],{"class":94},[77,88626,4513],{"class":94},[77,88628,2124],{"class":2123},[77,88630,81205],{"class":94},[77,88632,2622],{"class":87},[77,88634,1939],{"class":94},[77,88636,680],{"class":87},[77,88638,1939],{"class":94},[77,88640,680],{"class":87},[77,88642,1939],{"class":94},[77,88644,680],{"class":87},[77,88646,88647],{"class":94},"0.1",[77,88649,5194],{"class":87},[77,88651,88652,88654,88656,88658,88660],{"class":79,"line":4099},[77,88653,57584],{"class":94},[77,88655,98],{"class":87},[77,88657,2907],{"class":94},[77,88659,2124],{"class":2123},[77,88661,104],{"class":87},[77,88663,88664,88666,88668,88670],{"class":79,"line":4104},[77,88665,57212],{"class":94},[77,88667,98],{"class":87},[77,88669,1584],{"class":94},[77,88671,104],{"class":87},[77,88673,88674,88677,88679,88682],{"class":79,"line":4118},[77,88675,88676],{"class":94},"      z-index",[77,88678,98],{"class":87},[77,88680,88681],{"class":94},"999",[77,88683,104],{"class":87},[77,88685,88686,88688,88690,88692,88694],{"class":79,"line":4123},[77,88687,57289],{"class":94},[77,88689,98],{"class":87},[77,88691,3269],{"class":94},[77,88693,2942],{"class":2123},[77,88695,104],{"class":87},[77,88697,88698,88700,88702,88704,88706],{"class":79,"line":4129},[77,88699,57397],{"class":94},[77,88701,98],{"class":87},[77,88703,3269],{"class":94},[77,88705,2942],{"class":2123},[77,88707,104],{"class":87},[77,88709,88710,88712,88714,88716,88718,88721,88723,88725,88727,88729,88731,88733],{"class":79,"line":4150},[77,88711,81229],{"class":94},[77,88713,98],{"class":87},[77,88715,81234],{"class":94},[77,88717,2622],{"class":87},[77,88719,88720],{"class":94},"-50",[77,88722,2942],{"class":2123},[77,88724,680],{"class":87},[77,88726,88720],{"class":94},[77,88728,2942],{"class":2123},[77,88730,680],{"class":87},[77,88732,1939],{"class":94},[77,88734,5194],{"class":87},[77,88736,88737,88739,88741,88743],{"class":79,"line":4155},[77,88738,57335],{"class":94},[77,88740,98],{"class":87},[77,88742,63290],{"class":94},[77,88744,104],{"class":87},[77,88746,88747],{"class":79,"line":4169},[77,88748,4662],{"class":87},[77,88750,88751],{"class":79,"line":4174},[77,88752,4875],{"emptyLinePlaceholder":2549},[77,88754,88755,88757,88760],{"class":79,"line":4203},[77,88756,88587],{"class":83},[77,88758,88759],{"class":83}," .header",[77,88761,88],{"class":87},[77,88763,88764,88766,88768,88770,88772],{"class":79,"line":4208},[77,88765,59807],{"class":94},[77,88767,98],{"class":87},[77,88769,3015],{"class":94},[77,88771,2124],{"class":2123},[77,88773,104],{"class":87},[77,88775,88776,88778,88780,88782,88784,88786],{"class":79,"line":4225},[77,88777,57149],{"class":94},[77,88779,98],{"class":87},[77,88781,1939],{"class":94},[77,88783,4513],{"class":94},[77,88785,2124],{"class":2123},[77,88787,104],{"class":87},[77,88789,88790,88792,88794,88796],{"class":79,"line":4230},[77,88791,57212],{"class":94},[77,88793,98],{"class":87},[77,88795,1538],{"class":94},[77,88797,104],{"class":87},[77,88799,88800,88802,88804,88806,88808],{"class":79,"line":4235},[77,88801,57372],{"class":94},[77,88803,98],{"class":87},[77,88805,3313],{"class":94},[77,88807,2124],{"class":2123},[77,88809,104],{"class":87},[77,88811,88812],{"class":79,"line":4240},[77,88813,4662],{"class":87},[77,88815,88816],{"class":79,"line":4254},[77,88817,4875],{"emptyLinePlaceholder":2549},[77,88819,88820,88822,88824,88826],{"class":79,"line":4259},[77,88821,88587],{"class":83},[77,88823,88759],{"class":83},[77,88825,5507],{"class":158},[77,88827,88],{"class":87},[77,88829,88830,88833,88835,88837],{"class":79,"line":5052},[77,88831,88832],{"class":94},"      font-style",[77,88834,98],{"class":87},[77,88836,66284],{"class":94},[77,88838,104],{"class":87},[77,88840,88841,88843,88845,88847],{"class":79,"line":5066},[77,88842,59864],{"class":94},[77,88844,98],{"class":87},[77,88846,64514],{"class":94},[77,88848,104],{"class":87},[77,88850,88851,88853,88855,88857],{"class":79,"line":5074},[77,88852,57212],{"class":94},[77,88854,98],{"class":87},[77,88856,1561],{"class":94},[77,88858,104],{"class":87},[77,88860,88861,88864,88866,88868,88870],{"class":79,"line":5079},[77,88862,88863],{"class":94},"      right",[77,88865,98],{"class":87},[77,88867,3188],{"class":94},[77,88869,2124],{"class":2123},[77,88871,104],{"class":87},[77,88873,88874,88876,88878,88881,88883],{"class":79,"line":5085},[77,88875,57397],{"class":94},[77,88877,98],{"class":87},[77,88879,88880],{"class":94},"-2",[77,88882,2124],{"class":2123},[77,88884,104],{"class":87},[77,88886,88887,88889,88891,88893],{"class":79,"line":5091},[77,88888,64469],{"class":94},[77,88890,98],{"class":87},[77,88892,64474],{"class":94},[77,88894,104],{"class":87},[77,88896,88897],{"class":79,"line":5096},[77,88898,4662],{"class":87},[77,88900,88901],{"class":79,"line":10422},[77,88902,4875],{"emptyLinePlaceholder":2549},[77,88904,88905,88907,88910],{"class":79,"line":10446},[77,88906,88587],{"class":83},[77,88908,88909],{"class":83}," .body",[77,88911,88],{"class":87},[77,88913,88914,88916,88918,88920],{"class":79,"line":10451},[77,88915,59734],{"class":94},[77,88917,98],{"class":87},[77,88919,54052],{"class":94},[77,88921,104],{"class":87},[77,88923,88924,88926,88928,88930,88932],{"class":79,"line":10457},[77,88925,57149],{"class":94},[77,88927,98],{"class":87},[77,88929,3059],{"class":94},[77,88931,2124],{"class":2123},[77,88933,104],{"class":87},[77,88935,88936],{"class":79,"line":10484},[77,88937,4662],{"class":87},[77,88939,88940],{"class":79,"line":10489},[77,88941,4875],{"emptyLinePlaceholder":2549},[77,88943,88944,88946,88949],{"class":79,"line":10495},[77,88945,88587],{"class":83},[77,88947,88948],{"class":83}," .footer",[77,88950,88],{"class":87},[77,88952,88953,88955,88957,88959],{"class":79,"line":10507},[77,88954,57459],{"class":94},[77,88956,98],{"class":87},[77,88958,53940],{"class":94},[77,88960,104],{"class":87},[77,88962,88963,88965,88967,88969],{"class":79,"line":10519},[77,88964,57470],{"class":94},[77,88966,98],{"class":87},[77,88968,54040],{"class":94},[77,88970,104],{"class":87},[77,88972,88973,88975,88977,88979,88981],{"class":79,"line":10531},[77,88974,57149],{"class":94},[77,88976,98],{"class":87},[77,88978,3059],{"class":94},[77,88980,2124],{"class":2123},[77,88982,104],{"class":87},[77,88984,88985],{"class":79,"line":12189},[77,88986,4662],{"class":87},[77,88988,88989],{"class":79,"line":12214},[77,88990,4875],{"emptyLinePlaceholder":2549},[77,88992,88993,88995,88997,88999],{"class":79,"line":12237},[77,88994,88587],{"class":83},[77,88996,88948],{"class":83},[77,88998,3876],{"class":158},[77,89000,88],{"class":87},[77,89002,89003,89005,89007,89009,89011,89013,89015],{"class":79,"line":12261},[77,89004,57149],{"class":94},[77,89006,98],{"class":87},[77,89008,2690],{"class":94},[77,89010,2124],{"class":2123},[77,89012,4558],{"class":94},[77,89014,2124],{"class":2123},[77,89016,104],{"class":87},[77,89018,89019,89021,89023,89026],{"class":79,"line":12266},[77,89020,64166],{"class":94},[77,89022,98],{"class":87},[77,89024,89025],{"class":94},"#ccc",[77,89027,104],{"class":87},[77,89029,89030,89032,89034,89036],{"class":79,"line":12271},[77,89031,66413],{"class":94},[77,89033,98],{"class":87},[77,89035,186],{"class":94},[77,89037,104],{"class":87},[77,89039,89040,89042,89044,89046],{"class":79,"line":12276},[77,89041,59864],{"class":94},[77,89043,98],{"class":87},[77,89045,63290],{"class":94},[77,89047,104],{"class":87},[77,89049,89050,89052,89054,89056,89058],{"class":79,"line":12285},[77,89051,57584],{"class":94},[77,89053,98],{"class":87},[77,89055,2696],{"class":94},[77,89057,2124],{"class":2123},[77,89059,104],{"class":87},[77,89061,89062,89064,89066,89068,89070],{"class":79,"line":12290},[77,89063,64195],{"class":94},[77,89065,98],{"class":87},[77,89067,3059],{"class":94},[77,89069,2124],{"class":2123},[77,89071,104],{"class":87},[77,89073,89074,89076,89078,89080,89082],{"class":79,"line":12296},[77,89075,57372],{"class":94},[77,89077,98],{"class":87},[77,89079,3162],{"class":94},[77,89081,2124],{"class":2123},[77,89083,104],{"class":87},[77,89085,89086],{"class":79,"line":12317},[77,89087,4662],{"class":87},[77,89089,89090],{"class":79,"line":12323},[77,89091,4875],{"emptyLinePlaceholder":2549},[77,89093,89094,89096,89098,89100,89103],{"class":79,"line":12337},[77,89095,88587],{"class":83},[77,89097,88948],{"class":83},[77,89099,3876],{"class":158},[77,89101,89102],{"class":83},".submit",[77,89104,88],{"class":87},[77,89106,89107,89109,89111,89114],{"class":79,"line":12343},[77,89108,57335],{"class":94},[77,89110,98],{"class":87},[77,89112,89113],{"class":94},"#369",[77,89115,104],{"class":87},[77,89117,89118],{"class":79,"line":12370},[77,89119,4662],{"class":87},[77,89121,89122,89124,89126],{"class":79,"line":12379},[77,89123,54875],{"class":87},[77,89125,2520],{"class":158},[77,89127,291],{"class":87},[77,89129,89130,89132,89134],{"class":79,"line":12385},[77,89131,351],{"class":87},[77,89133,53798],{"class":158},[77,89135,291],{"class":87},[77,89137,89138],{"class":79,"line":12393},[77,89139,4875],{"emptyLinePlaceholder":2549},[77,89141,89142,89144,89146],{"class":79,"line":12398},[77,89143,260],{"class":87},[77,89145,54258],{"class":158},[77,89147,291],{"class":87},[77,89149,89150,89152,89154,89156,89158,89161,89164,89166],{"class":79,"line":19074},[77,89151,54602],{"class":87},[77,89153,56341],{"class":158},[77,89155,17430],{"class":83},[77,89157,268],{"class":87},[77,89159,89160],{"class":271},"\"delete\"",[77,89162,89163],{"class":87},">删除\u003C\u002F",[77,89165,56341],{"class":158},[77,89167,291],{"class":87},[77,89169,89170,89172,89174,89176,89178,89181,89184,89186],{"class":79,"line":19080},[77,89171,54602],{"class":87},[77,89173,56341],{"class":158},[77,89175,17430],{"class":83},[77,89177,268],{"class":87},[77,89179,89180],{"class":271},"\"login\"",[77,89182,89183],{"class":87},">登录\u003C\u002F",[77,89185,56341],{"class":158},[77,89187,291],{"class":87},[77,89189,89190,89192,89194],{"class":79,"line":19103},[77,89191,54602],{"class":87},[77,89193,54271],{"class":158},[77,89195,291],{"class":87},[77,89197,89198],{"class":79,"line":19109},[77,89199,89200],{"class":323},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[77,89202,89203,89205,89208,89210,89212,89214,89216,89218,89221,89223,89225],{"class":79,"line":19132},[77,89204,72527],{"class":2123},[77,89206,89207],{"class":83}," Modal",[77,89209,2622],{"class":87},[77,89211,53871],{"class":7691},[77,89213,16036],{"class":2123},[77,89215,72373],{"class":271},[77,89217,680],{"class":87},[77,89219,89220],{"class":7691},"message",[77,89222,16036],{"class":2123},[77,89224,72373],{"class":271},[77,89226,14914],{"class":87},[77,89228,89229],{"class":79,"line":19146},[77,89230,89231],{"class":323},"      \u002F\u002F 创建Model 模态框盒子\n",[77,89233,89234],{"class":79,"line":19166},[77,89235,89236],{"class":323},"      \u002F\u002F 1.1 创建div标签\n",[77,89238,89239,89241,89244,89246,89248,89250,89252,89254],{"class":79,"line":19172},[77,89240,72494],{"class":94},[77,89242,89243],{"class":87},".modalBox ",[77,89245,268],{"class":2123},[77,89247,56850],{"class":87},[77,89249,72594],{"class":83},[77,89251,2622],{"class":87},[77,89253,84368],{"class":271},[77,89255,2628],{"class":87},[77,89257,89258],{"class":79,"line":19183},[77,89259,89260],{"class":323},"      \u002F\u002F 1.2 给div 添加类名为model\n",[77,89262,89263,89265,89268,89270],{"class":79,"line":19206},[77,89264,72494],{"class":94},[77,89266,89267],{"class":87},".modalBox.className ",[77,89269,268],{"class":2123},[77,89271,89272],{"class":271}," 'modal'\n",[77,89274,89275],{"class":79,"line":19228},[77,89276,89277],{"class":323},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[77,89279,89280,89282,89285,89287],{"class":79,"line":19233},[77,89281,72494],{"class":94},[77,89283,89284],{"class":87},".modalBox.innerHTML ",[77,89286,268],{"class":2123},[77,89288,72611],{"class":271},[77,89290,89291,89294,89296],{"class":79,"line":19239},[77,89292,89293],{"class":271},"        \u003Cdiv class=\"header\">${",[77,89295,53871],{"class":87},[77,89297,89298],{"class":271},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[77,89300,89301,89304,89306],{"class":79,"line":19253},[77,89302,89303],{"class":271},"        \u003Cdiv class=\"body\">${",[77,89305,89220],{"class":87},[77,89307,89308],{"class":271},"}\u003C\u002Fdiv>\n",[77,89310,89311],{"class":79,"line":19266},[77,89312,89313],{"class":271},"      `\n",[77,89315,89316],{"class":79,"line":19271},[77,89317,89318],{"class":323},"      \u002F\u002F console.log(this.modalBox)\n",[77,89320,89321],{"class":79,"line":19285},[77,89322,4662],{"class":87},[77,89324,89325],{"class":79,"line":19290},[77,89326,89327],{"class":323},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[77,89329,89330],{"class":79,"line":19296},[77,89331,89332],{"class":323},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[77,89334,89335],{"class":79,"line":19301},[77,89336,89337],{"class":323},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[77,89339,89340,89343,89345,89347,89349,89352,89354,89356],{"class":79,"line":19315},[77,89341,89342],{"class":94},"    Modal",[77,89344,3171],{"class":87},[77,89346,88016],{"class":94},[77,89348,3171],{"class":87},[77,89350,89351],{"class":83},"open",[77,89353,16036],{"class":2123},[77,89355,61366],{"class":2123},[77,89357,56906],{"class":87},[77,89359,89360],{"class":79,"line":19320},[77,89361,89362],{"class":323},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[77,89364,89365,89367,89370,89372,89374,89376,89378,89381],{"class":79,"line":19325},[77,89366,60676],{"class":2123},[77,89368,89369],{"class":94}," box",[77,89371,16036],{"class":2123},[77,89373,56850],{"class":87},[77,89375,56853],{"class":83},[77,89377,2622],{"class":87},[77,89379,89380],{"class":271},"'.modal'",[77,89382,2628],{"class":87},[77,89384,89385],{"class":79,"line":19339},[77,89386,89387],{"class":323},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[77,89389,89390,89393,89395,89398,89400],{"class":79,"line":19351},[77,89391,89392],{"class":87},"      box ",[77,89394,4191],{"class":2123},[77,89396,89397],{"class":87}," box.",[77,89399,59454],{"class":83},[77,89401,4451],{"class":87},[77,89403,89404],{"class":79,"line":19356},[77,89405,89406],{"class":323},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[77,89408,89409],{"class":79,"line":19369},[77,89410,89411],{"class":323},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[77,89413,89414],{"class":79,"line":19374},[77,89415,89416],{"class":323},"      \u002F\u002F append可以增加对象\n",[77,89418,89419,89422,89425,89427,89430],{"class":79,"line":19379},[77,89420,89421],{"class":87},"      document.body.",[77,89423,89424],{"class":83},"append",[77,89426,2622],{"class":87},[77,89428,89429],{"class":94},"this",[77,89431,89432],{"class":87},".modalBox)\n",[77,89434,89435],{"class":79,"line":19384},[77,89436,4875],{"emptyLinePlaceholder":2549},[77,89438,89439],{"class":79,"line":19397},[77,89440,89441],{"class":323},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[77,89443,89444,89446,89449,89451,89453,89456,89458,89460,89462,89464,89467,89469],{"class":79,"line":19402},[77,89445,72494],{"class":94},[77,89447,89448],{"class":87},".modalBox.",[77,89450,56853],{"class":83},[77,89452,2622],{"class":87},[77,89454,89455],{"class":271},"'i'",[77,89457,33294],{"class":87},[77,89459,60261],{"class":83},[77,89461,2622],{"class":87},[77,89463,60266],{"class":271},[77,89465,89466],{"class":87},", () ",[77,89468,87159],{"class":2123},[77,89470,88],{"class":87},[77,89472,89473],{"class":79,"line":35100},[77,89474,89475],{"class":323},"        \u002F\u002F 这个地方需要用到箭头函数\n",[77,89477,89478],{"class":79,"line":35106},[77,89479,89480],{"class":323},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[77,89482,89483],{"class":79,"line":35112},[77,89484,89485],{"class":323},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[77,89487,89488,89490,89492,89495],{"class":79,"line":35118},[77,89489,67169],{"class":94},[77,89491,3171],{"class":87},[77,89493,89494],{"class":83},"close",[77,89496,4451],{"class":87},[77,89498,89499],{"class":79,"line":35124},[77,89500,67258],{"class":87},[77,89502,89503],{"class":79,"line":35135},[77,89504,4662],{"class":87},[77,89506,89507],{"class":79,"line":35141},[77,89508,4875],{"emptyLinePlaceholder":2549},[77,89510,89511],{"class":79,"line":35161},[77,89512,89513],{"class":323},"    \u002F\u002F 测试一下 点击 删除按钮\n",[77,89515,89516,89518,89520,89522,89525,89527,89529,89531,89533,89535,89537],{"class":79,"line":35167},[77,89517,54865],{"class":87},[77,89519,56853],{"class":83},[77,89521,2622],{"class":87},[77,89523,89524],{"class":271},"'#delete'",[77,89526,33294],{"class":87},[77,89528,60261],{"class":83},[77,89530,2622],{"class":87},[77,89532,60266],{"class":271},[77,89534,89466],{"class":87},[77,89536,87159],{"class":2123},[77,89538,88],{"class":87},[77,89540,89541],{"class":79,"line":35178},[77,89542,89543],{"class":323},"      \u002F\u002F 先调用Model构造函数\n",[77,89545,89546,89548,89551,89553,89555,89557,89559,89562,89564,89567],{"class":79,"line":35184},[77,89547,60676],{"class":2123},[77,89549,89550],{"class":94}," del",[77,89552,16036],{"class":2123},[77,89554,14051],{"class":2123},[77,89556,89207],{"class":83},[77,89558,2622],{"class":87},[77,89560,89561],{"class":271},"'温馨的提示'",[77,89563,680],{"class":87},[77,89565,89566],{"class":271},"'您没有删除权限操作'",[77,89568,2628],{"class":87},[77,89570,89571],{"class":79,"line":35190},[77,89572,89573],{"class":323},"      \u002F\u002F 实例对象调用open方法\n",[77,89575,89576,89579,89581],{"class":79,"line":35196},[77,89577,89578],{"class":87},"      del.",[77,89580,89351],{"class":83},[77,89582,4451],{"class":87},[77,89584,89585],{"class":79,"line":35202},[77,89586,35928],{"class":87},[77,89588,89589],{"class":79,"line":35208},[77,89590,89591],{"class":323},"    \u002F\u002F 测试一下 点击 登录按钮\n",[77,89593,89594,89596,89598,89600,89603,89605,89607,89609,89611,89613,89615],{"class":79,"line":35214},[77,89595,54865],{"class":87},[77,89597,56853],{"class":83},[77,89599,2622],{"class":87},[77,89601,89602],{"class":271},"'#login'",[77,89604,33294],{"class":87},[77,89606,60261],{"class":83},[77,89608,2622],{"class":87},[77,89610,60266],{"class":271},[77,89612,89466],{"class":87},[77,89614,87159],{"class":2123},[77,89616,88],{"class":87},[77,89618,89619],{"class":79,"line":35220},[77,89620,89543],{"class":323},[77,89622,89623,89625,89628,89630,89632,89634,89636,89639,89641,89644],{"class":79,"line":35240},[77,89624,60676],{"class":2123},[77,89626,89627],{"class":94}," log",[77,89629,16036],{"class":2123},[77,89631,14051],{"class":2123},[77,89633,89207],{"class":83},[77,89635,2622],{"class":87},[77,89637,89638],{"class":271},"'友情提示'",[77,89640,680],{"class":87},[77,89642,89643],{"class":271},"'您还没有登录呢'",[77,89645,2628],{"class":87},[77,89647,89648],{"class":79,"line":35246},[77,89649,89573],{"class":323},[77,89651,89652,89655,89657],{"class":79,"line":35262},[77,89653,89654],{"class":87},"      log.",[77,89656,89351],{"class":83},[77,89658,4451],{"class":87},[77,89660,89661],{"class":79,"line":35268},[77,89662,35928],{"class":87},[77,89664,89665],{"class":79,"line":35282},[77,89666,89667],{"class":323},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[77,89669,89670,89672,89674,89676,89678,89680,89682,89684],{"class":79,"line":35288},[77,89671,89342],{"class":94},[77,89673,3171],{"class":87},[77,89675,88016],{"class":94},[77,89677,3171],{"class":87},[77,89679,89494],{"class":83},[77,89681,16036],{"class":2123},[77,89683,61366],{"class":2123},[77,89685,56906],{"class":87},[77,89687,89688,89690,89692,89694],{"class":79,"line":35303},[77,89689,72494],{"class":94},[77,89691,89448],{"class":87},[77,89693,59454],{"class":83},[77,89695,4451],{"class":87},[77,89697,89698],{"class":79,"line":35309},[77,89699,4662],{"class":87},[77,89701,89702,89704,89706],{"class":79,"line":35318},[77,89703,54875],{"class":87},[77,89705,54271],{"class":158},[77,89707,291],{"class":87},[77,89709,89710,89712,89714],{"class":79,"line":35324},[77,89711,351],{"class":87},[77,89713,54258],{"class":158},[77,89715,291],{"class":87},[77,89717,89718],{"class":79,"line":35333},[77,89719,4875],{"emptyLinePlaceholder":2549},[77,89721,89722,89724,89726],{"class":79,"line":35339},[77,89723,351],{"class":87},[77,89725,53101],{"class":158},[77,89727,291],{"class":87},[24,89729,89730],{},[40,89731],{"alt":72,"src":89732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89734,89736],{"id":89735},"_414-深浅拷贝","4.14 深浅拷贝",[19,89738,89740],{"id":89739},"_4141-浅拷贝","4.14.1 浅拷贝",[24,89742,89743],{},[40,89744],{"alt":72,"src":89745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[24,89747,89748],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[24,89750,89751],{},[40,89752],{"alt":72,"src":89753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[24,89755,89756],{},[40,89757],{"alt":72,"src":89758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[24,89760,89761],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[24,89763,89764],{},[40,89765],{"alt":72,"src":89766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[24,89768,13805],{},[24,89770,89771],{},[40,89772],{"alt":72,"src":89773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[19,89775,89777],{"id":89776},"_4142-深拷贝","4.14.2 深拷贝",[24,89779,89780],{},"深拷贝：拷贝的是对象，不是地址",[24,89782,89783],{},"常用的三种方法：",[139,89785,89786,89789,89792],{},[54,89787,89788],{},"通过递归实现深拷贝",[54,89790,89791],{},"lodash\u002FcloneDeep",[54,89793,89794],{},"通过JSON.stringify()实现",[24468,89796,89798],{"id":89797},"_41421-递归函数","4.14.2.1 递归函数",[24,89800,89801],{},[40,89802],{"alt":72,"src":89803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[139,89805,89806],{},[54,89807,89808],{},"死递归占溢出：",[67,89810,89812],{"className":55525,"code":89811,"language":55527,"meta":72,"style":72},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[74,89813,89814,89822,89830,89834,89839,89843,89848,89856],{"__ignoreMap":72},[77,89815,89816,89818,89820],{"class":79,"line":80},[77,89817,260],{"class":87},[77,89819,54258],{"class":158},[77,89821,291],{"class":87},[77,89823,89824,89826,89828],{"class":79,"line":91},[77,89825,54602],{"class":87},[77,89827,54271],{"class":158},[77,89829,291],{"class":87},[77,89831,89832],{"class":79,"line":107},[77,89833,79581],{"class":87},[77,89835,89836],{"class":79,"line":191},[77,89837,89838],{"class":87},"      fn()\n",[77,89840,89841],{"class":79,"line":1543},[77,89842,4662],{"class":87},[77,89844,89845],{"class":79,"line":1549},[77,89846,89847],{"class":87},"    fn()\n",[77,89849,89850,89852,89854],{"class":79,"line":1566},[77,89851,54875],{"class":87},[77,89853,54271],{"class":158},[77,89855,291],{"class":87},[77,89857,89858,89860,89862],{"class":79,"line":1572},[77,89859,351],{"class":87},[77,89861,54258],{"class":158},[77,89863,291],{"class":87},[139,89865,89866],{"start":91},[54,89867,89868],{},"递归函数要加判断条件：",[24,89870,89871],{},[40,89872],{"alt":72,"src":89873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[139,89875,89876],{"start":107},[54,89877,89878],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[67,89880,89882],{"className":53099,"code":89881,"language":53101,"meta":72,"style":72},"\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",[74,89883,89884,89894,89908,89912,89920,89934,89954,89966,89974,89978,89986,89998,90006,90014,90039,90051,90055,90062,90070,90078,90082],{"__ignoreMap":72},[77,89885,89886,89888,89890,89892],{"class":79,"line":80},[77,89887,53763],{"class":87},[77,89889,53766],{"class":158},[77,89891,53769],{"class":83},[77,89893,291],{"class":87},[77,89895,89896,89898,89900,89902,89904,89906],{"class":79,"line":91},[77,89897,260],{"class":87},[77,89899,53101],{"class":158},[77,89901,53780],{"class":83},[77,89903,268],{"class":87},[77,89905,53785],{"class":271},[77,89907,291],{"class":87},[77,89909,89910],{"class":79,"line":107},[77,89911,4875],{"emptyLinePlaceholder":2549},[77,89913,89914,89916,89918],{"class":79,"line":191},[77,89915,260],{"class":87},[77,89917,53798],{"class":158},[77,89919,291],{"class":87},[77,89921,89922,89924,89926,89928,89930,89932],{"class":79,"line":1543},[77,89923,54602],{"class":87},[77,89925,53808],{"class":158},[77,89927,53811],{"class":83},[77,89929,268],{"class":87},[77,89931,53816],{"class":271},[77,89933,291],{"class":87},[77,89935,89936,89938,89940,89942,89944,89946,89948,89950,89952],{"class":79,"line":1549},[77,89937,54602],{"class":87},[77,89939,53808],{"class":158},[77,89941,2495],{"class":83},[77,89943,268],{"class":87},[77,89945,53855],{"class":271},[77,89947,53835],{"class":83},[77,89949,268],{"class":87},[77,89951,53862],{"class":271},[77,89953,291],{"class":87},[77,89955,89956,89958,89960,89962,89964],{"class":79,"line":1566},[77,89957,54602],{"class":87},[77,89959,53871],{"class":158},[77,89961,53874],{"class":87},[77,89963,53871],{"class":158},[77,89965,291],{"class":87},[77,89967,89968,89970,89972],{"class":79,"line":1572},[77,89969,351],{"class":87},[77,89971,53798],{"class":158},[77,89973,291],{"class":87},[77,89975,89976],{"class":79,"line":1589},[77,89977,4875],{"emptyLinePlaceholder":2549},[77,89979,89980,89982,89984],{"class":79,"line":1595},[77,89981,260],{"class":87},[77,89983,54258],{"class":158},[77,89985,291],{"class":87},[77,89987,89988,89990,89992,89994,89996],{"class":79,"line":4088},[77,89989,54602],{"class":87},[77,89991,331],{"class":158},[77,89993,57762],{"class":87},[77,89995,331],{"class":158},[77,89997,291],{"class":87},[77,89999,90000,90002,90004],{"class":79,"line":4093},[77,90001,54602],{"class":87},[77,90003,54271],{"class":158},[77,90005,291],{"class":87},[77,90007,90008,90010,90012],{"class":79,"line":4099},[77,90009,72527],{"class":2123},[77,90011,76212],{"class":83},[77,90013,13326],{"class":87},[77,90015,90016,90018,90020,90022,90024,90026,90028,90030,90032,90034,90037],{"class":79,"line":4104},[77,90017,58219],{"class":87},[77,90019,56853],{"class":83},[77,90021,2622],{"class":87},[77,90023,84368],{"class":271},[77,90025,76687],{"class":87},[77,90027,268],{"class":2123},[77,90029,14051],{"class":2123},[77,90031,76228],{"class":83},[77,90033,19731],{"class":87},[77,90035,90036],{"class":83},"toLocaleString",[77,90038,4451],{"class":87},[77,90040,90041,90044,90047,90049],{"class":79,"line":4118},[77,90042,90043],{"class":83},"      setTimeout",[77,90045,90046],{"class":87},"(getTime, ",[77,90048,8885],{"class":94},[77,90050,2628],{"class":87},[77,90052,90053],{"class":79,"line":4123},[77,90054,4662],{"class":87},[77,90056,90057,90060],{"class":79,"line":4129},[77,90058,90059],{"class":83},"    getTime",[77,90061,4451],{"class":87},[77,90063,90064,90066,90068],{"class":79,"line":4150},[77,90065,54875],{"class":87},[77,90067,54271],{"class":158},[77,90069,291],{"class":87},[77,90071,90072,90074,90076],{"class":79,"line":4155},[77,90073,351],{"class":87},[77,90075,54258],{"class":158},[77,90077,291],{"class":87},[77,90079,90080],{"class":79,"line":4169},[77,90081,4875],{"emptyLinePlaceholder":2549},[77,90083,90084,90086,90088],{"class":79,"line":4174},[77,90085,351],{"class":87},[77,90087,53101],{"class":158},[77,90089,291],{"class":87},[24,90091,90092],{},[40,90093],{"alt":72,"src":90094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[139,90096,90097],{"start":191},[54,90098,89788],{},[24,90100,90101],{},[40,90102],{"alt":72,"src":90103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[24,90105,90106],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[24,90108,41655],{},[24,90110,90111],{},"这个是简易版的递归函数深拷贝",[24,90113,90114],{},"一定要注意先数组再对象，因为万物皆可对象",[67,90116,90118],{"className":53099,"code":90117,"language":53101,"meta":72,"style":72},"\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",[74,90119,90120,90130,90144,90148,90156,90170,90190,90202,90210,90214,90222,90230,90240,90249,90257,90273,90277,90285,90289,90293,90305,90310,90329,90345,90350,90355,90360,90375,90380,90385,90394,90402,90419,90427,90433,90441,90446,90451,90460,90464,90468,90472,90483,90492,90502,90516,90526,90534,90542,90550,90554],{"__ignoreMap":72},[77,90121,90122,90124,90126,90128],{"class":79,"line":80},[77,90123,53763],{"class":87},[77,90125,53766],{"class":158},[77,90127,53769],{"class":83},[77,90129,291],{"class":87},[77,90131,90132,90134,90136,90138,90140,90142],{"class":79,"line":91},[77,90133,260],{"class":87},[77,90135,53101],{"class":158},[77,90137,53780],{"class":83},[77,90139,268],{"class":87},[77,90141,53785],{"class":271},[77,90143,291],{"class":87},[77,90145,90146],{"class":79,"line":107},[77,90147,4875],{"emptyLinePlaceholder":2549},[77,90149,90150,90152,90154],{"class":79,"line":191},[77,90151,260],{"class":87},[77,90153,53798],{"class":158},[77,90155,291],{"class":87},[77,90157,90158,90160,90162,90164,90166,90168],{"class":79,"line":1543},[77,90159,54602],{"class":87},[77,90161,53808],{"class":158},[77,90163,53811],{"class":83},[77,90165,268],{"class":87},[77,90167,53816],{"class":271},[77,90169,291],{"class":87},[77,90171,90172,90174,90176,90178,90180,90182,90184,90186,90188],{"class":79,"line":1549},[77,90173,54602],{"class":87},[77,90175,53808],{"class":158},[77,90177,2495],{"class":83},[77,90179,268],{"class":87},[77,90181,53855],{"class":271},[77,90183,53835],{"class":83},[77,90185,268],{"class":87},[77,90187,53862],{"class":271},[77,90189,291],{"class":87},[77,90191,90192,90194,90196,90198,90200],{"class":79,"line":1566},[77,90193,54602],{"class":87},[77,90195,53871],{"class":158},[77,90197,53874],{"class":87},[77,90199,53871],{"class":158},[77,90201,291],{"class":87},[77,90203,90204,90206,90208],{"class":79,"line":1572},[77,90205,351],{"class":87},[77,90207,53798],{"class":158},[77,90209,291],{"class":87},[77,90211,90212],{"class":79,"line":1589},[77,90213,4875],{"emptyLinePlaceholder":2549},[77,90215,90216,90218,90220],{"class":79,"line":1595},[77,90217,260],{"class":87},[77,90219,54258],{"class":158},[77,90221,291],{"class":87},[77,90223,90224,90226,90228],{"class":79,"line":4088},[77,90225,54602],{"class":87},[77,90227,54271],{"class":158},[77,90229,291],{"class":87},[77,90231,90232,90234,90236,90238],{"class":79,"line":4093},[77,90233,13694],{"class":2123},[77,90235,72414],{"class":94},[77,90237,16036],{"class":2123},[77,90239,88],{"class":87},[77,90241,90242,90244,90247],{"class":79,"line":4099},[77,90243,74055],{"class":87},[77,90245,90246],{"class":271},"'pink'",[77,90248,33933],{"class":87},[77,90250,90251,90253,90255],{"class":79,"line":4104},[77,90252,74065],{"class":87},[77,90254,3263],{"class":94},[77,90256,33933],{"class":87},[77,90258,90259,90262,90265,90267,90270],{"class":79,"line":4118},[77,90260,90261],{"class":87},"      hobby: [",[77,90263,90264],{"class":271},"'乒乓球'",[77,90266,680],{"class":87},[77,90268,90269],{"class":271},"'足球'",[77,90271,90272],{"class":87},"],\n",[77,90274,90275],{"class":79,"line":4123},[77,90276,80310],{"class":87},[77,90278,90279,90282],{"class":79,"line":4129},[77,90280,90281],{"class":87},"        baby: ",[77,90283,90284],{"class":271},"'小pink'\n",[77,90286,90287],{"class":79,"line":4150},[77,90288,54856],{"class":87},[77,90290,90291],{"class":79,"line":4155},[77,90292,4662],{"class":87},[77,90294,90295,90297,90300,90302],{"class":79,"line":4169},[77,90296,13694],{"class":2123},[77,90298,90299],{"class":94}," o",[77,90301,16036],{"class":2123},[77,90303,90304],{"class":87}," {}\n",[77,90306,90307],{"class":79,"line":4174},[77,90308,90309],{"class":323},"    \u002F\u002F 拷贝函数\n",[77,90311,90312,90314,90317,90319,90322,90324,90327],{"class":79,"line":4203},[77,90313,72527],{"class":2123},[77,90315,90316],{"class":83}," deepCopy",[77,90318,2622],{"class":87},[77,90320,90321],{"class":7691},"newObj",[77,90323,680],{"class":87},[77,90325,90326],{"class":7691},"oldObj",[77,90328,14914],{"class":87},[77,90330,90331,90333,90335,90337,90340,90342],{"class":79,"line":4208},[77,90332,54742],{"class":2123},[77,90334,4134],{"class":87},[77,90336,54305],{"class":2123},[77,90338,90339],{"class":87}," k ",[77,90341,28511],{"class":2123},[77,90343,90344],{"class":87}," oldObj) {\n",[77,90346,90347],{"class":79,"line":4225},[77,90348,90349],{"class":323},"        \u002F\u002F 处理数组的问题\n",[77,90351,90352],{"class":79,"line":4230},[77,90353,90354],{"class":323},"        \u002F\u002F 判断是否属于数组\n",[77,90356,90357],{"class":79,"line":4235},[77,90358,90359],{"class":323},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[77,90361,90362,90364,90367,90370,90373],{"class":79,"line":4240},[77,90363,4972],{"class":2123},[77,90365,90366],{"class":87}," (oldObj[k] ",[77,90368,90369],{"class":2123},"instanceof",[77,90371,90372],{"class":83}," Array",[77,90374,14914],{"class":87},[77,90376,90377],{"class":79,"line":4254},[77,90378,90379],{"class":323},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[77,90381,90382],{"class":79,"line":4259},[77,90383,90384],{"class":323},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[77,90386,90387,90390,90392],{"class":79,"line":5052},[77,90388,90389],{"class":87},"          newObj[k] ",[77,90391,268],{"class":2123},[77,90393,54296],{"class":87},[77,90395,90396,90399],{"class":79,"line":5066},[77,90397,90398],{"class":83},"          deepCopy",[77,90400,90401],{"class":87},"(newObj[k], oldObj[k])\n",[77,90403,90404,90406,90408,90410,90412,90414,90417],{"class":79,"line":5074},[77,90405,82517],{"class":87},[77,90407,4177],{"class":2123},[77,90409,4180],{"class":2123},[77,90411,90366],{"class":87},[77,90413,90369],{"class":2123},[77,90415,90416],{"class":83}," Object",[77,90418,14914],{"class":87},[77,90420,90421,90423,90425],{"class":79,"line":5079},[77,90422,90389],{"class":87},[77,90424,268],{"class":2123},[77,90426,90304],{"class":87},[77,90428,90429,90431],{"class":79,"line":5085},[77,90430,90398],{"class":83},[77,90432,90401],{"class":87},[77,90434,90435,90437,90439],{"class":79,"line":5091},[77,90436,82517],{"class":87},[77,90438,4177],{"class":2123},[77,90440,88],{"class":87},[77,90442,90443],{"class":79,"line":5096},[77,90444,90445],{"class":323},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[77,90447,90448],{"class":79,"line":10422},[77,90449,90450],{"class":323},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[77,90452,90453,90455,90457],{"class":79,"line":10446},[77,90454,90389],{"class":87},[77,90456,268],{"class":2123},[77,90458,90459],{"class":87}," oldObj[k]\n",[77,90461,90462],{"class":79,"line":10451},[77,90463,5004],{"class":87},[77,90465,90466],{"class":79,"line":10457},[77,90467,54856],{"class":87},[77,90469,90470],{"class":79,"line":10484},[77,90471,4662],{"class":87},[77,90473,90474,90477,90480],{"class":79,"line":10489},[77,90475,90476],{"class":83},"    deepCopy",[77,90478,90479],{"class":87},"(o, obj) ",[77,90481,90482],{"class":323},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[77,90484,90485,90487,90489],{"class":79,"line":10495},[77,90486,76192],{"class":87},[77,90488,60695],{"class":83},[77,90490,90491],{"class":87},"(o)\n",[77,90493,90494,90497,90499],{"class":79,"line":10507},[77,90495,90496],{"class":87},"    o.age ",[77,90498,268],{"class":2123},[77,90500,90501],{"class":94}," 20\n",[77,90503,90504,90507,90509,90511,90513],{"class":79,"line":10519},[77,90505,90506],{"class":87},"    o.hobby[",[77,90508,1939],{"class":94},[77,90510,6918],{"class":87},[77,90512,268],{"class":2123},[77,90514,90515],{"class":271}," '篮球'\n",[77,90517,90518,90521,90523],{"class":79,"line":10531},[77,90519,90520],{"class":87},"    o.family ",[77,90522,268],{"class":2123},[77,90524,90525],{"class":271}," '老pink'\n",[77,90527,90528,90530,90532],{"class":79,"line":12189},[77,90529,76192],{"class":87},[77,90531,60695],{"class":83},[77,90533,72479],{"class":87},[77,90535,90536,90538,90540],{"class":79,"line":12214},[77,90537,54875],{"class":87},[77,90539,54271],{"class":158},[77,90541,291],{"class":87},[77,90543,90544,90546,90548],{"class":79,"line":12237},[77,90545,351],{"class":87},[77,90547,54258],{"class":158},[77,90549,291],{"class":87},[77,90551,90552],{"class":79,"line":12261},[77,90553,4875],{"emptyLinePlaceholder":2549},[77,90555,90556,90558,90560],{"class":79,"line":12266},[77,90557,351],{"class":87},[77,90559,53101],{"class":158},[77,90561,291],{"class":87},[24,90563,90564],{},[40,90565],{"alt":72,"src":90566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24468,90568,90570,90571],{"id":90569},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[27,90572,90573],{},"js库lodash里面cloneDeep内部实现了深拷贝",[24,90575,90576],{},[417,90577,90578],{"href":90578,"rel":90579},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26332],[24,90581,90582],{},"lodash里边的方法都要加上一个下划线_",[24,90584,90585],{},"_.cloneDeep()",[67,90587,90589],{"className":53099,"code":90588,"language":53101,"meta":72,"style":72},"\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",[74,90590,90591,90601,90615,90619,90627,90641,90661,90673,90681,90685,90693,90698,90717,90725,90735,90743,90751,90763,90767,90773,90777,90781,90797,90805,90814,90822,90830,90838,90842],{"__ignoreMap":72},[77,90592,90593,90595,90597,90599],{"class":79,"line":80},[77,90594,53763],{"class":87},[77,90596,53766],{"class":158},[77,90598,53769],{"class":83},[77,90600,291],{"class":87},[77,90602,90603,90605,90607,90609,90611,90613],{"class":79,"line":91},[77,90604,260],{"class":87},[77,90606,53101],{"class":158},[77,90608,53780],{"class":83},[77,90610,268],{"class":87},[77,90612,53785],{"class":271},[77,90614,291],{"class":87},[77,90616,90617],{"class":79,"line":107},[77,90618,4875],{"emptyLinePlaceholder":2549},[77,90620,90621,90623,90625],{"class":79,"line":191},[77,90622,260],{"class":87},[77,90624,53798],{"class":158},[77,90626,291],{"class":87},[77,90628,90629,90631,90633,90635,90637,90639],{"class":79,"line":1543},[77,90630,54602],{"class":87},[77,90632,53808],{"class":158},[77,90634,53811],{"class":83},[77,90636,268],{"class":87},[77,90638,53816],{"class":271},[77,90640,291],{"class":87},[77,90642,90643,90645,90647,90649,90651,90653,90655,90657,90659],{"class":79,"line":1549},[77,90644,54602],{"class":87},[77,90646,53808],{"class":158},[77,90648,2495],{"class":83},[77,90650,268],{"class":87},[77,90652,53855],{"class":271},[77,90654,53835],{"class":83},[77,90656,268],{"class":87},[77,90658,53862],{"class":271},[77,90660,291],{"class":87},[77,90662,90663,90665,90667,90669,90671],{"class":79,"line":1566},[77,90664,54602],{"class":87},[77,90666,53871],{"class":158},[77,90668,53874],{"class":87},[77,90670,53871],{"class":158},[77,90672,291],{"class":87},[77,90674,90675,90677,90679],{"class":79,"line":1572},[77,90676,351],{"class":87},[77,90678,53798],{"class":158},[77,90680,291],{"class":87},[77,90682,90683],{"class":79,"line":1589},[77,90684,4875],{"emptyLinePlaceholder":2549},[77,90686,90687,90689,90691],{"class":79,"line":1595},[77,90688,260],{"class":87},[77,90690,54258],{"class":158},[77,90692,291],{"class":87},[77,90694,90695],{"class":79,"line":4088},[77,90696,90697],{"class":323},"  \u003C!-- 先引用这个库 -->\n",[77,90699,90700,90702,90704,90706,90708,90711,90713,90715],{"class":79,"line":4093},[77,90701,54602],{"class":87},[77,90703,54271],{"class":158},[77,90705,265],{"class":83},[77,90707,268],{"class":87},[77,90709,90710],{"class":271},"\"lodash.min.js\"",[77,90712,57762],{"class":87},[77,90714,54271],{"class":158},[77,90716,291],{"class":87},[77,90718,90719,90721,90723],{"class":79,"line":4099},[77,90720,54602],{"class":87},[77,90722,54271],{"class":158},[77,90724,291],{"class":87},[77,90726,90727,90729,90731,90733],{"class":79,"line":4104},[77,90728,13694],{"class":2123},[77,90730,72414],{"class":94},[77,90732,16036],{"class":2123},[77,90734,88],{"class":87},[77,90736,90737,90739,90741],{"class":79,"line":4118},[77,90738,74055],{"class":87},[77,90740,90246],{"class":271},[77,90742,33933],{"class":87},[77,90744,90745,90747,90749],{"class":79,"line":4123},[77,90746,74065],{"class":87},[77,90748,3263],{"class":94},[77,90750,33933],{"class":87},[77,90752,90753,90755,90757,90759,90761],{"class":79,"line":4129},[77,90754,90261],{"class":87},[77,90756,90264],{"class":271},[77,90758,680],{"class":87},[77,90760,90269],{"class":271},[77,90762,90272],{"class":87},[77,90764,90765],{"class":79,"line":4150},[77,90766,80310],{"class":87},[77,90768,90769,90771],{"class":79,"line":4155},[77,90770,90281],{"class":87},[77,90772,90284],{"class":271},[77,90774,90775],{"class":79,"line":4169},[77,90776,54856],{"class":87},[77,90778,90779],{"class":79,"line":4174},[77,90780,4662],{"class":87},[77,90782,90783,90785,90787,90789,90792,90795],{"class":79,"line":4203},[77,90784,13694],{"class":2123},[77,90786,90299],{"class":94},[77,90788,16036],{"class":2123},[77,90790,90791],{"class":87}," _.",[77,90793,90794],{"class":83},"cloneDeep",[77,90796,72479],{"class":87},[77,90798,90799,90801,90803],{"class":79,"line":4208},[77,90800,76192],{"class":87},[77,90802,60695],{"class":83},[77,90804,90491],{"class":87},[77,90806,90807,90810,90812],{"class":79,"line":4225},[77,90808,90809],{"class":87},"    o.family.baby ",[77,90811,268],{"class":2123},[77,90813,90525],{"class":271},[77,90815,90816,90818,90820],{"class":79,"line":4230},[77,90817,76192],{"class":87},[77,90819,60695],{"class":83},[77,90821,72479],{"class":87},[77,90823,90824,90826,90828],{"class":79,"line":4235},[77,90825,54875],{"class":87},[77,90827,54271],{"class":158},[77,90829,291],{"class":87},[77,90831,90832,90834,90836],{"class":79,"line":4240},[77,90833,351],{"class":87},[77,90835,54258],{"class":158},[77,90837,291],{"class":87},[77,90839,90840],{"class":79,"line":4254},[77,90841,4875],{"emptyLinePlaceholder":2549},[77,90843,90844,90846,90848],{"class":79,"line":4259},[77,90845,351],{"class":87},[77,90847,53101],{"class":158},[77,90849,291],{"class":87},[24,90851,90852],{},[40,90853],{"alt":72,"src":90854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24468,90856,90858],{"id":90857},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[67,90860,90862],{"className":53099,"code":90861,"language":53101,"meta":72,"style":72},"\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",[74,90863,90864,90874,90888,90892,90900,90914,90934,90946,90954,90958,90966,90974,90984,90992,91000,91012,91016,91022,91026,91030,91035,91040,91045,91071,91079,91088,91096,91104,91112,91116],{"__ignoreMap":72},[77,90865,90866,90868,90870,90872],{"class":79,"line":80},[77,90867,53763],{"class":87},[77,90869,53766],{"class":158},[77,90871,53769],{"class":83},[77,90873,291],{"class":87},[77,90875,90876,90878,90880,90882,90884,90886],{"class":79,"line":91},[77,90877,260],{"class":87},[77,90879,53101],{"class":158},[77,90881,53780],{"class":83},[77,90883,268],{"class":87},[77,90885,53785],{"class":271},[77,90887,291],{"class":87},[77,90889,90890],{"class":79,"line":107},[77,90891,4875],{"emptyLinePlaceholder":2549},[77,90893,90894,90896,90898],{"class":79,"line":191},[77,90895,260],{"class":87},[77,90897,53798],{"class":158},[77,90899,291],{"class":87},[77,90901,90902,90904,90906,90908,90910,90912],{"class":79,"line":1543},[77,90903,54602],{"class":87},[77,90905,53808],{"class":158},[77,90907,53811],{"class":83},[77,90909,268],{"class":87},[77,90911,53816],{"class":271},[77,90913,291],{"class":87},[77,90915,90916,90918,90920,90922,90924,90926,90928,90930,90932],{"class":79,"line":1549},[77,90917,54602],{"class":87},[77,90919,53808],{"class":158},[77,90921,2495],{"class":83},[77,90923,268],{"class":87},[77,90925,53855],{"class":271},[77,90927,53835],{"class":83},[77,90929,268],{"class":87},[77,90931,53862],{"class":271},[77,90933,291],{"class":87},[77,90935,90936,90938,90940,90942,90944],{"class":79,"line":1566},[77,90937,54602],{"class":87},[77,90939,53871],{"class":158},[77,90941,53874],{"class":87},[77,90943,53871],{"class":158},[77,90945,291],{"class":87},[77,90947,90948,90950,90952],{"class":79,"line":1572},[77,90949,351],{"class":87},[77,90951,53798],{"class":158},[77,90953,291],{"class":87},[77,90955,90956],{"class":79,"line":1589},[77,90957,4875],{"emptyLinePlaceholder":2549},[77,90959,90960,90962,90964],{"class":79,"line":1595},[77,90961,260],{"class":87},[77,90963,54258],{"class":158},[77,90965,291],{"class":87},[77,90967,90968,90970,90972],{"class":79,"line":4088},[77,90969,54602],{"class":87},[77,90971,54271],{"class":158},[77,90973,291],{"class":87},[77,90975,90976,90978,90980,90982],{"class":79,"line":4093},[77,90977,13694],{"class":2123},[77,90979,72414],{"class":94},[77,90981,16036],{"class":2123},[77,90983,88],{"class":87},[77,90985,90986,90988,90990],{"class":79,"line":4099},[77,90987,74055],{"class":87},[77,90989,90246],{"class":271},[77,90991,33933],{"class":87},[77,90993,90994,90996,90998],{"class":79,"line":4104},[77,90995,74065],{"class":87},[77,90997,3263],{"class":94},[77,90999,33933],{"class":87},[77,91001,91002,91004,91006,91008,91010],{"class":79,"line":4118},[77,91003,90261],{"class":87},[77,91005,90264],{"class":271},[77,91007,680],{"class":87},[77,91009,90269],{"class":271},[77,91011,90272],{"class":87},[77,91013,91014],{"class":79,"line":4123},[77,91015,80310],{"class":87},[77,91017,91018,91020],{"class":79,"line":4129},[77,91019,90281],{"class":87},[77,91021,90284],{"class":271},[77,91023,91024],{"class":79,"line":4150},[77,91025,54856],{"class":87},[77,91027,91028],{"class":79,"line":4155},[77,91029,4662],{"class":87},[77,91031,91032],{"class":79,"line":4169},[77,91033,91034],{"class":323},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[77,91036,91037],{"class":79,"line":4174},[77,91038,91039],{"class":323},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[77,91041,91042],{"class":79,"line":4203},[77,91043,91044],{"class":323},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[77,91046,91047,91049,91051,91053,91056,91058,91061,91063,91065,91067,91069],{"class":79,"line":4208},[77,91048,13694],{"class":2123},[77,91050,90299],{"class":94},[77,91052,16036],{"class":2123},[77,91054,91055],{"class":94}," JSON",[77,91057,3171],{"class":87},[77,91059,91060],{"class":83},"parse",[77,91062,2622],{"class":87},[77,91064,74103],{"class":94},[77,91066,3171],{"class":87},[77,91068,74108],{"class":83},[77,91070,74111],{"class":87},[77,91072,91073,91075,91077],{"class":79,"line":4225},[77,91074,76192],{"class":87},[77,91076,60695],{"class":83},[77,91078,90491],{"class":87},[77,91080,91081,91083,91085],{"class":79,"line":4230},[77,91082,90809],{"class":87},[77,91084,268],{"class":2123},[77,91086,91087],{"class":271}," '123'\n",[77,91089,91090,91092,91094],{"class":79,"line":4235},[77,91091,76192],{"class":87},[77,91093,60695],{"class":83},[77,91095,72479],{"class":87},[77,91097,91098,91100,91102],{"class":79,"line":4240},[77,91099,54875],{"class":87},[77,91101,54271],{"class":158},[77,91103,291],{"class":87},[77,91105,91106,91108,91110],{"class":79,"line":4254},[77,91107,351],{"class":87},[77,91109,54258],{"class":158},[77,91111,291],{"class":87},[77,91113,91114],{"class":79,"line":4259},[77,91115,4875],{"emptyLinePlaceholder":2549},[77,91117,91118,91120,91122],{"class":79,"line":5052},[77,91119,351],{"class":87},[77,91121,53101],{"class":158},[77,91123,291],{"class":87},[24,91125,91126],{},[40,91127],{"alt":72,"src":91128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91130,91132],{"id":91131},"_415-异常处理","4.15 异常处理",[139,91134,91135],{},[54,91136,91137],{},"throw抛异常",[24,91139,91140],{},[40,91141],{"alt":72,"src":91142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[139,91144,91145],{"start":91},[54,91146,91147],{},"try\u002Fcatch 捕获错误信息",[24,91149,91150],{},[40,91151],{"alt":72,"src":91152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[67,91154,91156],{"className":53099,"code":91155,"language":53101,"meta":72,"style":72},"\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",[74,91157,91158,91168,91182,91186,91194,91208,91228,91240,91248,91252,91260,91272,91280,91289,91296,91301,91320,91329,91340,91345,91355,91360,91365,91370,91387,91391,91396,91403,91415,91419,91431,91435,91439,91444,91449,91456,91464,91472,91476],{"__ignoreMap":72},[77,91159,91160,91162,91164,91166],{"class":79,"line":80},[77,91161,53763],{"class":87},[77,91163,53766],{"class":158},[77,91165,53769],{"class":83},[77,91167,291],{"class":87},[77,91169,91170,91172,91174,91176,91178,91180],{"class":79,"line":91},[77,91171,260],{"class":87},[77,91173,53101],{"class":158},[77,91175,53780],{"class":83},[77,91177,268],{"class":87},[77,91179,53785],{"class":271},[77,91181,291],{"class":87},[77,91183,91184],{"class":79,"line":107},[77,91185,4875],{"emptyLinePlaceholder":2549},[77,91187,91188,91190,91192],{"class":79,"line":191},[77,91189,260],{"class":87},[77,91191,53798],{"class":158},[77,91193,291],{"class":87},[77,91195,91196,91198,91200,91202,91204,91206],{"class":79,"line":1543},[77,91197,54602],{"class":87},[77,91199,53808],{"class":158},[77,91201,53811],{"class":83},[77,91203,268],{"class":87},[77,91205,53816],{"class":271},[77,91207,291],{"class":87},[77,91209,91210,91212,91214,91216,91218,91220,91222,91224,91226],{"class":79,"line":1549},[77,91211,54602],{"class":87},[77,91213,53808],{"class":158},[77,91215,2495],{"class":83},[77,91217,268],{"class":87},[77,91219,53855],{"class":271},[77,91221,53835],{"class":83},[77,91223,268],{"class":87},[77,91225,53862],{"class":271},[77,91227,291],{"class":87},[77,91229,91230,91232,91234,91236,91238],{"class":79,"line":1566},[77,91231,54602],{"class":87},[77,91233,53871],{"class":158},[77,91235,53874],{"class":87},[77,91237,53871],{"class":158},[77,91239,291],{"class":87},[77,91241,91242,91244,91246],{"class":79,"line":1572},[77,91243,351],{"class":87},[77,91245,53798],{"class":158},[77,91247,291],{"class":87},[77,91249,91250],{"class":79,"line":1589},[77,91251,4875],{"emptyLinePlaceholder":2549},[77,91253,91254,91256,91258],{"class":79,"line":1595},[77,91255,260],{"class":87},[77,91257,54258],{"class":158},[77,91259,291],{"class":87},[77,91261,91262,91264,91266,91268,91270],{"class":79,"line":4088},[77,91263,54602],{"class":87},[77,91265,24],{"class":158},[77,91267,55951],{"class":87},[77,91269,24],{"class":158},[77,91271,291],{"class":87},[77,91273,91274,91276,91278],{"class":79,"line":4093},[77,91275,54602],{"class":87},[77,91277,54271],{"class":158},[77,91279,291],{"class":87},[77,91281,91282,91284,91287],{"class":79,"line":4099},[77,91283,72527],{"class":2123},[77,91285,91286],{"class":83}," fn",[77,91288,13326],{"class":87},[77,91290,91291,91294],{"class":79,"line":4104},[77,91292,91293],{"class":2123},"      try",[77,91295,88],{"class":87},[77,91297,91298],{"class":79,"line":4118},[77,91299,91300],{"class":323},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[77,91302,91303,91305,91307,91309,91311,91313,91315,91318],{"class":79,"line":4123},[77,91304,63716],{"class":2123},[77,91306,9300],{"class":94},[77,91308,16036],{"class":2123},[77,91310,56850],{"class":87},[77,91312,56853],{"class":83},[77,91314,2622],{"class":87},[77,91316,91317],{"class":271},"'.p'",[77,91319,2628],{"class":87},[77,91321,91322,91325,91327],{"class":79,"line":4129},[77,91323,91324],{"class":87},"        p.style.color ",[77,91326,268],{"class":2123},[77,91328,69494],{"class":271},[77,91330,91331,91334,91337],{"class":79,"line":4150},[77,91332,91333],{"class":87},"      } ",[77,91335,91336],{"class":2123},"catch",[77,91338,91339],{"class":87}," (err) {\n",[77,91341,91342],{"class":79,"line":4155},[77,91343,91344],{"class":323},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[77,91346,91347,91350,91352],{"class":79,"line":4169},[77,91348,91349],{"class":87},"        console.",[77,91351,60695],{"class":83},[77,91353,91354],{"class":87},"(err.message)\n",[77,91356,91357],{"class":79,"line":4174},[77,91358,91359],{"class":323},"        \u002F\u002F 想要中断程序，需要加return\n",[77,91361,91362],{"class":79,"line":4203},[77,91363,91364],{"class":323},"        \u002F\u002F return\n",[77,91366,91367],{"class":79,"line":4208},[77,91368,91369],{"class":323},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[77,91371,91372,91375,91377,91380,91382,91385],{"class":79,"line":4225},[77,91373,91374],{"class":2123},"        throw",[77,91376,14051],{"class":2123},[77,91378,91379],{"class":83}," Error",[77,91381,2622],{"class":87},[77,91383,91384],{"class":271},"'你看看，选择器错误了吧'",[77,91386,2628],{"class":87},[77,91388,91389],{"class":79,"line":4230},[77,91390,54856],{"class":87},[77,91392,91393],{"class":79,"line":4235},[77,91394,91395],{"class":323},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[77,91397,91398,91401],{"class":79,"line":4240},[77,91399,91400],{"class":2123},"      finally",[77,91402,88],{"class":87},[77,91404,91405,91408,91410,91413],{"class":79,"line":4254},[77,91406,91407],{"class":83},"        alert",[77,91409,2622],{"class":87},[77,91411,91412],{"class":271},"'弹出对话框'",[77,91414,2628],{"class":87},[77,91416,91417],{"class":79,"line":4259},[77,91418,54856],{"class":87},[77,91420,91421,91423,91425,91427,91429],{"class":79,"line":5052},[77,91422,60692],{"class":87},[77,91424,60695],{"class":83},[77,91426,2622],{"class":87},[77,91428,3085],{"class":94},[77,91430,2628],{"class":87},[77,91432,91433],{"class":79,"line":5066},[77,91434,4875],{"emptyLinePlaceholder":2549},[77,91436,91437],{"class":79,"line":5074},[77,91438,4662],{"class":87},[77,91440,91441],{"class":79,"line":5079},[77,91442,91443],{"class":323},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[77,91445,91446],{"class":79,"line":5085},[77,91447,91448],{"class":323},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[77,91450,91451,91454],{"class":79,"line":5091},[77,91452,91453],{"class":83},"    fn",[77,91455,4451],{"class":87},[77,91457,91458,91460,91462],{"class":79,"line":5096},[77,91459,54875],{"class":87},[77,91461,54271],{"class":158},[77,91463,291],{"class":87},[77,91465,91466,91468,91470],{"class":79,"line":10422},[77,91467,351],{"class":87},[77,91469,54258],{"class":158},[77,91471,291],{"class":87},[77,91473,91474],{"class":79,"line":10446},[77,91475,4875],{"emptyLinePlaceholder":2549},[77,91477,91478,91480,91482],{"class":79,"line":10451},[77,91479,351],{"class":87},[77,91481,53101],{"class":158},[77,91483,291],{"class":87},[24,91485,91486],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[139,91488,91489],{"start":107},[54,91490,91491],{},"debugger",[24,91493,91494],{},[40,91495],{"alt":72,"src":91496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[24,91498,91499],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91501,91503],{"id":91502},"_416-处理this","4.16 处理this",[19,91505,91507],{"id":91506},"_4161-this的指向","4.16.1 this的指向",[139,91509,91510],{},[54,91511,91512],{},"普通函数的this",[24,91514,91515],{},[40,91516],{"alt":72,"src":91517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[139,91519,91520],{"start":91},[54,91521,91522],{},"箭头函数的this",[24,91524,91525],{},[40,91526],{"alt":72,"src":91527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[24,91529,91530],{},[40,91531],{"alt":72,"src":91532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[24,91534,91535],{},[40,91536],{"alt":72,"src":91537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[19,91539,91541],{"id":91540},"_4162-this的改变","4.16.2 this的改变",[24,91543,91544],{},"call() apply() bind()",[139,91546,91547],{},[54,91548,91549],{},"call()",[24,91551,91552],{},[40,91553],{"alt":72,"src":91554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[24,91556,91557],{},"两个作用：①调用函数；②改变this指向",[67,91559,91561],{"className":55525,"code":91560,"language":55527,"meta":72,"style":72},"\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",[74,91562,91563,91571,91579,91583,91588,91592,91597,91602,91607,91611,91616,91624],{"__ignoreMap":72},[77,91564,91565,91567,91569],{"class":79,"line":80},[77,91566,260],{"class":87},[77,91568,54258],{"class":158},[77,91570,291],{"class":87},[77,91572,91573,91575,91577],{"class":79,"line":91},[77,91574,54602],{"class":87},[77,91576,54271],{"class":158},[77,91578,291],{"class":87},[77,91580,91581],{"class":79,"line":107},[77,91582,73962],{"class":87},[77,91584,91585],{"class":79,"line":191},[77,91586,91587],{"class":87},"      uname: 'pink'\n",[77,91589,91590],{"class":79,"line":1543},[77,91591,4662],{"class":87},[77,91593,91594],{"class":79,"line":1549},[77,91595,91596],{"class":87},"    function fn(x, y) {\n",[77,91598,91599],{"class":79,"line":1566},[77,91600,91601],{"class":87},"      console.log(this)  \u002F\u002Fwindow\n",[77,91603,91604],{"class":79,"line":1572},[77,91605,91606],{"class":87},"      console.log(x + y)\n",[77,91608,91609],{"class":79,"line":1589},[77,91610,4662],{"class":87},[77,91612,91613],{"class":79,"line":1595},[77,91614,91615],{"class":87},"    fn.call(obj, 1, 2)\n",[77,91617,91618,91620,91622],{"class":79,"line":4088},[77,91619,54875],{"class":87},[77,91621,54271],{"class":158},[77,91623,291],{"class":87},[77,91625,91626,91628,91630],{"class":79,"line":4093},[77,91627,351],{"class":87},[77,91629,54258],{"class":158},[77,91631,291],{"class":87},[24,91633,91634],{},[40,91635],{"alt":72,"src":91636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[139,91638,91639],{"start":91},[54,91640,91641],{},"apply()",[24,91643,91644],{},[40,91645],{"alt":72,"src":91646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[24,91648,91557],{},[24,91650,91651],{},"call传递的是普通参数，而apply必须传递的是数组",[67,91653,91655],{"className":53099,"code":91654,"language":53101,"meta":72,"style":72},"\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",[74,91656,91657,91667,91681,91685,91693,91707,91727,91739,91747,91751,91759,91767,91777,91784,91788,91793,91809,91821,91835,91839,91844,91863,91868,91872,91877,91882,91890,91895,91917,91922,91938,91954,91966,91970,91975,91994,92002,92010,92014],{"__ignoreMap":72},[77,91658,91659,91661,91663,91665],{"class":79,"line":80},[77,91660,53763],{"class":87},[77,91662,53766],{"class":158},[77,91664,53769],{"class":83},[77,91666,291],{"class":87},[77,91668,91669,91671,91673,91675,91677,91679],{"class":79,"line":91},[77,91670,260],{"class":87},[77,91672,53101],{"class":158},[77,91674,53780],{"class":83},[77,91676,268],{"class":87},[77,91678,53785],{"class":271},[77,91680,291],{"class":87},[77,91682,91683],{"class":79,"line":107},[77,91684,4875],{"emptyLinePlaceholder":2549},[77,91686,91687,91689,91691],{"class":79,"line":191},[77,91688,260],{"class":87},[77,91690,53798],{"class":158},[77,91692,291],{"class":87},[77,91694,91695,91697,91699,91701,91703,91705],{"class":79,"line":1543},[77,91696,54602],{"class":87},[77,91698,53808],{"class":158},[77,91700,53811],{"class":83},[77,91702,268],{"class":87},[77,91704,53816],{"class":271},[77,91706,291],{"class":87},[77,91708,91709,91711,91713,91715,91717,91719,91721,91723,91725],{"class":79,"line":1549},[77,91710,54602],{"class":87},[77,91712,53808],{"class":158},[77,91714,2495],{"class":83},[77,91716,268],{"class":87},[77,91718,53855],{"class":271},[77,91720,53835],{"class":83},[77,91722,268],{"class":87},[77,91724,53862],{"class":271},[77,91726,291],{"class":87},[77,91728,91729,91731,91733,91735,91737],{"class":79,"line":1566},[77,91730,54602],{"class":87},[77,91732,53871],{"class":158},[77,91734,53874],{"class":87},[77,91736,53871],{"class":158},[77,91738,291],{"class":87},[77,91740,91741,91743,91745],{"class":79,"line":1572},[77,91742,351],{"class":87},[77,91744,53798],{"class":158},[77,91746,291],{"class":87},[77,91748,91749],{"class":79,"line":1589},[77,91750,4875],{"emptyLinePlaceholder":2549},[77,91752,91753,91755,91757],{"class":79,"line":1595},[77,91754,260],{"class":87},[77,91756,54258],{"class":158},[77,91758,291],{"class":87},[77,91760,91761,91763,91765],{"class":79,"line":4088},[77,91762,54602],{"class":87},[77,91764,54271],{"class":158},[77,91766,291],{"class":87},[77,91768,91769,91771,91773,91775],{"class":79,"line":4093},[77,91770,13694],{"class":2123},[77,91772,72414],{"class":94},[77,91774,16036],{"class":2123},[77,91776,88],{"class":87},[77,91778,91779,91781],{"class":79,"line":4099},[77,91780,74065],{"class":87},[77,91782,91783],{"class":94},"18\n",[77,91785,91786],{"class":79,"line":4104},[77,91787,4662],{"class":87},[77,91789,91790],{"class":79,"line":4118},[77,91791,91792],{"class":323},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[77,91794,91795,91797,91799,91801,91803,91805,91807],{"class":79,"line":4123},[77,91796,72527],{"class":2123},[77,91798,91286],{"class":83},[77,91800,2622],{"class":87},[77,91802,3433],{"class":7691},[77,91804,680],{"class":87},[77,91806,3458],{"class":7691},[77,91808,14914],{"class":87},[77,91810,91811,91813,91815,91817,91819],{"class":79,"line":4129},[77,91812,60692],{"class":87},[77,91814,60695],{"class":83},[77,91816,2622],{"class":87},[77,91818,89429],{"class":94},[77,91820,2628],{"class":87},[77,91822,91823,91825,91827,91830,91832],{"class":79,"line":4150},[77,91824,60692],{"class":87},[77,91826,60695],{"class":83},[77,91828,91829],{"class":87},"(x ",[77,91831,3094],{"class":2123},[77,91833,91834],{"class":87}," y)\n",[77,91836,91837],{"class":79,"line":4155},[77,91838,4662],{"class":87},[77,91840,91841],{"class":79,"line":4169},[77,91842,91843],{"class":323},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[77,91845,91846,91849,91852,91855,91857,91859,91861],{"class":79,"line":4174},[77,91847,91848],{"class":87},"    fn.",[77,91850,91851],{"class":83},"apply",[77,91853,91854],{"class":87},"(obj, [",[77,91856,2120],{"class":94},[77,91858,680],{"class":87},[77,91860,2696],{"class":94},[77,91862,7132],{"class":87},[77,91864,91865],{"class":79,"line":4203},[77,91866,91867],{"class":323},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[77,91869,91870],{"class":79,"line":4208},[77,91871,4875],{"emptyLinePlaceholder":2549},[77,91873,91874],{"class":79,"line":4225},[77,91875,91876],{"class":323},"    \u002F\u002F 使用场景：求数组最大值\n",[77,91878,91879],{"class":79,"line":4230},[77,91880,91881],{"class":323},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[77,91883,91884,91887],{"class":79,"line":4235},[77,91885,91886],{"class":323},"    \u002F\u002F console.log(max)",[77,91888,91889],{"class":323},"   \u002F\u002F3\n",[77,91891,91892],{"class":79,"line":4240},[77,91893,91894],{"class":323},"    \u002F\u002F 指向空或者Math都是可以的\n",[77,91896,91897,91899,91901,91903,91905,91907,91909,91911,91913,91915],{"class":79,"line":4254},[77,91898,13694],{"class":2123},[77,91900,60143],{"class":94},[77,91902,16036],{"class":2123},[77,91904,54684],{"class":87},[77,91906,2925],{"class":94},[77,91908,680],{"class":87},[77,91910,3117],{"class":94},[77,91912,680],{"class":87},[77,91914,3148],{"class":94},[77,91916,35713],{"class":87},[77,91918,91919],{"class":79,"line":4259},[77,91920,91921],{"class":323},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[77,91923,91924,91926,91928,91930,91933,91935],{"class":79,"line":5052},[77,91925,13694],{"class":2123},[77,91927,8426],{"class":94},[77,91929,16036],{"class":2123},[77,91931,91932],{"class":87}," Math.max.",[77,91934,91851],{"class":83},[77,91936,91937],{"class":87},"(Math, arr)\n",[77,91939,91940,91942,91945,91947,91950,91952],{"class":79,"line":5066},[77,91941,13694],{"class":2123},[77,91943,91944],{"class":94}," min",[77,91946,16036],{"class":2123},[77,91948,91949],{"class":87}," Math.min.",[77,91951,91851],{"class":83},[77,91953,91937],{"class":87},[77,91955,91956,91958,91960,91963],{"class":79,"line":5074},[77,91957,76192],{"class":87},[77,91959,60695],{"class":83},[77,91961,91962],{"class":87},"(max, min)     ",[77,91964,91965],{"class":323},"\u002F\u002F100,4\n",[77,91967,91968],{"class":79,"line":5079},[77,91969,4875],{"emptyLinePlaceholder":2549},[77,91971,91972],{"class":79,"line":5085},[77,91973,91974],{"class":323},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[77,91976,91977,91979,91981,91984,91986,91988,91991],{"class":79,"line":5091},[77,91978,76192],{"class":87},[77,91980,60695],{"class":83},[77,91982,91983],{"class":87},"(Max.",[77,91985,8490],{"class":83},[77,91987,2622],{"class":87},[77,91989,91990],{"class":2123},"...",[77,91992,91993],{"class":87},"arr))\n",[77,91995,91996,91998,92000],{"class":79,"line":5096},[77,91997,54875],{"class":87},[77,91999,54271],{"class":158},[77,92001,291],{"class":87},[77,92003,92004,92006,92008],{"class":79,"line":10422},[77,92005,351],{"class":87},[77,92007,54258],{"class":158},[77,92009,291],{"class":87},[77,92011,92012],{"class":79,"line":10446},[77,92013,4875],{"emptyLinePlaceholder":2549},[77,92015,92016,92018,92020],{"class":79,"line":10451},[77,92017,351],{"class":87},[77,92019,53101],{"class":158},[77,92021,291],{"class":87},[24,92023,92024],{},[40,92025],{"alt":72,"src":92026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[139,92028,92029],{"start":107},[54,92030,92031],{},"bind()",[24,92033,92034],{},[40,92035],{"alt":72,"src":92036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[24,92038,92039],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[24,92041,92042],{},"bind的语法跟call很相似",[67,92044,92046],{"className":55525,"code":92045,"language":55527,"meta":72,"style":72},"\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",[74,92047,92048,92056,92064,92068,92073,92077,92081,92086,92090,92095,92100,92105,92110,92115,92120,92125,92129,92137],{"__ignoreMap":72},[77,92049,92050,92052,92054],{"class":79,"line":80},[77,92051,260],{"class":87},[77,92053,54258],{"class":158},[77,92055,291],{"class":87},[77,92057,92058,92060,92062],{"class":79,"line":91},[77,92059,54602],{"class":87},[77,92061,54271],{"class":158},[77,92063,291],{"class":87},[77,92065,92066],{"class":79,"line":107},[77,92067,73962],{"class":87},[77,92069,92070],{"class":79,"line":191},[77,92071,92072],{"class":87},"      age: 18\n",[77,92074,92075],{"class":79,"line":1543},[77,92076,4662],{"class":87},[77,92078,92079],{"class":79,"line":1549},[77,92080,79581],{"class":87},[77,92082,92083],{"class":79,"line":1566},[77,92084,92085],{"class":87},"      console.log(this)\n",[77,92087,92088],{"class":79,"line":1572},[77,92089,4662],{"class":87},[77,92091,92092],{"class":79,"line":1589},[77,92093,92094],{"class":87},"    \u002F\u002F 1.bind 不会调用函数\n",[77,92096,92097],{"class":79,"line":1595},[77,92098,92099],{"class":87},"    \u002F\u002F 2.bind能改变this的指向\n",[77,92101,92102],{"class":79,"line":4088},[77,92103,92104],{"class":87},"    fn.bind()\n",[77,92106,92107],{"class":79,"line":4093},[77,92108,92109],{"class":87},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[77,92111,92112],{"class":79,"line":4099},[77,92113,92114],{"class":87},"    const fun = fn.bind(obj)\n",[77,92116,92117],{"class":79,"line":4104},[77,92118,92119],{"class":87},"    \u002F\u002F console.log(fun)\n",[77,92121,92122],{"class":79,"line":4118},[77,92123,92124],{"class":87},"    \u002F\u002F 调用,查看this的指向\n",[77,92126,92127],{"class":79,"line":4123},[77,92128,55109],{"class":87},[77,92130,92131,92133,92135],{"class":79,"line":4129},[77,92132,54875],{"class":87},[77,92134,54271],{"class":158},[77,92136,291],{"class":87},[77,92138,92139,92141,92143],{"class":79,"line":4150},[77,92140,351],{"class":87},[77,92142,54258],{"class":158},[77,92144,291],{"class":87},[24,92146,92147],{},[40,92148],{"alt":72,"src":92149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[139,92151,92152],{"start":191},[54,92153,92154],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[67,92156,92158],{"className":55525,"code":92157,"language":55527,"meta":72,"style":72},"\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",[74,92159,92160,92168,92181,92189,92194,92198,92203,92208,92213,92218,92223,92228,92233,92238,92242,92250],{"__ignoreMap":72},[77,92161,92162,92164,92166],{"class":79,"line":80},[77,92163,260],{"class":87},[77,92165,54258],{"class":158},[77,92167,291],{"class":87},[77,92169,92170,92172,92174,92177,92179],{"class":79,"line":91},[77,92171,54602],{"class":87},[77,92173,56341],{"class":158},[77,92175,92176],{"class":87},">禁用\u003C\u002F",[77,92178,56341],{"class":158},[77,92180,291],{"class":87},[77,92182,92183,92185,92187],{"class":79,"line":107},[77,92184,54602],{"class":87},[77,92186,54271],{"class":158},[77,92188,291],{"class":87},[77,92190,92191],{"class":79,"line":191},[77,92192,92193],{"class":87},"    const btn = document.querySelector('button')\n",[77,92195,92196],{"class":79,"line":1543},[77,92197,61464],{"class":87},[77,92199,92200],{"class":79,"line":1549},[77,92201,92202],{"class":87},"      this.disabled = true\n",[77,92204,92205],{"class":79,"line":1566},[77,92206,92207],{"class":87},"      \u002F\u002F 定时器是window进行调用的\n",[77,92209,92210],{"class":79,"line":1572},[77,92211,92212],{"class":87},"      setTimeout(function () {\n",[77,92214,92215],{"class":79,"line":1589},[77,92216,92217],{"class":87},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[77,92219,92220],{"class":79,"line":1595},[77,92221,92222],{"class":87},"        this.disabled = false\n",[77,92224,92225],{"class":79,"line":4088},[77,92226,92227],{"class":87},"      }.bind(this), 2000)\n",[77,92229,92230],{"class":79,"line":4093},[77,92231,92232],{"class":87},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[77,92234,92235],{"class":79,"line":4099},[77,92236,92237],{"class":87},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[77,92239,92240],{"class":79,"line":4104},[77,92241,35928],{"class":87},[77,92243,92244,92246,92248],{"class":79,"line":4118},[77,92245,54875],{"class":87},[77,92247,54271],{"class":158},[77,92249,291],{"class":87},[77,92251,92252,92254,92256],{"class":79,"line":4123},[77,92253,351],{"class":87},[77,92255,54258],{"class":158},[77,92257,291],{"class":87},[139,92259,92260],{"start":1543},[54,92261,24423],{},[24,92263,92264],{},[40,92265],{"alt":72,"src":92266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92268,92270],{"id":92269},"_417-性能优化","4.17 性能优化",[19,92272,92274],{"id":92273},"_4171-防抖","4.17.1 防抖",[24,92276,92277],{},[40,92278],{"alt":72,"src":92279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[24,92281,92282],{},[27,92283,92284],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[24,92286,92287],{},"防抖实现方式：",[51,92289,92290],{},[54,92291,92292],{},"lodash 提供了防抖处理",[24,92294,92295],{},"_.debounce(func,[wait=0],[options={}])",[24,92297,92298],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[67,92300,92302],{"className":53099,"code":92301,"language":53101,"meta":72,"style":72},"\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",[74,92303,92304,92314,92328,92332,92340,92354,92374,92386,92394,92400,92410,92422,92434,92445,92457,92467,92477,92490,92494,92502,92510,92514,92522,92540,92558,92566,92585,92595,92604,92615,92620,92624,92629,92634,92639,92664,92672,92680,92684],{"__ignoreMap":72},[77,92305,92306,92308,92310,92312],{"class":79,"line":80},[77,92307,53763],{"class":87},[77,92309,53766],{"class":158},[77,92311,53769],{"class":83},[77,92313,291],{"class":87},[77,92315,92316,92318,92320,92322,92324,92326],{"class":79,"line":91},[77,92317,260],{"class":87},[77,92319,53101],{"class":158},[77,92321,53780],{"class":83},[77,92323,268],{"class":87},[77,92325,53785],{"class":271},[77,92327,291],{"class":87},[77,92329,92330],{"class":79,"line":107},[77,92331,4875],{"emptyLinePlaceholder":2549},[77,92333,92334,92336,92338],{"class":79,"line":191},[77,92335,260],{"class":87},[77,92337,53798],{"class":158},[77,92339,291],{"class":87},[77,92341,92342,92344,92346,92348,92350,92352],{"class":79,"line":1543},[77,92343,54602],{"class":87},[77,92345,53808],{"class":158},[77,92347,53811],{"class":83},[77,92349,268],{"class":87},[77,92351,53816],{"class":271},[77,92353,291],{"class":87},[77,92355,92356,92358,92360,92362,92364,92366,92368,92370,92372],{"class":79,"line":1549},[77,92357,54602],{"class":87},[77,92359,53808],{"class":158},[77,92361,2495],{"class":83},[77,92363,268],{"class":87},[77,92365,53855],{"class":271},[77,92367,53835],{"class":83},[77,92369,268],{"class":87},[77,92371,53862],{"class":271},[77,92373,291],{"class":87},[77,92375,92376,92378,92380,92382,92384],{"class":79,"line":1566},[77,92377,54602],{"class":87},[77,92379,53871],{"class":158},[77,92381,53874],{"class":87},[77,92383,53871],{"class":158},[77,92385,291],{"class":87},[77,92387,92388,92390,92392],{"class":79,"line":1572},[77,92389,54602],{"class":87},[77,92391,2520],{"class":158},[77,92393,291],{"class":87},[77,92395,92396,92398],{"class":79,"line":1589},[77,92397,57205],{"class":83},[77,92399,88],{"class":87},[77,92401,92402,92404,92406,92408],{"class":79,"line":1595},[77,92403,75035],{"class":94},[77,92405,98],{"class":87},[77,92407,62953],{"class":94},[77,92409,104],{"class":87},[77,92411,92412,92414,92416,92418,92420],{"class":79,"line":4088},[77,92413,57223],{"class":94},[77,92415,98],{"class":87},[77,92417,4198],{"class":94},[77,92419,2124],{"class":2123},[77,92421,104],{"class":87},[77,92423,92424,92426,92428,92430,92432],{"class":79,"line":4093},[77,92425,57237],{"class":94},[77,92427,98],{"class":87},[77,92429,4198],{"class":94},[77,92431,2124],{"class":2123},[77,92433,104],{"class":87},[77,92435,92436,92438,92440,92443],{"class":79,"line":4099},[77,92437,57335],{"class":94},[77,92439,98],{"class":87},[77,92441,92442],{"class":94},"gray",[77,92444,104],{"class":87},[77,92446,92447,92449,92451,92453,92455],{"class":79,"line":4104},[77,92448,57372],{"class":94},[77,92450,98],{"class":87},[77,92452,3438],{"class":94},[77,92454,2124],{"class":2123},[77,92456,104],{"class":87},[77,92458,92459,92461,92463,92465],{"class":79,"line":4118},[77,92460,59864],{"class":94},[77,92462,98],{"class":87},[77,92464,63290],{"class":94},[77,92466,104],{"class":87},[77,92468,92469,92471,92473,92475],{"class":79,"line":4123},[77,92470,59734],{"class":94},[77,92472,98],{"class":87},[77,92474,54052],{"class":94},[77,92476,104],{"class":87},[77,92478,92479,92482,92484,92486,92488],{"class":79,"line":4129},[77,92480,92481],{"class":94},"      padding-top",[77,92483,98],{"class":87},[77,92485,2933],{"class":94},[77,92487,2124],{"class":2123},[77,92489,104],{"class":87},[77,92491,92492],{"class":79,"line":4150},[77,92493,4662],{"class":87},[77,92495,92496,92498,92500],{"class":79,"line":4155},[77,92497,54875],{"class":87},[77,92499,2520],{"class":158},[77,92501,291],{"class":87},[77,92503,92504,92506,92508],{"class":79,"line":4169},[77,92505,351],{"class":87},[77,92507,53798],{"class":158},[77,92509,291],{"class":87},[77,92511,92512],{"class":79,"line":4174},[77,92513,4875],{"emptyLinePlaceholder":2549},[77,92515,92516,92518,92520],{"class":79,"line":4203},[77,92517,260],{"class":87},[77,92519,54258],{"class":158},[77,92521,291],{"class":87},[77,92523,92524,92526,92528,92530,92532,92534,92536,92538],{"class":79,"line":4208},[77,92525,54602],{"class":87},[77,92527,331],{"class":158},[77,92529,334],{"class":83},[77,92531,268],{"class":87},[77,92533,55948],{"class":271},[77,92535,57762],{"class":87},[77,92537,331],{"class":158},[77,92539,291],{"class":87},[77,92541,92542,92544,92546,92548,92550,92552,92554,92556],{"class":79,"line":4225},[77,92543,54602],{"class":87},[77,92545,54271],{"class":158},[77,92547,265],{"class":83},[77,92549,268],{"class":87},[77,92551,90710],{"class":271},[77,92553,57762],{"class":87},[77,92555,54271],{"class":158},[77,92557,291],{"class":87},[77,92559,92560,92562,92564],{"class":79,"line":4230},[77,92561,54602],{"class":87},[77,92563,54271],{"class":158},[77,92565,291],{"class":87},[77,92567,92568,92570,92572,92574,92576,92578,92580,92583],{"class":79,"line":4235},[77,92569,13694],{"class":2123},[77,92571,89369],{"class":94},[77,92573,16036],{"class":2123},[77,92575,56850],{"class":87},[77,92577,56853],{"class":83},[77,92579,2622],{"class":87},[77,92581,92582],{"class":271},"'.box'",[77,92584,2628],{"class":87},[77,92586,92587,92589,92591,92593],{"class":79,"line":4240},[77,92588,54677],{"class":2123},[77,92590,11911],{"class":87},[77,92592,268],{"class":2123},[77,92594,49799],{"class":94},[77,92596,92597,92599,92602],{"class":79,"line":4254},[77,92598,72527],{"class":2123},[77,92600,92601],{"class":83}," mouseMove",[77,92603,13326],{"class":87},[77,92605,92606,92609,92611,92613],{"class":79,"line":4259},[77,92607,92608],{"class":87},"      box.innerHTML ",[77,92610,268],{"class":2123},[77,92612,5507],{"class":87},[77,92614,5177],{"class":2123},[77,92616,92617],{"class":79,"line":5052},[77,92618,92619],{"class":323},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[77,92621,92622],{"class":79,"line":5066},[77,92623,4662],{"class":87},[77,92625,92626],{"class":79,"line":5074},[77,92627,92628],{"class":323},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[77,92630,92631],{"class":79,"line":5079},[77,92632,92633],{"class":323},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[77,92635,92636],{"class":79,"line":5085},[77,92637,92638],{"class":323},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[77,92640,92641,92644,92646,92648,92651,92654,92657,92660,92662],{"class":79,"line":5091},[77,92642,92643],{"class":87},"    box.",[77,92645,60261],{"class":83},[77,92647,2622],{"class":87},[77,92649,92650],{"class":271},"'mousemove'",[77,92652,92653],{"class":87},", _.",[77,92655,92656],{"class":83},"debounce",[77,92658,92659],{"class":87},"(mouseMove, ",[77,92661,67517],{"class":94},[77,92663,32965],{"class":87},[77,92665,92666,92668,92670],{"class":79,"line":5096},[77,92667,54875],{"class":87},[77,92669,54271],{"class":158},[77,92671,291],{"class":87},[77,92673,92674,92676,92678],{"class":79,"line":10422},[77,92675,351],{"class":87},[77,92677,54258],{"class":158},[77,92679,291],{"class":87},[77,92681,92682],{"class":79,"line":10446},[77,92683,4875],{"emptyLinePlaceholder":2549},[77,92685,92686,92688,92690],{"class":79,"line":10451},[77,92687,351],{"class":87},[77,92689,53101],{"class":158},[77,92691,291],{"class":87},[51,92693,92694],{},[54,92695,92696],{},"手写一个防抖函数来处理",[24,92698,92699],{},"防抖的核心就是利用定时器来实现的：",[24,92701,92702],{},"①声明一个定时器变量",[24,92704,92705],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[24,92707,92708],{},"③如果没有定时器则开启定时器，记得存到变量里面",[67,92710,92712],{"className":53099,"code":92711,"language":53101,"meta":72,"style":72},"\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",[74,92713,92714,92724,92738,92742,92750,92764,92784,92796,92804,92810,92820,92832,92844,92854,92866,92876,92886,92898,92902,92910,92918,92922,92930,92948,92966,92974,92992,93002,93010,93020,93024,93028,93032,93037,93042,93047,93052,93057,93062,93080,93087,93092,93100,93105,93118,93134,93144,93149,93153,93157,93177,93181,93186,93191,93196,93201,93209,93217,93221],{"__ignoreMap":72},[77,92715,92716,92718,92720,92722],{"class":79,"line":80},[77,92717,53763],{"class":87},[77,92719,53766],{"class":158},[77,92721,53769],{"class":83},[77,92723,291],{"class":87},[77,92725,92726,92728,92730,92732,92734,92736],{"class":79,"line":91},[77,92727,260],{"class":87},[77,92729,53101],{"class":158},[77,92731,53780],{"class":83},[77,92733,268],{"class":87},[77,92735,53785],{"class":271},[77,92737,291],{"class":87},[77,92739,92740],{"class":79,"line":107},[77,92741,4875],{"emptyLinePlaceholder":2549},[77,92743,92744,92746,92748],{"class":79,"line":191},[77,92745,260],{"class":87},[77,92747,53798],{"class":158},[77,92749,291],{"class":87},[77,92751,92752,92754,92756,92758,92760,92762],{"class":79,"line":1543},[77,92753,54602],{"class":87},[77,92755,53808],{"class":158},[77,92757,53811],{"class":83},[77,92759,268],{"class":87},[77,92761,53816],{"class":271},[77,92763,291],{"class":87},[77,92765,92766,92768,92770,92772,92774,92776,92778,92780,92782],{"class":79,"line":1549},[77,92767,54602],{"class":87},[77,92769,53808],{"class":158},[77,92771,2495],{"class":83},[77,92773,268],{"class":87},[77,92775,53855],{"class":271},[77,92777,53835],{"class":83},[77,92779,268],{"class":87},[77,92781,53862],{"class":271},[77,92783,291],{"class":87},[77,92785,92786,92788,92790,92792,92794],{"class":79,"line":1566},[77,92787,54602],{"class":87},[77,92789,53871],{"class":158},[77,92791,53874],{"class":87},[77,92793,53871],{"class":158},[77,92795,291],{"class":87},[77,92797,92798,92800,92802],{"class":79,"line":1572},[77,92799,54602],{"class":87},[77,92801,2520],{"class":158},[77,92803,291],{"class":87},[77,92805,92806,92808],{"class":79,"line":1589},[77,92807,57205],{"class":83},[77,92809,88],{"class":87},[77,92811,92812,92814,92816,92818],{"class":79,"line":1595},[77,92813,75035],{"class":94},[77,92815,98],{"class":87},[77,92817,62953],{"class":94},[77,92819,104],{"class":87},[77,92821,92822,92824,92826,92828,92830],{"class":79,"line":4088},[77,92823,57223],{"class":94},[77,92825,98],{"class":87},[77,92827,4198],{"class":94},[77,92829,2124],{"class":2123},[77,92831,104],{"class":87},[77,92833,92834,92836,92838,92840,92842],{"class":79,"line":4093},[77,92835,57237],{"class":94},[77,92837,98],{"class":87},[77,92839,4198],{"class":94},[77,92841,2124],{"class":2123},[77,92843,104],{"class":87},[77,92845,92846,92848,92850,92852],{"class":79,"line":4099},[77,92847,57335],{"class":94},[77,92849,98],{"class":87},[77,92851,92442],{"class":94},[77,92853,104],{"class":87},[77,92855,92856,92858,92860,92862,92864],{"class":79,"line":4104},[77,92857,57372],{"class":94},[77,92859,98],{"class":87},[77,92861,3438],{"class":94},[77,92863,2124],{"class":2123},[77,92865,104],{"class":87},[77,92867,92868,92870,92872,92874],{"class":79,"line":4118},[77,92869,59864],{"class":94},[77,92871,98],{"class":87},[77,92873,63290],{"class":94},[77,92875,104],{"class":87},[77,92877,92878,92880,92882,92884],{"class":79,"line":4123},[77,92879,59734],{"class":94},[77,92881,98],{"class":87},[77,92883,54052],{"class":94},[77,92885,104],{"class":87},[77,92887,92888,92890,92892,92894,92896],{"class":79,"line":4129},[77,92889,92481],{"class":94},[77,92891,98],{"class":87},[77,92893,2933],{"class":94},[77,92895,2124],{"class":2123},[77,92897,104],{"class":87},[77,92899,92900],{"class":79,"line":4150},[77,92901,4662],{"class":87},[77,92903,92904,92906,92908],{"class":79,"line":4155},[77,92905,54875],{"class":87},[77,92907,2520],{"class":158},[77,92909,291],{"class":87},[77,92911,92912,92914,92916],{"class":79,"line":4169},[77,92913,351],{"class":87},[77,92915,53798],{"class":158},[77,92917,291],{"class":87},[77,92919,92920],{"class":79,"line":4174},[77,92921,4875],{"emptyLinePlaceholder":2549},[77,92923,92924,92926,92928],{"class":79,"line":4203},[77,92925,260],{"class":87},[77,92927,54258],{"class":158},[77,92929,291],{"class":87},[77,92931,92932,92934,92936,92938,92940,92942,92944,92946],{"class":79,"line":4208},[77,92933,54602],{"class":87},[77,92935,331],{"class":158},[77,92937,334],{"class":83},[77,92939,268],{"class":87},[77,92941,55948],{"class":271},[77,92943,57762],{"class":87},[77,92945,331],{"class":158},[77,92947,291],{"class":87},[77,92949,92950,92952,92954,92956,92958,92960,92962,92964],{"class":79,"line":4225},[77,92951,54602],{"class":87},[77,92953,54271],{"class":158},[77,92955,265],{"class":83},[77,92957,268],{"class":87},[77,92959,90710],{"class":271},[77,92961,57762],{"class":87},[77,92963,54271],{"class":158},[77,92965,291],{"class":87},[77,92967,92968,92970,92972],{"class":79,"line":4230},[77,92969,54602],{"class":87},[77,92971,54271],{"class":158},[77,92973,291],{"class":87},[77,92975,92976,92978,92980,92982,92984,92986,92988,92990],{"class":79,"line":4235},[77,92977,13694],{"class":2123},[77,92979,89369],{"class":94},[77,92981,16036],{"class":2123},[77,92983,56850],{"class":87},[77,92985,56853],{"class":83},[77,92987,2622],{"class":87},[77,92989,92582],{"class":271},[77,92991,2628],{"class":87},[77,92993,92994,92996,92998,93000],{"class":79,"line":4240},[77,92995,54677],{"class":2123},[77,92997,11911],{"class":87},[77,92999,268],{"class":2123},[77,93001,49799],{"class":94},[77,93003,93004,93006,93008],{"class":79,"line":4254},[77,93005,72527],{"class":2123},[77,93007,92601],{"class":83},[77,93009,13326],{"class":87},[77,93011,93012,93014,93016,93018],{"class":79,"line":4259},[77,93013,92608],{"class":87},[77,93015,268],{"class":2123},[77,93017,5507],{"class":87},[77,93019,5177],{"class":2123},[77,93021,93022],{"class":79,"line":5052},[77,93023,92619],{"class":323},[77,93025,93026],{"class":79,"line":5066},[77,93027,4662],{"class":87},[77,93029,93030],{"class":79,"line":5074},[77,93031,92628],{"class":323},[77,93033,93034],{"class":79,"line":5079},[77,93035,93036],{"class":323},"    \u002F\u002F 手写防抖函数\n",[77,93038,93039],{"class":79,"line":5085},[77,93040,93041],{"class":323},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[77,93043,93044],{"class":79,"line":5091},[77,93045,93046],{"class":323},"    \u002F\u002F 1.声明定时器变量\n",[77,93048,93049],{"class":79,"line":5096},[77,93050,93051],{"class":323},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[77,93053,93054],{"class":79,"line":10422},[77,93055,93056],{"class":323},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[77,93058,93059],{"class":79,"line":10446},[77,93060,93061],{"class":323},"    \u002F\u002F 4.定时器里面写函数调用\n",[77,93063,93064,93066,93069,93071,93074,93076,93078],{"class":79,"line":10451},[77,93065,72527],{"class":2123},[77,93067,93068],{"class":83}," debounce",[77,93070,2622],{"class":87},[77,93072,93073],{"class":7691},"fn",[77,93075,680],{"class":87},[77,93077,3333],{"class":7691},[77,93079,14914],{"class":87},[77,93081,93082,93084],{"class":79,"line":10457},[77,93083,82210],{"class":2123},[77,93085,93086],{"class":87}," timer\n",[77,93088,93089],{"class":79,"line":10484},[77,93090,93091],{"class":323},"      \u002F\u002F return 返回一个匿名函数\n",[77,93093,93094,93096,93098],{"class":79,"line":10489},[77,93095,76421],{"class":2123},[77,93097,61366],{"class":2123},[77,93099,56906],{"class":87},[77,93101,93102],{"class":79,"line":10495},[77,93103,93104],{"class":323},"        \u002F\u002F 这里边写第二三四步\n",[77,93106,93107,93109,93112,93115],{"class":79,"line":10507},[77,93108,4972],{"class":2123},[77,93110,93111],{"class":87}," (timer) ",[77,93113,93114],{"class":83},"clearTimeout",[77,93116,93117],{"class":87},"(timer)\n",[77,93119,93120,93123,93125,93128,93130,93132],{"class":79,"line":10519},[77,93121,93122],{"class":87},"        timer ",[77,93124,268],{"class":2123},[77,93126,93127],{"class":83}," setTimeout",[77,93129,2622],{"class":87},[77,93131,56903],{"class":2123},[77,93133,56906],{"class":87},[77,93135,93136,93139,93141],{"class":79,"line":10531},[77,93137,93138],{"class":83},"          fn",[77,93140,15522],{"class":87},[77,93142,93143],{"class":323},"\u002F\u002F加小括号调用fn }, t)\n",[77,93145,93146],{"class":79,"line":12189},[77,93147,93148],{"class":87},"        }, t)\n",[77,93150,93151],{"class":79,"line":12214},[77,93152,54856],{"class":87},[77,93154,93155],{"class":79,"line":12237},[77,93156,4662],{"class":87},[77,93158,93159,93161,93163,93165,93167,93169,93171,93173,93175],{"class":79,"line":12261},[77,93160,92643],{"class":87},[77,93162,60261],{"class":83},[77,93164,2622],{"class":87},[77,93166,92650],{"class":271},[77,93168,680],{"class":87},[77,93170,92656],{"class":83},[77,93172,92659],{"class":87},[77,93174,67517],{"class":94},[77,93176,32965],{"class":87},[77,93178,93179],{"class":79,"line":12266},[77,93180,4875],{"emptyLinePlaceholder":2549},[77,93182,93183],{"class":79,"line":12271},[77,93184,93185],{"class":323},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[77,93187,93188],{"class":79,"line":12276},[77,93189,93190],{"class":323},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[77,93192,93193],{"class":79,"line":12285},[77,93194,93195],{"class":323},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[77,93197,93198],{"class":79,"line":12290},[77,93199,93200],{"class":323},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[77,93202,93203,93205,93207],{"class":79,"line":12296},[77,93204,54875],{"class":87},[77,93206,54271],{"class":158},[77,93208,291],{"class":87},[77,93210,93211,93213,93215],{"class":79,"line":12317},[77,93212,351],{"class":87},[77,93214,54258],{"class":158},[77,93216,291],{"class":87},[77,93218,93219],{"class":79,"line":12323},[77,93220,4875],{"emptyLinePlaceholder":2549},[77,93222,93223,93225,93227],{"class":79,"line":12337},[77,93224,351],{"class":87},[77,93226,53101],{"class":158},[77,93228,291],{"class":87},[19,93230,93232],{"id":93231},"_4172-节流","4.17.2 节流",[24,93234,93235],{},[40,93236],{"alt":72,"src":93237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[24,93239,93240],{},[40,93241],{"alt":72,"src":93242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[24,93244,93245],{},[27,93246,93247],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[24,93249,93250],{},"实现方式：",[51,93252,93253],{},[54,93254,93255],{},"lodash 提供的节流函数来处理",[24,93257,93258],{},"_.throttle(func,[wait=0],[options=])",[24,93260,93261],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[67,93263,93265],{"className":53099,"code":93264,"language":53101,"meta":72,"style":72},"\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",[74,93266,93267,93277,93291,93295,93303,93317,93337,93349,93357,93363,93373,93385,93397,93407,93419,93429,93439,93451,93455,93463,93471,93475,93483,93501,93519,93527,93545,93555,93563,93573,93577,93581,93585,93590,93595,93616,93624,93632,93636],{"__ignoreMap":72},[77,93268,93269,93271,93273,93275],{"class":79,"line":80},[77,93270,53763],{"class":87},[77,93272,53766],{"class":158},[77,93274,53769],{"class":83},[77,93276,291],{"class":87},[77,93278,93279,93281,93283,93285,93287,93289],{"class":79,"line":91},[77,93280,260],{"class":87},[77,93282,53101],{"class":158},[77,93284,53780],{"class":83},[77,93286,268],{"class":87},[77,93288,53785],{"class":271},[77,93290,291],{"class":87},[77,93292,93293],{"class":79,"line":107},[77,93294,4875],{"emptyLinePlaceholder":2549},[77,93296,93297,93299,93301],{"class":79,"line":191},[77,93298,260],{"class":87},[77,93300,53798],{"class":158},[77,93302,291],{"class":87},[77,93304,93305,93307,93309,93311,93313,93315],{"class":79,"line":1543},[77,93306,54602],{"class":87},[77,93308,53808],{"class":158},[77,93310,53811],{"class":83},[77,93312,268],{"class":87},[77,93314,53816],{"class":271},[77,93316,291],{"class":87},[77,93318,93319,93321,93323,93325,93327,93329,93331,93333,93335],{"class":79,"line":1549},[77,93320,54602],{"class":87},[77,93322,53808],{"class":158},[77,93324,2495],{"class":83},[77,93326,268],{"class":87},[77,93328,53855],{"class":271},[77,93330,53835],{"class":83},[77,93332,268],{"class":87},[77,93334,53862],{"class":271},[77,93336,291],{"class":87},[77,93338,93339,93341,93343,93345,93347],{"class":79,"line":1566},[77,93340,54602],{"class":87},[77,93342,53871],{"class":158},[77,93344,53874],{"class":87},[77,93346,53871],{"class":158},[77,93348,291],{"class":87},[77,93350,93351,93353,93355],{"class":79,"line":1572},[77,93352,54602],{"class":87},[77,93354,2520],{"class":158},[77,93356,291],{"class":87},[77,93358,93359,93361],{"class":79,"line":1589},[77,93360,57205],{"class":83},[77,93362,88],{"class":87},[77,93364,93365,93367,93369,93371],{"class":79,"line":1595},[77,93366,75035],{"class":94},[77,93368,98],{"class":87},[77,93370,62953],{"class":94},[77,93372,104],{"class":87},[77,93374,93375,93377,93379,93381,93383],{"class":79,"line":4088},[77,93376,57223],{"class":94},[77,93378,98],{"class":87},[77,93380,4198],{"class":94},[77,93382,2124],{"class":2123},[77,93384,104],{"class":87},[77,93386,93387,93389,93391,93393,93395],{"class":79,"line":4093},[77,93388,57237],{"class":94},[77,93390,98],{"class":87},[77,93392,4198],{"class":94},[77,93394,2124],{"class":2123},[77,93396,104],{"class":87},[77,93398,93399,93401,93403,93405],{"class":79,"line":4099},[77,93400,57335],{"class":94},[77,93402,98],{"class":87},[77,93404,92442],{"class":94},[77,93406,104],{"class":87},[77,93408,93409,93411,93413,93415,93417],{"class":79,"line":4104},[77,93410,57372],{"class":94},[77,93412,98],{"class":87},[77,93414,3438],{"class":94},[77,93416,2124],{"class":2123},[77,93418,104],{"class":87},[77,93420,93421,93423,93425,93427],{"class":79,"line":4118},[77,93422,59864],{"class":94},[77,93424,98],{"class":87},[77,93426,63290],{"class":94},[77,93428,104],{"class":87},[77,93430,93431,93433,93435,93437],{"class":79,"line":4123},[77,93432,59734],{"class":94},[77,93434,98],{"class":87},[77,93436,54052],{"class":94},[77,93438,104],{"class":87},[77,93440,93441,93443,93445,93447,93449],{"class":79,"line":4129},[77,93442,92481],{"class":94},[77,93444,98],{"class":87},[77,93446,2933],{"class":94},[77,93448,2124],{"class":2123},[77,93450,104],{"class":87},[77,93452,93453],{"class":79,"line":4150},[77,93454,4662],{"class":87},[77,93456,93457,93459,93461],{"class":79,"line":4155},[77,93458,54875],{"class":87},[77,93460,2520],{"class":158},[77,93462,291],{"class":87},[77,93464,93465,93467,93469],{"class":79,"line":4169},[77,93466,351],{"class":87},[77,93468,53798],{"class":158},[77,93470,291],{"class":87},[77,93472,93473],{"class":79,"line":4174},[77,93474,4875],{"emptyLinePlaceholder":2549},[77,93476,93477,93479,93481],{"class":79,"line":4203},[77,93478,260],{"class":87},[77,93480,54258],{"class":158},[77,93482,291],{"class":87},[77,93484,93485,93487,93489,93491,93493,93495,93497,93499],{"class":79,"line":4208},[77,93486,54602],{"class":87},[77,93488,331],{"class":158},[77,93490,334],{"class":83},[77,93492,268],{"class":87},[77,93494,55948],{"class":271},[77,93496,57762],{"class":87},[77,93498,331],{"class":158},[77,93500,291],{"class":87},[77,93502,93503,93505,93507,93509,93511,93513,93515,93517],{"class":79,"line":4225},[77,93504,54602],{"class":87},[77,93506,54271],{"class":158},[77,93508,265],{"class":83},[77,93510,268],{"class":87},[77,93512,90710],{"class":271},[77,93514,57762],{"class":87},[77,93516,54271],{"class":158},[77,93518,291],{"class":87},[77,93520,93521,93523,93525],{"class":79,"line":4230},[77,93522,54602],{"class":87},[77,93524,54271],{"class":158},[77,93526,291],{"class":87},[77,93528,93529,93531,93533,93535,93537,93539,93541,93543],{"class":79,"line":4235},[77,93530,13694],{"class":2123},[77,93532,89369],{"class":94},[77,93534,16036],{"class":2123},[77,93536,56850],{"class":87},[77,93538,56853],{"class":83},[77,93540,2622],{"class":87},[77,93542,92582],{"class":271},[77,93544,2628],{"class":87},[77,93546,93547,93549,93551,93553],{"class":79,"line":4240},[77,93548,54677],{"class":2123},[77,93550,11911],{"class":87},[77,93552,268],{"class":2123},[77,93554,49799],{"class":94},[77,93556,93557,93559,93561],{"class":79,"line":4254},[77,93558,72527],{"class":2123},[77,93560,92601],{"class":83},[77,93562,13326],{"class":87},[77,93564,93565,93567,93569,93571],{"class":79,"line":4259},[77,93566,92608],{"class":87},[77,93568,268],{"class":2123},[77,93570,5507],{"class":87},[77,93572,5177],{"class":2123},[77,93574,93575],{"class":79,"line":5052},[77,93576,92619],{"class":323},[77,93578,93579],{"class":79,"line":5066},[77,93580,4662],{"class":87},[77,93582,93583],{"class":79,"line":5074},[77,93584,92628],{"class":323},[77,93586,93587],{"class":79,"line":5079},[77,93588,93589],{"class":323},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[77,93591,93592],{"class":79,"line":5085},[77,93593,93594],{"class":323},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[77,93596,93597,93599,93601,93603,93605,93607,93610,93612,93614],{"class":79,"line":5091},[77,93598,92643],{"class":87},[77,93600,60261],{"class":83},[77,93602,2622],{"class":87},[77,93604,92650],{"class":271},[77,93606,92653],{"class":87},[77,93608,93609],{"class":83},"throttle",[77,93611,92659],{"class":87},[77,93613,67517],{"class":94},[77,93615,32965],{"class":87},[77,93617,93618,93620,93622],{"class":79,"line":5096},[77,93619,54875],{"class":87},[77,93621,54271],{"class":158},[77,93623,291],{"class":87},[77,93625,93626,93628,93630],{"class":79,"line":10422},[77,93627,351],{"class":87},[77,93629,54258],{"class":158},[77,93631,291],{"class":87},[77,93633,93634],{"class":79,"line":10446},[77,93635,4875],{"emptyLinePlaceholder":2549},[77,93637,93638,93640,93642],{"class":79,"line":10451},[77,93639,351],{"class":87},[77,93641,53101],{"class":158},[77,93643,291],{"class":87},[51,93645,93646],{},[54,93647,93648],{},"手写一个节流函数来处理",[24,93650,73391],{},[24,93652,92702],{},[24,93654,93655],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[24,93657,93658],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[67,93660,93662],{"className":53099,"code":93661,"language":53101,"meta":72,"style":72},"\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",[74,93663,93664,93674,93688,93692,93700,93714,93734,93746,93754,93760,93770,93782,93794,93804,93816,93826,93836,93848,93852,93860,93868,93872,93880,93898,93916,93924,93942,93952,93960,93970,93974,93978,93982,93987,93992,93997,94002,94007,94012,94029,94035,94043,94054,94069,94076,94081,94086,94096,94101,94106,94111,94115,94119,94123,94143,94151,94159,94163],{"__ignoreMap":72},[77,93665,93666,93668,93670,93672],{"class":79,"line":80},[77,93667,53763],{"class":87},[77,93669,53766],{"class":158},[77,93671,53769],{"class":83},[77,93673,291],{"class":87},[77,93675,93676,93678,93680,93682,93684,93686],{"class":79,"line":91},[77,93677,260],{"class":87},[77,93679,53101],{"class":158},[77,93681,53780],{"class":83},[77,93683,268],{"class":87},[77,93685,53785],{"class":271},[77,93687,291],{"class":87},[77,93689,93690],{"class":79,"line":107},[77,93691,4875],{"emptyLinePlaceholder":2549},[77,93693,93694,93696,93698],{"class":79,"line":191},[77,93695,260],{"class":87},[77,93697,53798],{"class":158},[77,93699,291],{"class":87},[77,93701,93702,93704,93706,93708,93710,93712],{"class":79,"line":1543},[77,93703,54602],{"class":87},[77,93705,53808],{"class":158},[77,93707,53811],{"class":83},[77,93709,268],{"class":87},[77,93711,53816],{"class":271},[77,93713,291],{"class":87},[77,93715,93716,93718,93720,93722,93724,93726,93728,93730,93732],{"class":79,"line":1549},[77,93717,54602],{"class":87},[77,93719,53808],{"class":158},[77,93721,2495],{"class":83},[77,93723,268],{"class":87},[77,93725,53855],{"class":271},[77,93727,53835],{"class":83},[77,93729,268],{"class":87},[77,93731,53862],{"class":271},[77,93733,291],{"class":87},[77,93735,93736,93738,93740,93742,93744],{"class":79,"line":1566},[77,93737,54602],{"class":87},[77,93739,53871],{"class":158},[77,93741,53874],{"class":87},[77,93743,53871],{"class":158},[77,93745,291],{"class":87},[77,93747,93748,93750,93752],{"class":79,"line":1572},[77,93749,54602],{"class":87},[77,93751,2520],{"class":158},[77,93753,291],{"class":87},[77,93755,93756,93758],{"class":79,"line":1589},[77,93757,57205],{"class":83},[77,93759,88],{"class":87},[77,93761,93762,93764,93766,93768],{"class":79,"line":1595},[77,93763,75035],{"class":94},[77,93765,98],{"class":87},[77,93767,62953],{"class":94},[77,93769,104],{"class":87},[77,93771,93772,93774,93776,93778,93780],{"class":79,"line":4088},[77,93773,57223],{"class":94},[77,93775,98],{"class":87},[77,93777,4198],{"class":94},[77,93779,2124],{"class":2123},[77,93781,104],{"class":87},[77,93783,93784,93786,93788,93790,93792],{"class":79,"line":4093},[77,93785,57237],{"class":94},[77,93787,98],{"class":87},[77,93789,4198],{"class":94},[77,93791,2124],{"class":2123},[77,93793,104],{"class":87},[77,93795,93796,93798,93800,93802],{"class":79,"line":4099},[77,93797,57335],{"class":94},[77,93799,98],{"class":87},[77,93801,92442],{"class":94},[77,93803,104],{"class":87},[77,93805,93806,93808,93810,93812,93814],{"class":79,"line":4104},[77,93807,57372],{"class":94},[77,93809,98],{"class":87},[77,93811,3438],{"class":94},[77,93813,2124],{"class":2123},[77,93815,104],{"class":87},[77,93817,93818,93820,93822,93824],{"class":79,"line":4118},[77,93819,59864],{"class":94},[77,93821,98],{"class":87},[77,93823,63290],{"class":94},[77,93825,104],{"class":87},[77,93827,93828,93830,93832,93834],{"class":79,"line":4123},[77,93829,59734],{"class":94},[77,93831,98],{"class":87},[77,93833,54052],{"class":94},[77,93835,104],{"class":87},[77,93837,93838,93840,93842,93844,93846],{"class":79,"line":4129},[77,93839,92481],{"class":94},[77,93841,98],{"class":87},[77,93843,2933],{"class":94},[77,93845,2124],{"class":2123},[77,93847,104],{"class":87},[77,93849,93850],{"class":79,"line":4150},[77,93851,4662],{"class":87},[77,93853,93854,93856,93858],{"class":79,"line":4155},[77,93855,54875],{"class":87},[77,93857,2520],{"class":158},[77,93859,291],{"class":87},[77,93861,93862,93864,93866],{"class":79,"line":4169},[77,93863,351],{"class":87},[77,93865,53798],{"class":158},[77,93867,291],{"class":87},[77,93869,93870],{"class":79,"line":4174},[77,93871,4875],{"emptyLinePlaceholder":2549},[77,93873,93874,93876,93878],{"class":79,"line":4203},[77,93875,260],{"class":87},[77,93877,54258],{"class":158},[77,93879,291],{"class":87},[77,93881,93882,93884,93886,93888,93890,93892,93894,93896],{"class":79,"line":4208},[77,93883,54602],{"class":87},[77,93885,331],{"class":158},[77,93887,334],{"class":83},[77,93889,268],{"class":87},[77,93891,55948],{"class":271},[77,93893,57762],{"class":87},[77,93895,331],{"class":158},[77,93897,291],{"class":87},[77,93899,93900,93902,93904,93906,93908,93910,93912,93914],{"class":79,"line":4225},[77,93901,54602],{"class":87},[77,93903,54271],{"class":158},[77,93905,265],{"class":83},[77,93907,268],{"class":87},[77,93909,90710],{"class":271},[77,93911,57762],{"class":87},[77,93913,54271],{"class":158},[77,93915,291],{"class":87},[77,93917,93918,93920,93922],{"class":79,"line":4230},[77,93919,54602],{"class":87},[77,93921,54271],{"class":158},[77,93923,291],{"class":87},[77,93925,93926,93928,93930,93932,93934,93936,93938,93940],{"class":79,"line":4235},[77,93927,13694],{"class":2123},[77,93929,89369],{"class":94},[77,93931,16036],{"class":2123},[77,93933,56850],{"class":87},[77,93935,56853],{"class":83},[77,93937,2622],{"class":87},[77,93939,92582],{"class":271},[77,93941,2628],{"class":87},[77,93943,93944,93946,93948,93950],{"class":79,"line":4240},[77,93945,54677],{"class":2123},[77,93947,11911],{"class":87},[77,93949,268],{"class":2123},[77,93951,49799],{"class":94},[77,93953,93954,93956,93958],{"class":79,"line":4254},[77,93955,72527],{"class":2123},[77,93957,92601],{"class":83},[77,93959,13326],{"class":87},[77,93961,93962,93964,93966,93968],{"class":79,"line":4259},[77,93963,92608],{"class":87},[77,93965,268],{"class":2123},[77,93967,5507],{"class":87},[77,93969,5177],{"class":2123},[77,93971,93972],{"class":79,"line":5052},[77,93973,92619],{"class":323},[77,93975,93976],{"class":79,"line":5066},[77,93977,4662],{"class":87},[77,93979,93980],{"class":79,"line":5074},[77,93981,92628],{"class":323},[77,93983,93984],{"class":79,"line":5079},[77,93985,93986],{"class":323},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[77,93988,93989],{"class":79,"line":5085},[77,93990,93991],{"class":323},"    \u002F\u002F 1.声明一个定时器变量\n",[77,93993,93994],{"class":79,"line":5091},[77,93995,93996],{"class":323},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[77,93998,93999],{"class":79,"line":5096},[77,94000,94001],{"class":323},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[77,94003,94004],{"class":79,"line":10422},[77,94005,94006],{"class":323},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[77,94008,94009],{"class":79,"line":10446},[77,94010,94011],{"class":323},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[77,94013,94014,94016,94019,94021,94023,94025,94027],{"class":79,"line":10451},[77,94015,72527],{"class":2123},[77,94017,94018],{"class":83}," throttle",[77,94020,2622],{"class":87},[77,94022,93073],{"class":7691},[77,94024,680],{"class":87},[77,94026,3333],{"class":7691},[77,94028,14914],{"class":87},[77,94030,94031,94033],{"class":79,"line":10457},[77,94032,82210],{"class":2123},[77,94034,93086],{"class":87},[77,94036,94037,94039,94041],{"class":79,"line":10484},[77,94038,76421],{"class":2123},[77,94040,61366],{"class":2123},[77,94042,56906],{"class":87},[77,94044,94045,94047,94049,94051],{"class":79,"line":10489},[77,94046,4972],{"class":2123},[77,94048,4134],{"class":87},[77,94050,2841],{"class":2123},[77,94052,94053],{"class":87},"timer) {\n",[77,94055,94056,94059,94061,94063,94065,94067],{"class":79,"line":10495},[77,94057,94058],{"class":87},"          timer ",[77,94060,268],{"class":2123},[77,94062,93127],{"class":83},[77,94064,2622],{"class":87},[77,94066,56903],{"class":2123},[77,94068,56906],{"class":87},[77,94070,94071,94074],{"class":79,"line":10507},[77,94072,94073],{"class":83},"            fn",[77,94075,4451],{"class":87},[77,94077,94078],{"class":79,"line":10519},[77,94079,94080],{"class":323},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[77,94082,94083],{"class":79,"line":10531},[77,94084,94085],{"class":323},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[77,94087,94088,94091,94093],{"class":79,"line":12189},[77,94089,94090],{"class":87},"            timer ",[77,94092,268],{"class":2123},[77,94094,94095],{"class":94}," null\n",[77,94097,94098],{"class":79,"line":12214},[77,94099,94100],{"class":323},"            \u002F\u002F 不能用clearTimeout(timer)\n",[77,94102,94103],{"class":79,"line":12237},[77,94104,94105],{"class":323},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[77,94107,94108],{"class":79,"line":12261},[77,94109,94110],{"class":87},"          }, t)\n",[77,94112,94113],{"class":79,"line":12266},[77,94114,5004],{"class":87},[77,94116,94117],{"class":79,"line":12271},[77,94118,54856],{"class":87},[77,94120,94121],{"class":79,"line":12276},[77,94122,4662],{"class":87},[77,94124,94125,94127,94129,94131,94133,94135,94137,94139,94141],{"class":79,"line":12285},[77,94126,92643],{"class":87},[77,94128,60261],{"class":83},[77,94130,2622],{"class":87},[77,94132,92650],{"class":271},[77,94134,680],{"class":87},[77,94136,93609],{"class":83},[77,94138,92659],{"class":87},[77,94140,67517],{"class":94},[77,94142,32965],{"class":87},[77,94144,94145,94147,94149],{"class":79,"line":12290},[77,94146,54875],{"class":87},[77,94148,54271],{"class":158},[77,94150,291],{"class":87},[77,94152,94153,94155,94157],{"class":79,"line":12296},[77,94154,351],{"class":87},[77,94156,54258],{"class":158},[77,94158,291],{"class":87},[77,94160,94161],{"class":79,"line":12317},[77,94162,4875],{"emptyLinePlaceholder":2549},[77,94164,94165,94167,94169],{"class":79,"line":12323},[77,94166,351],{"class":87},[77,94168,53101],{"class":158},[77,94170,291],{"class":87},[19,94172,94174],{"id":94173},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[67,94176,94178],{"className":55525,"code":94177,"language":55527,"meta":72,"style":72},"\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",[74,94179,94180,94188,94196,94201,94206,94211,94216,94220,94228],{"__ignoreMap":72},[77,94181,94182,94184,94186],{"class":79,"line":80},[77,94183,260],{"class":87},[77,94185,54258],{"class":158},[77,94187,291],{"class":87},[77,94189,94190,94192,94194],{"class":79,"line":91},[77,94191,54602],{"class":87},[77,94193,54271],{"class":158},[77,94195,291],{"class":87},[77,94197,94198],{"class":79,"line":107},[77,94199,94200],{"class":87},"    let timer = null\n",[77,94202,94203],{"class":79,"line":191},[77,94204,94205],{"class":87},"    timer = setTimeout(() => {\n",[77,94207,94208],{"class":79,"line":1543},[77,94209,94210],{"class":87},"      clearTimeout(timer)\n",[77,94212,94213],{"class":79,"line":1549},[77,94214,94215],{"class":87},"      console.log(timer)\n",[77,94217,94218],{"class":79,"line":1566},[77,94219,62673],{"class":87},[77,94221,94222,94224,94226],{"class":79,"line":1572},[77,94223,54875],{"class":87},[77,94225,54271],{"class":158},[77,94227,291],{"class":87},[77,94229,94230,94232,94234],{"class":79,"line":1589},[77,94231,351],{"class":87},[77,94233,54258],{"class":158},[77,94235,291],{"class":87},[24,94237,94238],{},"输出为1",[24,94240,94241],{},"在开启的定时器里边写清除定时器",[24,94243,94244],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[19,94246,94248],{"id":94247},"_4174-节流综合案例","4.17.4 节流综合案例",[24,94250,94251],{},"页面打开，可以记录上一次的视频播放位置",[24,94253,94254],{},[40,94255],{"alt":72,"src":94256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[24,94258,94259],{},[40,94260],{"alt":72,"src":94261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[67,94263,94265],{"className":53099,"code":94264,"language":53101,"meta":72,"style":72},"\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",[74,94266,94267,94277,94291,94295,94303,94317,94337,94357,94379,94392,94400,94406,94416,94426,94436,94440,94444,94451,94464,94476,94480,94484,94494,94506,94520,94524,94528,94535,94545,94558,94570,94580,94590,94606,94618,94622,94626,94634,94644,94656,94666,94676,94686,94690,94694,94704,94715,94719,94727,94735,94739,94747,94762,94777,94792,94813,94821,94829,94844,94866,94874,94889,94915,94941,94967,94975,94983,95002,95010,95015,95034,95039,95057,95062,95067,95075,95080,95094,95102,95107,95124,95128,95133,95155,95159,95167,95175,95179],{"__ignoreMap":72},[77,94268,94269,94271,94273,94275],{"class":79,"line":80},[77,94270,53763],{"class":87},[77,94272,53766],{"class":158},[77,94274,53769],{"class":83},[77,94276,291],{"class":87},[77,94278,94279,94281,94283,94285,94287,94289],{"class":79,"line":91},[77,94280,260],{"class":87},[77,94282,53101],{"class":158},[77,94284,53780],{"class":83},[77,94286,268],{"class":87},[77,94288,53785],{"class":271},[77,94290,291],{"class":87},[77,94292,94293],{"class":79,"line":107},[77,94294,4875],{"emptyLinePlaceholder":2549},[77,94296,94297,94299,94301],{"class":79,"line":191},[77,94298,260],{"class":87},[77,94300,53798],{"class":158},[77,94302,291],{"class":87},[77,94304,94305,94307,94309,94311,94313,94315],{"class":79,"line":1543},[77,94306,54602],{"class":87},[77,94308,53808],{"class":158},[77,94310,53811],{"class":83},[77,94312,268],{"class":87},[77,94314,53816],{"class":271},[77,94316,61575],{"class":87},[77,94318,94319,94321,94323,94325,94327,94329,94331,94333,94335],{"class":79,"line":1549},[77,94320,54602],{"class":87},[77,94322,53808],{"class":158},[77,94324,53827],{"class":83},[77,94326,268],{"class":87},[77,94328,53832],{"class":271},[77,94330,53835],{"class":83},[77,94332,268],{"class":87},[77,94334,53840],{"class":271},[77,94336,61575],{"class":87},[77,94338,94339,94341,94343,94345,94347,94349,94351,94353,94355],{"class":79,"line":1566},[77,94340,54602],{"class":87},[77,94342,53808],{"class":158},[77,94344,2495],{"class":83},[77,94346,268],{"class":87},[77,94348,53855],{"class":271},[77,94350,53835],{"class":83},[77,94352,268],{"class":87},[77,94354,53862],{"class":271},[77,94356,61575],{"class":87},[77,94358,94359,94361,94363,94365,94367,94370,94372,94374,94377],{"class":79,"line":1572},[77,94360,54602],{"class":87},[77,94362,53808],{"class":158},[77,94364,2495],{"class":83},[77,94366,268],{"class":87},[77,94368,94369],{"class":271},"\"referrer\"",[77,94371,53835],{"class":83},[77,94373,268],{"class":87},[77,94375,94376],{"class":271},"\"never\"",[77,94378,61575],{"class":87},[77,94380,94381,94383,94385,94388,94390],{"class":79,"line":1589},[77,94382,54602],{"class":87},[77,94384,53871],{"class":158},[77,94386,94387],{"class":87},">综合案例\u003C\u002F",[77,94389,53871],{"class":158},[77,94391,291],{"class":87},[77,94393,94394,94396,94398],{"class":79,"line":1595},[77,94395,54602],{"class":87},[77,94397,2520],{"class":158},[77,94399,291],{"class":87},[77,94401,94402,94404],{"class":79,"line":4088},[77,94403,8878],{"class":158},[77,94405,88],{"class":87},[77,94407,94408,94410,94412,94414],{"class":79,"line":4093},[77,94409,57149],{"class":94},[77,94411,98],{"class":87},[77,94413,1939],{"class":94},[77,94415,104],{"class":87},[77,94417,94418,94420,94422,94424],{"class":79,"line":4099},[77,94419,57160],{"class":94},[77,94421,98],{"class":87},[77,94423,1939],{"class":94},[77,94425,104],{"class":87},[77,94427,94428,94430,94432,94434],{"class":79,"line":4104},[77,94429,75035],{"class":94},[77,94431,98],{"class":87},[77,94433,62953],{"class":94},[77,94435,104],{"class":87},[77,94437,94438],{"class":79,"line":4118},[77,94439,4662],{"class":87},[77,94441,94442],{"class":79,"line":4123},[77,94443,4875],{"emptyLinePlaceholder":2549},[77,94445,94446,94449],{"class":79,"line":4129},[77,94447,94448],{"class":83},"    .container",[77,94450,88],{"class":87},[77,94452,94453,94455,94457,94460,94462],{"class":79,"line":4150},[77,94454,57223],{"class":94},[77,94456,98],{"class":87},[77,94458,94459],{"class":94},"1200",[77,94461,2124],{"class":2123},[77,94463,104],{"class":87},[77,94465,94466,94468,94470,94472,94474],{"class":79,"line":4155},[77,94467,57160],{"class":94},[77,94469,98],{"class":87},[77,94471,1939],{"class":94},[77,94473,1942],{"class":94},[77,94475,104],{"class":87},[77,94477,94478],{"class":79,"line":4169},[77,94479,4662],{"class":87},[77,94481,94482],{"class":79,"line":4174},[77,94483,4875],{"emptyLinePlaceholder":2549},[77,94485,94486,94489,94492],{"class":79,"line":4203},[77,94487,94488],{"class":83},"    .video",[77,94490,94491],{"class":158}," video",[77,94493,88],{"class":87},[77,94495,94496,94498,94500,94502,94504],{"class":79,"line":4208},[77,94497,57223],{"class":94},[77,94499,98],{"class":87},[77,94501,2925],{"class":94},[77,94503,2942],{"class":2123},[77,94505,104],{"class":87},[77,94507,94508,94510,94512,94514,94516,94518],{"class":79,"line":4225},[77,94509,57149],{"class":94},[77,94511,98],{"class":87},[77,94513,3313],{"class":94},[77,94515,2124],{"class":2123},[77,94517,6568],{"class":94},[77,94519,104],{"class":87},[77,94521,94522],{"class":79,"line":4230},[77,94523,4662],{"class":87},[77,94525,94526],{"class":79,"line":4235},[77,94527,4875],{"emptyLinePlaceholder":2549},[77,94529,94530,94533],{"class":79,"line":4240},[77,94531,94532],{"class":83},"    .elevator",[77,94534,88],{"class":87},[77,94536,94537,94539,94541,94543],{"class":79,"line":4254},[77,94538,57212],{"class":94},[77,94540,98],{"class":87},[77,94542,1584],{"class":94},[77,94544,104],{"class":87},[77,94546,94547,94549,94551,94554,94556],{"class":79,"line":4259},[77,94548,57397],{"class":94},[77,94550,98],{"class":87},[77,94552,94553],{"class":94},"280",[77,94555,2124],{"class":2123},[77,94557,104],{"class":87},[77,94559,94560,94562,94564,94566,94568],{"class":79,"line":5052},[77,94561,88863],{"class":94},[77,94563,98],{"class":87},[77,94565,3313],{"class":94},[77,94567,2124],{"class":2123},[77,94569,104],{"class":87},[77,94571,94572,94574,94576,94578],{"class":79,"line":5066},[77,94573,88676],{"class":94},[77,94575,98],{"class":87},[77,94577,88681],{"class":94},[77,94579,104],{"class":87},[77,94581,94582,94584,94586,94588],{"class":79,"line":5074},[77,94583,64166],{"class":94},[77,94585,98],{"class":87},[77,94587,63290],{"class":94},[77,94589,104],{"class":87},[77,94591,94592,94594,94596,94598,94600,94602,94604],{"class":79,"line":5079},[77,94593,64421],{"class":94},[77,94595,98],{"class":87},[77,94597,2120],{"class":94},[77,94599,2124],{"class":2123},[77,94601,2127],{"class":94},[77,94603,64688],{"class":94},[77,94605,104],{"class":87},[77,94607,94608,94610,94612,94614,94616],{"class":79,"line":5085},[77,94609,57223],{"class":94},[77,94611,98],{"class":87},[77,94613,3520],{"class":94},[77,94615,2124],{"class":2123},[77,94617,104],{"class":87},[77,94619,94620],{"class":79,"line":5091},[77,94621,4662],{"class":87},[77,94623,94624],{"class":79,"line":5096},[77,94625,4875],{"emptyLinePlaceholder":2549},[77,94627,94628,94630,94632],{"class":79,"line":10422},[77,94629,94532],{"class":83},[77,94631,3876],{"class":158},[77,94633,88],{"class":87},[77,94635,94636,94638,94640,94642],{"class":79,"line":10446},[77,94637,57459],{"class":94},[77,94639,98],{"class":87},[77,94641,456],{"class":94},[77,94643,104],{"class":87},[77,94645,94646,94648,94650,94652,94654],{"class":79,"line":10451},[77,94647,57149],{"class":94},[77,94649,98],{"class":87},[77,94651,3059],{"class":94},[77,94653,2124],{"class":2123},[77,94655,104],{"class":87},[77,94657,94658,94660,94662,94664],{"class":79,"line":10457},[77,94659,66413],{"class":94},[77,94661,98],{"class":87},[77,94663,186],{"class":94},[77,94665,104],{"class":87},[77,94667,94668,94670,94672,94674],{"class":79,"line":10484},[77,94669,59734],{"class":94},[77,94671,98],{"class":87},[77,94673,54052],{"class":94},[77,94675,104],{"class":87},[77,94677,94678,94680,94682,94684],{"class":79,"line":10489},[77,94679,59864],{"class":94},[77,94681,98],{"class":87},[77,94683,64514],{"class":94},[77,94685,104],{"class":87},[77,94687,94688],{"class":79,"line":10495},[77,94689,4662],{"class":87},[77,94691,94692],{"class":79,"line":10507},[77,94693,4875],{"emptyLinePlaceholder":2549},[77,94695,94696,94698,94700,94702],{"class":79,"line":10519},[77,94697,94532],{"class":83},[77,94699,3876],{"class":158},[77,94701,66467],{"class":83},[77,94703,88],{"class":87},[77,94705,94706,94708,94710,94713],{"class":79,"line":10531},[77,94707,59864],{"class":94},[77,94709,98],{"class":87},[77,94711,94712],{"class":94},"#1286ff",[77,94714,104],{"class":87},[77,94716,94717],{"class":79,"line":12189},[77,94718,4662],{"class":87},[77,94720,94721,94723,94725],{"class":79,"line":12214},[77,94722,54875],{"class":87},[77,94724,2520],{"class":158},[77,94726,291],{"class":87},[77,94728,94729,94731,94733],{"class":79,"line":12237},[77,94730,351],{"class":87},[77,94732,53798],{"class":158},[77,94734,291],{"class":87},[77,94736,94737],{"class":79,"line":12261},[77,94738,4875],{"emptyLinePlaceholder":2549},[77,94740,94741,94743,94745],{"class":79,"line":12266},[77,94742,260],{"class":87},[77,94744,54258],{"class":158},[77,94746,291],{"class":87},[77,94748,94749,94751,94753,94755,94757,94760],{"class":79,"line":12271},[77,94750,54602],{"class":87},[77,94752,331],{"class":158},[77,94754,334],{"class":83},[77,94756,268],{"class":87},[77,94758,94759],{"class":271},"\"container\"",[77,94761,291],{"class":87},[77,94763,94764,94766,94768,94770,94772,94775],{"class":79,"line":12276},[77,94765,53805],{"class":87},[77,94767,331],{"class":158},[77,94769,334],{"class":83},[77,94771,268],{"class":87},[77,94773,94774],{"class":271},"\"header\"",[77,94776,291],{"class":87},[77,94778,94779,94781,94783,94785,94787,94790],{"class":79,"line":12285},[77,94780,57684],{"class":87},[77,94782,417],{"class":158},[77,94784,63503],{"class":83},[77,94786,268],{"class":87},[77,94788,94789],{"class":271},"\"http:\u002F\u002Fpip.itcast.cn\"",[77,94791,291],{"class":87},[77,94793,94794,94796,94798,94800,94802,94805,94807,94809,94811],{"class":79,"line":12290},[77,94795,57750],{"class":87},[77,94797,40],{"class":158},[77,94799,265],{"class":83},[77,94801,268],{"class":87},[77,94803,94804],{"class":271},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[77,94806,275],{"class":83},[77,94808,268],{"class":87},[77,94810,444],{"class":271},[77,94812,61575],{"class":87},[77,94814,94815,94817,94819],{"class":79,"line":12296},[77,94816,57855],{"class":87},[77,94818,417],{"class":158},[77,94820,291],{"class":87},[77,94822,94823,94825,94827],{"class":79,"line":12317},[77,94824,54235],{"class":87},[77,94826,331],{"class":158},[77,94828,291],{"class":87},[77,94830,94831,94833,94835,94837,94839,94842],{"class":79,"line":12323},[77,94832,53805],{"class":87},[77,94834,331],{"class":158},[77,94836,334],{"class":83},[77,94838,268],{"class":87},[77,94840,94841],{"class":271},"\"video\"",[77,94843,291],{"class":87},[77,94845,94846,94848,94850,94852,94854,94857,94860,94862,94864],{"class":79,"line":12337},[77,94847,57684],{"class":87},[77,94849,30651],{"class":158},[77,94851,265],{"class":83},[77,94853,268],{"class":87},[77,94855,94856],{"class":271},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[77,94858,94859],{"class":83}," controls",[77,94861,57762],{"class":87},[77,94863,30651],{"class":158},[77,94865,291],{"class":87},[77,94867,94868,94870,94872],{"class":79,"line":12343},[77,94869,54235],{"class":87},[77,94871,331],{"class":158},[77,94873,291],{"class":87},[77,94875,94876,94878,94880,94882,94884,94887],{"class":79,"line":12370},[77,94877,53805],{"class":87},[77,94879,331],{"class":158},[77,94881,334],{"class":83},[77,94883,268],{"class":87},[77,94885,94886],{"class":271},"\"elevator\"",[77,94888,291],{"class":87},[77,94890,94891,94893,94895,94897,94899,94901,94904,94906,94908,94911,94913],{"class":79,"line":12379},[77,94892,57684],{"class":87},[77,94894,417],{"class":158},[77,94896,63503],{"class":83},[77,94898,268],{"class":87},[77,94900,66679],{"class":271},[77,94902,94903],{"class":83}," data-ref",[77,94905,268],{"class":87},[77,94907,94841],{"class":271},[77,94909,94910],{"class":87},">视频介绍\u003C\u002F",[77,94912,417],{"class":158},[77,94914,291],{"class":87},[77,94916,94917,94919,94921,94923,94925,94927,94929,94931,94934,94937,94939],{"class":79,"line":12385},[77,94918,57684],{"class":87},[77,94920,417],{"class":158},[77,94922,63503],{"class":83},[77,94924,268],{"class":87},[77,94926,66679],{"class":271},[77,94928,94903],{"class":83},[77,94930,268],{"class":87},[77,94932,94933],{"class":271},"\"intro\"",[77,94935,94936],{"class":87},">课程简介\u003C\u002F",[77,94938,417],{"class":158},[77,94940,291],{"class":87},[77,94942,94943,94945,94947,94949,94951,94953,94955,94957,94960,94963,94965],{"class":79,"line":12393},[77,94944,57684],{"class":87},[77,94946,417],{"class":158},[77,94948,63503],{"class":83},[77,94950,268],{"class":87},[77,94952,66679],{"class":271},[77,94954,94903],{"class":83},[77,94956,268],{"class":87},[77,94958,94959],{"class":271},"\"outline\"",[77,94961,94962],{"class":87},">评论列表\u003C\u002F",[77,94964,417],{"class":158},[77,94966,291],{"class":87},[77,94968,94969,94971,94973],{"class":79,"line":12398},[77,94970,54235],{"class":87},[77,94972,331],{"class":158},[77,94974,291],{"class":87},[77,94976,94977,94979,94981],{"class":79,"line":19074},[77,94978,54875],{"class":87},[77,94980,331],{"class":158},[77,94982,291],{"class":87},[77,94984,94985,94987,94989,94991,94993,94996,94998,95000],{"class":79,"line":19080},[77,94986,54602],{"class":87},[77,94988,54271],{"class":158},[77,94990,265],{"class":83},[77,94992,268],{"class":87},[77,94994,94995],{"class":271},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[77,94997,57762],{"class":87},[77,94999,54271],{"class":158},[77,95001,291],{"class":87},[77,95003,95004,95006,95008],{"class":79,"line":19103},[77,95005,54602],{"class":87},[77,95007,54271],{"class":158},[77,95009,291],{"class":87},[77,95011,95012],{"class":79,"line":19109},[77,95013,95014],{"class":323},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[77,95016,95017,95019,95021,95023,95025,95027,95029,95032],{"class":79,"line":19132},[77,95018,13694],{"class":2123},[77,95020,94491],{"class":94},[77,95022,16036],{"class":2123},[77,95024,56850],{"class":87},[77,95026,56853],{"class":83},[77,95028,2622],{"class":87},[77,95030,95031],{"class":271},"'video'",[77,95033,2628],{"class":87},[77,95035,95036],{"class":79,"line":19146},[77,95037,95038],{"class":323},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[77,95040,95041,95044,95046,95048,95050,95053,95055],{"class":79,"line":19166},[77,95042,95043],{"class":87},"    video.ontimeupdate ",[77,95045,268],{"class":2123},[77,95047,90791],{"class":87},[77,95049,93609],{"class":83},[77,95051,95052],{"class":87},"(() ",[77,95054,87159],{"class":2123},[77,95056,88],{"class":87},[77,95058,95059],{"class":79,"line":19172},[77,95060,95061],{"class":323},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[77,95063,95064],{"class":79,"line":19183},[77,95065,95066],{"class":323},"      \u002F\u002F 控制台输出当前的时间\n",[77,95068,95069,95072],{"class":79,"line":19206},[77,95070,95071],{"class":323},"      \u002F\u002F console.log(video.currentTime)",[77,95073,95074],{"class":323},"  \u002F\u002F获得当前的视频时间\n",[77,95076,95077],{"class":79,"line":19228},[77,95078,95079],{"class":323},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[77,95081,95082,95084,95086,95088,95091],{"class":79,"line":19233},[77,95083,77121],{"class":87},[77,95085,74093],{"class":83},[77,95087,2622],{"class":87},[77,95089,95090],{"class":271},"'currentTime'",[77,95092,95093],{"class":87},", video.currentTime)\n",[77,95095,95096,95098,95100],{"class":79,"line":19239},[77,95097,56989],{"class":87},[77,95099,8885],{"class":94},[77,95101,2628],{"class":87},[77,95103,95104],{"class":79,"line":19253},[77,95105,95106],{"class":323},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[77,95108,95109,95112,95115,95117,95120,95122],{"class":79,"line":19266},[77,95110,95111],{"class":87},"    video.",[77,95113,95114],{"class":83},"onloadeddata",[77,95116,16036],{"class":2123},[77,95118,95119],{"class":87}," () ",[77,95121,87159],{"class":2123},[77,95123,88],{"class":87},[77,95125,95126],{"class":79,"line":19271},[77,95127,62460],{"class":323},[77,95129,95130],{"class":79,"line":19285},[77,95131,95132],{"class":323},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[77,95134,95135,95138,95140,95143,95145,95147,95149,95151,95153],{"class":79,"line":19290},[77,95136,95137],{"class":87},"      video.currentTime ",[77,95139,268],{"class":2123},[77,95141,95142],{"class":87}," localStorage.",[77,95144,74124],{"class":83},[77,95146,2622],{"class":87},[77,95148,95090],{"class":271},[77,95150,16186],{"class":87},[77,95152,73796],{"class":2123},[77,95154,49799],{"class":94},[77,95156,95157],{"class":79,"line":19296},[77,95158,4662],{"class":87},[77,95160,95161,95163,95165],{"class":79,"line":19301},[77,95162,54875],{"class":87},[77,95164,54271],{"class":158},[77,95166,291],{"class":87},[77,95168,95169,95171,95173],{"class":79,"line":19315},[77,95170,351],{"class":87},[77,95172,54258],{"class":158},[77,95174,291],{"class":87},[77,95176,95177],{"class":79,"line":19320},[77,95178,4875],{"emptyLinePlaceholder":2549},[77,95180,95181,95183,95185],{"class":79,"line":19325},[77,95182,351],{"class":87},[77,95184,53101],{"class":158},[77,95186,291],{"class":87},[2520,95188,95189],{},"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":72,"searchDepth":91,"depth":91,"links":95191},[95192,95197,95201,95202,95203,95208,95213,95214,95215,95216,95223,95228,95229,95239,95243,95244,95248],{"id":79129,"depth":91,"text":79130,"children":95193},[95194,95195,95196],{"id":79133,"depth":107,"text":79134},{"id":79158,"depth":107,"text":79159},{"id":79170,"depth":107,"text":79171},{"id":79182,"depth":91,"text":79183,"children":95198},[95199,95200],{"id":79186,"depth":107,"text":79187},{"id":79201,"depth":107,"text":79202},{"id":79253,"depth":91,"text":79254},{"id":79297,"depth":91,"text":79298},{"id":79314,"depth":91,"text":79315,"children":95204},[95205,95206,95207],{"id":79318,"depth":107,"text":79319},{"id":79331,"depth":107,"text":79332},{"id":79436,"depth":107,"text":79437},{"id":79725,"depth":91,"text":79726,"children":95209},[95210,95211,95212],{"id":79729,"depth":107,"text":79730},{"id":80172,"depth":107,"text":80173},{"id":80583,"depth":107,"text":80584},{"id":80646,"depth":91,"text":80647},{"id":80725,"depth":91,"text":80726},{"id":80818,"depth":91,"text":80819},{"id":82662,"depth":91,"text":82663,"children":95217},[95218,95219,95220,95221,95222],{"id":82666,"depth":107,"text":82667},{"id":82678,"depth":107,"text":82679},{"id":82897,"depth":107,"text":82898},{"id":82915,"depth":107,"text":82916},{"id":82975,"depth":107,"text":82976},{"id":87243,"depth":91,"text":87244,"children":95224},[95225,95226,95227],{"id":87247,"depth":107,"text":87248},{"id":87265,"depth":107,"text":87266},{"id":87291,"depth":107,"text":87292},{"id":87300,"depth":91,"text":87301},{"id":87322,"depth":91,"text":87323,"children":95230},[95231,95232,95233,95234,95235,95236,95237,95238],{"id":87326,"depth":107,"text":87327},{"id":87587,"depth":107,"text":87588},{"id":87773,"depth":107,"text":87774},{"id":88140,"depth":107,"text":88141},{"id":88256,"depth":107,"text":88257},{"id":88292,"depth":107,"text":88293},{"id":88339,"depth":107,"text":88340},{"id":88373,"depth":107,"text":88374},{"id":89735,"depth":91,"text":89736,"children":95240},[95241,95242],{"id":89739,"depth":107,"text":89740},{"id":89776,"depth":107,"text":89777},{"id":91131,"depth":91,"text":91132},{"id":91502,"depth":91,"text":91503,"children":95245},[95246,95247],{"id":91506,"depth":107,"text":91507},{"id":91540,"depth":107,"text":91541},{"id":92269,"depth":91,"text":92270,"children":95249},[95250,95251,95252,95253],{"id":92273,"depth":107,"text":92274},{"id":93231,"depth":107,"text":93232},{"id":94173,"depth":107,"text":94174},{"id":94247,"depth":107,"text":94248},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79118,"description":2546},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95260,"title":95261,"body":95262,"description":95273,"extension":2547,"meta":95274,"navigation":2549,"path":95276,"seo":95277,"stem":95278,"__hash__":95279},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95263,"toc":95271},[95264],[24,95265,95266,95267],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[417,95268,95269],{"href":95269,"rel":95270},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26332],{"title":72,"searchDepth":91,"depth":91,"links":95272},[],"三件套第三套学习",{"category":95275},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95261,"description":95273},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95281,"title":95282,"body":95283,"description":2546,"extension":2547,"meta":95388,"navigation":2549,"path":95389,"seo":95390,"stem":95391,"__hash__":95392},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95284,"toc":95383},[95285,95292,95295,95298,95301,95305,95314,95317,95320,95324,95333,95336,95340,95343,95363,95366,95380],[24,95286,95287],{},[417,95288,95291],{"href":95289,"rel":95290},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26332],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95293,95282],{"id":95294},"_1安装",[24,95296,95297],{},"numpy是科学计算基础库,底层是C语言",[24,95299,95300],{},"三种方式：",[14,95302,95304],{"id":95303},"_11-通过pip安装","1.1 通过pip安装",[67,95306,95308],{"className":32846,"code":95307,"language":32848,"meta":72,"style":72},"pip install numpy\n",[74,95309,95310],{"__ignoreMap":72},[77,95311,95312],{"class":79,"line":80},[77,95313,95307],{"class":87},[24,95315,95316],{},"首选方式，自动处理依赖项",[24,95318,95319],{},"在提示系统命令符中使用cmd",[14,95321,95323],{"id":95322},"_12-通过anaconda安装","1.2 通过Anaconda安装",[67,95325,95327],{"className":32846,"code":95326,"language":32848,"meta":72,"style":72},"conda install numpy\n",[74,95328,95329],{"__ignoreMap":72},[77,95330,95331],{"class":79,"line":80},[77,95332,95326],{"class":87},[24,95334,95335],{},"自动解决环境依赖",[14,95337,95339],{"id":95338},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[24,95341,95342],{},"对于Debian\u002FUbuntu",[67,95344,95346],{"className":32846,"code":95345,"language":32848,"meta":72,"style":72},"sudo apt-get install python3-numpy\n",[74,95347,95348],{"__ignoreMap":72},[77,95349,95350,95353,95355,95358,95360],{"class":79,"line":80},[77,95351,95352],{"class":87},"sudo apt",[77,95354,3145],{"class":2123},[77,95356,95357],{"class":87},"get install python3",[77,95359,3145],{"class":2123},[77,95361,95362],{"class":87},"numpy\n",[24,95364,95365],{},"对于Fedora:",[67,95367,95369],{"className":32846,"code":95368,"language":32848,"meta":72,"style":72},"sudo dnf install python3-numpy\n",[74,95370,95371],{"__ignoreMap":72},[77,95372,95373,95376,95378],{"class":79,"line":80},[77,95374,95375],{"class":87},"sudo dnf install python3",[77,95377,3145],{"class":2123},[77,95379,95362],{"class":87},[2520,95381,95382],{},"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":72,"searchDepth":91,"depth":91,"links":95384},[95385,95386,95387],{"id":95303,"depth":91,"text":95304},{"id":95322,"depth":91,"text":95323},{"id":95338,"depth":91,"text":95339},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95282,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95394,"title":95395,"body":95396,"description":2546,"extension":2547,"meta":95509,"navigation":2549,"path":95510,"seo":95511,"stem":95512,"__hash__":95513},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95397,"toc":95507},[95398,95401,95404,95407,95410,95413,95416,95419,95422,95425,95501,95504],[10,95399,95395],{"id":95400},"_10算数函数",[24,95402,95403],{},"加减乘除运算跟python基础语法没区别",[24,95405,95406],{},"除了python那种方法外还可以使用函数",[24,95408,95409],{},"加：np.add(a,b)",[24,95411,95412],{},"减：np.subtract(a,b)",[24,95414,95415],{},"乘：np.multiply(a,b)",[24,95417,95418],{},"除：np.divide(a,b) == a\u002Fb",[24,95420,95421],{},"取余：np.mod(a,b) == a%b",[24,95423,95424],{},"必须会的用法：",[67,95426,95428],{"className":32846,"code":95427,"language":32848,"meta":72,"style":72},"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",[74,95429,95430,95452,95473,95483,95496],{"__ignoreMap":72},[77,95431,95432,95434,95436,95439,95441,95444,95446,95448,95450],{"class":79,"line":80},[77,95433,417],{"class":87},[77,95435,268],{"class":2123},[77,95437,95438],{"class":87},"np.arange(",[77,95440,3034],{"class":94},[77,95442,95443],{"class":87},").reshape(",[77,95445,2690],{"class":94},[77,95447,2992],{"class":87},[77,95449,2690],{"class":94},[77,95451,2628],{"class":87},[77,95453,95454,95456,95458,95461,95463,95465,95467,95469,95471],{"class":79,"line":91},[77,95455,2877],{"class":87},[77,95457,268],{"class":2123},[77,95459,95460],{"class":87},"np.array([",[77,95462,3059],{"class":94},[77,95464,2992],{"class":87},[77,95466,3059],{"class":94},[77,95468,2992],{"class":87},[77,95470,3059],{"class":94},[77,95472,7132],{"class":87},[77,95474,95475,95478,95480],{"class":79,"line":107},[77,95476,95477],{"class":87},"result",[77,95479,268],{"class":2123},[77,95481,95482],{"class":87},"np.empty_like(a)\n",[77,95484,95485,95488,95491,95493],{"class":79,"line":191},[77,95486,95487],{"class":87},"np.add(a,b,",[77,95489,95490],{"class":7691},"out",[77,95492,268],{"class":2123},[77,95494,95495],{"class":87},"result)\n",[77,95497,95498],{"class":79,"line":1543},[77,95499,95500],{"class":87},"result\n",[24,95502,95503],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2520,95505,95506],{},"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":72,"searchDepth":91,"depth":91,"links":95508},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95395,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95515,"title":95516,"body":95517,"description":2546,"extension":2547,"meta":96279,"navigation":2549,"path":96280,"seo":96281,"stem":96282,"__hash__":96283},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95518,"toc":96266},[95519,95522,95525,95528,95532,95571,95575,95619,95679,95683,95686,95725,95728,95773,95777,95813,95817,95886,95890,95954,95958,95961,95964,95967,95970,96006,96010,96050,96054,96126,96129,96133,96196,96200,96263],[10,95520,95516],{"id":95521},"_11统计函数",[24,95523,95524],{},"sum max min mean",[24,95526,95527],{},"这些有axis参数，可以指定方向",[14,95529,95531],{"id":95530},"_111-sum求和函数","11.1 sum()求和函数",[67,95533,95535],{"className":32846,"code":95534,"language":32848,"meta":72,"style":72},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[74,95536,95537,95542,95563],{"__ignoreMap":72},[77,95538,95539],{"class":79,"line":80},[77,95540,95541],{"class":323},"#创建一维数组\n",[77,95543,95544,95546,95548,95551,95553,95555,95557,95559,95561],{"class":79,"line":91},[77,95545,417],{"class":87},[77,95547,268],{"class":2123},[77,95549,95550],{"class":87},"np.random.randint(",[77,95552,2120],{"class":94},[77,95554,2992],{"class":87},[77,95556,2925],{"class":94},[77,95558,2992],{"class":87},[77,95560,3313],{"class":94},[77,95562,2628],{"class":87},[77,95564,95565,95568],{"class":79,"line":107},[77,95566,95567],{"class":87},"np.sum(a)",[77,95569,95570],{"class":323},"#求和\n",[14,95572,95574],{"id":95573},"_112-max求最大值函数","11.2 max()求最大值函数",[67,95576,95578],{"className":32846,"code":95577,"language":32848,"meta":72,"style":72},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[74,95579,95580,95584,95604,95609,95614],{"__ignoreMap":72},[77,95581,95582],{"class":79,"line":80},[77,95583,95541],{"class":323},[77,95585,95586,95588,95590,95592,95594,95596,95598,95600,95602],{"class":79,"line":91},[77,95587,417],{"class":87},[77,95589,268],{"class":2123},[77,95591,95550],{"class":87},[77,95593,2120],{"class":94},[77,95595,2992],{"class":87},[77,95597,2925],{"class":94},[77,95599,2992],{"class":87},[77,95601,3313],{"class":94},[77,95603,2628],{"class":87},[77,95605,95606],{"class":79,"line":107},[77,95607,95608],{"class":87},"np.max(a)\n",[77,95610,95611],{"class":79,"line":191},[77,95612,95613],{"class":323},"#最大索引(求最大元素的索引)arg\n",[77,95615,95616],{"class":79,"line":1543},[77,95617,95618],{"class":87},"np.argmax(a)\n",[67,95620,95622],{"className":32846,"code":95621,"language":32848,"meta":72,"style":72},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[74,95623,95624,95645,95665,95669],{"__ignoreMap":72},[77,95625,95626,95628,95630,95633,95635,95637,95639,95641,95643],{"class":79,"line":80},[77,95627,13392],{"class":87},[77,95629,268],{"class":2123},[77,95631,95632],{"class":87}," np.array([",[77,95634,2120],{"class":94},[77,95636,680],{"class":87},[77,95638,2933],{"class":94},[77,95640,680],{"class":87},[77,95642,2690],{"class":94},[77,95644,7132],{"class":87},[77,95646,95647,95649,95651,95653,95655,95657,95659,95661,95663],{"class":79,"line":91},[77,95648,13418],{"class":87},[77,95650,268],{"class":2123},[77,95652,95632],{"class":87},[77,95654,2690],{"class":94},[77,95656,680],{"class":87},[77,95658,2696],{"class":94},[77,95660,680],{"class":87},[77,95662,2907],{"class":94},[77,95664,7132],{"class":87},[77,95666,95667],{"class":79,"line":107},[77,95668,4875],{"emptyLinePlaceholder":2549},[77,95670,95671,95673,95676],{"class":79,"line":191},[77,95672,32883],{"class":94},[77,95674,95675],{"class":87},"(np.maximum(a, b))   ",[77,95677,95678],{"class":323},"# [3 5 4]，每个位置上取较大值\n",[14,95680,95682],{"id":95681},"_113-mean求平均值函数","11.3 mean()求平均值函数",[24,95684,95685],{},"①一维数组：",[67,95687,95689],{"className":32846,"code":95688,"language":32848,"meta":72,"style":72},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[74,95690,95691,95695,95715,95720],{"__ignoreMap":72},[77,95692,95693],{"class":79,"line":80},[77,95694,95541],{"class":323},[77,95696,95697,95699,95701,95703,95705,95707,95709,95711,95713],{"class":79,"line":91},[77,95698,417],{"class":87},[77,95700,268],{"class":2123},[77,95702,95550],{"class":87},[77,95704,2120],{"class":94},[77,95706,2992],{"class":87},[77,95708,2925],{"class":94},[77,95710,2992],{"class":87},[77,95712,3313],{"class":94},[77,95714,2628],{"class":87},[77,95716,95717],{"class":79,"line":107},[77,95718,95719],{"class":323},"#求平均值\n",[77,95721,95722],{"class":79,"line":191},[77,95723,95724],{"class":87},"np.mean(a)\n",[24,95726,95727],{},"②二维数组",[67,95729,95731],{"className":32846,"code":95730,"language":32848,"meta":72,"style":72},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[74,95732,95733,95738,95763,95768],{"__ignoreMap":72},[77,95734,95735],{"class":79,"line":80},[77,95736,95737],{"class":323},"#二维数组\n",[77,95739,95740,95743,95745,95747,95749,95751,95753,95755,95757,95759,95761],{"class":79,"line":91},[77,95741,95742],{"class":87},"aa",[77,95744,268],{"class":2123},[77,95746,95438],{"class":87},[77,95748,2120],{"class":94},[77,95750,2992],{"class":87},[77,95752,3136],{"class":94},[77,95754,95443],{"class":87},[77,95756,2690],{"class":94},[77,95758,2992],{"class":87},[77,95760,2907],{"class":94},[77,95762,2628],{"class":87},[77,95764,95765],{"class":79,"line":107},[77,95766,95767],{"class":323},"#对数组中的所有数求平均\n",[77,95769,95770],{"class":79,"line":191},[77,95771,95772],{"class":87},"np.mean(aa)\n",[14,95774,95776],{"id":95775},"_114-median求中位数函数","11.4 median()求中位数函数",[67,95778,95780],{"className":32846,"code":95779,"language":32848,"meta":72,"style":72},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[74,95781,95782,95787,95803,95808],{"__ignoreMap":72},[77,95783,95784],{"class":79,"line":80},[77,95785,95786],{"class":323},"#求中位数\n",[77,95788,95789,95791,95793,95795,95797,95799,95801],{"class":79,"line":91},[77,95790,2877],{"class":87},[77,95792,268],{"class":2123},[77,95794,95438],{"class":87},[77,95796,2120],{"class":94},[77,95798,2992],{"class":87},[77,95800,3059],{"class":94},[77,95802,2628],{"class":87},[77,95804,95805],{"class":79,"line":107},[77,95806,95807],{"class":87},"np.median(b)\n",[77,95809,95810],{"class":79,"line":191},[77,95811,95812],{"class":323},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95814,95816],{"id":95815},"_115-power求幂运算函数","11.5 power()求幂运算函数",[67,95818,95820],{"className":32846,"code":95819,"language":32848,"meta":72,"style":72},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[74,95821,95822,95838,95843,95848,95857,95862,95871],{"__ignoreMap":72},[77,95823,95824,95826,95828,95830,95832,95834,95836],{"class":79,"line":80},[77,95825,2877],{"class":87},[77,95827,268],{"class":2123},[77,95829,95438],{"class":87},[77,95831,2120],{"class":94},[77,95833,2992],{"class":87},[77,95835,3059],{"class":94},[77,95837,2628],{"class":87},[77,95839,95840],{"class":79,"line":91},[77,95841,95842],{"class":323},"#幂运算\n",[77,95844,95845],{"class":79,"line":107},[77,95846,95847],{"class":323},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[77,95849,95850,95853,95855],{"class":79,"line":191},[77,95851,95852],{"class":87},"np.power(b,",[77,95854,2696],{"class":94},[77,95856,2628],{"class":87},[77,95858,95859],{"class":79,"line":1543},[77,95860,95861],{"class":323},"#或者以下代码，将数据存储起来\n",[77,95863,95864,95866,95868],{"class":79,"line":1549},[77,95865,3458],{"class":87},[77,95867,268],{"class":2123},[77,95869,95870],{"class":87},"np.empty_like(b)\n",[77,95872,95873,95875,95877,95879,95881,95883],{"class":79,"line":1566},[77,95874,95852],{"class":87},[77,95876,2696],{"class":94},[77,95878,2992],{"class":87},[77,95880,95490],{"class":7691},[77,95882,268],{"class":2123},[77,95884,95885],{"class":87},"y)\n",[14,95887,95889],{"id":95888},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[67,95891,95893],{"className":32846,"code":95892,"language":32848,"meta":72,"style":72},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[74,95894,95895,95911,95916,95921,95925,95943],{"__ignoreMap":72},[77,95896,95897,95899,95901,95903,95905,95907,95909],{"class":79,"line":80},[77,95898,2877],{"class":87},[77,95900,268],{"class":2123},[77,95902,95438],{"class":87},[77,95904,2120],{"class":94},[77,95906,2992],{"class":87},[77,95908,3059],{"class":94},[77,95910,2628],{"class":87},[77,95912,95913],{"class":79,"line":91},[77,95914,95915],{"class":323},"#开方\n",[77,95917,95918],{"class":79,"line":107},[77,95919,95920],{"class":87},"np.sqrt(b)\n",[77,95922,95923],{"class":79,"line":191},[77,95924,95861],{"class":323},[77,95926,95927,95929,95931,95934,95937,95939,95941],{"class":79,"line":1543},[77,95928,3458],{"class":87},[77,95930,268],{"class":2123},[77,95932,95933],{"class":87},"np.empty_like(b,",[77,95935,95936],{"class":7691},"dtype",[77,95938,268],{"class":2123},[77,95940,2661],{"class":94},[77,95942,2628],{"class":87},[77,95944,95945,95948,95950,95952],{"class":79,"line":1549},[77,95946,95947],{"class":87},"np.sqrt(b,",[77,95949,95490],{"class":7691},[77,95951,268],{"class":2123},[77,95953,95885],{"class":87},[14,95955,95957],{"id":95956},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[24,95959,95960],{},"对数组中的元素累计求和，可指定轴",[24,95962,95963],{},"#累计求和的意思是：",[24,95965,95966],{},"a = np.array([1, 2, 3, 4])",[24,95968,95969],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[67,95971,95973],{"className":32846,"code":95972,"language":32848,"meta":72,"style":72},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[74,95974,95975,95991,95996,96001],{"__ignoreMap":72},[77,95976,95977,95979,95981,95983,95985,95987,95989],{"class":79,"line":80},[77,95978,2877],{"class":87},[77,95980,268],{"class":2123},[77,95982,95438],{"class":87},[77,95984,2120],{"class":94},[77,95986,2992],{"class":87},[77,95988,3059],{"class":94},[77,95990,2628],{"class":87},[77,95992,95993],{"class":79,"line":91},[77,95994,95995],{"class":87},"np.cumsum(b)\n",[77,95997,95998],{"class":79,"line":107},[77,95999,96000],{"class":323},"#结果：\n",[77,96002,96003],{"class":79,"line":191},[77,96004,96005],{"class":323},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,96007,96009],{"id":96008},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[67,96011,96013],{"className":32846,"code":96012,"language":32848,"meta":72,"style":72},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[74,96014,96015,96031,96036,96041,96045],{"__ignoreMap":72},[77,96016,96017,96019,96021,96023,96025,96027,96029],{"class":79,"line":80},[77,96018,2877],{"class":87},[77,96020,268],{"class":2123},[77,96022,95438],{"class":87},[77,96024,2120],{"class":94},[77,96026,2992],{"class":87},[77,96028,3059],{"class":94},[77,96030,2628],{"class":87},[77,96032,96033],{"class":79,"line":91},[77,96034,96035],{"class":323},"#对数组中的元素累计求积，可指定轴\n",[77,96037,96038],{"class":79,"line":107},[77,96039,96040],{"class":87},"np.cumprod(b)\n",[77,96042,96043],{"class":79,"line":191},[77,96044,96000],{"class":323},[77,96046,96047],{"class":79,"line":1543},[77,96048,96049],{"class":323},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96051,96053],{"id":96052},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[67,96055,96057],{"className":32846,"code":96056,"language":32848,"meta":72,"style":72},"#删除数组中的重复数据，并对数据进行排序\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",[74,96058,96059,96064,96112,96117,96121],{"__ignoreMap":72},[77,96060,96061],{"class":79,"line":80},[77,96062,96063],{"class":323},"#删除数组中的重复数据，并对数据进行排序\n",[77,96065,96066,96068,96070,96072,96074,96076,96078,96080,96082,96084,96086,96088,96090,96092,96094,96096,96098,96100,96102,96104,96106,96108,96110],{"class":79,"line":91},[77,96067,417],{"class":87},[77,96069,268],{"class":2123},[77,96071,95460],{"class":87},[77,96073,2120],{"class":94},[77,96075,2992],{"class":87},[77,96077,2696],{"class":94},[77,96079,2992],{"class":87},[77,96081,2690],{"class":94},[77,96083,2992],{"class":87},[77,96085,3111],{"class":94},[77,96087,2992],{"class":87},[77,96089,2690],{"class":94},[77,96091,2992],{"class":87},[77,96093,3059],{"class":94},[77,96095,2992],{"class":87},[77,96097,2813],{"class":94},[77,96099,2992],{"class":87},[77,96101,1939],{"class":94},[77,96103,2992],{"class":87},[77,96105,3388],{"class":94},[77,96107,2992],{"class":87},[77,96109,2907],{"class":94},[77,96111,7132],{"class":87},[77,96113,96114],{"class":79,"line":107},[77,96115,96116],{"class":87},"np.unique(a)\n",[77,96118,96119],{"class":79,"line":191},[77,96120,96000],{"class":323},[77,96122,96123],{"class":79,"line":1543},[77,96124,96125],{"class":323},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[24,96127,96128],{},"升序形式排序",[14,96130,96132],{"id":96131},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[67,96134,96136],{"className":32846,"code":96135,"language":32848,"meta":72,"style":72},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[74,96137,96138,96186,96191],{"__ignoreMap":72},[77,96139,96140,96142,96144,96146,96148,96150,96152,96154,96156,96158,96160,96162,96164,96166,96168,96170,96172,96174,96176,96178,96180,96182,96184],{"class":79,"line":80},[77,96141,417],{"class":87},[77,96143,268],{"class":2123},[77,96145,95460],{"class":87},[77,96147,2120],{"class":94},[77,96149,2992],{"class":87},[77,96151,2696],{"class":94},[77,96153,2992],{"class":87},[77,96155,2690],{"class":94},[77,96157,2992],{"class":87},[77,96159,3111],{"class":94},[77,96161,2992],{"class":87},[77,96163,2690],{"class":94},[77,96165,2992],{"class":87},[77,96167,3059],{"class":94},[77,96169,2992],{"class":87},[77,96171,2813],{"class":94},[77,96173,2992],{"class":87},[77,96175,1939],{"class":94},[77,96177,2992],{"class":87},[77,96179,3388],{"class":94},[77,96181,2992],{"class":87},[77,96183,2907],{"class":94},[77,96185,7132],{"class":87},[77,96187,96188],{"class":79,"line":91},[77,96189,96190],{"class":323},"#返回数组中非零元素的索引\n",[77,96192,96193],{"class":79,"line":107},[77,96194,96195],{"class":87},"np.nonzero(a)\n",[14,96197,96199],{"id":96198},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[67,96201,96203],{"className":32846,"code":96202,"language":32848,"meta":72,"style":72},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[74,96204,96205,96253,96258],{"__ignoreMap":72},[77,96206,96207,96209,96211,96213,96215,96217,96219,96221,96223,96225,96227,96229,96231,96233,96235,96237,96239,96241,96243,96245,96247,96249,96251],{"class":79,"line":80},[77,96208,417],{"class":87},[77,96210,268],{"class":2123},[77,96212,95460],{"class":87},[77,96214,2120],{"class":94},[77,96216,2992],{"class":87},[77,96218,2696],{"class":94},[77,96220,2992],{"class":87},[77,96222,2690],{"class":94},[77,96224,2992],{"class":87},[77,96226,3111],{"class":94},[77,96228,2992],{"class":87},[77,96230,2690],{"class":94},[77,96232,2992],{"class":87},[77,96234,3059],{"class":94},[77,96236,2992],{"class":87},[77,96238,2813],{"class":94},[77,96240,2992],{"class":87},[77,96242,1939],{"class":94},[77,96244,2992],{"class":87},[77,96246,3388],{"class":94},[77,96248,2992],{"class":87},[77,96250,2907],{"class":94},[77,96252,7132],{"class":87},[77,96254,96255],{"class":79,"line":91},[77,96256,96257],{"class":323},"#计算一组数中最大值与最小值的差，可指定轴\n",[77,96259,96260],{"class":79,"line":107},[77,96261,96262],{"class":87},"np.ptp(a)\n",[2520,96264,96265],{},"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":72,"searchDepth":91,"depth":91,"links":96267},[96268,96269,96270,96271,96272,96273,96274,96275,96276,96277,96278],{"id":95530,"depth":91,"text":95531},{"id":95573,"depth":91,"text":95574},{"id":95681,"depth":91,"text":95682},{"id":95775,"depth":91,"text":95776},{"id":95815,"depth":91,"text":95816},{"id":95888,"depth":91,"text":95889},{"id":95956,"depth":91,"text":95957},{"id":96008,"depth":91,"text":96009},{"id":96052,"depth":91,"text":96053},{"id":96131,"depth":91,"text":96132},{"id":96198,"depth":91,"text":96199},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95516,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96285,"title":96286,"body":96287,"description":2546,"extension":2547,"meta":96942,"navigation":2549,"path":96943,"seo":96944,"stem":96945,"__hash__":96946},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96288,"toc":96930},[96289,96292,96296,96299,96515,96519,96522,96731,96735,96801,96806,96810,96813,96816,96854,96858,96861,96866,96870,96873,96876,96881,96885,96888,96892,96895,96898,96903,96907,96910,96913,96918,96922,96927],[10,96290,96286],{"id":96291},"_12其他常用函数",[14,96293,96295],{"id":96294},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[24,96297,96298],{},"将数组的数据按照行列复制扩展",[67,96300,96302],{"className":32846,"code":96301,"language":32848,"meta":72,"style":72},"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",[74,96303,96304,96320,96329,96333,96338,96343,96356,96360,96365,96370,96375,96379,96384,96408,96420,96424,96428,96433,96438,96443,96448,96452,96465,96469,96473,96478,96483,96488,96493,96498,96502,96506,96511],{"__ignoreMap":72},[77,96305,96306,96308,96310,96312,96314,96316,96318],{"class":79,"line":80},[77,96307,417],{"class":87},[77,96309,268],{"class":2123},[77,96311,95438],{"class":87},[77,96313,2120],{"class":94},[77,96315,2992],{"class":87},[77,96317,2933],{"class":94},[77,96319,2628],{"class":87},[77,96321,96322,96325,96327],{"class":79,"line":91},[77,96323,96324],{"class":87},"np.tile(a,",[77,96326,2696],{"class":94},[77,96328,2628],{"class":87},[77,96330,96331],{"class":79,"line":107},[77,96332,96000],{"class":323},[77,96334,96335],{"class":79,"line":191},[77,96336,96337],{"class":323},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[77,96339,96340],{"class":79,"line":1543},[77,96341,96342],{"class":323},"#行复制两次，列复制三次\n",[77,96344,96345,96348,96350,96352,96354],{"class":79,"line":1549},[77,96346,96347],{"class":87},"np.tile(a,(",[77,96349,2696],{"class":94},[77,96351,2992],{"class":87},[77,96353,2690],{"class":94},[77,96355,32965],{"class":87},[77,96357,96358],{"class":79,"line":1566},[77,96359,96000],{"class":323},[77,96361,96362],{"class":79,"line":1572},[77,96363,96364],{"class":271},"'''\n",[77,96366,96367],{"class":79,"line":1589},[77,96368,96369],{"class":271},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[77,96371,96372],{"class":79,"line":1595},[77,96373,96374],{"class":271},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[77,96376,96377],{"class":79,"line":4088},[77,96378,96364],{"class":271},[77,96380,96381],{"class":79,"line":4093},[77,96382,96383],{"class":323},"#创建二维数组\n",[77,96385,96386,96388,96390,96392,96394,96396,96398,96400,96402,96404,96406],{"class":79,"line":4099},[77,96387,95742],{"class":87},[77,96389,268],{"class":2123},[77,96391,95438],{"class":87},[77,96393,2120],{"class":94},[77,96395,2992],{"class":87},[77,96397,3136],{"class":94},[77,96399,95443],{"class":87},[77,96401,2907],{"class":94},[77,96403,2992],{"class":87},[77,96405,2690],{"class":94},[77,96407,2628],{"class":87},[77,96409,96410,96413,96415,96417],{"class":79,"line":4104},[77,96411,96412],{"class":87},"np.tile(aa,",[77,96414,2696],{"class":94},[77,96416,3043],{"class":87},[77,96418,96419],{"class":323},"#一个数的时候就是行\n",[77,96421,96422],{"class":79,"line":4118},[77,96423,96000],{"class":323},[77,96425,96426],{"class":79,"line":4123},[77,96427,96364],{"class":271},[77,96429,96430],{"class":79,"line":4129},[77,96431,96432],{"class":271},"array([[ 1,  2,  3,  1,  2,  3],\n",[77,96434,96435],{"class":79,"line":4150},[77,96436,96437],{"class":271},"       [ 4,  5,  6,  4,  5,  6],\n",[77,96439,96440],{"class":79,"line":4155},[77,96441,96442],{"class":271},"       [ 7,  8,  9,  7,  8,  9],\n",[77,96444,96445],{"class":79,"line":4169},[77,96446,96447],{"class":271},"       [10, 11, 12, 10, 11, 12]])\n",[77,96449,96450],{"class":79,"line":4174},[77,96451,96364],{"class":271},[77,96453,96454,96457,96459,96461,96463],{"class":79,"line":4203},[77,96455,96456],{"class":87},"np.tile(aa,(",[77,96458,2696],{"class":94},[77,96460,2992],{"class":87},[77,96462,2690],{"class":94},[77,96464,32965],{"class":87},[77,96466,96467],{"class":79,"line":4208},[77,96468,96000],{"class":323},[77,96470,96471],{"class":79,"line":4225},[77,96472,96364],{"class":271},[77,96474,96475],{"class":79,"line":4230},[77,96476,96477],{"class":271},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[77,96479,96480],{"class":79,"line":4235},[77,96481,96482],{"class":271},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[77,96484,96485],{"class":79,"line":4240},[77,96486,96487],{"class":271},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[77,96489,96490],{"class":79,"line":4254},[77,96491,96492],{"class":271},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[77,96494,96495],{"class":79,"line":4259},[77,96496,96497],{"class":271},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[77,96499,96500],{"class":79,"line":5052},[77,96501,96482],{"class":271},[77,96503,96504],{"class":79,"line":5066},[77,96505,96487],{"class":271},[77,96507,96508],{"class":79,"line":5074},[77,96509,96510],{"class":271},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[77,96512,96513],{"class":79,"line":5079},[77,96514,96364],{"class":271},[14,96516,96518],{"id":96517},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[24,96520,96521],{},"repeat()将数组中的每个元素重复若干次",[67,96523,96525],{"className":32846,"code":96524,"language":32848,"meta":72,"style":72},"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",[74,96526,96527,96543,96552,96556,96561,96585,96590,96599,96603,96608,96612,96617,96633,96637,96641,96646,96651,96656,96660,96665,96669,96674,96679,96683,96699,96703,96707,96712,96717,96722,96727],{"__ignoreMap":72},[77,96528,96529,96531,96533,96535,96537,96539,96541],{"class":79,"line":80},[77,96530,417],{"class":87},[77,96532,268],{"class":2123},[77,96534,95438],{"class":87},[77,96536,2120],{"class":94},[77,96538,2992],{"class":87},[77,96540,2933],{"class":94},[77,96542,2628],{"class":87},[77,96544,96545,96548,96550],{"class":79,"line":91},[77,96546,96547],{"class":87},"np.repeat(a,",[77,96549,2690],{"class":94},[77,96551,2628],{"class":87},[77,96553,96554],{"class":79,"line":107},[77,96555,96000],{"class":323},[77,96557,96558],{"class":79,"line":191},[77,96559,96560],{"class":323},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[77,96562,96563,96565,96567,96569,96571,96573,96575,96577,96579,96581,96583],{"class":79,"line":1543},[77,96564,95742],{"class":87},[77,96566,268],{"class":2123},[77,96568,95438],{"class":87},[77,96570,2120],{"class":94},[77,96572,2992],{"class":87},[77,96574,3136],{"class":94},[77,96576,95443],{"class":87},[77,96578,2907],{"class":94},[77,96580,2992],{"class":87},[77,96582,2690],{"class":94},[77,96584,2628],{"class":87},[77,96586,96587],{"class":79,"line":1549},[77,96588,96589],{"class":323},"#这个重复之后二维变成一维\n",[77,96591,96592,96595,96597],{"class":79,"line":1566},[77,96593,96594],{"class":87},"np.repeat(aa,",[77,96596,2696],{"class":94},[77,96598,2628],{"class":87},[77,96600,96601],{"class":79,"line":1572},[77,96602,96364],{"class":271},[77,96604,96605],{"class":79,"line":1589},[77,96606,96607],{"class":271},"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",[77,96609,96610],{"class":79,"line":1595},[77,96611,96364],{"class":271},[77,96613,96614],{"class":79,"line":4088},[77,96615,96616],{"class":323},"#指定axis\n",[77,96618,96619,96621,96623,96625,96627,96629,96631],{"class":79,"line":4093},[77,96620,96594],{"class":87},[77,96622,2696],{"class":94},[77,96624,2992],{"class":87},[77,96626,49980],{"class":7691},[77,96628,268],{"class":2123},[77,96630,1939],{"class":94},[77,96632,2628],{"class":87},[77,96634,96635],{"class":79,"line":4099},[77,96636,96000],{"class":323},[77,96638,96639],{"class":79,"line":4104},[77,96640,96364],{"class":271},[77,96642,96643],{"class":79,"line":4118},[77,96644,96645],{"class":271},"array([[ 1,  2,  3],\n",[77,96647,96648],{"class":79,"line":4123},[77,96649,96650],{"class":271},"       [ 1,  2,  3],\n",[77,96652,96653],{"class":79,"line":4129},[77,96654,96655],{"class":271},"       [ 4,  5,  6],\n",[77,96657,96658],{"class":79,"line":4150},[77,96659,96655],{"class":271},[77,96661,96662],{"class":79,"line":4155},[77,96663,96664],{"class":271},"       [ 7,  8,  9],\n",[77,96666,96667],{"class":79,"line":4169},[77,96668,96664],{"class":271},[77,96670,96671],{"class":79,"line":4174},[77,96672,96673],{"class":271},"       [10, 11, 12],\n",[77,96675,96676],{"class":79,"line":4203},[77,96677,96678],{"class":271},"       [10, 11, 12]])\n",[77,96680,96681],{"class":79,"line":4208},[77,96682,96364],{"class":271},[77,96684,96685,96687,96689,96691,96693,96695,96697],{"class":79,"line":4225},[77,96686,96594],{"class":87},[77,96688,2696],{"class":94},[77,96690,2992],{"class":87},[77,96692,49980],{"class":7691},[77,96694,268],{"class":2123},[77,96696,2120],{"class":94},[77,96698,2628],{"class":87},[77,96700,96701],{"class":79,"line":4230},[77,96702,96000],{"class":323},[77,96704,96705],{"class":79,"line":4235},[77,96706,96364],{"class":271},[77,96708,96709],{"class":79,"line":4240},[77,96710,96711],{"class":271},"array([[ 1,  1,  2,  2,  3,  3],\n",[77,96713,96714],{"class":79,"line":4254},[77,96715,96716],{"class":271},"       [ 4,  4,  5,  5,  6,  6],\n",[77,96718,96719],{"class":79,"line":4259},[77,96720,96721],{"class":271},"       [ 7,  7,  8,  8,  9,  9],\n",[77,96723,96724],{"class":79,"line":5052},[77,96725,96726],{"class":271},"       [10, 10, 11, 11, 12, 12]])\n",[77,96728,96729],{"class":79,"line":5066},[77,96730,96364],{"class":271},[14,96732,96734],{"id":96733},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[67,96736,96738],{"className":32846,"code":96737,"language":32848,"meta":72,"style":72},"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",[74,96739,96740,96756,96761,96773,96777,96782,96792,96796],{"__ignoreMap":72},[77,96741,96742,96744,96746,96748,96750,96752,96754],{"class":79,"line":80},[77,96743,417],{"class":87},[77,96745,268],{"class":2123},[77,96747,95438],{"class":87},[77,96749,2120],{"class":94},[77,96751,2992],{"class":87},[77,96753,2933],{"class":94},[77,96755,2628],{"class":87},[77,96757,96758],{"class":79,"line":91},[77,96759,96760],{"class":323},"#array([，2，3，4])\n",[77,96762,96763,96766,96768,96770],{"class":79,"line":107},[77,96764,96765],{"class":87},"np.roll(a,",[77,96767,2696],{"class":94},[77,96769,3043],{"class":87},[77,96771,96772],{"class":323},"#传正数向后调多少位，传负数向前调多少位\n",[77,96774,96775],{"class":79,"line":191},[77,96776,96000],{"class":323},[77,96778,96779],{"class":79,"line":1543},[77,96780,96781],{"class":323},"#array([3, 4, 1, 2])\n",[77,96783,96784,96786,96788,96790],{"class":79,"line":1549},[77,96785,96765],{"class":87},[77,96787,3145],{"class":2123},[77,96789,2120],{"class":94},[77,96791,2628],{"class":87},[77,96793,96794],{"class":79,"line":1566},[77,96795,96000],{"class":323},[77,96797,96798],{"class":79,"line":1572},[77,96799,96800],{"class":323},"#array([2, 3, 4, 1])\n",[24,96802,96803],{},[40,96804],{"alt":72,"src":96805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96807,96809],{"id":96808},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[24,96811,96812],{},"resize()重新调整数组的大小",[24,96814,96815],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[67,96817,96819],{"className":32846,"code":96818,"language":32848,"meta":72,"style":72},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[74,96820,96821,96826,96839],{"__ignoreMap":72},[77,96822,96823],{"class":79,"line":80},[77,96824,96825],{"class":323},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[77,96827,96828,96831,96833,96835,96837],{"class":79,"line":91},[77,96829,96830],{"class":87},"np.resize(aa,(",[77,96832,2696],{"class":94},[77,96834,2992],{"class":87},[77,96836,2958],{"class":94},[77,96838,32965],{"class":87},[77,96840,96841,96843,96845,96847,96849,96851],{"class":79,"line":107},[77,96842,96830],{"class":87},[77,96844,2696],{"class":94},[77,96846,2992],{"class":87},[77,96848,3034],{"class":94},[77,96850,85208],{"class":87},[77,96852,96853],{"class":323},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96855,96857],{"id":96856},"_125-placeput函数","12.5 place()\u002Fput()函数",[24,96859,96860],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[24,96862,96863],{},[40,96864],{"alt":72,"src":96865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96867,96869],{"id":96868},"_126-保存加载文件","12.6 保存加载文件",[24,96871,96872],{},"savetxt():将数据保存到txt文件中",[24,96874,96875],{},"loadtxt():从文件加载数据",[24,96877,96878],{},[40,96879],{"alt":72,"src":96880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96882,96884],{"id":96883},"_127-genfromtxt函数","12.7 genfromtxt()函数",[24,96886,96887],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96889,96891],{"id":96890},"_128-anyall函数","12.8 any()\u002Fall()函数",[24,96893,96894],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[24,96896,96897],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[24,96899,96900],{},[40,96901],{"alt":72,"src":96902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96904,96906],{"id":96905},"_129-where语句","12.9 where语句",[24,96908,96909],{},"np.where(条件,x,y)",[24,96911,96912],{},"如果条件为True,对应值为x,否则对应值为y",[24,96914,96915],{},[40,96916],{"alt":72,"src":96917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96919,96921],{"id":96920},"_1210-dot矩阵","12.10 dot()矩阵",[24,96923,96924],{},[40,96925],{"alt":72,"src":96926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2520,96928,96929],{},"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":72,"searchDepth":91,"depth":91,"links":96931},[96932,96933,96934,96935,96936,96937,96938,96939,96940,96941],{"id":96294,"depth":91,"text":96295},{"id":96517,"depth":91,"text":96518},{"id":96733,"depth":91,"text":96734},{"id":96808,"depth":91,"text":96809},{"id":96856,"depth":91,"text":96857},{"id":96868,"depth":91,"text":96869},{"id":96883,"depth":91,"text":96884},{"id":96890,"depth":91,"text":96891},{"id":96905,"depth":91,"text":96906},{"id":96920,"depth":91,"text":96921},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96286,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96948,"title":96949,"body":96950,"description":2546,"extension":2547,"meta":97303,"navigation":2549,"path":97304,"seo":97305,"stem":97306,"__hash__":97307},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96951,"toc":97301},[96952,96955,96958,96961,96964,96967,97032,97034,97298],[10,96953,96949],{"id":96954},"_13数组排序",[24,96956,96957],{},"排序主要用到的方法是np.sort和np.argsort",[24,96959,96960],{},"其中np.sort()对数组直接排序",[24,96962,96963],{},"而np.argsort()是返回排序后的原始索引",[24,96965,96966],{},"①一维数组",[67,96968,96970],{"className":32846,"code":96969,"language":32848,"meta":72,"style":72},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[74,96971,96972,96976,97016,97024],{"__ignoreMap":72},[77,96973,96974],{"class":79,"line":80},[77,96975,95541],{"class":323},[77,96977,96978,96980,96982,96984,96986,96988,96990,96992,96994,96996,96998,97000,97002,97004,97006,97008,97010,97012,97014],{"class":79,"line":91},[77,96979,417],{"class":87},[77,96981,268],{"class":2123},[77,96983,95460],{"class":87},[77,96985,2690],{"class":94},[77,96987,2992],{"class":87},[77,96989,3111],{"class":94},[77,96991,2992],{"class":87},[77,96993,3009],{"class":94},[77,96995,2992],{"class":87},[77,96997,3388],{"class":94},[77,96999,2992],{"class":87},[77,97001,2893],{"class":94},[77,97003,2992],{"class":87},[77,97005,3506],{"class":94},[77,97007,2992],{"class":87},[77,97009,2958],{"class":94},[77,97011,2992],{"class":87},[77,97013,3059],{"class":94},[77,97015,7132],{"class":87},[77,97017,97018,97021],{"class":79,"line":107},[77,97019,97020],{"class":87},"np.sort(a)",[77,97022,97023],{"class":323},"#升序排序\n",[77,97025,97026,97029],{"class":79,"line":191},[77,97027,97028],{"class":87},"np.argsort(a)",[77,97030,97031],{"class":323},"#按照元素大小来索引排序\n",[24,97033,95727],{},[67,97035,97037],{"className":32846,"code":97036,"language":32848,"meta":72,"style":72},"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",[74,97038,97039,97051,97077,97082,97086,97091,97096,97101,97106,97110,97118,97122,97127,97132,97137,97142,97146,97151,97164,97168,97173,97178,97183,97188,97192,97197,97209,97213,97217,97221,97225,97229,97233,97238,97253,97258,97267,97272,97276,97280,97285,97289,97294],{"__ignoreMap":72},[77,97040,97041,97044,97046,97048],{"class":79,"line":80},[77,97042,97043],{"class":87},"np.random.seed(",[77,97045,1939],{"class":94},[77,97047,3043],{"class":87},[77,97049,97050],{"class":323},"#保证每次值一样\n",[77,97052,97053,97055,97057,97059,97061,97063,97065,97067,97069,97071,97073,97075],{"class":79,"line":91},[77,97054,95742],{"class":87},[77,97056,268],{"class":2123},[77,97058,95550],{"class":87},[77,97060,2925],{"class":94},[77,97062,2992],{"class":87},[77,97064,33963],{"class":7691},[77,97066,268],{"class":2123},[77,97068,2622],{"class":87},[77,97070,2907],{"class":94},[77,97072,2992],{"class":87},[77,97074,2958],{"class":94},[77,97076,32965],{"class":87},[77,97078,97079],{"class":79,"line":107},[77,97080,97081],{"class":323},"#原数组：\n",[77,97083,97084],{"class":79,"line":191},[77,97085,96364],{"class":271},[77,97087,97088],{"class":79,"line":1543},[77,97089,97090],{"class":271},"array([[44, 47, 64, 67, 67,  9],\n",[77,97092,97093],{"class":79,"line":1549},[77,97094,97095],{"class":271},"       [83, 21, 36, 87, 70, 88],\n",[77,97097,97098],{"class":79,"line":1566},[77,97099,97100],{"class":271},"       [88, 12, 58, 65, 39, 87],\n",[77,97102,97103],{"class":79,"line":1572},[77,97104,97105],{"class":271},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[77,97107,97108],{"class":79,"line":1589},[77,97109,96364],{"class":271},[77,97111,97112,97115],{"class":79,"line":1595},[77,97113,97114],{"class":87},"np.sort(aa)",[77,97116,97117],{"class":323},"#每行进行了排序\n",[77,97119,97120],{"class":79,"line":4088},[77,97121,96364],{"class":271},[77,97123,97124],{"class":79,"line":4093},[77,97125,97126],{"class":271},"array([[ 9, 44, 47, 64, 67, 67],\n",[77,97128,97129],{"class":79,"line":4099},[77,97130,97131],{"class":271},"       [21, 36, 70, 83, 87, 88],\n",[77,97133,97134],{"class":79,"line":4104},[77,97135,97136],{"class":271},"       [12, 39, 58, 65, 87, 88],\n",[77,97138,97139],{"class":79,"line":4118},[77,97140,97141],{"class":271},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[77,97143,97144],{"class":79,"line":4123},[77,97145,96364],{"class":271},[77,97147,97148],{"class":79,"line":4129},[77,97149,97150],{"class":323},"#axis=0时\n",[77,97152,97153,97156,97158,97160,97162],{"class":79,"line":4150},[77,97154,97155],{"class":87},"np.sort(aa,",[77,97157,49980],{"class":7691},[77,97159,268],{"class":2123},[77,97161,1939],{"class":94},[77,97163,2628],{"class":87},[77,97165,97166],{"class":79,"line":4155},[77,97167,96364],{"class":271},[77,97169,97170],{"class":79,"line":4169},[77,97171,97172],{"class":271},"array([[44, 12, 36, 37, 25,  9],\n",[77,97174,97175],{"class":79,"line":4174},[77,97176,97177],{"class":271},"       [46, 21, 58, 65, 39, 77],\n",[77,97179,97180],{"class":79,"line":4203},[77,97181,97182],{"class":271},"       [83, 47, 64, 67, 67, 87],\n",[77,97184,97185],{"class":79,"line":4208},[77,97186,97187],{"class":271},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[77,97189,97190],{"class":79,"line":4225},[77,97191,96364],{"class":271},[77,97193,97194],{"class":79,"line":4230},[77,97195,97196],{"class":323},"#axis=1时,为默认值\n",[77,97198,97199,97201,97203,97205,97207],{"class":79,"line":4235},[77,97200,97155],{"class":87},[77,97202,49980],{"class":7691},[77,97204,268],{"class":2123},[77,97206,2120],{"class":94},[77,97208,2628],{"class":87},[77,97210,97211],{"class":79,"line":4240},[77,97212,96364],{"class":271},[77,97214,97215],{"class":79,"line":4254},[77,97216,97126],{"class":271},[77,97218,97219],{"class":79,"line":4259},[77,97220,97131],{"class":271},[77,97222,97223],{"class":79,"line":5052},[77,97224,97136],{"class":271},[77,97226,97227],{"class":79,"line":5066},[77,97228,97141],{"class":271},[77,97230,97231],{"class":79,"line":5074},[77,97232,96364],{"class":271},[77,97234,97235],{"class":79,"line":5079},[77,97236,97237],{"class":323},"#按最后一列排序\n",[77,97239,97240,97242,97244,97247,97249,97251],{"class":79,"line":5085},[77,97241,2877],{"class":87},[77,97243,268],{"class":2123},[77,97245,97246],{"class":87},"aa[:,",[77,97248,3145],{"class":2123},[77,97250,2120],{"class":94},[77,97252,35713],{"class":87},[77,97254,97255],{"class":79,"line":5091},[77,97256,97257],{"class":323},"#获取最后一列排好序的索引\n",[77,97259,97260,97262,97264],{"class":79,"line":5096},[77,97261,33],{"class":87},[77,97263,268],{"class":2123},[77,97265,97266],{"class":87},"np.argsort(b)\n",[77,97268,97269],{"class":79,"line":10422},[77,97270,97271],{"class":87},"aa[index]\n",[77,97273,97274],{"class":79,"line":10446},[77,97275,96364],{"class":271},[77,97277,97278],{"class":79,"line":10451},[77,97279,97090],{"class":271},[77,97281,97282],{"class":79,"line":10457},[77,97283,97284],{"class":271},"       [46, 88, 81, 37, 25, 77],\n",[77,97286,97287],{"class":79,"line":10484},[77,97288,97100],{"class":271},[77,97290,97291],{"class":79,"line":10489},[77,97292,97293],{"class":271},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[77,97295,97296],{"class":79,"line":10495},[77,97297,96364],{"class":271},[2520,97299,97300],{},"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":72,"searchDepth":91,"depth":91,"links":97302},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96949,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97309,"title":97310,"body":97311,"description":2546,"extension":2547,"meta":97341,"navigation":2549,"path":97342,"seo":97343,"stem":97344,"__hash__":97345},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97312,"toc":97339},[97313,97316,97319,97322,97325,97328,97331,97334],[10,97314,97310],{"id":97315},"_14广播机制",[24,97317,97318],{},"广播的规则：",[24,97320,97321],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[24,97323,97324],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[24,97326,97327],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[24,97329,97330],{},"3.如果没有维度形状为1，则会引发异常",[24,97332,97333],{},"也就是只有维度或者个数为1才可以进行广播操作",[24,97335,97336],{},[40,97337],{"alt":72,"src":97338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":72,"searchDepth":91,"depth":91,"links":97340},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97310,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97347,"title":97348,"body":97349,"description":2546,"extension":2547,"meta":97447,"navigation":2549,"path":97448,"seo":97449,"stem":97450,"__hash__":97451},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97350,"toc":97445},[97351,97354,97357,97442],[10,97352,97348],{"id":97353},"_15比较掩码",[24,97355,97356],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[67,97358,97360],{"className":32846,"code":97359,"language":32848,"meta":72,"style":72},"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",[74,97361,97362,97408,97419,97433,97437],{"__ignoreMap":72},[77,97363,97364,97366,97368,97371,97373,97375,97377,97379,97381,97383,97385,97387,97389,97391,97393,97395,97397,97399,97401,97403,97405],{"class":79,"line":80},[77,97365,417],{"class":87},[77,97367,268],{"class":2123},[77,97369,97370],{"class":87},"np.array([[",[77,97372,2120],{"class":94},[77,97374,2992],{"class":87},[77,97376,2696],{"class":94},[77,97378,2992],{"class":87},[77,97380,2690],{"class":94},[77,97382,50496],{"class":87},[77,97384,3085],{"class":94},[77,97386,2992],{"class":87},[77,97388,3111],{"class":94},[77,97390,2992],{"class":87},[77,97392,3136],{"class":94},[77,97394,50496],{"class":87},[77,97396,3338],{"class":94},[77,97398,2992],{"class":87},[77,97400,3363],{"class":94},[77,97402,2992],{"class":87},[77,97404,3388],{"class":94},[77,97406,97407],{"class":87},"]])\n",[77,97409,97410,97412,97414,97416],{"class":79,"line":91},[77,97411,417],{"class":87},[77,97413,260],{"class":2123},[77,97415,3313],{"class":94},[77,97417,97418],{"class":323},"#结果是一个由True,False组成的数组\n",[77,97420,97421,97424,97426,97428,97430],{"class":79,"line":107},[77,97422,97423],{"class":87},"a[a",[77,97425,260],{"class":2123},[77,97427,3313],{"class":94},[77,97429,3552],{"class":87},[77,97431,97432],{"class":323},"#小于20的元素会存到这个数组中\n",[77,97434,97435],{"class":79,"line":191},[77,97436,96000],{"class":323},[77,97438,97439],{"class":79,"line":1543},[77,97440,97441],{"class":323},"#array([ 1,  2,  3, 11, 12, 13])\n",[2520,97443,97444],{},"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":72,"searchDepth":91,"depth":91,"links":97446},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97348,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97453,"title":97454,"body":97455,"description":2546,"extension":2547,"meta":97547,"navigation":2549,"path":97548,"seo":97549,"stem":97550,"__hash__":97551},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97456,"toc":97545},[97457,97460,97463,97466,97469,97472,97537,97542],[10,97458,97454],{"id":97459},"_16魔法命令time",[24,97461,97462],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[24,97464,97465],{},"%:行模式",[24,97467,97468],{},"%%:单元格模式",[24,97470,97471],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[67,97473,97475],{"className":32846,"code":97474,"language":32848,"meta":72,"style":72},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[74,97476,97477,97482,97489,97494,97503,97516,97520,97528],{"__ignoreMap":72},[77,97478,97479],{"class":79,"line":80},[77,97480,97481],{"class":323},"#程序执行时间\n",[77,97483,97484,97486],{"class":79,"line":91},[77,97485,32860],{"class":2123},[77,97487,97488],{"class":87}," time \n",[77,97490,97491],{"class":79,"line":107},[77,97492,97493],{"class":323},"#获取时间\n",[77,97495,97496,97499,97501],{"class":79,"line":191},[77,97497,97498],{"class":87},"start",[77,97500,268],{"class":2123},[77,97502,34885],{"class":87},[77,97504,97505,97508,97511,97513],{"class":79,"line":1543},[77,97506,97507],{"class":87},"time.sleep(",[77,97509,97510],{"class":94},"0.4",[77,97512,3043],{"class":87},[77,97514,97515],{"class":323},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[77,97517,97518],{"class":79,"line":1549},[77,97519,97493],{"class":323},[77,97521,97522,97524,97526],{"class":79,"line":1566},[77,97523,48267],{"class":87},[77,97525,268],{"class":2123},[77,97527,34885],{"class":87},[77,97529,97530,97532,97534],{"class":79,"line":1572},[77,97531,48267],{"class":87},[77,97533,3145],{"class":2123},[77,97535,97536],{"class":87},"start\n",[24,97538,97539],{},[40,97540],{"alt":72,"src":97541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2520,97543,97544],{},"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":72,"searchDepth":91,"depth":91,"links":97546},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97454,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97553,"title":97554,"body":97555,"description":2546,"extension":2547,"meta":97590,"navigation":2549,"path":97591,"seo":97592,"stem":97593,"__hash__":97594},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97556,"toc":97588},[97557,97560,97563,97566,97569,97572,97575,97578,97583],[10,97558,97554],{"id":97559},"_17魔法命令timeit",[24,97561,97562],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[24,97564,97565],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[24,97567,97568],{},"单元格模式：",[24,97570,97571],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[24,97573,97574],{},"初始化语句执行次数由轮数来决定",[24,97576,97577],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[24,97579,97580],{},[40,97581],{"alt":72,"src":97582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[24,97584,97585],{},[40,97586],{"alt":72,"src":97587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":72,"searchDepth":91,"depth":91,"links":97589},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97554,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97596,"title":97597,"body":97598,"description":2546,"extension":2547,"meta":97616,"navigation":2549,"path":97617,"seo":97618,"stem":97619,"__hash__":97620},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97599,"toc":97614},[97600,97603,97606,97609],[10,97601,97597],{"id":97602},"_18魔法命令writefile和run",[24,97604,97605],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[24,97607,97608],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[24,97610,97611],{},[40,97612],{"alt":72,"src":97613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":72,"searchDepth":91,"depth":91,"links":97615},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97597,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97622,"title":97623,"body":97624,"description":2546,"extension":2547,"meta":97677,"navigation":2549,"path":97678,"seo":97679,"stem":97680,"__hash__":97681},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97625,"toc":97675},[97626,97629,97632,97634,97637,97640,97645,97648,97651,97654,97657,97660,97663,97666,97669,97672],[10,97627,97623],{"id":97628},"_19魔法命令memit",[24,97630,97631],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[24,97633,27067],{},[24,97635,97636],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[24,97638,97639],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[24,97641,97642],{},[40,97643],{"alt":72,"src":97644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[24,97646,97647],{},"补充：",[24,97649,97650],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[24,97652,97653],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[24,97655,97656],{},"解决方法：",[24,97658,97659],{},"1.cmd",[24,97661,97662],{},"2.依次输入以下代码：",[24,97664,97665],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[24,97667,97668],{},"pip install --upgrade ipython",[24,97670,97671],{},"#升级 memory_profiler 和 setuptools",[24,97673,97674],{},"pip install --upgrade memory_profiler setuptools",{"title":72,"searchDepth":91,"depth":91,"links":97676},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97623,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97683,"title":97684,"body":97685,"description":2546,"extension":2547,"meta":99331,"navigation":2549,"path":99332,"seo":99333,"stem":99334,"__hash__":99335},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97686,"toc":99301},[97687,97690,97694,97698,97759,97762,97767,97771,97776,97781,97786,97791,97794,97799,97803,97807,97840,97843,97846,97849,97901,97904,97940,97943,97985,97989,98010,98012,98049,98051,98056,98058,98063,98067,98070,98098,98102,98106,98159,98163,98255,98259,98263,98266,98271,98275,98300,98305,98309,98312,98315,98318,98321,98324,98327,98330,98342,98346,98350,98353,98385,98388,98411,98414,98440,98443,98469,98472,98506,98509,98571,98575,98578,98582,98585,98611,98614,98617,98622,98625,98694,98696,98701,98762,98765,98776,98782,98787,98791,98794,98807,98811,98826,98828,98851,98853,98879,98882,98885,98888,98936,98938,98943,98947,98951,98978,98982,99009,99012,99017,99022,99112,99116,99174,99179,99182,99185,99227,99231,99287,99292,99295,99298],[10,97688,97684],{"id":97689},"_2创建数组",[14,97691,97693],{"id":97692},"_21-array函数创建数组","2.1 array()函数创建数组",[19,97695,97697],{"id":97696},"_221-函数语句","2.2.1 函数语句",[67,97699,97701],{"className":32846,"code":97700,"language":32848,"meta":72,"style":72},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[74,97702,97703],{"__ignoreMap":72},[77,97704,97705,97708,97711,97713,97715,97717,97719,97721,97724,97726,97729,97731,97734,97736,97738,97740,97743,97745,97748,97750,97753,97755,97757],{"class":79,"line":80},[77,97706,97707],{"class":87},"numpy.array(",[77,97709,97710],{"class":94},"object",[77,97712,680],{"class":87},[77,97714,95936],{"class":7691},[77,97716,16036],{"class":2123},[77,97718,41399],{"class":94},[77,97720,680],{"class":87},[77,97722,97723],{"class":7691},"copy",[77,97725,16036],{"class":2123},[77,97727,97728],{"class":94}," True",[77,97730,680],{"class":87},[77,97732,97733],{"class":7691},"order",[77,97735,16036],{"class":2123},[77,97737,41399],{"class":94},[77,97739,680],{"class":87},[77,97741,97742],{"class":7691},"subok",[77,97744,16036],{"class":2123},[77,97746,97747],{"class":94}," False",[77,97749,680],{"class":87},[77,97751,97752],{"class":7691},"ndmin",[77,97754,16036],{"class":2123},[77,97756,6568],{"class":94},[77,97758,2628],{"class":87},[24,97760,97761],{},"参数：",[24,97763,97764],{},[40,97765],{"alt":72,"src":97766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[19,97768,97770],{"id":97769},"_222-实例","2.2.2 实例",[24,97772,97773],{},[40,97774],{"alt":72,"src":97775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[24,97777,97778],{},[40,97779],{"alt":72,"src":97780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[24,97782,97783],{},[40,97784],{"alt":72,"src":97785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[24,97787,97788],{},[40,97789],{"alt":72,"src":97790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[24,97792,97793],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[24,97795,97796],{},[40,97797],{"alt":72,"src":97798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97800,97802],{"id":97801},"_22-随机数创建数组","2.2 随机数创建数组",[19,97804,97806],{"id":97805},"_221-random语句","2.2.1 random语句",[67,97808,97810],{"className":32846,"code":97809,"language":32848,"meta":72,"style":72},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[74,97811,97812,97817,97822,97830,97835],{"__ignoreMap":72},[77,97813,97814],{"class":79,"line":80},[77,97815,97816],{"class":323},"#random.random()\n",[77,97818,97819],{"class":79,"line":91},[77,97820,97821],{"class":323},"#确定随机种子,就是每次运行结果是相同的\n",[77,97823,97824,97826,97828],{"class":79,"line":107},[77,97825,97043],{"class":87},[77,97827,1939],{"class":94},[77,97829,2628],{"class":87},[77,97831,97832],{"class":79,"line":191},[77,97833,97834],{"class":87},"np.random.random()\n",[77,97836,97837],{"class":79,"line":1543},[77,97838,97839],{"class":323},"#生成一个随机的数目\n",[24,97841,97842],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[24,97844,97845],{},"可以指定数组形状 size",[24,97847,97848],{},"①生成一维数组",[67,97850,97852],{"className":32846,"code":97851,"language":32848,"meta":72,"style":72},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[74,97853,97854,97859,97872,97877,97893],{"__ignoreMap":72},[77,97855,97856],{"class":79,"line":80},[77,97857,97858],{"class":323},"#random.random(size())\n",[77,97860,97861,97864,97866,97868,97870],{"class":79,"line":91},[77,97862,97863],{"class":87},"np.random.random(",[77,97865,33963],{"class":7691},[77,97867,268],{"class":2123},[77,97869,2933],{"class":94},[77,97871,2628],{"class":87},[77,97873,97874],{"class":79,"line":107},[77,97875,97876],{"class":323},"#生成一位的五个元素\n",[77,97878,97879,97881,97883,97885,97887,97889,97891],{"class":79,"line":191},[77,97880,417],{"class":87},[77,97882,268],{"class":2123},[77,97884,97863],{"class":87},[77,97886,33963],{"class":7691},[77,97888,268],{"class":2123},[77,97890,2907],{"class":94},[77,97892,2628],{"class":87},[77,97894,97895,97898],{"class":79,"line":1543},[77,97896,97897],{"class":87},"a.shape ",[77,97899,97900],{"class":323},"#输出数组形状\n",[24,97902,97903],{},"②生成二维数组",[67,97905,97907],{"className":32846,"code":97906,"language":32848,"meta":72,"style":72},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[74,97908,97909,97913,97935],{"__ignoreMap":72},[77,97910,97911],{"class":79,"line":80},[77,97912,95737],{"class":323},[77,97914,97915,97917,97919,97921,97923,97925,97927,97929,97931,97933],{"class":79,"line":91},[77,97916,95742],{"class":87},[77,97918,268],{"class":2123},[77,97920,97863],{"class":87},[77,97922,33963],{"class":7691},[77,97924,268],{"class":2123},[77,97926,2622],{"class":87},[77,97928,2907],{"class":94},[77,97930,2992],{"class":87},[77,97932,2933],{"class":94},[77,97934,32965],{"class":87},[77,97936,97937],{"class":79,"line":107},[77,97938,97939],{"class":323},"#生成四行五列的数组\n",[24,97941,97942],{},"③生成三维数组",[67,97944,97946],{"className":32846,"code":97945,"language":32848,"meta":72,"style":72},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[74,97947,97948,97953,97980],{"__ignoreMap":72},[77,97949,97950],{"class":79,"line":80},[77,97951,97952],{"class":323},"#三维数组\n",[77,97954,97955,97958,97960,97962,97964,97966,97968,97970,97972,97974,97976,97978],{"class":79,"line":91},[77,97956,97957],{"class":87},"aaa",[77,97959,268],{"class":2123},[77,97961,97863],{"class":87},[77,97963,33963],{"class":7691},[77,97965,268],{"class":2123},[77,97967,2622],{"class":87},[77,97969,2696],{"class":94},[77,97971,2992],{"class":87},[77,97973,2690],{"class":94},[77,97975,2992],{"class":87},[77,97977,2907],{"class":94},[77,97979,32965],{"class":87},[77,97981,97982],{"class":79,"line":107},[77,97983,97984],{"class":87},"aaa.shape\n",[19,97986,97988],{"id":97987},"_222-randint语句","2.2.2 randint语句",[67,97990,97992],{"className":32846,"code":97991,"language":32848,"meta":72,"style":72},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[74,97993,97994,97999],{"__ignoreMap":72},[77,97995,97996],{"class":79,"line":80},[77,97997,97998],{"class":323},"#生成随机的整数 random.randint(low,high,size)\n",[77,98000,98001,98003,98005,98007],{"class":79,"line":91},[77,98002,95550],{"class":87},[77,98004,2933],{"class":94},[77,98006,16186],{"class":87},[77,98008,98009],{"class":323},"#0~5中的随机一个数\n",[24,98011,97848],{},[67,98013,98015],{"className":32846,"code":98014,"language":32848,"meta":72,"style":72},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[74,98016,98017,98022,98044],{"__ignoreMap":72},[77,98018,98019],{"class":79,"line":80},[77,98020,98021],{"class":323},"#一维\n",[77,98023,98024,98026,98028,98030,98032,98034,98036,98038,98040,98042],{"class":79,"line":91},[77,98025,95550],{"class":87},[77,98027,2120],{"class":94},[77,98029,2992],{"class":87},[77,98031,3085],{"class":94},[77,98033,2992],{"class":87},[77,98035,33963],{"class":7691},[77,98037,268],{"class":2123},[77,98039,2622],{"class":87},[77,98041,3059],{"class":94},[77,98043,32965],{"class":87},[77,98045,98046],{"class":79,"line":107},[77,98047,98048],{"class":323},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[24,98050,97903],{},[24,98052,98053],{},[40,98054],{"alt":72,"src":98055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[24,98057,97942],{},[24,98059,98060],{},[40,98061],{"alt":72,"src":98062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[19,98064,98066],{"id":98065},"_222-rand语句","2.2.2 rand语句",[24,98068,98069],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[67,98071,98073],{"className":32846,"code":98072,"language":32848,"meta":72,"style":72},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[74,98074,98075,98088,98093],{"__ignoreMap":72},[77,98076,98077,98080,98082,98084,98086],{"class":79,"line":80},[77,98078,98079],{"class":87},"np.random.rand(",[77,98081,2925],{"class":94},[77,98083,2992],{"class":87},[77,98085,3059],{"class":94},[77,98087,2628],{"class":87},[77,98089,98090],{"class":79,"line":91},[77,98091,98092],{"class":323},"#第一个参数100：行数，表示有100个样本\n",[77,98094,98095],{"class":79,"line":107},[77,98096,98097],{"class":323},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98099,98101],{"id":98100},"_23-arange创建数组","2.3 arange()创建数组",[19,98103,98105],{"id":98104},"_231-函数语句","2.3.1 函数语句",[67,98107,98109],{"className":32846,"code":98108,"language":32848,"meta":72,"style":72},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[74,98110,98111,98125,98130,98135,98140,98145,98150,98155],{"__ignoreMap":72},[77,98112,98113,98116,98118,98120,98123],{"class":79,"line":80},[77,98114,98115],{"class":87},"numpy.arange([start,] stop[, step], ",[77,98117,95936],{"class":7691},[77,98119,268],{"class":2123},[77,98121,98122],{"class":94},"None",[77,98124,2628],{"class":87},[77,98126,98127],{"class":79,"line":91},[77,98128,98129],{"class":323},"#参数\n",[77,98131,98132],{"class":79,"line":107},[77,98133,98134],{"class":271},"\"\"\"\n",[77,98136,98137],{"class":79,"line":191},[77,98138,98139],{"class":271},"start:起始值，可选，默认从 0 开始。\n",[77,98141,98142],{"class":79,"line":1543},[77,98143,98144],{"class":271},"stop:结束值（不包含该值）。\n",[77,98146,98147],{"class":79,"line":1549},[77,98148,98149],{"class":271},"step:步长，可选，默认是 1。可以为浮点数。\n",[77,98151,98152],{"class":79,"line":1566},[77,98153,98154],{"class":271},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[77,98156,98157],{"class":79,"line":1572},[77,98158,98134],{"class":271},[19,98160,98162],{"id":98161},"_232-实例","2.3.2 实例",[67,98164,98166],{"className":32846,"code":98165,"language":32848,"meta":72,"style":72},"#创建一维数组\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",[74,98167,98168,98172,98196,98201,98206,98210,98233,98237,98241,98246,98251],{"__ignoreMap":72},[77,98169,98170],{"class":79,"line":80},[77,98171,95541],{"class":323},[77,98173,98174,98176,98178,98180,98182,98184,98186,98188,98190,98192,98194],{"class":79,"line":91},[77,98175,95438],{"class":87},[77,98177,2120],{"class":94},[77,98179,2992],{"class":87},[77,98181,3338],{"class":94},[77,98183,2992],{"class":87},[77,98185,2120],{"class":94},[77,98187,2992],{"class":87},[77,98189,95936],{"class":7691},[77,98191,268],{"class":2123},[77,98193,2625],{"class":94},[77,98195,2628],{"class":87},[77,98197,98198],{"class":79,"line":107},[77,98199,98200],{"class":323},"#输出结果：\n",[77,98202,98203],{"class":79,"line":191},[77,98204,98205],{"class":323},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[77,98207,98208],{"class":79,"line":1543},[77,98209,96383],{"class":323},[77,98211,98212,98215,98217,98219,98221,98224,98226,98228,98230],{"class":79,"line":1549},[77,98213,98214],{"class":87},"np.array([np.arange(",[77,98216,2120],{"class":94},[77,98218,2992],{"class":87},[77,98220,2907],{"class":94},[77,98222,98223],{"class":87},"),np.arange(",[77,98225,2907],{"class":94},[77,98227,2992],{"class":87},[77,98229,2983],{"class":94},[77,98231,98232],{"class":87},")])\n",[77,98234,98235],{"class":79,"line":1566},[77,98236,96000],{"class":323},[77,98238,98239],{"class":79,"line":1572},[77,98240,98134],{"class":271},[77,98242,98243],{"class":79,"line":1589},[77,98244,98245],{"class":271},"array([[1, 2, 3],\n",[77,98247,98248],{"class":79,"line":1595},[77,98249,98250],{"class":271},"       [4, 5, 6]])\n",[77,98252,98253],{"class":79,"line":4088},[77,98254,98134],{"class":271},[14,98256,98258],{"id":98257},"_24-生态分布","2.4 生态分布",[19,98260,98262],{"id":98261},"_241-标准正态分布","2.4.1 标准正态分布",[24,98264,98265],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[24,98267,98268],{},[40,98269],{"alt":72,"src":98270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[19,98272,98274],{"id":98273},"_242-常规正态分布","2.4.2 常规正态分布",[67,98276,98278],{"className":32846,"code":98277,"language":32848,"meta":72,"style":72},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[74,98279,98280,98285,98290,98295],{"__ignoreMap":72},[77,98281,98282],{"class":79,"line":80},[77,98283,98284],{"class":87},"random.normal(loc,scale,size)也可以生成正态分布\n",[77,98286,98287],{"class":79,"line":91},[77,98288,98289],{"class":323},"#loc:期望\n",[77,98291,98292],{"class":79,"line":107},[77,98293,98294],{"class":323},"#scale:方差\n",[77,98296,98297],{"class":79,"line":191},[77,98298,98299],{"class":323},"#size:用于确定是几维的数列\n",[24,98301,98302],{},[40,98303],{"alt":72,"src":98304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98306,98308],{"id":98307},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[24,98310,98311],{},"ndim:秩，维度个数",[24,98313,98314],{},"size:数组元素的个数",[24,98316,98317],{},"shape:数组的形状",[24,98319,98320],{},"dtype:数组元素的类型",[24,98322,98323],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[24,98325,98326],{},"他们都是属性，通过数组.属性的形式来确定",[24,98328,98329],{},"如果需要输出多个可以通过以下方式：",[67,98331,98333],{"className":32846,"code":98332,"language":32848,"meta":72,"style":72},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[74,98334,98335],{"__ignoreMap":72},[77,98336,98337,98339],{"class":79,"line":80},[77,98338,32883],{"class":94},[77,98340,98341],{"class":87},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98343,98345],{"id":98344},"_26-其他方式创建数组","2.6 其他方式创建数组",[19,98347,98349],{"id":98348},"_261-zeros创建数组","2.6.1 zeros()创建数组",[24,98351,98352],{},"①创建一维数组",[67,98354,98356],{"className":32846,"code":98355,"language":32848,"meta":72,"style":72},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[74,98357,98358,98367,98371,98376,98381],{"__ignoreMap":72},[77,98359,98360,98363,98365],{"class":79,"line":80},[77,98361,98362],{"class":87},"np.zeros(",[77,98364,3059],{"class":94},[77,98366,2628],{"class":87},[77,98368,98369],{"class":79,"line":91},[77,98370,98134],{"class":271},[77,98372,98373],{"class":79,"line":107},[77,98374,98375],{"class":271},"输出结果：\n",[77,98377,98378],{"class":79,"line":191},[77,98379,98380],{"class":271},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[77,98382,98383],{"class":79,"line":1543},[77,98384,98134],{"class":271},[24,98386,98387],{},"上方代码等价于：",[67,98389,98391],{"className":32846,"code":98390,"language":32848,"meta":72,"style":72},"np.zeros(shape=(10))#创建10个元素的0数组\n",[74,98392,98393],{"__ignoreMap":72},[77,98394,98395,98397,98400,98402,98404,98406,98408],{"class":79,"line":80},[77,98396,98362],{"class":87},[77,98398,98399],{"class":7691},"shape",[77,98401,268],{"class":2123},[77,98403,2622],{"class":87},[77,98405,3059],{"class":94},[77,98407,85208],{"class":87},[77,98409,98410],{"class":323},"#创建10个元素的0数组\n",[24,98412,98413],{},"也可以指定类型",[67,98415,98417],{"className":32846,"code":98416,"language":32848,"meta":72,"style":72},"#指定类型\nnp.zeros(5,dtype=int)\n",[74,98418,98419,98424],{"__ignoreMap":72},[77,98420,98421],{"class":79,"line":80},[77,98422,98423],{"class":323},"#指定类型\n",[77,98425,98426,98428,98430,98432,98434,98436,98438],{"class":79,"line":91},[77,98427,98362],{"class":87},[77,98429,2933],{"class":94},[77,98431,2992],{"class":87},[77,98433,95936],{"class":7691},[77,98435,268],{"class":2123},[77,98437,2625],{"class":94},[77,98439,2628],{"class":87},[24,98441,98442],{},"②创建二维数组",[67,98444,98446],{"className":32846,"code":98445,"language":32848,"meta":72,"style":72},"np.zeros((3,4),dtype=int)\n",[74,98447,98448],{"__ignoreMap":72},[77,98449,98450,98453,98455,98457,98459,98461,98463,98465,98467],{"class":79,"line":80},[77,98451,98452],{"class":87},"np.zeros((",[77,98454,2690],{"class":94},[77,98456,2992],{"class":87},[77,98458,2907],{"class":94},[77,98460,44722],{"class":87},[77,98462,95936],{"class":7691},[77,98464,268],{"class":2123},[77,98466,2625],{"class":94},[77,98468,2628],{"class":87},[24,98470,98471],{},"③创建三维数组",[67,98473,98475],{"className":32846,"code":98474,"language":32848,"meta":72,"style":72},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[74,98476,98477,98482],{"__ignoreMap":72},[77,98478,98479],{"class":79,"line":80},[77,98480,98481],{"class":323},"#创建三维数组\n",[77,98483,98484,98486,98488,98490,98492,98494,98496,98498,98500,98502,98504],{"class":79,"line":91},[77,98485,98452],{"class":87},[77,98487,2690],{"class":94},[77,98489,2992],{"class":87},[77,98491,2907],{"class":94},[77,98493,2992],{"class":87},[77,98495,2933],{"class":94},[77,98497,44722],{"class":87},[77,98499,95936],{"class":7691},[77,98501,268],{"class":2123},[77,98503,2625],{"class":94},[77,98505,2628],{"class":87},[24,98507,98508],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[67,98510,98512],{"className":32846,"code":98511,"language":32848,"meta":72,"style":72},"#使用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",[74,98513,98514,98519,98534,98539,98544,98566],{"__ignoreMap":72},[77,98515,98516],{"class":79,"line":80},[77,98517,98518],{"class":323},"#使用zeros_like将创建的一维数组变成全0的数组\n",[77,98520,98521,98523,98525,98527,98529,98531],{"class":79,"line":91},[77,98522,417],{"class":87},[77,98524,268],{"class":2123},[77,98526,95438],{"class":87},[77,98528,2907],{"class":94},[77,98530,3043],{"class":87},[77,98532,98533],{"class":323},"#这个得到的结果：一维数组0，1，2，3\n",[77,98535,98536],{"class":79,"line":107},[77,98537,98538],{"class":87},"np.zeros_like(a)\n",[77,98540,98541],{"class":79,"line":191},[77,98542,98543],{"class":323},"#使用zeros_like将创建的二维数组变成全0的数组\n",[77,98545,98546,98548,98550,98552,98554,98556,98558,98560,98562,98564],{"class":79,"line":1543},[77,98547,95742],{"class":87},[77,98549,268],{"class":2123},[77,98551,97863],{"class":87},[77,98553,33963],{"class":7691},[77,98555,268],{"class":2123},[77,98557,2622],{"class":87},[77,98559,2907],{"class":94},[77,98561,2992],{"class":87},[77,98563,2933],{"class":94},[77,98565,32965],{"class":87},[77,98567,98568],{"class":79,"line":1549},[77,98569,98570],{"class":87},"np.zeros_like(aa)\n",[19,98572,98574],{"id":98573},"_262-ones创建数组","2.6.2 ones()创建数组",[24,98576,98577],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[19,98579,98581],{"id":98580},"_263-empty创建数组","2.6.3 empty()创建数组",[24,98583,98584],{},"①empty()用法",[67,98586,98588],{"className":32846,"code":98587,"language":32848,"meta":72,"style":72},"numpy.empty(shape,dtype=float,order='c')\n",[74,98589,98590],{"__ignoreMap":72},[77,98591,98592,98595,98597,98599,98601,98603,98605,98607,98609],{"class":79,"line":80},[77,98593,98594],{"class":87},"numpy.empty(shape,",[77,98596,95936],{"class":7691},[77,98598,268],{"class":2123},[77,98600,2661],{"class":94},[77,98602,2992],{"class":87},[77,98604,97733],{"class":7691},[77,98606,268],{"class":2123},[77,98608,78466],{"class":271},[77,98610,2628],{"class":87},[24,98612,98613],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[24,98615,98616],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[24,98618,98619],{},[40,98620],{"alt":72,"src":98621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[24,98623,98624],{},"②empty()用法",[67,98626,98628],{"className":32846,"code":98627,"language":32848,"meta":72,"style":72},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[74,98629,98630,98651,98663,98684,98689],{"__ignoreMap":72},[77,98631,98632,98634,98636,98639,98641,98643,98645,98647,98649],{"class":79,"line":80},[77,98633,3458],{"class":87},[77,98635,268],{"class":2123},[77,98637,98638],{"class":87},"np.empty(",[77,98640,3059],{"class":94},[77,98642,2992],{"class":87},[77,98644,95936],{"class":7691},[77,98646,268],{"class":2123},[77,98648,2625],{"class":94},[77,98650,2628],{"class":87},[77,98652,98653,98655,98657,98659,98661],{"class":79,"line":91},[77,98654,3433],{"class":87},[77,98656,268],{"class":2123},[77,98658,95438],{"class":87},[77,98660,2933],{"class":94},[77,98662,2628],{"class":87},[77,98664,98665,98668,98670,98673,98675,98677,98680,98682],{"class":79,"line":107},[77,98666,98667],{"class":87},"np.add(",[77,98669,2696],{"class":94},[77,98671,98672],{"class":87},",x,",[77,98674,95490],{"class":7691},[77,98676,268],{"class":2123},[77,98678,98679],{"class":87},"y[:",[77,98681,2933],{"class":94},[77,98683,7132],{"class":87},[77,98685,98686],{"class":79,"line":191},[77,98687,98688],{"class":323},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[77,98690,98691],{"class":79,"line":1543},[77,98692,98693],{"class":87},"y\n",[24,98695,13987],{},[24,98697,98698],{},[40,98699],{"alt":72,"src":98700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[67,98702,98704],{"className":32846,"code":98703,"language":32848,"meta":72,"style":72},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[74,98705,98706,98722,98742,98757],{"__ignoreMap":72},[77,98707,98708,98710,98712,98714,98716,98718,98720],{"class":79,"line":80},[77,98709,3433],{"class":87},[77,98711,268],{"class":2123},[77,98713,95438],{"class":87},[77,98715,2120],{"class":94},[77,98717,2992],{"class":87},[77,98719,2958],{"class":94},[77,98721,2628],{"class":87},[77,98723,98724,98726,98728,98730,98732,98734,98736,98738,98740],{"class":79,"line":91},[77,98725,3458],{"class":87},[77,98727,268],{"class":2123},[77,98729,98638],{"class":87},[77,98731,2933],{"class":94},[77,98733,2992],{"class":87},[77,98735,95936],{"class":7691},[77,98737,268],{"class":2123},[77,98739,2625],{"class":94},[77,98741,2628],{"class":87},[77,98743,98744,98747,98749,98751,98753,98755],{"class":79,"line":107},[77,98745,98746],{"class":87},"np.add(x,",[77,98748,2696],{"class":94},[77,98750,2992],{"class":87},[77,98752,95490],{"class":7691},[77,98754,268],{"class":2123},[77,98756,95885],{"class":87},[77,98758,98759],{"class":79,"line":191},[77,98760,98761],{"class":323},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[24,98763,98764],{},"③empty_like()",[24,98766,98767],{},[27,98768,98769,98770,98775],{},"创建一个",[27,98771,98772],{},[27,98773,98774],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[24,98777,98778,98781],{},[74,98779,98780],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[24,98783,98784],{},[40,98785],{"alt":72,"src":98786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[19,98788,98790],{"id":98789},"_264-用法","2.6.4 ？？用法",[24,98792,98793],{},"当想查看一个函数的参数时，可以通过？？来实现",[67,98795,98797],{"className":32846,"code":98796,"language":32848,"meta":72,"style":72},"np.full??\n",[74,98798,98799],{"__ignoreMap":72},[77,98800,98801,98804],{"class":79,"line":80},[77,98802,98803],{"class":87},"np.full",[77,98805,98806],{"class":79841},"??\n",[19,98808,98810],{"id":98809},"_265-full创建数组","2.6.5 full()创建数组",[67,98812,98814],{"className":32846,"code":98813,"language":32848,"meta":72,"style":72},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[74,98815,98816,98821],{"__ignoreMap":72},[77,98817,98818],{"class":79,"line":80},[77,98819,98820],{"class":87},"full(shape,fill_value)\n",[77,98822,98823],{"class":79,"line":91},[77,98824,98825],{"class":87},"创建全为某个指定值的数组\n",[24,98827,96966],{},[67,98829,98831],{"className":32846,"code":98830,"language":32848,"meta":72,"style":72},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[74,98832,98833,98838],{"__ignoreMap":72},[77,98834,98835],{"class":79,"line":80},[77,98836,98837],{"class":323},"#创建一个一维数组,以20进行填充\n",[77,98839,98840,98843,98845,98847,98849],{"class":79,"line":91},[77,98841,98842],{"class":87},"np.full(",[77,98844,3059],{"class":94},[77,98846,2992],{"class":87},[77,98848,3313],{"class":94},[77,98850,2628],{"class":87},[24,98852,95727],{},[67,98854,98856],{"className":32846,"code":98855,"language":32848,"meta":72,"style":72},"#创建二维数组\nnp.full((3,5),11)\n",[74,98857,98858,98862],{"__ignoreMap":72},[77,98859,98860],{"class":79,"line":80},[77,98861,96383],{"class":323},[77,98863,98864,98867,98869,98871,98873,98875,98877],{"class":79,"line":91},[77,98865,98866],{"class":87},"np.full((",[77,98868,2690],{"class":94},[77,98870,2992],{"class":87},[77,98872,2933],{"class":94},[77,98874,44722],{"class":87},[77,98876,3085],{"class":94},[77,98878,2628],{"class":87},[24,98880,98881],{},"③full_like用法",[24,98883,98884],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[24,98886,98887],{},"这里是指定填充而已",[67,98889,98891],{"className":32846,"code":98890,"language":32848,"meta":72,"style":72},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[74,98892,98893,98898,98922,98927],{"__ignoreMap":72},[77,98894,98895],{"class":79,"line":80},[77,98896,98897],{"class":323},"#创建一个指定形状数组\n",[77,98899,98900,98902,98904,98906,98908,98910,98912,98914,98916,98918,98920],{"class":79,"line":91},[77,98901,417],{"class":87},[77,98903,268],{"class":2123},[77,98905,95438],{"class":87},[77,98907,2120],{"class":94},[77,98909,2992],{"class":87},[77,98911,2939],{"class":94},[77,98913,95443],{"class":87},[77,98915,2907],{"class":94},[77,98917,2992],{"class":87},[77,98919,3034],{"class":94},[77,98921,2628],{"class":87},[77,98923,98924],{"class":79,"line":107},[77,98925,98926],{"class":323},"#进行指定填充\n",[77,98928,98929,98932,98934],{"class":79,"line":191},[77,98930,98931],{"class":87},"np.full_like(a,",[77,98933,3059],{"class":94},[77,98935,2628],{"class":87},[24,98937,13987],{},[24,98939,98940],{},[40,98941],{"alt":72,"src":98942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[19,98944,98946],{"id":98945},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24468,98948,98950],{"id":98949},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[67,98952,98954],{"className":32846,"code":98953,"language":32848,"meta":72,"style":72},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[74,98955,98956,98973],{"__ignoreMap":72},[77,98957,98958,98961,98963,98965,98967,98969,98971],{"class":79,"line":80},[77,98959,98960],{"class":87},"np.eye(",[77,98962,2907],{"class":94},[77,98964,2992],{"class":87},[77,98966,95936],{"class":7691},[77,98968,268],{"class":2123},[77,98970,2625],{"class":94},[77,98972,2628],{"class":87},[77,98974,98975],{"class":79,"line":91},[77,98976,98977],{"class":323},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24468,98979,98981],{"id":98980},"_2662-法2identity","2.6.6.2 法2：identity()",[67,98983,98985],{"className":32846,"code":98984,"language":32848,"meta":72,"style":72},"#identity()\nnp.identity(5,dtype=int)\n",[74,98986,98987,98992],{"__ignoreMap":72},[77,98988,98989],{"class":79,"line":80},[77,98990,98991],{"class":323},"#identity()\n",[77,98993,98994,98997,98999,99001,99003,99005,99007],{"class":79,"line":91},[77,98995,98996],{"class":87},"np.identity(",[77,98998,2933],{"class":94},[77,99000,2992],{"class":87},[77,99002,95936],{"class":7691},[77,99004,268],{"class":2123},[77,99006,2625],{"class":94},[77,99008,2628],{"class":87},[24,99010,99011],{},"两个函数是有区别的",[24,99013,99014],{},[40,99015],{"alt":72,"src":99016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[24,99018,99019],{},[40,99020],{"alt":72,"src":99021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[67,99023,99025],{"className":32846,"code":99024,"language":32848,"meta":72,"style":72},"# 创建一个 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",[74,99026,99027,99032,99044,99049,99054,99059,99064,99068,99073,99093,99097,99102,99107],{"__ignoreMap":72},[77,99028,99029],{"class":79,"line":80},[77,99030,99031],{"class":323},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[77,99033,99034,99036,99038,99040,99042],{"class":79,"line":91},[77,99035,98960],{"class":87},[77,99037,2690],{"class":94},[77,99039,680],{"class":87},[77,99041,2907],{"class":94},[77,99043,2628],{"class":87},[77,99045,99046],{"class":79,"line":107},[77,99047,99048],{"class":323},"# 输出:\n",[77,99050,99051],{"class":79,"line":191},[77,99052,99053],{"class":323},"# [[1. 0. 0. 0.]\n",[77,99055,99056],{"class":79,"line":1543},[77,99057,99058],{"class":323},"#  [0. 1. 0. 0.]\n",[77,99060,99061],{"class":79,"line":1549},[77,99062,99063],{"class":323},"#  [0. 0. 1. 0.]]\n",[77,99065,99066],{"class":79,"line":1566},[77,99067,4875],{"emptyLinePlaceholder":2549},[77,99069,99070],{"class":79,"line":1572},[77,99071,99072],{"class":323},"# 对角线向上偏移1\n",[77,99074,99075,99077,99079,99081,99083,99085,99087,99089,99091],{"class":79,"line":1589},[77,99076,98960],{"class":87},[77,99078,2690],{"class":94},[77,99080,680],{"class":87},[77,99082,2907],{"class":94},[77,99084,680],{"class":87},[77,99086,3106],{"class":7691},[77,99088,268],{"class":2123},[77,99090,2120],{"class":94},[77,99092,2628],{"class":87},[77,99094,99095],{"class":79,"line":1595},[77,99096,99048],{"class":323},[77,99098,99099],{"class":79,"line":4088},[77,99100,99101],{"class":323},"# [[0. 1. 0. 0.]\n",[77,99103,99104],{"class":79,"line":4093},[77,99105,99106],{"class":323},"#  [0. 0. 1. 0.]\n",[77,99108,99109],{"class":79,"line":4099},[77,99110,99111],{"class":323},"#  [0. 0. 0. 1.]]\n",[19,99113,99115],{"id":99114},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[67,99117,99119],{"className":32846,"code":99118,"language":32848,"meta":72,"style":72},"#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",[74,99120,99121,99126,99130,99135,99140,99145,99150,99155,99160,99165,99170],{"__ignoreMap":72},[77,99122,99123],{"class":79,"line":80},[77,99124,99125],{"class":323},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[77,99127,99128],{"class":79,"line":91},[77,99129,98134],{"class":271},[77,99131,99132],{"class":79,"line":107},[77,99133,99134],{"class":271},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[77,99136,99137],{"class":79,"line":191},[77,99138,99139],{"class":271},"参数介绍：\n",[77,99141,99142],{"class":79,"line":1543},[77,99143,99144],{"class":271},"start：序列的起始值\n",[77,99146,99147],{"class":79,"line":1549},[77,99148,99149],{"class":271},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[77,99151,99152],{"class":79,"line":1566},[77,99153,99154],{"class":271},"num：要生长的等步长的样本数量，默认为50\n",[77,99156,99157],{"class":79,"line":1572},[77,99158,99159],{"class":271},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[77,99161,99162],{"class":79,"line":1589},[77,99163,99164],{"class":271},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[77,99166,99167],{"class":79,"line":1595},[77,99168,99169],{"class":271},"dtype：ndarry的数据类型\n",[77,99171,99172],{"class":79,"line":4088},[77,99173,98134],{"class":271},[24,99175,99176],{},[40,99177],{"alt":72,"src":99178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[24,99180,99181],{},"这里num=是可以省略的",[24,99183,99184],{},"也就是下方两行代码结果是一模一样的",[67,99186,99188],{"className":32846,"code":99187,"language":32848,"meta":72,"style":72},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[74,99189,99190,99207],{"__ignoreMap":72},[77,99191,99192,99195,99197,99199,99201,99203,99205],{"class":79,"line":80},[77,99193,99194],{"class":87},"np.linspace(",[77,99196,2120],{"class":94},[77,99198,2992],{"class":87},[77,99200,2933],{"class":94},[77,99202,2992],{"class":87},[77,99204,2933],{"class":94},[77,99206,2628],{"class":87},[77,99208,99209,99211,99213,99215,99217,99219,99221,99223,99225],{"class":79,"line":91},[77,99210,99194],{"class":87},[77,99212,2120],{"class":94},[77,99214,2992],{"class":87},[77,99216,2933],{"class":94},[77,99218,2992],{"class":87},[77,99220,4141],{"class":7691},[77,99222,268],{"class":2123},[77,99224,2933],{"class":94},[77,99226,2628],{"class":87},[19,99228,99230],{"id":99229},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[67,99232,99234],{"className":32846,"code":99233,"language":32848,"meta":72,"style":72},"#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",[74,99235,99236,99241,99245,99250,99255,99260,99265,99269,99274,99279,99283],{"__ignoreMap":72},[77,99237,99238],{"class":79,"line":80},[77,99239,99240],{"class":323},"#logspace函数用于创建一个等比数列，格式如下：\n",[77,99242,99243],{"class":79,"line":91},[77,99244,98134],{"class":271},[77,99246,99247],{"class":79,"line":107},[77,99248,99249],{"class":271},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[77,99251,99252],{"class":79,"line":191},[77,99253,99254],{"class":271},"参数为：\n",[77,99256,99257],{"class":79,"line":1543},[77,99258,99259],{"class":271},"start:序列的起始位置为：base**start\n",[77,99261,99262],{"class":79,"line":1549},[77,99263,99264],{"class":271},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[77,99266,99267],{"class":79,"line":1566},[77,99268,99154],{"class":271},[77,99270,99271],{"class":79,"line":1572},[77,99272,99273],{"class":271},"endpoint：是否包含 stop 这个值，默认是 True\n",[77,99275,99276],{"class":79,"line":1589},[77,99277,99278],{"class":271},"base：对数的底数，默认是 10（常见对数）\n",[77,99280,99281],{"class":79,"line":1595},[77,99282,99169],{"class":271},[77,99284,99285],{"class":79,"line":4088},[77,99286,98134],{"class":271},[24,99288,99289],{},[40,99290],{"alt":72,"src":99291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[24,99293,99294],{},"logspace()函数中的num参数也是可以不写num=的",[24,99296,99297],{},"endpoint是不可以省略的",[2520,99299,99300],{},"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":72,"searchDepth":91,"depth":91,"links":99302},[99303,99307,99312,99316,99320,99321],{"id":97692,"depth":91,"text":97693,"children":99304},[99305,99306],{"id":97696,"depth":107,"text":97697},{"id":97769,"depth":107,"text":97770},{"id":97801,"depth":91,"text":97802,"children":99308},[99309,99310,99311],{"id":97805,"depth":107,"text":97806},{"id":97987,"depth":107,"text":97988},{"id":98065,"depth":107,"text":98066},{"id":98100,"depth":91,"text":98101,"children":99313},[99314,99315],{"id":98104,"depth":107,"text":98105},{"id":98161,"depth":107,"text":98162},{"id":98257,"depth":91,"text":98258,"children":99317},[99318,99319],{"id":98261,"depth":107,"text":98262},{"id":98273,"depth":107,"text":98274},{"id":98307,"depth":91,"text":98308},{"id":98344,"depth":91,"text":98345,"children":99322},[99323,99324,99325,99326,99327,99328,99329,99330],{"id":98348,"depth":107,"text":98349},{"id":98573,"depth":107,"text":98574},{"id":98580,"depth":107,"text":98581},{"id":98789,"depth":107,"text":98790},{"id":98809,"depth":107,"text":98810},{"id":98945,"depth":107,"text":98946},{"id":99114,"depth":107,"text":99115},{"id":99229,"depth":107,"text":99230},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97684,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99337,"title":99338,"body":99339,"description":2546,"extension":2547,"meta":99432,"navigation":2549,"path":99433,"seo":99434,"stem":99435,"__hash__":99436},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99340,"toc":99430},[99341,99344,99347,99350,99353,99356,99359,99362,99365,99368,99371,99374,99376,99379,99382,99387,99390,99393,99427],[10,99342,99338],{"id":99343},"_20魔法命令mprun",[24,99345,99346],{},"逐行分析数据内存的使用情况",[24,99348,99349],{},"语法格式：",[24,99351,99352],{},"%mprun -f 模块名.函数名 模块名.函数名()",[24,99354,99355],{},"分析结果列如下：",[24,99357,99358],{},"Line行号",[24,99360,99361],{},"Mem usage内存使用大小",[24,99363,99364],{},"increment内存增量",[24,99366,99367],{},"Line content代码内容",[24,99369,99370],{},"补充说明：",[24,99372,99373],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[24,99375,97639],{},[24,99377,99378],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[24,99380,99381],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[24,99383,99384],{},[40,99385],{"alt":72,"src":99386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[24,99388,99389],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[24,99391,99392],{},"这时候需要重新加载模块",[67,99394,99396],{"className":32846,"code":99395,"language":32848,"meta":72,"style":72},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[74,99397,99398,99403,99410,99415],{"__ignoreMap":72},[77,99399,99400],{"class":79,"line":80},[77,99401,99402],{"class":323},"#重新加载模块\n",[77,99404,99405,99407],{"class":79,"line":91},[77,99406,32860],{"class":2123},[77,99408,99409],{"class":87}," importlib\n",[77,99411,99412],{"class":79,"line":107},[77,99413,99414],{"class":87},"importlib.reload(mprun_test)\n",[77,99416,99417,99419,99422,99424],{"class":79,"line":191},[77,99418,2942],{"class":2123},[77,99420,99421],{"class":87},"mprun ",[77,99423,3145],{"class":2123},[77,99425,99426],{"class":87},"f mprun_test.fun_test mprun_test.fun_test()\n",[2520,99428,99429],{},"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":72,"searchDepth":91,"depth":91,"links":99431},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99338,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99438,"title":99439,"body":99440,"description":2546,"extension":2547,"meta":99457,"navigation":2549,"path":99458,"seo":99459,"stem":99460,"__hash__":99461},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99441,"toc":99455},[99442,99445,99450],[10,99443,99439],{"id":99444},"_3一维数组的索引和切片",[24,99446,99447],{},[40,99448],{"alt":72,"src":99449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[24,99451,99452],{},[40,99453],{"alt":72,"src":99454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":72,"searchDepth":91,"depth":91,"links":99456},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99439,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99463,"title":99464,"body":99465,"description":2546,"extension":2547,"meta":99948,"navigation":2549,"path":99949,"seo":99950,"stem":99951,"__hash__":99952},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99466,"toc":99946},[99467,99470,99473,99478,99511,99514,99552,99555,99589,99592,99697,99700,99737,99740,99841,99844,99895,99898,99940,99943],[10,99468,99464],{"id":99469},"_4二维数组的索引与切片",[24,99471,99472],{},"①获取指定单个元素",[24,99474,99475],{},[40,99476],{"alt":72,"src":99477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[67,99479,99481],{"className":32846,"code":99480,"language":32848,"meta":72,"style":72},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[74,99482,99483,99488,99493,99498],{"__ignoreMap":72},[77,99484,99485],{"class":79,"line":80},[77,99486,99487],{"class":323},"#获取元素9\n",[77,99489,99490],{"class":79,"line":91},[77,99491,99492],{"class":323},"#先获取所在行，再获取所在列\n",[77,99494,99495],{"class":79,"line":107},[77,99496,99497],{"class":323},"#数组[行索引号，列索引号]\n",[77,99499,99500,99503,99505,99507,99509],{"class":79,"line":191},[77,99501,99502],{"class":87},"a[",[77,99504,2120],{"class":94},[77,99506,2992],{"class":87},[77,99508,2696],{"class":94},[77,99510,35713],{"class":87},[24,99512,99513],{},"②获取整行元素",[67,99515,99517],{"className":32846,"code":99516,"language":32848,"meta":72,"style":72},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[74,99518,99519,99524,99529,99537,99542],{"__ignoreMap":72},[77,99520,99521],{"class":79,"line":80},[77,99522,99523],{"class":323},"#获取整行 数组[行索引号]\n",[77,99525,99526],{"class":79,"line":91},[77,99527,99528],{"class":323},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[77,99530,99531,99533,99535],{"class":79,"line":107},[77,99532,99502],{"class":87},[77,99534,2696],{"class":94},[77,99536,35713],{"class":87},[77,99538,99539],{"class":79,"line":191},[77,99540,99541],{"class":323},"#也可以负索引获取一行\n",[77,99543,99544,99546,99548,99550],{"class":79,"line":1543},[77,99545,99502],{"class":87},[77,99547,3145],{"class":2123},[77,99549,2120],{"class":94},[77,99551,35713],{"class":87},[24,99553,99554],{},"③获取整列元素",[67,99556,99558],{"className":32846,"code":99557,"language":32848,"meta":72,"style":72},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[74,99559,99560,99565,99574,99579],{"__ignoreMap":72},[77,99561,99562],{"class":79,"line":80},[77,99563,99564],{"class":323},"#获取整列 数组名[:,列索引]\n",[77,99566,99567,99570,99572],{"class":79,"line":91},[77,99568,99569],{"class":87},"a[:,",[77,99571,2696],{"class":94},[77,99573,35713],{"class":87},[77,99575,99576],{"class":79,"line":107},[77,99577,99578],{"class":323},"#也可以负索引获取一列\n",[77,99580,99581,99583,99585,99587],{"class":79,"line":191},[77,99582,99569],{"class":87},[77,99584,3145],{"class":2123},[77,99586,2120],{"class":94},[77,99588,35713],{"class":87},[24,99590,99591],{},"④部分行部分列的元素",[67,99593,99595],{"className":32846,"code":99594,"language":32848,"meta":72,"style":72},"#部分行部分列 数组名[行切片，列切片]\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",[74,99596,99597,99602,99612,99616,99620,99625,99630,99634,99646,99650,99654,99659,99664,99669,99674,99678,99683],{"__ignoreMap":72},[77,99598,99599],{"class":79,"line":80},[77,99600,99601],{"class":323},"#部分行部分列 数组名[行切片，列切片]\n",[77,99603,99604,99607,99609],{"class":79,"line":91},[77,99605,99606],{"class":87},"a[:",[77,99608,2696],{"class":94},[77,99610,99611],{"class":87},",:]\n",[77,99613,99614],{"class":79,"line":107},[77,99615,96000],{"class":323},[77,99617,99618],{"class":79,"line":191},[77,99619,96364],{"class":271},[77,99621,99622],{"class":79,"line":1543},[77,99623,99624],{"class":271},"array([[ 1,  2,  3,  4,  5,  6],\n",[77,99626,99627],{"class":79,"line":1549},[77,99628,99629],{"class":271},"       [ 7,  8,  9, 10, 11, 12]])\n",[77,99631,99632],{"class":79,"line":1566},[77,99633,96364],{"class":271},[77,99635,99636,99638,99640,99642,99644],{"class":79,"line":1572},[77,99637,99569],{"class":87},[77,99639,2120],{"class":94},[77,99641,3472],{"class":87},[77,99643,2907],{"class":94},[77,99645,35713],{"class":87},[77,99647,99648],{"class":79,"line":1589},[77,99649,96000],{"class":323},[77,99651,99652],{"class":79,"line":1595},[77,99653,96364],{"class":271},[77,99655,99656],{"class":79,"line":4088},[77,99657,99658],{"class":271},"array([[ 2,  3,  4],\n",[77,99660,99661],{"class":79,"line":4093},[77,99662,99663],{"class":271},"       [ 8,  9, 10],\n",[77,99665,99666],{"class":79,"line":4099},[77,99667,99668],{"class":271},"       [14, 15, 16],\n",[77,99670,99671],{"class":79,"line":4104},[77,99672,99673],{"class":271},"       [20, 21, 22]])\n",[77,99675,99676],{"class":79,"line":4118},[77,99677,96364],{"class":271},[77,99679,99680],{"class":79,"line":4123},[77,99681,99682],{"class":323},"#对列行同时进行切片，使用了step参数\n",[77,99684,99685,99688,99690,99693,99695],{"class":79,"line":4129},[77,99686,99687],{"class":87},"a[::",[77,99689,2696],{"class":94},[77,99691,99692],{"class":87},",::",[77,99694,2696],{"class":94},[77,99696,35713],{"class":87},[24,99698,99699],{},"⑤同时获取两个元素",[67,99701,99703],{"className":32846,"code":99702,"language":32848,"meta":72,"style":72},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[74,99704,99705,99710,99715],{"__ignoreMap":72},[77,99706,99707],{"class":79,"line":80},[77,99708,99709],{"class":323},"#同时获取第三行第二列，第四行第一列\n",[77,99711,99712],{"class":79,"line":91},[77,99713,99714],{"class":323},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[77,99716,99717,99720,99722,99724,99726,99728,99730,99732,99734],{"class":79,"line":107},[77,99718,99719],{"class":87},"a[(",[77,99721,2696],{"class":94},[77,99723,2992],{"class":87},[77,99725,2690],{"class":94},[77,99727,44713],{"class":87},[77,99729,2120],{"class":94},[77,99731,2992],{"class":87},[77,99733,1939],{"class":94},[77,99735,99736],{"class":87},")]\n",[24,99738,99739],{},"⑥切片，对行进行反向获取",[67,99741,99743],{"className":32846,"code":99742,"language":32848,"meta":72,"style":72},"#切片 对所有行进行反向获取\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",[74,99744,99745,99750,99760,99764,99768,99773,99778,99783,99788,99792,99797,99813,99817,99822,99827,99832,99837],{"__ignoreMap":72},[77,99746,99747],{"class":79,"line":80},[77,99748,99749],{"class":323},"#切片 对所有行进行反向获取\n",[77,99751,99752,99754,99756,99758],{"class":79,"line":91},[77,99753,99687],{"class":87},[77,99755,3145],{"class":2123},[77,99757,2120],{"class":94},[77,99759,35713],{"class":87},[77,99761,99762],{"class":79,"line":107},[77,99763,96000],{"class":323},[77,99765,99766],{"class":79,"line":191},[77,99767,96364],{"class":271},[77,99769,99770],{"class":79,"line":1543},[77,99771,99772],{"class":271},"array([[19, 20, 21, 22, 23, 24],\n",[77,99774,99775],{"class":79,"line":1549},[77,99776,99777],{"class":271},"       [13, 14, 15, 16, 17, 18],\n",[77,99779,99780],{"class":79,"line":1566},[77,99781,99782],{"class":271},"       [ 7,  8,  9, 10, 11, 12],\n",[77,99784,99785],{"class":79,"line":1572},[77,99786,99787],{"class":271},"       [ 1,  2,  3,  4,  5,  6]])\n",[77,99789,99790],{"class":79,"line":1589},[77,99791,96364],{"class":271},[77,99793,99794],{"class":79,"line":1595},[77,99795,99796],{"class":323},"#对行列都进行反向切片获取\n",[77,99798,99799,99801,99803,99805,99807,99809,99811],{"class":79,"line":4088},[77,99800,99687],{"class":87},[77,99802,3145],{"class":2123},[77,99804,2120],{"class":94},[77,99806,99692],{"class":87},[77,99808,3145],{"class":2123},[77,99810,2120],{"class":94},[77,99812,35713],{"class":87},[77,99814,99815],{"class":79,"line":4093},[77,99816,96364],{"class":271},[77,99818,99819],{"class":79,"line":4099},[77,99820,99821],{"class":271},"array([[24, 23, 22, 21, 20, 19],\n",[77,99823,99824],{"class":79,"line":4104},[77,99825,99826],{"class":271},"       [18, 17, 16, 15, 14, 13],\n",[77,99828,99829],{"class":79,"line":4118},[77,99830,99831],{"class":271},"       [12, 11, 10,  9,  8,  7],\n",[77,99833,99834],{"class":79,"line":4123},[77,99835,99836],{"class":271},"       [ 6,  5,  4,  3,  2,  1]])\n",[77,99838,99839],{"class":79,"line":4129},[77,99840,96364],{"class":271},[24,99842,99843],{},"⑦修改元素",[67,99845,99847],{"className":32846,"code":99846,"language":32848,"meta":72,"style":72},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[74,99848,99849,99854,99872,99877],{"__ignoreMap":72},[77,99850,99851],{"class":79,"line":80},[77,99852,99853],{"class":323},"#获取前两行和前两列\n",[77,99855,99856,99859,99861,99863,99865,99868,99870],{"class":79,"line":91},[77,99857,99858],{"class":87},"sub_a",[77,99860,268],{"class":2123},[77,99862,99606],{"class":87},[77,99864,2696],{"class":94},[77,99866,99867],{"class":87},",:",[77,99869,2696],{"class":94},[77,99871,35713],{"class":87},[77,99873,99874],{"class":79,"line":107},[77,99875,99876],{"class":323},"#修改sub_a第一个元素的值\n",[77,99878,99879,99882,99884,99886,99888,99890,99892],{"class":79,"line":191},[77,99880,99881],{"class":87},"sub_a[",[77,99883,1939],{"class":94},[77,99885,2992],{"class":87},[77,99887,1939],{"class":94},[77,99889,3552],{"class":87},[77,99891,268],{"class":2123},[77,99893,99894],{"class":94},"100\n",[24,99896,99897],{},"⑧数组复制copy()",[67,99899,99901],{"className":32846,"code":99900,"language":32848,"meta":72,"style":72},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[74,99902,99903,99908,99918,99923],{"__ignoreMap":72},[77,99904,99905],{"class":79,"line":80},[77,99906,99907],{"class":323},"#数组复制\n",[77,99909,99910,99913,99915],{"class":79,"line":91},[77,99911,99912],{"class":87},"copy_a",[77,99914,268],{"class":2123},[77,99916,99917],{"class":87},"np.copy(sub_a)\n",[77,99919,99920],{"class":79,"line":107},[77,99921,99922],{"class":323},"#修改copy_a后不影响原数组\n",[77,99924,99925,99928,99930,99932,99934,99936,99938],{"class":79,"line":191},[77,99926,99927],{"class":87},"copy_a[",[77,99929,1939],{"class":94},[77,99931,2992],{"class":87},[77,99933,1939],{"class":94},[77,99935,3552],{"class":87},[77,99937,268],{"class":2123},[77,99939,99894],{"class":94},[24,99941,99942],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2520,99944,99945],{},"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":72,"searchDepth":91,"depth":91,"links":99947},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99464,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99954,"title":99955,"body":99956,"description":2546,"extension":2547,"meta":100448,"navigation":2549,"path":100449,"seo":100450,"stem":100451,"__hash__":100452},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99957,"toc":100440},[99958,99961,99965,99968,99971,100024,100027,100052,100055,100074,100094,100097,100113,100117,100163,100167,100209,100213,100216,100219,100222,100225,100228,100290,100350,100354,100357,100414,100418,100423,100432,100437],[10,99959,99955],{"id":99960},"_5改变数组的维度",[14,99962,99964],{"id":99963},"_51-使用reshape","5.1 使用reshape()",[24,99966,99967],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[24,99969,99970],{},"①一维数组转换为二维数组",[67,99972,99974],{"className":32846,"code":99973,"language":32848,"meta":72,"style":72},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[74,99975,99976,99992,99997,100002,100007],{"__ignoreMap":72},[77,99977,99978,99980,99982,99984,99986,99988,99990],{"class":79,"line":80},[77,99979,417],{"class":87},[77,99981,268],{"class":2123},[77,99983,95438],{"class":87},[77,99985,2120],{"class":94},[77,99987,2992],{"class":87},[77,99989,3136],{"class":94},[77,99991,2628],{"class":87},[77,99993,99994],{"class":79,"line":91},[77,99995,99996],{"class":323},"#将一维数组进行转换\n",[77,99998,99999],{"class":79,"line":107},[77,100000,100001],{"class":323},"#注意点：元素个数不可以变\n",[77,100003,100004],{"class":79,"line":191},[77,100005,100006],{"class":323},"#转换维度要保持一致，不一致就异常！！！\n",[77,100008,100009,100011,100013,100016,100018,100020,100022],{"class":79,"line":1543},[77,100010,95742],{"class":87},[77,100012,268],{"class":2123},[77,100014,100015],{"class":87},"a.reshape(",[77,100017,2696],{"class":94},[77,100019,2992],{"class":87},[77,100021,2958],{"class":94},[77,100023,2628],{"class":87},[24,100025,100026],{},"②一维数组转换为三维数组",[67,100028,100030],{"className":32846,"code":100029,"language":32848,"meta":72,"style":72},"aaa=a.reshape(2,3,2)\n",[74,100031,100032],{"__ignoreMap":72},[77,100033,100034,100036,100038,100040,100042,100044,100046,100048,100050],{"class":79,"line":80},[77,100035,97957],{"class":87},[77,100037,268],{"class":2123},[77,100039,100015],{"class":87},[77,100041,2696],{"class":94},[77,100043,2992],{"class":87},[77,100045,2690],{"class":94},[77,100047,2992],{"class":87},[77,100049,2696],{"class":94},[77,100051,2628],{"class":87},[24,100053,100054],{},"③二维数组转化为一维数组",[67,100056,100058],{"className":32846,"code":100057,"language":32848,"meta":72,"style":72},"#知道元素个数：\naa.reshape(12)\n",[74,100059,100060,100065],{"__ignoreMap":72},[77,100061,100062],{"class":79,"line":80},[77,100063,100064],{"class":323},"#知道元素个数：\n",[77,100066,100067,100070,100072],{"class":79,"line":91},[77,100068,100069],{"class":87},"aa.reshape(",[77,100071,3111],{"class":94},[77,100073,2628],{"class":87},[67,100075,100077],{"className":32846,"code":100076,"language":32848,"meta":72,"style":72},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[74,100078,100079,100084],{"__ignoreMap":72},[77,100080,100081],{"class":79,"line":80},[77,100082,100083],{"class":323},"#不知道元素个数，参数传递-1\n",[77,100085,100086,100088,100090,100092],{"class":79,"line":91},[77,100087,100069],{"class":87},[77,100089,3145],{"class":2123},[77,100091,2120],{"class":94},[77,100093,2628],{"class":87},[24,100095,100096],{},"④三维数组转换为一维数组",[67,100098,100100],{"className":32846,"code":100099,"language":32848,"meta":72,"style":72},"aaa.reshape(-1)\n",[74,100101,100102],{"__ignoreMap":72},[77,100103,100104,100107,100109,100111],{"class":79,"line":80},[77,100105,100106],{"class":87},"aaa.reshape(",[77,100108,3145],{"class":2123},[77,100110,2120],{"class":94},[77,100112,2628],{"class":87},[14,100114,100116],{"id":100115},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[67,100118,100120],{"className":32846,"code":100119,"language":32848,"meta":72,"style":72},"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",[74,100121,100122,100149,100154,100158],{"__ignoreMap":72},[77,100123,100124,100126,100128,100130,100132,100134,100136,100138,100140,100142,100144,100146],{"class":79,"line":80},[77,100125,95742],{"class":87},[77,100127,268],{"class":2123},[77,100129,95438],{"class":87},[77,100131,2120],{"class":94},[77,100133,2992],{"class":87},[77,100135,3136],{"class":94},[77,100137,95443],{"class":87},[77,100139,2696],{"class":94},[77,100141,2992],{"class":87},[77,100143,2958],{"class":94},[77,100145,3043],{"class":87},[77,100147,100148],{"class":323},"#转换为2行6列的数组\n",[77,100150,100151],{"class":79,"line":91},[77,100152,100153],{"class":87},"aa.revel()\n",[77,100155,100156],{"class":79,"line":107},[77,100157,96000],{"class":323},[77,100159,100160],{"class":79,"line":191},[77,100161,100162],{"class":323},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,100164,100166],{"id":100165},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[67,100168,100170],{"className":32846,"code":100169,"language":32848,"meta":72,"style":72},"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",[74,100171,100172,100196,100201,100205],{"__ignoreMap":72},[77,100173,100174,100176,100178,100180,100182,100184,100186,100188,100190,100192,100194],{"class":79,"line":80},[77,100175,95742],{"class":87},[77,100177,268],{"class":2123},[77,100179,95438],{"class":87},[77,100181,2120],{"class":94},[77,100183,2992],{"class":87},[77,100185,3136],{"class":94},[77,100187,95443],{"class":87},[77,100189,2696],{"class":94},[77,100191,2992],{"class":87},[77,100193,2958],{"class":94},[77,100195,2628],{"class":87},[77,100197,100198],{"class":79,"line":91},[77,100199,100200],{"class":87},"aa.flatten()\n",[77,100202,100203],{"class":79,"line":107},[77,100204,96000],{"class":323},[77,100206,100207],{"class":79,"line":191},[77,100208,100162],{"class":323},[14,100210,100212],{"id":100211},"_54-使用resize","5.4 使用resize()",[24,100214,100215],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[24,100217,100218],{},"通过resize方法可以改变数组的维度",[24,100220,100221],{},"#resize修改数组维度",[24,100223,100224],{},"#以元组的形式指定形状",[24,100226,100227],{},"#改变的是原数组",[67,100229,100231],{"className":32846,"code":100230,"language":32848,"meta":72,"style":72},"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",[74,100232,100233,100249,100269,100282,100286],{"__ignoreMap":72},[77,100234,100235,100237,100239,100241,100243,100245,100247],{"class":79,"line":80},[77,100236,417],{"class":87},[77,100238,268],{"class":2123},[77,100240,95438],{"class":87},[77,100242,2120],{"class":94},[77,100244,2992],{"class":87},[77,100246,3136],{"class":94},[77,100248,2628],{"class":87},[77,100250,100251,100254,100256,100258,100260,100262,100264,100266],{"class":79,"line":91},[77,100252,100253],{"class":87},"a.shape",[77,100255,268],{"class":2123},[77,100257,2622],{"class":87},[77,100259,2696],{"class":94},[77,100261,2992],{"class":87},[77,100263,2958],{"class":94},[77,100265,3043],{"class":87},[77,100267,100268],{"class":323},"#改变了原数组\n",[77,100270,100271,100273,100275,100278,100280],{"class":79,"line":107},[77,100272,417],{"class":87},[77,100274,268],{"class":2123},[77,100276,100277],{"class":87},"resize((",[77,100279,3111],{"class":94},[77,100281,32965],{"class":87},[77,100283,100284],{"class":79,"line":191},[77,100285,96000],{"class":323},[77,100287,100288],{"class":79,"line":1543},[77,100289,100162],{"class":323},[67,100291,100293],{"className":32846,"code":100292,"language":32848,"meta":72,"style":72},"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",[74,100294,100295,100308,100312,100316,100321,100326,100331,100336,100341,100346],{"__ignoreMap":72},[77,100296,100297,100300,100302,100304,100306],{"class":79,"line":80},[77,100298,100299],{"class":87},"a.resize((",[77,100301,2958],{"class":94},[77,100303,2992],{"class":87},[77,100305,2696],{"class":94},[77,100307,32965],{"class":87},[77,100309,100310],{"class":79,"line":91},[77,100311,96000],{"class":323},[77,100313,100314],{"class":79,"line":107},[77,100315,96364],{"class":271},[77,100317,100318],{"class":79,"line":191},[77,100319,100320],{"class":271},"array([[ 1,  2],\n",[77,100322,100323],{"class":79,"line":1543},[77,100324,100325],{"class":271},"       [ 3,  4],\n",[77,100327,100328],{"class":79,"line":1549},[77,100329,100330],{"class":271},"       [ 5,  6],\n",[77,100332,100333],{"class":79,"line":1566},[77,100334,100335],{"class":271},"       [ 7,  8],\n",[77,100337,100338],{"class":79,"line":1572},[77,100339,100340],{"class":271},"       [ 9, 10],\n",[77,100342,100343],{"class":79,"line":1589},[77,100344,100345],{"class":271},"       [11, 12]])\n",[77,100347,100348],{"class":79,"line":1595},[77,100349,96364],{"class":271},[14,100351,100353],{"id":100352},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[24,100355,100356],{},"改变了原数组",[67,100358,100360],{"className":32846,"code":100359,"language":32848,"meta":72,"style":72},"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",[74,100361,100362,100378,100394,100398,100402,100406,100410],{"__ignoreMap":72},[77,100363,100364,100366,100368,100370,100372,100374,100376],{"class":79,"line":80},[77,100365,417],{"class":87},[77,100367,268],{"class":2123},[77,100369,95438],{"class":87},[77,100371,2120],{"class":94},[77,100373,2992],{"class":87},[77,100375,3136],{"class":94},[77,100377,2628],{"class":87},[77,100379,100380,100382,100384,100386,100388,100390,100392],{"class":79,"line":91},[77,100381,100253],{"class":87},[77,100383,268],{"class":2123},[77,100385,2622],{"class":87},[77,100387,2696],{"class":94},[77,100389,2992],{"class":87},[77,100391,2958],{"class":94},[77,100393,2628],{"class":87},[77,100395,100396],{"class":79,"line":107},[77,100397,96000],{"class":323},[77,100399,100400],{"class":79,"line":191},[77,100401,96364],{"class":271},[77,100403,100404],{"class":79,"line":1543},[77,100405,99624],{"class":271},[77,100407,100408],{"class":79,"line":1549},[77,100409,99629],{"class":271},[77,100411,100412],{"class":79,"line":1566},[77,100413,96364],{"class":271},[14,100415,100417],{"id":100416},"_56-重要比较","5.6 重要比较：",[24,100419,100420],{},[40,100421],{"alt":72,"src":100422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[24,100424,100425,100426,100428,100429,100431],{},"口诀：NumPy 函数要么用 ",[74,100427,98399],{},"，要么用 ",[74,100430,33963],{},"，创建结构用 shape，造数据用 size",[24,100433,100434],{},[40,100435],{"alt":72,"src":100436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2520,100438,100439],{},"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":72,"searchDepth":91,"depth":91,"links":100441},[100442,100443,100444,100445,100446,100447],{"id":99963,"depth":91,"text":99964},{"id":100115,"depth":91,"text":100116},{"id":100165,"depth":91,"text":100166},{"id":100211,"depth":91,"text":100212},{"id":100352,"depth":91,"text":100353},{"id":100416,"depth":91,"text":100417},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99955,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100454,"title":100455,"body":100456,"description":2546,"extension":2547,"meta":101528,"navigation":2549,"path":101529,"seo":101530,"stem":101531,"__hash__":101532},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100457,"toc":101522},[100458,100461,100465,100468,100471,100474,100539,100542,100582,100585,100667,100670,100675,100697,100699,100704,100709,100712,100715,100870,100873,101075,101079,101082,101085,101153,101155,101160,101163,101166,101246,101250,101253,101255,101328,101330,101335,101337,101417,101421,101424,101427,101430,101433,101436,101439,101519],[10,100459,100455],{"id":100460},"_6数组的拼接",[14,100462,100464],{"id":100463},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[24,100466,100467],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[24,100469,100470],{},"函数内部传两个数列构成的数列或者元组",[24,100472,100473],{},"①一维数组的拼接",[67,100475,100477],{"className":32846,"code":100476,"language":32848,"meta":72,"style":72},"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",[74,100478,100479,100499,100519,100524,100529,100534],{"__ignoreMap":72},[77,100480,100481,100483,100485,100487,100489,100491,100493,100495,100497],{"class":79,"line":80},[77,100482,417],{"class":87},[77,100484,268],{"class":2123},[77,100486,95460],{"class":87},[77,100488,2120],{"class":94},[77,100490,2992],{"class":87},[77,100492,2696],{"class":94},[77,100494,2992],{"class":87},[77,100496,2690],{"class":94},[77,100498,7132],{"class":87},[77,100500,100501,100503,100505,100507,100509,100511,100513,100515,100517],{"class":79,"line":91},[77,100502,2877],{"class":87},[77,100504,268],{"class":2123},[77,100506,95460],{"class":87},[77,100508,2907],{"class":94},[77,100510,2992],{"class":87},[77,100512,2933],{"class":94},[77,100514,2992],{"class":87},[77,100516,2958],{"class":94},[77,100518,7132],{"class":87},[77,100520,100521],{"class":79,"line":107},[77,100522,100523],{"class":323},"#调用concatenate进行数组拼接\n",[77,100525,100526],{"class":79,"line":191},[77,100527,100528],{"class":87},"np.concatenate((a,b))\n",[77,100530,100531],{"class":79,"line":1543},[77,100532,100533],{"class":323},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[77,100535,100536],{"class":79,"line":1549},[77,100537,100538],{"class":323},"#np.concatenate([a,b])\n",[24,100540,100541],{},"②一维多个数组拼接",[67,100543,100545],{"className":32846,"code":100544,"language":32848,"meta":72,"style":72},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[74,100546,100547,100552,100572,100577],{"__ignoreMap":72},[77,100548,100549],{"class":79,"line":80},[77,100550,100551],{"class":323},"#也可以多个数组进行拼接\n",[77,100553,100554,100556,100558,100560,100562,100564,100566,100568,100570],{"class":79,"line":91},[77,100555,2902],{"class":87},[77,100557,268],{"class":2123},[77,100559,95460],{"class":87},[77,100561,3059],{"class":94},[77,100563,2992],{"class":87},[77,100565,3085],{"class":94},[77,100567,2992],{"class":87},[77,100569,3136],{"class":94},[77,100571,7132],{"class":87},[77,100573,100574],{"class":79,"line":107},[77,100575,100576],{"class":87},"c\n",[77,100578,100579],{"class":79,"line":191},[77,100580,100581],{"class":87},"np.concatenate((a,b,c))\n",[24,100583,100584],{},"③二维数组拼接",[67,100586,100588],{"className":32846,"code":100587,"language":32848,"meta":72,"style":72},"#二维数组使用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",[74,100589,100590,100595,100619,100644,100649,100654],{"__ignoreMap":72},[77,100591,100592],{"class":79,"line":80},[77,100593,100594],{"class":323},"#二维数组使用concatenate进行拼接\n",[77,100596,100597,100599,100601,100603,100605,100607,100609,100611,100613,100615,100617],{"class":79,"line":91},[77,100598,95742],{"class":87},[77,100600,268],{"class":2123},[77,100602,95438],{"class":87},[77,100604,2120],{"class":94},[77,100606,2992],{"class":87},[77,100608,3136],{"class":94},[77,100610,95443],{"class":87},[77,100612,2690],{"class":94},[77,100614,2992],{"class":87},[77,100616,2907],{"class":94},[77,100618,2628],{"class":87},[77,100620,100621,100624,100626,100628,100630,100632,100634,100636,100638,100640,100642],{"class":79,"line":107},[77,100622,100623],{"class":87},"bb",[77,100625,268],{"class":2123},[77,100627,95438],{"class":87},[77,100629,2951],{"class":94},[77,100631,2992],{"class":87},[77,100633,3255],{"class":94},[77,100635,95443],{"class":87},[77,100637,2690],{"class":94},[77,100639,2992],{"class":87},[77,100641,2907],{"class":94},[77,100643,2628],{"class":87},[77,100645,100646],{"class":79,"line":191},[77,100647,100648],{"class":323},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[77,100650,100651],{"class":79,"line":1543},[77,100652,100653],{"class":323},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[77,100655,100656,100659,100661,100663,100665],{"class":79,"line":1549},[77,100657,100658],{"class":87},"np.concatenate((aa,bb),",[77,100660,49980],{"class":7691},[77,100662,268],{"class":2123},[77,100664,1939],{"class":94},[77,100666,2628],{"class":87},[24,100668,100669],{},"结果：",[24,100671,100672],{},[40,100673],{"alt":72,"src":100674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[67,100676,100678],{"className":32846,"code":100677,"language":32848,"meta":72,"style":72},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[74,100679,100680,100685],{"__ignoreMap":72},[77,100681,100682],{"class":79,"line":80},[77,100683,100684],{"class":323},"#指定axis为1进行拼接\n",[77,100686,100687,100689,100691,100693,100695],{"class":79,"line":91},[77,100688,100658],{"class":87},[77,100690,49980],{"class":7691},[77,100692,268],{"class":2123},[77,100694,2120],{"class":94},[77,100696,2628],{"class":87},[24,100698,100669],{},[24,100700,100701],{},[40,100702],{"alt":72,"src":100703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[24,100705,100706],{},[27,100707,100708],{},"二维数组总结：0竖着方向，1横着方向",[24,100710,100711],{},"④三维数组拼接",[24,100713,100714],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[67,100716,100718],{"className":32846,"code":100717,"language":32848,"meta":72,"style":72},"#两个三行六列\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",[74,100719,100720,100725,100753,100783,100788,100805,100810,100815,100820,100837,100842,100847,100852,100865],{"__ignoreMap":72},[77,100721,100722],{"class":79,"line":80},[77,100723,100724],{"class":323},"#两个三行六列\n",[77,100726,100727,100729,100731,100733,100735,100737,100739,100741,100743,100745,100747,100749,100751],{"class":79,"line":91},[77,100728,97957],{"class":87},[77,100730,268],{"class":2123},[77,100732,95438],{"class":87},[77,100734,2120],{"class":94},[77,100736,2992],{"class":87},[77,100738,2939],{"class":94},[77,100740,95443],{"class":87},[77,100742,2696],{"class":94},[77,100744,2992],{"class":87},[77,100746,2690],{"class":94},[77,100748,2992],{"class":87},[77,100750,2958],{"class":94},[77,100752,2628],{"class":87},[77,100754,100755,100758,100760,100762,100764,100766,100769,100771,100773,100775,100777,100779,100781],{"class":79,"line":107},[77,100756,100757],{"class":87},"bbb",[77,100759,268],{"class":2123},[77,100761,95438],{"class":87},[77,100763,2951],{"class":94},[77,100765,2992],{"class":87},[77,100767,100768],{"class":94},"137",[77,100770,95443],{"class":87},[77,100772,2696],{"class":94},[77,100774,2992],{"class":87},[77,100776,2690],{"class":94},[77,100778,2992],{"class":87},[77,100780,2958],{"class":94},[77,100782,2628],{"class":87},[77,100784,100785],{"class":79,"line":191},[77,100786,100787],{"class":323},"#axis=0\n",[77,100789,100790,100792,100794,100797,100799,100801,100803],{"class":79,"line":1543},[77,100791,3308],{"class":87},[77,100793,268],{"class":2123},[77,100795,100796],{"class":87},"np.concatenate((aaa,bbb),",[77,100798,49980],{"class":7691},[77,100800,268],{"class":2123},[77,100802,1939],{"class":94},[77,100804,2628],{"class":87},[77,100806,100807],{"class":79,"line":1549},[77,100808,100809],{"class":87},"s.shape\n",[77,100811,100812],{"class":79,"line":1566},[77,100813,100814],{"class":323},"#输出：(4,3,6)\n",[77,100816,100817],{"class":79,"line":1572},[77,100818,100819],{"class":323},"#axis=1\n",[77,100821,100822,100825,100827,100829,100831,100833,100835],{"class":79,"line":1589},[77,100823,100824],{"class":87},"ss",[77,100826,268],{"class":2123},[77,100828,100796],{"class":87},[77,100830,49980],{"class":7691},[77,100832,268],{"class":2123},[77,100834,2120],{"class":94},[77,100836,2628],{"class":87},[77,100838,100839],{"class":79,"line":1595},[77,100840,100841],{"class":87},"ss.shape\n",[77,100843,100844],{"class":79,"line":4088},[77,100845,100846],{"class":323},"#输出：(2,6,6)\n",[77,100848,100849],{"class":79,"line":4093},[77,100850,100851],{"class":323},"#axis=2\n",[77,100853,100854,100856,100858,100860,100862],{"class":79,"line":4099},[77,100855,100796],{"class":87},[77,100857,49980],{"class":7691},[77,100859,268],{"class":2123},[77,100861,2696],{"class":94},[77,100863,100864],{"class":87},").shape\n",[77,100866,100867],{"class":79,"line":4104},[77,100868,100869],{"class":323},"#输出：（2，3，12）\n",[24,100871,100872],{},"⑤四维数组拼接",[67,100874,100876],{"className":32846,"code":100875,"language":32848,"meta":72,"style":72},"#两个三行六列\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",[74,100877,100878,100882,100910,100938,100963,100989,100993,101006,101011,101015,101027,101032,101036,101048,101053,101058,101070],{"__ignoreMap":72},[77,100879,100880],{"class":79,"line":80},[77,100881,100724],{"class":323},[77,100883,100884,100886,100888,100890,100892,100894,100896,100898,100900,100902,100904,100906,100908],{"class":79,"line":91},[77,100885,97957],{"class":87},[77,100887,268],{"class":2123},[77,100889,95438],{"class":87},[77,100891,2120],{"class":94},[77,100893,2992],{"class":87},[77,100895,2939],{"class":94},[77,100897,95443],{"class":87},[77,100899,2696],{"class":94},[77,100901,2992],{"class":87},[77,100903,2690],{"class":94},[77,100905,2992],{"class":87},[77,100907,2958],{"class":94},[77,100909,2628],{"class":87},[77,100911,100912,100914,100916,100918,100920,100922,100924,100926,100928,100930,100932,100934,100936],{"class":79,"line":107},[77,100913,100757],{"class":87},[77,100915,268],{"class":2123},[77,100917,95438],{"class":87},[77,100919,2951],{"class":94},[77,100921,2992],{"class":87},[77,100923,100768],{"class":94},[77,100925,95443],{"class":87},[77,100927,2696],{"class":94},[77,100929,2992],{"class":87},[77,100931,2690],{"class":94},[77,100933,2992],{"class":87},[77,100935,2958],{"class":94},[77,100937,2628],{"class":87},[77,100939,100940,100943,100945,100947,100949,100951,100953,100955,100957,100959,100961],{"class":79,"line":191},[77,100941,100942],{"class":87},"aaaa",[77,100944,268],{"class":2123},[77,100946,100106],{"class":87},[77,100948,2696],{"class":94},[77,100950,2992],{"class":87},[77,100952,2690],{"class":94},[77,100954,2992],{"class":87},[77,100956,2690],{"class":94},[77,100958,2992],{"class":87},[77,100960,2696],{"class":94},[77,100962,2628],{"class":87},[77,100964,100965,100968,100970,100973,100975,100977,100979,100981,100983,100985,100987],{"class":79,"line":1543},[77,100966,100967],{"class":87},"bbbb",[77,100969,268],{"class":2123},[77,100971,100972],{"class":87},"bbb.reshape(",[77,100974,2696],{"class":94},[77,100976,2992],{"class":87},[77,100978,2690],{"class":94},[77,100980,2992],{"class":87},[77,100982,2690],{"class":94},[77,100984,2992],{"class":87},[77,100986,2696],{"class":94},[77,100988,2628],{"class":87},[77,100990,100991],{"class":79,"line":1549},[77,100992,100787],{"class":323},[77,100994,100995,100998,101000,101002,101004],{"class":79,"line":1566},[77,100996,100997],{"class":87},"np.concatenate((aaaa,bbbb),",[77,100999,49980],{"class":7691},[77,101001,268],{"class":2123},[77,101003,1939],{"class":94},[77,101005,100864],{"class":87},[77,101007,101008],{"class":79,"line":1572},[77,101009,101010],{"class":323},"#结果：（4，3，3，2）\n",[77,101012,101013],{"class":79,"line":1589},[77,101014,100819],{"class":323},[77,101016,101017,101019,101021,101023,101025],{"class":79,"line":1595},[77,101018,100997],{"class":87},[77,101020,49980],{"class":7691},[77,101022,268],{"class":2123},[77,101024,2120],{"class":94},[77,101026,100864],{"class":87},[77,101028,101029],{"class":79,"line":4088},[77,101030,101031],{"class":323},"#结果：（2，6，3，2）\n",[77,101033,101034],{"class":79,"line":4093},[77,101035,100851],{"class":323},[77,101037,101038,101040,101042,101044,101046],{"class":79,"line":4099},[77,101039,100997],{"class":87},[77,101041,49980],{"class":7691},[77,101043,268],{"class":2123},[77,101045,2696],{"class":94},[77,101047,100864],{"class":87},[77,101049,101050],{"class":79,"line":4104},[77,101051,101052],{"class":323},"#结果：（2，3，6，2）\n",[77,101054,101055],{"class":79,"line":4118},[77,101056,101057],{"class":323},"#axis=3\n",[77,101059,101060,101062,101064,101066,101068],{"class":79,"line":4123},[77,101061,100997],{"class":87},[77,101063,49980],{"class":7691},[77,101065,268],{"class":2123},[77,101067,2690],{"class":94},[77,101069,100864],{"class":87},[77,101071,101072],{"class":79,"line":4129},[77,101073,101074],{"class":323},"#结果：（2，3，3，4）\n",[14,101076,101078],{"id":101077},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[24,101080,101081],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[24,101083,101084],{},"①二维数组",[67,101086,101088],{"className":32846,"code":101087,"language":32848,"meta":72,"style":72},"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",[74,101089,101090,101114,101138,101143,101148],{"__ignoreMap":72},[77,101091,101092,101094,101096,101098,101100,101102,101104,101106,101108,101110,101112],{"class":79,"line":80},[77,101093,95742],{"class":87},[77,101095,268],{"class":2123},[77,101097,95438],{"class":87},[77,101099,2120],{"class":94},[77,101101,2992],{"class":87},[77,101103,3136],{"class":94},[77,101105,95443],{"class":87},[77,101107,2690],{"class":94},[77,101109,2992],{"class":87},[77,101111,2907],{"class":94},[77,101113,2628],{"class":87},[77,101115,101116,101118,101120,101122,101124,101126,101128,101130,101132,101134,101136],{"class":79,"line":91},[77,101117,100623],{"class":87},[77,101119,268],{"class":2123},[77,101121,95438],{"class":87},[77,101123,2951],{"class":94},[77,101125,2992],{"class":87},[77,101127,3255],{"class":94},[77,101129,95443],{"class":87},[77,101131,2690],{"class":94},[77,101133,2992],{"class":87},[77,101135,2907],{"class":94},[77,101137,2628],{"class":87},[77,101139,101140],{"class":79,"line":107},[77,101141,101142],{"class":87},"np.hstack((aa,bb))\n",[77,101144,101145],{"class":79,"line":191},[77,101146,101147],{"class":323},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[77,101149,101150],{"class":79,"line":1543},[77,101151,101152],{"class":323},"#np.hstack([aa,bb])\n",[24,101154,100669],{},[24,101156,101157],{},[40,101158],{"alt":72,"src":101159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[24,101161,101162],{},"等效于concatenate()函数中axis=1时的情况",[24,101164,101165],{},"②三维数组",[67,101167,101169],{"className":32846,"code":101168,"language":32848,"meta":72,"style":72},"#两个三行六列\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",[74,101170,101171,101175,101203,101231,101236,101241],{"__ignoreMap":72},[77,101172,101173],{"class":79,"line":80},[77,101174,100724],{"class":323},[77,101176,101177,101179,101181,101183,101185,101187,101189,101191,101193,101195,101197,101199,101201],{"class":79,"line":91},[77,101178,97957],{"class":87},[77,101180,268],{"class":2123},[77,101182,95438],{"class":87},[77,101184,2120],{"class":94},[77,101186,2992],{"class":87},[77,101188,2939],{"class":94},[77,101190,95443],{"class":87},[77,101192,2696],{"class":94},[77,101194,2992],{"class":87},[77,101196,2690],{"class":94},[77,101198,2992],{"class":87},[77,101200,2958],{"class":94},[77,101202,2628],{"class":87},[77,101204,101205,101207,101209,101211,101213,101215,101217,101219,101221,101223,101225,101227,101229],{"class":79,"line":107},[77,101206,100757],{"class":87},[77,101208,268],{"class":2123},[77,101210,95438],{"class":87},[77,101212,2951],{"class":94},[77,101214,2992],{"class":87},[77,101216,100768],{"class":94},[77,101218,95443],{"class":87},[77,101220,2696],{"class":94},[77,101222,2992],{"class":87},[77,101224,2690],{"class":94},[77,101226,2992],{"class":87},[77,101228,2958],{"class":94},[77,101230,2628],{"class":87},[77,101232,101233],{"class":79,"line":191},[77,101234,101235],{"class":323},"#使用hstack\n",[77,101237,101238],{"class":79,"line":1543},[77,101239,101240],{"class":87},"np.hstack((aaa,bbb)).shape\n",[77,101242,101243],{"class":79,"line":1549},[77,101244,101245],{"class":323},"#输出：（2，6，6）\n",[14,101247,101249],{"id":101248},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[24,101251,101252],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[24,101254,101084],{},[67,101256,101258],{"className":32846,"code":101257,"language":32848,"meta":72,"style":72},"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",[74,101259,101260,101284,101308,101313,101318,101323],{"__ignoreMap":72},[77,101261,101262,101264,101266,101268,101270,101272,101274,101276,101278,101280,101282],{"class":79,"line":80},[77,101263,95742],{"class":87},[77,101265,268],{"class":2123},[77,101267,95438],{"class":87},[77,101269,2120],{"class":94},[77,101271,2992],{"class":87},[77,101273,3136],{"class":94},[77,101275,95443],{"class":87},[77,101277,2690],{"class":94},[77,101279,2992],{"class":87},[77,101281,2907],{"class":94},[77,101283,2628],{"class":87},[77,101285,101286,101288,101290,101292,101294,101296,101298,101300,101302,101304,101306],{"class":79,"line":91},[77,101287,100623],{"class":87},[77,101289,268],{"class":2123},[77,101291,95438],{"class":87},[77,101293,2951],{"class":94},[77,101295,2992],{"class":87},[77,101297,3255],{"class":94},[77,101299,95443],{"class":87},[77,101301,2690],{"class":94},[77,101303,2992],{"class":87},[77,101305,2907],{"class":94},[77,101307,2628],{"class":87},[77,101309,101310],{"class":79,"line":107},[77,101311,101312],{"class":323},"#vstack 垂直方向进行堆叠\n",[77,101314,101315],{"class":79,"line":191},[77,101316,101317],{"class":87},"np.vstack((aa,bb))\n",[77,101319,101320],{"class":79,"line":1543},[77,101321,101322],{"class":323},"#与hstack传的参数类似，等价于：\n",[77,101324,101325],{"class":79,"line":1549},[77,101326,101327],{"class":87},"np.vstack([aa,bb])\n",[24,101329,100669],{},[24,101331,101332],{},[40,101333],{"alt":72,"src":101334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[24,101336,101165],{},[67,101338,101340],{"className":32846,"code":101339,"language":32848,"meta":72,"style":72},"#两个三行六列\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",[74,101341,101342,101346,101374,101402,101407,101412],{"__ignoreMap":72},[77,101343,101344],{"class":79,"line":80},[77,101345,100724],{"class":323},[77,101347,101348,101350,101352,101354,101356,101358,101360,101362,101364,101366,101368,101370,101372],{"class":79,"line":91},[77,101349,97957],{"class":87},[77,101351,268],{"class":2123},[77,101353,95438],{"class":87},[77,101355,2120],{"class":94},[77,101357,2992],{"class":87},[77,101359,2939],{"class":94},[77,101361,95443],{"class":87},[77,101363,2696],{"class":94},[77,101365,2992],{"class":87},[77,101367,2690],{"class":94},[77,101369,2992],{"class":87},[77,101371,2958],{"class":94},[77,101373,2628],{"class":87},[77,101375,101376,101378,101380,101382,101384,101386,101388,101390,101392,101394,101396,101398,101400],{"class":79,"line":107},[77,101377,100757],{"class":87},[77,101379,268],{"class":2123},[77,101381,95438],{"class":87},[77,101383,2951],{"class":94},[77,101385,2992],{"class":87},[77,101387,100768],{"class":94},[77,101389,95443],{"class":87},[77,101391,2696],{"class":94},[77,101393,2992],{"class":87},[77,101395,2690],{"class":94},[77,101397,2992],{"class":87},[77,101399,2958],{"class":94},[77,101401,2628],{"class":87},[77,101403,101404],{"class":79,"line":191},[77,101405,101406],{"class":323},"#使用vstack\n",[77,101408,101409],{"class":79,"line":1543},[77,101410,101411],{"class":87},"np.vstack((aaa,bbb)).shape\n",[77,101413,101414],{"class":79,"line":1549},[77,101415,101416],{"class":323},"#输出：（4，3，6）\n",[14,101418,101420],{"id":101419},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[24,101422,101423],{},"该方法是三维数组特有的方法",[24,101425,101426],{},"也就是说",[24,101428,101429],{},"一维数组拼接方法用：concatenate()",[24,101431,101432],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[24,101434,101435],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[24,101437,101438],{},"四维数组及多维数组只能用concatenate进行拼接",[67,101440,101442],{"className":32846,"code":101441,"language":32848,"meta":72,"style":72},"#两个三行六列\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",[74,101443,101444,101448,101476,101504,101509,101514],{"__ignoreMap":72},[77,101445,101446],{"class":79,"line":80},[77,101447,100724],{"class":323},[77,101449,101450,101452,101454,101456,101458,101460,101462,101464,101466,101468,101470,101472,101474],{"class":79,"line":91},[77,101451,97957],{"class":87},[77,101453,268],{"class":2123},[77,101455,95438],{"class":87},[77,101457,2120],{"class":94},[77,101459,2992],{"class":87},[77,101461,2939],{"class":94},[77,101463,95443],{"class":87},[77,101465,2696],{"class":94},[77,101467,2992],{"class":87},[77,101469,2690],{"class":94},[77,101471,2992],{"class":87},[77,101473,2958],{"class":94},[77,101475,2628],{"class":87},[77,101477,101478,101480,101482,101484,101486,101488,101490,101492,101494,101496,101498,101500,101502],{"class":79,"line":107},[77,101479,100757],{"class":87},[77,101481,268],{"class":2123},[77,101483,95438],{"class":87},[77,101485,2951],{"class":94},[77,101487,2992],{"class":87},[77,101489,100768],{"class":94},[77,101491,95443],{"class":87},[77,101493,2696],{"class":94},[77,101495,2992],{"class":87},[77,101497,2690],{"class":94},[77,101499,2992],{"class":87},[77,101501,2958],{"class":94},[77,101503,2628],{"class":87},[77,101505,101506],{"class":79,"line":191},[77,101507,101508],{"class":323},"#使用dstack\n",[77,101510,101511],{"class":79,"line":1543},[77,101512,101513],{"class":87},"np.dstack((aaa,bbb)).shape\n",[77,101515,101516],{"class":79,"line":1549},[77,101517,101518],{"class":323},"#结果：（2，3，12）\n",[2520,101520,101521],{},"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":72,"searchDepth":91,"depth":91,"links":101523},[101524,101525,101526,101527],{"id":100463,"depth":91,"text":100464},{"id":101077,"depth":91,"text":101078},{"id":101248,"depth":91,"text":101249},{"id":101419,"depth":91,"text":101420},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100455,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101534,"title":101535,"body":101536,"description":2546,"extension":2547,"meta":101811,"navigation":2549,"path":101812,"seo":101813,"stem":101814,"__hash__":101815},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101537,"toc":101809},[101538,101541,101544,101638,101641,101644,101647,101650,101653,101656,101659,101662,101806],[10,101539,101535],{"id":101540},"_7数组转置",[24,101542,101543],{},"使用transpose()函数",[67,101545,101547],{"className":32846,"code":101546,"language":32848,"meta":72,"style":72},"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",[74,101548,101549,101559,101583,101588,101593,101598,101603,101611,101615,101619,101624,101629,101634],{"__ignoreMap":72},[77,101550,101551,101553,101555,101557],{"class":79,"line":80},[77,101552,32860],{"class":2123},[77,101554,33847],{"class":87},[77,101556,33850],{"class":2123},[77,101558,33853],{"class":87},[77,101560,101561,101563,101565,101567,101569,101571,101573,101575,101577,101579,101581],{"class":79,"line":91},[77,101562,417],{"class":87},[77,101564,268],{"class":2123},[77,101566,34184],{"class":87},[77,101568,2120],{"class":94},[77,101570,2992],{"class":87},[77,101572,3136],{"class":94},[77,101574,95443],{"class":87},[77,101576,2907],{"class":94},[77,101578,2992],{"class":87},[77,101580,2690],{"class":94},[77,101582,2628],{"class":87},[77,101584,101585],{"class":79,"line":107},[77,101586,101587],{"class":323},"#二维数组转置\n",[77,101589,101590],{"class":79,"line":191},[77,101591,101592],{"class":323},"#调用transpose()函数\n",[77,101594,101595],{"class":79,"line":1543},[77,101596,101597],{"class":87},"a.transpose()\n",[77,101599,101600],{"class":79,"line":1549},[77,101601,101602],{"class":323},"#对于二维数组也可以采用.T来实现\n",[77,101604,101605,101608],{"class":79,"line":1566},[77,101606,101607],{"class":87},"a.T",[77,101609,101610],{"class":323},"#与上述代码一样\n",[77,101612,101613],{"class":79,"line":1572},[77,101614,96000],{"class":323},[77,101616,101617],{"class":79,"line":1589},[77,101618,96364],{"class":271},[77,101620,101621],{"class":79,"line":1595},[77,101622,101623],{"class":271},"array([[ 1,  4,  7, 10],\n",[77,101625,101626],{"class":79,"line":4088},[77,101627,101628],{"class":271},"       [ 2,  5,  8, 11],\n",[77,101630,101631],{"class":79,"line":4093},[77,101632,101633],{"class":271},"       [ 3,  6,  9, 12]])\n",[77,101635,101636],{"class":79,"line":4099},[77,101637,96364],{"class":271},[24,101639,101640],{},"也可以使用np.transpose()的形式",[24,101642,101643],{},"#多维数组进行转置 np.transpose()",[24,101645,101646],{},"#对二维数组也可以使用np.transpose()进行转置",[24,101648,101649],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[24,101651,101652],{},"第二个参数，维度可以理解为用axis中的数来理解",[24,101654,101655],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[24,101657,101658],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[24,101660,101661],{},"四维及以上的数组也是一样的道理",[67,101663,101665],{"className":32846,"code":101664,"language":32848,"meta":72,"style":72},"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",[74,101666,101667,101695,101700,101705,101710,101728,101733,101765,101770,101775,101780,101801],{"__ignoreMap":72},[77,101668,101669,101671,101673,101675,101677,101679,101681,101683,101685,101687,101689,101691,101693],{"class":79,"line":80},[77,101670,3433],{"class":87},[77,101672,268],{"class":2123},[77,101674,95438],{"class":87},[77,101676,2120],{"class":94},[77,101678,2992],{"class":87},[77,101680,2939],{"class":94},[77,101682,95443],{"class":87},[77,101684,2690],{"class":94},[77,101686,2992],{"class":87},[77,101688,2958],{"class":94},[77,101690,2992],{"class":87},[77,101692,2696],{"class":94},[77,101694,2628],{"class":87},[77,101696,101697],{"class":79,"line":91},[77,101698,101699],{"class":87},"x.shape\n",[77,101701,101702],{"class":79,"line":107},[77,101703,101704],{"class":323},"#结果：（3,6,2）\n",[77,101706,101707],{"class":79,"line":191},[77,101708,101709],{"class":323},"#使用np.transpose()进行转置 变为(2,6,3)\n",[77,101711,101712,101715,101717,101719,101721,101723,101725],{"class":79,"line":1543},[77,101713,101714],{"class":87},"np.transpose(x,(",[77,101716,2696],{"class":94},[77,101718,2992],{"class":87},[77,101720,2120],{"class":94},[77,101722,2992],{"class":87},[77,101724,1939],{"class":94},[77,101726,101727],{"class":87},")).shape\n",[77,101729,101730],{"class":79,"line":1549},[77,101731,101732],{"class":323},"#结果：(2,6,3)\n",[77,101734,101735,101737,101739,101741,101743,101745,101747,101749,101751,101753,101755,101757,101759,101761,101763],{"class":79,"line":1566},[77,101736,100942],{"class":87},[77,101738,268],{"class":2123},[77,101740,95438],{"class":87},[77,101742,2120],{"class":94},[77,101744,2992],{"class":87},[77,101746,2939],{"class":94},[77,101748,95443],{"class":87},[77,101750,2690],{"class":94},[77,101752,2992],{"class":87},[77,101754,2696],{"class":94},[77,101756,2992],{"class":87},[77,101758,2120],{"class":94},[77,101760,2992],{"class":87},[77,101762,2958],{"class":94},[77,101764,2628],{"class":87},[77,101766,101767],{"class":79,"line":1572},[77,101768,101769],{"class":87},"aaaa.shape\n",[77,101771,101772],{"class":79,"line":1589},[77,101773,101774],{"class":323},"#结果：（3，2，1，6）\n",[77,101776,101777],{"class":79,"line":1595},[77,101778,101779],{"class":323},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[77,101781,101782,101785,101787,101789,101791,101793,101795,101797,101799],{"class":79,"line":4088},[77,101783,101784],{"class":87},"np.transpose(aaaa,(",[77,101786,2120],{"class":94},[77,101788,2992],{"class":87},[77,101790,2696],{"class":94},[77,101792,2992],{"class":87},[77,101794,1939],{"class":94},[77,101796,2992],{"class":87},[77,101798,2690],{"class":94},[77,101800,101727],{"class":87},[77,101802,101803],{"class":79,"line":4093},[77,101804,101805],{"class":323},"#结果：(2,1,3,6)\n",[2520,101807,101808],{},"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":72,"searchDepth":91,"depth":91,"links":101810},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101535,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101817,"title":101818,"body":101819,"description":2546,"extension":2547,"meta":102553,"navigation":2549,"path":102554,"seo":102555,"stem":102556,"__hash__":102557},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101820,"toc":102551},[101821,101824,101827,101830,101833,101836,101839,101842,101845,101954,101957,101960,102548],[10,101822,101818],{"id":101823},"_8数组分割",[24,101825,101826],{},"split分割",[24,101828,101829],{},"numpy.split(ary,indics_or_sections,axis)",[24,101831,101832],{},"解释：",[24,101834,101835],{},"ary:被分割的数组",[24,101837,101838],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[24,101840,101841],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[24,101843,101844],{},"①一维数组的分割",[67,101846,101848],{"className":32846,"code":101847,"language":32848,"meta":72,"style":72},"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",[74,101849,101850,101866,101871,101880,101884,101889,101897,101901,101906,101911,101924,101928,101933,101945,101949],{"__ignoreMap":72},[77,101851,101852,101854,101856,101858,101860,101862,101864],{"class":79,"line":80},[77,101853,417],{"class":87},[77,101855,268],{"class":2123},[77,101857,95438],{"class":87},[77,101859,2120],{"class":94},[77,101861,2992],{"class":87},[77,101863,3034],{"class":94},[77,101865,2628],{"class":87},[77,101867,101868],{"class":79,"line":91},[77,101869,101870],{"class":323},"#如果传入整数，必须能够平分，否则会报错\n",[77,101872,101873,101876,101878],{"class":79,"line":107},[77,101874,101875],{"class":87},"np.split(a,",[77,101877,2696],{"class":94},[77,101879,2628],{"class":87},[77,101881,101882],{"class":79,"line":191},[77,101883,96000],{"class":323},[77,101885,101886],{"class":79,"line":1543},[77,101887,101888],{"class":323},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[77,101890,101891,101893,101895],{"class":79,"line":1549},[77,101892,101875],{"class":87},[77,101894,2907],{"class":94},[77,101896,2628],{"class":87},[77,101898,101899],{"class":79,"line":1566},[77,101900,96000],{"class":323},[77,101902,101903],{"class":79,"line":1572},[77,101904,101905],{"class":323},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[77,101907,101908],{"class":79,"line":1589},[77,101909,101910],{"class":323},"#传入数组\n",[77,101912,101913,101916,101918,101920,101922],{"class":79,"line":1595},[77,101914,101915],{"class":87},"np.split(a,[",[77,101917,2690],{"class":94},[77,101919,2992],{"class":87},[77,101921,2933],{"class":94},[77,101923,7132],{"class":87},[77,101925,101926],{"class":79,"line":4088},[77,101927,96000],{"class":323},[77,101929,101930],{"class":79,"line":4093},[77,101931,101932],{"class":323},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[77,101934,101935,101937,101939,101941,101943],{"class":79,"line":4099},[77,101936,101915],{"class":87},[77,101938,2933],{"class":94},[77,101940,2992],{"class":87},[77,101942,2983],{"class":94},[77,101944,7132],{"class":87},[77,101946,101947],{"class":79,"line":4104},[77,101948,96000],{"class":323},[77,101950,101951],{"class":79,"line":4118},[77,101952,101953],{"class":323},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[24,101955,101956],{},"②二维数组的分割",[24,101958,101959],{},"使用split()",[67,101961,101963],{"className":32846,"code":101962,"language":32848,"meta":72,"style":72},"#二维数组分割\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",[74,101964,101965,101970,101994,101999,102008,102012,102016,102021,102026,102031,102036,102041,102046,102051,102055,102068,102072,102076,102080,102084,102088,102093,102098,102103,102107,102112,102128,102132,102136,102141,102146,102151,102156,102161,102166,102171,102176,102181,102186,102191,102196,102201,102206,102211,102216,102221,102226,102230,102234,102254,102258,102262,102267,102272,102277,102282,102287,102292,102297,102302,102307,102312,102317,102322,102327,102332,102337,102342,102347,102352,102356,102361,102370,102374,102378,102382,102386,102390,102394,102398,102402,102406,102415,102419,102423,102427,102431,102435,102439,102443,102447,102451,102455,102459,102463,102467,102471,102475,102479,102483,102487,102491,102495,102499,102512,102516,102520,102524,102528,102532,102536,102540,102544],{"__ignoreMap":72},[77,101966,101967],{"class":79,"line":80},[77,101968,101969],{"class":323},"#二维数组分割\n",[77,101971,101972,101974,101976,101978,101980,101982,101984,101986,101988,101990,101992],{"class":79,"line":91},[77,101973,95742],{"class":87},[77,101975,268],{"class":2123},[77,101977,95438],{"class":87},[77,101979,2120],{"class":94},[77,101981,2992],{"class":87},[77,101983,2939],{"class":94},[77,101985,95443],{"class":87},[77,101987,2958],{"class":94},[77,101989,2992],{"class":87},[77,101991,2958],{"class":94},[77,101993,2628],{"class":87},[77,101995,101996],{"class":79,"line":107},[77,101997,101998],{"class":323},"#默认axis=0  传入整数平均分,按行来的\n",[77,102000,102001,102004,102006],{"class":79,"line":191},[77,102002,102003],{"class":87},"np.split(aa,",[77,102005,2690],{"class":94},[77,102007,2628],{"class":87},[77,102009,102010],{"class":79,"line":1543},[77,102011,98200],{"class":323},[77,102013,102014],{"class":79,"line":1549},[77,102015,96364],{"class":271},[77,102017,102018],{"class":79,"line":1566},[77,102019,102020],{"class":271},"[array([[ 1,  2,  3,  4,  5,  6],\n",[77,102022,102023],{"class":79,"line":1572},[77,102024,102025],{"class":271},"        [ 7,  8,  9, 10, 11, 12]]),\n",[77,102027,102028],{"class":79,"line":1589},[77,102029,102030],{"class":271}," array([[13, 14, 15, 16, 17, 18],\n",[77,102032,102033],{"class":79,"line":1595},[77,102034,102035],{"class":271},"        [19, 20, 21, 22, 23, 24]]),\n",[77,102037,102038],{"class":79,"line":4088},[77,102039,102040],{"class":271}," array([[25, 26, 27, 28, 29, 30],\n",[77,102042,102043],{"class":79,"line":4093},[77,102044,102045],{"class":271},"        [31, 32, 33, 34, 35, 36]])]\n",[77,102047,102048],{"class":79,"line":4099},[77,102049,102050],{"class":271}," '''\n",[77,102052,102053],{"class":79,"line":4104},[77,102054,101910],{"class":323},[77,102056,102057,102060,102062,102064,102066],{"class":79,"line":4118},[77,102058,102059],{"class":87},"np.split(aa,[",[77,102061,2696],{"class":94},[77,102063,2992],{"class":87},[77,102065,2933],{"class":94},[77,102067,7132],{"class":87},[77,102069,102070],{"class":79,"line":4123},[77,102071,98200],{"class":323},[77,102073,102074],{"class":79,"line":4129},[77,102075,96364],{"class":271},[77,102077,102078],{"class":79,"line":4150},[77,102079,102020],{"class":271},[77,102081,102082],{"class":79,"line":4155},[77,102083,102025],{"class":271},[77,102085,102086],{"class":79,"line":4169},[77,102087,102030],{"class":271},[77,102089,102090],{"class":79,"line":4174},[77,102091,102092],{"class":271},"        [19, 20, 21, 22, 23, 24],\n",[77,102094,102095],{"class":79,"line":4203},[77,102096,102097],{"class":271},"        [25, 26, 27, 28, 29, 30]]),\n",[77,102099,102100],{"class":79,"line":4208},[77,102101,102102],{"class":271}," array([[31, 32, 33, 34, 35, 36]])]\n",[77,102104,102105],{"class":79,"line":4225},[77,102106,96364],{"class":271},[77,102108,102109],{"class":79,"line":4230},[77,102110,102111],{"class":323},"#axis=1 按照列来分\n",[77,102113,102114,102116,102118,102120,102122,102124,102126],{"class":79,"line":4235},[77,102115,102003],{"class":87},[77,102117,2690],{"class":94},[77,102119,2992],{"class":87},[77,102121,49980],{"class":7691},[77,102123,268],{"class":2123},[77,102125,2120],{"class":94},[77,102127,2628],{"class":87},[77,102129,102130],{"class":79,"line":4240},[77,102131,98200],{"class":323},[77,102133,102134],{"class":79,"line":4254},[77,102135,96364],{"class":271},[77,102137,102138],{"class":79,"line":4259},[77,102139,102140],{"class":271},"[array([[ 1,  2],\n",[77,102142,102143],{"class":79,"line":5052},[77,102144,102145],{"class":271},"        [ 7,  8],\n",[77,102147,102148],{"class":79,"line":5066},[77,102149,102150],{"class":271},"        [13, 14],\n",[77,102152,102153],{"class":79,"line":5074},[77,102154,102155],{"class":271},"        [19, 20],\n",[77,102157,102158],{"class":79,"line":5079},[77,102159,102160],{"class":271},"        [25, 26],\n",[77,102162,102163],{"class":79,"line":5085},[77,102164,102165],{"class":271},"        [31, 32]]),\n",[77,102167,102168],{"class":79,"line":5091},[77,102169,102170],{"class":271}," array([[ 3,  4],\n",[77,102172,102173],{"class":79,"line":5096},[77,102174,102175],{"class":271},"        [ 9, 10],\n",[77,102177,102178],{"class":79,"line":10422},[77,102179,102180],{"class":271},"        [15, 16],\n",[77,102182,102183],{"class":79,"line":10446},[77,102184,102185],{"class":271},"        [21, 22],\n",[77,102187,102188],{"class":79,"line":10451},[77,102189,102190],{"class":271},"        [27, 28],\n",[77,102192,102193],{"class":79,"line":10457},[77,102194,102195],{"class":271},"        [33, 34]]),\n",[77,102197,102198],{"class":79,"line":10484},[77,102199,102200],{"class":271}," array([[ 5,  6],\n",[77,102202,102203],{"class":79,"line":10489},[77,102204,102205],{"class":271},"        [11, 12],\n",[77,102207,102208],{"class":79,"line":10495},[77,102209,102210],{"class":271},"        [17, 18],\n",[77,102212,102213],{"class":79,"line":10507},[77,102214,102215],{"class":271},"        [23, 24],\n",[77,102217,102218],{"class":79,"line":10519},[77,102219,102220],{"class":271},"        [29, 30],\n",[77,102222,102223],{"class":79,"line":10531},[77,102224,102225],{"class":271},"        [35, 36]])]\n",[77,102227,102228],{"class":79,"line":12189},[77,102229,102050],{"class":271},[77,102231,102232],{"class":79,"line":12214},[77,102233,101910],{"class":323},[77,102235,102236,102238,102240,102242,102244,102246,102248,102250,102252],{"class":79,"line":12237},[77,102237,102059],{"class":87},[77,102239,2120],{"class":94},[77,102241,2992],{"class":87},[77,102243,2696],{"class":94},[77,102245,44075],{"class":87},[77,102247,49980],{"class":7691},[77,102249,268],{"class":2123},[77,102251,2120],{"class":94},[77,102253,2628],{"class":87},[77,102255,102256],{"class":79,"line":12261},[77,102257,96000],{"class":323},[77,102259,102260],{"class":79,"line":12266},[77,102261,96364],{"class":271},[77,102263,102264],{"class":79,"line":12271},[77,102265,102266],{"class":271},"[array([[ 1],\n",[77,102268,102269],{"class":79,"line":12276},[77,102270,102271],{"class":271},"        [ 7],\n",[77,102273,102274],{"class":79,"line":12285},[77,102275,102276],{"class":271},"        [13],\n",[77,102278,102279],{"class":79,"line":12290},[77,102280,102281],{"class":271},"        [19],\n",[77,102283,102284],{"class":79,"line":12296},[77,102285,102286],{"class":271},"        [25],\n",[77,102288,102289],{"class":79,"line":12317},[77,102290,102291],{"class":271},"        [31]]),\n",[77,102293,102294],{"class":79,"line":12323},[77,102295,102296],{"class":271}," array([[ 2],\n",[77,102298,102299],{"class":79,"line":12337},[77,102300,102301],{"class":271},"        [ 8],\n",[77,102303,102304],{"class":79,"line":12343},[77,102305,102306],{"class":271},"        [14],\n",[77,102308,102309],{"class":79,"line":12370},[77,102310,102311],{"class":271},"        [20],\n",[77,102313,102314],{"class":79,"line":12379},[77,102315,102316],{"class":271},"        [26],\n",[77,102318,102319],{"class":79,"line":12385},[77,102320,102321],{"class":271},"        [32]]),\n",[77,102323,102324],{"class":79,"line":12393},[77,102325,102326],{"class":271}," array([[ 3,  4,  5,  6],\n",[77,102328,102329],{"class":79,"line":12398},[77,102330,102331],{"class":271},"        [ 9, 10, 11, 12],\n",[77,102333,102334],{"class":79,"line":19074},[77,102335,102336],{"class":271},"        [15, 16, 17, 18],\n",[77,102338,102339],{"class":79,"line":19080},[77,102340,102341],{"class":271},"        [21, 22, 23, 24],\n",[77,102343,102344],{"class":79,"line":19103},[77,102345,102346],{"class":271},"        [27, 28, 29, 30],\n",[77,102348,102349],{"class":79,"line":19109},[77,102350,102351],{"class":271},"        [33, 34, 35, 36]])]\n",[77,102353,102354],{"class":79,"line":19132},[77,102355,96364],{"class":271},[77,102357,102358],{"class":79,"line":19146},[77,102359,102360],{"class":323},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[77,102362,102363,102366,102368],{"class":79,"line":19166},[77,102364,102365],{"class":87},"np.vsplit(aa,",[77,102367,2690],{"class":94},[77,102369,2628],{"class":87},[77,102371,102372],{"class":79,"line":19172},[77,102373,96000],{"class":323},[77,102375,102376],{"class":79,"line":19183},[77,102377,96364],{"class":271},[77,102379,102380],{"class":79,"line":19206},[77,102381,102020],{"class":271},[77,102383,102384],{"class":79,"line":19228},[77,102385,102025],{"class":271},[77,102387,102388],{"class":79,"line":19233},[77,102389,102030],{"class":271},[77,102391,102392],{"class":79,"line":19239},[77,102393,102035],{"class":271},[77,102395,102396],{"class":79,"line":19253},[77,102397,102040],{"class":271},[77,102399,102400],{"class":79,"line":19266},[77,102401,102045],{"class":271},[77,102403,102404],{"class":79,"line":19271},[77,102405,96364],{"class":271},[77,102407,102408,102411,102413],{"class":79,"line":19285},[77,102409,102410],{"class":87},"np.hsplit(aa,",[77,102412,2690],{"class":94},[77,102414,2628],{"class":87},[77,102416,102417],{"class":79,"line":19290},[77,102418,96000],{"class":323},[77,102420,102421],{"class":79,"line":19296},[77,102422,96364],{"class":271},[77,102424,102425],{"class":79,"line":19301},[77,102426,102140],{"class":271},[77,102428,102429],{"class":79,"line":19315},[77,102430,102145],{"class":271},[77,102432,102433],{"class":79,"line":19320},[77,102434,102150],{"class":271},[77,102436,102437],{"class":79,"line":19325},[77,102438,102155],{"class":271},[77,102440,102441],{"class":79,"line":19339},[77,102442,102160],{"class":271},[77,102444,102445],{"class":79,"line":19351},[77,102446,102165],{"class":271},[77,102448,102449],{"class":79,"line":19356},[77,102450,102170],{"class":271},[77,102452,102453],{"class":79,"line":19369},[77,102454,102175],{"class":271},[77,102456,102457],{"class":79,"line":19374},[77,102458,102180],{"class":271},[77,102460,102461],{"class":79,"line":19379},[77,102462,102185],{"class":271},[77,102464,102465],{"class":79,"line":19384},[77,102466,102190],{"class":271},[77,102468,102469],{"class":79,"line":19397},[77,102470,102195],{"class":271},[77,102472,102473],{"class":79,"line":19402},[77,102474,102200],{"class":271},[77,102476,102477],{"class":79,"line":35100},[77,102478,102205],{"class":271},[77,102480,102481],{"class":79,"line":35106},[77,102482,102210],{"class":271},[77,102484,102485],{"class":79,"line":35112},[77,102486,102215],{"class":271},[77,102488,102489],{"class":79,"line":35118},[77,102490,102220],{"class":271},[77,102492,102493],{"class":79,"line":35124},[77,102494,102225],{"class":271},[77,102496,102497],{"class":79,"line":35135},[77,102498,96364],{"class":271},[77,102500,102501,102504,102506,102508,102510],{"class":79,"line":35141},[77,102502,102503],{"class":87},"np.vsplit(aa,[",[77,102505,2696],{"class":94},[77,102507,2992],{"class":87},[77,102509,2933],{"class":94},[77,102511,7132],{"class":87},[77,102513,102514],{"class":79,"line":35161},[77,102515,96000],{"class":323},[77,102517,102518],{"class":79,"line":35167},[77,102519,96364],{"class":271},[77,102521,102522],{"class":79,"line":35178},[77,102523,102020],{"class":271},[77,102525,102526],{"class":79,"line":35184},[77,102527,102025],{"class":271},[77,102529,102530],{"class":79,"line":35190},[77,102531,102030],{"class":271},[77,102533,102534],{"class":79,"line":35196},[77,102535,102092],{"class":271},[77,102537,102538],{"class":79,"line":35202},[77,102539,102097],{"class":271},[77,102541,102542],{"class":79,"line":35208},[77,102543,102102],{"class":271},[77,102545,102546],{"class":79,"line":35214},[77,102547,102050],{"class":271},[2520,102549,102550],{},"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":72,"searchDepth":91,"depth":91,"links":102552},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101818,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102559,"title":102560,"body":102561,"description":2546,"extension":2547,"meta":103055,"navigation":2549,"path":103056,"seo":103057,"stem":103058,"__hash__":103059},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102562,"toc":103046},[102563,102566,102569,102594,102598,102657,102709,102713,102715,102751,102805,102807,102845,102916,102920,102925,102929,102932,102965,102968,102972,102975,102978,102981,102984,102989,102993,102996,102999,103002,103005,103010,103014,103019,103022,103043],[10,102564,102560],{"id":102565},"_9数学函数",[24,102567,102568],{},"补充回顾：python的列表推导式",[67,102570,102572],{"className":32846,"code":102571,"language":32848,"meta":72,"style":72},"[1\u002Fi for i in a]\n",[74,102573,102574],{"__ignoreMap":72},[77,102575,102576,102578,102580,102582,102585,102587,102589,102591],{"class":79,"line":80},[77,102577,3503],{"class":87},[77,102579,2120],{"class":94},[77,102581,3197],{"class":2123},[77,102583,102584],{"class":87},"i ",[77,102586,5500],{"class":2123},[77,102588,11911],{"class":87},[77,102590,28511],{"class":2123},[77,102592,102593],{"class":87}," a]\n",[14,102595,102597],{"id":102596},"_91-求倒数","9.1 求倒数",[67,102599,102601],{"className":32846,"code":102600,"language":32848,"meta":72,"style":72},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[74,102602,102603,102608,102636,102648],{"__ignoreMap":72},[77,102604,102605],{"class":79,"line":80},[77,102606,102607],{"class":323},"#数组求倒数\n",[77,102609,102610,102612,102614,102616,102618,102620,102622,102624,102626,102628,102630,102632,102634],{"class":79,"line":91},[77,102611,417],{"class":87},[77,102613,268],{"class":2123},[77,102615,3503],{"class":87},[77,102617,2120],{"class":94},[77,102619,2992],{"class":87},[77,102621,2696],{"class":94},[77,102623,2992],{"class":87},[77,102625,2690],{"class":94},[77,102627,2992],{"class":87},[77,102629,2907],{"class":94},[77,102631,2992],{"class":87},[77,102633,2933],{"class":94},[77,102635,35713],{"class":87},[77,102637,102638,102640,102642,102645],{"class":79,"line":107},[77,102639,2877],{"class":87},[77,102641,268],{"class":2123},[77,102643,102644],{"class":87},"np.array(a)",[77,102646,102647],{"class":323},"#将列表转换为数组\n",[77,102649,102650,102652,102654],{"class":79,"line":191},[77,102651,2120],{"class":94},[77,102653,3197],{"class":2123},[77,102655,102656],{"class":87},"b\n",[67,102658,102660],{"className":32846,"code":102659,"language":32848,"meta":72,"style":72},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[74,102661,102662,102690,102699,102704],{"__ignoreMap":72},[77,102663,102664,102666,102668,102670,102672,102674,102676,102678,102680,102682,102684,102686,102688],{"class":79,"line":80},[77,102665,417],{"class":87},[77,102667,268],{"class":2123},[77,102669,3503],{"class":87},[77,102671,2120],{"class":94},[77,102673,2992],{"class":87},[77,102675,2696],{"class":94},[77,102677,2992],{"class":87},[77,102679,2690],{"class":94},[77,102681,2992],{"class":87},[77,102683,2907],{"class":94},[77,102685,2992],{"class":87},[77,102687,2933],{"class":94},[77,102689,35713],{"class":87},[77,102691,102692,102694,102696],{"class":79,"line":91},[77,102693,2877],{"class":87},[77,102695,268],{"class":2123},[77,102697,102698],{"class":87},"np.array(a)\n",[77,102700,102701],{"class":79,"line":107},[77,102702,102703],{"class":323},"#调用numpy中的函数reciprocal()\n",[77,102705,102706],{"class":79,"line":191},[77,102707,102708],{"class":87},"np.reciprocal(b)\n",[14,102710,102712],{"id":102711},"_92-求平方","9.2 求平方",[24,102714,96966],{},[67,102716,102718],{"className":32846,"code":102717,"language":32848,"meta":72,"style":72},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[74,102719,102720,102725,102730,102746],{"__ignoreMap":72},[77,102721,102722],{"class":79,"line":80},[77,102723,102724],{"class":323},"#square()，求平方\n",[77,102726,102727],{"class":79,"line":91},[77,102728,102729],{"class":323},"#一维数组\n",[77,102731,102732,102734,102736,102738,102740,102742,102744],{"class":79,"line":107},[77,102733,417],{"class":87},[77,102735,268],{"class":2123},[77,102737,95438],{"class":87},[77,102739,2120],{"class":94},[77,102741,2992],{"class":87},[77,102743,3059],{"class":94},[77,102745,2628],{"class":87},[77,102747,102748],{"class":79,"line":191},[77,102749,102750],{"class":87},"np.square(a)\n",[67,102752,102754],{"className":32846,"code":102753,"language":32848,"meta":72,"style":72},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[74,102755,102756,102761,102766,102787],{"__ignoreMap":72},[77,102757,102758],{"class":79,"line":80},[77,102759,102760],{"class":323},"#或者通过循环遍历的形式来计算\n",[77,102762,102763],{"class":79,"line":91},[77,102764,102765],{"class":323},"#这是一个列表\n",[77,102767,102768,102771,102773,102775,102777,102779,102781,102784],{"class":79,"line":107},[77,102769,102770],{"class":87},"[i",[77,102772,3068],{"class":2123},[77,102774,102584],{"class":87},[77,102776,5500],{"class":2123},[77,102778,11911],{"class":87},[77,102780,28511],{"class":2123},[77,102782,102783],{"class":87}," a]",[77,102785,102786],{"class":323},"#这个求完之后在数列当中\n",[77,102788,102789,102792,102794,102796,102798,102800,102802],{"class":79,"line":191},[77,102790,102791],{"class":87},"np.array([i",[77,102793,3068],{"class":2123},[77,102795,102584],{"class":87},[77,102797,5500],{"class":2123},[77,102799,11911],{"class":87},[77,102801,28511],{"class":2123},[77,102803,102804],{"class":87}," a])\n",[24,102806,95727],{},[67,102808,102810],{"className":32846,"code":102809,"language":32848,"meta":72,"style":72},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[74,102811,102812,102816,102840],{"__ignoreMap":72},[77,102813,102814],{"class":79,"line":80},[77,102815,95737],{"class":323},[77,102817,102818,102820,102822,102824,102826,102828,102830,102832,102834,102836,102838],{"class":79,"line":91},[77,102819,95742],{"class":87},[77,102821,268],{"class":2123},[77,102823,95438],{"class":87},[77,102825,2120],{"class":94},[77,102827,2992],{"class":87},[77,102829,3136],{"class":94},[77,102831,95443],{"class":87},[77,102833,2907],{"class":94},[77,102835,2992],{"class":87},[77,102837,2690],{"class":94},[77,102839,2628],{"class":87},[77,102841,102842],{"class":79,"line":107},[77,102843,102844],{"class":87},"np.square(aa)\n",[67,102846,102848],{"className":32846,"code":102847,"language":32848,"meta":72,"style":72},"#传统的方式\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",[74,102849,102850,102855,102864,102880,102896,102911],{"__ignoreMap":72},[77,102851,102852],{"class":79,"line":80},[77,102853,102854],{"class":323},"#传统的方式\n",[77,102856,102857,102859,102861],{"class":79,"line":91},[77,102858,100623],{"class":87},[77,102860,268],{"class":2123},[77,102862,102863],{"class":87},"np.empty_like(aa)\n",[77,102865,102866,102868,102870,102872,102874,102876,102878],{"class":79,"line":107},[77,102867,5500],{"class":2123},[77,102869,11911],{"class":87},[77,102871,28511],{"class":2123},[77,102873,34910],{"class":94},[77,102875,2622],{"class":87},[77,102877,2907],{"class":94},[77,102879,33254],{"class":87},[77,102881,102882,102884,102886,102888,102890,102892,102894],{"class":79,"line":191},[77,102883,5676],{"class":2123},[77,102885,11973],{"class":87},[77,102887,28511],{"class":2123},[77,102889,34910],{"class":94},[77,102891,2622],{"class":87},[77,102893,2690],{"class":94},[77,102895,33254],{"class":87},[77,102897,102898,102901,102903,102906,102908],{"class":79,"line":1543},[77,102899,102900],{"class":87},"        bb[i,j]",[77,102902,268],{"class":2123},[77,102904,102905],{"class":87},"aa[i,j]",[77,102907,3068],{"class":2123},[77,102909,102910],{"class":87},"aa[i,j]\n",[77,102912,102913],{"class":79,"line":1549},[77,102914,102915],{"class":87},"bb\n",[14,102917,102919],{"id":102918},"_93-求各元素的符号","9.3 求各元素的符号",[24,102921,102922],{},[40,102923],{"alt":72,"src":102924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102926,102928],{"id":102927},"_94-modf函数","9.4 modf函数",[24,102930,102931],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[67,102933,102935],{"className":32846,"code":102934,"language":32848,"meta":72,"style":72},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[74,102936,102937,102960],{"__ignoreMap":72},[77,102938,102939,102941,102943,102945,102947,102949,102951,102953,102955,102958],{"class":79,"line":80},[77,102940,417],{"class":87},[77,102942,268],{"class":2123},[77,102944,95438],{"class":87},[77,102946,3145],{"class":2123},[77,102948,3059],{"class":94},[77,102950,2992],{"class":87},[77,102952,3059],{"class":94},[77,102954,2992],{"class":87},[77,102956,102957],{"class":94},"0.3",[77,102959,2628],{"class":87},[77,102961,102962],{"class":79,"line":91},[77,102963,102964],{"class":87},"np.modf(a)\n",[24,102966,102967],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102969,102971],{"id":102970},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[24,102973,102974],{},"np.cell()",[24,102976,102977],{},"np.floor()",[24,102979,102980],{},"np.rint()",[24,102982,102983],{},"对各元素分别向上取整、向下取整、四舍五入",[24,102985,102986],{},[40,102987],{"alt":72,"src":102988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102990,102992],{"id":102991},"_96-around函数","9.6 around()函数",[24,102994,102995],{},"around()函数也可以实现对数的小数位数进行操作",[24,102997,102998],{},"其中的参数：",[24,103000,103001],{},"1.要传的数组",[24,103003,103004],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[24,103006,103007],{},[40,103008],{"alt":72,"src":103009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,103011,103013],{"id":103012},"_97-三角函数","9.7 三角函数",[24,103015,103016],{},[40,103017],{"alt":72,"src":103018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[24,103020,103021],{},"引入图像模块非常重要",[67,103023,103025],{"className":32846,"code":103024,"language":32848,"meta":72,"style":72},"from matplotlib import pyplot as plt\n",[74,103026,103027],{"__ignoreMap":72},[77,103028,103029,103031,103034,103036,103039,103041],{"class":79,"line":80},[77,103030,33205],{"class":2123},[77,103032,103033],{"class":87}," matplotlib ",[77,103035,32860],{"class":2123},[77,103037,103038],{"class":87}," pyplot ",[77,103040,33850],{"class":2123},[77,103042,33904],{"class":87},[2520,103044,103045],{},"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":72,"searchDepth":91,"depth":91,"links":103047},[103048,103049,103050,103051,103052,103053,103054],{"id":102596,"depth":91,"text":102597},{"id":102711,"depth":91,"text":102712},{"id":102918,"depth":91,"text":102919},{"id":102927,"depth":91,"text":102928},{"id":102970,"depth":91,"text":102971},{"id":102991,"depth":91,"text":102992},{"id":103012,"depth":91,"text":103013},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102560,"description":2546},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103061,"title":103062,"body":103063,"description":2546,"extension":2547,"meta":103067,"navigation":2549,"path":103068,"seo":103069,"stem":103070,"__hash__":103071},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103064,"toc":103065},[],{"title":72,"searchDepth":91,"depth":91,"links":103066},[],{"category":52886},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103062,"description":2546},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103073,"title":103074,"body":103075,"description":72,"extension":2547,"meta":105081,"navigation":2549,"path":105082,"seo":105083,"stem":105084,"__hash__":105085},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103076,"toc":105057},[103077,103080,103084,103087,103090,103096,103099,103122,103125,103159,103162,103203,103207,103210,103303,103306,103350,103353,103370,103373,103387,103390,103393,103438,103441,103477,103481,103484,103490,103495,103515,103519,103522,103588,103591,103609,103613,103616,103645,103655,103661,103665,103668,103674,103685,103689,103692,103722,103725,104005,104008,104011,104022,104025,104028,104050,104057,104060,104078,104081,104084,104098,104106,104109,104135,104141,104144,104147,104157,104169,104189,104198,104218,104228,104252,104265,104279,104284,104325,104342,104367,104379,104399,104405,104450,104469,104486,104498,104514,104521,104533,104542,104577,104598,104623,104636,104660,104675,104700,104703,104724,104733,104736,104747,104751,104754,104760,104772,104779,104783,104786,104798,104801,104815,104818,104828,104838,104841,104881,104884,104888,104894,104897,104911,104915,104918,104951,104955,104958,104981,104989,104992,104998,105004,105007,105010,105038,105042,105045,105051,105054],[10,103078,103074],{"id":103079},"_1环境安装与第一个-mujoco-程序",[14,103081,103083],{"id":103082},"_1目标说明","1.目标说明",[24,103085,103086],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[24,103088,103089],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[67,103091,103094],{"className":103092,"code":103093,"language":7662,"meta":72},[7660],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[74,103095,103093],{"__ignoreMap":72},[24,103097,103098],{},"需要掌握:",[139,103100,103101,103104,103107,103112,103117],{},[54,103102,103103],{},"Fedora 44 下 MuJoCo 的系统依赖",[54,103105,103106],{},"Python 虚拟环境创建",[54,103108,103109],{},[74,103110,103111],{},"mujoco.MjModel",[54,103113,103114],{},[74,103115,103116],{},"mujoco.MjData",[54,103118,103119],{},[74,103120,103121],{},"mujoco.mj_step(model, data)",[24,103123,103124],{},"MuJoCo 中最重要的两个对象:",[2755,103126,103127,103137],{},[2758,103128,103129],{},[2761,103130,103131,103134],{},[2764,103132,103133],{"align":101},"对象",[2764,103135,103136],{"align":101},"含义",[2801,103138,103139,103149],{},[2761,103140,103141,103146],{},[2806,103142,103143],{"align":101},[74,103144,103145],{},"MjModel",[2806,103147,103148],{"align":101},"模型结构，来自 XML，基本不随时间变化",[2761,103150,103151,103156],{},[2806,103152,103153],{"align":101},[74,103154,103155],{},"MjData",[2806,103157,103158],{"align":101},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[24,103160,103161],{},"可以先用一个类比理解：",[2755,103163,103164,103174],{},[2758,103165,103166],{},[2761,103167,103168,103171],{},[2764,103169,103170],{"align":101},"类比",[2764,103172,103173],{"align":101},"MuJoCo 对象",[2801,103175,103176,103185,103194],{},[2761,103177,103178,103181],{},[2806,103179,103180],{"align":101},"游戏地图和角色配置",[2806,103182,103183],{"align":101},[74,103184,103145],{},[2761,103186,103187,103190],{},[2806,103188,103189],{"align":101},"游戏运行到当前帧的状态",[2806,103191,103192],{"align":101},[74,103193,103155],{},[2761,103195,103196,103199],{},[2806,103197,103198],{"align":101},"前进一帧",[2806,103200,103201],{"align":101},[74,103202,103121],{},[14,103204,103206],{"id":103205},"_2环境与依赖安装","2.环境与依赖安装",[24,103208,103209],{},"Fedora 44 系统依赖:",[67,103211,103213],{"className":26289,"code":103212,"language":26291,"meta":72,"style":72},"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",[74,103214,103215,103227,103240,103253,103263,103273,103292],{"__ignoreMap":72},[77,103216,103217,103219,103221,103223,103225],{"class":79,"line":80},[77,103218,27044],{"class":83},[77,103220,28783],{"class":271},[77,103222,26301],{"class":271},[77,103224,28868],{"class":94},[77,103226,27146],{"class":94},[77,103228,103229,103232,103235,103238],{"class":79,"line":91},[77,103230,103231],{"class":271},"  python3",[77,103233,103234],{"class":271}," python3-pip",[77,103236,103237],{"class":271}," python3-virtualenv",[77,103239,27146],{"class":94},[77,103241,103242,103245,103248,103251],{"class":79,"line":107},[77,103243,103244],{"class":271},"  mesa-libGL",[77,103246,103247],{"class":271}," mesa-libGLU",[77,103249,103250],{"class":271}," mesa-dri-drivers",[77,103252,27146],{"class":94},[77,103254,103255,103258,103261],{"class":79,"line":191},[77,103256,103257],{"class":271},"  libglvnd-glx",[77,103259,103260],{"class":271}," libglvnd-opengl",[77,103262,27146],{"class":94},[77,103264,103265,103268,103271],{"class":79,"line":1543},[77,103266,103267],{"class":271},"  glfw",[77,103269,103270],{"class":271}," glfw-devel",[77,103272,27146],{"class":94},[77,103274,103275,103278,103281,103284,103287,103290],{"class":79,"line":1549},[77,103276,103277],{"class":271},"  libX11",[77,103279,103280],{"class":271}," libXcursor",[77,103282,103283],{"class":271}," libXi",[77,103285,103286],{"class":271}," libXinerama",[77,103288,103289],{"class":271}," libXrandr",[77,103291,27146],{"class":94},[77,103293,103294,103297,103300],{"class":79,"line":1566},[77,103295,103296],{"class":271},"  gcc",[77,103298,103299],{"class":271}," gcc-c++",[77,103301,103302],{"class":271}," make\n",[24,103304,103305],{},"创建 Python 环境:",[67,103307,103309],{"className":26289,"code":103308,"language":26291,"meta":72,"style":72},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[74,103310,103311,103325,103333],{"__ignoreMap":72},[77,103312,103313,103316,103319,103322],{"class":79,"line":80},[77,103314,103315],{"class":83},"python3",[77,103317,103318],{"class":94}," -m",[77,103320,103321],{"class":271}," venv",[77,103323,103324],{"class":271}," .venv\n",[77,103326,103327,103330],{"class":79,"line":91},[77,103328,103329],{"class":94},"source",[77,103331,103332],{"class":271}," .venv\u002Fbin\u002Factivate\n",[77,103334,103335,103337,103339,103342,103344,103347],{"class":79,"line":107},[77,103336,32848],{"class":83},[77,103338,103318],{"class":94},[77,103340,103341],{"class":271}," pip",[77,103343,26301],{"class":271},[77,103345,103346],{"class":94}," --upgrade",[77,103348,103349],{"class":271}," pip\n",[24,103351,103352],{},"pip 安装:",[67,103354,103356],{"className":26289,"code":103355,"language":26291,"meta":72,"style":72},"pip install \"mujoco>=2.3\" numpy\n",[74,103357,103358],{"__ignoreMap":72},[77,103359,103360,103362,103364,103367],{"class":79,"line":80},[77,103361,26298],{"class":83},[77,103363,26301],{"class":271},[77,103365,103366],{"class":271}," \"mujoco>=2.3\"",[77,103368,103369],{"class":271}," numpy\n",[24,103371,103372],{},"安装完成后，先做最小检查：",[67,103374,103376],{"className":26289,"code":103375,"language":26291,"meta":72,"style":72},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[74,103377,103378],{"__ignoreMap":72},[77,103379,103380,103382,103384],{"class":79,"line":80},[77,103381,32848],{"class":83},[77,103383,32826],{"class":94},[77,103385,103386],{"class":271}," \"import mujoco; print(mujoco.__version__)\"\n",[24,103388,103389],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[24,103391,103392],{},"conda 安装:",[67,103394,103396],{"className":26289,"code":103395,"language":26291,"meta":72,"style":72},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[74,103397,103398,103418,103428],{"__ignoreMap":72},[77,103399,103400,103402,103404,103406,103409,103412,103415],{"class":79,"line":80},[77,103401,32798],{"class":83},[77,103403,31644],{"class":271},[77,103405,27583],{"class":94},[77,103407,103408],{"class":271}," mujoco-study",[77,103410,103411],{"class":271}," python=",[77,103413,103414],{"class":94},"3.10",[77,103416,103417],{"class":94}," -y\n",[77,103419,103420,103422,103425],{"class":79,"line":91},[77,103421,32798],{"class":83},[77,103423,103424],{"class":271}," activate",[77,103426,103427],{"class":271}," mujoco-study\n",[77,103429,103430,103432,103434,103436],{"class":79,"line":107},[77,103431,26298],{"class":83},[77,103433,26301],{"class":271},[77,103435,103366],{"class":271},[77,103437,103369],{"class":271},[24,103439,103440],{},"版本冲突说明:",[139,103442,103443,103449,103458,103467],{},[54,103444,103445,103446,30853],{},"不要安装 ",[74,103447,103448],{},"mujoco-py",[54,103450,103451,103452,513,103454,103457],{},"如果旧项目里同时安装了 ",[74,103453,103448],{},[74,103455,103456],{},"mujoco","，建议新建干净虚拟环境。",[54,103459,103460,103463,103464,30853],{},[74,103461,103462],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[74,103465,103466],{},"~\u002F.mujoco\u002Fmujoco210",[54,103468,103469,103470,84976,103473,103476],{},"离屏渲染可能涉及 OpenGL 后端，",[74,103471,103472],{},"MUJOCO_GL=egl",[74,103474,103475],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103478,103480],{"id":103479},"_3核心概念解释","3.核心概念解释",[24,103482,103483],{},"MuJoCo 的基本执行流程:",[67,103485,103488],{"className":103486,"code":103487,"language":7662,"meta":72},[7660],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[74,103489,103487],{"__ignoreMap":72},[24,103491,103492,103494],{},[74,103493,103145],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[24,103496,103497,103499,103500,2828,103503,2828,103506,2828,103509,2828,103512,30853],{},[74,103498,103155],{}," 存放仿真运行时状态，例如 ",[74,103501,103502],{},"data.time",[74,103504,103505],{},"data.qpos",[74,103507,103508],{},"data.qvel",[74,103510,103511],{},"data.ctrl",[74,103513,103514],{},"data.xpos",[19,103516,103518],{"id":103517},"xml-是什么","XML 是什么",[24,103520,103521],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[67,103523,103525],{"className":55525,"code":103524,"language":55527,"meta":72,"style":72},"\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",[74,103526,103527,103549,103580],{"__ignoreMap":72},[77,103528,103529,103531,103533,103535,103537,103539,103542,103544,103547],{"class":79,"line":80},[77,103530,260],{"class":87},[77,103532,54258],{"class":158},[77,103534,2495],{"class":83},[77,103536,268],{"class":87},[77,103538,55948],{"class":271},[77,103540,103541],{"class":83}," pos",[77,103543,268],{"class":87},[77,103545,103546],{"class":271},"\"0 0 1\"",[77,103548,291],{"class":87},[77,103550,103551,103553,103556,103558,103560,103563,103565,103567,103569,103572,103574,103577],{"class":79,"line":91},[77,103552,54602],{"class":87},[77,103554,103555],{"class":158},"geom",[77,103557,2495],{"class":83},[77,103559,268],{"class":87},[77,103561,103562],{"class":271},"\"box_geom\"",[77,103564,2487],{"class":83},[77,103566,268],{"class":87},[77,103568,55948],{"class":271},[77,103570,103571],{"class":83}," size",[77,103573,268],{"class":87},[77,103575,103576],{"class":271},"\"0.1 0.1 0.1\"",[77,103578,103579],{"class":87},"\u002F>\n",[77,103581,103582,103584,103586],{"class":79,"line":107},[77,103583,351],{"class":87},[77,103585,54258],{"class":158},[77,103587,291],{"class":87},[24,103589,103590],{},"这段意思是：",[139,103592,103593,103599,103606],{},[54,103594,103595,103596,103598],{},"创建一个叫 ",[74,103597,56170],{}," 的刚体。",[54,103600,103601,103602,103605],{},"它初始放在 ",[74,103603,103604],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[54,103607,103608],{},"它里面有一个盒子形状的几何体。",[19,103610,103612],{"id":103611},"timestep-是什么","timestep 是什么",[24,103614,103615],{},"XML 里的：",[67,103617,103619],{"className":55525,"code":103618,"language":55527,"meta":72,"style":72},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[74,103620,103621],{"__ignoreMap":72},[77,103622,103623,103625,103627,103630,103632,103635,103638,103640,103643],{"class":79,"line":80},[77,103624,260],{"class":87},[77,103626,71609],{"class":158},[77,103628,103629],{"class":83}," timestep",[77,103631,268],{"class":87},[77,103633,103634],{"class":271},"\"0.01\"",[77,103636,103637],{"class":83}," gravity",[77,103639,268],{"class":87},[77,103641,103642],{"class":271},"\"0 0 -9.81\"",[77,103644,103579],{"class":87},[24,103646,103647,103648,103651,103652,103654],{},"表示每调用一次 ",[74,103649,103650],{},"mj_step","，仿真时间前进 ",[74,103653,41452],{}," 秒。循环 100 次，大约就是 1 秒：",[67,103656,103659],{"className":103657,"code":103658,"language":7662,"meta":72},[7660],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[74,103660,103658],{"__ignoreMap":72},[19,103662,103664],{"id":103663},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[24,103666,103667],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[67,103669,103672],{"className":103670,"code":103671,"language":7662,"meta":72},[7660],"x y z qw qx qy qz\n",[74,103673,103671],{"__ignoreMap":72},[24,103675,103676,103677,103680,103681,103684],{},"表示一个自由刚体的位置和姿态。其中 ",[74,103678,103679],{},"x y z"," 是位置，",[74,103682,103683],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103686,103688],{"id":103687},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[24,103690,103691],{},"新建文件:",[67,103693,103695],{"className":26289,"code":103694,"language":26291,"meta":72,"style":72},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[74,103696,103697,103707,103714],{"__ignoreMap":72},[77,103698,103699,103702,103704],{"class":79,"line":80},[77,103700,103701],{"class":83},"mkdir",[77,103703,31684],{"class":94},[77,103705,103706],{"class":271}," mujoco_tutorial\n",[77,103708,103709,103712],{"class":79,"line":91},[77,103710,103711],{"class":94},"cd",[77,103713,103706],{"class":271},[77,103715,103716,103719],{"class":79,"line":107},[77,103717,103718],{"class":83},"touch",[77,103720,103721],{"class":271}," ch1_first_sim.py\n",[24,103723,103724],{},"写入:",[67,103726,103728],{"className":32846,"code":103727,"language":32848,"meta":72,"style":72},"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",[74,103729,103730,103737,103741,103745,103755,103760,103765,103769,103774,103779,103783,103788,103793,103798,103803,103808,103813,103817,103821,103825,103838,103852,103862,103866,103878,103890,103902,103914,103926,103930,103947,103952,103956,103967,103978,103982,103986,104000],{"__ignoreMap":72},[77,103731,103732,103734],{"class":79,"line":80},[77,103733,32860],{"class":2123},[77,103735,103736],{"class":87}," mujoco\n",[77,103738,103739],{"class":79,"line":91},[77,103740,4875],{"emptyLinePlaceholder":2549},[77,103742,103743],{"class":79,"line":107},[77,103744,4875],{"emptyLinePlaceholder":2549},[77,103746,103747,103750,103752],{"class":79,"line":191},[77,103748,103749],{"class":94},"XML",[77,103751,16036],{"class":2123},[77,103753,103754],{"class":271}," \"\"\"\n",[77,103756,103757],{"class":79,"line":1543},[77,103758,103759],{"class":271},"\u003Cmujoco model=\"first_sim\">\n",[77,103761,103762],{"class":79,"line":1549},[77,103763,103764],{"class":271},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[77,103766,103767],{"class":79,"line":1566},[77,103768,4875],{"emptyLinePlaceholder":2549},[77,103770,103771],{"class":79,"line":1572},[77,103772,103773],{"class":271},"  \u003Cworldbody>\n",[77,103775,103776],{"class":79,"line":1589},[77,103777,103778],{"class":271},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[77,103780,103781],{"class":79,"line":1595},[77,103782,4875],{"emptyLinePlaceholder":2549},[77,103784,103785],{"class":79,"line":4088},[77,103786,103787],{"class":271},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[77,103789,103790],{"class":79,"line":4093},[77,103791,103792],{"class":271},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[77,103794,103795],{"class":79,"line":4099},[77,103796,103797],{"class":271},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[77,103799,103800],{"class":79,"line":4104},[77,103801,103802],{"class":271},"    \u003C\u002Fbody>\n",[77,103804,103805],{"class":79,"line":4118},[77,103806,103807],{"class":271},"  \u003C\u002Fworldbody>\n",[77,103809,103810],{"class":79,"line":4123},[77,103811,103812],{"class":271},"\u003C\u002Fmujoco>\n",[77,103814,103815],{"class":79,"line":4129},[77,103816,98134],{"class":271},[77,103818,103819],{"class":79,"line":4150},[77,103820,4875],{"emptyLinePlaceholder":2549},[77,103822,103823],{"class":79,"line":4155},[77,103824,4875],{"emptyLinePlaceholder":2549},[77,103826,103827,103829,103831,103834,103836],{"class":79,"line":4169},[77,103828,34414],{"class":2123},[77,103830,4448],{"class":83},[77,103832,103833],{"class":87},"() -> ",[77,103835,98122],{"class":94},[77,103837,6214],{"class":87},[77,103839,103840,103843,103845,103848,103850],{"class":79,"line":4174},[77,103841,103842],{"class":87},"    model ",[77,103844,268],{"class":2123},[77,103846,103847],{"class":87}," mujoco.MjModel.from_xml_string(",[77,103849,103749],{"class":94},[77,103851,2628],{"class":87},[77,103853,103854,103857,103859],{"class":79,"line":4203},[77,103855,103856],{"class":87},"    data ",[77,103858,268],{"class":2123},[77,103860,103861],{"class":87}," mujoco.MjData(model)\n",[77,103863,103864],{"class":79,"line":4208},[77,103865,4875],{"emptyLinePlaceholder":2549},[77,103867,103868,103870,103872,103875],{"class":79,"line":4225},[77,103869,33766],{"class":94},[77,103871,2622],{"class":87},[77,103873,103874],{"class":271},"\"nq:\"",[77,103876,103877],{"class":87},", model.nq)\n",[77,103879,103880,103882,103884,103887],{"class":79,"line":4230},[77,103881,33766],{"class":94},[77,103883,2622],{"class":87},[77,103885,103886],{"class":271},"\"nv:\"",[77,103888,103889],{"class":87},", model.nv)\n",[77,103891,103892,103894,103896,103899],{"class":79,"line":4235},[77,103893,33766],{"class":94},[77,103895,2622],{"class":87},[77,103897,103898],{"class":271},"\"nu:\"",[77,103900,103901],{"class":87},", model.nu)\n",[77,103903,103904,103906,103908,103911],{"class":79,"line":4240},[77,103905,33766],{"class":94},[77,103907,2622],{"class":87},[77,103909,103910],{"class":271},"\"initial time:\"",[77,103912,103913],{"class":87},", data.time)\n",[77,103915,103916,103918,103920,103923],{"class":79,"line":4254},[77,103917,33766],{"class":94},[77,103919,2622],{"class":87},[77,103921,103922],{"class":271},"\"initial qpos:\"",[77,103924,103925],{"class":87},", data.qpos.copy())\n",[77,103927,103928],{"class":79,"line":4259},[77,103929,4875],{"emptyLinePlaceholder":2549},[77,103931,103932,103934,103937,103939,103941,103943,103945],{"class":79,"line":5052},[77,103933,5676],{"class":2123},[77,103935,103936],{"class":87}," _ ",[77,103938,28511],{"class":2123},[77,103940,34910],{"class":94},[77,103942,2622],{"class":87},[77,103944,2925],{"class":94},[77,103946,33254],{"class":87},[77,103948,103949],{"class":79,"line":5066},[77,103950,103951],{"class":87},"        mujoco.mj_step(model, data)\n",[77,103953,103954],{"class":79,"line":5074},[77,103955,4875],{"emptyLinePlaceholder":2549},[77,103957,103958,103960,103962,103965],{"class":79,"line":5079},[77,103959,33766],{"class":94},[77,103961,2622],{"class":87},[77,103963,103964],{"class":271},"\"final time:\"",[77,103966,103913],{"class":87},[77,103968,103969,103971,103973,103976],{"class":79,"line":5085},[77,103970,33766],{"class":94},[77,103972,2622],{"class":87},[77,103974,103975],{"class":271},"\"final qpos:\"",[77,103977,103925],{"class":87},[77,103979,103980],{"class":79,"line":5091},[77,103981,4875],{"emptyLinePlaceholder":2549},[77,103983,103984],{"class":79,"line":5096},[77,103985,4875],{"emptyLinePlaceholder":2549},[77,103987,103988,103990,103992,103995,103998],{"class":79,"line":10422},[77,103989,4008],{"class":2123},[77,103991,33687],{"class":94},[77,103993,103994],{"class":2123}," ==",[77,103996,103997],{"class":271}," \"__main__\"",[77,103999,6214],{"class":87},[77,104001,104002],{"class":79,"line":10446},[77,104003,104004],{"class":87},"    main()\n",[19,104006,104007],{"id":104007},"代码逐段解释",[24,104009,104010],{},"导入库：",[67,104012,104014],{"className":32846,"code":104013,"language":32848,"meta":72,"style":72},"import mujoco\n",[74,104015,104016],{"__ignoreMap":72},[77,104017,104018,104020],{"class":79,"line":80},[77,104019,32860],{"class":2123},[77,104021,103736],{"class":87},[24,104023,104024],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[24,104026,104027],{},"定义 XML：",[67,104029,104031],{"className":32846,"code":104030,"language":32848,"meta":72,"style":72},"XML = \"\"\"\n...\n\"\"\"\n",[74,104032,104033,104041,104046],{"__ignoreMap":72},[77,104034,104035,104037,104039],{"class":79,"line":80},[77,104036,103749],{"class":94},[77,104038,16036],{"class":2123},[77,104040,103754],{"class":271},[77,104042,104043],{"class":79,"line":91},[77,104044,104045],{"class":271},"...\n",[77,104047,104048],{"class":79,"line":107},[77,104049,98134],{"class":271},[24,104051,104052,104053,104056],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[74,104054,104055],{},"freejoint"," 的方块。",[24,104058,104059],{},"编译模型：",[67,104061,104063],{"className":32846,"code":104062,"language":32848,"meta":72,"style":72},"model = mujoco.MjModel.from_xml_string(XML)\n",[74,104064,104065],{"__ignoreMap":72},[77,104066,104067,104070,104072,104074,104076],{"class":79,"line":80},[77,104068,104069],{"class":87},"model ",[77,104071,268],{"class":2123},[77,104073,103847],{"class":87},[77,104075,103749],{"class":94},[77,104077,2628],{"class":87},[24,104079,104080],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[24,104082,104083],{},"创建数据：",[67,104085,104087],{"className":32846,"code":104086,"language":32848,"meta":72,"style":72},"data = mujoco.MjData(model)\n",[74,104088,104089],{"__ignoreMap":72},[77,104090,104091,104094,104096],{"class":79,"line":80},[77,104092,104093],{"class":87},"data ",[77,104095,268],{"class":2123},[77,104097,103861],{"class":87},[24,104099,104100,104102,104103,104105],{},[74,104101,35868],{}," 会保存仿真当前状态。刚创建时，时间是 ",[74,104104,1939],{},"，方块还在初始位置。",[24,104107,104108],{},"推进仿真：",[67,104110,104112],{"className":32846,"code":104111,"language":32848,"meta":72,"style":72},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[74,104113,104114,104130],{"__ignoreMap":72},[77,104115,104116,104118,104120,104122,104124,104126,104128],{"class":79,"line":80},[77,104117,5500],{"class":2123},[77,104119,103936],{"class":87},[77,104121,28511],{"class":2123},[77,104123,34910],{"class":94},[77,104125,2622],{"class":87},[77,104127,2925],{"class":94},[77,104129,33254],{"class":87},[77,104131,104132],{"class":79,"line":91},[77,104133,104134],{"class":87},"    mujoco.mj_step(model, data)\n",[24,104136,104137,104138,104140],{},"每次 ",[74,104139,103650],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[19,104142,104143],{"id":104143},"代码逐行细讲",[24,104145,104146],{},"下面把完整代码按新手视角拆开讲。",[67,104148,104149],{"className":32846,"code":104013,"language":32848,"meta":72,"style":72},[74,104150,104151],{"__ignoreMap":72},[77,104152,104153,104155],{"class":79,"line":80},[77,104154,32860],{"class":2123},[77,104156,103736],{"class":87},[24,104158,104159,104161,104162,2828,104164,2828,104166,30853],{},[74,104160,32860],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[74,104163,103111],{},[74,104165,103116],{},[74,104167,104168],{},"mujoco.mj_step",[67,104170,104171],{"className":32846,"code":104030,"language":32848,"meta":72,"style":72},[74,104172,104173,104181,104185],{"__ignoreMap":72},[77,104174,104175,104177,104179],{"class":79,"line":80},[77,104176,103749],{"class":94},[77,104178,16036],{"class":2123},[77,104180,103754],{"class":271},[77,104182,104183],{"class":79,"line":91},[77,104184,104045],{"class":271},[77,104186,104187],{"class":79,"line":107},[77,104188,98134],{"class":271},[24,104190,104191,104193,104194,104197],{},[74,104192,103749],{}," 是一个变量名。右边的三引号 ",[74,104195,104196],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[67,104199,104200],{"className":55525,"code":103759,"language":55527,"meta":72,"style":72},[74,104201,104202],{"__ignoreMap":72},[77,104203,104204,104206,104208,104211,104213,104216],{"class":79,"line":80},[77,104205,260],{"class":87},[77,104207,103456],{"class":158},[77,104209,104210],{"class":83}," model",[77,104212,268],{"class":87},[77,104214,104215],{"class":271},"\"first_sim\"",[77,104217,291],{"class":87},[24,104219,104220,104221,104224,104225,30853],{},"这是 XML 的根标签。",[74,104222,104223],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[74,104226,104227],{},"first_sim",[67,104229,104230],{"className":55525,"code":103618,"language":55527,"meta":72,"style":72},[74,104231,104232],{"__ignoreMap":72},[77,104233,104234,104236,104238,104240,104242,104244,104246,104248,104250],{"class":79,"line":80},[77,104235,260],{"class":87},[77,104237,71609],{"class":158},[77,104239,103629],{"class":83},[77,104241,268],{"class":87},[77,104243,103634],{"class":271},[77,104245,103637],{"class":83},[77,104247,268],{"class":87},[77,104249,103642],{"class":271},[77,104251,103579],{"class":87},[24,104253,104254,104256,104257,104260,104261,104264],{},[74,104255,71609],{}," 用来设置仿真参数。",[74,104258,104259],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[74,104262,104263],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[67,104266,104268],{"className":55525,"code":104267,"language":55527,"meta":72,"style":72},"\u003Cworldbody>\n",[74,104269,104270],{"__ignoreMap":72},[77,104271,104272,104274,104277],{"class":79,"line":80},[77,104273,260],{"class":87},[77,104275,104276],{"class":158},"worldbody",[77,104278,291],{"class":87},[24,104280,104281,104283],{},[74,104282,104276],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[67,104285,104287],{"className":55525,"code":104286,"language":55527,"meta":72,"style":72},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[74,104288,104289],{"__ignoreMap":72},[77,104290,104291,104293,104295,104297,104299,104302,104304,104306,104309,104311,104313,104316,104318,104320,104323],{"class":79,"line":80},[77,104292,260],{"class":87},[77,104294,103555],{"class":158},[77,104296,2495],{"class":83},[77,104298,268],{"class":87},[77,104300,104301],{"class":271},"\"floor\"",[77,104303,2487],{"class":83},[77,104305,268],{"class":87},[77,104307,104308],{"class":271},"\"plane\"",[77,104310,103571],{"class":83},[77,104312,268],{"class":87},[77,104314,104315],{"class":271},"\"2 2 0.1\"",[77,104317,81205],{"class":83},[77,104319,268],{"class":87},[77,104321,104322],{"class":271},"\"0.8 0.8 0.8 1\"",[77,104324,103579],{"class":87},[24,104326,104327,104328,104330,104331,104334,104335,104338,104339,104341],{},"这行创建地面。",[74,104329,103555],{}," 是几何体。",[74,104332,104333],{},"name=\"floor\""," 是名字。",[74,104336,104337],{},"type=\"plane\""," 表示平面。",[74,104340,57560],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[67,104343,104345],{"className":55525,"code":104344,"language":55527,"meta":72,"style":72},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[74,104346,104347],{"__ignoreMap":72},[77,104348,104349,104351,104353,104355,104357,104359,104361,104363,104365],{"class":79,"line":80},[77,104350,260],{"class":87},[77,104352,54258],{"class":158},[77,104354,2495],{"class":83},[77,104356,268],{"class":87},[77,104358,55948],{"class":271},[77,104360,103541],{"class":83},[77,104362,268],{"class":87},[77,104364,103546],{"class":271},[77,104366,291],{"class":87},[24,104368,104369,104370,30853,104372,104375,104376,104378],{},"这行创建一个刚体，名字叫 ",[74,104371,56170],{},[74,104373,104374],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[74,104377,103604],{},"，也就是离地面 1 米高。",[67,104380,104382],{"className":55525,"code":104381,"language":55527,"meta":72,"style":72},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[74,104383,104384],{"__ignoreMap":72},[77,104385,104386,104388,104390,104392,104394,104397],{"class":79,"line":80},[77,104387,260],{"class":87},[77,104389,104055],{"class":158},[77,104391,2495],{"class":83},[77,104393,268],{"class":87},[77,104395,104396],{"class":271},"\"box_free\"",[77,104398,103579],{"class":87},[24,104400,104401,104402,104404],{},"这行很重要。",[74,104403,104055],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[67,104406,104408],{"className":55525,"code":104407,"language":55527,"meta":72,"style":72},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[74,104409,104410],{"__ignoreMap":72},[77,104411,104412,104414,104416,104418,104420,104422,104424,104426,104428,104430,104432,104434,104437,104439,104441,104443,104445,104448],{"class":79,"line":80},[77,104413,260],{"class":87},[77,104415,103555],{"class":158},[77,104417,2495],{"class":83},[77,104419,268],{"class":87},[77,104421,103562],{"class":271},[77,104423,2487],{"class":83},[77,104425,268],{"class":87},[77,104427,55948],{"class":271},[77,104429,103571],{"class":83},[77,104431,268],{"class":87},[77,104433,103576],{"class":271},[77,104435,104436],{"class":83}," mass",[77,104438,268],{"class":87},[77,104440,6153],{"class":271},[77,104442,81205],{"class":83},[77,104444,268],{"class":87},[77,104446,104447],{"class":271},"\"1 0 0 1\"",[77,104449,103579],{"class":87},[24,104451,104452,104453,104456,104457,104460,104461,104464,104465,104468],{},"这行给 box body 添加一个盒子形状。",[74,104454,104455],{},"type=\"box\""," 表示形状是盒子。",[74,104458,104459],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[74,104462,104463],{},"mass=\"1\""," 表示质量是 1。",[74,104466,104467],{},"rgba=\"1 0 0 1\""," 表示红色。",[67,104470,104472],{"className":32846,"code":104471,"language":32848,"meta":72,"style":72},"def main() -> None:\n",[74,104473,104474],{"__ignoreMap":72},[77,104475,104476,104478,104480,104482,104484],{"class":79,"line":80},[77,104477,34414],{"class":2123},[77,104479,4448],{"class":83},[77,104481,103833],{"class":87},[77,104483,98122],{"class":94},[77,104485,6214],{"class":87},[24,104487,104488,104490,104491,104493,104494,104497],{},[74,104489,34414],{}," 用来定义函数。这里定义了一个叫 ",[74,104492,29],{}," 的函数。",[74,104495,104496],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[67,104499,104500],{"className":32846,"code":104062,"language":32848,"meta":72,"style":72},[74,104501,104502],{"__ignoreMap":72},[77,104503,104504,104506,104508,104510,104512],{"class":79,"line":80},[77,104505,104069],{"class":87},[77,104507,268],{"class":2123},[77,104509,103847],{"class":87},[77,104511,103749],{"class":94},[77,104513,2628],{"class":87},[24,104515,104516,104517,104520],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[74,104518,104519],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[67,104522,104523],{"className":32846,"code":104086,"language":32848,"meta":72,"style":72},[74,104524,104525],{"__ignoreMap":72},[77,104526,104527,104529,104531],{"class":79,"line":80},[77,104528,104093],{"class":87},[77,104530,268],{"class":2123},[77,104532,103861],{"class":87},[24,104534,104535,104536,104538,104539,104541],{},"这行创建仿真数据。",[74,104537,35868],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[74,104540,35868],{}," 都会变化。",[67,104543,104545],{"className":32846,"code":104544,"language":32848,"meta":72,"style":72},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[74,104546,104547,104557,104567],{"__ignoreMap":72},[77,104548,104549,104551,104553,104555],{"class":79,"line":80},[77,104550,32883],{"class":94},[77,104552,2622],{"class":87},[77,104554,103874],{"class":271},[77,104556,103877],{"class":87},[77,104558,104559,104561,104563,104565],{"class":79,"line":91},[77,104560,32883],{"class":94},[77,104562,2622],{"class":87},[77,104564,103886],{"class":271},[77,104566,103889],{"class":87},[77,104568,104569,104571,104573,104575],{"class":79,"line":107},[77,104570,32883],{"class":94},[77,104572,2622],{"class":87},[77,104574,103898],{"class":271},[77,104576,103901],{"class":87},[24,104578,104579,104581,104582,104585,104586,104589,104590,104593,104594,104597],{},[74,104580,32883],{}," 用来输出信息。",[74,104583,104584],{},"model.nq"," 是位置变量数量，",[74,104587,104588],{},"model.nv"," 是速度变量数量，",[74,104591,104592],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[74,104595,104596],{},"nu"," 是 0。",[67,104599,104601],{"className":32846,"code":104600,"language":32848,"meta":72,"style":72},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[74,104602,104603,104613],{"__ignoreMap":72},[77,104604,104605,104607,104609,104611],{"class":79,"line":80},[77,104606,32883],{"class":94},[77,104608,2622],{"class":87},[77,104610,103910],{"class":271},[77,104612,103913],{"class":87},[77,104614,104615,104617,104619,104621],{"class":79,"line":91},[77,104616,32883],{"class":94},[77,104618,2622],{"class":87},[77,104620,103922],{"class":271},[77,104622,103925],{"class":87},[24,104624,104625,104626,104628,104629,104631,104632,104635],{},"这里打印初始时间和初始位置。",[74,104627,103502],{}," 一开始是 0。",[74,104630,103505],{}," 是位置数组。",[74,104633,104634],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[67,104637,104638],{"className":32846,"code":104111,"language":32848,"meta":72,"style":72},[74,104639,104640,104656],{"__ignoreMap":72},[77,104641,104642,104644,104646,104648,104650,104652,104654],{"class":79,"line":80},[77,104643,5500],{"class":2123},[77,104645,103936],{"class":87},[77,104647,28511],{"class":2123},[77,104649,34910],{"class":94},[77,104651,2622],{"class":87},[77,104653,2925],{"class":94},[77,104655,33254],{"class":87},[77,104657,104658],{"class":79,"line":91},[77,104659,104134],{"class":87},[24,104661,104662,104664,104665,104668,104669,104671,104672,104674],{},[74,104663,5500],{}," 是循环。",[74,104666,104667],{},"range(100)"," 表示循环 100 次。",[74,104670,3604],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[74,104673,103650],{},"，仿真就前进一步。",[67,104676,104678],{"className":32846,"code":104677,"language":32848,"meta":72,"style":72},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[74,104679,104680,104690],{"__ignoreMap":72},[77,104681,104682,104684,104686,104688],{"class":79,"line":80},[77,104683,32883],{"class":94},[77,104685,2622],{"class":87},[77,104687,103964],{"class":271},[77,104689,103913],{"class":87},[77,104691,104692,104694,104696,104698],{"class":79,"line":91},[77,104693,32883],{"class":94},[77,104695,2622],{"class":87},[77,104697,103975],{"class":271},[77,104699,103925],{"class":87},[24,104701,104702],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[67,104704,104706],{"className":32846,"code":104705,"language":32848,"meta":72,"style":72},"if __name__ == \"__main__\":\n    main()\n",[74,104707,104708,104720],{"__ignoreMap":72},[77,104709,104710,104712,104714,104716,104718],{"class":79,"line":80},[77,104711,4008],{"class":2123},[77,104713,33687],{"class":94},[77,104715,103994],{"class":2123},[77,104717,103997],{"class":271},[77,104719,6214],{"class":87},[77,104721,104722],{"class":79,"line":91},[77,104723,104004],{"class":87},[24,104725,104726,104727,104730,104731,30853],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[74,104728,104729],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[74,104732,104729],{},[24,104734,104735],{},"运行:",[67,104737,104739],{"className":26289,"code":104738,"language":26291,"meta":72,"style":72},"python ch1_first_sim.py\n",[74,104740,104741],{"__ignoreMap":72},[77,104742,104743,104745],{"class":79,"line":80},[77,104744,32848],{"class":83},[77,104746,103721],{"class":271},[14,104748,104750],{"id":104749},"_5运行结果说明","5.运行结果说明",[24,104752,104753],{},"你应该看到类似输出:",[67,104755,104758],{"className":104756,"code":104757,"language":7662,"meta":72},[7660],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[74,104759,104757],{"__ignoreMap":72},[24,104761,104762,104764,104765,104768,104769,30853],{},[74,104763,104055],{}," 有 7 个位置变量: ",[74,104766,104767],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[74,104770,104771],{},"vx vy vz wx wy wz",[24,104773,104774,104775,104778],{},"你还会看到 ",[74,104776,104777],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104780,104782],{"id":104781},"_6验证步骤","6.验证步骤",[24,104784,104785],{},"确认版本:",[67,104787,104788],{"className":26289,"code":103375,"language":26291,"meta":72,"style":72},[74,104789,104790],{"__ignoreMap":72},[77,104791,104792,104794,104796],{"class":79,"line":80},[77,104793,32848],{"class":83},[77,104795,32826],{"class":94},[77,104797,103386],{"class":271},[24,104799,104800],{},"确认导入的是官方 bindings:",[67,104802,104804],{"className":26289,"code":104803,"language":26291,"meta":72,"style":72},"python -c \"import mujoco; print(mujoco)\"\n",[74,104805,104806],{"__ignoreMap":72},[77,104807,104808,104810,104812],{"class":79,"line":80},[77,104809,32848],{"class":83},[77,104811,32826],{"class":94},[77,104813,104814],{"class":271}," \"import mujoco; print(mujoco)\"\n",[24,104816,104817],{},"运行程序:",[67,104819,104820],{"className":26289,"code":104738,"language":26291,"meta":72,"style":72},[74,104821,104822],{"__ignoreMap":72},[77,104823,104824,104826],{"class":79,"line":80},[77,104825,32848],{"class":83},[77,104827,103721],{"class":271},[24,104829,104830,104831,104834,104835,30853],{},"检查 ",[74,104832,104833],{},"final time"," 是否约等于 ",[74,104836,104837],{},"1.0",[24,104839,104840],{},"再做几个小实验：",[139,104842,104843,104853,104861,104874],{},[54,104844,104845,104846,104848,104849,104852],{},"把 ",[74,104847,104374],{}," 改成 ",[74,104850,104851],{},"pos=\"0 0 2\"","，观察初始高度变化。",[54,104854,104845,104855,104848,104857,104860],{},[74,104856,104263],{},[74,104858,104859],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[54,104862,104845,104863,104848,104865,104868,104869,104871,104872,30853],{},[74,104864,104259],{},[74,104866,104867],{},"timestep=\"0.005\"","，观察 100 步后的 ",[74,104870,104833],{}," 是否变成约 ",[74,104873,37795],{},[54,104875,104876,104877,104880],{},"删除 ",[74,104878,104879],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[24,104882,104883],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104885,104887],{"id":104886},"_7常见错误与解决方案","7.常见错误与解决方案",[19,104889,104891],{"id":104890},"modulenotfounderror-no-module-named-mujoco",[74,104892,104893],{},"ModuleNotFoundError: No module named 'mujoco'",[24,104895,104896],{},"解决:",[67,104898,104900],{"className":26289,"code":104899,"language":26291,"meta":72,"style":72},"pip install \"mujoco>=2.3\"\n",[74,104901,104902],{"__ignoreMap":72},[77,104903,104904,104906,104908],{"class":79,"line":80},[77,104905,26298],{"class":83},[77,104907,26301],{"class":271},[77,104909,104910],{"class":271}," \"mujoco>=2.3\"\n",[19,104912,104914],{"id":104913},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[24,104916,104917],{},"先安装系统依赖:",[67,104919,104921],{"className":26289,"code":104920,"language":26291,"meta":72,"style":72},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[74,104922,104923],{"__ignoreMap":72},[77,104924,104925,104927,104929,104931,104933,104936,104938,104941,104943,104946,104948],{"class":79,"line":80},[77,104926,27044],{"class":83},[77,104928,28783],{"class":271},[77,104930,26301],{"class":271},[77,104932,28868],{"class":94},[77,104934,104935],{"class":271}," mesa-libGL",[77,104937,103250],{"class":271},[77,104939,104940],{"class":271}," glfw",[77,104942,103270],{"class":271},[77,104944,104945],{"class":271}," libX11",[77,104947,103283],{"class":271},[77,104949,104950],{"class":271}," libXrandr\n",[19,104952,104954],{"id":104953},"xml-解析失败","XML 解析失败",[24,104956,104957],{},"检查:",[139,104959,104960,104963,104966,104972],{},[54,104961,104962],{},"标签是否闭合",[54,104964,104965],{},"属性是否带引号",[54,104967,104968,104969],{},"根节点是否是 ",[74,104970,104971],{},"\u003Cmujoco>",[54,104973,104974,104976,104977,104980],{},[74,104975,54258],{}," 是否放在 ",[74,104978,104979],{},"\u003Cworldbody>"," 内部",[19,104982,104984,104986,104987],{"id":104983},"final-time-不是严格等于-10",[74,104985,104833],{}," 不是严格等于 ",[74,104988,104837],{},[24,104990,104991],{},"这通常不是错误。浮点数计算可能得到：",[67,104993,104996],{"className":104994,"code":104995,"language":7662,"meta":72},[7660],"1.0000000000000007\n",[74,104997,104995],{"__ignoreMap":72},[24,104999,105000,105001,105003],{},"只要接近 ",[74,105002,104837],{}," 就正常。",[19,105005,105006],{"id":105006},"方块没有掉下来",[24,105008,105009],{},"检查：",[139,105011,105012,105018,105024,105029],{},[54,105013,105014,105015],{},"方块 body 里是否有 ",[74,105016,105017],{},"\u003Cfreejoint\u002F>",[54,105019,105020,105021],{},"重力是否是 ",[74,105022,105023],{},"0 0 -9.81",[54,105025,105026,105027],{},"是否真的调用了 ",[74,105028,103121],{},[54,105030,105031,105032,105034,105035],{},"你看的是否是 ",[74,105033,104777],{},"，不是 ",[74,105036,105037],{},"initial qpos",[14,105039,105041],{"id":105040},"_8本章小结","8.本章小结",[24,105043,105044],{},"本章你已经完成了 MuJoCo 的最小闭环：",[67,105046,105049],{"className":105047,"code":105048,"language":7662,"meta":72},[7660],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[74,105050,105048],{"__ignoreMap":72},[24,105052,105053],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2520,105055,105056],{},"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":72,"searchDepth":91,"depth":91,"links":105058},[105059,105060,105061,105066,105070,105071,105072,105080],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":105062},[105063,105064,105065],{"id":103517,"depth":107,"text":103518},{"id":103611,"depth":107,"text":103612},{"id":103663,"depth":107,"text":103664},{"id":103687,"depth":91,"text":103688,"children":105067},[105068,105069],{"id":104007,"depth":107,"text":104007},{"id":104143,"depth":107,"text":104143},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":105073},[105074,105075,105076,105077,105079],{"id":104890,"depth":107,"text":104893},{"id":104913,"depth":107,"text":104914},{"id":104953,"depth":107,"text":104954},{"id":104983,"depth":107,"text":105078},"final time 不是严格等于 1.0",{"id":105006,"depth":107,"text":105006},{"id":105040,"depth":91,"text":105041},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103074,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105087,"title":105088,"body":105089,"description":72,"extension":2547,"meta":106744,"navigation":2549,"path":106745,"seo":106746,"stem":106747,"__hash__":106748},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105090,"toc":106720},[105091,105094,105096,105099,105102,105119,105213,105216,105222,105224,105226,105250,105253,105267,105270,105311,105313,105326,105328,105331,105379,105391,105394,105397,105403,105416,105483,105486,105505,105508,105511,105517,105519,105528,105531,105535,105544,105626,105635,105639,105645,105659,105669,105671,106001,106004,106016,106018,106029,106031,106034,106052,106055,106058,106076,106087,106090,106105,106115,106117,106138,106155,106175,106181,106221,106237,106253,106259,106262,106286,106302,106307,106337,106354,106379,106382,106397,106406,106421,106430,106445,106452,106454,106464,106477,106484,106487,106526,106533,106535,106587,106589,106595,106598,106605,106612,106615,106617,106635,106638,106641,106675,106687,106689,106692,106714,106717],[10,105092,105088],{"id":105093},"_2xml-与-mjcf-物理建模基础",[14,105095,103083],{"id":103082},[24,105097,105098],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[24,105100,105101],{},"本章结束后，你应该能看懂一个简单模型里：",[139,105103,105104,105107,105110,105113,105116],{},[54,105105,105106],{},"地面在哪里。",[54,105108,105109],{},"物体初始位置在哪里。",[54,105111,105112],{},"几何体是什么形状。",[54,105114,105115],{},"哪些 body 可以自由运动。",[54,105117,105118],{},"如何用名字在 Python 里找到 XML 中的对象。",[2755,105120,105121,105130],{},[2758,105122,105123],{},[2761,105124,105125,105127],{},[2764,105126,413],{"align":101},[2764,105128,105129],{"align":101},"作用",[2801,105131,105132,105141,105151,105160,105170,105180,105193,105203],{},[2761,105133,105134,105138],{},[2806,105135,105136],{"align":101},[74,105137,104971],{},[2806,105139,105140],{"align":101},"根节点",[2761,105142,105143,105148],{},[2806,105144,105145],{"align":101},[74,105146,105147],{},"\u003Coption>",[2806,105149,105150],{"align":101},"仿真参数",[2761,105152,105153,105157],{},[2806,105154,105155],{"align":101},[74,105156,104979],{},[2806,105158,105159],{"align":101},"世界中的物体",[2761,105161,105162,105167],{},[2806,105163,105164],{"align":101},[74,105165,105166],{},"\u003Cbody>",[2806,105168,105169],{"align":101},"刚体",[2761,105171,105172,105177],{},[2806,105173,105174],{"align":101},[74,105175,105176],{},"\u003Cgeom>",[2806,105178,105179],{"align":101},"几何体、碰撞体、可视体",[2761,105181,105182,105190],{},[2806,105183,105184,27446,105187],{"align":101},[74,105185,105186],{},"\u003Cjoint>",[74,105188,105189],{},"\u003Cfreejoint>",[2806,105191,105192],{"align":101},"关节",[2761,105194,105195,105200],{},[2806,105196,105197],{"align":101},[74,105198,105199],{},"\u003Csite>",[2806,105201,105202],{"align":101},"标记点",[2761,105204,105205,105210],{},[2806,105206,105207],{"align":101},[74,105208,105209],{},"\u003Cactuator>",[2806,105211,105212],{"align":101},"控制器",[24,105214,105215],{},"初学时可以先记住：",[67,105217,105220],{"className":105218,"code":105219,"language":7662,"meta":72},[7660],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[74,105221,105219],{"__ignoreMap":72},[14,105223,103206],{"id":103205},[24,105225,103209],{},[67,105227,105229],{"className":26289,"code":105228,"language":26291,"meta":72,"style":72},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[74,105230,105231],{"__ignoreMap":72},[77,105232,105233,105235,105237,105239,105241,105243,105245,105247],{"class":79,"line":80},[77,105234,27044],{"class":83},[77,105236,28783],{"class":271},[77,105238,26301],{"class":271},[77,105240,28868],{"class":94},[77,105242,104935],{"class":271},[77,105244,103250],{"class":271},[77,105246,104940],{"class":271},[77,105248,105249],{"class":271}," glfw-devel\n",[24,105251,105252],{},"pip:",[67,105254,105255],{"className":26289,"code":103355,"language":26291,"meta":72,"style":72},[74,105256,105257],{"__ignoreMap":72},[77,105258,105259,105261,105263,105265],{"class":79,"line":80},[77,105260,26298],{"class":83},[77,105262,26301],{"class":271},[77,105264,103366],{"class":271},[77,105266,103369],{"class":271},[24,105268,105269],{},"conda:",[67,105271,105273],{"className":26289,"code":105272,"language":26291,"meta":72,"style":72},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[74,105274,105275,105292,105301],{"__ignoreMap":72},[77,105276,105277,105279,105281,105283,105286,105288,105290],{"class":79,"line":80},[77,105278,32798],{"class":83},[77,105280,31644],{"class":271},[77,105282,27583],{"class":94},[77,105284,105285],{"class":271}," mujoco-xml",[77,105287,103411],{"class":271},[77,105289,103414],{"class":94},[77,105291,103417],{"class":94},[77,105293,105294,105296,105298],{"class":79,"line":91},[77,105295,32798],{"class":83},[77,105297,103424],{"class":271},[77,105299,105300],{"class":271}," mujoco-xml\n",[77,105302,105303,105305,105307,105309],{"class":79,"line":107},[77,105304,26298],{"class":83},[77,105306,26301],{"class":271},[77,105308,103366],{"class":271},[77,105310,103369],{"class":271},[24,105312,103440],{},[139,105314,105315,105318,105323],{},[54,105316,105317],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[54,105319,105320,105321,30853],{},"本章使用基础标签，适用于 ",[74,105322,103462],{},[54,105324,105325],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105327,103480],{"id":103479},[24,105329,105330],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[67,105332,105334],{"className":55525,"code":105333,"language":55527,"meta":72,"style":72},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[74,105335,105336,105350,105358,105363,105371],{"__ignoreMap":72},[77,105337,105338,105340,105342,105344,105346,105348],{"class":79,"line":80},[77,105339,260],{"class":87},[77,105341,103456],{"class":158},[77,105343,104210],{"class":83},[77,105345,268],{"class":87},[77,105347,65123],{"class":271},[77,105349,291],{"class":87},[77,105351,105352,105354,105356],{"class":79,"line":91},[77,105353,54602],{"class":87},[77,105355,104276],{"class":158},[77,105357,291],{"class":87},[77,105359,105360],{"class":79,"line":107},[77,105361,105362],{"class":87},"    ...\n",[77,105364,105365,105367,105369],{"class":79,"line":191},[77,105366,54875],{"class":87},[77,105368,104276],{"class":158},[77,105370,291],{"class":87},[77,105372,105373,105375,105377],{"class":79,"line":1543},[77,105374,351],{"class":87},[77,105376,103456],{"class":158},[77,105378,291],{"class":87},[24,105380,105381,105383,105384,105386,105387,105390],{},[74,105382,54258],{}," 表示刚体。",[74,105385,103555],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[74,105388,105389],{},"joint"," 表示刚体相对父刚体如何运动。",[19,105392,105393],{"id":105393},"层级结构非常重要",[24,105395,105396],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[67,105398,105401],{"className":105399,"code":105400,"language":7662,"meta":72},[7660],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[74,105402,105400],{"__ignoreMap":72},[24,105404,105405,513,105408,105411,105412,105415],{},[74,105406,105407],{},"red_box_geom",[74,105409,105410],{},"box_center"," 都属于 ",[74,105413,105414],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[67,105417,105419],{"className":55525,"code":105418,"language":55527,"meta":72,"style":72},"\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",[74,105420,105421,105441,105455,105475],{"__ignoreMap":72},[77,105422,105423,105425,105427,105429,105431,105433,105435,105437,105439],{"class":79,"line":80},[77,105424,260],{"class":87},[77,105426,54258],{"class":158},[77,105428,2495],{"class":83},[77,105430,268],{"class":87},[77,105432,55948],{"class":271},[77,105434,103541],{"class":83},[77,105436,268],{"class":87},[77,105438,103546],{"class":271},[77,105440,291],{"class":87},[77,105442,105443,105445,105447,105449,105451,105453],{"class":79,"line":91},[77,105444,54602],{"class":87},[77,105446,104055],{"class":158},[77,105448,2495],{"class":83},[77,105450,268],{"class":87},[77,105452,104396],{"class":271},[77,105454,103579],{"class":87},[77,105456,105457,105459,105461,105463,105465,105467,105469,105471,105473],{"class":79,"line":107},[77,105458,54602],{"class":87},[77,105460,103555],{"class":158},[77,105462,2487],{"class":83},[77,105464,268],{"class":87},[77,105466,55948],{"class":271},[77,105468,103571],{"class":83},[77,105470,268],{"class":87},[77,105472,103576],{"class":271},[77,105474,103579],{"class":87},[77,105476,105477,105479,105481],{"class":79,"line":191},[77,105478,351],{"class":87},[77,105480,54258],{"class":158},[77,105482,291],{"class":87},[24,105484,105485],{},"含义:",[139,105487,105488,105494,105499,105502],{},[54,105489,105490,105491,105493],{},"创建名为 ",[74,105492,56170],{}," 的刚体",[54,105495,105496,105497],{},"初始位置在世界坐标 ",[74,105498,103604],{},[54,105500,105501],{},"它有一个自由关节",[54,105503,105504],{},"它有一个盒子几何体",[19,105506,105507],{"id":105507},"坐标怎么理解",[24,105509,105510],{},"MuJoCo 默认使用三维坐标：",[67,105512,105515],{"className":105513,"code":105514,"language":7662,"meta":72},[7660],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[74,105516,105514],{"__ignoreMap":72},[24,105518,17105],{},[67,105520,105522],{"className":55525,"code":105521,"language":55527,"meta":72,"style":72},"pos=\"0 0 1\"\n",[74,105523,105524],{"__ignoreMap":72},[77,105525,105526],{"class":79,"line":80},[77,105527,105521],{"class":87},[24,105529,105530],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[19,105532,105534],{"id":105533},"geom-的-size-怎么理解","geom 的 size 怎么理解",[24,105536,105537,105538,84967,105541,105543],{},"不同 ",[74,105539,105540],{},"type",[74,105542,33963],{}," 含义不同：",[2755,105545,105546,105561],{},[2758,105547,105548],{},[2761,105549,105550,105554,105559],{},[2764,105551,105552],{"align":101},[74,105553,105540],{},[2764,105555,105556,105558],{"align":101},[74,105557,33963],{}," 示例",[2764,105560,103136],{"align":101},[2801,105562,105563,105577,105592,105611],{},[2761,105564,105565,105569,105574],{},[2806,105566,105567],{"align":101},[74,105568,56170],{},[2806,105570,105571],{"align":101},[74,105572,105573],{},"size=\"0.1 0.2 0.3\"",[2806,105575,105576],{"align":101},"x\u002Fy\u002Fz 半边长，不是完整长度",[2761,105578,105579,105584,105589],{},[2806,105580,105581],{"align":101},[74,105582,105583],{},"sphere",[2806,105585,105586],{"align":101},[74,105587,105588],{},"size=\"0.1\"",[2806,105590,105591],{"align":101},"球半径",[2761,105593,105594,105599,105604],{},[2806,105595,105596],{"align":101},[74,105597,105598],{},"capsule",[2806,105600,105601],{"align":101},[74,105602,105603],{},"size=\"0.03\"",[2806,105605,105606,105607,105610],{"align":101},"胶囊半径，长度常用 ",[74,105608,105609],{},"fromto"," 指定",[2761,105612,105613,105618,105623],{},[2806,105614,105615],{"align":101},[74,105616,105617],{},"plane",[2806,105619,105620],{"align":101},[74,105621,105622],{},"size=\"3 3 0.1\"",[2806,105624,105625],{"align":101},"可视平面大小，通常当地面",[24,105627,105628,105629,105631,105632,105634],{},"最容易踩坑的是 box：",[74,105630,104459],{}," 表示边长大约是 ",[74,105633,34504],{},"，因为 MuJoCo 用的是半边长。",[19,105636,105638],{"id":105637},"site-是什么","site 是什么",[24,105640,105641,105644],{},[74,105642,105643],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[139,105646,105647,105650,105653,105656],{},[54,105648,105649],{},"标记机械臂末端。",[54,105651,105652],{},"标记目标位置。",[54,105654,105655],{},"放传感器或相机参考点。",[54,105657,105658],{},"在 Python 中读取某个关键点的世界坐标。",[24,105660,105661,105662,513,105665,105668],{},"在后面的 Reacher 任务中，",[74,105663,105664],{},"tip",[74,105666,105667],{},"target"," 就会用 site 表示。",[14,105670,103688],{"id":103687},[67,105672,105674],{"className":32846,"code":105673,"language":32848,"meta":72,"style":72},"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",[74,105675,105676,105682,105692,105696,105700,105708,105713,105717,105721,105725,105730,105734,105739,105744,105749,105754,105758,105762,105766,105770,105774,105778,105790,105802,105810,105814,105829,105844,105848,105861,105876,105889,105902,105906,105922,105926,105930,105941,105953,105965,105977,105981,105985,105997],{"__ignoreMap":72},[77,105677,105678,105680],{"class":79,"line":80},[77,105679,32860],{"class":2123},[77,105681,103736],{"class":87},[77,105683,105684,105686,105688,105690],{"class":79,"line":91},[77,105685,32860],{"class":2123},[77,105687,33847],{"class":87},[77,105689,33850],{"class":2123},[77,105691,33853],{"class":87},[77,105693,105694],{"class":79,"line":107},[77,105695,4875],{"emptyLinePlaceholder":2549},[77,105697,105698],{"class":79,"line":191},[77,105699,4875],{"emptyLinePlaceholder":2549},[77,105701,105702,105704,105706],{"class":79,"line":1543},[77,105703,103749],{"class":94},[77,105705,16036],{"class":2123},[77,105707,103754],{"class":271},[77,105709,105710],{"class":79,"line":1549},[77,105711,105712],{"class":271},"\u003Cmujoco model=\"xml_basic\">\n",[77,105714,105715],{"class":79,"line":1566},[77,105716,103764],{"class":271},[77,105718,105719],{"class":79,"line":1572},[77,105720,4875],{"emptyLinePlaceholder":2549},[77,105722,105723],{"class":79,"line":1589},[77,105724,103773],{"class":271},[77,105726,105727],{"class":79,"line":1595},[77,105728,105729],{"class":271},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[77,105731,105732],{"class":79,"line":4088},[77,105733,4875],{"emptyLinePlaceholder":2549},[77,105735,105736],{"class":79,"line":4093},[77,105737,105738],{"class":271},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[77,105740,105741],{"class":79,"line":4099},[77,105742,105743],{"class":271},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[77,105745,105746],{"class":79,"line":4104},[77,105747,105748],{"class":271},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[77,105750,105751],{"class":79,"line":4118},[77,105752,105753],{"class":271},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[77,105755,105756],{"class":79,"line":4123},[77,105757,103802],{"class":271},[77,105759,105760],{"class":79,"line":4129},[77,105761,103807],{"class":271},[77,105763,105764],{"class":79,"line":4150},[77,105765,103812],{"class":271},[77,105767,105768],{"class":79,"line":4155},[77,105769,98134],{"class":271},[77,105771,105772],{"class":79,"line":4169},[77,105773,4875],{"emptyLinePlaceholder":2549},[77,105775,105776],{"class":79,"line":4174},[77,105777,4875],{"emptyLinePlaceholder":2549},[77,105779,105780,105782,105784,105786,105788],{"class":79,"line":4203},[77,105781,34414],{"class":2123},[77,105783,4448],{"class":83},[77,105785,103833],{"class":87},[77,105787,98122],{"class":94},[77,105789,6214],{"class":87},[77,105791,105792,105794,105796,105798,105800],{"class":79,"line":4208},[77,105793,103842],{"class":87},[77,105795,268],{"class":2123},[77,105797,103847],{"class":87},[77,105799,103749],{"class":94},[77,105801,2628],{"class":87},[77,105803,105804,105806,105808],{"class":79,"line":4225},[77,105805,103856],{"class":87},[77,105807,268],{"class":2123},[77,105809,103861],{"class":87},[77,105811,105812],{"class":79,"line":4230},[77,105813,4875],{"emptyLinePlaceholder":2549},[77,105815,105816,105819,105821,105824,105827],{"class":79,"line":4235},[77,105817,105818],{"class":87},"    box_body_id ",[77,105820,268],{"class":2123},[77,105822,105823],{"class":87}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[77,105825,105826],{"class":271},"\"red_box\"",[77,105828,2628],{"class":87},[77,105830,105831,105834,105836,105839,105842],{"class":79,"line":4240},[77,105832,105833],{"class":87},"    site_id ",[77,105835,268],{"class":2123},[77,105837,105838],{"class":87}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[77,105840,105841],{"class":271},"\"box_center\"",[77,105843,2628],{"class":87},[77,105845,105846],{"class":79,"line":4254},[77,105847,4875],{"emptyLinePlaceholder":2549},[77,105849,105850,105852,105855,105857,105859],{"class":79,"line":4259},[77,105851,5576],{"class":2123},[77,105853,105854],{"class":87}," box_body_id ",[77,105856,260],{"class":2123},[77,105858,6568],{"class":94},[77,105860,6214],{"class":87},[77,105862,105863,105866,105869,105871,105874],{"class":79,"line":5052},[77,105864,105865],{"class":2123},"        raise",[77,105867,105868],{"class":94}," RuntimeError",[77,105870,2622],{"class":87},[77,105872,105873],{"class":271},"\"body red_box not found\"",[77,105875,2628],{"class":87},[77,105877,105878,105880,105883,105885,105887],{"class":79,"line":5066},[77,105879,5576],{"class":2123},[77,105881,105882],{"class":87}," site_id ",[77,105884,260],{"class":2123},[77,105886,6568],{"class":94},[77,105888,6214],{"class":87},[77,105890,105891,105893,105895,105897,105900],{"class":79,"line":5074},[77,105892,105865],{"class":2123},[77,105894,105868],{"class":94},[77,105896,2622],{"class":87},[77,105898,105899],{"class":271},"\"site box_center not found\"",[77,105901,2628],{"class":87},[77,105903,105904],{"class":79,"line":5079},[77,105905,4875],{"emptyLinePlaceholder":2549},[77,105907,105908,105910,105912,105914,105916,105918,105920],{"class":79,"line":5085},[77,105909,5676],{"class":2123},[77,105911,103936],{"class":87},[77,105913,28511],{"class":2123},[77,105915,34910],{"class":94},[77,105917,2622],{"class":87},[77,105919,4198],{"class":94},[77,105921,33254],{"class":87},[77,105923,105924],{"class":79,"line":5091},[77,105925,103951],{"class":87},[77,105927,105928],{"class":79,"line":5096},[77,105929,4875],{"emptyLinePlaceholder":2549},[77,105931,105932,105934,105936,105939],{"class":79,"line":10422},[77,105933,33766],{"class":94},[77,105935,2622],{"class":87},[77,105937,105938],{"class":271},"\"simulation time:\"",[77,105940,103913],{"class":87},[77,105942,105943,105945,105947,105950],{"class":79,"line":10446},[77,105944,33766],{"class":94},[77,105946,2622],{"class":87},[77,105948,105949],{"class":271},"\"box body position:\"",[77,105951,105952],{"class":87},", data.xpos[box_body_id].copy())\n",[77,105954,105955,105957,105959,105962],{"class":79,"line":10451},[77,105956,33766],{"class":94},[77,105958,2622],{"class":87},[77,105960,105961],{"class":271},"\"site position:\"",[77,105963,105964],{"class":87},", data.site_xpos[site_id].copy())\n",[77,105966,105967,105969,105971,105974],{"class":79,"line":10457},[77,105968,33766],{"class":94},[77,105970,2622],{"class":87},[77,105972,105973],{"class":271},"\"box qpos:\"",[77,105975,105976],{"class":87},", np.array(data.qpos))\n",[77,105978,105979],{"class":79,"line":10484},[77,105980,4875],{"emptyLinePlaceholder":2549},[77,105982,105983],{"class":79,"line":10489},[77,105984,4875],{"emptyLinePlaceholder":2549},[77,105986,105987,105989,105991,105993,105995],{"class":79,"line":10495},[77,105988,4008],{"class":2123},[77,105990,33687],{"class":94},[77,105992,103994],{"class":2123},[77,105994,103997],{"class":271},[77,105996,6214],{"class":87},[77,105998,105999],{"class":79,"line":10507},[77,106000,104004],{"class":87},[24,106002,106003],{},"保存为：",[67,106005,106007],{"className":26289,"code":106006,"language":26291,"meta":72,"style":72},"touch ch2_xml_basic.py\n",[74,106008,106009],{"__ignoreMap":72},[77,106010,106011,106013],{"class":79,"line":80},[77,106012,103718],{"class":83},[77,106014,106015],{"class":271}," ch2_xml_basic.py\n",[24,106017,104735],{},[67,106019,106021],{"className":26289,"code":106020,"language":26291,"meta":72,"style":72},"python ch2_xml_basic.py\n",[74,106022,106023],{"__ignoreMap":72},[77,106024,106025,106027],{"class":79,"line":80},[77,106026,32848],{"class":83},[77,106028,106015],{"class":271},[19,106030,104007],{"id":104007},[24,106032,106033],{},"用名字查找 body：",[67,106035,106037],{"className":32846,"code":106036,"language":32848,"meta":72,"style":72},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[74,106038,106039],{"__ignoreMap":72},[77,106040,106041,106044,106046,106048,106050],{"class":79,"line":80},[77,106042,106043],{"class":87},"box_body_id ",[77,106045,268],{"class":2123},[77,106047,105823],{"class":87},[77,106049,105826],{"class":271},[77,106051,2628],{"class":87},[24,106053,106054],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[24,106056,106057],{},"用名字查找 site：",[67,106059,106061],{"className":32846,"code":106060,"language":32848,"meta":72,"style":72},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[74,106062,106063],{"__ignoreMap":72},[77,106064,106065,106068,106070,106072,106074],{"class":79,"line":80},[77,106066,106067],{"class":87},"site_id ",[77,106069,268],{"class":2123},[77,106071,105838],{"class":87},[77,106073,105841],{"class":271},[77,106075,2628],{"class":87},[24,106077,106078,106079,106082,106083,106086],{},"注意第二个参数是对象类型。查 body 就用 ",[74,106080,106081],{},"mjOBJ_BODY","，查 site 就用 ",[74,106084,106085],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[24,106088,106089],{},"读取世界坐标：",[67,106091,106093],{"className":32846,"code":106092,"language":32848,"meta":72,"style":72},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[74,106094,106095,106100],{"__ignoreMap":72},[77,106096,106097],{"class":79,"line":80},[77,106098,106099],{"class":87},"data.xpos[box_body_id]\n",[77,106101,106102],{"class":79,"line":91},[77,106103,106104],{"class":87},"data.site_xpos[site_id]\n",[24,106106,106107,106110,106111,106114],{},[74,106108,106109],{},"xpos"," 是 body 的世界坐标，",[74,106112,106113],{},"site_xpos"," 是 site 的世界坐标。",[19,106116,104143],{"id":104143},[67,106118,106120],{"className":32846,"code":106119,"language":32848,"meta":72,"style":72},"import mujoco\nimport numpy as np\n",[74,106121,106122,106128],{"__ignoreMap":72},[77,106123,106124,106126],{"class":79,"line":80},[77,106125,32860],{"class":2123},[77,106127,103736],{"class":87},[77,106129,106130,106132,106134,106136],{"class":79,"line":91},[77,106131,32860],{"class":2123},[77,106133,33847],{"class":87},[77,106135,33850],{"class":2123},[77,106137,33853],{"class":87},[24,106139,106140,106141,106144,106145,106148,106149,2828,106152,30853],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[74,106142,106143],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[74,106146,106147],{},"as np"," 是习惯写法，后面就可以写 ",[74,106150,106151],{},"np.array(...)",[74,106153,106154],{},"np.round(...)",[67,106156,106157],{"className":32846,"code":104030,"language":32848,"meta":72,"style":72},[74,106158,106159,106167,106171],{"__ignoreMap":72},[77,106160,106161,106163,106165],{"class":79,"line":80},[77,106162,103749],{"class":94},[77,106164,16036],{"class":2123},[77,106166,103754],{"class":271},[77,106168,106169],{"class":79,"line":91},[77,106170,104045],{"class":271},[77,106172,106173],{"class":79,"line":107},[77,106174,98134],{"class":271},[24,106176,106177,106178,30853],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[74,106179,106180],{},"mujoco.MjModel.from_xml_string(XML)",[67,106182,106184],{"className":55525,"code":106183,"language":55527,"meta":72,"style":72},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[74,106185,106186],{"__ignoreMap":72},[77,106187,106188,106190,106192,106194,106196,106198,106200,106202,106205,106207,106209,106212,106214,106216,106219],{"class":79,"line":80},[77,106189,260],{"class":87},[77,106191,105643],{"class":158},[77,106193,2495],{"class":83},[77,106195,268],{"class":87},[77,106197,105841],{"class":271},[77,106199,103541],{"class":83},[77,106201,268],{"class":87},[77,106203,106204],{"class":271},"\"0 0 0\"",[77,106206,103571],{"class":83},[77,106208,268],{"class":87},[77,106210,106211],{"class":271},"\"0.03\"",[77,106213,81205],{"class":83},[77,106215,268],{"class":87},[77,106217,106218],{"class":271},"\"0 1 0 1\"",[77,106220,103579],{"class":87},[24,106222,106223,106225,106226,106229,106230,106232,106233,106236],{},[74,106224,105643],{}," 是标记点。",[74,106227,106228],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[74,106231,105603],{}," 表示显示出来的小球大小。",[74,106234,106235],{},"rgba=\"0 1 0 1\""," 表示绿色。",[67,106238,106239],{"className":32846,"code":106036,"language":32848,"meta":72,"style":72},[74,106240,106241],{"__ignoreMap":72},[77,106242,106243,106245,106247,106249,106251],{"class":79,"line":80},[77,106244,106043],{"class":87},[77,106246,268],{"class":2123},[77,106248,105823],{"class":87},[77,106250,105826],{"class":271},[77,106252,2628],{"class":87},[24,106254,106255,106256,106258],{},"这行的作用是：根据名字 ",[74,106257,105826],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[24,106260,106261],{},"拆开看：",[139,106263,106264,106270,106275,106281],{},[54,106265,106266,106269],{},[74,106267,106268],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[54,106271,106272,106274],{},[74,106273,104519],{}," 是被查询的模型。",[54,106276,106277,106280],{},[74,106278,106279],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[54,106282,106283,106285],{},[74,106284,105826],{}," 是 XML 里写的名字。",[67,106287,106288],{"className":32846,"code":106060,"language":32848,"meta":72,"style":72},[74,106289,106290],{"__ignoreMap":72},[77,106291,106292,106294,106296,106298,106300],{"class":79,"line":80},[77,106293,106067],{"class":87},[77,106295,268],{"class":2123},[77,106297,105838],{"class":87},[77,106299,105841],{"class":271},[77,106301,2628],{"class":87},[24,106303,106304,106305,30853],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[74,106306,105841],{},[67,106308,106310],{"className":32846,"code":106309,"language":32848,"meta":72,"style":72},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[74,106311,106312,106324],{"__ignoreMap":72},[77,106313,106314,106316,106318,106320,106322],{"class":79,"line":80},[77,106315,4008],{"class":2123},[77,106317,105854],{"class":87},[77,106319,260],{"class":2123},[77,106321,6568],{"class":94},[77,106323,6214],{"class":87},[77,106325,106326,106329,106331,106333,106335],{"class":79,"line":91},[77,106327,106328],{"class":2123},"    raise",[77,106330,105868],{"class":94},[77,106332,2622],{"class":87},[77,106334,105873],{"class":271},[77,106336,2628],{"class":87},[24,106338,106339,106341,106342,106345,106346,106349,106350,106353],{},[74,106340,4008],{}," 是条件判断。",[74,106343,106344],{},"mj_name2id"," 找不到对象时会返回 ",[74,106347,106348],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[74,106351,106352],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[67,106355,106357],{"className":32846,"code":106356,"language":32848,"meta":72,"style":72},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[74,106358,106359,106375],{"__ignoreMap":72},[77,106360,106361,106363,106365,106367,106369,106371,106373],{"class":79,"line":80},[77,106362,5500],{"class":2123},[77,106364,103936],{"class":87},[77,106366,28511],{"class":2123},[77,106368,34910],{"class":94},[77,106370,2622],{"class":87},[77,106372,4198],{"class":94},[77,106374,33254],{"class":87},[77,106376,106377],{"class":79,"line":91},[77,106378,104134],{"class":87},[24,106380,106381],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[67,106383,106385],{"className":32846,"code":106384,"language":32848,"meta":72,"style":72},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[74,106386,106387],{"__ignoreMap":72},[77,106388,106389,106391,106393,106395],{"class":79,"line":80},[77,106390,32883],{"class":94},[77,106392,2622],{"class":87},[77,106394,105949],{"class":271},[77,106396,105952],{"class":87},[24,106398,106399,106401,106402,106405],{},[74,106400,103514],{}," 保存所有 body 的世界坐标。",[74,106403,106404],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[67,106407,106409],{"className":32846,"code":106408,"language":32848,"meta":72,"style":72},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[74,106410,106411],{"__ignoreMap":72},[77,106412,106413,106415,106417,106419],{"class":79,"line":80},[77,106414,32883],{"class":94},[77,106416,2622],{"class":87},[77,106418,105961],{"class":271},[77,106420,105964],{"class":87},[24,106422,106423,106426,106427,106429],{},[74,106424,106425],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[74,106428,105410],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[67,106431,106433],{"className":32846,"code":106432,"language":32848,"meta":72,"style":72},"print(\"box qpos:\", np.array(data.qpos))\n",[74,106434,106435],{"__ignoreMap":72},[77,106436,106437,106439,106441,106443],{"class":79,"line":80},[77,106438,32883],{"class":94},[77,106440,2622],{"class":87},[77,106442,105973],{"class":271},[77,106444,105976],{"class":87},[24,106446,106447,106448,106451],{},"这里打印广义位置数组。",[74,106449,106450],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106453,104750],{"id":104749},[24,106455,106456,106457,106460,106461,30853],{},"程序会输出 ",[74,106458,106459],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[74,106462,106463],{},"qpos",[24,106465,106466,106468,106469,106472,106473,106476],{},[74,106467,106404],{}," 是 body 的世界坐标位置。",[74,106470,106471],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[74,106474,106475],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[24,106478,84659,106479,84967,106481,106483],{},[74,106480,105410],{},[74,106482,106228],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[24,106485,106486],{},"如果你把 site 改成：",[67,106488,106490],{"className":55525,"code":106489,"language":55527,"meta":72,"style":72},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[74,106491,106492],{"__ignoreMap":72},[77,106493,106494,106496,106498,106500,106502,106505,106507,106509,106512,106514,106516,106518,106520,106522,106524],{"class":79,"line":80},[77,106495,260],{"class":87},[77,106497,105643],{"class":158},[77,106499,2495],{"class":83},[77,106501,268],{"class":87},[77,106503,106504],{"class":271},"\"box_top\"",[77,106506,103541],{"class":83},[77,106508,268],{"class":87},[77,106510,106511],{"class":271},"\"0 0 0.15\"",[77,106513,103571],{"class":83},[77,106515,268],{"class":87},[77,106517,106211],{"class":271},[77,106519,81205],{"class":83},[77,106521,268],{"class":87},[77,106523,106218],{"class":271},[77,106525,103579],{"class":87},[24,106527,106528,106529,106532],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[74,106530,106531],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106534,104782],{"id":104781},[139,106536,106537,106546,106549,106556,106562,106573],{},[54,106538,104845,106539,106541,106542,104848,106544,30853],{},[74,106540,105414],{}," 的初始高度从 ",[74,106543,2120],{},[74,106545,2696],{},[54,106547,106548],{},"重新运行程序。",[54,106550,106551,106552,106555],{},"观察 ",[74,106553,106554],{},"box qpos"," 和最终位置是否变化。",[54,106557,106558,106559,106561],{},"故意把 ",[74,106560,105643],{}," 名称改错，确认程序能报错。",[54,106563,104845,106564,106566,106567,104848,106569,106572],{},[74,106565,103555],{}," 的颜色 ",[74,106568,104467],{},[74,106570,106571],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[54,106574,104845,106575,84967,106577,104848,106580,106583,106584,106586],{},[74,106576,105410],{},[74,106578,106579],{},"pos",[74,106581,106582],{},"0 0 0.2","，观察 ",[74,106585,106531],{}," 如何变化。",[14,106588,104887],{"id":104886},[19,106590,106592],{"id":106591},"xml-error-schema-violation",[74,106593,106594],{},"XML Error: Schema violation",[24,106596,106597],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[19,106599,106601,83727,106603],{"id":106600},"mj_name2id-返回-1",[74,106602,106344],{},[74,106604,106348],{},[24,106606,106607,106608,106611],{},"说明名字没有找到。检查 XML 中 ",[74,106609,106610],{},"name=\"...\"","，并确认对象类型正确。",[19,106613,106614],{"id":106614},"物体不下落",[24,106616,104957],{},[139,106618,106619,106624,106629],{},[54,106620,106621,106622],{},"body 是否有 ",[74,106623,104055],{},[54,106625,106626,106627],{},"gravity 是否为 ",[74,106628,105023],{},[54,106630,106631,106632,106634],{},"body 是否被固定在 ",[74,106633,104276],{}," 中",[19,106636,106637],{"id":106637},"坐标看起来不符合预期",[24,106639,106640],{},"先区分两种坐标：",[2755,106642,106643,106652],{},[2758,106644,106645],{},[2761,106646,106647,106650],{},[2764,106648,106649],{"align":101},"坐标",[2764,106651,103136],{"align":101},[2801,106653,106654,106664],{},[2761,106655,106656,106661],{},[2806,106657,106658,106659],{"align":101},"XML 里的 ",[74,106660,106579],{},[2806,106662,106663],{"align":101},"相对父 body 的局部坐标",[2761,106665,106666,106672],{},[2806,106667,106668,27446,106670],{"align":101},[74,106669,103514],{},[74,106671,106425],{},[2806,106673,106674],{"align":101},"仿真更新后的世界坐标",[24,106676,106677,106678,106680,106681,84976,106684,106686],{},"如果你修改了 ",[74,106679,103505],{},"，但还没调用 ",[74,106682,106683],{},"mj_forward",[74,106685,103650],{},"，世界坐标可能还没有更新。",[14,106688,105041],{"id":105040},[24,106690,106691],{},"MJCF 建模先掌握四件事：",[139,106693,106694,106699,106704,106709],{},[54,106695,106696,106698],{},[74,106697,54258],{}," 表示刚体层级。",[54,106700,106701,106703],{},[74,106702,103555],{}," 表示形状、碰撞和质量。",[54,106705,106706,106708],{},[74,106707,105389],{}," 决定 body 能不能动、怎么动。",[54,106710,106711,106713],{},[74,106712,105643],{}," 用来标记关键点，方便 Python 读取位置。",[24,106715,106716],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2520,106718,106719],{},"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":72,"searchDepth":91,"depth":91,"links":106721},[106722,106723,106724,106730,106734,106735,106736,106743],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":106725},[106726,106727,106728,106729],{"id":105393,"depth":107,"text":105393},{"id":105507,"depth":107,"text":105507},{"id":105533,"depth":107,"text":105534},{"id":105637,"depth":107,"text":105638},{"id":103687,"depth":91,"text":103688,"children":106731},[106732,106733],{"id":104007,"depth":107,"text":104007},{"id":104143,"depth":107,"text":104143},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":106737},[106738,106739,106741,106742],{"id":106591,"depth":107,"text":106594},{"id":106600,"depth":107,"text":106740},"mj_name2id 返回 -1",{"id":106614,"depth":107,"text":106614},{"id":106637,"depth":107,"text":106637},{"id":105040,"depth":91,"text":105041},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105088,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106750,"title":106751,"body":106752,"description":72,"extension":2547,"meta":108247,"navigation":2549,"path":108248,"seo":108249,"stem":108250,"__hash__":108251},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106753,"toc":108219},[106754,106757,106759,106762,106765,106803,106806,106812,106815,106817,106819,106846,106848,106862,106864,106905,106907,106931,106933,106936,106945,106954,106957,106966,106974,106983,106986,106996,106999,107051,107058,107064,107072,107120,107123,107142,107145,107153,107157,107166,107199,107201,107549,107551,107563,107565,107576,107578,107581,107602,107608,107611,107636,107646,107649,107657,107660,107663,107684,107695,107697,107717,107720,107741,107750,107769,107775,107800,107803,107817,107824,107848,107851,107859,107868,107884,107896,107904,107913,107915,107918,107942,107947,107950,107972,107974,108013,108015,108022,108024,108032,108035,108038,108050,108091,108098,108109,108116,108119,108168,108171,108174,108180,108182,108187,108213,108216],[10,106755,106751],{"id":106756},"_3python-控制接口读取状态与推进仿真",[14,106758,103083],{"id":103082},[24,106760,106761],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[24,106763,106764],{},"你将学习:",[139,106766,106767,106772,106777,106781,106786,106797],{},[54,106768,106769],{},[74,106770,106771],{},"MjModel.from_xml_string",[54,106773,106774],{},[74,106775,106776],{},"MjData(model)",[54,106778,106779],{},[74,106780,103650],{},[54,106782,106783],{},[74,106784,106785],{},"mj_resetData",[54,106787,106788,106789,2828,106791,2828,106794],{},"读取 ",[74,106790,106463],{},[74,106792,106793],{},"qvel",[74,106795,106796],{},"ctrl",[54,106798,106799,106800],{},"使用 ",[74,106801,106802],{},"model.opt.timestep",[24,106804,106805],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[67,106807,106810],{"className":106808,"code":106809,"language":7662,"meta":72},[7660],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[74,106811,106809],{"__ignoreMap":72},[24,106813,106814],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106816,103206],{"id":103205},[24,106818,103209],{},[67,106820,106822],{"className":26289,"code":106821,"language":26291,"meta":72,"style":72},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[74,106823,106824],{"__ignoreMap":72},[77,106825,106826,106828,106830,106832,106834,106837,106839,106841,106843],{"class":79,"line":80},[77,106827,27044],{"class":83},[77,106829,28783],{"class":271},[77,106831,26301],{"class":271},[77,106833,28868],{"class":94},[77,106835,106836],{"class":271}," python3",[77,106838,103234],{"class":271},[77,106840,104935],{"class":271},[77,106842,103250],{"class":271},[77,106844,106845],{"class":271}," glfw\n",[24,106847,105252],{},[67,106849,106850],{"className":26289,"code":103355,"language":26291,"meta":72,"style":72},[74,106851,106852],{"__ignoreMap":72},[77,106853,106854,106856,106858,106860],{"class":79,"line":80},[77,106855,26298],{"class":83},[77,106857,26301],{"class":271},[77,106859,103366],{"class":271},[77,106861,103369],{"class":271},[24,106863,105269],{},[67,106865,106867],{"className":26289,"code":106866,"language":26291,"meta":72,"style":72},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[74,106868,106869,106886,106895],{"__ignoreMap":72},[77,106870,106871,106873,106875,106877,106880,106882,106884],{"class":79,"line":80},[77,106872,32798],{"class":83},[77,106874,31644],{"class":271},[77,106876,27583],{"class":94},[77,106878,106879],{"class":271}," mujoco-python-api",[77,106881,103411],{"class":271},[77,106883,103414],{"class":94},[77,106885,103417],{"class":94},[77,106887,106888,106890,106892],{"class":79,"line":91},[77,106889,32798],{"class":83},[77,106891,103424],{"class":271},[77,106893,106894],{"class":271}," mujoco-python-api\n",[77,106896,106897,106899,106901,106903],{"class":79,"line":107},[77,106898,26298],{"class":83},[77,106900,26301],{"class":271},[77,106902,103366],{"class":271},[77,106904,103369],{"class":271},[24,106906,103440],{},[139,106908,106909,106916,106925],{},[54,106910,106911,513,106913,106915],{},[74,106912,103111],{},[74,106914,103116],{}," 是官方 Python bindings 的类名。",[54,106917,106918,106919,106922,106923,30853],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[74,106920,106921],{},"mjModel"," 在 Python 中是 ",[74,106924,103145],{},[54,106926,106927,106928,30853],{},"不要使用 ",[74,106929,106930],{},"sim = mujoco_py.MjSim(...)",[14,106932,103480],{"id":103479},[24,106934,106935],{},"仿真推进核心代码:",[67,106937,106939],{"className":32846,"code":106938,"language":32848,"meta":72,"style":72},"mujoco.mj_step(model, data)\n",[74,106940,106941],{"__ignoreMap":72},[77,106942,106943],{"class":79,"line":80},[77,106944,106938],{"class":87},[24,106946,106947,106948,2828,106950,2828,106952,30853],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[74,106949,103505],{},[74,106951,103508],{},[74,106953,103502],{},[24,106955,106956],{},"重置仿真:",[67,106958,106960],{"className":32846,"code":106959,"language":32848,"meta":72,"style":72},"mujoco.mj_resetData(model, data)\n",[74,106961,106962],{"__ignoreMap":72},[77,106963,106964],{"class":79,"line":80},[77,106965,106959],{"class":87},[24,106967,106968,106969,84976,106971,106973],{},"如果手动修改了 ",[74,106970,103505],{},[74,106972,103508],{},"，通常应调用:",[67,106975,106977],{"className":32846,"code":106976,"language":32848,"meta":72,"style":72},"mujoco.mj_forward(model, data)\n",[74,106978,106979],{"__ignoreMap":72},[77,106980,106981],{"class":79,"line":80},[77,106982,106976],{"class":87},[24,106984,106985],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[19,106987,106989,2828,106991,2828,106993,106995],{"id":106988},"qposqvelctrl-是什么",[74,106990,106463],{},[74,106992,106793],{},[74,106994,106796],{}," 是什么",[24,106997,106998],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2755,107000,107001,107013],{},[2758,107002,107003],{},[2761,107004,107005,107008,107010],{},[2764,107006,107007],{"align":101},"字段",[2764,107009,103136],{"align":101},[2764,107011,107012],{"align":101},"谁来修改",[2801,107014,107015,107027,107039],{},[2761,107016,107017,107021,107024],{},[2806,107018,107019],{"align":101},[74,107020,103505],{},[2806,107022,107023],{"align":101},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2806,107025,107026],{"align":101},"MuJoCo 更新，也可以手动设置初始状态",[2761,107028,107029,107033,107036],{},[2806,107030,107031],{"align":101},[74,107032,103508],{},[2806,107034,107035],{"align":101},"广义速度，例如小车速度、关节角速度",[2806,107037,107038],{"align":101},"MuJoCo 更新，也可以手动清零",[2761,107040,107041,107045,107048],{},[2806,107042,107043],{"align":101},[74,107044,103511],{},[2806,107046,107047],{"align":101},"actuator 的控制输入",[2806,107049,107050],{"align":101},"主要由你的控制代码写入",[24,107052,1988,107053,513,107055,107057],{},[74,107054,106463],{},[74,107056,106793],{}," 不一定同维。自由刚体就是典型例子：",[67,107059,107062],{"className":107060,"code":107061,"language":7662,"meta":72},[7660],"freejoint: qpos 7 维，qvel 6 维\n",[74,107063,107061],{"__ignoreMap":72},[19,107065,107067,513,107069,107071],{"id":107066},"mj_step-和-mj_forward-的区别",[74,107068,103650],{},[74,107070,106683],{}," 的区别",[2755,107073,107074,107087],{},[2758,107075,107076],{},[2761,107077,107078,107081,107084],{},[2764,107079,107080],{"align":101},"函数",[2764,107082,107083],{"align":101},"是否推进时间",[2764,107085,107086],{"align":101},"什么时候用",[2801,107088,107089,107102],{},[2761,107090,107091,107096,107099],{},[2806,107092,107093],{"align":101},[74,107094,107095],{},"mj_step(model, data)",[2806,107097,107098],{"align":101},"是",[2806,107100,107101],{"align":101},"正常仿真循环，每调用一次前进一步",[2761,107103,107104,107109,107112],{},[2806,107105,107106],{"align":101},[74,107107,107108],{},"mj_forward(model, data)",[2806,107110,107111],{"align":101},"否",[2806,107113,107114,107115,2828,107117,107119],{"align":101},"手动改了 ",[74,107116,106463],{},[74,107118,106793],{}," 后，刷新派生量",[24,107121,107122],{},"例如你写：",[67,107124,107126],{"className":32846,"code":107125,"language":32848,"meta":72,"style":72},"data.qpos[2] = 2.0\n",[74,107127,107128],{"__ignoreMap":72},[77,107129,107130,107133,107135,107137,107139],{"class":79,"line":80},[77,107131,107132],{"class":87},"data.qpos[",[77,107134,2696],{"class":94},[77,107136,6918],{"class":87},[77,107138,268],{"class":2123},[77,107140,107141],{"class":94}," 2.0\n",[24,107143,107144],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[67,107146,107147],{"className":32846,"code":106976,"language":32848,"meta":72,"style":72},[74,107148,107149],{"__ignoreMap":72},[77,107150,107151],{"class":79,"line":80},[77,107152,106976],{"class":87},[19,107154,107156],{"id":107155},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[24,107158,107159,107162,107163,107165],{},[74,107160,107161],{},"mujoco.mj_resetData(model, data)"," 会把 ",[74,107164,35868],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[67,107167,107169],{"className":32846,"code":107168,"language":32848,"meta":72,"style":72},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[74,107170,107171,107175,107185,107195],{"__ignoreMap":72},[77,107172,107173],{"class":79,"line":80},[77,107174,106959],{"class":87},[77,107176,107177,107180,107182],{"class":79,"line":91},[77,107178,107179],{"class":87},"data.qpos[:] ",[77,107181,268],{"class":2123},[77,107183,107184],{"class":87}," random_qpos\n",[77,107186,107187,107190,107192],{"class":79,"line":107},[77,107188,107189],{"class":87},"data.qvel[:] ",[77,107191,268],{"class":2123},[77,107193,107194],{"class":94}," 0.0\n",[77,107196,107197],{"class":79,"line":191},[77,107198,106976],{"class":87},[14,107200,103688],{"id":103687},[67,107202,107204],{"className":32846,"code":107203,"language":32848,"meta":72,"style":72},"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",[74,107205,107206,107212,107222,107226,107230,107238,107243,107247,107251,107255,107260,107264,107269,107274,107279,107283,107287,107291,107295,107299,107303,107322,107329,107341,107352,107368,107384,107388,107392,107404,107416,107424,107428,107439,107443,107459,107463,107467,107476,107480,107485,107494,107498,107511,107516,107525,107529,107533,107545],{"__ignoreMap":72},[77,107207,107208,107210],{"class":79,"line":80},[77,107209,32860],{"class":2123},[77,107211,103736],{"class":87},[77,107213,107214,107216,107218,107220],{"class":79,"line":91},[77,107215,32860],{"class":2123},[77,107217,33847],{"class":87},[77,107219,33850],{"class":2123},[77,107221,33853],{"class":87},[77,107223,107224],{"class":79,"line":107},[77,107225,4875],{"emptyLinePlaceholder":2549},[77,107227,107228],{"class":79,"line":191},[77,107229,4875],{"emptyLinePlaceholder":2549},[77,107231,107232,107234,107236],{"class":79,"line":1543},[77,107233,103749],{"class":94},[77,107235,16036],{"class":2123},[77,107237,103754],{"class":271},[77,107239,107240],{"class":79,"line":1549},[77,107241,107242],{"class":271},"\u003Cmujoco model=\"state_api\">\n",[77,107244,107245],{"class":79,"line":1566},[77,107246,103764],{"class":271},[77,107248,107249],{"class":79,"line":1572},[77,107250,4875],{"emptyLinePlaceholder":2549},[77,107252,107253],{"class":79,"line":1589},[77,107254,103773],{"class":271},[77,107256,107257],{"class":79,"line":1595},[77,107258,107259],{"class":271},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[77,107261,107262],{"class":79,"line":4088},[77,107263,4875],{"emptyLinePlaceholder":2549},[77,107265,107266],{"class":79,"line":4093},[77,107267,107268],{"class":271},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[77,107270,107271],{"class":79,"line":4099},[77,107272,107273],{"class":271},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[77,107275,107276],{"class":79,"line":4104},[77,107277,107278],{"class":271},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[77,107280,107281],{"class":79,"line":4118},[77,107282,103802],{"class":271},[77,107284,107285],{"class":79,"line":4123},[77,107286,103807],{"class":271},[77,107288,107289],{"class":79,"line":4129},[77,107290,103812],{"class":271},[77,107292,107293],{"class":79,"line":4150},[77,107294,98134],{"class":271},[77,107296,107297],{"class":79,"line":4155},[77,107298,4875],{"emptyLinePlaceholder":2549},[77,107300,107301],{"class":79,"line":4169},[77,107302,4875],{"emptyLinePlaceholder":2549},[77,107304,107305,107307,107310,107313,107315,107318,107320],{"class":79,"line":4174},[77,107306,34414],{"class":2123},[77,107308,107309],{"class":83}," print_state",[77,107311,107312],{"class":87},"(prefix: ",[77,107314,3780],{"class":94},[77,107316,107317],{"class":87},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[77,107319,98122],{"class":94},[77,107321,6214],{"class":87},[77,107323,107324,107326],{"class":79,"line":4203},[77,107325,33766],{"class":94},[77,107327,107328],{"class":87},"(prefix)\n",[77,107330,107331,107333,107335,107338],{"class":79,"line":4208},[77,107332,33766],{"class":94},[77,107334,2622],{"class":87},[77,107336,107337],{"class":271},"\"  timestep:\"",[77,107339,107340],{"class":87},", model.opt.timestep)\n",[77,107342,107343,107345,107347,107350],{"class":79,"line":4225},[77,107344,33766],{"class":94},[77,107346,2622],{"class":87},[77,107348,107349],{"class":271},"\"  time:\"",[77,107351,103913],{"class":87},[77,107353,107354,107356,107358,107361,107364,107366],{"class":79,"line":4230},[77,107355,33766],{"class":94},[77,107357,2622],{"class":87},[77,107359,107360],{"class":271},"\"  qpos:\"",[77,107362,107363],{"class":87},", np.round(data.qpos.copy(), ",[77,107365,2907],{"class":94},[77,107367,32965],{"class":87},[77,107369,107370,107372,107374,107377,107380,107382],{"class":79,"line":4235},[77,107371,33766],{"class":94},[77,107373,2622],{"class":87},[77,107375,107376],{"class":271},"\"  qvel:\"",[77,107378,107379],{"class":87},", np.round(data.qvel.copy(), ",[77,107381,2907],{"class":94},[77,107383,32965],{"class":87},[77,107385,107386],{"class":79,"line":4240},[77,107387,4875],{"emptyLinePlaceholder":2549},[77,107389,107390],{"class":79,"line":4254},[77,107391,4875],{"emptyLinePlaceholder":2549},[77,107393,107394,107396,107398,107400,107402],{"class":79,"line":4259},[77,107395,34414],{"class":2123},[77,107397,4448],{"class":83},[77,107399,103833],{"class":87},[77,107401,98122],{"class":94},[77,107403,6214],{"class":87},[77,107405,107406,107408,107410,107412,107414],{"class":79,"line":5052},[77,107407,103842],{"class":87},[77,107409,268],{"class":2123},[77,107411,103847],{"class":87},[77,107413,103749],{"class":94},[77,107415,2628],{"class":87},[77,107417,107418,107420,107422],{"class":79,"line":5066},[77,107419,103856],{"class":87},[77,107421,268],{"class":2123},[77,107423,103861],{"class":87},[77,107425,107426],{"class":79,"line":5074},[77,107427,4875],{"emptyLinePlaceholder":2549},[77,107429,107430,107433,107436],{"class":79,"line":5079},[77,107431,107432],{"class":87},"    print_state(",[77,107434,107435],{"class":271},"\"initial\"",[77,107437,107438],{"class":87},", model, data)\n",[77,107440,107441],{"class":79,"line":5085},[77,107442,4875],{"emptyLinePlaceholder":2549},[77,107444,107445,107447,107449,107451,107453,107455,107457],{"class":79,"line":5091},[77,107446,5676],{"class":2123},[77,107448,103936],{"class":87},[77,107450,28511],{"class":2123},[77,107452,34910],{"class":94},[77,107454,2622],{"class":87},[77,107456,3269],{"class":94},[77,107458,33254],{"class":87},[77,107460,107461],{"class":79,"line":5096},[77,107462,103951],{"class":87},[77,107464,107465],{"class":79,"line":10422},[77,107466,4875],{"emptyLinePlaceholder":2549},[77,107468,107469,107471,107474],{"class":79,"line":10446},[77,107470,107432],{"class":87},[77,107472,107473],{"class":271},"\"after 50 steps\"",[77,107475,107438],{"class":87},[77,107477,107478],{"class":79,"line":10451},[77,107479,4875],{"emptyLinePlaceholder":2549},[77,107481,107482],{"class":79,"line":10457},[77,107483,107484],{"class":87},"    mujoco.mj_resetData(model, data)\n",[77,107486,107487,107489,107492],{"class":79,"line":10484},[77,107488,107432],{"class":87},[77,107490,107491],{"class":271},"\"after reset\"",[77,107493,107438],{"class":87},[77,107495,107496],{"class":79,"line":10489},[77,107497,4875],{"emptyLinePlaceholder":2549},[77,107499,107500,107503,107505,107507,107509],{"class":79,"line":10495},[77,107501,107502],{"class":87},"    data.qpos[",[77,107504,2696],{"class":94},[77,107506,6918],{"class":87},[77,107508,268],{"class":2123},[77,107510,107141],{"class":94},[77,107512,107513],{"class":79,"line":10507},[77,107514,107515],{"class":87},"    mujoco.mj_forward(model, data)\n",[77,107517,107518,107520,107523],{"class":79,"line":10519},[77,107519,107432],{"class":87},[77,107521,107522],{"class":271},"\"after manual qpos edit\"",[77,107524,107438],{"class":87},[77,107526,107527],{"class":79,"line":10531},[77,107528,4875],{"emptyLinePlaceholder":2549},[77,107530,107531],{"class":79,"line":12189},[77,107532,4875],{"emptyLinePlaceholder":2549},[77,107534,107535,107537,107539,107541,107543],{"class":79,"line":12214},[77,107536,4008],{"class":2123},[77,107538,33687],{"class":94},[77,107540,103994],{"class":2123},[77,107542,103997],{"class":271},[77,107544,6214],{"class":87},[77,107546,107547],{"class":79,"line":12237},[77,107548,104004],{"class":87},[24,107550,106003],{},[67,107552,107554],{"className":26289,"code":107553,"language":26291,"meta":72,"style":72},"touch ch3_python_state.py\n",[74,107555,107556],{"__ignoreMap":72},[77,107557,107558,107560],{"class":79,"line":80},[77,107559,103718],{"class":83},[77,107561,107562],{"class":271}," ch3_python_state.py\n",[24,107564,104735],{},[67,107566,107568],{"className":26289,"code":107567,"language":26291,"meta":72,"style":72},"python ch3_python_state.py\n",[74,107569,107570],{"__ignoreMap":72},[77,107571,107572,107574],{"class":79,"line":80},[77,107573,32848],{"class":83},[77,107575,107562],{"class":271},[19,107577,104007],{"id":104007},[24,107579,107580],{},"打印状态的函数：",[67,107582,107584],{"className":32846,"code":107583,"language":32848,"meta":72,"style":72},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[74,107585,107586],{"__ignoreMap":72},[77,107587,107588,107590,107592,107594,107596,107598,107600],{"class":79,"line":80},[77,107589,34414],{"class":2123},[77,107591,107309],{"class":83},[77,107593,107312],{"class":87},[77,107595,3780],{"class":94},[77,107597,107317],{"class":87},[77,107599,98122],{"class":94},[77,107601,6214],{"class":87},[24,107603,107604,107605,107607],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[74,107606,35868],{}," 里发生了什么。",[24,107609,107610],{},"推进 50 步：",[67,107612,107614],{"className":32846,"code":107613,"language":32848,"meta":72,"style":72},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[74,107615,107616,107632],{"__ignoreMap":72},[77,107617,107618,107620,107622,107624,107626,107628,107630],{"class":79,"line":80},[77,107619,5500],{"class":2123},[77,107621,103936],{"class":87},[77,107623,28511],{"class":2123},[77,107625,34910],{"class":94},[77,107627,2622],{"class":87},[77,107629,3269],{"class":94},[77,107631,33254],{"class":87},[77,107633,107634],{"class":79,"line":91},[77,107635,104134],{"class":87},[24,107637,107638,107639,107642,107643,107645],{},"由于 ",[74,107640,107641],{},"timestep=0.01","，所以 50 步后时间约为 ",[74,107644,37795],{}," 秒。",[24,107647,107648],{},"重置：",[67,107650,107651],{"className":32846,"code":106959,"language":32848,"meta":72,"style":72},[74,107652,107653],{"__ignoreMap":72},[77,107654,107655],{"class":79,"line":80},[77,107656,106959],{"class":87},[24,107658,107659],{},"这会把时间、位置、速度恢复到初始状态。",[24,107661,107662],{},"手动改高度：",[67,107664,107666],{"className":32846,"code":107665,"language":32848,"meta":72,"style":72},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[74,107667,107668,107680],{"__ignoreMap":72},[77,107669,107670,107672,107674,107676,107678],{"class":79,"line":80},[77,107671,107132],{"class":87},[77,107673,2696],{"class":94},[77,107675,6918],{"class":87},[77,107677,268],{"class":2123},[77,107679,107141],{"class":94},[77,107681,107682],{"class":79,"line":91},[77,107683,106976],{"class":87},[24,107685,107686,107687,107690,107691,107694],{},"这个例子里 ",[74,107688,107689],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[74,107692,107693],{},"2.0"," 表示把小球放到更高的位置。",[19,107696,104143],{"id":104143},[67,107698,107699],{"className":32846,"code":107583,"language":32848,"meta":72,"style":72},[74,107700,107701],{"__ignoreMap":72},[77,107702,107703,107705,107707,107709,107711,107713,107715],{"class":79,"line":80},[77,107704,34414],{"class":2123},[77,107706,107309],{"class":83},[77,107708,107312],{"class":87},[77,107710,3780],{"class":94},[77,107712,107317],{"class":87},[77,107714,98122],{"class":94},[77,107716,6214],{"class":87},[24,107718,107719],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[139,107721,107722,107731,107736],{},[54,107723,107724,107727,107728,107730],{},[74,107725,107726],{},"prefix","：一段文字，比如 ",[74,107729,107435],{},"，用来说明现在打印的是哪个阶段。",[54,107732,107733,107735],{},[74,107734,104519],{},"：MuJoCo 模型。",[54,107737,107738,107740],{},[74,107739,35868],{},"：MuJoCo 当前状态。",[24,107742,107743,2828,107746,107749],{},[74,107744,107745],{},"prefix: str",[74,107747,107748],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[67,107751,107753],{"className":32846,"code":107752,"language":32848,"meta":72,"style":72},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[74,107754,107755],{"__ignoreMap":72},[77,107756,107757,107759,107761,107763,107765,107767],{"class":79,"line":80},[77,107758,32883],{"class":94},[77,107760,2622],{"class":87},[77,107762,107360],{"class":271},[77,107764,107363],{"class":87},[77,107766,2907],{"class":94},[77,107768,32965],{"class":87},[24,107770,107771,107774],{},[74,107772,107773],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[67,107776,107778],{"className":32846,"code":107777,"language":32848,"meta":72,"style":72},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[74,107779,107780,107792],{"__ignoreMap":72},[77,107781,107782,107784,107786,107788,107790],{"class":79,"line":80},[77,107783,104069],{"class":87},[77,107785,268],{"class":2123},[77,107787,103847],{"class":87},[77,107789,103749],{"class":94},[77,107791,2628],{"class":87},[77,107793,107794,107796,107798],{"class":79,"line":91},[77,107795,104093],{"class":87},[77,107797,268],{"class":2123},[77,107799,103861],{"class":87},[24,107801,107802],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[67,107804,107806],{"className":32846,"code":107805,"language":32848,"meta":72,"style":72},"print_state(\"initial\", model, data)\n",[74,107807,107808],{"__ignoreMap":72},[77,107809,107810,107813,107815],{"class":79,"line":80},[77,107811,107812],{"class":87},"print_state(",[77,107814,107435],{"class":271},[77,107816,107438],{"class":87},[24,107818,107819,107820,107823],{},"调用刚才定义的 ",[74,107821,107822],{},"print_state"," 函数，打印初始状态。",[67,107825,107826],{"className":32846,"code":107613,"language":32848,"meta":72,"style":72},[74,107827,107828,107844],{"__ignoreMap":72},[77,107829,107830,107832,107834,107836,107838,107840,107842],{"class":79,"line":80},[77,107831,5500],{"class":2123},[77,107833,103936],{"class":87},[77,107835,28511],{"class":2123},[77,107837,34910],{"class":94},[77,107839,2622],{"class":87},[77,107841,3269],{"class":94},[77,107843,33254],{"class":87},[77,107845,107846],{"class":79,"line":91},[77,107847,104134],{"class":87},[24,107849,107850],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[67,107852,107853],{"className":32846,"code":106959,"language":32848,"meta":72,"style":72},[74,107854,107855],{"__ignoreMap":72},[77,107856,107857],{"class":79,"line":80},[77,107858,106959],{"class":87},[24,107860,107861,107862,107864,107865,107867],{},"重置 ",[74,107863,35868],{},"。注意它不会重新创建 ",[74,107866,104519],{},"，因为模型结构没有变，只是状态回到初始值。",[67,107869,107870],{"className":32846,"code":107125,"language":32848,"meta":72,"style":72},[74,107871,107872],{"__ignoreMap":72},[77,107873,107874,107876,107878,107880,107882],{"class":79,"line":80},[77,107875,107132],{"class":87},[77,107877,2696],{"class":94},[77,107879,6918],{"class":87},[77,107881,268],{"class":2123},[77,107883,107141],{"class":94},[24,107885,107886,107887,2828,107890,2828,107893,107895],{},"这行是“手动改状态”。在 freejoint 中，",[74,107888,107889],{},"qpos[0]",[74,107891,107892],{},"qpos[1]",[74,107894,107689],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[67,107897,107898],{"className":32846,"code":106976,"language":32848,"meta":72,"style":72},[74,107899,107900],{"__ignoreMap":72},[77,107901,107902],{"class":79,"line":80},[77,107903,106976],{"class":87},[24,107905,107906,107907,107909,107910,107912],{},"手动改完 ",[74,107908,106463],{}," 后，调用 ",[74,107911,106683],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107914,104750],{"id":104749},[24,107916,107917],{},"你会看到:",[139,107919,107920,107925,107930,107933],{},[54,107921,107922,107923],{},"初始时间为 ",[74,107924,1939],{},[54,107926,107927,107928],{},"50 步后时间约为 ",[74,107929,37795],{},[54,107931,107932],{},"reset 后状态恢复",[54,107934,107935,107936,107939,107940],{},"手动修改 ",[74,107937,107938],{},"data.qpos[2]"," 后，小球高度变为 ",[74,107941,107693],{},[24,107943,107944,107946],{},[74,107945,107689],{}," 在这个例子中表示自由刚体的 z 坐标。",[24,107948,107949],{},"输出里可以重点看三件事：",[139,107951,107952,107960,107965],{},[54,107953,107954,107956,107957,107959],{},[74,107955,4862],{}," 是否随着 ",[74,107958,103650],{}," 增加。",[54,107961,107962,107964],{},[74,107963,106463],{}," 的 z 坐标是否因为下落而变化。",[54,107966,107967,107969,107970,30853],{},[74,107968,106785],{}," 后时间是否回到 ",[74,107971,1939],{},[14,107973,104782],{"id":104781},[139,107975,107976,107982,107988,107994,107997,108006],{},[54,107977,107978,107979,30853],{},"修改 timestep 为 ",[74,107980,107981],{},"0.005",[54,107983,107984,107985,30853],{},"重新运行，检查 50 步后时间是否约为 ",[74,107986,107987],{},"0.25",[54,107989,107990,107991,30853],{},"修改重力为 ",[74,107992,107993],{},"0 0 -1.0",[54,107995,107996],{},"观察小球下降速度是否变慢。",[54,107998,104845,107999,104848,108002,108005],{},[74,108000,108001],{},"data.qpos[2] = 2.0",[74,108003,108004],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[54,108007,108008,108009,108012],{},"注释掉 ",[74,108010,108011],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,108014,104887],{"id":104886},[19,108016,108018,108019,108021],{"id":108017},"修改-dataqpos-后位置没有更新","修改 ",[74,108020,103505],{}," 后位置没有更新",[24,108023,104896],{},[67,108025,108026],{"className":32846,"code":106976,"language":32848,"meta":72,"style":72},[74,108027,108028],{"__ignoreMap":72},[77,108029,108030],{"class":79,"line":80},[77,108031,106976],{"class":87},[19,108033,108034],{"id":108034},"数组维度看不懂",[24,108036,108037],{},"打印模型维度:",[67,108039,108041],{"className":32846,"code":108040,"language":32848,"meta":72,"style":72},"print(model.nq, model.nv, model.nu)\n",[74,108042,108043],{"__ignoreMap":72},[77,108044,108045,108047],{"class":79,"line":80},[77,108046,32883],{"class":94},[77,108048,108049],{"class":87},"(model.nq, model.nv, model.nu)\n",[2755,108051,108052,108060],{},[2758,108053,108054],{},[2761,108055,108056,108058],{},[2764,108057,107007],{"align":101},[2764,108059,103136],{"align":101},[2801,108061,108062,108072,108082],{},[2761,108063,108064,108069],{},[2806,108065,108066],{"align":101},[74,108067,108068],{},"nq",[2806,108070,108071],{"align":101},"位置变量数量",[2761,108073,108074,108079],{},[2806,108075,108076],{"align":101},[74,108077,108078],{},"nv",[2806,108080,108081],{"align":101},"速度变量数量",[2761,108083,108084,108088],{},[2806,108085,108086],{"align":101},[74,108087,104596],{},[2806,108089,108090],{"align":101},"控制输入数量",[19,108092,108094,108095,108097],{"id":108093},"误以为-qpos-一定等于关节数","误以为 ",[74,108096,106463],{}," 一定等于关节数",[24,108099,108100,108101,84967,108103,108105,108106,108108],{},"不是。例如 ",[74,108102,104055],{},[74,108104,106463],{}," 是 7 维，但 ",[74,108107,106793],{}," 是 6 维。",[19,108110,108112,108113,108115],{"id":108111},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[74,108114,106463],{}," 的第几位",[24,108117,108118],{},"初学时可以先打印：",[67,108120,108122],{"className":32846,"code":108121,"language":32848,"meta":72,"style":72},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[74,108123,108124,108134,108144,108156],{"__ignoreMap":72},[77,108125,108126,108128,108130,108132],{"class":79,"line":80},[77,108127,32883],{"class":94},[77,108129,2622],{"class":87},[77,108131,103874],{"class":271},[77,108133,103877],{"class":87},[77,108135,108136,108138,108140,108142],{"class":79,"line":91},[77,108137,32883],{"class":94},[77,108139,2622],{"class":87},[77,108141,103886],{"class":271},[77,108143,103889],{"class":87},[77,108145,108146,108148,108150,108153],{"class":79,"line":107},[77,108147,32883],{"class":94},[77,108149,2622],{"class":87},[77,108151,108152],{"class":271},"\"qpos:\"",[77,108154,108155],{"class":87},", data.qpos)\n",[77,108157,108158,108160,108162,108165],{"class":79,"line":191},[77,108159,32883],{"class":94},[77,108161,2622],{"class":87},[77,108163,108164],{"class":271},"\"qvel:\"",[77,108166,108167],{"class":87},", data.qvel)\n",[24,108169,108170],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[19,108172,108173],{"id":108173},"仿真结果每次都一样",[24,108175,108176,108177,108179],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[74,108178,106463],{},"、目标点或控制输入。",[14,108181,105041],{"id":105040},[24,108183,108184,108185,27086],{},"Python 控制 MuJoCo 的核心就是读写 ",[74,108186,35868],{},[139,108188,108189,108197,108202,108207],{},[54,108190,108191,108192,513,108194,108196],{},"用 ",[74,108193,103505],{},[74,108195,103508],{}," 读取状态。",[54,108198,108191,108199,108201],{},[74,108200,103511],{}," 写入控制。",[54,108203,108191,108204,108206],{},[74,108205,103650],{}," 推进时间。",[54,108208,108209,108210,108212],{},"手动改状态后用 ",[74,108211,106683],{}," 刷新派生量。",[24,108214,108215],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2520,108217,108218],{},"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":72,"searchDepth":91,"depth":91,"links":108220},[108221,108222,108223,108230,108234,108235,108236,108246],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":108224},[108225,108227,108229],{"id":106988,"depth":107,"text":108226},"qpos、qvel、ctrl 是什么",{"id":107066,"depth":107,"text":108228},"mj_step 和 mj_forward 的区别",{"id":107155,"depth":107,"text":107156},{"id":103687,"depth":91,"text":103688,"children":108231},[108232,108233],{"id":104007,"depth":107,"text":104007},{"id":104143,"depth":107,"text":104143},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":108237},[108238,108240,108241,108243,108245],{"id":108017,"depth":107,"text":108239},"修改 data.qpos 后位置没有更新",{"id":108034,"depth":107,"text":108034},{"id":108093,"depth":107,"text":108242},"误以为 qpos 一定等于关节数",{"id":108111,"depth":107,"text":108244},"不知道某个元素在 qpos 的第几位",{"id":108173,"depth":107,"text":108173},{"id":105040,"depth":91,"text":105041},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106751,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108253,"title":108254,"body":108255,"description":72,"extension":2547,"meta":109945,"navigation":2549,"path":109946,"seo":109947,"stem":109948,"__hash__":109949},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108256,"toc":109921},[108257,108260,108262,108265,108267,108292,108295,108314,108317,108319,108321,108345,108347,108361,108363,108404,108406,108430,108432,108435,108469,108471,108484,108487,108555,108564,108568,108571,108605,108611,108614,108618,108657,108660,108680,108684,108727,108729,108758,108761,108767,108770,108772,109166,109168,109180,109182,109193,109195,109198,109227,109235,109238,109273,109276,109278,109286,109289,109291,109302,109312,109332,109335,109371,109383,109431,109450,109492,109505,109533,109538,109559,109569,109587,109590,109624,109627,109647,109650,109669,109675,109677,109680,109686,109692,109702,109705,109711,109720,109722,109768,109770,109776,109782,109785,109788,109808,109811,109817,109823,109825,109848,109851,109854,109863,109866,109904,109906,109909,109915,109918],[10,108258,108254],{"id":108259},"_4关节actuator-与力控制",[14,108261,103083],{"id":103082},[24,108263,108264],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[24,108266,106764],{},[139,108268,108269,108275,108280,108284,108289],{},[54,108270,108271,108274],{},[74,108272,108273],{},"hinge"," 关节",[54,108276,108277],{},[74,108278,108279],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[54,108281,108282],{},[74,108283,103511],{},[54,108285,108286],{},[74,108287,108288],{},"ctrlrange",[54,108290,108291],{},"读取关节角和角速度",[24,108293,108294],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[67,108296,108298],{"className":32846,"code":108297,"language":32848,"meta":72,"style":72},"data.ctrl[0] = ...\n",[74,108299,108300],{"__ignoreMap":72},[77,108301,108302,108305,108307,108309,108311],{"class":79,"line":80},[77,108303,108304],{"class":87},"data.ctrl[",[77,108306,1939],{"class":94},[77,108308,6918],{"class":87},[77,108310,268],{"class":2123},[77,108312,108313],{"class":94}," ...\n",[24,108315,108316],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108318,103206],{"id":103205},[24,108320,103209],{},[67,108322,108323],{"className":26289,"code":106821,"language":26291,"meta":72,"style":72},[74,108324,108325],{"__ignoreMap":72},[77,108326,108327,108329,108331,108333,108335,108337,108339,108341,108343],{"class":79,"line":80},[77,108328,27044],{"class":83},[77,108330,28783],{"class":271},[77,108332,26301],{"class":271},[77,108334,28868],{"class":94},[77,108336,106836],{"class":271},[77,108338,103234],{"class":271},[77,108340,104935],{"class":271},[77,108342,103250],{"class":271},[77,108344,106845],{"class":271},[24,108346,105252],{},[67,108348,108349],{"className":26289,"code":103355,"language":26291,"meta":72,"style":72},[74,108350,108351],{"__ignoreMap":72},[77,108352,108353,108355,108357,108359],{"class":79,"line":80},[77,108354,26298],{"class":83},[77,108356,26301],{"class":271},[77,108358,103366],{"class":271},[77,108360,103369],{"class":271},[24,108362,105269],{},[67,108364,108366],{"className":26289,"code":108365,"language":26291,"meta":72,"style":72},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[74,108367,108368,108385,108394],{"__ignoreMap":72},[77,108369,108370,108372,108374,108376,108379,108381,108383],{"class":79,"line":80},[77,108371,32798],{"class":83},[77,108373,31644],{"class":271},[77,108375,27583],{"class":94},[77,108377,108378],{"class":271}," mujoco-control",[77,108380,103411],{"class":271},[77,108382,103414],{"class":94},[77,108384,103417],{"class":94},[77,108386,108387,108389,108391],{"class":79,"line":91},[77,108388,32798],{"class":83},[77,108390,103424],{"class":271},[77,108392,108393],{"class":271}," mujoco-control\n",[77,108395,108396,108398,108400,108402],{"class":79,"line":107},[77,108397,26298],{"class":83},[77,108399,26301],{"class":271},[77,108401,103366],{"class":271},[77,108403,103369],{"class":271},[24,108405,103440],{},[139,108407,108408,108414,108421,108427],{},[54,108409,108410,108413],{},[74,108411,108412],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[54,108415,108416,108418,108419,30853],{},[74,108417,103511],{}," 长度等于 ",[74,108420,104592],{},[54,108422,84659,108423,108426],{},[74,108424,108425],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[54,108428,108429],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108431,103480],{"id":103479},[24,108433,108434],{},"关节决定 body 如何运动:",[67,108436,108438],{"className":55525,"code":108437,"language":55527,"meta":72,"style":72},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[74,108439,108440],{"__ignoreMap":72},[77,108441,108442,108444,108446,108448,108450,108453,108455,108457,108459,108462,108464,108467],{"class":79,"line":80},[77,108443,260],{"class":87},[77,108445,105389],{"class":158},[77,108447,2495],{"class":83},[77,108449,268],{"class":87},[77,108451,108452],{"class":271},"\"hinge\"",[77,108454,2487],{"class":83},[77,108456,268],{"class":87},[77,108458,108452],{"class":271},[77,108460,108461],{"class":83}," axis",[77,108463,268],{"class":87},[77,108465,108466],{"class":271},"\"0 1 0\"",[77,108468,103579],{"class":87},[24,108470,105485],{},[139,108472,108473,108478,108481],{},[54,108474,108475,108476],{},"名字是 ",[74,108477,108273],{},[54,108479,108480],{},"类型是旋转关节",[54,108482,108483],{},"绕 y 轴旋转",[24,108485,108486],{},"actuator 决定如何施加控制:",[67,108488,108490],{"className":55525,"code":108489,"language":55527,"meta":72,"style":72},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[74,108491,108492,108501,108547],{"__ignoreMap":72},[77,108493,108494,108496,108499],{"class":79,"line":80},[77,108495,260],{"class":87},[77,108497,108498],{"class":158},"actuator",[77,108500,291],{"class":87},[77,108502,108503,108505,108508,108510,108512,108515,108518,108520,108522,108525,108527,108529,108532,108534,108537,108540,108542,108545],{"class":79,"line":91},[77,108504,54602],{"class":87},[77,108506,108507],{"class":158},"motor",[77,108509,2495],{"class":83},[77,108511,268],{"class":87},[77,108513,108514],{"class":271},"\"hinge_motor\"",[77,108516,108517],{"class":83}," joint",[77,108519,268],{"class":87},[77,108521,108452],{"class":271},[77,108523,108524],{"class":83}," gear",[77,108526,268],{"class":87},[77,108528,6153],{"class":271},[77,108530,108531],{"class":83}," ctrlrange",[77,108533,268],{"class":87},[77,108535,108536],{"class":271},"\"-2 2\"",[77,108538,108539],{"class":83}," ctrllimited",[77,108541,268],{"class":87},[77,108543,108544],{"class":271},"\"true\"",[77,108546,103579],{"class":87},[77,108548,108549,108551,108553],{"class":79,"line":107},[77,108550,351],{"class":87},[77,108552,108498],{"class":158},[77,108554,291],{"class":87},[24,108556,108557,108560,108561,30853],{},[74,108558,108559],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[74,108562,108563],{},"[-2, 2]",[19,108565,108567],{"id":108566},"joint-和-actuator-的关系","joint 和 actuator 的关系",[24,108569,108570],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2755,108572,108573,108583],{},[2758,108574,108575],{},[2761,108576,108577,108579,108581],{},[2764,108578,28221],{"align":101},[2764,108580,105129],{"align":101},[2764,108582,103170],{"align":101},[2801,108584,108585,108595],{},[2761,108586,108587,108589,108592],{},[2806,108588,105389],{"align":101},[2806,108590,108591],{"align":101},"定义能怎么动",[2806,108593,108594],{"align":101},"门轴允许门旋转",[2761,108596,108597,108599,108602],{},[2806,108598,108498],{"align":101},[2806,108600,108601],{"align":101},"定义怎么施力或控制",[2806,108603,108604],{"align":101},"人推门、马达带动门",[24,108606,108607,108608,108610],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[74,108609,103511],{}," 主动控制它。",[24,108612,108613],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[19,108615,108617],{"id":108616},"hinge-joint","hinge joint",[67,108619,108621],{"className":55525,"code":108620,"language":55527,"meta":72,"style":72},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[74,108622,108623],{"__ignoreMap":72},[77,108624,108625,108627,108629,108631,108633,108635,108637,108639,108641,108643,108645,108647,108650,108652,108655],{"class":79,"line":80},[77,108626,260],{"class":87},[77,108628,105389],{"class":158},[77,108630,2495],{"class":83},[77,108632,268],{"class":87},[77,108634,108452],{"class":271},[77,108636,2487],{"class":83},[77,108638,268],{"class":87},[77,108640,108452],{"class":271},[77,108642,108461],{"class":83},[77,108644,268],{"class":87},[77,108646,108466],{"class":271},[77,108648,108649],{"class":83}," damping",[77,108651,268],{"class":87},[77,108653,108654],{"class":271},"\"0.1\"",[77,108656,103579],{"class":87},[24,108658,108659],{},"含义：",[139,108661,108662,108668,108674],{},[54,108663,108664,108667],{},[74,108665,108666],{},"type=\"hinge\"","：只能绕一个轴旋转。",[54,108669,108670,108673],{},[74,108671,108672],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[54,108675,108676,108679],{},[74,108677,108678],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[19,108681,108683],{"id":108682},"motor-actuator","motor actuator",[67,108685,108687],{"className":55525,"code":108686,"language":55527,"meta":72,"style":72},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[74,108688,108689],{"__ignoreMap":72},[77,108690,108691,108693,108695,108697,108699,108701,108703,108705,108707,108709,108711,108713,108715,108717,108719,108721,108723,108725],{"class":79,"line":80},[77,108692,260],{"class":87},[77,108694,108507],{"class":158},[77,108696,2495],{"class":83},[77,108698,268],{"class":87},[77,108700,108514],{"class":271},[77,108702,108517],{"class":83},[77,108704,268],{"class":87},[77,108706,108452],{"class":271},[77,108708,108524],{"class":83},[77,108710,268],{"class":87},[77,108712,6153],{"class":271},[77,108714,108531],{"class":83},[77,108716,268],{"class":87},[77,108718,108536],{"class":271},[77,108720,108539],{"class":83},[77,108722,268],{"class":87},[77,108724,108544],{"class":271},[77,108726,103579],{"class":87},[24,108728,108659],{},[139,108730,108731,108740,108746,108752],{},[54,108732,108733,108736,108737,108739],{},[74,108734,108735],{},"joint=\"hinge\"","：这个电机作用在名为 ",[74,108738,108273],{}," 的关节上。",[54,108741,108742,108745],{},[74,108743,108744],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[54,108747,108748,108751],{},[74,108749,108750],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[54,108753,108754,108757],{},[74,108755,108756],{},"ctrllimited=\"true\"","：启用控制范围限制。",[24,108759,108760],{},"简单理解：",[67,108762,108765],{"className":108763,"code":108764,"language":7662,"meta":72},[7660],"实际施加效果 ≈ data.ctrl[0] * gear\n",[74,108766,108764],{"__ignoreMap":72},[24,108768,108769],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108771,103688],{"id":103687},[67,108773,108775],{"className":32846,"code":108774,"language":32848,"meta":72,"style":72},"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",[74,108776,108777,108784,108788,108794,108804,108808,108812,108820,108825,108830,108834,108838,108843,108848,108852,108857,108862,108867,108872,108876,108880,108884,108889,108894,108899,108903,108907,108911,108915,108927,108939,108947,108951,108961,108971,108981,108985,108998,109011,109015,109032,109046,109081,109085,109089,109100,109115,109130,109142,109146,109150,109162],{"__ignoreMap":72},[77,108778,108779,108781],{"class":79,"line":80},[77,108780,32860],{"class":2123},[77,108782,108783],{"class":87}," math\n",[77,108785,108786],{"class":79,"line":91},[77,108787,4875],{"emptyLinePlaceholder":2549},[77,108789,108790,108792],{"class":79,"line":107},[77,108791,32860],{"class":2123},[77,108793,103736],{"class":87},[77,108795,108796,108798,108800,108802],{"class":79,"line":191},[77,108797,32860],{"class":2123},[77,108799,33847],{"class":87},[77,108801,33850],{"class":2123},[77,108803,33853],{"class":87},[77,108805,108806],{"class":79,"line":1543},[77,108807,4875],{"emptyLinePlaceholder":2549},[77,108809,108810],{"class":79,"line":1549},[77,108811,4875],{"emptyLinePlaceholder":2549},[77,108813,108814,108816,108818],{"class":79,"line":1566},[77,108815,103749],{"class":94},[77,108817,16036],{"class":2123},[77,108819,103754],{"class":271},[77,108821,108822],{"class":79,"line":1572},[77,108823,108824],{"class":271},"\u003Cmujoco model=\"one_link_motor\">\n",[77,108826,108827],{"class":79,"line":1589},[77,108828,108829],{"class":271},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[77,108831,108832],{"class":79,"line":1595},[77,108833,4875],{"emptyLinePlaceholder":2549},[77,108835,108836],{"class":79,"line":4088},[77,108837,103773],{"class":271},[77,108839,108840],{"class":79,"line":4093},[77,108841,108842],{"class":271},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[77,108844,108845],{"class":79,"line":4099},[77,108846,108847],{"class":271},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[77,108849,108850],{"class":79,"line":4104},[77,108851,4875],{"emptyLinePlaceholder":2549},[77,108853,108854],{"class":79,"line":4118},[77,108855,108856],{"class":271},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[77,108858,108859],{"class":79,"line":4123},[77,108860,108861],{"class":271},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[77,108863,108864],{"class":79,"line":4129},[77,108865,108866],{"class":271},"        \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",[77,108868,108869],{"class":79,"line":4150},[77,108870,108871],{"class":271},"      \u003C\u002Fbody>\n",[77,108873,108874],{"class":79,"line":4155},[77,108875,103802],{"class":271},[77,108877,108878],{"class":79,"line":4169},[77,108879,103807],{"class":271},[77,108881,108882],{"class":79,"line":4174},[77,108883,4875],{"emptyLinePlaceholder":2549},[77,108885,108886],{"class":79,"line":4203},[77,108887,108888],{"class":271},"  \u003Cactuator>\n",[77,108890,108891],{"class":79,"line":4208},[77,108892,108893],{"class":271},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[77,108895,108896],{"class":79,"line":4225},[77,108897,108898],{"class":271},"  \u003C\u002Factuator>\n",[77,108900,108901],{"class":79,"line":4230},[77,108902,103812],{"class":271},[77,108904,108905],{"class":79,"line":4235},[77,108906,98134],{"class":271},[77,108908,108909],{"class":79,"line":4240},[77,108910,4875],{"emptyLinePlaceholder":2549},[77,108912,108913],{"class":79,"line":4254},[77,108914,4875],{"emptyLinePlaceholder":2549},[77,108916,108917,108919,108921,108923,108925],{"class":79,"line":4259},[77,108918,34414],{"class":2123},[77,108920,4448],{"class":83},[77,108922,103833],{"class":87},[77,108924,98122],{"class":94},[77,108926,6214],{"class":87},[77,108928,108929,108931,108933,108935,108937],{"class":79,"line":5052},[77,108930,103842],{"class":87},[77,108932,268],{"class":2123},[77,108934,103847],{"class":87},[77,108936,103749],{"class":94},[77,108938,2628],{"class":87},[77,108940,108941,108943,108945],{"class":79,"line":5066},[77,108942,103856],{"class":87},[77,108944,268],{"class":2123},[77,108946,103861],{"class":87},[77,108948,108949],{"class":79,"line":5074},[77,108950,4875],{"emptyLinePlaceholder":2549},[77,108952,108953,108955,108957,108959],{"class":79,"line":5079},[77,108954,33766],{"class":94},[77,108956,2622],{"class":87},[77,108958,103874],{"class":271},[77,108960,103877],{"class":87},[77,108962,108963,108965,108967,108969],{"class":79,"line":5085},[77,108964,33766],{"class":94},[77,108966,2622],{"class":87},[77,108968,103886],{"class":271},[77,108970,103889],{"class":87},[77,108972,108973,108975,108977,108979],{"class":79,"line":5091},[77,108974,33766],{"class":94},[77,108976,2622],{"class":87},[77,108978,103898],{"class":271},[77,108980,103901],{"class":87},[77,108982,108983],{"class":79,"line":5096},[77,108984,4875],{"emptyLinePlaceholder":2549},[77,108986,108987,108989,108992,108994,108996],{"class":79,"line":10422},[77,108988,5576],{"class":2123},[77,108990,108991],{"class":87}," model.nu ",[77,108993,23418],{"class":2123},[77,108995,27586],{"class":94},[77,108997,6214],{"class":87},[77,108999,109000,109002,109004,109006,109009],{"class":79,"line":10446},[77,109001,105865],{"class":2123},[77,109003,105868],{"class":94},[77,109005,2622],{"class":87},[77,109007,109008],{"class":271},"\"expected exactly one actuator\"",[77,109010,2628],{"class":87},[77,109012,109013],{"class":79,"line":10451},[77,109014,4875],{"emptyLinePlaceholder":2549},[77,109016,109017,109019,109021,109023,109025,109027,109030],{"class":79,"line":10457},[77,109018,5676],{"class":2123},[77,109020,34083],{"class":87},[77,109022,28511],{"class":2123},[77,109024,34910],{"class":94},[77,109026,2622],{"class":87},[77,109028,109029],{"class":94},"2000",[77,109031,33254],{"class":87},[77,109033,109034,109037,109039,109041,109043],{"class":79,"line":10484},[77,109035,109036],{"class":87},"        t ",[77,109038,268],{"class":2123},[77,109040,34083],{"class":87},[77,109042,3068],{"class":2123},[77,109044,109045],{"class":87}," model.opt.timestep\n",[77,109047,109048,109051,109053,109055,109057,109060,109062,109065,109067,109069,109072,109074,109076,109078],{"class":79,"line":10489},[77,109049,109050],{"class":87},"        data.ctrl[",[77,109052,1939],{"class":94},[77,109054,6918],{"class":87},[77,109056,268],{"class":2123},[77,109058,109059],{"class":94}," 1.5",[77,109061,8993],{"class":2123},[77,109063,109064],{"class":87}," math.sin(",[77,109066,107693],{"class":94},[77,109068,8993],{"class":2123},[77,109070,109071],{"class":87}," math.pi ",[77,109073,3068],{"class":2123},[77,109075,64312],{"class":94},[77,109077,8993],{"class":2123},[77,109079,109080],{"class":87}," t)\n",[77,109082,109083],{"class":79,"line":10495},[77,109084,103951],{"class":87},[77,109086,109087],{"class":79,"line":10507},[77,109088,4875],{"emptyLinePlaceholder":2549},[77,109090,109091,109093,109095,109098],{"class":79,"line":10519},[77,109092,33766],{"class":94},[77,109094,2622],{"class":87},[77,109096,109097],{"class":271},"\"time:\"",[77,109099,103913],{"class":87},[77,109101,109102,109104,109106,109109,109111,109113],{"class":79,"line":10531},[77,109103,33766],{"class":94},[77,109105,2622],{"class":87},[77,109107,109108],{"class":271},"\"joint qpos:\"",[77,109110,107363],{"class":87},[77,109112,2907],{"class":94},[77,109114,32965],{"class":87},[77,109116,109117,109119,109121,109124,109126,109128],{"class":79,"line":12189},[77,109118,33766],{"class":94},[77,109120,2622],{"class":87},[77,109122,109123],{"class":271},"\"joint qvel:\"",[77,109125,107379],{"class":87},[77,109127,2907],{"class":94},[77,109129,32965],{"class":87},[77,109131,109132,109134,109136,109139],{"class":79,"line":12214},[77,109133,33766],{"class":94},[77,109135,2622],{"class":87},[77,109137,109138],{"class":271},"\"last ctrl:\"",[77,109140,109141],{"class":87},", data.ctrl.copy())\n",[77,109143,109144],{"class":79,"line":12237},[77,109145,4875],{"emptyLinePlaceholder":2549},[77,109147,109148],{"class":79,"line":12261},[77,109149,4875],{"emptyLinePlaceholder":2549},[77,109151,109152,109154,109156,109158,109160],{"class":79,"line":12266},[77,109153,4008],{"class":2123},[77,109155,33687],{"class":94},[77,109157,103994],{"class":2123},[77,109159,103997],{"class":271},[77,109161,6214],{"class":87},[77,109163,109164],{"class":79,"line":12271},[77,109165,104004],{"class":87},[24,109167,106003],{},[67,109169,109171],{"className":26289,"code":109170,"language":26291,"meta":72,"style":72},"touch ch4_joint_motor.py\n",[74,109172,109173],{"__ignoreMap":72},[77,109174,109175,109177],{"class":79,"line":80},[77,109176,103718],{"class":83},[77,109178,109179],{"class":271}," ch4_joint_motor.py\n",[24,109181,104735],{},[67,109183,109185],{"className":26289,"code":109184,"language":26291,"meta":72,"style":72},"python ch4_joint_motor.py\n",[74,109186,109187],{"__ignoreMap":72},[77,109188,109189,109191],{"class":79,"line":80},[77,109190,32848],{"class":83},[77,109192,109179],{"class":271},[19,109194,104007],{"id":104007},[24,109196,109197],{},"检查 actuator 数量：",[67,109199,109201],{"className":32846,"code":109200,"language":32848,"meta":72,"style":72},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[74,109202,109203,109215],{"__ignoreMap":72},[77,109204,109205,109207,109209,109211,109213],{"class":79,"line":80},[77,109206,4008],{"class":2123},[77,109208,108991],{"class":87},[77,109210,23418],{"class":2123},[77,109212,27586],{"class":94},[77,109214,6214],{"class":87},[77,109216,109217,109219,109221,109223,109225],{"class":79,"line":91},[77,109218,106328],{"class":2123},[77,109220,105868],{"class":94},[77,109222,2622],{"class":87},[77,109224,109008],{"class":271},[77,109226,2628],{"class":87},[24,109228,109229,109231,109232,109234],{},[74,109230,104592],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[74,109233,103511],{}," 长度应该是 1。",[24,109236,109237],{},"产生正弦控制信号：",[67,109239,109241],{"className":32846,"code":109240,"language":32848,"meta":72,"style":72},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[74,109242,109243],{"__ignoreMap":72},[77,109244,109245,109247,109249,109251,109253,109255,109257,109259,109261,109263,109265,109267,109269,109271],{"class":79,"line":80},[77,109246,108304],{"class":87},[77,109248,1939],{"class":94},[77,109250,6918],{"class":87},[77,109252,268],{"class":2123},[77,109254,109059],{"class":94},[77,109256,8993],{"class":2123},[77,109258,109064],{"class":87},[77,109260,107693],{"class":94},[77,109262,8993],{"class":2123},[77,109264,109071],{"class":87},[77,109266,3068],{"class":2123},[77,109268,64312],{"class":94},[77,109270,8993],{"class":2123},[77,109272,109080],{"class":87},[24,109274,109275],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[24,109277,104108],{},[67,109279,109280],{"className":32846,"code":106938,"language":32848,"meta":72,"style":72},[74,109281,109282],{"__ignoreMap":72},[77,109283,109284],{"class":79,"line":80},[77,109285,106938],{"class":87},[24,109287,109288],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[19,109290,104143],{"id":104143},[67,109292,109294],{"className":32846,"code":109293,"language":32848,"meta":72,"style":72},"import math\n",[74,109295,109296],{"__ignoreMap":72},[77,109297,109298,109300],{"class":79,"line":80},[77,109299,32860],{"class":2123},[77,109301,108783],{"class":87},[24,109303,109304,109305,513,109308,109311],{},"导入 Python 标准库里的数学模块。后面要用 ",[74,109306,109307],{},"math.sin",[74,109309,109310],{},"math.pi"," 生成周期变化的控制信号。",[67,109313,109314],{"className":32846,"code":106119,"language":32848,"meta":72,"style":72},[74,109315,109316,109322],{"__ignoreMap":72},[77,109317,109318,109320],{"class":79,"line":80},[77,109319,32860],{"class":2123},[77,109321,103736],{"class":87},[77,109323,109324,109326,109328,109330],{"class":79,"line":91},[77,109325,32860],{"class":2123},[77,109327,33847],{"class":87},[77,109329,33850],{"class":2123},[77,109331,33853],{"class":87},[24,109333,109334],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[67,109336,109337],{"className":55525,"code":108620,"language":55527,"meta":72,"style":72},[74,109338,109339],{"__ignoreMap":72},[77,109340,109341,109343,109345,109347,109349,109351,109353,109355,109357,109359,109361,109363,109365,109367,109369],{"class":79,"line":80},[77,109342,260],{"class":87},[77,109344,105389],{"class":158},[77,109346,2495],{"class":83},[77,109348,268],{"class":87},[77,109350,108452],{"class":271},[77,109352,2487],{"class":83},[77,109354,268],{"class":87},[77,109356,108452],{"class":271},[77,109358,108461],{"class":83},[77,109360,268],{"class":87},[77,109362,108466],{"class":271},[77,109364,108649],{"class":83},[77,109366,268],{"class":87},[77,109368,108654],{"class":271},[77,109370,103579],{"class":87},[24,109372,109373,109374,109376,109377,109379,109380,109382],{},"这行定义关节。",[74,109375,108273],{}," 表示旋转关节。",[74,109378,108672],{}," 表示绕 y 轴旋转。",[74,109381,108678],{}," 表示有一点阻尼，运动不会完全无损耗。",[67,109384,109386],{"className":55525,"code":109385,"language":55527,"meta":72,"style":72},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[74,109387,109388],{"__ignoreMap":72},[77,109389,109390,109392,109394,109396,109398,109401,109403,109405,109408,109411,109413,109416,109418,109420,109422,109424,109426,109429],{"class":79,"line":80},[77,109391,260],{"class":87},[77,109393,103555],{"class":158},[77,109395,2495],{"class":83},[77,109397,268],{"class":87},[77,109399,109400],{"class":271},"\"link_geom\"",[77,109402,2487],{"class":83},[77,109404,268],{"class":87},[77,109406,109407],{"class":271},"\"capsule\"",[77,109409,109410],{"class":83}," fromto",[77,109412,268],{"class":87},[77,109414,109415],{"class":271},"\"0 0 0 0 0 0.5\"",[77,109417,103571],{"class":83},[77,109419,268],{"class":87},[77,109421,106211],{"class":271},[77,109423,104436],{"class":83},[77,109425,268],{"class":87},[77,109427,109428],{"class":271},"\"0.5\"",[77,109430,103579],{"class":87},[24,109432,109433,109434,109436,109437,109439,109440,109443,109444,30853,109447,109449],{},"这行定义摆杆的形状。",[74,109435,105598],{}," 是胶囊体，适合表示杆子。",[74,109438,105609],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[74,109441,109442],{},"(0,0,0)"," 延伸到 ",[74,109445,109446],{},"(0,0,0.5)",[74,109448,105603],{}," 是半径。",[67,109451,109452],{"className":55525,"code":108686,"language":55527,"meta":72,"style":72},[74,109453,109454],{"__ignoreMap":72},[77,109455,109456,109458,109460,109462,109464,109466,109468,109470,109472,109474,109476,109478,109480,109482,109484,109486,109488,109490],{"class":79,"line":80},[77,109457,260],{"class":87},[77,109459,108507],{"class":158},[77,109461,2495],{"class":83},[77,109463,268],{"class":87},[77,109465,108514],{"class":271},[77,109467,108517],{"class":83},[77,109469,268],{"class":87},[77,109471,108452],{"class":271},[77,109473,108524],{"class":83},[77,109475,268],{"class":87},[77,109477,6153],{"class":271},[77,109479,108531],{"class":83},[77,109481,268],{"class":87},[77,109483,108536],{"class":271},[77,109485,108539],{"class":83},[77,109487,268],{"class":87},[77,109489,108544],{"class":271},[77,109491,103579],{"class":87},[24,109493,109494,109495,109497,109498,109501,109502,109504],{},"这行定义电机。它作用在 ",[74,109496,108273],{}," 关节上。",[74,109499,109500],{},"gear"," 可以理解成放大倍数。",[74,109503,108288],{}," 限制控制输入范围。",[67,109506,109507],{"className":32846,"code":109200,"language":32848,"meta":72,"style":72},[74,109508,109509,109521],{"__ignoreMap":72},[77,109510,109511,109513,109515,109517,109519],{"class":79,"line":80},[77,109512,4008],{"class":2123},[77,109514,108991],{"class":87},[77,109516,23418],{"class":2123},[77,109518,27586],{"class":94},[77,109520,6214],{"class":87},[77,109522,109523,109525,109527,109529,109531],{"class":79,"line":91},[77,109524,106328],{"class":2123},[77,109526,105868],{"class":94},[77,109528,2622],{"class":87},[77,109530,109008],{"class":271},[77,109532,2628],{"class":87},[24,109534,109535,109537],{},[74,109536,104592],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[67,109539,109541],{"className":32846,"code":109540,"language":32848,"meta":72,"style":72},"for step in range(2000):\n",[74,109542,109543],{"__ignoreMap":72},[77,109544,109545,109547,109549,109551,109553,109555,109557],{"class":79,"line":80},[77,109546,5500],{"class":2123},[77,109548,34083],{"class":87},[77,109550,28511],{"class":2123},[77,109552,34910],{"class":94},[77,109554,2622],{"class":87},[77,109556,109029],{"class":94},[77,109558,33254],{"class":87},[24,109560,109561,109562,109564,109565,109568],{},"循环 2000 步。这里没有用 ",[74,109563,3604],{},"，而是用 ",[74,109566,109567],{},"step","，因为后面要用当前步数计算时间。",[67,109570,109572],{"className":32846,"code":109571,"language":32848,"meta":72,"style":72},"t = step * model.opt.timestep\n",[74,109573,109574],{"__ignoreMap":72},[77,109575,109576,109579,109581,109583,109585],{"class":79,"line":80},[77,109577,109578],{"class":87},"t ",[77,109580,268],{"class":2123},[77,109582,34083],{"class":87},[77,109584,3068],{"class":2123},[77,109586,109045],{"class":87},[24,109588,109589],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[67,109591,109592],{"className":32846,"code":109240,"language":32848,"meta":72,"style":72},[74,109593,109594],{"__ignoreMap":72},[77,109595,109596,109598,109600,109602,109604,109606,109608,109610,109612,109614,109616,109618,109620,109622],{"class":79,"line":80},[77,109597,108304],{"class":87},[77,109599,1939],{"class":94},[77,109601,6918],{"class":87},[77,109603,268],{"class":2123},[77,109605,109059],{"class":94},[77,109607,8993],{"class":2123},[77,109609,109064],{"class":87},[77,109611,107693],{"class":94},[77,109613,8993],{"class":2123},[77,109615,109071],{"class":87},[77,109617,3068],{"class":2123},[77,109619,64312],{"class":94},[77,109621,8993],{"class":2123},[77,109623,109080],{"class":87},[24,109625,109626],{},"这行给电机输入一个正弦波。拆开看：",[139,109628,109629,109635,109641],{},[54,109630,109631,109634],{},[74,109632,109633],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[54,109636,109637,109640],{},[74,109638,109639],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[54,109642,109643,109646],{},[74,109644,109645],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[24,109648,109649],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[67,109651,109653],{"className":32846,"code":109652,"language":32848,"meta":72,"style":72},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[74,109654,109655],{"__ignoreMap":72},[77,109656,109657,109659,109661,109663,109665,109667],{"class":79,"line":80},[77,109658,32883],{"class":94},[77,109660,2622],{"class":87},[77,109662,109108],{"class":271},[77,109664,107363],{"class":87},[77,109666,2907],{"class":94},[77,109668,32965],{"class":87},[24,109670,109671,109672,109674],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[74,109673,103505],{}," 只有一个数。",[14,109676,104750],{"id":104749},[24,109678,109679],{},"输出类似:",[67,109681,109684],{"className":109682,"code":109683,"language":7662,"meta":72},[7660],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[74,109685,109683],{"__ignoreMap":72},[24,109687,109688,109689,109691],{},"这里 ",[74,109690,108559],{}," 是电机输入。",[24,109693,109694,109697,109698,109701],{},[74,109695,109696],{},"joint qpos"," 是关节角度，单位通常是弧度。",[74,109699,109700],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[24,109703,109704],{},"角度单位提示：",[67,109706,109709],{"className":109707,"code":109708,"language":7662,"meta":72},[7660],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[74,109710,109708],{"__ignoreMap":72},[24,109712,109713,109714,109716,109717,109719],{},"如果你看到 ",[74,109715,106463],{}," 是 ",[74,109718,37795],{},"，大约就是 28.6 度。",[14,109721,104782],{"id":104781},[139,109723,109724,109731,109734,109741,109744,109752,109760],{},[54,109725,104845,109726,104848,109728,30853],{},[74,109727,108744],{},[74,109729,109730],{},"gear=\"5\"",[54,109732,109733],{},"重新运行，观察关节运动是否更剧烈。",[54,109735,104845,109736,104848,109738,30853],{},[74,109737,108288],{},[74,109739,109740],{},"-0.2 0.2",[54,109742,109743],{},"重新运行，观察控制能力是否变弱。",[54,109745,109746,109747,109749,109750,30853],{},"去掉 actuator，确认 ",[74,109748,104592],{}," 变成 ",[74,109751,1939],{},[54,109753,104845,109754,104848,109756,109759],{},[74,109755,108678],{},[74,109757,109758],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[54,109761,104845,109762,104848,109764,109767],{},[74,109763,108672],{},[74,109765,109766],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109769,104887],{"id":104886},[19,109771,109773],{"id":109772},"indexerror-index-0-is-out-of-bounds",[74,109774,109775],{},"IndexError: index 0 is out of bounds",[24,109777,109778,109779,109781],{},"原因是 ",[74,109780,108425],{},"，没有 actuator。",[19,109783,109784],{"id":109784},"关节几乎不动",[24,109786,109787],{},"可能原因:",[139,109789,109790,109795,109799,109805],{},[54,109791,109792,109794],{},[74,109793,109500],{}," 太小",[54,109796,109797,109794],{},[74,109798,108288],{},[54,109800,109801,109804],{},[74,109802,109803],{},"damping"," 太大",[54,109806,109807],{},"重力方向导致运动不明显",[19,109809,109810],{"id":109810},"模型编译失败",[24,109812,109813,109814,109816],{},"检查 actuator 引用的 ",[74,109815,108735],{}," 是否存在，joint 名称是否拼写一致。",[19,109818,109820,109822],{"id":109819},"datactrl0-写了但没有效果",[74,109821,108559],{}," 写了但没有效果",[24,109824,105009],{},[139,109826,109827,109832,109835,109840,109845],{},[54,109828,109829,109831],{},[74,109830,104592],{}," 是否大于 0。",[54,109833,109834],{},"motor 是否引用了正确 joint。",[54,109836,109837,109839],{},[74,109838,109500],{}," 是否太小。",[54,109841,109842,109844],{},[74,109843,108288],{}," 是否把输入限制得太小。",[54,109846,109847],{},"body 是否真的有可动 joint。",[19,109849,109850],{"id":109850},"控制输入超过范围会怎样",[24,109852,109853],{},"如果设置了：",[67,109855,109857],{"className":55525,"code":109856,"language":55527,"meta":72,"style":72},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[74,109858,109859],{"__ignoreMap":72},[77,109860,109861],{"class":79,"line":80},[77,109862,109856],{"class":87},[24,109864,109865],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[67,109867,109869],{"className":32846,"code":109868,"language":32848,"meta":72,"style":72},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[74,109870,109871,109891],{"__ignoreMap":72},[77,109872,109873,109876,109878,109881,109883,109885,109887,109889],{"class":79,"line":80},[77,109874,109875],{"class":87},"action ",[77,109877,268],{"class":2123},[77,109879,109880],{"class":87}," np.clip(action, ",[77,109882,3145],{"class":2123},[77,109884,107693],{"class":94},[77,109886,680],{"class":87},[77,109888,107693],{"class":94},[77,109890,2628],{"class":87},[77,109892,109893,109895,109897,109899,109901],{"class":79,"line":91},[77,109894,108304],{"class":87},[77,109896,1939],{"class":94},[77,109898,6918],{"class":87},[77,109900,268],{"class":2123},[77,109902,109903],{"class":87}," action\n",[14,109905,105041],{"id":105040},[24,109907,109908],{},"这一章建立了控制任务的基本形式：",[67,109910,109913],{"className":109911,"code":109912,"language":7662,"meta":72},[7660],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[74,109914,109912],{"__ignoreMap":72},[24,109916,109917],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2520,109919,109920],{},"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":72,"searchDepth":91,"depth":91,"links":109922},[109923,109924,109925,109930,109934,109935,109936,109944],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":109926},[109927,109928,109929],{"id":108566,"depth":107,"text":108567},{"id":108616,"depth":107,"text":108617},{"id":108682,"depth":107,"text":108683},{"id":103687,"depth":91,"text":103688,"children":109931},[109932,109933],{"id":104007,"depth":107,"text":104007},{"id":104143,"depth":107,"text":104143},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":109937},[109938,109939,109940,109941,109943],{"id":109772,"depth":107,"text":109775},{"id":109784,"depth":107,"text":109784},{"id":109810,"depth":107,"text":109810},{"id":109819,"depth":107,"text":109942},"data.ctrl[0] 写了但没有效果",{"id":109850,"depth":107,"text":109850},{"id":105040,"depth":91,"text":105041},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108254,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109951,"title":109952,"body":109953,"description":72,"extension":2547,"meta":111862,"navigation":2549,"path":111863,"seo":111864,"stem":111865,"__hash__":111866},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109954,"toc":111838},[109955,109958,109960,109963,109971,109974,109991,109994,110019,110022,110068,110070,110072,110127,110129,110148,110150,110193,110196,110213,110216,110232,110242,110249,110251,110254,110257,110291,110294,110342,110346,110349,110363,110372,110376,110379,110404,110407,110411,110424,110427,110433,110436,110451,110453,110456,110716,110718,110730,110733,111045,111047,111059,111061,111064,111079,111084,111087,111109,111112,111115,111149,111152,111156,111167,111170,111187,111190,111204,111211,111231,111238,111252,111255,111267,111282,111302,111305,111327,111330,111334,111349,111360,111375,111378,111408,111424,111453,111461,111485,111488,111506,111516,111528,111535,111544,111550,111559,111562,111564,111573,111576,111591,111593,111596,111607,111610,111621,111624,111642,111644,111661,111664,111692,111694,111698,111701,111731,111737,111740,111744,111752,111755,111757,111778,111781,111784,111800,111803,111819,111821,111824,111835],[10,109956,109952],{"id":109957},"_5viewer-可视化与-renderer-离屏渲染",[14,109959,103083],{"id":103082},[24,109961,109962],{},"本章掌握两类可视化方式:",[139,109964,109965,109968],{},[54,109966,109967],{},"交互式 viewer: 适合人工观察仿真",[54,109969,109970],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[24,109972,109973],{},"使用官方接口:",[67,109975,109977],{"className":32846,"code":109976,"language":32848,"meta":72,"style":72},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[74,109978,109979,109986],{"__ignoreMap":72},[77,109980,109981,109983],{"class":79,"line":80},[77,109982,32860],{"class":2123},[77,109984,109985],{"class":87}," mujoco.viewer\n",[77,109987,109988],{"class":79,"line":91},[77,109989,109990],{"class":87},"mujoco.viewer.launch_passive(model, data)\n",[24,109992,109993],{},"以及:",[67,109995,109997],{"className":32846,"code":109996,"language":32848,"meta":72,"style":72},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[74,109998,109999,110009],{"__ignoreMap":72},[77,110000,110001,110004,110006],{"class":79,"line":80},[77,110002,110003],{"class":87},"renderer ",[77,110005,268],{"class":2123},[77,110007,110008],{"class":87}," mujoco.Renderer(model)\n",[77,110010,110011,110014,110016],{"class":79,"line":91},[77,110012,110013],{"class":87},"image ",[77,110015,268],{"class":2123},[77,110017,110018],{"class":87}," renderer.render()\n",[24,110020,110021],{},"新手建议先理解二者区别：",[2755,110023,110024,110040],{},[2758,110025,110026],{},[2761,110027,110028,110031,110034,110037],{},[2764,110029,110030],{"align":101},"工具",[2764,110032,110033],{"align":101},"用途",[2764,110035,110036],{"align":101},"是否打开窗口",[2764,110038,110039],{"align":101},"常见场景",[2801,110041,110042,110055],{},[2761,110043,110044,110047,110050,110052],{},[2806,110045,110046],{"align":101},"Viewer",[2806,110048,110049],{"align":101},"人眼实时观察仿真",[2806,110051,107098],{"align":101},[2806,110053,110054],{"align":101},"调试模型、看控制效果",[2761,110056,110057,110060,110063,110065],{},[2806,110058,110059],{"align":101},"Renderer",[2806,110061,110062],{"align":101},"生成图像数组",[2806,110064,107111],{"align":101},[2806,110066,110067],{"align":101},"保存图片、训练视觉策略、服务器批量采集",[14,110069,103206],{"id":103205},[24,110071,103209],{},[67,110073,110075],{"className":26289,"code":110074,"language":26291,"meta":72,"style":72},"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",[74,110076,110077,110089,110099,110107,110115],{"__ignoreMap":72},[77,110078,110079,110081,110083,110085,110087],{"class":79,"line":80},[77,110080,27044],{"class":83},[77,110082,28783],{"class":271},[77,110084,26301],{"class":271},[77,110086,28868],{"class":94},[77,110088,27146],{"class":94},[77,110090,110091,110093,110095,110097],{"class":79,"line":91},[77,110092,103244],{"class":271},[77,110094,103247],{"class":271},[77,110096,103250],{"class":271},[77,110098,27146],{"class":94},[77,110100,110101,110103,110105],{"class":79,"line":107},[77,110102,103257],{"class":271},[77,110104,103260],{"class":271},[77,110106,27146],{"class":94},[77,110108,110109,110111,110113],{"class":79,"line":191},[77,110110,103267],{"class":271},[77,110112,103270],{"class":271},[77,110114,27146],{"class":94},[77,110116,110117,110119,110121,110123,110125],{"class":79,"line":1543},[77,110118,103277],{"class":271},[77,110120,103280],{"class":271},[77,110122,103283],{"class":271},[77,110124,103286],{"class":271},[77,110126,104950],{"class":271},[24,110128,105252],{},[67,110130,110132],{"className":26289,"code":110131,"language":26291,"meta":72,"style":72},"pip install \"mujoco>=2.3\" numpy pillow\n",[74,110133,110134],{"__ignoreMap":72},[77,110135,110136,110138,110140,110142,110145],{"class":79,"line":80},[77,110137,26298],{"class":83},[77,110139,26301],{"class":271},[77,110141,103366],{"class":271},[77,110143,110144],{"class":271}," numpy",[77,110146,110147],{"class":271}," pillow\n",[24,110149,105269],{},[67,110151,110153],{"className":26289,"code":110152,"language":26291,"meta":72,"style":72},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[74,110154,110155,110172,110181],{"__ignoreMap":72},[77,110156,110157,110159,110161,110163,110166,110168,110170],{"class":79,"line":80},[77,110158,32798],{"class":83},[77,110160,31644],{"class":271},[77,110162,27583],{"class":94},[77,110164,110165],{"class":271}," mujoco-render",[77,110167,103411],{"class":271},[77,110169,103414],{"class":94},[77,110171,103417],{"class":94},[77,110173,110174,110176,110178],{"class":79,"line":91},[77,110175,32798],{"class":83},[77,110177,103424],{"class":271},[77,110179,110180],{"class":271}," mujoco-render\n",[77,110182,110183,110185,110187,110189,110191],{"class":79,"line":107},[77,110184,26298],{"class":83},[77,110186,26301],{"class":271},[77,110188,103366],{"class":271},[77,110190,110144],{"class":271},[77,110192,110147],{"class":271},[24,110194,110195],{},"离屏渲染后端:",[67,110197,110199],{"className":26289,"code":110198,"language":26291,"meta":72,"style":72},"export MUJOCO_GL=egl\n",[74,110200,110201],{"__ignoreMap":72},[77,110202,110203,110205,110208,110210],{"class":79,"line":80},[77,110204,27510],{"class":2123},[77,110206,110207],{"class":87}," MUJOCO_GL",[77,110209,268],{"class":2123},[77,110211,110212],{"class":87},"egl\n",[24,110214,110215],{},"或:",[67,110217,110219],{"className":26289,"code":110218,"language":26291,"meta":72,"style":72},"export MUJOCO_GL=osmesa\n",[74,110220,110221],{"__ignoreMap":72},[77,110222,110223,110225,110227,110229],{"class":79,"line":80},[77,110224,27510],{"class":2123},[77,110226,110207],{"class":87},[77,110228,268],{"class":2123},[77,110230,110231],{"class":87},"osmesa\n",[24,110233,110234,110235,110238,110239,30853],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[74,110236,110237],{},"egl"," 失败，再尝试 ",[74,110240,110241],{},"osmesa",[24,110243,110244,110245,110248],{},"如果你在本机桌面环境运行，通常先不要设置 ",[74,110246,110247],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110250,103480],{"id":103479},[24,110252,110253],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[24,110255,110256],{},"典型 viewer 流程:",[67,110258,110260],{"className":32846,"code":110259,"language":32848,"meta":72,"style":72},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[74,110261,110262,110275,110282,110286],{"__ignoreMap":72},[77,110263,110264,110267,110270,110272],{"class":79,"line":80},[77,110265,110266],{"class":2123},"with",[77,110268,110269],{"class":87}," mujoco.viewer.launch_passive(model, data) ",[77,110271,33850],{"class":2123},[77,110273,110274],{"class":87}," viewer:\n",[77,110276,110277,110279],{"class":79,"line":91},[77,110278,4726],{"class":2123},[77,110280,110281],{"class":87}," viewer.is_running():\n",[77,110283,110284],{"class":79,"line":107},[77,110285,103951],{"class":87},[77,110287,110288],{"class":79,"line":191},[77,110289,110290],{"class":87},"        viewer.sync()\n",[24,110292,110293],{},"典型 renderer 流程:",[67,110295,110297],{"className":32846,"code":110296,"language":32848,"meta":72,"style":72},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[74,110298,110299,110325,110329,110334],{"__ignoreMap":72},[77,110300,110301,110303,110305,110308,110310,110312,110314,110316,110318,110320,110323],{"class":79,"line":80},[77,110302,110003],{"class":87},[77,110304,268],{"class":2123},[77,110306,110307],{"class":87}," mujoco.Renderer(model, ",[77,110309,27449],{"class":7691},[77,110311,268],{"class":2123},[77,110313,44808],{"class":94},[77,110315,680],{"class":87},[77,110317,27445],{"class":7691},[77,110319,268],{"class":2123},[77,110321,110322],{"class":94},"640",[77,110324,2628],{"class":87},[77,110326,110327],{"class":79,"line":91},[77,110328,106938],{"class":87},[77,110330,110331],{"class":79,"line":107},[77,110332,110333],{"class":87},"renderer.update_scene(data)\n",[77,110335,110336,110338,110340],{"class":79,"line":191},[77,110337,110013],{"class":87},[77,110339,268],{"class":2123},[77,110341,110018],{"class":87},[19,110343,110345],{"id":110344},"viewer-的同步逻辑","viewer 的同步逻辑",[24,110347,110348],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[67,110350,110352],{"className":32846,"code":110351,"language":32848,"meta":72,"style":72},"mujoco.mj_step(model, data)\nviewer.sync()\n",[74,110353,110354,110358],{"__ignoreMap":72},[77,110355,110356],{"class":79,"line":80},[77,110357,106938],{"class":87},[77,110359,110360],{"class":79,"line":91},[77,110361,110362],{"class":87},"viewer.sync()\n",[24,110364,110365,110367,110368,110371],{},[74,110366,103650],{}," 负责算物理，",[74,110369,110370],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[19,110373,110375],{"id":110374},"为什么要-sleep","为什么要 sleep",[24,110377,110378],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[67,110380,110382],{"className":32846,"code":110381,"language":32848,"meta":72,"style":72},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[74,110383,110384],{"__ignoreMap":72},[77,110385,110386,110389,110391,110394,110396,110399,110401],{"class":79,"line":80},[77,110387,110388],{"class":87},"sleep_time ",[77,110390,268],{"class":2123},[77,110392,110393],{"class":87}," model.opt.timestep ",[77,110395,3145],{"class":2123},[77,110397,110398],{"class":87}," (time.time() ",[77,110400,3145],{"class":2123},[77,110402,110403],{"class":87}," step_start)\n",[24,110405,110406],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[19,110408,110410],{"id":110409},"renderer-输出是什么","renderer 输出是什么",[67,110412,110414],{"className":32846,"code":110413,"language":32848,"meta":72,"style":72},"image = renderer.render()\n",[74,110415,110416],{"__ignoreMap":72},[77,110417,110418,110420,110422],{"class":79,"line":80},[77,110419,110013],{"class":87},[77,110421,268],{"class":2123},[77,110423,110018],{"class":87},[24,110425,110426],{},"得到的是 NumPy 数组，形状通常是：",[67,110428,110431],{"className":110429,"code":110430,"language":7662,"meta":72},[7660],"(height, width, 3)\n",[74,110432,110430],{"__ignoreMap":72},[24,110434,110435],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[67,110437,110439],{"className":32846,"code":110438,"language":32848,"meta":72,"style":72},"Image.fromarray(image).save(\"render_output.png\")\n",[74,110440,110441],{"__ignoreMap":72},[77,110442,110443,110446,110449],{"class":79,"line":80},[77,110444,110445],{"class":87},"Image.fromarray(image).save(",[77,110447,110448],{"class":271},"\"render_output.png\"",[77,110450,2628],{"class":87},[14,110452,103688],{"id":103687},[24,110454,110455],{},"交互式 Viewer:",[67,110457,110459],{"className":32846,"code":110458,"language":32848,"meta":72,"style":72},"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",[74,110460,110461,110467,110471,110477,110483,110487,110491,110499,110504,110508,110512,110516,110521,110526,110530,110534,110538,110543,110547,110551,110555,110559,110563,110567,110579,110591,110599,110603,110613,110633,110643,110648,110653,110657,110674,110687,110692,110696,110700,110712],{"__ignoreMap":72},[77,110462,110463,110465],{"class":79,"line":80},[77,110464,32860],{"class":2123},[77,110466,34296],{"class":87},[77,110468,110469],{"class":79,"line":91},[77,110470,4875],{"emptyLinePlaceholder":2549},[77,110472,110473,110475],{"class":79,"line":107},[77,110474,32860],{"class":2123},[77,110476,103736],{"class":87},[77,110478,110479,110481],{"class":79,"line":191},[77,110480,32860],{"class":2123},[77,110482,109985],{"class":87},[77,110484,110485],{"class":79,"line":1543},[77,110486,4875],{"emptyLinePlaceholder":2549},[77,110488,110489],{"class":79,"line":1549},[77,110490,4875],{"emptyLinePlaceholder":2549},[77,110492,110493,110495,110497],{"class":79,"line":1566},[77,110494,103749],{"class":94},[77,110496,16036],{"class":2123},[77,110498,103754],{"class":271},[77,110500,110501],{"class":79,"line":1572},[77,110502,110503],{"class":271},"\u003Cmujoco model=\"viewer_demo\">\n",[77,110505,110506],{"class":79,"line":1589},[77,110507,103764],{"class":271},[77,110509,110510],{"class":79,"line":1595},[77,110511,4875],{"emptyLinePlaceholder":2549},[77,110513,110514],{"class":79,"line":4088},[77,110515,103773],{"class":271},[77,110517,110518],{"class":79,"line":4093},[77,110519,110520],{"class":271},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[77,110522,110523],{"class":79,"line":4099},[77,110524,110525],{"class":271},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[77,110527,110528],{"class":79,"line":4104},[77,110529,4875],{"emptyLinePlaceholder":2549},[77,110531,110532],{"class":79,"line":4118},[77,110533,103787],{"class":271},[77,110535,110536],{"class":79,"line":4123},[77,110537,103792],{"class":271},[77,110539,110540],{"class":79,"line":4129},[77,110541,110542],{"class":271},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[77,110544,110545],{"class":79,"line":4150},[77,110546,103802],{"class":271},[77,110548,110549],{"class":79,"line":4155},[77,110550,103807],{"class":271},[77,110552,110553],{"class":79,"line":4169},[77,110554,103812],{"class":271},[77,110556,110557],{"class":79,"line":4174},[77,110558,98134],{"class":271},[77,110560,110561],{"class":79,"line":4203},[77,110562,4875],{"emptyLinePlaceholder":2549},[77,110564,110565],{"class":79,"line":4208},[77,110566,4875],{"emptyLinePlaceholder":2549},[77,110568,110569,110571,110573,110575,110577],{"class":79,"line":4225},[77,110570,34414],{"class":2123},[77,110572,4448],{"class":83},[77,110574,103833],{"class":87},[77,110576,98122],{"class":94},[77,110578,6214],{"class":87},[77,110580,110581,110583,110585,110587,110589],{"class":79,"line":4230},[77,110582,103842],{"class":87},[77,110584,268],{"class":2123},[77,110586,103847],{"class":87},[77,110588,103749],{"class":94},[77,110590,2628],{"class":87},[77,110592,110593,110595,110597],{"class":79,"line":4235},[77,110594,103856],{"class":87},[77,110596,268],{"class":2123},[77,110598,103861],{"class":87},[77,110600,110601],{"class":79,"line":4240},[77,110602,4875],{"emptyLinePlaceholder":2549},[77,110604,110605,110607,110609,110611],{"class":79,"line":4254},[77,110606,36644],{"class":2123},[77,110608,110269],{"class":87},[77,110610,33850],{"class":2123},[77,110612,110274],{"class":87},[77,110614,110615,110618,110621,110623,110626,110628,110631],{"class":79,"line":4259},[77,110616,110617],{"class":2123},"        while",[77,110619,110620],{"class":87}," viewer.is_running() ",[77,110622,32930],{"class":2123},[77,110624,110625],{"class":87}," data.time ",[77,110627,260],{"class":2123},[77,110629,110630],{"class":94}," 5.0",[77,110632,6214],{"class":87},[77,110634,110635,110638,110640],{"class":79,"line":5052},[77,110636,110637],{"class":87},"            step_start ",[77,110639,268],{"class":2123},[77,110641,110642],{"class":87}," time.time()\n",[77,110644,110645],{"class":79,"line":5066},[77,110646,110647],{"class":87},"            mujoco.mj_step(model, data)\n",[77,110649,110650],{"class":79,"line":5074},[77,110651,110652],{"class":87},"            viewer.sync()\n",[77,110654,110655],{"class":79,"line":5079},[77,110656,4875],{"emptyLinePlaceholder":2549},[77,110658,110659,110662,110664,110666,110668,110670,110672],{"class":79,"line":5085},[77,110660,110661],{"class":87},"            sleep_time ",[77,110663,268],{"class":2123},[77,110665,110393],{"class":87},[77,110667,3145],{"class":2123},[77,110669,110398],{"class":87},[77,110671,3145],{"class":2123},[77,110673,110403],{"class":87},[77,110675,110676,110678,110681,110683,110685],{"class":79,"line":5091},[77,110677,7117],{"class":2123},[77,110679,110680],{"class":87}," sleep_time ",[77,110682,3572],{"class":2123},[77,110684,6568],{"class":94},[77,110686,6214],{"class":87},[77,110688,110689],{"class":79,"line":5096},[77,110690,110691],{"class":87},"                time.sleep(sleep_time)\n",[77,110693,110694],{"class":79,"line":10422},[77,110695,4875],{"emptyLinePlaceholder":2549},[77,110697,110698],{"class":79,"line":10446},[77,110699,4875],{"emptyLinePlaceholder":2549},[77,110701,110702,110704,110706,110708,110710],{"class":79,"line":10451},[77,110703,4008],{"class":2123},[77,110705,33687],{"class":94},[77,110707,103994],{"class":2123},[77,110709,103997],{"class":271},[77,110711,6214],{"class":87},[77,110713,110714],{"class":79,"line":10457},[77,110715,104004],{"class":87},[24,110717,106003],{},[67,110719,110721],{"className":26289,"code":110720,"language":26291,"meta":72,"style":72},"touch ch5_viewer.py\n",[74,110722,110723],{"__ignoreMap":72},[77,110724,110725,110727],{"class":79,"line":80},[77,110726,103718],{"class":83},[77,110728,110729],{"class":271}," ch5_viewer.py\n",[24,110731,110732],{},"离屏 Renderer 保存图片:",[67,110734,110736],{"className":32846,"code":110735,"language":32848,"meta":72,"style":72},"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",[74,110737,110738,110750,110754,110760,110770,110774,110778,110786,110791,110795,110799,110803,110807,110812,110816,110820,110824,110828,110832,110836,110840,110844,110848,110852,110856,110868,110880,110888,110913,110917,110933,110937,110941,110956,110965,110969,110983,110988,110993,110997,111009,111021,111025,111029,111041],{"__ignoreMap":72},[77,110739,110740,110742,110745,110747],{"class":79,"line":80},[77,110741,33205],{"class":2123},[77,110743,110744],{"class":87}," pathlib ",[77,110746,32860],{"class":2123},[77,110748,110749],{"class":87}," Path\n",[77,110751,110752],{"class":79,"line":91},[77,110753,4875],{"emptyLinePlaceholder":2549},[77,110755,110756,110758],{"class":79,"line":107},[77,110757,32860],{"class":2123},[77,110759,103736],{"class":87},[77,110761,110762,110764,110766,110768],{"class":79,"line":191},[77,110763,33205],{"class":2123},[77,110765,49729],{"class":94},[77,110767,49732],{"class":2123},[77,110769,49735],{"class":87},[77,110771,110772],{"class":79,"line":1543},[77,110773,4875],{"emptyLinePlaceholder":2549},[77,110775,110776],{"class":79,"line":1549},[77,110777,4875],{"emptyLinePlaceholder":2549},[77,110779,110780,110782,110784],{"class":79,"line":1566},[77,110781,103749],{"class":94},[77,110783,16036],{"class":2123},[77,110785,103754],{"class":271},[77,110787,110788],{"class":79,"line":1572},[77,110789,110790],{"class":271},"\u003Cmujoco model=\"renderer_demo\">\n",[77,110792,110793],{"class":79,"line":1589},[77,110794,103764],{"class":271},[77,110796,110797],{"class":79,"line":1595},[77,110798,4875],{"emptyLinePlaceholder":2549},[77,110800,110801],{"class":79,"line":4088},[77,110802,103773],{"class":271},[77,110804,110805],{"class":79,"line":4093},[77,110806,110520],{"class":271},[77,110808,110809],{"class":79,"line":4099},[77,110810,110811],{"class":271},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[77,110813,110814],{"class":79,"line":4104},[77,110815,110525],{"class":271},[77,110817,110818],{"class":79,"line":4118},[77,110819,4875],{"emptyLinePlaceholder":2549},[77,110821,110822],{"class":79,"line":4123},[77,110823,103787],{"class":271},[77,110825,110826],{"class":79,"line":4129},[77,110827,103792],{"class":271},[77,110829,110830],{"class":79,"line":4150},[77,110831,110542],{"class":271},[77,110833,110834],{"class":79,"line":4155},[77,110835,103802],{"class":271},[77,110837,110838],{"class":79,"line":4169},[77,110839,103807],{"class":271},[77,110841,110842],{"class":79,"line":4174},[77,110843,103812],{"class":271},[77,110845,110846],{"class":79,"line":4203},[77,110847,98134],{"class":271},[77,110849,110850],{"class":79,"line":4208},[77,110851,4875],{"emptyLinePlaceholder":2549},[77,110853,110854],{"class":79,"line":4225},[77,110855,4875],{"emptyLinePlaceholder":2549},[77,110857,110858,110860,110862,110864,110866],{"class":79,"line":4230},[77,110859,34414],{"class":2123},[77,110861,4448],{"class":83},[77,110863,103833],{"class":87},[77,110865,98122],{"class":94},[77,110867,6214],{"class":87},[77,110869,110870,110872,110874,110876,110878],{"class":79,"line":4235},[77,110871,103842],{"class":87},[77,110873,268],{"class":2123},[77,110875,103847],{"class":87},[77,110877,103749],{"class":94},[77,110879,2628],{"class":87},[77,110881,110882,110884,110886],{"class":79,"line":4240},[77,110883,103856],{"class":87},[77,110885,268],{"class":2123},[77,110887,103861],{"class":87},[77,110889,110890,110893,110895,110897,110899,110901,110903,110905,110907,110909,110911],{"class":79,"line":4254},[77,110891,110892],{"class":87},"    renderer ",[77,110894,268],{"class":2123},[77,110896,110307],{"class":87},[77,110898,27449],{"class":7691},[77,110900,268],{"class":2123},[77,110902,44808],{"class":94},[77,110904,680],{"class":87},[77,110906,27445],{"class":7691},[77,110908,268],{"class":2123},[77,110910,110322],{"class":94},[77,110912,2628],{"class":87},[77,110914,110915],{"class":79,"line":4259},[77,110916,4875],{"emptyLinePlaceholder":2549},[77,110918,110919,110921,110923,110925,110927,110929,110931],{"class":79,"line":5052},[77,110920,5676],{"class":2123},[77,110922,103936],{"class":87},[77,110924,28511],{"class":2123},[77,110926,34910],{"class":94},[77,110928,2622],{"class":87},[77,110930,2925],{"class":94},[77,110932,33254],{"class":87},[77,110934,110935],{"class":79,"line":5066},[77,110936,103951],{"class":87},[77,110938,110939],{"class":79,"line":5074},[77,110940,4875],{"emptyLinePlaceholder":2549},[77,110942,110943,110946,110949,110951,110954],{"class":79,"line":5079},[77,110944,110945],{"class":87},"    renderer.update_scene(data, ",[77,110947,110948],{"class":7691},"camera",[77,110950,268],{"class":2123},[77,110952,110953],{"class":271},"\"fixed_camera\"",[77,110955,2628],{"class":87},[77,110957,110958,110961,110963],{"class":79,"line":5085},[77,110959,110960],{"class":87},"    image ",[77,110962,268],{"class":2123},[77,110964,110018],{"class":87},[77,110966,110967],{"class":79,"line":5091},[77,110968,4875],{"emptyLinePlaceholder":2549},[77,110970,110971,110974,110976,110979,110981],{"class":79,"line":5096},[77,110972,110973],{"class":87},"    output_path ",[77,110975,268],{"class":2123},[77,110977,110978],{"class":87}," Path(",[77,110980,110448],{"class":271},[77,110982,2628],{"class":87},[77,110984,110985],{"class":79,"line":10422},[77,110986,110987],{"class":87},"    Image.fromarray(image).save(output_path)\n",[77,110989,110990],{"class":79,"line":10446},[77,110991,110992],{"class":87},"    renderer.close()\n",[77,110994,110995],{"class":79,"line":10451},[77,110996,4875],{"emptyLinePlaceholder":2549},[77,110998,110999,111001,111003,111006],{"class":79,"line":10457},[77,111000,33766],{"class":94},[77,111002,2622],{"class":87},[77,111004,111005],{"class":271},"\"saved:\"",[77,111007,111008],{"class":87},", output_path.resolve())\n",[77,111010,111011,111013,111015,111018],{"class":79,"line":10484},[77,111012,33766],{"class":94},[77,111014,2622],{"class":87},[77,111016,111017],{"class":271},"\"image shape:\"",[77,111019,111020],{"class":87},", image.shape)\n",[77,111022,111023],{"class":79,"line":10489},[77,111024,4875],{"emptyLinePlaceholder":2549},[77,111026,111027],{"class":79,"line":10495},[77,111028,4875],{"emptyLinePlaceholder":2549},[77,111030,111031,111033,111035,111037,111039],{"class":79,"line":10507},[77,111032,4008],{"class":2123},[77,111034,33687],{"class":94},[77,111036,103994],{"class":2123},[77,111038,103997],{"class":271},[77,111040,6214],{"class":87},[77,111042,111043],{"class":79,"line":10519},[77,111044,104004],{"class":87},[24,111046,106003],{},[67,111048,111050],{"className":26289,"code":111049,"language":26291,"meta":72,"style":72},"touch ch5_renderer.py\n",[74,111051,111052],{"__ignoreMap":72},[77,111053,111054,111056],{"class":79,"line":80},[77,111055,103718],{"class":83},[77,111057,111058],{"class":271}," ch5_renderer.py\n",[19,111060,104007],{"id":104007},[24,111062,111063],{},"viewer 上下文：",[67,111065,111067],{"className":32846,"code":111066,"language":32848,"meta":72,"style":72},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[74,111068,111069],{"__ignoreMap":72},[77,111070,111071,111073,111075,111077],{"class":79,"line":80},[77,111072,110266],{"class":2123},[77,111074,110269],{"class":87},[77,111076,33850],{"class":2123},[77,111078,110274],{"class":87},[24,111080,111081,111083],{},[74,111082,110266],{}," 语句会创建窗口，并在退出时自动清理资源。",[24,111085,111086],{},"窗口循环：",[67,111088,111090],{"className":32846,"code":111089,"language":32848,"meta":72,"style":72},"while viewer.is_running() and data.time \u003C 5.0:\n",[74,111091,111092],{"__ignoreMap":72},[77,111093,111094,111097,111099,111101,111103,111105,111107],{"class":79,"line":80},[77,111095,111096],{"class":2123},"while",[77,111098,110620],{"class":87},[77,111100,32930],{"class":2123},[77,111102,110625],{"class":87},[77,111104,260],{"class":2123},[77,111106,110630],{"class":94},[77,111108,6214],{"class":87},[24,111110,111111],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[24,111113,111114],{},"固定相机：",[67,111116,111118],{"className":55525,"code":111117,"language":55527,"meta":72,"style":72},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[74,111119,111120],{"__ignoreMap":72},[77,111121,111122,111124,111126,111128,111130,111132,111134,111136,111139,111142,111144,111147],{"class":79,"line":80},[77,111123,260],{"class":87},[77,111125,110948],{"class":158},[77,111127,2495],{"class":83},[77,111129,268],{"class":87},[77,111131,110953],{"class":271},[77,111133,103541],{"class":83},[77,111135,268],{"class":87},[77,111137,111138],{"class":271},"\"1.5 -2.0 1.2\"",[77,111140,111141],{"class":83}," xyaxes",[77,111143,268],{"class":87},[77,111145,111146],{"class":271},"\"1 0.75 0 0 0 1\"",[77,111148,103579],{"class":87},[24,111150,111151],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[19,111153,111155],{"id":111154},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[67,111157,111159],{"className":32846,"code":111158,"language":32848,"meta":72,"style":72},"import time\n",[74,111160,111161],{"__ignoreMap":72},[77,111162,111163,111165],{"class":79,"line":80},[77,111164,32860],{"class":2123},[77,111166,34296],{"class":87},[24,111168,111169],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[67,111171,111173],{"className":32846,"code":111172,"language":32848,"meta":72,"style":72},"import mujoco\nimport mujoco.viewer\n",[74,111174,111175,111181],{"__ignoreMap":72},[77,111176,111177,111179],{"class":79,"line":80},[77,111178,32860],{"class":2123},[77,111180,103736],{"class":87},[77,111182,111183,111185],{"class":79,"line":91},[77,111184,32860],{"class":2123},[77,111186,109985],{"class":87},[24,111188,111189],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[67,111191,111192],{"className":32846,"code":111066,"language":32848,"meta":72,"style":72},[74,111193,111194],{"__ignoreMap":72},[77,111195,111196,111198,111200,111202],{"class":79,"line":80},[77,111197,110266],{"class":2123},[77,111199,110269],{"class":87},[77,111201,33850],{"class":2123},[77,111203,110274],{"class":87},[24,111205,111206,111207,111210],{},"打开一个 viewer 窗口。",[74,111208,111209],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[67,111212,111213],{"className":32846,"code":111089,"language":32848,"meta":72,"style":72},[74,111214,111215],{"__ignoreMap":72},[77,111216,111217,111219,111221,111223,111225,111227,111229],{"class":79,"line":80},[77,111218,111096],{"class":2123},[77,111220,110620],{"class":87},[77,111222,32930],{"class":2123},[77,111224,110625],{"class":87},[77,111226,260],{"class":2123},[77,111228,110630],{"class":94},[77,111230,6214],{"class":87},[24,111232,111233,111234,111237],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[74,111235,111236],{},"viewer.is_running()"," 会变成 false，循环结束。",[67,111239,111241],{"className":32846,"code":111240,"language":32848,"meta":72,"style":72},"step_start = time.time()\n",[74,111242,111243],{"__ignoreMap":72},[77,111244,111245,111248,111250],{"class":79,"line":80},[77,111246,111247],{"class":87},"step_start ",[77,111249,268],{"class":2123},[77,111251,110642],{"class":87},[24,111253,111254],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[67,111256,111257],{"className":32846,"code":110351,"language":32848,"meta":72,"style":72},[74,111258,111259,111263],{"__ignoreMap":72},[77,111260,111261],{"class":79,"line":80},[77,111262,106938],{"class":87},[77,111264,111265],{"class":79,"line":91},[77,111266,110362],{"class":87},[24,111268,111269,111271,111272,111274,111275,111277,111278,111281],{},[74,111270,103650],{}," 推进物理仿真。",[74,111273,110370],{}," 把最新的 ",[74,111276,35868],{}," 同步到窗口里显示。没有 ",[74,111279,111280],{},"sync()","，窗口可能看不到最新状态。",[67,111283,111284],{"className":32846,"code":110381,"language":32848,"meta":72,"style":72},[74,111285,111286],{"__ignoreMap":72},[77,111287,111288,111290,111292,111294,111296,111298,111300],{"class":79,"line":80},[77,111289,110388],{"class":87},[77,111291,268],{"class":2123},[77,111293,110393],{"class":87},[77,111295,3145],{"class":2123},[77,111297,110398],{"class":87},[77,111299,3145],{"class":2123},[77,111301,110403],{"class":87},[24,111303,111304],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[67,111306,111308],{"className":32846,"code":111307,"language":32848,"meta":72,"style":72},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[74,111309,111310,111322],{"__ignoreMap":72},[77,111311,111312,111314,111316,111318,111320],{"class":79,"line":80},[77,111313,4008],{"class":2123},[77,111315,110680],{"class":87},[77,111317,3572],{"class":2123},[77,111319,6568],{"class":94},[77,111321,6214],{"class":87},[77,111323,111324],{"class":79,"line":91},[77,111325,111326],{"class":87},"    time.sleep(sleep_time)\n",[24,111328,111329],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[19,111331,111333],{"id":111332},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[67,111335,111337],{"className":32846,"code":111336,"language":32848,"meta":72,"style":72},"from pathlib import Path\n",[74,111338,111339],{"__ignoreMap":72},[77,111340,111341,111343,111345,111347],{"class":79,"line":80},[77,111342,33205],{"class":2123},[77,111344,110744],{"class":87},[77,111346,32860],{"class":2123},[77,111348,110749],{"class":87},[24,111350,111351,111352,111355,111356,111359],{},"导入 ",[74,111353,111354],{},"Path","，用来处理文件路径。相比直接写字符串，",[74,111357,111358],{},"Path(\"render_output.png\")"," 更清晰。",[67,111361,111363],{"className":32846,"code":111362,"language":32848,"meta":72,"style":72},"from PIL import Image\n",[74,111364,111365],{"__ignoreMap":72},[77,111366,111367,111369,111371,111373],{"class":79,"line":80},[77,111368,33205],{"class":2123},[77,111370,49729],{"class":94},[77,111372,49732],{"class":2123},[77,111374,49735],{"class":87},[24,111376,111377],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[67,111379,111380],{"className":55525,"code":111117,"language":55527,"meta":72,"style":72},[74,111381,111382],{"__ignoreMap":72},[77,111383,111384,111386,111388,111390,111392,111394,111396,111398,111400,111402,111404,111406],{"class":79,"line":80},[77,111385,260],{"class":87},[77,111387,110948],{"class":158},[77,111389,2495],{"class":83},[77,111391,268],{"class":87},[77,111393,110953],{"class":271},[77,111395,103541],{"class":83},[77,111397,268],{"class":87},[77,111399,111138],{"class":271},[77,111401,111141],{"class":83},[77,111403,268],{"class":87},[77,111405,111146],{"class":271},[77,111407,103579],{"class":87},[24,111409,111410,111411,111413,111414,111416,111417,111420,111421,111423],{},"定义一个相机。",[74,111412,82247],{}," 是相机名字。",[74,111415,106579],{}," 是相机在世界里的位置。",[74,111418,111419],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[74,111422,106579],{}," 来调视角。",[67,111425,111427],{"className":32846,"code":111426,"language":32848,"meta":72,"style":72},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[74,111428,111429],{"__ignoreMap":72},[77,111430,111431,111433,111435,111437,111439,111441,111443,111445,111447,111449,111451],{"class":79,"line":80},[77,111432,110003],{"class":87},[77,111434,268],{"class":2123},[77,111436,110307],{"class":87},[77,111438,27449],{"class":7691},[77,111440,268],{"class":2123},[77,111442,44808],{"class":94},[77,111444,680],{"class":87},[77,111446,27445],{"class":7691},[77,111448,268],{"class":2123},[77,111450,110322],{"class":94},[77,111452,2628],{"class":87},[24,111454,111455,111456,513,111458,111460],{},"创建离屏渲染器。",[74,111457,27449],{},[74,111459,27445],{}," 决定输出图片大小。",[67,111462,111463],{"className":32846,"code":104111,"language":32848,"meta":72,"style":72},[74,111464,111465,111481],{"__ignoreMap":72},[77,111466,111467,111469,111471,111473,111475,111477,111479],{"class":79,"line":80},[77,111468,5500],{"class":2123},[77,111470,103936],{"class":87},[77,111472,28511],{"class":2123},[77,111474,34910],{"class":94},[77,111476,2622],{"class":87},[77,111478,2925],{"class":94},[77,111480,33254],{"class":87},[77,111482,111483],{"class":79,"line":91},[77,111484,104134],{"class":87},[24,111486,111487],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[67,111489,111491],{"className":32846,"code":111490,"language":32848,"meta":72,"style":72},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[74,111492,111493],{"__ignoreMap":72},[77,111494,111495,111498,111500,111502,111504],{"class":79,"line":80},[77,111496,111497],{"class":87},"renderer.update_scene(data, ",[77,111499,110948],{"class":7691},[77,111501,268],{"class":2123},[77,111503,110953],{"class":271},[77,111505,2628],{"class":87},[24,111507,111508,111509,111511,111512,111515],{},"告诉 renderer：用当前 ",[74,111510,35868],{}," 的状态更新画面，并使用名为 ",[74,111513,111514],{},"fixed_camera"," 的相机视角。",[67,111517,111518],{"className":32846,"code":110413,"language":32848,"meta":72,"style":72},[74,111519,111520],{"__ignoreMap":72},[77,111521,111522,111524,111526],{"class":79,"line":80},[77,111523,110013],{"class":87},[77,111525,268],{"class":2123},[77,111527,110018],{"class":87},[24,111529,111530,111531,111534],{},"真正渲染出图像。",[74,111532,111533],{},"image"," 是一个 NumPy 数组，不是文件。",[67,111536,111538],{"className":32846,"code":111537,"language":32848,"meta":72,"style":72},"Image.fromarray(image).save(output_path)\n",[74,111539,111540],{"__ignoreMap":72},[77,111541,111542],{"class":79,"line":80},[77,111543,111537],{"class":87},[24,111545,111546,111547,30853],{},"把数组转换成图片，并保存到 ",[74,111548,111549],{},"render_output.png",[67,111551,111553],{"className":32846,"code":111552,"language":32848,"meta":72,"style":72},"renderer.close()\n",[74,111554,111555],{"__ignoreMap":72},[77,111556,111557],{"class":79,"line":80},[77,111558,111552],{"class":87},[24,111560,111561],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111563,104750],{"id":104749},[24,111565,111566,111567,111569,111570,30853],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[74,111568,111549],{},"，并输出图像数组形状，例如 ",[74,111571,111572],{},"(480, 640, 3)",[24,111574,111575],{},"如果图片里看不到方块，先检查：",[139,111577,111578,111581,111584],{},[54,111579,111580],{},"方块是否掉到相机视野外。",[54,111582,111583],{},"camera 位置是否合理。",[54,111585,111586,111587,111590],{},"是否在 ",[74,111588,111589],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111592,104782],{"id":104781},[24,111594,111595],{},"运行 viewer:",[67,111597,111599],{"className":26289,"code":111598,"language":26291,"meta":72,"style":72},"python ch5_viewer.py\n",[74,111600,111601],{"__ignoreMap":72},[77,111602,111603,111605],{"class":79,"line":80},[77,111604,32848],{"class":83},[77,111606,110729],{"class":271},[24,111608,111609],{},"运行 renderer:",[67,111611,111613],{"className":26289,"code":111612,"language":26291,"meta":72,"style":72},"python ch5_renderer.py\n",[74,111614,111615],{"__ignoreMap":72},[77,111616,111617,111619],{"class":79,"line":80},[77,111618,32848],{"class":83},[77,111620,111058],{"class":271},[24,111622,111623],{},"如果在服务器上运行:",[67,111625,111627],{"className":26289,"code":111626,"language":26291,"meta":72,"style":72},"MUJOCO_GL=egl python ch5_renderer.py\n",[74,111628,111629],{"__ignoreMap":72},[77,111630,111631,111633,111635,111637,111640],{"class":79,"line":80},[77,111632,110247],{"class":87},[77,111634,268],{"class":2123},[77,111636,110237],{"class":271},[77,111638,111639],{"class":83}," python",[77,111641,111058],{"class":271},[24,111643,110215],{},[67,111645,111647],{"className":26289,"code":111646,"language":26291,"meta":72,"style":72},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[74,111648,111649],{"__ignoreMap":72},[77,111650,111651,111653,111655,111657,111659],{"class":79,"line":80},[77,111652,110247],{"class":87},[77,111654,268],{"class":2123},[77,111656,110241],{"class":271},[77,111658,111639],{"class":83},[77,111660,111058],{"class":271},[24,111662,111663],{},"再做几个练习：",[139,111665,111666,111673,111676,111682],{},[54,111667,111668,111669,111672],{},"把 renderer 分辨率改成 ",[74,111670,111671],{},"height=240, width=320","，观察输出 shape。",[54,111674,111675],{},"把方块颜色改成蓝色，重新保存图片。",[54,111677,111678,111679,111681],{},"把相机 ",[74,111680,106579],{}," 改远一点，观察画面中物体是否变小。",[54,111683,111684,111685,104848,111688,111691],{},"把 viewer 示例中的 ",[74,111686,111687],{},"data.time \u003C 5.0",[74,111689,111690],{},"data.time \u003C 20.0","，观察更长时间。",[14,111693,104887],{"id":104886},[19,111695,111697],{"id":111696},"viewer-窗口打不开","viewer 窗口打不开",[24,111699,111700],{},"安装:",[67,111702,111704],{"className":26289,"code":111703,"language":26291,"meta":72,"style":72},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[74,111705,111706],{"__ignoreMap":72},[77,111707,111708,111710,111712,111714,111716,111718,111720,111722,111724,111726,111728],{"class":79,"line":80},[77,111709,27044],{"class":83},[77,111711,28783],{"class":271},[77,111713,26301],{"class":271},[77,111715,28868],{"class":94},[77,111717,104940],{"class":271},[77,111719,103270],{"class":271},[77,111721,104945],{"class":271},[77,111723,103283],{"class":271},[77,111725,103289],{"class":271},[77,111727,103280],{"class":271},[77,111729,111730],{"class":271}," libXinerama\n",[19,111732,111734],{"id":111733},"glfwerror",[74,111735,111736],{},"GLFWError",[24,111738,111739],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[19,111741,111743],{"id":111742},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[24,111745,111746,111747,84976,111749,111751],{},"尝试 ",[74,111748,103472],{},[74,111750,103475],{},"。可能存在版本差异。",[19,111753,111754],{"id":111754},"保存图片是黑的",[24,111756,105009],{},[139,111758,111759,111762,111765,111775],{},[54,111760,111761],{},"XML 里是否有 light。",[54,111763,111764],{},"相机是否对着模型。",[54,111766,111767,111768,111771,111772,30853],{},"是否先 ",[74,111769,111770],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[74,111773,111774],{},"renderer.render()",[54,111776,111777],{},"物体是否已经掉出视野。",[19,111779,111780],{"id":111780},"远程服务器没有显示器",[24,111782,111783],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[67,111785,111786],{"className":26289,"code":111626,"language":26291,"meta":72,"style":72},[74,111787,111788],{"__ignoreMap":72},[77,111789,111790,111792,111794,111796,111798],{"class":79,"line":80},[77,111791,110247],{"class":87},[77,111793,268],{"class":2123},[77,111795,110237],{"class":271},[77,111797,111639],{"class":83},[77,111799,111058],{"class":271},[24,111801,111802],{},"如果 EGL 不可用，再尝试：",[67,111804,111805],{"className":26289,"code":111646,"language":26291,"meta":72,"style":72},[74,111806,111807],{"__ignoreMap":72},[77,111808,111809,111811,111813,111815,111817],{"class":79,"line":80},[77,111810,110247],{"class":87},[77,111812,268],{"class":2123},[77,111814,110241],{"class":271},[77,111816,111639],{"class":83},[77,111818,111058],{"class":271},[14,111820,105041],{"id":105040},[24,111822,111823],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[139,111825,111826,111829,111832],{},[54,111827,111828],{},"先用 viewer 看模型和控制是否正常。",[54,111830,111831],{},"再用 renderer 保存图片或构造视觉观测。",[54,111833,111834],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2520,111836,111837],{},"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":72,"searchDepth":91,"depth":91,"links":111839},[111840,111841,111842,111847,111852,111853,111854,111861],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":111843},[111844,111845,111846],{"id":110344,"depth":107,"text":110345},{"id":110374,"depth":107,"text":110375},{"id":110409,"depth":107,"text":110410},{"id":103687,"depth":91,"text":103688,"children":111848},[111849,111850,111851],{"id":104007,"depth":107,"text":104007},{"id":111154,"depth":107,"text":111155},{"id":111332,"depth":107,"text":111333},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":111855},[111856,111857,111858,111859,111860],{"id":111696,"depth":107,"text":111697},{"id":111733,"depth":107,"text":111736},{"id":111742,"depth":107,"text":111743},{"id":111754,"depth":107,"text":111754},{"id":111780,"depth":107,"text":111780},{"id":105040,"depth":91,"text":105041},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109952,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111868,"title":111869,"body":111870,"description":72,"extension":2547,"meta":113781,"navigation":2549,"path":113782,"seo":113783,"stem":113784,"__hash__":113785},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111871,"toc":113757},[111872,111875,111877,111880,111882,111901,111904,111910,111913,111915,111917,111941,111943,111957,111959,112000,112002,112013,112015,112018,112024,112027,112061,112064,112096,112099,112131,112135,112138,112178,112181,112187,112190,112196,112200,112203,112209,112212,112216,112219,112259,112261,112274,112277,112279,112861,112863,112875,112878,112889,112891,112894,112913,112925,112928,112949,112952,112955,112998,113001,113004,113024,113031,113033,113051,113066,113069,113075,113078,113084,113101,113108,113139,113150,113184,113195,113212,113221,113229,113234,113248,113251,113272,113278,113292,113297,113327,113337,113362,113370,113393,113396,113412,113415,113423,113429,113451,113464,113485,113494,113533,113544,113546,113549,113555,113558,113561,113567,113570,113590,113593,113595,113634,113636,113639,113647,113650,113653,113680,113683,113693,113699,113702,113708,113710,113716,113720,113723,113725,113728,113752,113755],[10,111873,111869],{"id":111874},"_6控制任务cartpole",[14,111876,103083],{"id":103082},[24,111878,111879],{},"本章搭建一个最小 Cartpole 控制任务。",[24,111881,106764],{},[139,111883,111884,111887,111889,111892,111895,111898],{},[54,111885,111886],{},"slide joint",[54,111888,108617],{},[54,111890,111891],{},"cart force actuator",[54,111893,111894],{},"状态观测",[54,111896,111897],{},"简单控制循环",[54,111899,111900],{},"reward 设计雏形",[24,111902,111903],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[67,111905,111908],{"className":111906,"code":111907,"language":7662,"meta":72},[7660],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[74,111909,111907],{"__ignoreMap":72},[24,111911,111912],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111914,103206],{"id":103205},[24,111916,103209],{},[67,111918,111919],{"className":26289,"code":106821,"language":26291,"meta":72,"style":72},[74,111920,111921],{"__ignoreMap":72},[77,111922,111923,111925,111927,111929,111931,111933,111935,111937,111939],{"class":79,"line":80},[77,111924,27044],{"class":83},[77,111926,28783],{"class":271},[77,111928,26301],{"class":271},[77,111930,28868],{"class":94},[77,111932,106836],{"class":271},[77,111934,103234],{"class":271},[77,111936,104935],{"class":271},[77,111938,103250],{"class":271},[77,111940,106845],{"class":271},[24,111942,105252],{},[67,111944,111945],{"className":26289,"code":103355,"language":26291,"meta":72,"style":72},[74,111946,111947],{"__ignoreMap":72},[77,111948,111949,111951,111953,111955],{"class":79,"line":80},[77,111950,26298],{"class":83},[77,111952,26301],{"class":271},[77,111954,103366],{"class":271},[77,111956,103369],{"class":271},[24,111958,105269],{},[67,111960,111962],{"className":26289,"code":111961,"language":26291,"meta":72,"style":72},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[74,111963,111964,111981,111990],{"__ignoreMap":72},[77,111965,111966,111968,111970,111972,111975,111977,111979],{"class":79,"line":80},[77,111967,32798],{"class":83},[77,111969,31644],{"class":271},[77,111971,27583],{"class":94},[77,111973,111974],{"class":271}," mujoco-cartpole",[77,111976,103411],{"class":271},[77,111978,103414],{"class":94},[77,111980,103417],{"class":94},[77,111982,111983,111985,111987],{"class":79,"line":91},[77,111984,32798],{"class":83},[77,111986,103424],{"class":271},[77,111988,111989],{"class":271}," mujoco-cartpole\n",[77,111991,111992,111994,111996,111998],{"class":79,"line":107},[77,111993,26298],{"class":83},[77,111995,26301],{"class":271},[77,111997,103366],{"class":271},[77,111999,103369],{"class":271},[24,112001,103440],{},[139,112003,112004,112007,112010],{},[54,112005,112006],{},"本章不依赖 Gymnasium。",[54,112008,112009],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[54,112011,112012],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,112014,103480],{"id":103479},[24,112016,112017],{},"Cartpole 的模型结构:",[67,112019,112022],{"className":112020,"code":112021,"language":7662,"meta":72},[7660],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[74,112023,112021],{"__ignoreMap":72},[24,112025,112026],{},"小车通过 slide joint 左右移动:",[67,112028,112030],{"className":55525,"code":112029,"language":55527,"meta":72,"style":72},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[74,112031,112032],{"__ignoreMap":72},[77,112033,112034,112036,112038,112040,112042,112045,112047,112049,112052,112054,112056,112059],{"class":79,"line":80},[77,112035,260],{"class":87},[77,112037,105389],{"class":158},[77,112039,2495],{"class":83},[77,112041,268],{"class":87},[77,112043,112044],{"class":271},"\"cart_x\"",[77,112046,2487],{"class":83},[77,112048,268],{"class":87},[77,112050,112051],{"class":271},"\"slide\"",[77,112053,108461],{"class":83},[77,112055,268],{"class":87},[77,112057,112058],{"class":271},"\"1 0 0\"",[77,112060,103579],{"class":87},[24,112062,112063],{},"杆子通过 hinge joint 旋转:",[67,112065,112067],{"className":55525,"code":112066,"language":55527,"meta":72,"style":72},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[74,112068,112069],{"__ignoreMap":72},[77,112070,112071,112073,112075,112077,112079,112082,112084,112086,112088,112090,112092,112094],{"class":79,"line":80},[77,112072,260],{"class":87},[77,112074,105389],{"class":158},[77,112076,2495],{"class":83},[77,112078,268],{"class":87},[77,112080,112081],{"class":271},"\"pole_hinge\"",[77,112083,2487],{"class":83},[77,112085,268],{"class":87},[77,112087,108452],{"class":271},[77,112089,108461],{"class":83},[77,112091,268],{"class":87},[77,112093,108466],{"class":271},[77,112095,103579],{"class":87},[24,112097,112098],{},"控制力作用在小车 slide joint 上:",[67,112100,112102],{"className":55525,"code":112101,"language":55527,"meta":72,"style":72},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[74,112103,112104],{"__ignoreMap":72},[77,112105,112106,112108,112110,112112,112114,112117,112119,112121,112123,112125,112127,112129],{"class":79,"line":80},[77,112107,260],{"class":87},[77,112109,108507],{"class":158},[77,112111,2495],{"class":83},[77,112113,268],{"class":87},[77,112115,112116],{"class":271},"\"cart_motor\"",[77,112118,108517],{"class":83},[77,112120,268],{"class":87},[77,112122,112044],{"class":271},[77,112124,108524],{"class":83},[77,112126,268],{"class":87},[77,112128,56770],{"class":271},[77,112130,103579],{"class":87},[19,112132,112134],{"id":112133},"cartpole-的状态是什么","Cartpole 的状态是什么",[24,112136,112137],{},"这个简化模型有两个关节：",[2755,112139,112140,112151],{},[2758,112141,112142],{},[2761,112143,112144,112146,112148],{},[2764,112145,105192],{"align":101},[2764,112147,26204],{"align":101},[2764,112149,112150],{"align":101},"对应状态",[2801,112152,112153,112166],{},[2761,112154,112155,112160,112163],{},[2806,112156,112157],{"align":101},[74,112158,112159],{},"cart_x",[2806,112161,112162],{"align":101},"slide",[2806,112164,112165],{"align":101},"小车 x 位置",[2761,112167,112168,112173,112175],{},[2806,112169,112170],{"align":101},[74,112171,112172],{},"pole_hinge",[2806,112174,108273],{"align":101},[2806,112176,112177],{"align":101},"杆子角度",[24,112179,112180],{},"所以：",[67,112182,112185],{"className":112183,"code":112184,"language":7662,"meta":72},[7660],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[74,112186,112184],{"__ignoreMap":72},[24,112188,112189],{},"把它们拼起来就是观测：",[67,112191,112194],{"className":112192,"code":112193,"language":7662,"meta":72},[7660],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[74,112195,112193],{"__ignoreMap":72},[19,112197,112199],{"id":112198},"action-是什么","action 是什么",[24,112201,112202],{},"本章只有一个 actuator：",[67,112204,112207],{"className":112205,"code":112206,"language":7662,"meta":72},[7660],"data.ctrl[0] = action\n",[74,112208,112206],{"__ignoreMap":72},[24,112210,112211],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[19,112213,112215],{"id":112214},"reward-是什么","reward 是什么",[24,112217,112218],{},"奖励函数：",[67,112220,112222],{"className":32846,"code":112221,"language":32848,"meta":72,"style":72},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[74,112223,112224],{"__ignoreMap":72},[77,112225,112226,112228,112231,112233,112235,112237,112240,112242,112245,112247,112249,112251,112254,112256],{"class":79,"line":80},[77,112227,19516],{"class":2123},[77,112229,112230],{"class":94}," float",[77,112232,2622],{"class":87},[77,112234,104837],{"class":94},[77,112236,54729],{"class":2123},[77,112238,112239],{"class":94}," 0.1",[77,112241,8993],{"class":2123},[77,112243,112244],{"class":87}," cart_x ",[77,112246,3068],{"class":2123},[77,112248,112244],{"class":87},[77,112250,3145],{"class":2123},[77,112252,112253],{"class":87}," pole_angle ",[77,112255,3068],{"class":2123},[77,112257,112258],{"class":87}," pole_angle)\n",[24,112260,108659],{},[139,112262,112263,112268,112271],{},[54,112264,112265,112266,30853],{},"基础奖励是 ",[74,112267,104837],{},[54,112269,112270],{},"小车离中心越远，扣分越多。",[54,112272,112273],{},"杆子角度越大，扣分越多。",[24,112275,112276],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112278,103688],{"id":103687},[67,112280,112282],{"className":32846,"code":112281,"language":32848,"meta":72,"style":72},"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",[74,112283,112284,112290,112300,112304,112308,112316,112321,112325,112329,112333,112338,112342,112347,112352,112357,112361,112366,112371,112376,112380,112384,112388,112392,112396,112401,112405,112409,112413,112417,112421,112431,112438,112442,112446,112460,112474,112487,112517,112521,112525,112537,112549,112557,112561,112574,112578,112582,112591,112595,112611,112621,112634,112647,112651,112674,112692,112696,112708,112712,112716,112726,112736,112740,112756,112797,112801,112821,112837,112841,112845,112857],{"__ignoreMap":72},[77,112285,112286,112288],{"class":79,"line":80},[77,112287,32860],{"class":2123},[77,112289,103736],{"class":87},[77,112291,112292,112294,112296,112298],{"class":79,"line":91},[77,112293,32860],{"class":2123},[77,112295,33847],{"class":87},[77,112297,33850],{"class":2123},[77,112299,33853],{"class":87},[77,112301,112302],{"class":79,"line":107},[77,112303,4875],{"emptyLinePlaceholder":2549},[77,112305,112306],{"class":79,"line":191},[77,112307,4875],{"emptyLinePlaceholder":2549},[77,112309,112310,112312,112314],{"class":79,"line":1543},[77,112311,103749],{"class":94},[77,112313,16036],{"class":2123},[77,112315,103754],{"class":271},[77,112317,112318],{"class":79,"line":1549},[77,112319,112320],{"class":271},"\u003Cmujoco model=\"cartpole\">\n",[77,112322,112323],{"class":79,"line":1566},[77,112324,103764],{"class":271},[77,112326,112327],{"class":79,"line":1572},[77,112328,4875],{"emptyLinePlaceholder":2549},[77,112330,112331],{"class":79,"line":1589},[77,112332,103773],{"class":271},[77,112334,112335],{"class":79,"line":1595},[77,112336,112337],{"class":271},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[77,112339,112340],{"class":79,"line":4088},[77,112341,4875],{"emptyLinePlaceholder":2549},[77,112343,112344],{"class":79,"line":4093},[77,112345,112346],{"class":271},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[77,112348,112349],{"class":79,"line":4099},[77,112350,112351],{"class":271},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[77,112353,112354],{"class":79,"line":4104},[77,112355,112356],{"class":271},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[77,112358,112359],{"class":79,"line":4118},[77,112360,4875],{"emptyLinePlaceholder":2549},[77,112362,112363],{"class":79,"line":4123},[77,112364,112365],{"class":271},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[77,112367,112368],{"class":79,"line":4129},[77,112369,112370],{"class":271},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[77,112372,112373],{"class":79,"line":4150},[77,112374,112375],{"class":271},"        \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",[77,112377,112378],{"class":79,"line":4155},[77,112379,108871],{"class":271},[77,112381,112382],{"class":79,"line":4169},[77,112383,103802],{"class":271},[77,112385,112386],{"class":79,"line":4174},[77,112387,103807],{"class":271},[77,112389,112390],{"class":79,"line":4203},[77,112391,4875],{"emptyLinePlaceholder":2549},[77,112393,112394],{"class":79,"line":4208},[77,112395,108888],{"class":271},[77,112397,112398],{"class":79,"line":4225},[77,112399,112400],{"class":271},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[77,112402,112403],{"class":79,"line":4230},[77,112404,108898],{"class":271},[77,112406,112407],{"class":79,"line":4235},[77,112408,103812],{"class":271},[77,112410,112411],{"class":79,"line":4240},[77,112412,98134],{"class":271},[77,112414,112415],{"class":79,"line":4254},[77,112416,4875],{"emptyLinePlaceholder":2549},[77,112418,112419],{"class":79,"line":4259},[77,112420,4875],{"emptyLinePlaceholder":2549},[77,112422,112423,112425,112428],{"class":79,"line":5052},[77,112424,34414],{"class":2123},[77,112426,112427],{"class":83}," get_observation",[77,112429,112430],{"class":87},"(data: mujoco.MjData) -> np.ndarray:\n",[77,112432,112433,112435],{"class":79,"line":5066},[77,112434,6565],{"class":2123},[77,112436,112437],{"class":87}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[77,112439,112440],{"class":79,"line":5074},[77,112441,4875],{"emptyLinePlaceholder":2549},[77,112443,112444],{"class":79,"line":5079},[77,112445,4875],{"emptyLinePlaceholder":2549},[77,112447,112448,112450,112453,112456,112458],{"class":79,"line":5085},[77,112449,34414],{"class":2123},[77,112451,112452],{"class":83}," compute_reward",[77,112454,112455],{"class":87},"(obs: np.ndarray) -> ",[77,112457,2661],{"class":94},[77,112459,6214],{"class":87},[77,112461,112462,112465,112467,112470,112472],{"class":79,"line":5091},[77,112463,112464],{"class":87},"    cart_x ",[77,112466,268],{"class":2123},[77,112468,112469],{"class":87}," obs[",[77,112471,1939],{"class":94},[77,112473,35713],{"class":87},[77,112475,112476,112479,112481,112483,112485],{"class":79,"line":5096},[77,112477,112478],{"class":87},"    pole_angle ",[77,112480,268],{"class":2123},[77,112482,112469],{"class":87},[77,112484,2120],{"class":94},[77,112486,35713],{"class":87},[77,112488,112489,112491,112493,112495,112497,112499,112501,112503,112505,112507,112509,112511,112513,112515],{"class":79,"line":10422},[77,112490,6565],{"class":2123},[77,112492,112230],{"class":94},[77,112494,2622],{"class":87},[77,112496,104837],{"class":94},[77,112498,54729],{"class":2123},[77,112500,112239],{"class":94},[77,112502,8993],{"class":2123},[77,112504,112244],{"class":87},[77,112506,3068],{"class":2123},[77,112508,112244],{"class":87},[77,112510,3145],{"class":2123},[77,112512,112253],{"class":87},[77,112514,3068],{"class":2123},[77,112516,112258],{"class":87},[77,112518,112519],{"class":79,"line":10446},[77,112520,4875],{"emptyLinePlaceholder":2549},[77,112522,112523],{"class":79,"line":10451},[77,112524,4875],{"emptyLinePlaceholder":2549},[77,112526,112527,112529,112531,112533,112535],{"class":79,"line":10457},[77,112528,34414],{"class":2123},[77,112530,4448],{"class":83},[77,112532,103833],{"class":87},[77,112534,98122],{"class":94},[77,112536,6214],{"class":87},[77,112538,112539,112541,112543,112545,112547],{"class":79,"line":10484},[77,112540,103842],{"class":87},[77,112542,268],{"class":2123},[77,112544,103847],{"class":87},[77,112546,103749],{"class":94},[77,112548,2628],{"class":87},[77,112550,112551,112553,112555],{"class":79,"line":10489},[77,112552,103856],{"class":87},[77,112554,268],{"class":2123},[77,112556,103861],{"class":87},[77,112558,112559],{"class":79,"line":10495},[77,112560,4875],{"emptyLinePlaceholder":2549},[77,112562,112563,112565,112567,112569,112571],{"class":79,"line":10507},[77,112564,107502],{"class":87},[77,112566,2120],{"class":94},[77,112568,6918],{"class":87},[77,112570,268],{"class":2123},[77,112572,112573],{"class":94}," 0.1\n",[77,112575,112576],{"class":79,"line":10519},[77,112577,107515],{"class":87},[77,112579,112580],{"class":79,"line":10531},[77,112581,4875],{"emptyLinePlaceholder":2549},[77,112583,112584,112587,112589],{"class":79,"line":12189},[77,112585,112586],{"class":87},"    total_reward ",[77,112588,268],{"class":2123},[77,112590,107194],{"class":94},[77,112592,112593],{"class":79,"line":12214},[77,112594,4875],{"emptyLinePlaceholder":2549},[77,112596,112597,112599,112601,112603,112605,112607,112609],{"class":79,"line":12237},[77,112598,5676],{"class":2123},[77,112600,34083],{"class":87},[77,112602,28511],{"class":2123},[77,112604,34910],{"class":94},[77,112606,2622],{"class":87},[77,112608,8885],{"class":94},[77,112610,33254],{"class":87},[77,112612,112613,112616,112618],{"class":79,"line":12261},[77,112614,112615],{"class":87},"        obs ",[77,112617,268],{"class":2123},[77,112619,112620],{"class":87}," get_observation(data)\n",[77,112622,112623,112626,112628,112630,112632],{"class":79,"line":12266},[77,112624,112625],{"class":87},"        pole_angle ",[77,112627,268],{"class":2123},[77,112629,112469],{"class":87},[77,112631,2120],{"class":94},[77,112633,35713],{"class":87},[77,112635,112636,112639,112641,112643,112645],{"class":79,"line":12271},[77,112637,112638],{"class":87},"        pole_angular_velocity ",[77,112640,268],{"class":2123},[77,112642,112469],{"class":87},[77,112644,2690],{"class":94},[77,112646,35713],{"class":87},[77,112648,112649],{"class":79,"line":12276},[77,112650,4875],{"emptyLinePlaceholder":2549},[77,112652,112653,112656,112658,112661,112663,112665,112667,112669,112671],{"class":79,"line":12285},[77,112654,112655],{"class":87},"        action ",[77,112657,268],{"class":2123},[77,112659,112660],{"class":94}," 2.0",[77,112662,8993],{"class":2123},[77,112664,112253],{"class":87},[77,112666,3094],{"class":2123},[77,112668,64312],{"class":94},[77,112670,8993],{"class":2123},[77,112672,112673],{"class":87}," pole_angular_velocity\n",[77,112675,112676,112678,112680,112682,112684,112686,112688,112690],{"class":79,"line":12290},[77,112677,112655],{"class":87},[77,112679,268],{"class":2123},[77,112681,109880],{"class":87},[77,112683,3145],{"class":2123},[77,112685,104837],{"class":94},[77,112687,680],{"class":87},[77,112689,104837],{"class":94},[77,112691,2628],{"class":87},[77,112693,112694],{"class":79,"line":12296},[77,112695,4875],{"emptyLinePlaceholder":2549},[77,112697,112698,112700,112702,112704,112706],{"class":79,"line":12317},[77,112699,109050],{"class":87},[77,112701,1939],{"class":94},[77,112703,6918],{"class":87},[77,112705,268],{"class":2123},[77,112707,109903],{"class":87},[77,112709,112710],{"class":79,"line":12323},[77,112711,103951],{"class":87},[77,112713,112714],{"class":79,"line":12337},[77,112715,4875],{"emptyLinePlaceholder":2549},[77,112717,112718,112721,112723],{"class":79,"line":12343},[77,112719,112720],{"class":87},"        reward ",[77,112722,268],{"class":2123},[77,112724,112725],{"class":87}," compute_reward(get_observation(data))\n",[77,112727,112728,112731,112733],{"class":79,"line":12370},[77,112729,112730],{"class":87},"        total_reward ",[77,112732,11950],{"class":2123},[77,112734,112735],{"class":87}," reward\n",[77,112737,112738],{"class":79,"line":12379},[77,112739,4875],{"emptyLinePlaceholder":2549},[77,112741,112742,112744,112746,112748,112750,112752,112754],{"class":79,"line":12385},[77,112743,4972],{"class":2123},[77,112745,34083],{"class":87},[77,112747,2942],{"class":2123},[77,112749,8229],{"class":94},[77,112751,103994],{"class":2123},[77,112753,6568],{"class":94},[77,112755,6214],{"class":87},[77,112757,112758,112760,112762,112765,112768,112771,112774,112776,112779,112782,112784,112786,112788,112790,112793,112795],{"class":79,"line":12393},[77,112759,37116],{"class":94},[77,112761,2622],{"class":87},[77,112763,112764],{"class":271},"\"step:\"",[77,112766,112767],{"class":87},", step, ",[77,112769,112770],{"class":271},"\"obs:\"",[77,112772,112773],{"class":87},", np.round(obs, ",[77,112775,2690],{"class":94},[77,112777,112778],{"class":87},"), ",[77,112780,112781],{"class":271},"\"action:\"",[77,112783,680],{"class":87},[77,112785,34485],{"class":94},[77,112787,2622],{"class":87},[77,112789,2661],{"class":94},[77,112791,112792],{"class":87},"(action), ",[77,112794,2690],{"class":94},[77,112796,32965],{"class":87},[77,112798,112799],{"class":79,"line":12398},[77,112800,4875],{"emptyLinePlaceholder":2549},[77,112802,112803,112805,112807,112810,112812,112814,112817,112819],{"class":79,"line":19074},[77,112804,33766],{"class":94},[77,112806,2622],{"class":87},[77,112808,112809],{"class":271},"\"total_reward:\"",[77,112811,680],{"class":87},[77,112813,34485],{"class":94},[77,112815,112816],{"class":87},"(total_reward, ",[77,112818,2690],{"class":94},[77,112820,32965],{"class":87},[77,112822,112823,112825,112827,112830,112833,112835],{"class":79,"line":19080},[77,112824,33766],{"class":94},[77,112826,2622],{"class":87},[77,112828,112829],{"class":271},"\"final obs:\"",[77,112831,112832],{"class":87},", np.round(get_observation(data), ",[77,112834,2690],{"class":94},[77,112836,32965],{"class":87},[77,112838,112839],{"class":79,"line":19103},[77,112840,4875],{"emptyLinePlaceholder":2549},[77,112842,112843],{"class":79,"line":19109},[77,112844,4875],{"emptyLinePlaceholder":2549},[77,112846,112847,112849,112851,112853,112855],{"class":79,"line":19132},[77,112848,4008],{"class":2123},[77,112850,33687],{"class":94},[77,112852,103994],{"class":2123},[77,112854,103997],{"class":271},[77,112856,6214],{"class":87},[77,112858,112859],{"class":79,"line":19146},[77,112860,104004],{"class":87},[24,112862,106003],{},[67,112864,112866],{"className":26289,"code":112865,"language":26291,"meta":72,"style":72},"touch ch6_cartpole.py\n",[74,112867,112868],{"__ignoreMap":72},[77,112869,112870,112872],{"class":79,"line":80},[77,112871,103718],{"class":83},[77,112873,112874],{"class":271}," ch6_cartpole.py\n",[24,112876,112877],{},"运行：",[67,112879,112881],{"className":26289,"code":112880,"language":26291,"meta":72,"style":72},"python ch6_cartpole.py\n",[74,112882,112883],{"__ignoreMap":72},[77,112884,112885,112887],{"class":79,"line":80},[77,112886,32848],{"class":83},[77,112888,112874],{"class":271},[19,112890,104007],{"id":104007},[24,112892,112893],{},"构造观测：",[67,112895,112897],{"className":32846,"code":112896,"language":32848,"meta":72,"style":72},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[74,112898,112899,112907],{"__ignoreMap":72},[77,112900,112901,112903,112905],{"class":79,"line":80},[77,112902,34414],{"class":2123},[77,112904,112427],{"class":83},[77,112906,112430],{"class":87},[77,112908,112909,112911],{"class":79,"line":91},[77,112910,6565],{"class":2123},[77,112912,112437],{"class":87},[24,112914,112915,112918,112919,112921,112922,112924],{},[74,112916,112917],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[74,112920,106463],{}," 2 维，",[74,112923,106793],{}," 2 维，所以 obs 是 4 维。",[24,112926,112927],{},"设置初始角度：",[67,112929,112931],{"className":32846,"code":112930,"language":32848,"meta":72,"style":72},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[74,112932,112933,112945],{"__ignoreMap":72},[77,112934,112935,112937,112939,112941,112943],{"class":79,"line":80},[77,112936,107132],{"class":87},[77,112938,2120],{"class":94},[77,112940,6918],{"class":87},[77,112942,268],{"class":2123},[77,112944,112573],{"class":94},[77,112946,112947],{"class":79,"line":91},[77,112948,106976],{"class":87},[24,112950,112951],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[24,112953,112954],{},"简单反馈控制：",[67,112956,112958],{"className":32846,"code":112957,"language":32848,"meta":72,"style":72},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[74,112959,112960,112980],{"__ignoreMap":72},[77,112961,112962,112964,112966,112968,112970,112972,112974,112976,112978],{"class":79,"line":80},[77,112963,109875],{"class":87},[77,112965,268],{"class":2123},[77,112967,112660],{"class":94},[77,112969,8993],{"class":2123},[77,112971,112253],{"class":87},[77,112973,3094],{"class":2123},[77,112975,64312],{"class":94},[77,112977,8993],{"class":2123},[77,112979,112673],{"class":87},[77,112981,112982,112984,112986,112988,112990,112992,112994,112996],{"class":79,"line":91},[77,112983,109875],{"class":87},[77,112985,268],{"class":2123},[77,112987,109880],{"class":87},[77,112989,3145],{"class":2123},[77,112991,104837],{"class":94},[77,112993,680],{"class":87},[77,112995,104837],{"class":94},[77,112997,2628],{"class":87},[24,112999,113000],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[24,113002,113003],{},"限制动作：",[67,113005,113007],{"className":32846,"code":113006,"language":32848,"meta":72,"style":72},"np.clip(action, -1.0, 1.0)\n",[74,113008,113009],{"__ignoreMap":72},[77,113010,113011,113014,113016,113018,113020,113022],{"class":79,"line":80},[77,113012,113013],{"class":87},"np.clip(action, ",[77,113015,3145],{"class":2123},[77,113017,104837],{"class":94},[77,113019,680],{"class":87},[77,113021,104837],{"class":94},[77,113023,2628],{"class":87},[24,113025,113026,113027,113030],{},"因为 XML 里 ",[74,113028,113029],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[19,113032,104143],{"id":104143},[67,113034,113035],{"className":32846,"code":112896,"language":32848,"meta":72,"style":72},[74,113036,113037,113045],{"__ignoreMap":72},[77,113038,113039,113041,113043],{"class":79,"line":80},[77,113040,34414],{"class":2123},[77,113042,112427],{"class":83},[77,113044,112430],{"class":87},[77,113046,113047,113049],{"class":79,"line":91},[77,113048,6565],{"class":2123},[77,113050,112437],{"class":87},[24,113052,113053,113054,113057,113058,113061,113062,113065],{},"这段定义了一个函数，用来获取当前观测。",[74,113055,113056],{},"data.qpos.copy()"," 是位置数组副本，",[74,113059,113060],{},"data.qvel.copy()"," 是速度数组副本。",[74,113063,113064],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[24,113067,113068],{},"在本章模型里：",[67,113070,113073],{"className":113071,"code":113072,"language":7662,"meta":72},[7660],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[74,113074,113072],{"__ignoreMap":72},[24,113076,113077],{},"所以返回的 obs 是：",[67,113079,113082],{"className":113080,"code":113081,"language":7662,"meta":72},[7660],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[74,113083,113081],{"__ignoreMap":72},[67,113085,113087],{"className":32846,"code":113086,"language":32848,"meta":72,"style":72},"def compute_reward(obs: np.ndarray) -> float:\n",[74,113088,113089],{"__ignoreMap":72},[77,113090,113091,113093,113095,113097,113099],{"class":79,"line":80},[77,113092,34414],{"class":2123},[77,113094,112452],{"class":83},[77,113096,112455],{"class":87},[77,113098,2661],{"class":94},[77,113100,6214],{"class":87},[24,113102,113103,113104,113107],{},"这行定义奖励函数。输入是观测 ",[74,113105,113106],{},"obs","，输出是一个浮点数奖励。",[67,113109,113111],{"className":32846,"code":113110,"language":32848,"meta":72,"style":72},"cart_x = obs[0]\npole_angle = obs[1]\n",[74,113112,113113,113126],{"__ignoreMap":72},[77,113114,113115,113118,113120,113122,113124],{"class":79,"line":80},[77,113116,113117],{"class":87},"cart_x ",[77,113119,268],{"class":2123},[77,113121,112469],{"class":87},[77,113123,1939],{"class":94},[77,113125,35713],{"class":87},[77,113127,113128,113131,113133,113135,113137],{"class":79,"line":91},[77,113129,113130],{"class":87},"pole_angle ",[77,113132,268],{"class":2123},[77,113134,112469],{"class":87},[77,113136,2120],{"class":94},[77,113138,35713],{"class":87},[24,113140,113141,113142,113145,113146,113149],{},"数组索引从 0 开始。",[74,113143,113144],{},"obs[0]"," 是第一个元素，也就是小车位置。",[74,113147,113148],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[67,113151,113152],{"className":32846,"code":112221,"language":32848,"meta":72,"style":72},[74,113153,113154],{"__ignoreMap":72},[77,113155,113156,113158,113160,113162,113164,113166,113168,113170,113172,113174,113176,113178,113180,113182],{"class":79,"line":80},[77,113157,19516],{"class":2123},[77,113159,112230],{"class":94},[77,113161,2622],{"class":87},[77,113163,104837],{"class":94},[77,113165,54729],{"class":2123},[77,113167,112239],{"class":94},[77,113169,8993],{"class":2123},[77,113171,112244],{"class":87},[77,113173,3068],{"class":2123},[77,113175,112244],{"class":87},[77,113177,3145],{"class":2123},[77,113179,112253],{"class":87},[77,113181,3068],{"class":2123},[77,113183,112258],{"class":87},[24,113185,113186,113187,113190,113191,113194],{},"这行计算奖励。",[74,113188,113189],{},"cart_x * cart_x"," 是小车位置的平方，",[74,113192,113193],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[67,113196,113198],{"className":32846,"code":113197,"language":32848,"meta":72,"style":72},"data.qpos[1] = 0.1\n",[74,113199,113200],{"__ignoreMap":72},[77,113201,113202,113204,113206,113208,113210],{"class":79,"line":80},[77,113203,107132],{"class":87},[77,113205,2120],{"class":94},[77,113207,6918],{"class":87},[77,113209,268],{"class":2123},[77,113211,112573],{"class":94},[24,113213,113214,113215,113217,113218,113220],{},"手动设置杆子的初始角度。因为 ",[74,113216,107889],{}," 是小车位置，",[74,113219,107892],{}," 是杆子角度，所以这里改的是杆子。",[67,113222,113223],{"className":32846,"code":106976,"language":32848,"meta":72,"style":72},[74,113224,113225],{"__ignoreMap":72},[77,113226,113227],{"class":79,"line":80},[77,113228,106976],{"class":87},[24,113230,107935,113231,113233],{},[74,113232,106463],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[67,113235,113237],{"className":32846,"code":113236,"language":32848,"meta":72,"style":72},"total_reward = 0.0\n",[74,113238,113239],{"__ignoreMap":72},[77,113240,113241,113244,113246],{"class":79,"line":80},[77,113242,113243],{"class":87},"total_reward ",[77,113245,268],{"class":2123},[77,113247,107194],{"class":94},[24,113249,113250],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[67,113252,113254],{"className":32846,"code":113253,"language":32848,"meta":72,"style":72},"for step in range(1000):\n",[74,113255,113256],{"__ignoreMap":72},[77,113257,113258,113260,113262,113264,113266,113268,113270],{"class":79,"line":80},[77,113259,5500],{"class":2123},[77,113261,34083],{"class":87},[77,113263,28511],{"class":2123},[77,113265,34910],{"class":94},[77,113267,2622],{"class":87},[77,113269,8885],{"class":94},[77,113271,33254],{"class":87},[24,113273,113274,113275,113277],{},"循环 1000 步。",[74,113276,109567],{}," 是当前步数，从 0 到 999。",[67,113279,113281],{"className":32846,"code":113280,"language":32848,"meta":72,"style":72},"obs = get_observation(data)\n",[74,113282,113283],{"__ignoreMap":72},[77,113284,113285,113288,113290],{"class":79,"line":80},[77,113286,113287],{"class":87},"obs ",[77,113289,268],{"class":2123},[77,113291,112620],{"class":87},[24,113293,113294,113295,30853],{},"读取当前状态，保存到 ",[74,113296,113106],{},[67,113298,113300],{"className":32846,"code":113299,"language":32848,"meta":72,"style":72},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[74,113301,113302,113314],{"__ignoreMap":72},[77,113303,113304,113306,113308,113310,113312],{"class":79,"line":80},[77,113305,113130],{"class":87},[77,113307,268],{"class":2123},[77,113309,112469],{"class":87},[77,113311,2120],{"class":94},[77,113313,35713],{"class":87},[77,113315,113316,113319,113321,113323,113325],{"class":79,"line":91},[77,113317,113318],{"class":87},"pole_angular_velocity ",[77,113320,268],{"class":2123},[77,113322,112469],{"class":87},[77,113324,2690],{"class":94},[77,113326,35713],{"class":87},[24,113328,113329,113330,113333,113334,30853],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[74,113331,113332],{},"obs[3]","？因为 obs 的顺序是 ",[74,113335,113336],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[67,113338,113340],{"className":32846,"code":113339,"language":32848,"meta":72,"style":72},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[74,113341,113342],{"__ignoreMap":72},[77,113343,113344,113346,113348,113350,113352,113354,113356,113358,113360],{"class":79,"line":80},[77,113345,109875],{"class":87},[77,113347,268],{"class":2123},[77,113349,112660],{"class":94},[77,113351,8993],{"class":2123},[77,113353,112253],{"class":87},[77,113355,3094],{"class":2123},[77,113357,64312],{"class":94},[77,113359,8993],{"class":2123},[77,113361,112673],{"class":87},[24,113363,113364,113365,513,113367,113369],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[74,113366,107693],{},[74,113368,37795],{}," 是人为设置的系数，不是固定公式。",[67,113371,113373],{"className":32846,"code":113372,"language":32848,"meta":72,"style":72},"action = np.clip(action, -1.0, 1.0)\n",[74,113374,113375],{"__ignoreMap":72},[77,113376,113377,113379,113381,113383,113385,113387,113389,113391],{"class":79,"line":80},[77,113378,109875],{"class":87},[77,113380,268],{"class":2123},[77,113382,109880],{"class":87},[77,113384,3145],{"class":2123},[77,113386,104837],{"class":94},[77,113388,680],{"class":87},[77,113390,104837],{"class":94},[77,113392,2628],{"class":87},[24,113394,113395],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[67,113397,113398],{"className":32846,"code":112206,"language":32848,"meta":72,"style":72},[74,113399,113400],{"__ignoreMap":72},[77,113401,113402,113404,113406,113408,113410],{"class":79,"line":80},[77,113403,108304],{"class":87},[77,113405,1939],{"class":94},[77,113407,6918],{"class":87},[77,113409,268],{"class":2123},[77,113411,109903],{"class":87},[24,113413,113414],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[67,113416,113417],{"className":32846,"code":106938,"language":32848,"meta":72,"style":72},[74,113418,113419],{"__ignoreMap":72},[77,113420,113421],{"class":79,"line":80},[77,113422,106938],{"class":87},[24,113424,113425,113426,113428],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[74,113427,108559],{}," 计算小车和杆子的下一刻状态。",[67,113430,113432],{"className":32846,"code":113431,"language":32848,"meta":72,"style":72},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[74,113433,113434,113443],{"__ignoreMap":72},[77,113435,113436,113439,113441],{"class":79,"line":80},[77,113437,113438],{"class":87},"reward ",[77,113440,268],{"class":2123},[77,113442,112725],{"class":87},[77,113444,113445,113447,113449],{"class":79,"line":91},[77,113446,113243],{"class":87},[77,113448,11950],{"class":2123},[77,113450,112735],{"class":87},[24,113452,113453,113454,113456,113457,113460,113461,30853],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[74,113455,11950],{}," 是简写，",[74,113458,113459],{},"total_reward += reward"," 等价于 ",[74,113462,113463],{},"total_reward = total_reward + reward",[67,113465,113467],{"className":32846,"code":113466,"language":32848,"meta":72,"style":72},"if step % 100 == 0:\n",[74,113468,113469],{"__ignoreMap":72},[77,113470,113471,113473,113475,113477,113479,113481,113483],{"class":79,"line":80},[77,113472,4008],{"class":2123},[77,113474,34083],{"class":87},[77,113476,2942],{"class":2123},[77,113478,8229],{"class":94},[77,113480,103994],{"class":2123},[77,113482,6568],{"class":94},[77,113484,6214],{"class":87},[24,113486,113487,113489,113490,113493],{},[74,113488,2942],{}," 是取余数。",[74,113491,113492],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[67,113495,113497],{"className":32846,"code":113496,"language":32848,"meta":72,"style":72},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[74,113498,113499],{"__ignoreMap":72},[77,113500,113501,113503,113505,113507,113509,113511,113513,113515,113517,113519,113521,113523,113525,113527,113529,113531],{"class":79,"line":80},[77,113502,32883],{"class":94},[77,113504,2622],{"class":87},[77,113506,112764],{"class":271},[77,113508,112767],{"class":87},[77,113510,112770],{"class":271},[77,113512,112773],{"class":87},[77,113514,2690],{"class":94},[77,113516,112778],{"class":87},[77,113518,112781],{"class":271},[77,113520,680],{"class":87},[77,113522,34485],{"class":94},[77,113524,2622],{"class":87},[77,113526,2661],{"class":94},[77,113528,112792],{"class":87},[77,113530,2690],{"class":94},[77,113532,32965],{"class":87},[24,113534,113535,113536,113539,113540,113543],{},"打印当前步数、观测和动作。",[74,113537,113538],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[74,113541,113542],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113545,104750],{"id":104749},[24,113547,113548],{},"观测向量:",[67,113550,113553],{"className":113551,"code":113552,"language":7662,"meta":72},[7660],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[74,113554,113552],{"__ignoreMap":72},[24,113556,113557],{},"控制器是教学用的简单线性反馈，不保证最优。",[24,113559,113560],{},"每隔 100 步会打印一次：",[67,113562,113565],{"className":113563,"code":113564,"language":7662,"meta":72},[7660],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[74,113566,113564],{"__ignoreMap":72},[24,113568,113569],{},"重点观察：",[139,113571,113572,113578,113583],{},[54,113573,113574,113577],{},[74,113575,113576],{},"pole_angle"," 是否越来越大。",[54,113579,113580,113582],{},[74,113581,112159],{}," 是否跑得太远。",[54,113584,113585,113586,84976,113588,30853],{},"action 是否经常被 clip 到 ",[74,113587,106348],{},[74,113589,2120],{},[24,113591,113592],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113594,104782],{"id":104781},[139,113596,113597,113603,113606,113612,113622,113628,113631],{},[54,113598,113599,113600,30853],{},"把初始角度改为 ",[74,113601,113602],{},"data.qpos[1] = 0.3",[54,113604,113605],{},"重新运行，观察控制是否变差。",[54,113607,113608,113609,113611],{},"把 actuator ",[74,113610,109500],{}," 改小。",[54,113613,113614,113615,113618,113619,30853],{},"打印 ",[74,113616,113617],{},"model.nq, model.nv, model.nu","，应为 ",[74,113620,113621],{},"2 2 1",[54,113623,113624,113625,113627],{},"把 reward 里的 ",[74,113626,113193],{}," 系数改大，观察总奖励变化。",[54,113629,113630],{},"把控制器改成反号，观察杆子是否更容易倒。",[54,113632,113633],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113635,104887],{"id":104886},[19,113637,113638],{"id":113638},"杆子方向和预期不一致",[24,113640,104830,113641,113643,113644,113646],{},[74,113642,108672],{}," 和 capsule 的 ",[74,113645,105609],{},"，必要时用 viewer 可视化确认。",[19,113648,113649],{"id":113649},"控制器越控越倒",[24,113651,113652],{},"说明反馈符号可能反了，尝试:",[67,113654,113656],{"className":32846,"code":113655,"language":32848,"meta":72,"style":72},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[74,113657,113658],{"__ignoreMap":72},[77,113659,113660,113662,113664,113666,113668,113670,113672,113674,113676,113678],{"class":79,"line":80},[77,113661,109875],{"class":87},[77,113663,268],{"class":2123},[77,113665,54729],{"class":2123},[77,113667,107693],{"class":94},[77,113669,8993],{"class":2123},[77,113671,112253],{"class":87},[77,113673,3145],{"class":2123},[77,113675,64312],{"class":94},[77,113677,8993],{"class":2123},[77,113679,112673],{"class":87},[19,113681,113682],{"id":113682},"小车飞走",[24,113684,113685,113686,113688,113689,113692],{},"降低 ",[74,113687,109500],{}," 或缩小 ",[74,113690,113691],{},"action"," 的 clip 范围。",[19,113694,113696,113698],{"id":113695},"obs3-为什么是杆子角速度",[74,113697,113332],{}," 为什么是杆子角速度",[24,113700,113701],{},"因为这个模型里：",[67,113703,113706],{"className":113704,"code":113705,"language":7662,"meta":72},[7660],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[74,113707,113705],{"__ignoreMap":72},[24,113709,112180],{},[67,113711,113714],{"className":113712,"code":113713,"language":7662,"meta":72},[7660],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[74,113715,113713],{"__ignoreMap":72},[19,113717,113719],{"id":113718},"reward-变成负数是否错误","reward 变成负数是否错误",[24,113721,113722],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113724,105041],{"id":105040},[24,113726,113727],{},"一个控制任务通常包含：",[139,113729,113730,113733,113741,113746,113749],{},[54,113731,113732],{},"模型：Cartpole 的 body、joint、actuator。",[54,113734,113735,113736,2828,113738,113740],{},"观测：从 ",[74,113737,106463],{},[74,113739,106793],{}," 里取状态。",[54,113742,113743,113744,30853],{},"动作：写入 ",[74,113745,103511],{},[54,113747,113748],{},"奖励：根据任务目标打分。",[54,113750,113751],{},"循环：obs -> action -> step -> reward。",[24,113753,113754],{},"这就是后面 Gymnasium 环境的基本骨架。",[2520,113756,106719],{},{"title":72,"searchDepth":91,"depth":91,"links":113758},[113759,113760,113761,113766,113770,113771,113772,113780],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":113762},[113763,113764,113765],{"id":112133,"depth":107,"text":112134},{"id":112198,"depth":107,"text":112199},{"id":112214,"depth":107,"text":112215},{"id":103687,"depth":91,"text":103688,"children":113767},[113768,113769],{"id":104007,"depth":107,"text":104007},{"id":104143,"depth":107,"text":104143},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":113773},[113774,113775,113776,113777,113779],{"id":113638,"depth":107,"text":113638},{"id":113649,"depth":107,"text":113649},{"id":113682,"depth":107,"text":113682},{"id":113695,"depth":107,"text":113778},"obs[3] 为什么是杆子角速度",{"id":113718,"depth":107,"text":113719},{"id":105040,"depth":91,"text":105041},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111869,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113787,"title":113788,"body":113789,"description":72,"extension":2547,"meta":115803,"navigation":2549,"path":115804,"seo":115805,"stem":115806,"__hash__":115807},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113790,"toc":115779},[113791,113794,113796,113799,113801,113818,113821,113824,113830,113833,113835,113837,113861,113863,113877,113879,113920,113922,113940,113942,113945,113951,113954,113982,113986,113992,114017,114020,114051,114058,114061,114064,114070,114073,114079,114082,114088,114092,114095,114120,114123,114125,114885,114887,114899,114901,114912,114914,114917,114934,114937,114939,114950,114953,114955,115001,115004,115017,115020,115102,115105,115107,115123,115133,115146,115149,115188,115198,115209,115219,115232,115235,115264,115267,115277,115280,115286,115303,115314,115316,115322,115339,115350,115371,115374,115386,115389,115410,115413,115421,115429,115446,115449,115518,115525,115533,115536,115549,115556,115558,115561,115567,115570,115573,115579,115585,115587,115627,115629,115635,115644,115647,115649,115669,115672,115675,115681,115685,115687,115714,115717,115720,115747,115753,115756,115759,115761,115764,115767,115773,115776],[10,113792,113788],{"id":113793},"_7控制任务reacher-机械臂到达目标",[14,113795,103083],{"id":103082},[24,113797,113798],{},"本章搭建一个二维两关节 reacher 任务。",[24,113800,106764],{},[139,113802,113803,113806,113809,113812,113815],{},[54,113804,113805],{},"两个 hinge joint",[54,113807,113808],{},"两个 motor actuator",[54,113810,113811],{},"site 作为末端点和目标点",[54,113813,113814],{},"根据末端和目标距离设计 reward",[54,113816,113817],{},"构造机械臂任务的基本形式",[24,113819,113820],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[24,113822,113823],{},"Reacher 任务可以理解为：",[67,113825,113828],{"className":113826,"code":113827,"language":7662,"meta":72},[7660],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[74,113829,113827],{"__ignoreMap":72},[24,113831,113832],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113834,103206],{"id":103205},[24,113836,103209],{},[67,113838,113839],{"className":26289,"code":106821,"language":26291,"meta":72,"style":72},[74,113840,113841],{"__ignoreMap":72},[77,113842,113843,113845,113847,113849,113851,113853,113855,113857,113859],{"class":79,"line":80},[77,113844,27044],{"class":83},[77,113846,28783],{"class":271},[77,113848,26301],{"class":271},[77,113850,28868],{"class":94},[77,113852,106836],{"class":271},[77,113854,103234],{"class":271},[77,113856,104935],{"class":271},[77,113858,103250],{"class":271},[77,113860,106845],{"class":271},[24,113862,105252],{},[67,113864,113865],{"className":26289,"code":103355,"language":26291,"meta":72,"style":72},[74,113866,113867],{"__ignoreMap":72},[77,113868,113869,113871,113873,113875],{"class":79,"line":80},[77,113870,26298],{"class":83},[77,113872,26301],{"class":271},[77,113874,103366],{"class":271},[77,113876,103369],{"class":271},[24,113878,105269],{},[67,113880,113882],{"className":26289,"code":113881,"language":26291,"meta":72,"style":72},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[74,113883,113884,113901,113910],{"__ignoreMap":72},[77,113885,113886,113888,113890,113892,113895,113897,113899],{"class":79,"line":80},[77,113887,32798],{"class":83},[77,113889,31644],{"class":271},[77,113891,27583],{"class":94},[77,113893,113894],{"class":271}," mujoco-reacher",[77,113896,103411],{"class":271},[77,113898,103414],{"class":94},[77,113900,103417],{"class":94},[77,113902,113903,113905,113907],{"class":79,"line":91},[77,113904,32798],{"class":83},[77,113906,103424],{"class":271},[77,113908,113909],{"class":271}," mujoco-reacher\n",[77,113911,113912,113914,113916,113918],{"class":79,"line":107},[77,113913,26298],{"class":83},[77,113915,26301],{"class":271},[77,113917,103366],{"class":271},[77,113919,103369],{"class":271},[24,113921,103440],{},[139,113923,113924,113927,113930],{},[54,113925,113926],{},"本章使用低维状态，不使用图像输入。",[54,113928,113929],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[54,113931,113932,113933,2828,113935,2828,113937,113939],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[74,113934,106463],{},[74,113936,106793],{},[74,113938,106113],{}," 的方法一致。",[14,113941,103480],{"id":103479},[24,113943,113944],{},"Reacher 任务核心:",[67,113946,113949],{"className":113947,"code":113948,"language":7662,"meta":72},[7660],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[74,113950,113948],{"__ignoreMap":72},[24,113952,113953],{},"读取 site 世界坐标:",[67,113955,113957],{"className":32846,"code":113956,"language":32848,"meta":72,"style":72},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[74,113958,113959,113972],{"__ignoreMap":72},[77,113960,113961,113963,113965,113967,113970],{"class":79,"line":80},[77,113962,106067],{"class":87},[77,113964,268],{"class":2123},[77,113966,105838],{"class":87},[77,113968,113969],{"class":271},"\"tip\"",[77,113971,2628],{"class":87},[77,113973,113974,113977,113979],{"class":79,"line":91},[77,113975,113976],{"class":87},"tip_pos ",[77,113978,268],{"class":2123},[77,113980,113981],{"class":87}," data.site_xpos[site_id]\n",[19,113983,113985],{"id":113984},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[24,113987,113988,113989,113991],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[74,113990,106463],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[67,113993,113995],{"className":32846,"code":113994,"language":32848,"meta":72,"style":72},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[74,113996,113997,114007],{"__ignoreMap":72},[77,113998,113999,114002,114004],{"class":79,"line":80},[77,114000,114001],{"class":87},"tip ",[77,114003,268],{"class":2123},[77,114005,114006],{"class":87}," data.site_xpos[tip_site_id]\n",[77,114008,114009,114012,114014],{"class":79,"line":91},[77,114010,114011],{"class":87},"target ",[77,114013,268],{"class":2123},[77,114015,114016],{"class":87}," data.site_xpos[target_site_id]\n",[24,114018,114019],{},"这样 reward 就很容易写：",[67,114021,114023],{"className":32846,"code":114022,"language":32848,"meta":72,"style":72},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[74,114024,114025,114040],{"__ignoreMap":72},[77,114026,114027,114030,114032,114035,114037],{"class":79,"line":80},[77,114028,114029],{"class":87},"dist ",[77,114031,268],{"class":2123},[77,114033,114034],{"class":87}," np.linalg.norm(tip ",[77,114036,3145],{"class":2123},[77,114038,114039],{"class":87}," target)\n",[77,114041,114042,114044,114046,114048],{"class":79,"line":91},[77,114043,113438],{"class":87},[77,114045,268],{"class":2123},[77,114047,54729],{"class":2123},[77,114049,114050],{"class":87},"dist\n",[24,114052,114053,114054,114057],{},"距离越小，",[74,114055,114056],{},"-dist"," 越接近 0，奖励越高。",[19,114059,114060],{"id":114060},"两关节机械臂的状态",[24,114062,114063],{},"这个模型有两个 hinge joint：",[67,114065,114068],{"className":114066,"code":114067,"language":7662,"meta":72},[7660],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[74,114069,114067],{"__ignoreMap":72},[24,114071,114072],{},"再加上末端和目标位置：",[67,114074,114077],{"className":114075,"code":114076,"language":7662,"meta":72},[7660],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[74,114078,114076],{"__ignoreMap":72},[24,114080,114081],{},"总维度：",[67,114083,114086],{"className":114084,"code":114085,"language":7662,"meta":72},[7660],"2 + 2 + 3 + 3 = 10\n",[74,114087,114085],{"__ignoreMap":72},[19,114089,114091],{"id":114090},"为什么-gravity-是-0","为什么 gravity 是 0",[24,114093,114094],{},"本章把重力设为：",[67,114096,114098],{"className":55525,"code":114097,"language":55527,"meta":72,"style":72},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[74,114099,114100],{"__ignoreMap":72},[77,114101,114102,114104,114106,114108,114110,114112,114114,114116,114118],{"class":79,"line":80},[77,114103,260],{"class":87},[77,114105,71609],{"class":158},[77,114107,103629],{"class":83},[77,114109,268],{"class":87},[77,114111,103634],{"class":271},[77,114113,103637],{"class":83},[77,114115,268],{"class":87},[77,114117,106204],{"class":271},[77,114119,103579],{"class":87},[24,114121,114122],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114124,103688],{"id":103687},[67,114126,114128],{"className":32846,"code":114127,"language":32848,"meta":72,"style":72},"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",[74,114129,114130,114136,114146,114150,114154,114162,114167,114172,114176,114180,114185,114190,114194,114199,114204,114209,114213,114218,114223,114228,114233,114237,114241,114245,114249,114253,114258,114263,114267,114271,114275,114279,114283,114298,114307,114319,114342,114349,114353,114357,114367,114381,114395,114402,114406,114410,114424,114436,114448,114461,114476,114493,114497,114501,114513,114525,114533,114541,114545,114561,114566,114579,114592,114607,114611,114646,114678,114682,114686,114695,114699,114715,114725,114736,114752,114768,114784,114800,114804,114822,114842,114861,114865,114869,114881],{"__ignoreMap":72},[77,114131,114132,114134],{"class":79,"line":80},[77,114133,32860],{"class":2123},[77,114135,103736],{"class":87},[77,114137,114138,114140,114142,114144],{"class":79,"line":91},[77,114139,32860],{"class":2123},[77,114141,33847],{"class":87},[77,114143,33850],{"class":2123},[77,114145,33853],{"class":87},[77,114147,114148],{"class":79,"line":107},[77,114149,4875],{"emptyLinePlaceholder":2549},[77,114151,114152],{"class":79,"line":191},[77,114153,4875],{"emptyLinePlaceholder":2549},[77,114155,114156,114158,114160],{"class":79,"line":1543},[77,114157,103749],{"class":94},[77,114159,16036],{"class":2123},[77,114161,103754],{"class":271},[77,114163,114164],{"class":79,"line":1549},[77,114165,114166],{"class":271},"\u003Cmujoco model=\"two_link_reacher\">\n",[77,114168,114169],{"class":79,"line":1566},[77,114170,114171],{"class":271},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[77,114173,114174],{"class":79,"line":1572},[77,114175,4875],{"emptyLinePlaceholder":2549},[77,114177,114178],{"class":79,"line":1589},[77,114179,103773],{"class":271},[77,114181,114182],{"class":79,"line":1595},[77,114183,114184],{"class":271},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[77,114186,114187],{"class":79,"line":4088},[77,114188,114189],{"class":271},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[77,114191,114192],{"class":79,"line":4093},[77,114193,4875],{"emptyLinePlaceholder":2549},[77,114195,114196],{"class":79,"line":4099},[77,114197,114198],{"class":271},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[77,114200,114201],{"class":79,"line":4104},[77,114202,114203],{"class":271},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[77,114205,114206],{"class":79,"line":4118},[77,114207,114208],{"class":271},"      \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",[77,114210,114211],{"class":79,"line":4123},[77,114212,4875],{"emptyLinePlaceholder":2549},[77,114214,114215],{"class":79,"line":4129},[77,114216,114217],{"class":271},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[77,114219,114220],{"class":79,"line":4150},[77,114221,114222],{"class":271},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[77,114224,114225],{"class":79,"line":4155},[77,114226,114227],{"class":271},"        \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",[77,114229,114230],{"class":79,"line":4169},[77,114231,114232],{"class":271},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[77,114234,114235],{"class":79,"line":4174},[77,114236,108871],{"class":271},[77,114238,114239],{"class":79,"line":4203},[77,114240,103802],{"class":271},[77,114242,114243],{"class":79,"line":4208},[77,114244,103807],{"class":271},[77,114246,114247],{"class":79,"line":4225},[77,114248,4875],{"emptyLinePlaceholder":2549},[77,114250,114251],{"class":79,"line":4230},[77,114252,108888],{"class":271},[77,114254,114255],{"class":79,"line":4235},[77,114256,114257],{"class":271},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[77,114259,114260],{"class":79,"line":4240},[77,114261,114262],{"class":271},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[77,114264,114265],{"class":79,"line":4254},[77,114266,108898],{"class":271},[77,114268,114269],{"class":79,"line":4259},[77,114270,103812],{"class":271},[77,114272,114273],{"class":79,"line":5052},[77,114274,98134],{"class":271},[77,114276,114277],{"class":79,"line":5066},[77,114278,4875],{"emptyLinePlaceholder":2549},[77,114280,114281],{"class":79,"line":5074},[77,114282,4875],{"emptyLinePlaceholder":2549},[77,114284,114285,114287,114290,114293,114295],{"class":79,"line":5079},[77,114286,34414],{"class":2123},[77,114288,114289],{"class":83}," site_position",[77,114291,114292],{"class":87},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[77,114294,3780],{"class":94},[77,114296,114297],{"class":87},") -> np.ndarray:\n",[77,114299,114300,114302,114304],{"class":79,"line":5085},[77,114301,105833],{"class":87},[77,114303,268],{"class":2123},[77,114305,114306],{"class":87}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[77,114308,114309,114311,114313,114315,114317],{"class":79,"line":5091},[77,114310,5576],{"class":2123},[77,114312,105882],{"class":87},[77,114314,260],{"class":2123},[77,114316,6568],{"class":94},[77,114318,6214],{"class":87},[77,114320,114321,114323,114325,114327,114329,114332,114334,114336,114338,114340],{"class":79,"line":5096},[77,114322,105865],{"class":2123},[77,114324,105868],{"class":94},[77,114326,2622],{"class":87},[77,114328,2672],{"class":2123},[77,114330,114331],{"class":271},"\"site not found: ",[77,114333,3509],{"class":94},[77,114335,82247],{"class":87},[77,114337,3558],{"class":94},[77,114339,2865],{"class":271},[77,114341,2628],{"class":87},[77,114343,114344,114346],{"class":79,"line":10422},[77,114345,6565],{"class":2123},[77,114347,114348],{"class":87}," data.site_xpos[site_id].copy()\n",[77,114350,114351],{"class":79,"line":10446},[77,114352,4875],{"emptyLinePlaceholder":2549},[77,114354,114355],{"class":79,"line":10451},[77,114356,4875],{"emptyLinePlaceholder":2549},[77,114358,114359,114361,114364],{"class":79,"line":10457},[77,114360,34414],{"class":2123},[77,114362,114363],{"class":83}," get_obs",[77,114365,114366],{"class":87},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[77,114368,114369,114372,114374,114377,114379],{"class":79,"line":10484},[77,114370,114371],{"class":87},"    tip ",[77,114373,268],{"class":2123},[77,114375,114376],{"class":87}," site_position(model, data, ",[77,114378,113969],{"class":271},[77,114380,2628],{"class":87},[77,114382,114383,114386,114388,114390,114393],{"class":79,"line":10489},[77,114384,114385],{"class":87},"    target ",[77,114387,268],{"class":2123},[77,114389,114376],{"class":87},[77,114391,114392],{"class":271},"\"target\"",[77,114394,2628],{"class":87},[77,114396,114397,114399],{"class":79,"line":10495},[77,114398,6565],{"class":2123},[77,114400,114401],{"class":87}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[77,114403,114404],{"class":79,"line":10507},[77,114405,4875],{"emptyLinePlaceholder":2549},[77,114407,114408],{"class":79,"line":10519},[77,114409,4875],{"emptyLinePlaceholder":2549},[77,114411,114412,114414,114417,114420,114422],{"class":79,"line":10531},[77,114413,34414],{"class":2123},[77,114415,114416],{"class":83}," reward",[77,114418,114419],{"class":87},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[77,114421,2661],{"class":94},[77,114423,6214],{"class":87},[77,114425,114426,114428,114430,114432,114434],{"class":79,"line":12189},[77,114427,114371],{"class":87},[77,114429,268],{"class":2123},[77,114431,114376],{"class":87},[77,114433,113969],{"class":271},[77,114435,2628],{"class":87},[77,114437,114438,114440,114442,114444,114446],{"class":79,"line":12214},[77,114439,114385],{"class":87},[77,114441,268],{"class":2123},[77,114443,114376],{"class":87},[77,114445,114392],{"class":271},[77,114447,2628],{"class":87},[77,114449,114450,114453,114455,114457,114459],{"class":79,"line":12237},[77,114451,114452],{"class":87},"    dist ",[77,114454,268],{"class":2123},[77,114456,114034],{"class":87},[77,114458,3145],{"class":2123},[77,114460,114039],{"class":87},[77,114462,114463,114466,114468,114471,114473],{"class":79,"line":12261},[77,114464,114465],{"class":87},"    control_cost ",[77,114467,268],{"class":2123},[77,114469,114470],{"class":94}," 0.01",[77,114472,8993],{"class":2123},[77,114474,114475],{"class":87}," np.sum(np.square(data.ctrl))\n",[77,114477,114478,114480,114482,114484,114486,114488,114490],{"class":79,"line":12266},[77,114479,6565],{"class":2123},[77,114481,112230],{"class":94},[77,114483,2622],{"class":87},[77,114485,3145],{"class":2123},[77,114487,114029],{"class":87},[77,114489,3145],{"class":2123},[77,114491,114492],{"class":87}," control_cost)\n",[77,114494,114495],{"class":79,"line":12271},[77,114496,4875],{"emptyLinePlaceholder":2549},[77,114498,114499],{"class":79,"line":12276},[77,114500,4875],{"emptyLinePlaceholder":2549},[77,114502,114503,114505,114507,114509,114511],{"class":79,"line":12285},[77,114504,34414],{"class":2123},[77,114506,4448],{"class":83},[77,114508,103833],{"class":87},[77,114510,98122],{"class":94},[77,114512,6214],{"class":87},[77,114514,114515,114517,114519,114521,114523],{"class":79,"line":12290},[77,114516,103842],{"class":87},[77,114518,268],{"class":2123},[77,114520,103847],{"class":87},[77,114522,103749],{"class":94},[77,114524,2628],{"class":87},[77,114526,114527,114529,114531],{"class":79,"line":12296},[77,114528,103856],{"class":87},[77,114530,268],{"class":2123},[77,114532,103861],{"class":87},[77,114534,114535,114537,114539],{"class":79,"line":12317},[77,114536,112586],{"class":87},[77,114538,268],{"class":2123},[77,114540,107194],{"class":94},[77,114542,114543],{"class":79,"line":12323},[77,114544,4875],{"emptyLinePlaceholder":2549},[77,114546,114547,114549,114551,114553,114555,114557,114559],{"class":79,"line":12337},[77,114548,5676],{"class":2123},[77,114550,34083],{"class":87},[77,114552,28511],{"class":2123},[77,114554,34910],{"class":94},[77,114556,2622],{"class":87},[77,114558,67517],{"class":94},[77,114560,33254],{"class":87},[77,114562,114563],{"class":79,"line":12343},[77,114564,114565],{"class":87},"        mujoco.mj_forward(model, data)\n",[77,114567,114568,114571,114573,114575,114577],{"class":79,"line":12370},[77,114569,114570],{"class":87},"        tip ",[77,114572,268],{"class":2123},[77,114574,114376],{"class":87},[77,114576,113969],{"class":271},[77,114578,2628],{"class":87},[77,114580,114581,114584,114586,114588,114590],{"class":79,"line":12379},[77,114582,114583],{"class":87},"        target ",[77,114585,268],{"class":2123},[77,114587,114376],{"class":87},[77,114589,114392],{"class":271},[77,114591,2628],{"class":87},[77,114593,114594,114597,114599,114602,114604],{"class":79,"line":12385},[77,114595,114596],{"class":87},"        error ",[77,114598,268],{"class":2123},[77,114600,114601],{"class":87}," target ",[77,114603,3145],{"class":2123},[77,114605,114606],{"class":87}," tip\n",[77,114608,114609],{"class":79,"line":12393},[77,114610,4875],{"emptyLinePlaceholder":2549},[77,114612,114613,114615,114617,114619,114621,114624,114626,114628,114631,114633,114636,114638,114640,114642,114644],{"class":79,"line":12398},[77,114614,109050],{"class":87},[77,114616,1939],{"class":94},[77,114618,6918],{"class":87},[77,114620,268],{"class":2123},[77,114622,114623],{"class":87}," np.clip(",[77,114625,107693],{"class":94},[77,114627,8993],{"class":2123},[77,114629,114630],{"class":87}," error[",[77,114632,2696],{"class":94},[77,114634,114635],{"class":87},"], ",[77,114637,3145],{"class":2123},[77,114639,104837],{"class":94},[77,114641,680],{"class":87},[77,114643,104837],{"class":94},[77,114645,2628],{"class":87},[77,114647,114648,114650,114652,114654,114656,114658,114660,114662,114664,114666,114668,114670,114672,114674,114676],{"class":79,"line":19074},[77,114649,109050],{"class":87},[77,114651,2120],{"class":94},[77,114653,6918],{"class":87},[77,114655,268],{"class":2123},[77,114657,114623],{"class":87},[77,114659,107693],{"class":94},[77,114661,8993],{"class":2123},[77,114663,114630],{"class":87},[77,114665,1939],{"class":94},[77,114667,114635],{"class":87},[77,114669,3145],{"class":2123},[77,114671,104837],{"class":94},[77,114673,680],{"class":87},[77,114675,104837],{"class":94},[77,114677,2628],{"class":87},[77,114679,114680],{"class":79,"line":19080},[77,114681,4875],{"emptyLinePlaceholder":2549},[77,114683,114684],{"class":79,"line":19103},[77,114685,103951],{"class":87},[77,114687,114688,114690,114692],{"class":79,"line":19109},[77,114689,112730],{"class":87},[77,114691,11950],{"class":2123},[77,114693,114694],{"class":87}," reward(model, data)\n",[77,114696,114697],{"class":79,"line":19132},[77,114698,4875],{"emptyLinePlaceholder":2549},[77,114700,114701,114703,114705,114707,114709,114711,114713],{"class":79,"line":19146},[77,114702,4972],{"class":2123},[77,114704,34083],{"class":87},[77,114706,2942],{"class":2123},[77,114708,8229],{"class":94},[77,114710,103994],{"class":2123},[77,114712,6568],{"class":94},[77,114714,6214],{"class":87},[77,114716,114717,114720,114722],{"class":79,"line":19166},[77,114718,114719],{"class":87},"            obs ",[77,114721,268],{"class":2123},[77,114723,114724],{"class":87}," get_obs(model, data)\n",[77,114726,114727,114729,114731,114733],{"class":79,"line":19172},[77,114728,37116],{"class":94},[77,114730,2622],{"class":87},[77,114732,112764],{"class":271},[77,114734,114735],{"class":87},", step)\n",[77,114737,114738,114740,114742,114745,114748,114750],{"class":79,"line":19183},[77,114739,37116],{"class":94},[77,114741,2622],{"class":87},[77,114743,114744],{"class":271},"\"  tip:\"",[77,114746,114747],{"class":87},", np.round(tip, ",[77,114749,2690],{"class":94},[77,114751,32965],{"class":87},[77,114753,114754,114756,114758,114761,114764,114766],{"class":79,"line":19206},[77,114755,37116],{"class":94},[77,114757,2622],{"class":87},[77,114759,114760],{"class":271},"\"  target:\"",[77,114762,114763],{"class":87},", np.round(target, ",[77,114765,2690],{"class":94},[77,114767,32965],{"class":87},[77,114769,114770,114772,114774,114777,114780,114782],{"class":79,"line":19228},[77,114771,37116],{"class":94},[77,114773,2622],{"class":87},[77,114775,114776],{"class":271},"\"  ctrl:\"",[77,114778,114779],{"class":87},", np.round(data.ctrl.copy(), ",[77,114781,2690],{"class":94},[77,114783,32965],{"class":87},[77,114785,114786,114788,114790,114793,114796,114798],{"class":79,"line":19233},[77,114787,37116],{"class":94},[77,114789,2622],{"class":87},[77,114791,114792],{"class":271},"\"  obs_dim:\"",[77,114794,114795],{"class":87},", obs.shape[",[77,114797,1939],{"class":94},[77,114799,7132],{"class":87},[77,114801,114802],{"class":79,"line":19239},[77,114803,4875],{"emptyLinePlaceholder":2549},[77,114805,114806,114808,114810,114812,114814,114816,114818,114820],{"class":79,"line":19253},[77,114807,33766],{"class":94},[77,114809,2622],{"class":87},[77,114811,112809],{"class":271},[77,114813,680],{"class":87},[77,114815,34485],{"class":94},[77,114817,112816],{"class":87},[77,114819,2690],{"class":94},[77,114821,32965],{"class":87},[77,114823,114824,114826,114828,114831,114834,114836,114838,114840],{"class":79,"line":19266},[77,114825,33766],{"class":94},[77,114827,2622],{"class":87},[77,114829,114830],{"class":271},"\"final tip:\"",[77,114832,114833],{"class":87},", np.round(site_position(model, data, ",[77,114835,113969],{"class":271},[77,114837,112778],{"class":87},[77,114839,2690],{"class":94},[77,114841,32965],{"class":87},[77,114843,114844,114846,114848,114851,114853,114855,114857,114859],{"class":79,"line":19271},[77,114845,33766],{"class":94},[77,114847,2622],{"class":87},[77,114849,114850],{"class":271},"\"target:\"",[77,114852,114833],{"class":87},[77,114854,114392],{"class":271},[77,114856,112778],{"class":87},[77,114858,2690],{"class":94},[77,114860,32965],{"class":87},[77,114862,114863],{"class":79,"line":19285},[77,114864,4875],{"emptyLinePlaceholder":2549},[77,114866,114867],{"class":79,"line":19290},[77,114868,4875],{"emptyLinePlaceholder":2549},[77,114870,114871,114873,114875,114877,114879],{"class":79,"line":19296},[77,114872,4008],{"class":2123},[77,114874,33687],{"class":94},[77,114876,103994],{"class":2123},[77,114878,103997],{"class":271},[77,114880,6214],{"class":87},[77,114882,114883],{"class":79,"line":19301},[77,114884,104004],{"class":87},[24,114886,106003],{},[67,114888,114890],{"className":26289,"code":114889,"language":26291,"meta":72,"style":72},"touch ch7_reacher.py\n",[74,114891,114892],{"__ignoreMap":72},[77,114893,114894,114896],{"class":79,"line":80},[77,114895,103718],{"class":83},[77,114897,114898],{"class":271}," ch7_reacher.py\n",[24,114900,112877],{},[67,114902,114904],{"className":26289,"code":114903,"language":26291,"meta":72,"style":72},"python ch7_reacher.py\n",[74,114905,114906],{"__ignoreMap":72},[77,114907,114908,114910],{"class":79,"line":80},[77,114909,32848],{"class":83},[77,114911,114898],{"class":271},[19,114913,104007],{"id":104007},[24,114915,114916],{},"读取 site 坐标：",[67,114918,114920],{"className":32846,"code":114919,"language":32848,"meta":72,"style":72},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[74,114921,114922],{"__ignoreMap":72},[77,114923,114924,114926,114928,114930,114932],{"class":79,"line":80},[77,114925,34414],{"class":2123},[77,114927,114289],{"class":83},[77,114929,114292],{"class":87},[77,114931,3780],{"class":94},[77,114933,114297],{"class":87},[24,114935,114936],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[24,114938,112893],{},[67,114940,114942],{"className":32846,"code":114941,"language":32848,"meta":72,"style":72},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[74,114943,114944],{"__ignoreMap":72},[77,114945,114946,114948],{"class":79,"line":80},[77,114947,19516],{"class":2123},[77,114949,114401],{"class":87},[24,114951,114952],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[24,114954,112218],{},[67,114956,114958],{"className":32846,"code":114957,"language":32848,"meta":72,"style":72},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[74,114959,114960,114972,114985],{"__ignoreMap":72},[77,114961,114962,114964,114966,114968,114970],{"class":79,"line":80},[77,114963,114029],{"class":87},[77,114965,268],{"class":2123},[77,114967,114034],{"class":87},[77,114969,3145],{"class":2123},[77,114971,114039],{"class":87},[77,114973,114974,114977,114979,114981,114983],{"class":79,"line":91},[77,114975,114976],{"class":87},"control_cost ",[77,114978,268],{"class":2123},[77,114980,114470],{"class":94},[77,114982,8993],{"class":2123},[77,114984,114475],{"class":87},[77,114986,114987,114989,114991,114993,114995,114997,114999],{"class":79,"line":107},[77,114988,19516],{"class":2123},[77,114990,112230],{"class":94},[77,114992,2622],{"class":87},[77,114994,3145],{"class":2123},[77,114996,114029],{"class":87},[77,114998,3145],{"class":2123},[77,115000,114492],{"class":87},[24,115002,115003],{},"奖励由两部分组成：",[139,115005,115006,115011],{},[54,115007,115008,115010],{},[74,115009,114056],{},"：末端离目标越远，奖励越低。",[54,115012,115013,115016],{},[74,115014,115015],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[24,115018,115019],{},"简单控制器：",[67,115021,115023],{"className":32846,"code":115022,"language":32848,"meta":72,"style":72},"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",[74,115024,115025,115038,115070],{"__ignoreMap":72},[77,115026,115027,115030,115032,115034,115036],{"class":79,"line":80},[77,115028,115029],{"class":87},"error ",[77,115031,268],{"class":2123},[77,115033,114601],{"class":87},[77,115035,3145],{"class":2123},[77,115037,114606],{"class":87},[77,115039,115040,115042,115044,115046,115048,115050,115052,115054,115056,115058,115060,115062,115064,115066,115068],{"class":79,"line":91},[77,115041,108304],{"class":87},[77,115043,1939],{"class":94},[77,115045,6918],{"class":87},[77,115047,268],{"class":2123},[77,115049,114623],{"class":87},[77,115051,107693],{"class":94},[77,115053,8993],{"class":2123},[77,115055,114630],{"class":87},[77,115057,2696],{"class":94},[77,115059,114635],{"class":87},[77,115061,3145],{"class":2123},[77,115063,104837],{"class":94},[77,115065,680],{"class":87},[77,115067,104837],{"class":94},[77,115069,2628],{"class":87},[77,115071,115072,115074,115076,115078,115080,115082,115084,115086,115088,115090,115092,115094,115096,115098,115100],{"class":79,"line":107},[77,115073,108304],{"class":87},[77,115075,2120],{"class":94},[77,115077,6918],{"class":87},[77,115079,268],{"class":2123},[77,115081,114623],{"class":87},[77,115083,107693],{"class":94},[77,115085,8993],{"class":2123},[77,115087,114630],{"class":87},[77,115089,1939],{"class":94},[77,115091,114635],{"class":87},[77,115093,3145],{"class":2123},[77,115095,104837],{"class":94},[77,115097,680],{"class":87},[77,115099,104837],{"class":94},[77,115101,2628],{"class":87},[24,115103,115104],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[19,115106,104143],{"id":104143},[67,115108,115109],{"className":32846,"code":114919,"language":32848,"meta":72,"style":72},[74,115110,115111],{"__ignoreMap":72},[77,115112,115113,115115,115117,115119,115121],{"class":79,"line":80},[77,115114,34414],{"class":2123},[77,115116,114289],{"class":83},[77,115118,114292],{"class":87},[77,115120,3780],{"class":94},[77,115122,114297],{"class":87},[24,115124,115125,115126,115128,115129,84976,115131,30853],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[74,115127,82247],{}," 是 site 的名字，比如 ",[74,115130,113969],{},[74,115132,114392],{},[67,115134,115136],{"className":32846,"code":115135,"language":32848,"meta":72,"style":72},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[74,115137,115138],{"__ignoreMap":72},[77,115139,115140,115142,115144],{"class":79,"line":80},[77,115141,106067],{"class":87},[77,115143,268],{"class":2123},[77,115145,114306],{"class":87},[24,115147,115148],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[67,115150,115152],{"className":32846,"code":115151,"language":32848,"meta":72,"style":72},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[74,115153,115154,115166],{"__ignoreMap":72},[77,115155,115156,115158,115160,115162,115164],{"class":79,"line":80},[77,115157,4008],{"class":2123},[77,115159,105882],{"class":87},[77,115161,260],{"class":2123},[77,115163,6568],{"class":94},[77,115165,6214],{"class":87},[77,115167,115168,115170,115172,115174,115176,115178,115180,115182,115184,115186],{"class":79,"line":91},[77,115169,106328],{"class":2123},[77,115171,105868],{"class":94},[77,115173,2622],{"class":87},[77,115175,2672],{"class":2123},[77,115177,114331],{"class":271},[77,115179,3509],{"class":94},[77,115181,82247],{"class":87},[77,115183,3558],{"class":94},[77,115185,2865],{"class":271},[77,115187,2628],{"class":87},[24,115189,115190,115191,115194,115195,115197],{},"如果 site 没找到，就主动报错。",[74,115192,115193],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[74,115196,82247],{}," 的值放进字符串里。",[67,115199,115201],{"className":32846,"code":115200,"language":32848,"meta":72,"style":72},"return data.site_xpos[site_id].copy()\n",[74,115202,115203],{"__ignoreMap":72},[77,115204,115205,115207],{"class":79,"line":80},[77,115206,19516],{"class":2123},[77,115208,114348],{"class":87},[24,115210,115211,115212,115214,115215,115218],{},"返回这个 site 的世界坐标。",[74,115213,106113],{}," 里的每一行都是一个 site 的 ",[74,115216,115217],{},"(x, y, z)"," 坐标。",[67,115220,115222],{"className":32846,"code":115221,"language":32848,"meta":72,"style":72},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[74,115223,115224],{"__ignoreMap":72},[77,115225,115226,115228,115230],{"class":79,"line":80},[77,115227,34414],{"class":2123},[77,115229,114363],{"class":83},[77,115231,114366],{"class":87},[24,115233,115234],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[67,115236,115238],{"className":32846,"code":115237,"language":32848,"meta":72,"style":72},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[74,115239,115240,115252],{"__ignoreMap":72},[77,115241,115242,115244,115246,115248,115250],{"class":79,"line":80},[77,115243,114001],{"class":87},[77,115245,268],{"class":2123},[77,115247,114376],{"class":87},[77,115249,113969],{"class":271},[77,115251,2628],{"class":87},[77,115253,115254,115256,115258,115260,115262],{"class":79,"line":91},[77,115255,114011],{"class":87},[77,115257,268],{"class":2123},[77,115259,114376],{"class":87},[77,115261,114392],{"class":271},[77,115263,2628],{"class":87},[24,115265,115266],{},"分别读取末端点和目标点的世界坐标。",[67,115268,115269],{"className":32846,"code":114941,"language":32848,"meta":72,"style":72},[74,115270,115271],{"__ignoreMap":72},[77,115272,115273,115275],{"class":79,"line":80},[77,115274,19516],{"class":2123},[77,115276,114401],{"class":87},[24,115278,115279],{},"把四部分拼成一个观测数组：",[67,115281,115284],{"className":115282,"code":115283,"language":7662,"meta":72},[7660],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[74,115285,115283],{"__ignoreMap":72},[67,115287,115289],{"className":32846,"code":115288,"language":32848,"meta":72,"style":72},"dist = np.linalg.norm(tip - target)\n",[74,115290,115291],{"__ignoreMap":72},[77,115292,115293,115295,115297,115299,115301],{"class":79,"line":80},[77,115294,114029],{"class":87},[77,115296,268],{"class":2123},[77,115298,114034],{"class":87},[77,115300,3145],{"class":2123},[77,115302,114039],{"class":87},[24,115304,115305,115306,115309,115310,115313],{},"计算 tip 到 target 的距离。",[74,115307,115308],{},"tip - target"," 得到一个三维向量，",[74,115311,115312],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[24,115315,17105],{},[67,115317,115320],{"className":115318,"code":115319,"language":7662,"meta":72},[7660],"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",[74,115321,115319],{"__ignoreMap":72},[67,115323,115325],{"className":32846,"code":115324,"language":32848,"meta":72,"style":72},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[74,115326,115327],{"__ignoreMap":72},[77,115328,115329,115331,115333,115335,115337],{"class":79,"line":80},[77,115330,114976],{"class":87},[77,115332,268],{"class":2123},[77,115334,114470],{"class":94},[77,115336,8993],{"class":2123},[77,115338,114475],{"class":87},[24,115340,115341,115342,115345,115346,115349],{},"计算动作惩罚。",[74,115343,115344],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[74,115347,115348],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[67,115351,115353],{"className":32846,"code":115352,"language":32848,"meta":72,"style":72},"return float(-dist - control_cost)\n",[74,115354,115355],{"__ignoreMap":72},[77,115356,115357,115359,115361,115363,115365,115367,115369],{"class":79,"line":80},[77,115358,19516],{"class":2123},[77,115360,112230],{"class":94},[77,115362,2622],{"class":87},[77,115364,3145],{"class":2123},[77,115366,114029],{"class":87},[77,115368,3145],{"class":2123},[77,115370,114492],{"class":87},[24,115372,115373],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[67,115375,115376],{"className":32846,"code":113236,"language":32848,"meta":72,"style":72},[74,115377,115378],{"__ignoreMap":72},[77,115379,115380,115382,115384],{"class":79,"line":80},[77,115381,113243],{"class":87},[77,115383,268],{"class":2123},[77,115385,107194],{"class":94},[24,115387,115388],{},"累计奖励变量，记录整个运行过程的总分。",[67,115390,115392],{"className":32846,"code":115391,"language":32848,"meta":72,"style":72},"for step in range(500):\n",[74,115393,115394],{"__ignoreMap":72},[77,115395,115396,115398,115400,115402,115404,115406,115408],{"class":79,"line":80},[77,115397,5500],{"class":2123},[77,115399,34083],{"class":87},[77,115401,28511],{"class":2123},[77,115403,34910],{"class":94},[77,115405,2622],{"class":87},[77,115407,67517],{"class":94},[77,115409,33254],{"class":87},[24,115411,115412],{},"运行 500 个控制步。",[67,115414,115415],{"className":32846,"code":106976,"language":32848,"meta":72,"style":72},[74,115416,115417],{"__ignoreMap":72},[77,115418,115419],{"class":79,"line":80},[77,115420,106976],{"class":87},[24,115422,115423,115424,513,115426,115428],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[74,115425,105664],{},[74,115427,105667],{}," 是当前状态下的坐标。",[67,115430,115432],{"className":32846,"code":115431,"language":32848,"meta":72,"style":72},"error = target - tip\n",[74,115433,115434],{"__ignoreMap":72},[77,115435,115436,115438,115440,115442,115444],{"class":79,"line":80},[77,115437,115029],{"class":87},[77,115439,268],{"class":2123},[77,115441,114601],{"class":87},[77,115443,3145],{"class":2123},[77,115445,114606],{"class":87},[24,115447,115448],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[67,115450,115452],{"className":32846,"code":115451,"language":32848,"meta":72,"style":72},"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",[74,115453,115454,115486],{"__ignoreMap":72},[77,115455,115456,115458,115460,115462,115464,115466,115468,115470,115472,115474,115476,115478,115480,115482,115484],{"class":79,"line":80},[77,115457,108304],{"class":87},[77,115459,1939],{"class":94},[77,115461,6918],{"class":87},[77,115463,268],{"class":2123},[77,115465,114623],{"class":87},[77,115467,107693],{"class":94},[77,115469,8993],{"class":2123},[77,115471,114630],{"class":87},[77,115473,2696],{"class":94},[77,115475,114635],{"class":87},[77,115477,3145],{"class":2123},[77,115479,104837],{"class":94},[77,115481,680],{"class":87},[77,115483,104837],{"class":94},[77,115485,2628],{"class":87},[77,115487,115488,115490,115492,115494,115496,115498,115500,115502,115504,115506,115508,115510,115512,115514,115516],{"class":79,"line":91},[77,115489,108304],{"class":87},[77,115491,2120],{"class":94},[77,115493,6918],{"class":87},[77,115495,268],{"class":2123},[77,115497,114623],{"class":87},[77,115499,107693],{"class":94},[77,115501,8993],{"class":2123},[77,115503,114630],{"class":87},[77,115505,1939],{"class":94},[77,115507,114635],{"class":87},[77,115509,3145],{"class":2123},[77,115511,104837],{"class":94},[77,115513,680],{"class":87},[77,115515,104837],{"class":94},[77,115517,2628],{"class":87},[24,115519,115520,115521,115524],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[74,115522,115523],{},"error -> ctrl -> step"," 的流程。",[67,115526,115527],{"className":32846,"code":106938,"language":32848,"meta":72,"style":72},[74,115528,115529],{"__ignoreMap":72},[77,115530,115531],{"class":79,"line":80},[77,115532,106938],{"class":87},[24,115534,115535],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[67,115537,115539],{"className":32846,"code":115538,"language":32848,"meta":72,"style":72},"obs = get_obs(model, data)\n",[74,115540,115541],{"__ignoreMap":72},[77,115542,115543,115545,115547],{"class":79,"line":80},[77,115544,113287],{"class":87},[77,115546,268],{"class":2123},[77,115548,114724],{"class":87},[24,115550,115551,115552,115555],{},"读取最新观测。后面打印 ",[74,115553,115554],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115557,104750],{"id":104749},[24,115559,115560],{},"观测维度为:",[67,115562,115565],{"className":115563,"code":115564,"language":7662,"meta":72},[7660],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[74,115566,115564],{"__ignoreMap":72},[24,115568,115569],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[24,115571,115572],{},"程序每 100 步打印：",[67,115574,115577],{"className":115575,"code":115576,"language":7662,"meta":72},[7660],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[74,115578,115576],{"__ignoreMap":72},[24,115580,115581,115582,115584],{},"如果控制有效，你应该看到最终 ",[74,115583,105664],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115586,104782],{"id":104781},[139,115588,115589,115592,115595,115601,115607,115614,115624],{},[54,115590,115591],{},"修改目标点位置。",[54,115593,115594],{},"重新运行，观察最终 tip 是否变化。",[54,115596,115597,115598,115600],{},"把 gravity 改成 ",[74,115599,105023],{},"，观察控制是否变差。",[54,115602,113614,115603,113618,115605,30853],{},[74,115604,104592],{},[74,115606,2696],{},[54,115608,104845,115609,104848,115611,115613],{},[74,115610,113029],{},[74,115612,109740],{},"，观察机械臂是否更难移动。",[54,115615,104845,115616,84967,115618,104848,115620,115623],{},[74,115617,105667],{},[74,115619,106579],{},[74,115621,115622],{},"0.2 0 0.6","，观察 reward 和 final tip。",[54,115625,115626],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115628,104887],{"id":104886},[19,115630,115632],{"id":115631},"site-not-found",[74,115633,115634],{},"site not found",[24,115636,115637,115638,513,115641,30853],{},"检查 XML 中是否有 ",[74,115639,115640],{},"site name=\"tip\"",[74,115642,115643],{},"site name=\"target\"",[19,115645,115646],{"id":115646},"机械臂完全不动",[24,115648,104957],{},[139,115650,115651,115656,115659,115664],{},[54,115652,115653,115655],{},[74,115654,104592],{}," 是否为 2",[54,115657,115658],{},"actuator 是否引用正确 joint",[54,115660,115661,115663],{},[74,115662,103511],{}," 是否被赋值",[54,115665,115666,115667],{},"是否执行了 ",[74,115668,103121],{},[19,115670,115671],{"id":115671},"控制效果不好",[24,115673,115674],{},"正常。本章重点不是控制器最优，而是任务结构:",[67,115676,115679],{"className":115677,"code":115678,"language":7662,"meta":72},[7660],"obs → action → mj_step → reward → next_obs\n",[74,115680,115678],{"__ignoreMap":72},[19,115682,115684],{"id":115683},"tip-坐标不变化","tip 坐标不变化",[24,115686,105009],{},[139,115688,115689,115694,115702,115711],{},[54,115690,115691,115692,30853],{},"是否每步调用了 ",[74,115693,103121],{},[54,115695,115696,115697,513,115699,30853],{},"是否写入了 ",[74,115698,108559],{},[74,115700,115701],{},"data.ctrl[1]",[54,115703,115704,115705,2828,115708,30853],{},"actuator 是否正确引用 ",[74,115706,115707],{},"joint1",[74,115709,115710],{},"joint2",[54,115712,115713],{},"控制输入是否太小。",[19,115715,115716],{"id":115716},"目标点不会动",[24,115718,115719],{},"本章的 target 是固定 site：",[67,115721,115723],{"className":55525,"code":115722,"language":55527,"meta":72,"style":72},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[74,115724,115725],{"__ignoreMap":72},[77,115726,115727,115729,115731,115733,115735,115737,115739,115741,115744],{"class":79,"line":80},[77,115728,260],{"class":87},[77,115730,105643],{"class":158},[77,115732,2495],{"class":83},[77,115734,268],{"class":87},[77,115736,114392],{"class":271},[77,115738,103541],{"class":83},[77,115740,268],{"class":87},[77,115742,115743],{"class":271},"\"0.5 0 0.4\"",[77,115745,115746],{"class":87}," ...\u002F>\n",[24,115748,115749,115750,115752],{},"它直接挂在 ",[74,115751,104276],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[19,115754,115755],{"id":115755},"机械臂不像真实机械臂",[24,115757,115758],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115760,105041],{"id":105040},[24,115762,115763],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[24,115765,115766],{},"核心公式：",[67,115768,115771],{"className":115769,"code":115770,"language":7662,"meta":72},[7660],"distance = ||tip - target||\nreward = -distance - action_cost\n",[74,115772,115770],{"__ignoreMap":72},[24,115774,115775],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2520,115777,115778],{},"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":72,"searchDepth":91,"depth":91,"links":115780},[115781,115782,115783,115788,115792,115793,115794,115802],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":115784},[115785,115786,115787],{"id":113984,"depth":107,"text":113985},{"id":114060,"depth":107,"text":114060},{"id":114090,"depth":107,"text":114091},{"id":103687,"depth":91,"text":103688,"children":115789},[115790,115791],{"id":104007,"depth":107,"text":104007},{"id":104143,"depth":107,"text":104143},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":115795},[115796,115797,115798,115799,115800,115801],{"id":115631,"depth":107,"text":115634},{"id":115646,"depth":107,"text":115646},{"id":115671,"depth":107,"text":115671},{"id":115683,"depth":107,"text":115684},{"id":115716,"depth":107,"text":115716},{"id":115755,"depth":107,"text":115755},{"id":105040,"depth":91,"text":105041},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113788,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115809,"title":115810,"body":115811,"description":72,"extension":2547,"meta":119272,"navigation":2549,"path":119273,"seo":119274,"stem":119275,"__hash__":119276},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115812,"toc":119243},[115813,115816,115818,115821,115824,115849,115852,115858,115861,115867,115869,115871,115895,115897,115915,115917,115960,115962,115989,115991,115994,116046,116049,116055,116064,116067,116105,116108,116147,116150,116158,116165,116168,116174,116176,116230,116237,116282,116285,116289,116305,116315,116317,117578,117580,117592,117594,117605,117607,117610,117631,117634,117637,117670,117676,117679,117712,117715,117718,117759,117764,117778,117781,117794,117799,117822,117824,117839,117849,117864,117871,117891,117906,117924,117927,117944,117952,117968,117974,118006,118019,118051,118061,118096,118110,118156,118170,118212,118223,118236,118242,118275,118278,118305,118315,118355,118365,118382,118389,118407,118410,118451,118464,118479,118482,118505,118508,118520,118523,118542,118547,118568,118571,118586,118589,118623,118635,118650,118653,118678,118681,118700,118703,118735,118738,118762,118768,118798,118805,118818,118821,118823,118825,118831,118834,118837,118849,118852,118854,118907,118909,118913,118919,118928,118931,118938,118940,118963,118966,118970,118972,118990,118996,118998,119031,119034,119040,119044,119047,119067,119072,119076,119083,119103,119108,119112,119115,119135,119138,119224,119228,119231,119237,119240],[10,115814,115810],{"id":115815},"_8gymnasium-风格强化学习接口基础",[14,115817,103083],{"id":103082},[24,115819,115820],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[24,115822,115823],{},"你将实现:",[67,115825,115827],{"className":32846,"code":115826,"language":32848,"meta":72,"style":72},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[74,115828,115829,115839],{"__ignoreMap":72},[77,115830,115831,115834,115836],{"class":79,"line":80},[77,115832,115833],{"class":87},"obs, info ",[77,115835,268],{"class":2123},[77,115837,115838],{"class":87}," env.reset()\n",[77,115840,115841,115844,115846],{"class":79,"line":91},[77,115842,115843],{"class":87},"obs, reward, terminated, truncated, info ",[77,115845,268],{"class":2123},[77,115847,115848],{"class":87}," env.step(action)\n",[24,115850,115851],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[24,115853,115854,115855,115857],{},"前面章节的代码都是“脚本式”的：在 ",[74,115856,104729],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[24,115859,115860],{},"可以先记住 Gymnasium 环境的核心交互：",[67,115862,115865],{"className":115863,"code":115864,"language":7662,"meta":72},[7660],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[74,115866,115864],{"__ignoreMap":72},[14,115868,103206],{"id":103205},[24,115870,103209],{},[67,115872,115873],{"className":26289,"code":106821,"language":26291,"meta":72,"style":72},[74,115874,115875],{"__ignoreMap":72},[77,115876,115877,115879,115881,115883,115885,115887,115889,115891,115893],{"class":79,"line":80},[77,115878,27044],{"class":83},[77,115880,28783],{"class":271},[77,115882,26301],{"class":271},[77,115884,28868],{"class":94},[77,115886,106836],{"class":271},[77,115888,103234],{"class":271},[77,115890,104935],{"class":271},[77,115892,103250],{"class":271},[77,115894,106845],{"class":271},[24,115896,105252],{},[67,115898,115900],{"className":26289,"code":115899,"language":26291,"meta":72,"style":72},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[74,115901,115902],{"__ignoreMap":72},[77,115903,115904,115906,115908,115910,115912],{"class":79,"line":80},[77,115905,26298],{"class":83},[77,115907,26301],{"class":271},[77,115909,103366],{"class":271},[77,115911,110144],{"class":271},[77,115913,115914],{"class":271}," gymnasium\n",[24,115916,105269],{},[67,115918,115920],{"className":26289,"code":115919,"language":26291,"meta":72,"style":72},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[74,115921,115922,115939,115948],{"__ignoreMap":72},[77,115923,115924,115926,115928,115930,115933,115935,115937],{"class":79,"line":80},[77,115925,32798],{"class":83},[77,115927,31644],{"class":271},[77,115929,27583],{"class":94},[77,115931,115932],{"class":271}," mujoco-gym-api",[77,115934,103411],{"class":271},[77,115936,103414],{"class":94},[77,115938,103417],{"class":94},[77,115940,115941,115943,115945],{"class":79,"line":91},[77,115942,32798],{"class":83},[77,115944,103424],{"class":271},[77,115946,115947],{"class":271}," mujoco-gym-api\n",[77,115949,115950,115952,115954,115956,115958],{"class":79,"line":107},[77,115951,26298],{"class":83},[77,115953,26301],{"class":271},[77,115955,103366],{"class":271},[77,115957,110144],{"class":271},[77,115959,115914],{"class":271},[24,115961,103440],{},[139,115963,115964,115974,115977,115983],{},[54,115965,115966,115967,115970,115971,30853],{},"本章使用 ",[74,115968,115969],{},"gymnasium","，不是旧版 ",[74,115972,115973],{},"gym",[54,115975,115976],{},"Gymnasium API 与旧 Gym API 有差异。",[54,115978,115979,115980,30853],{},"旧 Gym 常见返回值是 4 个: ",[74,115981,115982],{},"obs, reward, done, info",[54,115984,115985,115986,30853],{},"Gymnasium 返回值是 5 个: ",[74,115987,115988],{},"obs, reward, terminated, truncated, info",[14,115990,103480],{"id":103479},[24,115992,115993],{},"强化学习环境接口包含:",[2755,115995,115996,116005],{},[2758,115997,115998],{},[2761,115999,116000,116003],{},[2764,116001,116002],{"align":101},"方法",[2764,116004,105129],{"align":101},[2801,116006,116007,116017,116027,116037],{},[2761,116008,116009,116014],{},[2806,116010,116011],{"align":101},[74,116012,116013],{},"reset()",[2806,116015,116016],{"align":101},"重置环境",[2761,116018,116019,116024],{},[2806,116020,116021],{"align":101},[74,116022,116023],{},"step(action)",[2806,116025,116026],{"align":101},"执行动作",[2761,116028,116029,116034],{},[2806,116030,116031],{"align":101},[74,116032,116033],{},"observation_space",[2806,116035,116036],{"align":101},"观测空间",[2761,116038,116039,116044],{},[2806,116040,116041],{"align":101},[74,116042,116043],{},"action_space",[2806,116045,26122],{"align":101},[24,116047,116048],{},"一个最小环境需要完成:",[67,116050,116053],{"className":116051,"code":116052,"language":7662,"meta":72},[7660],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[74,116054,116052],{"__ignoreMap":72},[19,116056,116058,513,116061,107071],{"id":116057},"terminated-和-truncated-的区别",[74,116059,116060],{},"terminated",[74,116062,116063],{},"truncated",[24,116065,116066],{},"Gymnasium 把“结束”拆成两个概念：",[2755,116068,116069,116079],{},[2758,116070,116071],{},[2761,116072,116073,116075,116077],{},[2764,116074,107007],{"align":101},[2764,116076,103136],{"align":101},[2764,116078,23657],{"align":101},[2801,116080,116081,116093],{},[2761,116082,116083,116087,116090],{},[2806,116084,116085],{"align":101},[74,116086,116060],{},[2806,116088,116089],{"align":101},"任务自然结束",[2806,116091,116092],{"align":101},"机械臂到达目标、机器人摔倒",[2761,116094,116095,116099,116102],{},[2806,116096,116097],{"align":101},[74,116098,116063],{},[2806,116100,116101],{"align":101},"因外部限制截断",[2806,116103,116104],{"align":101},"达到最大步数、时间限制",[24,116106,116107],{},"本章中：",[67,116109,116111],{"className":32846,"code":116110,"language":32848,"meta":72,"style":72},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[74,116112,116113,116128],{"__ignoreMap":72},[77,116114,116115,116118,116120,116123,116125],{"class":79,"line":80},[77,116116,116117],{"class":87},"terminated ",[77,116119,268],{"class":2123},[77,116121,116122],{"class":87}," dist ",[77,116124,260],{"class":2123},[77,116126,116127],{"class":94}," 0.05\n",[77,116129,116130,116133,116135,116137,116140,116142,116144],{"class":79,"line":91},[77,116131,116132],{"class":87},"truncated ",[77,116134,268],{"class":2123},[77,116136,41339],{"class":94},[77,116138,116139],{"class":87},".steps ",[77,116141,4186],{"class":2123},[77,116143,41339],{"class":94},[77,116145,116146],{"class":87},".max_steps\n",[24,116148,116149],{},"也就是：",[139,116151,116152,116155],{},[54,116153,116154],{},"末端距离目标小于 0.05，任务成功结束。",[54,116156,116157],{},"步数超过上限，episode 被截断。",[19,116159,116161,513,116163],{"id":116160},"observation_space-和-action_space",[74,116162,116033],{},[74,116164,116043],{},[24,116166,116167],{},"这两个对象告诉算法：",[67,116169,116172],{"className":116170,"code":116171,"language":7662,"meta":72},[7660],"观测长什么样\n动作允许多大\n",[74,116173,116171],{"__ignoreMap":72},[24,116175,17105],{},[67,116177,116179],{"className":32846,"code":116178,"language":32848,"meta":72,"style":72},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[74,116180,116181],{"__ignoreMap":72},[77,116182,116183,116185,116188,116190,116193,116196,116199,116201,116203,116206,116208,116210,116212,116214,116216,116218,116220,116223,116225,116227],{"class":79,"line":80},[77,116184,33291],{"class":94},[77,116186,116187],{"class":87},".action_space ",[77,116189,268],{"class":2123},[77,116191,116192],{"class":87}," spaces.Box(",[77,116194,116195],{"class":7691},"low",[77,116197,116198],{"class":2123},"=-",[77,116200,104837],{"class":94},[77,116202,680],{"class":87},[77,116204,116205],{"class":7691},"high",[77,116207,268],{"class":2123},[77,116209,104837],{"class":94},[77,116211,680],{"class":87},[77,116213,98399],{"class":7691},[77,116215,268],{"class":2123},[77,116217,2622],{"class":87},[77,116219,2696],{"class":94},[77,116221,116222],{"class":87},",), ",[77,116224,95936],{"class":7691},[77,116226,268],{"class":2123},[77,116228,116229],{"class":87},"np.float32)\n",[24,116231,116232,116233,116236],{},"表示动作是 2 维数组，每个值都在 ",[74,116234,116235],{},"[-1, 1]"," 范围内。",[67,116238,116240],{"className":32846,"code":116239,"language":32848,"meta":72,"style":72},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[74,116241,116242],{"__ignoreMap":72},[77,116243,116244,116246,116249,116251,116253,116255,116257,116260,116262,116264,116266,116268,116270,116272,116274,116276,116278,116280],{"class":79,"line":80},[77,116245,33291],{"class":94},[77,116247,116248],{"class":87},".observation_space ",[77,116250,268],{"class":2123},[77,116252,116192],{"class":87},[77,116254,116195],{"class":7691},[77,116256,116198],{"class":2123},[77,116258,116259],{"class":87},"np.inf, ",[77,116261,116205],{"class":7691},[77,116263,268],{"class":2123},[77,116265,116259],{"class":87},[77,116267,98399],{"class":7691},[77,116269,268],{"class":2123},[77,116271,2622],{"class":87},[77,116273,3059],{"class":94},[77,116275,116222],{"class":87},[77,116277,95936],{"class":7691},[77,116279,268],{"class":2123},[77,116281,116229],{"class":87},[24,116283,116284],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[19,116286,116288],{"id":116287},"frame_skip-是什么","frame_skip 是什么",[67,116290,116292],{"className":32846,"code":116291,"language":32848,"meta":72,"style":72},"self.frame_skip = 5\n",[74,116293,116294],{"__ignoreMap":72},[77,116295,116296,116298,116301,116303],{"class":79,"line":80},[77,116297,33291],{"class":94},[77,116299,116300],{"class":87},".frame_skip ",[77,116302,268],{"class":2123},[77,116304,56881],{"class":94},[24,116306,116307,116308,116311,116312,116314],{},"表示外部调用一次 ",[74,116309,116310],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[74,116313,103650],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116316,103688],{"id":103687},[67,116318,116320],{"className":32846,"code":116319,"language":32848,"meta":72,"style":72},"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",[74,116321,116322,116334,116340,116350,116361,116365,116369,116377,116382,116386,116390,116394,116398,116402,116406,116410,116415,116419,116423,116427,116432,116436,116440,116444,116448,116452,116456,116460,116464,116468,116472,116476,116480,116484,116502,116517,116521,116534,116544,116559,116576,116580,116601,116620,116645,116659,116663,116673,116685,116695,116699,116741,116779,116783,116793,116809,116824,116843,116850,116854,116867,116882,116897,116910,116929,116945,116949,116990,117005,117020,117024,117063,117074,117087,117091,117101,117110,117114,117124,117139,117157,117161,117172,117189,117202,117206,117216,117220,117231,117242,117246,117260,117274,117290,117294,117307,117324,117339,117346,117350,117354,117366,117376,117394,117406,117418,117422,117430,117446,117455,117464,117472,117514,117527,117532,117536,117554,117558,117562,117574],{"__ignoreMap":72},[77,116323,116324,116326,116329,116331],{"class":79,"line":80},[77,116325,32860],{"class":2123},[77,116327,116328],{"class":87}," gymnasium ",[77,116330,33850],{"class":2123},[77,116332,116333],{"class":87}," gym\n",[77,116335,116336,116338],{"class":79,"line":91},[77,116337,32860],{"class":2123},[77,116339,103736],{"class":87},[77,116341,116342,116344,116346,116348],{"class":79,"line":107},[77,116343,32860],{"class":2123},[77,116345,33847],{"class":87},[77,116347,33850],{"class":2123},[77,116349,33853],{"class":87},[77,116351,116352,116354,116356,116358],{"class":79,"line":191},[77,116353,33205],{"class":2123},[77,116355,116328],{"class":87},[77,116357,32860],{"class":2123},[77,116359,116360],{"class":87}," spaces\n",[77,116362,116363],{"class":79,"line":1543},[77,116364,4875],{"emptyLinePlaceholder":2549},[77,116366,116367],{"class":79,"line":1549},[77,116368,4875],{"emptyLinePlaceholder":2549},[77,116370,116371,116373,116375],{"class":79,"line":1566},[77,116372,103749],{"class":94},[77,116374,16036],{"class":2123},[77,116376,103754],{"class":271},[77,116378,116379],{"class":79,"line":1572},[77,116380,116381],{"class":271},"\u003Cmujoco model=\"gym_reacher\">\n",[77,116383,116384],{"class":79,"line":1589},[77,116385,114171],{"class":271},[77,116387,116388],{"class":79,"line":1595},[77,116389,4875],{"emptyLinePlaceholder":2549},[77,116391,116392],{"class":79,"line":4088},[77,116393,103773],{"class":271},[77,116395,116396],{"class":79,"line":4093},[77,116397,114189],{"class":271},[77,116399,116400],{"class":79,"line":4099},[77,116401,4875],{"emptyLinePlaceholder":2549},[77,116403,116404],{"class":79,"line":4104},[77,116405,114198],{"class":271},[77,116407,116408],{"class":79,"line":4118},[77,116409,114203],{"class":271},[77,116411,116412],{"class":79,"line":4123},[77,116413,116414],{"class":271},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[77,116416,116417],{"class":79,"line":4129},[77,116418,4875],{"emptyLinePlaceholder":2549},[77,116420,116421],{"class":79,"line":4150},[77,116422,114217],{"class":271},[77,116424,116425],{"class":79,"line":4155},[77,116426,114222],{"class":271},[77,116428,116429],{"class":79,"line":4169},[77,116430,116431],{"class":271},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[77,116433,116434],{"class":79,"line":4174},[77,116435,114232],{"class":271},[77,116437,116438],{"class":79,"line":4203},[77,116439,108871],{"class":271},[77,116441,116442],{"class":79,"line":4208},[77,116443,103802],{"class":271},[77,116445,116446],{"class":79,"line":4225},[77,116447,103807],{"class":271},[77,116449,116450],{"class":79,"line":4230},[77,116451,4875],{"emptyLinePlaceholder":2549},[77,116453,116454],{"class":79,"line":4235},[77,116455,108888],{"class":271},[77,116457,116458],{"class":79,"line":4240},[77,116459,114257],{"class":271},[77,116461,116462],{"class":79,"line":4254},[77,116463,114262],{"class":271},[77,116465,116466],{"class":79,"line":4259},[77,116467,108898],{"class":271},[77,116469,116470],{"class":79,"line":5052},[77,116471,103812],{"class":271},[77,116473,116474],{"class":79,"line":5066},[77,116475,98134],{"class":271},[77,116477,116478],{"class":79,"line":5074},[77,116479,4875],{"emptyLinePlaceholder":2549},[77,116481,116482],{"class":79,"line":5079},[77,116483,4875],{"emptyLinePlaceholder":2549},[77,116485,116486,116488,116491,116493,116495,116497,116500],{"class":79,"line":5085},[77,116487,17166],{"class":2123},[77,116489,116490],{"class":83}," ReacherEnv",[77,116492,2622],{"class":87},[77,116494,115973],{"class":83},[77,116496,3171],{"class":87},[77,116498,116499],{"class":83},"Env",[77,116501,33254],{"class":87},[77,116503,116504,116507,116509,116511,116514],{"class":79,"line":5091},[77,116505,116506],{"class":87},"    metadata ",[77,116508,268],{"class":2123},[77,116510,6923],{"class":87},[77,116512,116513],{"class":271},"\"render_modes\"",[77,116515,116516],{"class":87},": []}\n",[77,116518,116519],{"class":79,"line":5096},[77,116520,4875],{"emptyLinePlaceholder":2549},[77,116522,116523,116525,116527,116530,116532],{"class":79,"line":10422},[77,116524,33269],{"class":2123},[77,116526,33272],{"class":94},[77,116528,116529],{"class":87},"(self) -> ",[77,116531,98122],{"class":94},[77,116533,6214],{"class":87},[77,116535,116536,116538,116540,116542],{"class":79,"line":10446},[77,116537,33285],{"class":94},[77,116539,19731],{"class":87},[77,116541,33297],{"class":94},[77,116543,4451],{"class":87},[77,116545,116546,116548,116551,116553,116555,116557],{"class":79,"line":10451},[77,116547,33313],{"class":94},[77,116549,116550],{"class":87},".model ",[77,116552,268],{"class":2123},[77,116554,103847],{"class":87},[77,116556,103749],{"class":94},[77,116558,2628],{"class":87},[77,116560,116561,116563,116566,116568,116571,116573],{"class":79,"line":10457},[77,116562,33313],{"class":94},[77,116564,116565],{"class":87},".data ",[77,116567,268],{"class":2123},[77,116569,116570],{"class":87}," mujoco.MjData(",[77,116572,33291],{"class":94},[77,116574,116575],{"class":87},".model)\n",[77,116577,116578],{"class":79,"line":10484},[77,116579,4875],{"emptyLinePlaceholder":2549},[77,116581,116582,116584,116587,116589,116592,116594,116597,116599],{"class":79,"line":10489},[77,116583,33313],{"class":94},[77,116585,116586],{"class":87},".tip_site_id ",[77,116588,268],{"class":2123},[77,116590,116591],{"class":87}," mujoco.mj_name2id(",[77,116593,33291],{"class":94},[77,116595,116596],{"class":87},".model, mujoco.mjtObj.mjOBJ_SITE, ",[77,116598,113969],{"class":271},[77,116600,2628],{"class":87},[77,116602,116603,116605,116608,116610,116612,116614,116616,116618],{"class":79,"line":10495},[77,116604,33313],{"class":94},[77,116606,116607],{"class":87},".target_site_id ",[77,116609,268],{"class":2123},[77,116611,116591],{"class":87},[77,116613,33291],{"class":94},[77,116615,116596],{"class":87},[77,116617,114392],{"class":271},[77,116619,2628],{"class":87},[77,116621,116622,116624,116626,116628,116630,116632,116635,116637,116639,116641,116643],{"class":79,"line":10507},[77,116623,4972],{"class":2123},[77,116625,41339],{"class":94},[77,116627,116586],{"class":87},[77,116629,260],{"class":2123},[77,116631,6568],{"class":94},[77,116633,116634],{"class":2123}," or",[77,116636,41339],{"class":94},[77,116638,116607],{"class":87},[77,116640,260],{"class":2123},[77,116642,6568],{"class":94},[77,116644,6214],{"class":87},[77,116646,116647,116650,116652,116654,116657],{"class":79,"line":10519},[77,116648,116649],{"class":2123},"            raise",[77,116651,105868],{"class":94},[77,116653,2622],{"class":87},[77,116655,116656],{"class":271},"\"required sites not found\"",[77,116658,2628],{"class":87},[77,116660,116661],{"class":79,"line":10531},[77,116662,4875],{"emptyLinePlaceholder":2549},[77,116664,116665,116667,116669,116671],{"class":79,"line":12189},[77,116666,33313],{"class":94},[77,116668,116300],{"class":87},[77,116670,268],{"class":2123},[77,116672,56881],{"class":94},[77,116674,116675,116677,116680,116682],{"class":79,"line":12214},[77,116676,33313],{"class":94},[77,116678,116679],{"class":87},".max_steps ",[77,116681,268],{"class":2123},[77,116683,116684],{"class":94}," 200\n",[77,116686,116687,116689,116691,116693],{"class":79,"line":12237},[77,116688,33313],{"class":94},[77,116690,116139],{"class":87},[77,116692,268],{"class":2123},[77,116694,49799],{"class":94},[77,116696,116697],{"class":79,"line":12261},[77,116698,4875],{"emptyLinePlaceholder":2549},[77,116700,116701,116703,116705,116707,116709,116711,116713,116715,116717,116719,116721,116723,116725,116727,116729,116731,116733,116735,116737,116739],{"class":79,"line":12266},[77,116702,33313],{"class":94},[77,116704,116187],{"class":87},[77,116706,268],{"class":2123},[77,116708,116192],{"class":87},[77,116710,116195],{"class":7691},[77,116712,116198],{"class":2123},[77,116714,104837],{"class":94},[77,116716,680],{"class":87},[77,116718,116205],{"class":7691},[77,116720,268],{"class":2123},[77,116722,104837],{"class":94},[77,116724,680],{"class":87},[77,116726,98399],{"class":7691},[77,116728,268],{"class":2123},[77,116730,2622],{"class":87},[77,116732,2696],{"class":94},[77,116734,116222],{"class":87},[77,116736,95936],{"class":7691},[77,116738,268],{"class":2123},[77,116740,116229],{"class":87},[77,116742,116743,116745,116747,116749,116751,116753,116755,116757,116759,116761,116763,116765,116767,116769,116771,116773,116775,116777],{"class":79,"line":12271},[77,116744,33313],{"class":94},[77,116746,116248],{"class":87},[77,116748,268],{"class":2123},[77,116750,116192],{"class":87},[77,116752,116195],{"class":7691},[77,116754,116198],{"class":2123},[77,116756,116259],{"class":87},[77,116758,116205],{"class":7691},[77,116760,268],{"class":2123},[77,116762,116259],{"class":87},[77,116764,98399],{"class":7691},[77,116766,268],{"class":2123},[77,116768,2622],{"class":87},[77,116770,3059],{"class":94},[77,116772,116222],{"class":87},[77,116774,95936],{"class":7691},[77,116776,268],{"class":2123},[77,116778,116229],{"class":87},[77,116780,116781],{"class":79,"line":12276},[77,116782,4875],{"emptyLinePlaceholder":2549},[77,116784,116785,116787,116790],{"class":79,"line":12285},[77,116786,33269],{"class":2123},[77,116788,116789],{"class":83}," _get_obs",[77,116791,116792],{"class":87},"(self) -> np.ndarray:\n",[77,116794,116795,116797,116799,116801,116804,116806],{"class":79,"line":12290},[77,116796,114570],{"class":87},[77,116798,268],{"class":2123},[77,116800,41339],{"class":94},[77,116802,116803],{"class":87},".data.site_xpos[",[77,116805,33291],{"class":94},[77,116807,116808],{"class":87},".tip_site_id].copy()\n",[77,116810,116811,116813,116815,116817,116819,116821],{"class":79,"line":12296},[77,116812,114583],{"class":87},[77,116814,268],{"class":2123},[77,116816,41339],{"class":94},[77,116818,116803],{"class":87},[77,116820,33291],{"class":94},[77,116822,116823],{"class":87},".target_site_id].copy()\n",[77,116825,116826,116828,116830,116833,116835,116838,116840],{"class":79,"line":12317},[77,116827,112615],{"class":87},[77,116829,268],{"class":2123},[77,116831,116832],{"class":87}," np.concatenate([",[77,116834,33291],{"class":94},[77,116836,116837],{"class":87},".data.qpos.copy(), ",[77,116839,33291],{"class":94},[77,116841,116842],{"class":87},".data.qvel.copy(), tip, target])\n",[77,116844,116845,116847],{"class":79,"line":12323},[77,116846,17224],{"class":2123},[77,116848,116849],{"class":87}," obs.astype(np.float32)\n",[77,116851,116852],{"class":79,"line":12337},[77,116853,4875],{"emptyLinePlaceholder":2549},[77,116855,116856,116858,116861,116863,116865],{"class":79,"line":12343},[77,116857,33269],{"class":2123},[77,116859,116860],{"class":83}," _get_reward",[77,116862,116529],{"class":87},[77,116864,2661],{"class":94},[77,116866,6214],{"class":87},[77,116868,116869,116871,116873,116875,116877,116879],{"class":79,"line":12370},[77,116870,114570],{"class":87},[77,116872,268],{"class":2123},[77,116874,41339],{"class":94},[77,116876,116803],{"class":87},[77,116878,33291],{"class":94},[77,116880,116881],{"class":87},".tip_site_id]\n",[77,116883,116884,116886,116888,116890,116892,116894],{"class":79,"line":12379},[77,116885,114583],{"class":87},[77,116887,268],{"class":2123},[77,116889,41339],{"class":94},[77,116891,116803],{"class":87},[77,116893,33291],{"class":94},[77,116895,116896],{"class":87},".target_site_id]\n",[77,116898,116899,116902,116904,116906,116908],{"class":79,"line":12385},[77,116900,116901],{"class":87},"        dist ",[77,116903,268],{"class":2123},[77,116905,114034],{"class":87},[77,116907,3145],{"class":2123},[77,116909,114039],{"class":87},[77,116911,116912,116915,116917,116919,116921,116924,116926],{"class":79,"line":12393},[77,116913,116914],{"class":87},"        control_cost ",[77,116916,268],{"class":2123},[77,116918,114470],{"class":94},[77,116920,8993],{"class":2123},[77,116922,116923],{"class":87}," np.sum(np.square(",[77,116925,33291],{"class":94},[77,116927,116928],{"class":87},".data.ctrl))\n",[77,116930,116931,116933,116935,116937,116939,116941,116943],{"class":79,"line":12398},[77,116932,17224],{"class":2123},[77,116934,112230],{"class":94},[77,116936,2622],{"class":87},[77,116938,3145],{"class":2123},[77,116940,114029],{"class":87},[77,116942,3145],{"class":2123},[77,116944,114492],{"class":87},[77,116946,116947],{"class":79,"line":19074},[77,116948,4875],{"emptyLinePlaceholder":2549},[77,116950,116951,116953,116956,116959,116961,116964,116966,116968,116970,116972,116974,116977,116980,116982,116984,116986,116988],{"class":79,"line":19080},[77,116952,33269],{"class":2123},[77,116954,116955],{"class":83}," reset",[77,116957,116958],{"class":87},"(self, ",[77,116960,3068],{"class":2123},[77,116962,116963],{"class":87},", seed: ",[77,116965,2625],{"class":94},[77,116967,27577],{"class":2123},[77,116969,41399],{"class":94},[77,116971,16036],{"class":2123},[77,116973,41399],{"class":94},[77,116975,116976],{"class":87},", options: ",[77,116978,116979],{"class":94},"dict",[77,116981,27577],{"class":2123},[77,116983,41399],{"class":94},[77,116985,16036],{"class":2123},[77,116987,41399],{"class":94},[77,116989,33254],{"class":87},[77,116991,116992,116994,116997,117000,117002],{"class":79,"line":19103},[77,116993,33285],{"class":94},[77,116995,116996],{"class":87},"().reset(",[77,116998,116999],{"class":7691},"seed",[77,117001,268],{"class":2123},[77,117003,117004],{"class":87},"seed)\n",[77,117006,117007,117010,117012,117015,117017],{"class":79,"line":19109},[77,117008,117009],{"class":87},"        mujoco.mj_resetData(",[77,117011,33291],{"class":94},[77,117013,117014],{"class":87},".model, ",[77,117016,33291],{"class":94},[77,117018,117019],{"class":87},".data)\n",[77,117021,117022],{"class":79,"line":19132},[77,117023,4875],{"emptyLinePlaceholder":2549},[77,117025,117026,117028,117031,117033,117035,117038,117040,117042,117044,117046,117048,117050,117052,117054,117056,117058,117060],{"class":79,"line":19146},[77,117027,33313],{"class":94},[77,117029,117030],{"class":87},".data.qpos[:] ",[77,117032,268],{"class":2123},[77,117034,41339],{"class":94},[77,117036,117037],{"class":87},".np_random.uniform(",[77,117039,116195],{"class":7691},[77,117041,116198],{"class":2123},[77,117043,88647],{"class":94},[77,117045,680],{"class":87},[77,117047,116205],{"class":7691},[77,117049,268],{"class":2123},[77,117051,88647],{"class":94},[77,117053,680],{"class":87},[77,117055,33963],{"class":7691},[77,117057,268],{"class":2123},[77,117059,33291],{"class":94},[77,117061,117062],{"class":87},".model.nq)\n",[77,117064,117065,117067,117070,117072],{"class":79,"line":19166},[77,117066,33313],{"class":94},[77,117068,117069],{"class":87},".data.qvel[:] ",[77,117071,268],{"class":2123},[77,117073,107194],{"class":94},[77,117075,117076,117079,117081,117083,117085],{"class":79,"line":19172},[77,117077,117078],{"class":87},"        mujoco.mj_forward(",[77,117080,33291],{"class":94},[77,117082,117014],{"class":87},[77,117084,33291],{"class":94},[77,117086,117019],{"class":87},[77,117088,117089],{"class":79,"line":19183},[77,117090,4875],{"emptyLinePlaceholder":2549},[77,117092,117093,117095,117097,117099],{"class":79,"line":19206},[77,117094,33313],{"class":94},[77,117096,116139],{"class":87},[77,117098,268],{"class":2123},[77,117100,49799],{"class":94},[77,117102,117103,117105,117107],{"class":79,"line":19228},[77,117104,17224],{"class":2123},[77,117106,41339],{"class":94},[77,117108,117109],{"class":87},"._get_obs(), {}\n",[77,117111,117112],{"class":79,"line":19233},[77,117113,4875],{"emptyLinePlaceholder":2549},[77,117115,117116,117118,117121],{"class":79,"line":19239},[77,117117,33269],{"class":2123},[77,117119,117120],{"class":83}," step",[77,117122,117123],{"class":87},"(self, action):\n",[77,117125,117126,117128,117130,117133,117135,117137],{"class":79,"line":19253},[77,117127,112655],{"class":87},[77,117129,268],{"class":2123},[77,117131,117132],{"class":87}," np.asarray(action, ",[77,117134,95936],{"class":7691},[77,117136,268],{"class":2123},[77,117138,116229],{"class":87},[77,117140,117141,117143,117145,117147,117149,117152,117154],{"class":79,"line":19266},[77,117142,112655],{"class":87},[77,117144,268],{"class":2123},[77,117146,109880],{"class":87},[77,117148,33291],{"class":94},[77,117150,117151],{"class":87},".action_space.low, ",[77,117153,33291],{"class":94},[77,117155,117156],{"class":87},".action_space.high)\n",[77,117158,117159],{"class":79,"line":19271},[77,117160,4875],{"emptyLinePlaceholder":2549},[77,117162,117163,117165,117168,117170],{"class":79,"line":19285},[77,117164,33313],{"class":94},[77,117166,117167],{"class":87},".data.ctrl[:] ",[77,117169,268],{"class":2123},[77,117171,109903],{"class":87},[77,117173,117174,117176,117178,117180,117182,117184,117186],{"class":79,"line":19290},[77,117175,5878],{"class":2123},[77,117177,103936],{"class":87},[77,117179,28511],{"class":2123},[77,117181,34910],{"class":94},[77,117183,2622],{"class":87},[77,117185,33291],{"class":94},[77,117187,117188],{"class":87},".frame_skip):\n",[77,117190,117191,117194,117196,117198,117200],{"class":79,"line":19296},[77,117192,117193],{"class":87},"            mujoco.mj_step(",[77,117195,33291],{"class":94},[77,117197,117014],{"class":87},[77,117199,33291],{"class":94},[77,117201,117019],{"class":87},[77,117203,117204],{"class":79,"line":19301},[77,117205,4875],{"emptyLinePlaceholder":2549},[77,117207,117208,117210,117212,117214],{"class":79,"line":19315},[77,117209,33313],{"class":94},[77,117211,116139],{"class":87},[77,117213,11950],{"class":2123},[77,117215,58147],{"class":94},[77,117217,117218],{"class":79,"line":19320},[77,117219,4875],{"emptyLinePlaceholder":2549},[77,117221,117222,117224,117226,117228],{"class":79,"line":19325},[77,117223,112615],{"class":87},[77,117225,268],{"class":2123},[77,117227,41339],{"class":94},[77,117229,117230],{"class":87},"._get_obs()\n",[77,117232,117233,117235,117237,117239],{"class":79,"line":19339},[77,117234,112720],{"class":87},[77,117236,268],{"class":2123},[77,117238,41339],{"class":94},[77,117240,117241],{"class":87},"._get_reward()\n",[77,117243,117244],{"class":79,"line":19351},[77,117245,4875],{"emptyLinePlaceholder":2549},[77,117247,117248,117250,117252,117254,117256,117258],{"class":79,"line":19356},[77,117249,114570],{"class":87},[77,117251,268],{"class":2123},[77,117253,41339],{"class":94},[77,117255,116803],{"class":87},[77,117257,33291],{"class":94},[77,117259,116881],{"class":87},[77,117261,117262,117264,117266,117268,117270,117272],{"class":79,"line":19369},[77,117263,114583],{"class":87},[77,117265,268],{"class":2123},[77,117267,41339],{"class":94},[77,117269,116803],{"class":87},[77,117271,33291],{"class":94},[77,117273,116896],{"class":87},[77,117275,117276,117278,117280,117282,117285,117287],{"class":79,"line":19374},[77,117277,116901],{"class":87},[77,117279,268],{"class":2123},[77,117281,112230],{"class":94},[77,117283,117284],{"class":87},"(np.linalg.norm(tip ",[77,117286,3145],{"class":2123},[77,117288,117289],{"class":87}," target))\n",[77,117291,117292],{"class":79,"line":19379},[77,117293,4875],{"emptyLinePlaceholder":2549},[77,117295,117296,117299,117301,117303,117305],{"class":79,"line":19384},[77,117297,117298],{"class":87},"        terminated ",[77,117300,268],{"class":2123},[77,117302,116122],{"class":87},[77,117304,260],{"class":2123},[77,117306,116127],{"class":94},[77,117308,117309,117312,117314,117316,117318,117320,117322],{"class":79,"line":19397},[77,117310,117311],{"class":87},"        truncated ",[77,117313,268],{"class":2123},[77,117315,41339],{"class":94},[77,117317,116139],{"class":87},[77,117319,4186],{"class":2123},[77,117321,41339],{"class":94},[77,117323,116146],{"class":87},[77,117325,117326,117329,117331,117333,117336],{"class":79,"line":19402},[77,117327,117328],{"class":87},"        info ",[77,117330,268],{"class":2123},[77,117332,6923],{"class":87},[77,117334,117335],{"class":271},"\"distance\"",[77,117337,117338],{"class":87},": dist}\n",[77,117340,117341,117343],{"class":79,"line":35100},[77,117342,17224],{"class":2123},[77,117344,117345],{"class":87}," obs, reward, terminated, truncated, info\n",[77,117347,117348],{"class":79,"line":35106},[77,117349,4875],{"emptyLinePlaceholder":2549},[77,117351,117352],{"class":79,"line":35112},[77,117353,4875],{"emptyLinePlaceholder":2549},[77,117355,117356,117358,117360,117362,117364],{"class":79,"line":35118},[77,117357,34414],{"class":2123},[77,117359,4448],{"class":83},[77,117361,103833],{"class":87},[77,117363,98122],{"class":94},[77,117365,6214],{"class":87},[77,117367,117368,117371,117373],{"class":79,"line":35124},[77,117369,117370],{"class":87},"    env ",[77,117372,268],{"class":2123},[77,117374,117375],{"class":87}," ReacherEnv()\n",[77,117377,117378,117381,117383,117386,117388,117390,117392],{"class":79,"line":35135},[77,117379,117380],{"class":87},"    obs, info ",[77,117382,268],{"class":2123},[77,117384,117385],{"class":87}," env.reset(",[77,117387,116999],{"class":7691},[77,117389,268],{"class":2123},[77,117391,1939],{"class":94},[77,117393,2628],{"class":87},[77,117395,117396,117398,117400,117403],{"class":79,"line":35141},[77,117397,33766],{"class":94},[77,117399,2622],{"class":87},[77,117401,117402],{"class":271},"\"initial obs shape:\"",[77,117404,117405],{"class":87},", obs.shape)\n",[77,117407,117408,117410,117412,117415],{"class":79,"line":35161},[77,117409,33766],{"class":94},[77,117411,2622],{"class":87},[77,117413,117414],{"class":271},"\"initial info:\"",[77,117416,117417],{"class":87},", info)\n",[77,117419,117420],{"class":79,"line":35167},[77,117421,4875],{"emptyLinePlaceholder":2549},[77,117423,117424,117426,117428],{"class":79,"line":35178},[77,117425,112586],{"class":87},[77,117427,268],{"class":2123},[77,117429,107194],{"class":94},[77,117431,117432,117434,117436,117438,117440,117442,117444],{"class":79,"line":35184},[77,117433,5676],{"class":2123},[77,117435,34083],{"class":87},[77,117437,28511],{"class":2123},[77,117439,34910],{"class":94},[77,117441,2622],{"class":87},[77,117443,3313],{"class":94},[77,117445,33254],{"class":87},[77,117447,117448,117450,117452],{"class":79,"line":35190},[77,117449,112655],{"class":87},[77,117451,268],{"class":2123},[77,117453,117454],{"class":87}," env.action_space.sample()\n",[77,117456,117457,117460,117462],{"class":79,"line":35196},[77,117458,117459],{"class":87},"        obs, reward, terminated, truncated, info ",[77,117461,268],{"class":2123},[77,117463,115848],{"class":87},[77,117465,117466,117468,117470],{"class":79,"line":35202},[77,117467,112730],{"class":87},[77,117469,11950],{"class":2123},[77,117471,112735],{"class":87},[77,117473,117474,117476,117478,117480,117482,117485,117487,117489,117492,117494,117496,117499,117501,117503,117506,117508,117510,117512],{"class":79,"line":35208},[77,117475,34918],{"class":94},[77,117477,2622],{"class":87},[77,117479,112764],{"class":271},[77,117481,112767],{"class":87},[77,117483,117484],{"class":271},"\"reward:\"",[77,117486,680],{"class":87},[77,117488,34485],{"class":94},[77,117490,117491],{"class":87},"(reward, ",[77,117493,2690],{"class":94},[77,117495,112778],{"class":87},[77,117497,117498],{"class":271},"\"distance:\"",[77,117500,680],{"class":87},[77,117502,34485],{"class":94},[77,117504,117505],{"class":87},"(info[",[77,117507,117335],{"class":271},[77,117509,114635],{"class":87},[77,117511,2690],{"class":94},[77,117513,32965],{"class":87},[77,117515,117516,117518,117521,117524],{"class":79,"line":35214},[77,117517,4972],{"class":2123},[77,117519,117520],{"class":87}," terminated ",[77,117522,117523],{"class":2123},"or",[77,117525,117526],{"class":87}," truncated:\n",[77,117528,117529],{"class":79,"line":35220},[77,117530,117531],{"class":2123},"            break\n",[77,117533,117534],{"class":79,"line":35240},[77,117535,4875],{"emptyLinePlaceholder":2549},[77,117537,117538,117540,117542,117544,117546,117548,117550,117552],{"class":79,"line":35246},[77,117539,33766],{"class":94},[77,117541,2622],{"class":87},[77,117543,112809],{"class":271},[77,117545,680],{"class":87},[77,117547,34485],{"class":94},[77,117549,112816],{"class":87},[77,117551,2690],{"class":94},[77,117553,32965],{"class":87},[77,117555,117556],{"class":79,"line":35262},[77,117557,4875],{"emptyLinePlaceholder":2549},[77,117559,117560],{"class":79,"line":35268},[77,117561,4875],{"emptyLinePlaceholder":2549},[77,117563,117564,117566,117568,117570,117572],{"class":79,"line":35282},[77,117565,4008],{"class":2123},[77,117567,33687],{"class":94},[77,117569,103994],{"class":2123},[77,117571,103997],{"class":271},[77,117573,6214],{"class":87},[77,117575,117576],{"class":79,"line":35288},[77,117577,104004],{"class":87},[24,117579,106003],{},[67,117581,117583],{"className":26289,"code":117582,"language":26291,"meta":72,"style":72},"touch ch8_gym_env.py\n",[74,117584,117585],{"__ignoreMap":72},[77,117586,117587,117589],{"class":79,"line":80},[77,117588,103718],{"class":83},[77,117590,117591],{"class":271}," ch8_gym_env.py\n",[24,117593,112877],{},[67,117595,117597],{"className":26289,"code":117596,"language":26291,"meta":72,"style":72},"python ch8_gym_env.py\n",[74,117598,117599],{"__ignoreMap":72},[77,117600,117601,117603],{"class":79,"line":80},[77,117602,32848],{"class":83},[77,117604,117591],{"class":271},[19,117606,104007],{"id":104007},[24,117608,117609],{},"继承 Gymnasium 环境：",[67,117611,117613],{"className":32846,"code":117612,"language":32848,"meta":72,"style":72},"class ReacherEnv(gym.Env):\n",[74,117614,117615],{"__ignoreMap":72},[77,117616,117617,117619,117621,117623,117625,117627,117629],{"class":79,"line":80},[77,117618,17166],{"class":2123},[77,117620,116490],{"class":83},[77,117622,2622],{"class":87},[77,117624,115973],{"class":83},[77,117626,3171],{"class":87},[77,117628,116499],{"class":83},[77,117630,33254],{"class":87},[24,117632,117633],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[24,117635,117636],{},"初始化模型：",[67,117638,117640],{"className":32846,"code":117639,"language":32848,"meta":72,"style":72},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[74,117641,117642,117656],{"__ignoreMap":72},[77,117643,117644,117646,117648,117650,117652,117654],{"class":79,"line":80},[77,117645,33291],{"class":94},[77,117647,116550],{"class":87},[77,117649,268],{"class":2123},[77,117651,103847],{"class":87},[77,117653,103749],{"class":94},[77,117655,2628],{"class":87},[77,117657,117658,117660,117662,117664,117666,117668],{"class":79,"line":91},[77,117659,33291],{"class":94},[77,117661,116565],{"class":87},[77,117663,268],{"class":2123},[77,117665,116570],{"class":87},[77,117667,33291],{"class":94},[77,117669,116575],{"class":87},[24,117671,117672,117673,117675],{},"这和前面章节一样，只是现在放到了类的 ",[74,117674,33297],{}," 里。",[24,117677,117678],{},"缓存 site ID：",[67,117680,117682],{"className":32846,"code":117681,"language":32848,"meta":72,"style":72},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[74,117683,117684,117698],{"__ignoreMap":72},[77,117685,117686,117688,117690,117692,117694,117696],{"class":79,"line":80},[77,117687,33291],{"class":94},[77,117689,116586],{"class":87},[77,117691,268],{"class":2123},[77,117693,116591],{"class":87},[77,117695,91990],{"class":94},[77,117697,2628],{"class":87},[77,117699,117700,117702,117704,117706,117708,117710],{"class":79,"line":91},[77,117701,33291],{"class":94},[77,117703,116607],{"class":87},[77,117705,268],{"class":2123},[77,117707,116591],{"class":87},[77,117709,91990],{"class":94},[77,117711,2628],{"class":87},[24,117713,117714],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[24,117716,117717],{},"reset：",[67,117719,117721],{"className":32846,"code":117720,"language":32848,"meta":72,"style":72},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[74,117722,117723],{"__ignoreMap":72},[77,117724,117725,117727,117729,117731,117733,117735,117737,117739,117741,117743,117745,117747,117749,117751,117753,117755,117757],{"class":79,"line":80},[77,117726,34414],{"class":2123},[77,117728,116955],{"class":83},[77,117730,116958],{"class":87},[77,117732,3068],{"class":2123},[77,117734,116963],{"class":87},[77,117736,2625],{"class":94},[77,117738,27577],{"class":2123},[77,117740,41399],{"class":94},[77,117742,16036],{"class":2123},[77,117744,41399],{"class":94},[77,117746,116976],{"class":87},[77,117748,116979],{"class":94},[77,117750,27577],{"class":2123},[77,117752,41399],{"class":94},[77,117754,16036],{"class":2123},[77,117756,41399],{"class":94},[77,117758,33254],{"class":87},[24,117760,117761,117763],{},[74,117762,72499],{}," 做四件事：",[139,117765,117766,117769,117772,117775],{},[54,117767,117768],{},"设置随机种子。",[54,117770,117771],{},"重置 MuJoCo data。",[54,117773,117774],{},"随机初始化关节角。",[54,117776,117777],{},"返回初始观测和 info。",[24,117779,117780],{},"step：",[67,117782,117784],{"className":32846,"code":117783,"language":32848,"meta":72,"style":72},"def step(self, action):\n",[74,117785,117786],{"__ignoreMap":72},[77,117787,117788,117790,117792],{"class":79,"line":80},[77,117789,34414],{"class":2123},[77,117791,117120],{"class":83},[77,117793,117123],{"class":87},[24,117795,117796,117798],{},[74,117797,109567],{}," 做六件事：",[139,117800,117801,117804,117810,117813,117816,117819],{},[54,117802,117803],{},"检查并裁剪 action。",[54,117805,117806,117807,30853],{},"写入 ",[74,117808,117809],{},"self.data.ctrl",[54,117811,117812],{},"连续推进若干个 MuJoCo 物理步。",[54,117814,117815],{},"计算新观测。",[54,117817,117818],{},"计算奖励和结束条件。",[54,117820,117821],{},"返回 Gymnasium 标准五元组。",[19,117823,104143],{"id":104143},[67,117825,117827],{"className":32846,"code":117826,"language":32848,"meta":72,"style":72},"import gymnasium as gym\n",[74,117828,117829],{"__ignoreMap":72},[77,117830,117831,117833,117835,117837],{"class":79,"line":80},[77,117832,32860],{"class":2123},[77,117834,116328],{"class":87},[77,117836,33850],{"class":2123},[77,117838,116333],{"class":87},[24,117840,117841,117842,117844,117845,117848],{},"导入 Gymnasium，并起别名 ",[74,117843,115973],{},"。后面写 ",[74,117846,117847],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[67,117850,117852],{"className":32846,"code":117851,"language":32848,"meta":72,"style":72},"from gymnasium import spaces\n",[74,117853,117854],{"__ignoreMap":72},[77,117855,117856,117858,117860,117862],{"class":79,"line":80},[77,117857,33205],{"class":2123},[77,117859,116328],{"class":87},[77,117861,32860],{"class":2123},[77,117863,116360],{"class":87},[24,117865,117866,117867,117870],{},"导入空间定义工具。",[74,117868,117869],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[67,117872,117873],{"className":32846,"code":117612,"language":32848,"meta":72,"style":72},[74,117874,117875],{"__ignoreMap":72},[77,117876,117877,117879,117881,117883,117885,117887,117889],{"class":79,"line":80},[77,117878,17166],{"class":2123},[77,117880,116490],{"class":83},[77,117882,2622],{"class":87},[77,117884,115973],{"class":83},[77,117886,3171],{"class":87},[77,117888,116499],{"class":83},[77,117890,33254],{"class":87},[24,117892,117893,117894,117897,117898,117900,117901,513,117903,117905],{},"定义一个类，名字叫 ",[74,117895,117896],{},"ReacherEnv","。括号里的 ",[74,117899,117847],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[74,117902,72499],{},[74,117904,109567],{}," 这两个核心方法。",[67,117907,117909],{"className":32846,"code":117908,"language":32848,"meta":72,"style":72},"metadata = {\"render_modes\": []}\n",[74,117910,117911],{"__ignoreMap":72},[77,117912,117913,117916,117918,117920,117922],{"class":79,"line":80},[77,117914,117915],{"class":87},"metadata ",[77,117917,268],{"class":2123},[77,117919,6923],{"class":87},[77,117921,116513],{"class":271},[77,117923,116516],{"class":87},[24,117925,117926],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[67,117928,117930],{"className":32846,"code":117929,"language":32848,"meta":72,"style":72},"def __init__(self) -> None:\n",[74,117931,117932],{"__ignoreMap":72},[77,117933,117934,117936,117938,117940,117942],{"class":79,"line":80},[77,117935,34414],{"class":2123},[77,117937,33272],{"class":94},[77,117939,116529],{"class":87},[77,117941,98122],{"class":94},[77,117943,6214],{"class":87},[24,117945,117946,117948,117949,30853],{},[74,117947,33297],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[74,117950,117951],{},"env = ReacherEnv()",[67,117953,117955],{"className":32846,"code":117954,"language":32848,"meta":72,"style":72},"super().__init__()\n",[74,117956,117957],{"__ignoreMap":72},[77,117958,117959,117962,117964,117966],{"class":79,"line":80},[77,117960,117961],{"class":94},"super",[77,117963,19731],{"class":87},[77,117965,33297],{"class":94},[77,117967,4451],{"class":87},[24,117969,117970,117971,117973],{},"调用父类 ",[74,117972,117847],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[67,117975,117976],{"className":32846,"code":117639,"language":32848,"meta":72,"style":72},[74,117977,117978,117992],{"__ignoreMap":72},[77,117979,117980,117982,117984,117986,117988,117990],{"class":79,"line":80},[77,117981,33291],{"class":94},[77,117983,116550],{"class":87},[77,117985,268],{"class":2123},[77,117987,103847],{"class":87},[77,117989,103749],{"class":94},[77,117991,2628],{"class":87},[77,117993,117994,117996,117998,118000,118002,118004],{"class":79,"line":91},[77,117995,33291],{"class":94},[77,117997,116565],{"class":87},[77,117999,268],{"class":2123},[77,118001,116570],{"class":87},[77,118003,33291],{"class":94},[77,118005,116575],{"class":87},[24,118007,118008,118009,118011,118012,513,118015,118018],{},"把 MuJoCo 模型和状态保存到 ",[74,118010,33291],{}," 上。",[74,118013,118014],{},"self.model",[74,118016,118017],{},"self.data"," 表示这个环境对象自己的模型和状态。",[67,118020,118021],{"className":32846,"code":117681,"language":32848,"meta":72,"style":72},[74,118022,118023,118037],{"__ignoreMap":72},[77,118024,118025,118027,118029,118031,118033,118035],{"class":79,"line":80},[77,118026,33291],{"class":94},[77,118028,116586],{"class":87},[77,118030,268],{"class":2123},[77,118032,116591],{"class":87},[77,118034,91990],{"class":94},[77,118036,2628],{"class":87},[77,118038,118039,118041,118043,118045,118047,118049],{"class":79,"line":91},[77,118040,33291],{"class":94},[77,118042,116607],{"class":87},[77,118044,268],{"class":2123},[77,118046,116591],{"class":87},[77,118048,91990],{"class":94},[77,118050,2628],{"class":87},[24,118052,118053,118054,513,118057,118060],{},"提前查好 tip 和 target 的 site ID。这样 ",[74,118055,118056],{},"_get_obs",[74,118058,118059],{},"_get_reward"," 里就不用每次按名字查找。",[67,118062,118064],{"className":32846,"code":118063,"language":32848,"meta":72,"style":72},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[74,118065,118066,118076,118086],{"__ignoreMap":72},[77,118067,118068,118070,118072,118074],{"class":79,"line":80},[77,118069,33291],{"class":94},[77,118071,116300],{"class":87},[77,118073,268],{"class":2123},[77,118075,56881],{"class":94},[77,118077,118078,118080,118082,118084],{"class":79,"line":91},[77,118079,33291],{"class":94},[77,118081,116679],{"class":87},[77,118083,268],{"class":2123},[77,118085,116684],{"class":94},[77,118087,118088,118090,118092,118094],{"class":79,"line":107},[77,118089,33291],{"class":94},[77,118091,116139],{"class":87},[77,118093,268],{"class":2123},[77,118095,49799],{"class":94},[24,118097,118098,118101,118102,118105,118106,118109],{},[74,118099,118100],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[74,118103,118104],{},"max_steps"," 是一个 episode 最多运行多少步。",[74,118107,118108],{},"steps"," 记录当前 episode 已经走了多少步。",[67,118111,118112],{"className":32846,"code":116178,"language":32848,"meta":72,"style":72},[74,118113,118114],{"__ignoreMap":72},[77,118115,118116,118118,118120,118122,118124,118126,118128,118130,118132,118134,118136,118138,118140,118142,118144,118146,118148,118150,118152,118154],{"class":79,"line":80},[77,118117,33291],{"class":94},[77,118119,116187],{"class":87},[77,118121,268],{"class":2123},[77,118123,116192],{"class":87},[77,118125,116195],{"class":7691},[77,118127,116198],{"class":2123},[77,118129,104837],{"class":94},[77,118131,680],{"class":87},[77,118133,116205],{"class":7691},[77,118135,268],{"class":2123},[77,118137,104837],{"class":94},[77,118139,680],{"class":87},[77,118141,98399],{"class":7691},[77,118143,268],{"class":2123},[77,118145,2622],{"class":87},[77,118147,2696],{"class":94},[77,118149,116222],{"class":87},[77,118151,95936],{"class":7691},[77,118153,268],{"class":2123},[77,118155,116229],{"class":87},[24,118157,118158,118159,118162,118163,513,118166,118169],{},"定义动作空间。",[74,118160,118161],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[74,118164,118165],{},"low=-1.0",[74,118167,118168],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[67,118171,118172],{"className":32846,"code":116239,"language":32848,"meta":72,"style":72},[74,118173,118174],{"__ignoreMap":72},[77,118175,118176,118178,118180,118182,118184,118186,118188,118190,118192,118194,118196,118198,118200,118202,118204,118206,118208,118210],{"class":79,"line":80},[77,118177,33291],{"class":94},[77,118179,116248],{"class":87},[77,118181,268],{"class":2123},[77,118183,116192],{"class":87},[77,118185,116195],{"class":7691},[77,118187,116198],{"class":2123},[77,118189,116259],{"class":87},[77,118191,116205],{"class":7691},[77,118193,268],{"class":2123},[77,118195,116259],{"class":87},[77,118197,98399],{"class":7691},[77,118199,268],{"class":2123},[77,118201,2622],{"class":87},[77,118203,3059],{"class":94},[77,118205,116222],{"class":87},[77,118207,95936],{"class":7691},[77,118209,268],{"class":2123},[77,118211,116229],{"class":87},[24,118213,118214,118215,118218,118219,118222],{},"定义观测空间。",[74,118216,118217],{},"shape=(10,)"," 表示观测是 10 个数。",[74,118220,118221],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[67,118224,118226],{"className":32846,"code":118225,"language":32848,"meta":72,"style":72},"def _get_obs(self) -> np.ndarray:\n",[74,118227,118228],{"__ignoreMap":72},[77,118229,118230,118232,118234],{"class":79,"line":80},[77,118231,34414],{"class":2123},[77,118233,116789],{"class":83},[77,118235,116792],{"class":87},[24,118237,118238,118239,118241],{},"定义内部函数，用来生成观测。函数名前面的 ",[74,118240,3604],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[67,118243,118245],{"className":32846,"code":118244,"language":32848,"meta":72,"style":72},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[74,118246,118247,118261],{"__ignoreMap":72},[77,118248,118249,118251,118253,118255,118257,118259],{"class":79,"line":80},[77,118250,114001],{"class":87},[77,118252,268],{"class":2123},[77,118254,41339],{"class":94},[77,118256,116803],{"class":87},[77,118258,33291],{"class":94},[77,118260,116808],{"class":87},[77,118262,118263,118265,118267,118269,118271,118273],{"class":79,"line":91},[77,118264,114011],{"class":87},[77,118266,268],{"class":2123},[77,118268,41339],{"class":94},[77,118270,116803],{"class":87},[77,118272,33291],{"class":94},[77,118274,116823],{"class":87},[24,118276,118277],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[67,118279,118281],{"className":32846,"code":118280,"language":32848,"meta":72,"style":72},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[74,118282,118283,118299],{"__ignoreMap":72},[77,118284,118285,118287,118289,118291,118293,118295,118297],{"class":79,"line":80},[77,118286,113287],{"class":87},[77,118288,268],{"class":2123},[77,118290,116832],{"class":87},[77,118292,33291],{"class":94},[77,118294,116837],{"class":87},[77,118296,33291],{"class":94},[77,118298,116842],{"class":87},[77,118300,118301,118303],{"class":79,"line":91},[77,118302,19516],{"class":2123},[77,118304,116849],{"class":87},[24,118306,118307,118308,118311,118312,118314],{},"拼接观测，并转换成 ",[74,118309,118310],{},"float32","。很多强化学习库默认使用 ",[74,118313,118310],{},"，所以这里主动转换。",[67,118316,118317],{"className":32846,"code":117720,"language":32848,"meta":72,"style":72},[74,118318,118319],{"__ignoreMap":72},[77,118320,118321,118323,118325,118327,118329,118331,118333,118335,118337,118339,118341,118343,118345,118347,118349,118351,118353],{"class":79,"line":80},[77,118322,34414],{"class":2123},[77,118324,116955],{"class":83},[77,118326,116958],{"class":87},[77,118328,3068],{"class":2123},[77,118330,116963],{"class":87},[77,118332,2625],{"class":94},[77,118334,27577],{"class":2123},[77,118336,41399],{"class":94},[77,118338,16036],{"class":2123},[77,118340,41399],{"class":94},[77,118342,116976],{"class":87},[77,118344,116979],{"class":94},[77,118346,27577],{"class":2123},[77,118348,41399],{"class":94},[77,118350,16036],{"class":2123},[77,118352,41399],{"class":94},[77,118354,33254],{"class":87},[24,118356,118357,118358,118360,118361,118364],{},"定义 reset。",[74,118359,116999],{}," 用来控制随机数，保证实验可以复现。",[74,118362,118363],{},"options"," 用来接收额外配置，本章暂时不用。",[67,118366,118368],{"className":32846,"code":118367,"language":32848,"meta":72,"style":72},"super().reset(seed=seed)\n",[74,118369,118370],{"__ignoreMap":72},[77,118371,118372,118374,118376,118378,118380],{"class":79,"line":80},[77,118373,117961],{"class":94},[77,118375,116996],{"class":87},[77,118377,116999],{"class":7691},[77,118379,268],{"class":2123},[77,118381,117004],{"class":87},[24,118383,118384,118385,118388],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[74,118386,118387],{},"self.np_random"," 生成可复现的随机数。",[67,118390,118392],{"className":32846,"code":118391,"language":32848,"meta":72,"style":72},"mujoco.mj_resetData(self.model, self.data)\n",[74,118393,118394],{"__ignoreMap":72},[77,118395,118396,118399,118401,118403,118405],{"class":79,"line":80},[77,118397,118398],{"class":87},"mujoco.mj_resetData(",[77,118400,33291],{"class":94},[77,118402,117014],{"class":87},[77,118404,33291],{"class":94},[77,118406,117019],{"class":87},[24,118408,118409],{},"把 MuJoCo 状态重置到默认状态。",[67,118411,118413],{"className":32846,"code":118412,"language":32848,"meta":72,"style":72},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[74,118414,118415],{"__ignoreMap":72},[77,118416,118417,118419,118421,118423,118425,118427,118429,118431,118433,118435,118437,118439,118441,118443,118445,118447,118449],{"class":79,"line":80},[77,118418,33291],{"class":94},[77,118420,117030],{"class":87},[77,118422,268],{"class":2123},[77,118424,41339],{"class":94},[77,118426,117037],{"class":87},[77,118428,116195],{"class":7691},[77,118430,116198],{"class":2123},[77,118432,88647],{"class":94},[77,118434,680],{"class":87},[77,118436,116205],{"class":7691},[77,118438,268],{"class":2123},[77,118440,88647],{"class":94},[77,118442,680],{"class":87},[77,118444,33963],{"class":7691},[77,118446,268],{"class":2123},[77,118448,33291],{"class":94},[77,118450,117062],{"class":87},[24,118452,117774,118453,118456,118457,118460,118461,118463],{},[74,118454,118455],{},"[:]"," 表示修改整个数组。",[74,118458,118459],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[74,118462,104584],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[67,118465,118467],{"className":32846,"code":118466,"language":32848,"meta":72,"style":72},"self.data.qvel[:] = 0.0\n",[74,118468,118469],{"__ignoreMap":72},[77,118470,118471,118473,118475,118477],{"class":79,"line":80},[77,118472,33291],{"class":94},[77,118474,117069],{"class":87},[77,118476,268],{"class":2123},[77,118478,107194],{"class":94},[24,118480,118481],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[67,118483,118485],{"className":32846,"code":118484,"language":32848,"meta":72,"style":72},"self.steps = 0\nreturn self._get_obs(), {}\n",[74,118486,118487,118497],{"__ignoreMap":72},[77,118488,118489,118491,118493,118495],{"class":79,"line":80},[77,118490,33291],{"class":94},[77,118492,116139],{"class":87},[77,118494,268],{"class":2123},[77,118496,49799],{"class":94},[77,118498,118499,118501,118503],{"class":79,"line":91},[77,118500,19516],{"class":2123},[77,118502,41339],{"class":94},[77,118504,117109],{"class":87},[24,118506,118507],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[67,118509,118510],{"className":32846,"code":117783,"language":32848,"meta":72,"style":72},[74,118511,118512],{"__ignoreMap":72},[77,118513,118514,118516,118518],{"class":79,"line":80},[77,118515,34414],{"class":2123},[77,118517,117120],{"class":83},[77,118519,117123],{"class":87},[24,118521,118522],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[67,118524,118526],{"className":32846,"code":118525,"language":32848,"meta":72,"style":72},"action = np.asarray(action, dtype=np.float32)\n",[74,118527,118528],{"__ignoreMap":72},[77,118529,118530,118532,118534,118536,118538,118540],{"class":79,"line":80},[77,118531,109875],{"class":87},[77,118533,268],{"class":2123},[77,118535,117132],{"class":87},[77,118537,95936],{"class":7691},[77,118539,268],{"class":2123},[77,118541,116229],{"class":87},[24,118543,118544,118545,30853],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[74,118546,118310],{},[67,118548,118550],{"className":32846,"code":118549,"language":32848,"meta":72,"style":72},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[74,118551,118552],{"__ignoreMap":72},[77,118553,118554,118556,118558,118560,118562,118564,118566],{"class":79,"line":80},[77,118555,109875],{"class":87},[77,118557,268],{"class":2123},[77,118559,109880],{"class":87},[77,118561,33291],{"class":94},[77,118563,117151],{"class":87},[77,118565,33291],{"class":94},[77,118567,117156],{"class":87},[24,118569,118570],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[67,118572,118574],{"className":32846,"code":118573,"language":32848,"meta":72,"style":72},"self.data.ctrl[:] = action\n",[74,118575,118576],{"__ignoreMap":72},[77,118577,118578,118580,118582,118584],{"class":79,"line":80},[77,118579,33291],{"class":94},[77,118581,117167],{"class":87},[77,118583,268],{"class":2123},[77,118585,109903],{"class":87},[24,118587,118588],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[67,118590,118592],{"className":32846,"code":118591,"language":32848,"meta":72,"style":72},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[74,118593,118594,118610],{"__ignoreMap":72},[77,118595,118596,118598,118600,118602,118604,118606,118608],{"class":79,"line":80},[77,118597,5500],{"class":2123},[77,118599,103936],{"class":87},[77,118601,28511],{"class":2123},[77,118603,34910],{"class":94},[77,118605,2622],{"class":87},[77,118607,33291],{"class":94},[77,118609,117188],{"class":87},[77,118611,118612,118615,118617,118619,118621],{"class":79,"line":91},[77,118613,118614],{"class":87},"    mujoco.mj_step(",[77,118616,33291],{"class":94},[77,118618,117014],{"class":87},[77,118620,33291],{"class":94},[77,118622,117019],{"class":87},[24,118624,118625,118626,118629,118630,118632,118633,30853],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[74,118627,118628],{},"frame_skip=5","，所以外部调用一次 ",[74,118631,116310],{},"，内部实际执行 5 次 ",[74,118634,103650],{},[67,118636,118638],{"className":32846,"code":118637,"language":32848,"meta":72,"style":72},"self.steps += 1\n",[74,118639,118640],{"__ignoreMap":72},[77,118641,118642,118644,118646,118648],{"class":79,"line":80},[77,118643,33291],{"class":94},[77,118645,116139],{"class":87},[77,118647,11950],{"class":2123},[77,118649,58147],{"class":94},[24,118651,118652],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[67,118654,118656],{"className":32846,"code":118655,"language":32848,"meta":72,"style":72},"obs = self._get_obs()\nreward = self._get_reward()\n",[74,118657,118658,118668],{"__ignoreMap":72},[77,118659,118660,118662,118664,118666],{"class":79,"line":80},[77,118661,113287],{"class":87},[77,118663,268],{"class":2123},[77,118665,41339],{"class":94},[77,118667,117230],{"class":87},[77,118669,118670,118672,118674,118676],{"class":79,"line":91},[77,118671,113438],{"class":87},[77,118673,268],{"class":2123},[77,118675,41339],{"class":94},[77,118677,117241],{"class":87},[24,118679,118680],{},"计算新的观测和奖励。",[67,118682,118684],{"className":32846,"code":118683,"language":32848,"meta":72,"style":72},"dist = float(np.linalg.norm(tip - target))\n",[74,118685,118686],{"__ignoreMap":72},[77,118687,118688,118690,118692,118694,118696,118698],{"class":79,"line":80},[77,118689,114029],{"class":87},[77,118691,268],{"class":2123},[77,118693,112230],{"class":94},[77,118695,117284],{"class":87},[77,118697,3145],{"class":2123},[77,118699,117289],{"class":87},[24,118701,118702],{},"计算末端到目标的距离，并转换成 Python float。",[67,118704,118705],{"className":32846,"code":116110,"language":32848,"meta":72,"style":72},[74,118706,118707,118719],{"__ignoreMap":72},[77,118708,118709,118711,118713,118715,118717],{"class":79,"line":80},[77,118710,116117],{"class":87},[77,118712,268],{"class":2123},[77,118714,116122],{"class":87},[77,118716,260],{"class":2123},[77,118718,116127],{"class":94},[77,118720,118721,118723,118725,118727,118729,118731,118733],{"class":79,"line":91},[77,118722,116132],{"class":87},[77,118724,268],{"class":2123},[77,118726,41339],{"class":94},[77,118728,116139],{"class":87},[77,118730,4186],{"class":2123},[77,118732,41339],{"class":94},[77,118734,116146],{"class":87},[24,118736,118737],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[67,118739,118741],{"className":32846,"code":118740,"language":32848,"meta":72,"style":72},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[74,118742,118743,118756],{"__ignoreMap":72},[77,118744,118745,118748,118750,118752,118754],{"class":79,"line":80},[77,118746,118747],{"class":87},"info ",[77,118749,268],{"class":2123},[77,118751,6923],{"class":87},[77,118753,117335],{"class":271},[77,118755,117338],{"class":87},[77,118757,118758,118760],{"class":79,"line":91},[77,118759,19516],{"class":2123},[77,118761,117345],{"class":87},[24,118763,118764,118767],{},[74,118765,118766],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[67,118769,118771],{"className":32846,"code":118770,"language":32848,"meta":72,"style":72},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[74,118772,118773,118782],{"__ignoreMap":72},[77,118774,118775,118778,118780],{"class":79,"line":80},[77,118776,118777],{"class":87},"env ",[77,118779,268],{"class":2123},[77,118781,117375],{"class":87},[77,118783,118784,118786,118788,118790,118792,118794,118796],{"class":79,"line":91},[77,118785,115833],{"class":87},[77,118787,268],{"class":2123},[77,118789,117385],{"class":87},[77,118791,116999],{"class":7691},[77,118793,268],{"class":2123},[77,118795,1939],{"class":94},[77,118797,2628],{"class":87},[24,118799,118800,118801,118804],{},"创建环境并重置。",[74,118802,118803],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[67,118806,118808],{"className":32846,"code":118807,"language":32848,"meta":72,"style":72},"action = env.action_space.sample()\n",[74,118809,118810],{"__ignoreMap":72},[77,118811,118812,118814,118816],{"class":79,"line":80},[77,118813,109875],{"class":87},[77,118815,268],{"class":2123},[77,118817,117454],{"class":87},[24,118819,118820],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118822,104750],{"id":104749},[24,118824,107917],{},[67,118826,118829],{"className":118827,"code":118828,"language":7662,"meta":72},[7660],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[74,118830,118828],{"__ignoreMap":72},[24,118832,118833],{},"这个环境已经具备强化学习环境的基本结构。",[24,118835,118836],{},"主函数里使用随机动作：",[67,118838,118839],{"className":32846,"code":118807,"language":32848,"meta":72,"style":72},[74,118840,118841],{"__ignoreMap":72},[77,118842,118843,118845,118847],{"class":79,"line":80},[77,118844,109875],{"class":87},[77,118846,268],{"class":2123},[77,118848,117454],{"class":87},[24,118850,118851],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118853,104782],{"id":104781},[139,118855,118856,118859,118865,118874,118883,118892,118898],{},[54,118857,118858],{},"运行程序。",[54,118860,118861,118862,30853],{},"确认 ",[74,118863,118864],{},"obs.shape == (10,)",[54,118866,113614,118867,118870,118871,30853],{},[74,118868,118869],{},"env.action_space","，应类似 ",[74,118872,118873],{},"Box(-1.0, 1.0, (2,), float32)",[54,118875,108018,118876,118879,118880,30853],{},[74,118877,118878],{},"self.max_steps = 10","，确认环境会更快 ",[74,118881,118882],{},"truncated=True",[54,118884,104845,118885,104848,118888,118891],{},[74,118886,118887],{},"terminated = dist \u003C 0.05",[74,118889,118890],{},"dist \u003C 0.2","，观察是否更容易结束。",[54,118893,104845,118894,118897],{},[74,118895,118896],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[54,118899,640,118900,118902,118903,118906],{},[74,118901,118766],{}," 里加入 ",[74,118904,118905],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118908,104887],{"id":104886},[19,118910,118912],{"id":118911},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[24,118914,118915,118916,118918],{},"Gymnasium 的 ",[74,118917,109567],{}," 返回 5 个值:",[67,118920,118922],{"className":32846,"code":118921,"language":32848,"meta":72,"style":72},"obs, reward, terminated, truncated, info\n",[74,118923,118924],{"__ignoreMap":72},[77,118925,118926],{"class":79,"line":80},[77,118927,118921],{"class":87},[24,118929,118930],{},"不是旧 Gym 的 4 个值。",[19,118932,118934,118937],{"id":118933},"datactrl-action-维度错误",[74,118935,118936],{},"data.ctrl[:] = action"," 维度错误",[24,118939,104957],{},[67,118941,118943],{"className":32846,"code":118942,"language":32848,"meta":72,"style":72},"print(self.model.nu)\nprint(action.shape)\n",[74,118944,118945,118956],{"__ignoreMap":72},[77,118946,118947,118949,118951,118953],{"class":79,"line":80},[77,118948,32883],{"class":94},[77,118950,2622],{"class":87},[77,118952,33291],{"class":94},[77,118954,118955],{"class":87},".model.nu)\n",[77,118957,118958,118960],{"class":79,"line":91},[77,118959,32883],{"class":94},[77,118961,118962],{"class":87},"(action.shape)\n",[24,118964,118965],{},"两者必须匹配。",[19,118967,118969],{"id":118968},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[24,118971,104896],{},[67,118973,118975],{"className":32846,"code":118974,"language":32848,"meta":72,"style":72},"mujoco.mj_forward(self.model, self.data)\n",[74,118976,118977],{"__ignoreMap":72},[77,118978,118979,118982,118984,118986,118988],{"class":79,"line":80},[77,118980,118981],{"class":87},"mujoco.mj_forward(",[77,118983,33291],{"class":94},[77,118985,117014],{"class":87},[77,118987,33291],{"class":94},[77,118989,117019],{"class":87},[19,118991,118993,118995],{"id":118992},"observation_space-维度和-obs-不一致",[74,118994,116033],{}," 维度和 obs 不一致",[24,118997,105009],{},[67,118999,119001],{"className":32846,"code":119000,"language":32848,"meta":72,"style":72},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[74,119002,119003,119013,119020],{"__ignoreMap":72},[77,119004,119005,119007,119009,119011],{"class":79,"line":80},[77,119006,113287],{"class":87},[77,119008,268],{"class":2123},[77,119010,41339],{"class":94},[77,119012,117230],{"class":87},[77,119014,119015,119017],{"class":79,"line":91},[77,119016,32883],{"class":94},[77,119018,119019],{"class":87},"(obs.shape)\n",[77,119021,119022,119024,119026,119028],{"class":79,"line":107},[77,119023,32883],{"class":94},[77,119025,2622],{"class":87},[77,119027,33291],{"class":94},[77,119029,119030],{"class":87},".observation_space.shape)\n",[24,119032,119033],{},"两者必须一致。本章观测是：",[67,119035,119038],{"className":119036,"code":119037,"language":7662,"meta":72},[7660],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[74,119039,119037],{"__ignoreMap":72},[19,119041,119043],{"id":119042},"action-超过范围","action 超过范围",[24,119045,119046],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[67,119048,119049],{"className":32846,"code":118549,"language":32848,"meta":72,"style":72},[74,119050,119051],{"__ignoreMap":72},[77,119052,119053,119055,119057,119059,119061,119063,119065],{"class":79,"line":80},[77,119054,109875],{"class":87},[77,119056,268],{"class":2123},[77,119058,109880],{"class":87},[77,119060,33291],{"class":94},[77,119062,117151],{"class":87},[77,119064,33291],{"class":94},[77,119066,117156],{"class":87},[24,119068,119069,119070,30853],{},"这能避免无效动作直接写入 ",[74,119071,103511],{},[19,119073,119075],{"id":119074},"忘记返回-info","忘记返回 info",[24,119077,118915,119078,513,119080,119082],{},[74,119079,72499],{},[74,119081,109567],{}," 都会返回 info：",[67,119084,119085],{"className":32846,"code":115826,"language":32848,"meta":72,"style":72},[74,119086,119087,119095],{"__ignoreMap":72},[77,119088,119089,119091,119093],{"class":79,"line":80},[77,119090,115833],{"class":87},[77,119092,268],{"class":2123},[77,119094,115838],{"class":87},[77,119096,119097,119099,119101],{"class":79,"line":91},[77,119098,115843],{"class":87},[77,119100,268],{"class":2123},[77,119102,115848],{"class":87},[24,119104,119105,119106,30853],{},"即使暂时没有额外信息，也返回 ",[74,119107,34926],{},[14,119109,119111],{"id":119110},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[24,119113,119114],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[139,119116,119117,119120,119123,119126,119129,119132],{},[54,119118,119119],{},"更稳定的 reward。",[54,119121,119122],{},"合理的 episode 长度。",[54,119124,119125],{},"可重复的随机目标采样。",[54,119127,119128],{},"render 接口。",[54,119130,119131],{},"环境注册代码。",[54,119133,119134],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[24,119136,119137],{},"如果只是自己写训练循环，最小形式是：",[67,119139,119141],{"className":32846,"code":119140,"language":32848,"meta":72,"style":72},"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",[74,119142,119143,119151,119167,119171,119187,119196,119205,119215],{"__ignoreMap":72},[77,119144,119145,119147,119149],{"class":79,"line":80},[77,119146,118777],{"class":87},[77,119148,268],{"class":2123},[77,119150,117375],{"class":87},[77,119152,119153,119155,119157,119159,119161,119163,119165],{"class":79,"line":91},[77,119154,115833],{"class":87},[77,119156,268],{"class":2123},[77,119158,117385],{"class":87},[77,119160,116999],{"class":7691},[77,119162,268],{"class":2123},[77,119164,1939],{"class":94},[77,119166,2628],{"class":87},[77,119168,119169],{"class":79,"line":107},[77,119170,4875],{"emptyLinePlaceholder":2549},[77,119172,119173,119175,119177,119179,119181,119183,119185],{"class":79,"line":191},[77,119174,5500],{"class":2123},[77,119176,103936],{"class":87},[77,119178,28511],{"class":2123},[77,119180,34910],{"class":94},[77,119182,2622],{"class":87},[77,119184,8885],{"class":94},[77,119186,33254],{"class":87},[77,119188,119189,119192,119194],{"class":79,"line":1543},[77,119190,119191],{"class":87},"    action ",[77,119193,268],{"class":2123},[77,119195,117454],{"class":87},[77,119197,119198,119201,119203],{"class":79,"line":1549},[77,119199,119200],{"class":87},"    obs, reward, terminated, truncated, info ",[77,119202,268],{"class":2123},[77,119204,115848],{"class":87},[77,119206,119207,119209,119211,119213],{"class":79,"line":1566},[77,119208,5576],{"class":2123},[77,119210,117520],{"class":87},[77,119212,117523],{"class":2123},[77,119214,117526],{"class":87},[77,119216,119217,119220,119222],{"class":79,"line":1572},[77,119218,119219],{"class":87},"        obs, info ",[77,119221,268],{"class":2123},[77,119223,115838],{"class":87},[14,119225,119227],{"id":119226},"_9本章小结","9.本章小结",[24,119229,119230],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[67,119232,119235],{"className":119233,"code":119234,"language":7662,"meta":72},[7660],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[74,119236,119234],{"__ignoreMap":72},[24,119238,119239],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2520,119241,119242],{},"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":72,"searchDepth":91,"depth":91,"links":119244},[119245,119246,119247,119254,119258,119259,119260,119270,119271],{"id":103082,"depth":91,"text":103083},{"id":103205,"depth":91,"text":103206},{"id":103479,"depth":91,"text":103480,"children":119248},[119249,119251,119253],{"id":116057,"depth":107,"text":119250},"terminated 和 truncated 的区别",{"id":116160,"depth":107,"text":119252},"observation_space 和 action_space",{"id":116287,"depth":107,"text":116288},{"id":103687,"depth":91,"text":103688,"children":119255},[119256,119257],{"id":104007,"depth":107,"text":104007},{"id":104143,"depth":107,"text":104143},{"id":104749,"depth":91,"text":104750},{"id":104781,"depth":91,"text":104782},{"id":104886,"depth":91,"text":104887,"children":119261},[119262,119263,119265,119266,119268,119269],{"id":118911,"depth":107,"text":118912},{"id":118933,"depth":107,"text":119264},"data.ctrl[:] = action 维度错误",{"id":118968,"depth":107,"text":118969},{"id":118992,"depth":107,"text":119267},"observation_space 维度和 obs 不一致",{"id":119042,"depth":107,"text":119043},{"id":119074,"depth":107,"text":119075},{"id":119110,"depth":91,"text":119111},{"id":119226,"depth":91,"text":119227},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115810,"description":72},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119278,"title":119279,"body":119280,"description":119703,"extension":2547,"meta":119704,"navigation":2549,"path":119705,"seo":119706,"stem":119707,"__hash__":119708},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119281,"toc":119693},[119282,119286,119289,119292,119312,119318,119324,119334,119337,119340,119360,119363,119367,119370,119376,119379,119393,119396,119399,119473,119476,119482,119485,119508,119511,119561,119564,119570,119573,119576,119579,119598,119601,119607,119610,119613,119616,119636,119639,119642,119645,119690],[10,119283,119285],{"id":119284},"mujoco-学习","MuJoCo 学习",[24,119287,119288],{},"初版",[24,119290,119291],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[139,119293,119294,119297,119300,119309],{},[54,119295,119296],{},"MuJoCo 模型文件在描述什么。",[54,119298,119299],{},"Python 代码怎样读取和推进仿真。",[54,119301,119302,2828,119304,2828,119306,119308],{},[74,119303,106463],{},[74,119305,106793],{},[74,119307,106796],{}," 这些数组为什么重要。",[54,119310,119311],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[24,119313,119314,119315,119317],{},"默认环境为 Fedora 44、Python >= 3.10、",[74,119316,103462],{}," 官方 Python bindings。",[24,119319,119320,119321,119323],{},"注意：本文禁止使用 ",[74,119322,103448],{},"。所有示例均使用：",[67,119325,119326],{"className":32846,"code":104013,"language":32848,"meta":72,"style":72},[74,119327,119328],{"__ignoreMap":72},[77,119329,119330,119332],{"class":79,"line":80},[77,119331,32860],{"class":2123},[77,119333,103736],{"class":87},[14,119335,119336],{"id":119336},"适合谁阅读",[24,119338,119339],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[139,119341,119342,119345,119348,119351],{},[54,119343,119344],{},"没学过 MuJoCo，只会一点 Python。",[54,119346,119347],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[54,119349,119350],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[54,119352,119353,119354,119356,119357,119359],{},"以前接触过 ",[74,119355,103448],{},"，现在想迁移到官方 ",[74,119358,103456],{}," Python bindings。",[24,119361,119362],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119364,119366],{"id":119365},"mujoco-到底是什么","MuJoCo 到底是什么",[24,119368,119369],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[67,119371,119374],{"className":119372,"code":119373,"language":7662,"meta":72},[7660],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[74,119375,119373],{"__ignoreMap":72},[24,119377,119378],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[139,119380,119381,119384,119387,119390],{},[54,119382,119383],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[54,119385,119386],{},"快速测试控制算法，不必一开始就上真实机器人。",[54,119388,119389],{},"生成强化学习环境。",[54,119391,119392],{},"采集状态、动作、图像、奖励等训练数据。",[14,119394,119395],{"id":119395},"学习前的心智模型",[24,119397,119398],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2755,119400,119401,119413],{},[2758,119402,119403],{},[2761,119404,119405,119408,119411],{},[2764,119406,119407],{"align":101},"部分",[2764,119409,119410],{"align":101},"负责什么",[2764,119412,23657],{"align":101},[2801,119414,119415,119426,119438,119450,119462],{},[2761,119416,119417,119420,119423],{},[2806,119418,119419],{"align":101},"MJCF XML",[2806,119421,119422],{"align":101},"定义世界和机器人结构",[2806,119424,119425],{"align":101},"地面、盒子、关节、电机、摄像头",[2761,119427,119428,119432,119435],{},[2806,119429,119430],{"align":101},[74,119431,103145],{},[2806,119433,119434],{"align":101},"编译后的静态模型",[2806,119436,119437],{"align":101},"有几个关节、有几个电机、时间步长是多少",[2761,119439,119440,119444,119447],{},[2806,119441,119442],{"align":101},[74,119443,103155],{},[2806,119445,119446],{"align":101},"运行中的动态状态",[2806,119448,119449],{"align":101},"当前时间、位置、速度、电机输入",[2761,119451,119452,119456,119459],{},[2806,119453,119454],{"align":101},[74,119455,103650],{},[2806,119457,119458],{"align":101},"推进一步物理仿真",[2806,119460,119461],{"align":101},"根据重力、力、碰撞更新状态",[2761,119463,119464,119467,119470],{},[2806,119465,119466],{"align":101},"Viewer \u002F Renderer",[2806,119468,119469],{"align":101},"把仿真显示出来",[2806,119471,119472],{"align":101},"打开窗口或保存图片",[24,119474,119475],{},"一句话总结：",[67,119477,119480],{"className":119478,"code":119479,"language":7662,"meta":72},[7660],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[74,119481,119479],{"__ignoreMap":72},[24,119483,119484],{},"参考来源：",[51,119486,119487,119494,119501],{},[54,119488,119489,119490],{},"MuJoCo Python 官方文档：",[417,119491,119492],{"href":119492,"rel":119493},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26332],[54,119495,119496,119497],{},"MuJoCo XML Reference：",[417,119498,119499],{"href":119499,"rel":119500},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26332],[54,119502,119503,119504],{},"MuJoCo Overview：",[417,119505,119506],{"href":119506,"rel":119507},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26332],[14,119509,119510],{"id":119510},"章节目录",[139,119512,119513,119519,119525,119531,119537,119543,119549,119555],{},[54,119514,119515],{},[417,119516,119518],{"href":119517},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[54,119520,119521],{},[417,119522,119524],{"href":119523},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[54,119526,119527],{},[417,119528,119530],{"href":119529},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[54,119532,119533],{},[417,119534,119536],{"href":119535},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[54,119538,119539],{},[417,119540,119542],{"href":119541},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[54,119544,119545],{},[417,119546,119548],{"href":119547},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[54,119550,119551],{},[417,119552,119554],{"href":119553},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[54,119556,119557],{},[417,119558,119560],{"href":119559},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119562,119563],{"id":119563},"推荐学习路线",[67,119565,119568],{"className":119566,"code":119567,"language":7662,"meta":72},[7660],"环境安装\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",[74,119569,119567],{"__ignoreMap":72},[24,119571,119572],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119574,119575],{"id":119575},"建议的目录结构",[24,119577,119578],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[67,119580,119582],{"className":26289,"code":119581,"language":26291,"meta":72,"style":72},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[74,119583,119584,119592],{"__ignoreMap":72},[77,119585,119586,119588,119590],{"class":79,"line":80},[77,119587,103701],{"class":83},[77,119589,31684],{"class":94},[77,119591,103706],{"class":271},[77,119593,119594,119596],{"class":79,"line":91},[77,119595,103711],{"class":94},[77,119597,103706],{"class":271},[24,119599,119600],{},"每一章的代码都单独保存：",[67,119602,119605],{"className":119603,"code":119604,"language":7662,"meta":72},[7660],"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",[74,119606,119604],{"__ignoreMap":72},[24,119608,119609],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119611,119612],{"id":119612},"学习方法",[24,119614,119615],{},"每章建议按这个顺序操作：",[139,119617,119618,119621,119624,119627,119630,119633],{},[54,119619,119620],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[54,119622,119623],{},"复制最小可运行代码，保存成指定文件。",[54,119625,119626],{},"运行代码，确认没有报错。",[54,119628,119629],{},"对照“运行结果说明”理解输出。",[54,119631,119632],{},"做“验证步骤”，主动改一两个参数。",[54,119634,119635],{},"遇到报错先看“常见错误与解决方案”。",[24,119637,119638],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119640,119641],{"id":119641},"全局排错顺序",[24,119643,119644],{},"遇到问题时，按下面顺序查：",[139,119646,119647,119653,119659,119664,119667,119670,119677,119687],{},[54,119648,119649,119650],{},"Python 环境是否激活：",[74,119651,119652],{},"which python",[54,119654,119655,119656],{},"MuJoCo 是否能导入：",[74,119657,119658],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[54,119660,119661,119662],{},"是否误装了 ",[74,119663,103448],{},[54,119665,119666],{},"XML 标签是否闭合、属性是否拼写正确",[54,119668,119669],{},"actuator 引用的 joint 名字是否存在",[54,119671,119672,119674,119675],{},[74,119673,103511],{}," 的长度是否等于 ",[74,119676,104592],{},[54,119678,108018,119679,84976,119681,119683,119684],{},[74,119680,106463],{},[74,119682,106793],{}," 后是否调用了 ",[74,119685,119686],{},"mujoco.mj_forward",[54,119688,119689],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2520,119691,119692],{},"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":72,"searchDepth":91,"depth":91,"links":119694},[119695,119696,119697,119698,119699,119700,119701,119702],{"id":119336,"depth":91,"text":119336},{"id":119365,"depth":91,"text":119366},{"id":119395,"depth":91,"text":119395},{"id":119510,"depth":91,"text":119510},{"id":119563,"depth":91,"text":119563},{"id":119575,"depth":91,"text":119575},{"id":119612,"depth":91,"text":119612},{"id":119641,"depth":91,"text":119641},"仿真搭建。",{"category":25847},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119279,"description":119703},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119710,"title":119711,"body":119712,"description":2546,"extension":2547,"meta":120167,"navigation":2549,"path":120168,"seo":120169,"stem":120170,"__hash__":120171},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119713,"toc":120165},[119714,119717,119720,119726,120162],[10,119715,119711],{"id":119716},"_1-最常用的基本操作更新",[24,119718,119719],{},"装linux系统教程：",[24,119721,119722],{},[417,119723,119724],{"href":119724,"rel":119725},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26332],[67,119727,119731],{"className":119728,"code":119729,"language":119730,"meta":72,"style":72},"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",[74,119732,119733,119738,119743,119752,119757,119766,119771,119791,119796,119807,119812,119821,119826,119854,119859,119878,119883,119902,119906,119911,119927,119931,119936,119966,119970,119975,119991,119995,120000,120015,120019,120024,120040,120044,120049,120061,120073,120077,120082,120099,120103,120108,120126,120130,120135,120144,120148,120153],{"__ignoreMap":72},[77,119734,119735],{"class":79,"line":80},[77,119736,119737],{"class":323},"#更新相关的知识\n",[77,119739,119740],{"class":79,"line":91},[77,119741,119742],{"class":323},"# 更新软件包列表（从服务器获取最新软件信息）\n",[77,119744,119745,119747,119750],{"class":79,"line":107},[77,119746,27044],{"class":83},[77,119748,119749],{"class":271}," apt",[77,119751,28710],{"class":271},[77,119753,119754],{"class":79,"line":191},[77,119755,119756],{"class":323},"# 升级所有可更新的软件包（不删除旧包）\n",[77,119758,119759,119761,119763],{"class":79,"line":1543},[77,119760,27044],{"class":83},[77,119762,119749],{"class":271},[77,119764,119765],{"class":271}," upgrade\n",[77,119767,119768],{"class":79,"line":1549},[77,119769,119770],{"class":323},"#更新和升级软件包\n",[77,119772,119773,119775,119777,119780,119782,119784,119786,119789],{"class":79,"line":1566},[77,119774,27044],{"class":83},[77,119776,119749],{"class":271},[77,119778,119779],{"class":271}," update",[77,119781,28658],{"class":87},[77,119783,27044],{"class":83},[77,119785,119749],{"class":271},[77,119787,119788],{"class":271}," upgrade",[77,119790,103417],{"class":94},[77,119792,119793],{"class":79,"line":1572},[77,119794,119795],{"class":323},"#列出可更新的软件包及版本信息\n",[77,119797,119798,119801,119804],{"class":79,"line":1589},[77,119799,119800],{"class":83},"apt",[77,119802,119803],{"class":271}," list",[77,119805,119806],{"class":94}," --upgradable\n",[77,119808,119809],{"class":79,"line":1595},[77,119810,119811],{"class":323},"#彻底升级（处理依赖关系，可能删除旧包）\n",[77,119813,119814,119816,119818],{"class":79,"line":4088},[77,119815,27044],{"class":83},[77,119817,119749],{"class":271},[77,119819,119820],{"class":271}," full-upgrade\n",[77,119822,119823],{"class":79,"line":4093},[77,119824,119825],{"class":323},"#设置指定版本\n",[77,119827,119828,119830,119832,119834,119836,119839,119841,119843,119845,119847,119850,119852],{"class":79,"line":4099},[77,119829,27044],{"class":83},[77,119831,119749],{"class":271},[77,119833,26301],{"class":271},[77,119835,31370],{"class":2123},[77,119837,119838],{"class":271},"package_nam",[77,119840,2693],{"class":87},[77,119842,3572],{"class":2123},[77,119844,268],{"class":271},[77,119846,260],{"class":2123},[77,119848,119849],{"class":271},"version_numbe",[77,119851,3283],{"class":87},[77,119853,291],{"class":2123},[77,119855,119856],{"class":79,"line":4104},[77,119857,119858],{"class":323},"#只安装软件包不升级\n",[77,119860,119861,119863,119865,119867,119869,119871,119873,119875],{"class":79,"line":4118},[77,119862,27044],{"class":83},[77,119864,119749],{"class":271},[77,119866,26301],{"class":271},[77,119868,31370],{"class":2123},[77,119870,119838],{"class":271},[77,119872,2693],{"class":87},[77,119874,3572],{"class":2123},[77,119876,119877],{"class":94}," --no-upgrade\n",[77,119879,119880],{"class":79,"line":4123},[77,119881,119882],{"class":323},"#只升级，不存在就不安装\n",[77,119884,119885,119887,119889,119891,119893,119895,119897,119899],{"class":79,"line":4129},[77,119886,27044],{"class":83},[77,119888,119749],{"class":271},[77,119890,26301],{"class":271},[77,119892,31370],{"class":2123},[77,119894,119838],{"class":271},[77,119896,2693],{"class":87},[77,119898,3572],{"class":2123},[77,119900,119901],{"class":94}," --only-upgrade\n",[77,119903,119904],{"class":79,"line":4150},[77,119905,4875],{"emptyLinePlaceholder":2549},[77,119907,119908],{"class":79,"line":4155},[77,119909,119910],{"class":323},"#安装指定的软件命令\n",[77,119912,119913,119915,119917,119919,119921,119923,119925],{"class":79,"line":4169},[77,119914,27044],{"class":83},[77,119916,119749],{"class":271},[77,119918,26301],{"class":271},[77,119920,31370],{"class":2123},[77,119922,119838],{"class":271},[77,119924,2693],{"class":87},[77,119926,291],{"class":2123},[77,119928,119929],{"class":79,"line":4174},[77,119930,4875],{"emptyLinePlaceholder":2549},[77,119932,119933],{"class":79,"line":4203},[77,119934,119935],{"class":323},"#安装多个软件包\n",[77,119937,119938,119940,119942,119944,119946,119949,119952,119954,119956,119959,119961,119963],{"class":79,"line":4208},[77,119939,27044],{"class":83},[77,119941,119749],{"class":271},[77,119943,26301],{"class":271},[77,119945,31370],{"class":2123},[77,119947,119948],{"class":271},"package_",[77,119950,119951],{"class":2123},"1>",[77,119953,31370],{"class":2123},[77,119955,119948],{"class":271},[77,119957,119958],{"class":2123},"2>",[77,119960,31370],{"class":2123},[77,119962,119948],{"class":271},[77,119964,119965],{"class":2123},"3>\n",[77,119967,119968],{"class":79,"line":4225},[77,119969,4875],{"emptyLinePlaceholder":2549},[77,119971,119972],{"class":79,"line":4230},[77,119973,119974],{"class":323},"#更新指定的软件命令\n",[77,119976,119977,119979,119981,119983,119985,119987,119989],{"class":79,"line":4235},[77,119978,27044],{"class":83},[77,119980,119749],{"class":271},[77,119982,119779],{"class":271},[77,119984,31370],{"class":2123},[77,119986,119838],{"class":271},[77,119988,2693],{"class":87},[77,119990,291],{"class":2123},[77,119992,119993],{"class":79,"line":4240},[77,119994,4875],{"emptyLinePlaceholder":2549},[77,119996,119997],{"class":79,"line":4254},[77,119998,119999],{"class":323},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[77,120001,120002,120004,120007,120009,120011,120013],{"class":79,"line":4259},[77,120003,119800],{"class":83},[77,120005,120006],{"class":271}," show",[77,120008,31370],{"class":2123},[77,120010,119838],{"class":271},[77,120012,2693],{"class":87},[77,120014,291],{"class":2123},[77,120016,120017],{"class":79,"line":5052},[77,120018,4875],{"emptyLinePlaceholder":2549},[77,120020,120021],{"class":79,"line":5066},[77,120022,120023],{"class":323},"#删除软件包命令\n",[77,120025,120026,120028,120030,120032,120034,120036,120038],{"class":79,"line":5074},[77,120027,27044],{"class":83},[77,120029,119749],{"class":271},[77,120031,28547],{"class":271},[77,120033,31370],{"class":2123},[77,120035,119838],{"class":271},[77,120037,2693],{"class":87},[77,120039,291],{"class":2123},[77,120041,120042],{"class":79,"line":5079},[77,120043,4875],{"emptyLinePlaceholder":2549},[77,120045,120046],{"class":79,"line":5085},[77,120047,120048],{"class":323},"# 清理旧版本和缓存（释放磁盘空间）\n",[77,120050,120051,120053,120055,120058],{"class":79,"line":5091},[77,120052,27044],{"class":83},[77,120054,119749],{"class":271},[77,120056,120057],{"class":271}," autoremove",[77,120059,120060],{"class":323},"  # 删除不再需要的依赖和库文件\n",[77,120062,120063,120065,120067,120070],{"class":79,"line":5096},[77,120064,27044],{"class":83},[77,120066,119749],{"class":271},[77,120068,120069],{"class":271}," clean",[77,120071,120072],{"class":323},"       # 清理下载的缓存包\n",[77,120074,120075],{"class":79,"line":10422},[77,120076,4875],{"emptyLinePlaceholder":2549},[77,120078,120079],{"class":79,"line":10446},[77,120080,120081],{"class":323},"#移除软件包及配置文件\n",[77,120083,120084,120086,120088,120091,120093,120095,120097],{"class":79,"line":10451},[77,120085,27044],{"class":83},[77,120087,119749],{"class":271},[77,120089,120090],{"class":271}," purge",[77,120092,31370],{"class":2123},[77,120094,119838],{"class":271},[77,120096,2693],{"class":87},[77,120098,291],{"class":2123},[77,120100,120101],{"class":79,"line":10457},[77,120102,4875],{"emptyLinePlaceholder":2549},[77,120104,120105],{"class":79,"line":10484},[77,120106,120107],{"class":323},"#查找软件包命令\n",[77,120109,120110,120112,120114,120117,120119,120122,120124],{"class":79,"line":10489},[77,120111,27044],{"class":83},[77,120113,119749],{"class":271},[77,120115,120116],{"class":271}," search",[77,120118,31370],{"class":2123},[77,120120,120121],{"class":271},"keywor",[77,120123,2928],{"class":87},[77,120125,291],{"class":2123},[77,120127,120128],{"class":79,"line":10495},[77,120129,4875],{"emptyLinePlaceholder":2549},[77,120131,120132],{"class":79,"line":10507},[77,120133,120134],{"class":323},"#列出所有已安装的包\n",[77,120136,120137,120139,120141],{"class":79,"line":10519},[77,120138,119800],{"class":83},[77,120140,119803],{"class":271},[77,120142,120143],{"class":94}," --installed\n",[77,120145,120146],{"class":79,"line":10531},[77,120147,4875],{"emptyLinePlaceholder":2549},[77,120149,120150],{"class":79,"line":12189},[77,120151,120152],{"class":323},"#列出所有已安装的包的版本信息\n",[77,120154,120155,120157,120159],{"class":79,"line":12214},[77,120156,119800],{"class":83},[77,120158,119803],{"class":271},[77,120160,120161],{"class":94}," --all-versions\n",[2520,120163,120164],{},"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":72,"searchDepth":91,"depth":91,"links":120166},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119711,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120173,"title":120174,"body":120175,"description":2546,"extension":2547,"meta":120916,"navigation":2549,"path":120917,"seo":120918,"stem":120919,"__hash__":120920},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120176,"toc":120903},[120177,120180,120184,120187,120193,120197,120201,120207,120212,120217,120222,120227,120232,120235,120238,120241,120244,120248,120251,120256,120259,120264,120267,120272,120279,120282,120285,120288,120291,120294,120305,120309,120313,120318,120323,120327,120332,120336,120341,120345,120349,120354,120357,120402,120407,120411,120415,120420,120426,120431,120441,120446,120456,120461,120466,120493,120497,120500,120505,120508,120533,120537,120542,120545,120550,120555,120575,120580,120583,120598,120602,120655,120658,120663,120667,120670,120685,120688,120691,120696,120700,120704,120707,120711,120715,120718,120723,120728,120732,120739,120747,120750,120757,120762,120767,120770,120775,120782,120787,120794,120798,120800,120805,120809,120812,120815,120820,120823,120828,120831,120836,120841,120846,120850,120855,120859,120900],[10,120178,120174],{"id":120179},"_2-linux装机教程",[14,120181,120183],{"id":120182},"_21-实体机","2.1 实体机",[24,120185,120186],{},"使用清华源：（Ubuntu24.04）",[24,120188,120189],{},[417,120190,120191],{"href":120191,"rel":120192},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26332],[14,120194,120196],{"id":120195},"_22-普通虚拟机","2.2 普通虚拟机",[19,120198,120200],{"id":120199},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[24,120202,120203],{},[417,120204,120205],{"href":120205,"rel":120206},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26332],[24,120208,120209],{},[40,120210],{"alt":72,"src":120211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[24,120213,120214],{},[40,120215],{"alt":72,"src":120216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[24,120218,120219],{},[40,120220],{"alt":72,"src":120221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[24,120223,120224],{},[40,120225],{"alt":72,"src":120226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[24,120228,120229],{},[40,120230],{"alt":72,"src":120231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[24,120233,120234],{},"内存4G（4096MB）；",[24,120236,120237],{},"CPU给4个核；",[24,120239,120240],{},"硬盘动态分配60G；",[24,120242,120243],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[19,120245,120247],{"id":120246},"_222-安装ubuntu","2.2.2 安装Ubuntu",[24,120249,120250],{},"按照1.1的步骤下载Ubuntu",[24,120252,120253],{},[40,120254],{"alt":72,"src":120255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[24,120257,120258],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[24,120260,120261],{},[40,120262],{"alt":72,"src":120263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[24,120265,120266],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[24,120268,120269],{},[40,120270],{"alt":72,"src":120271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[24,120273,120274,120275,120278],{},"选择“正常安装”(找不到都用Alt+F7)， ",[27,120276,120277],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[24,120280,120281],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[24,120283,120284],{},"将改动写入磁盘吗 继续",[24,120286,120287],{},"选择东八区（shanghai，大致在地图上点一下），继续",[24,120289,120290],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[24,120292,120293],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[24,120295,120296,120297,120300,120301,120304],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[27,120298,120299],{},"除了"," 选不发送系统信息与不升级之外， ",[27,120302,120303],{},"其它"," 都跳过或前进）",[19,120306,120308],{"id":120307},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24468,120310,120312],{"id":120311},"_2231-全屏","2.2.3.1 全屏",[24,120314,120315],{},[40,120316],{"alt":72,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[24,120319,120320],{},[40,120321],{"alt":72,"src":120322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24468,120324,120326],{"id":120325},"_2232-文件交换","2.2.3.2 文件交换",[24,120328,120329],{},[40,120330],{"alt":72,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24468,120333,120335],{"id":120334},"_2233-新建文本文档","2.2.3.3 新建文本文档",[24,120337,120338],{},[40,120339],{"alt":72,"src":120340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120342,120344],{"id":120343},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[19,120346,120348],{"id":120347},"_231-简介与优缺点","2.3.1 简介与优缺点",[139,120350,120351],{},[54,120352,120353],{},"什么情况下推荐？",[24,120355,120356],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[139,120358,120359],{"start":91},[54,120360,120361,120362],{},"优缺点：",[139,120363,120364,120394],{},[54,120365,120366,120367],{},"优点：",[139,120368,120369,120372,120379,120382,120385,120388,120391],{},[54,120370,120371],{},"WSL2是最好的Linux发行版;(bushi)",[54,120373,120374,120375,120378],{},"性能损耗极低。且比在Windows上跑深度性能 ",[27,120376,120377],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[54,120380,120381],{},"非常方便调用USB设备，可以USB直通;",[54,120383,120384],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[54,120386,120387],{},"非常方便Win与WSL2互相传文件等协同操作;",[54,120389,120390],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[54,120392,120393],{},"非常方便使用Windows的VScode远程开发;",[54,120395,120396,120397],{},"缺点：",[139,120398,120399],{},[54,120400,120401],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[24,120403,120404],{},[40,120405],{"alt":72,"src":120406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[19,120408,120410],{"id":120409},"_232-安装教程","2.3.2 安装教程",[24468,120412,120414],{"id":120413},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[139,120416,120417],{},[54,120418,120419],{},"方法一(图形界面)",[24,120421,120422,120423,27086],{},"用Win+R输入",[74,120424,120425],{},"appwiz.cpl",[24,120427,120428],{},[40,120429],{"alt":72,"src":120430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[24,120432,120433,120434,120437,120438,28941],{},"点击OK进入 ",[27,120435,120436],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[27,120439,120440],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[24,120442,120443],{},[40,120444],{"alt":72,"src":120445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[24,120447,120448,120449,513,120452,120455],{},"选择 ",[27,120450,120451],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[27,120453,120454],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[24,120457,120458],{},[40,120459],{"alt":72,"src":120460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[139,120462,120463],{"start":91},[54,120464,120465],{},"方法二(命令行)",[67,120467,120471],{"className":120468,"code":120469,"language":120470,"meta":72,"style":72},"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",[74,120472,120473,120478,120483,120488],{"__ignoreMap":72},[77,120474,120475],{"class":79,"line":80},[77,120476,120477],{},"# 开启 Linux 子系统\n",[77,120479,120480],{"class":79,"line":91},[77,120481,120482],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[77,120484,120485],{"class":79,"line":107},[77,120486,120487],{},"# 开启虚拟机平台\n",[77,120489,120490],{"class":79,"line":191},[77,120491,120492],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24468,120494,120496],{"id":120495},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[24,120498,120499],{},"用管理员权限打开powershell",[24,120501,120502],{},[40,120503],{"alt":72,"src":120504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[24,120506,120507],{},"升级WSL并设置默认版本为WSL2",[67,120509,120511],{"className":120468,"code":120510,"language":120470,"meta":72,"style":72},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[74,120512,120513,120518,120523,120528],{"__ignoreMap":72},[77,120514,120515],{"class":79,"line":80},[77,120516,120517],{},"# 更新 wsl\n",[77,120519,120520],{"class":79,"line":91},[77,120521,120522],{},"wsl --update\n",[77,120524,120525],{"class":79,"line":107},[77,120526,120527],{},"# 将 wsl 版本设置为 wsl2\n",[77,120529,120530],{"class":79,"line":191},[77,120531,120532],{},"wsl --set-default-version 2\n",[24468,120534,120536],{"id":120535},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[139,120538,120539],{},[54,120540,120541],{},"方式一(商店下载)",[24,120543,120544],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[24,120546,120547],{},[40,120548],{"alt":72,"src":120549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[139,120551,120552],{"start":91},[54,120553,120554],{},"方式二(命令行安装)",[67,120556,120558],{"className":120468,"code":120557,"language":120470,"meta":72,"style":72},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[74,120559,120560,120565,120570],{"__ignoreMap":72},[77,120561,120562],{"class":79,"line":80},[77,120563,120564],{},"# 列出可安装的 Linux 版本\n",[77,120566,120567],{"class":79,"line":91},[77,120568,120569],{},"#（需要科学手段）\n",[77,120571,120572],{"class":79,"line":107},[77,120573,120574],{},"wsl --list --online\n",[24,120576,120577],{},[40,120578],{"alt":72,"src":120579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[24,120581,120582],{},"选择对应发行版并安装",[67,120584,120586],{"className":120468,"code":120585,"language":120470,"meta":72,"style":72},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[74,120587,120588,120593],{"__ignoreMap":72},[77,120589,120590],{"class":79,"line":80},[77,120591,120592],{},"# Ubuntu安装完毕后需要重启系统\n",[77,120594,120595],{"class":79,"line":91},[77,120596,120597],{},"wsl --install -d Ubuntu-24.04\n",[24468,120599,120601],{"id":120600},"_2324-查看系统状态","2.3.2.4 查看系统状态",[67,120603,120605],{"className":120468,"code":120604,"language":120470,"meta":72,"style":72},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[74,120606,120607,120612,120617,120622,120627,120631,120635,120640,120645,120650],{"__ignoreMap":72},[77,120608,120609],{"class":79,"line":80},[77,120610,120611],{},"# 查看 wsl\n",[77,120613,120614],{"class":79,"line":91},[77,120615,120616],{},"wsl -l\n",[77,120618,120619],{"class":79,"line":107},[77,120620,120621],{},"# 查看 wsl 运行版本或模式\n",[77,120623,120624],{"class":79,"line":191},[77,120625,120626],{},"wsl -l -v\n",[77,120628,120629],{"class":79,"line":1543},[77,120630,4875],{"emptyLinePlaceholder":2549},[77,120632,120633],{"class":79,"line":1549},[77,120634,4875],{"emptyLinePlaceholder":2549},[77,120636,120637],{"class":79,"line":1566},[77,120638,120639],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[77,120641,120642],{"class":79,"line":1572},[77,120643,120644],{},"wsl --set-version \u003Cdistro> 2\n",[77,120646,120647],{"class":79,"line":1589},[77,120648,120649],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[77,120651,120652],{"class":79,"line":1595},[77,120653,120654],{},"wsl --unregister \u003Cdistro>\n",[24,120656,120657],{},"输出Version为2即正常",[24,120659,120660],{},[40,120661],{"alt":72,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24468,120664,120666],{"id":120665},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[24,120668,120669],{},"直接在Powershell里输入wsl命令进入子系统",[67,120671,120673],{"className":120468,"code":120672,"language":120470,"meta":72,"style":72},"# 进入子系统\nwsl\n",[74,120674,120675,120680],{"__ignoreMap":72},[77,120676,120677],{"class":79,"line":80},[77,120678,120679],{},"# 进入子系统\n",[77,120681,120682],{"class":79,"line":91},[77,120683,120684],{},"wsl\n",[24,120686,120687],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[24,120689,120690],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[24,120692,120693],{},[40,120694],{"alt":72,"src":120695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[19,120697,120699],{"id":120698},"_233-配置各种环境","2.3.3 配置各种环境",[24468,120701,120703],{"id":120702},"_2331-换源","2.3.3.1 换源",[24,120705,120706],{},"(同实体机LINUX，往下找教程)",[24468,120708,120710],{"id":120709},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[406,120712,120714],{"id":120713},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[24,120716,120717],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[24,120719,120720],{},[40,120721],{"alt":72,"src":120722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[24,120724,120725],{},[40,120726],{"alt":72,"src":120727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[406,120729,120731],{"id":120730},"_23322-cuda","2.3.3.2.2 CUDA",[24,120733,120734,120735],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[417,120736,120737],{"href":120737,"rel":120738},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26332],[24,120740,120741,120744],{},[40,120742],{"alt":72,"src":120743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[40,120745],{"alt":72,"src":120746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[24,120748,120749],{},"在下方的网站，选择合适的版本。",[24,120751,120752,120753],{},"WSL2 专属 CUDA 指南：",[417,120754,120755],{"href":120755,"rel":120756},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26332],[24,120758,120759],{},[27,120760,120761],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[24,120763,120764],{},[40,120765],{"alt":72,"src":120766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[24,120768,120769],{},"挨行敲一遍",[24,120771,120772],{},[40,120773],{"alt":72,"src":120774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[24,120776,120777,120778,120781],{},"敲完后，输入",[74,120779,120780],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[24,120783,120784],{},[40,120785],{"alt":72,"src":120786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[24,120788,120789,120790,120793],{},"（请详看下方教程的",[27,120791,120792],{},"安装CUDA的配置环境来看","如何配置环境）",[406,120795,120797],{"id":120796},"_23323-cudnn","2.3.3.2.3 cuDNN",[24,120799,120706],{},[24,120801,120802],{},[40,120803],{"alt":72,"src":120804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24468,120806,120808],{"id":120807},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[24,120810,120811],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[24,120813,120814],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[24,120816,120817],{},[40,120818],{"alt":72,"src":120819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[24,120821,120822],{},"连接WSL2",[24,120824,120825],{},[40,120826],{"alt":72,"src":120827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[24,120829,120830],{},"远程开发成功。",[24,120832,120833],{},[40,120834],{"alt":72,"src":120835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[24,120837,120838],{},[40,120839],{"alt":72,"src":120840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[24,120842,120843],{},[40,120844],{"alt":72,"src":120845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24468,120847,120849],{"id":120848},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[24,120851,120852],{},[40,120853],{"alt":72,"src":120854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24468,120856,120858],{"id":120857},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[67,120860,120862],{"className":119728,"code":120861,"language":119730,"meta":72,"style":72},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[74,120863,120864,120872,120880,120891,120895],{"__ignoreMap":72},[77,120865,120866,120868,120870],{"class":79,"line":80},[77,120867,27044],{"class":83},[77,120869,119749],{"class":271},[77,120871,28710],{"class":271},[77,120873,120874,120876,120878],{"class":79,"line":91},[77,120875,27044],{"class":83},[77,120877,119749],{"class":271},[77,120879,119765],{"class":271},[77,120881,120882,120884,120886,120888],{"class":79,"line":107},[77,120883,27044],{"class":83},[77,120885,119749],{"class":271},[77,120887,26301],{"class":271},[77,120889,120890],{"class":271}," mesa-utils\n",[77,120892,120893],{"class":79,"line":191},[77,120894,4875],{"emptyLinePlaceholder":2549},[77,120896,120897],{"class":79,"line":1543},[77,120898,120899],{"class":323},"#然后重启wsl2即可\n",[2520,120901,120902],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":72,"searchDepth":91,"depth":91,"links":120904},[120905,120906,120911],{"id":120182,"depth":91,"text":120183},{"id":120195,"depth":91,"text":120196,"children":120907},[120908,120909,120910],{"id":120199,"depth":107,"text":120200},{"id":120246,"depth":107,"text":120247},{"id":120307,"depth":107,"text":120308},{"id":120343,"depth":91,"text":120344,"children":120912},[120913,120914,120915],{"id":120347,"depth":107,"text":120348},{"id":120409,"depth":107,"text":120410},{"id":120698,"depth":107,"text":120699},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120174,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120922,"title":120923,"body":120924,"description":2546,"extension":2547,"meta":123860,"navigation":2549,"path":123861,"seo":123862,"stem":123863,"__hash__":123864},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120925,"toc":123832},[120926,120929,120933,120939,120943,120949,120953,121141,121144,121149,121153,121157,121160,121163,121169,121174,121177,121180,121185,121218,121223,121227,121304,121307,121312,121316,121319,121358,121361,121370,121388,121393,121400,121517,121522,121525,121552,121557,121561,121570,121620,121627,121631,121634,121648,121655,121689,121694,121698,121721,121724,121729,121733,121736,121739,121742,121784,121788,121791,121794,121835,121839,121843,121846,121851,121856,121859,121882,121885,121893,121898,121901,121906,121911,121914,121919,121923,121928,121951,121956,122018,122026,122031,122036,122039,122044,122047,122052,122057,122075,122080,122086,122091,122105,122109,122112,122115,122118,122161,122164,122169,122270,122273,122278,122282,122286,122323,122327,122331,122335,122381,122385,122430,122434,122441,122449,122504,122507,122584,122587,122610,122614,122617,122622,122627,122635,122638,122643,122648,122653,122656,122661,122670,122673,122678,122681,122752,122757,122760,122765,122768,122773,122776,122781,122784,122789,122794,122797,122872,122875,122888,122893,122896,122910,122913,122942,122947,122976,122979,122984,122988,122993,123002,123005,123010,123013,123018,123021,123024,123029,123032,123037,123042,123045,123050,123053,123178,123183,123213,123216,123221,123226,123243,123246,123289,123292,123319,123324,123337,123480,123484,123489,123503,123506,123557,123560,123590,123593,123609,123614,123628,123631,123698,123703,123712,123717,123720,123732,123737,123744,123768,123771,123776,123779,123798,123803,123810,123822,123829],[10,120927,120923],{"id":120928},"_3-安装必备配置",[14,120930,120932],{"id":120931},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[67,120934,120937],{"className":120935,"code":120936,"language":7662},[7660],"  打开下方网站（注意，该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",[74,120938,120936],{"__ignoreMap":72},[19,120940,120942],{"id":120941},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[67,120944,120947],{"className":120945,"code":120946,"language":7662},[7660],"  输入以下命令\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",[74,120948,120946],{"__ignoreMap":72},[19,120950,120952],{"id":120951},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[67,120954,120958],{"className":120955,"code":120956,"language":120957,"meta":72,"style":72},"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",[74,120959,120960,120968,120979,120991,121005,121009,121019,121024,121028,121032,121037,121041,121053,121057,121062,121066,121077,121081,121097,121101,121112,121116,121121,121125,121133],{"__ignoreMap":72},[77,120961,120962,120964,120966],{"class":79,"line":80},[77,120963,27044],{"class":83},[77,120965,119749],{"class":271},[77,120967,28710],{"class":271},[77,120969,120970,120972,120974,120976],{"class":79,"line":91},[77,120971,27044],{"class":83},[77,120973,119749],{"class":271},[77,120975,26301],{"class":271},[77,120977,120978],{"class":271}," vim\n",[77,120980,120981,120983,120986,120988],{"class":79,"line":107},[77,120982,27044],{"class":83},[77,120984,120985],{"class":271}," rm",[77,120987,27793],{"class":94},[77,120989,120990],{"class":271}," \u002Fetc\u002Fapt\u002Fsources.list\n",[77,120992,120993,120995,120997,120999,121002],{"class":79,"line":191},[77,120994,27044],{"class":83},[77,120996,120985],{"class":271},[77,120998,27793],{"class":94},[77,121000,121001],{"class":271}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[77,121003,121004],{"class":94},"**\n",[77,121006,121007],{"class":79,"line":1543},[77,121008,4875],{"emptyLinePlaceholder":2549},[77,121010,121011,121013,121016],{"class":79,"line":1549},[77,121012,27044],{"class":83},[77,121014,121015],{"class":271}," vim",[77,121017,121018],{"class":271}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[77,121020,121021],{"class":79,"line":1566},[77,121022,121023],{"class":271},"```\n",[77,121025,121026],{"class":79,"line":1572},[77,121027,4875],{"emptyLinePlaceholder":2549},[77,121029,121030],{"class":79,"line":1589},[77,121031,4875],{"emptyLinePlaceholder":2549},[77,121033,121034],{"class":79,"line":1595},[77,121035,121036],{"class":83},"选择好Ubuntu版本后，复制下方的内容。\n",[77,121038,121039],{"class":79,"line":4088},[77,121040,4875],{"emptyLinePlaceholder":2549},[77,121042,121043,121045,121048,121051],{"class":79,"line":4093},[77,121044,2841],{"class":2123},[77,121046,121047],{"class":271},"[](",[77,121049,121050],{"class":83},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[77,121052,2628],{"class":271},[77,121054,121055],{"class":79,"line":4099},[77,121056,4875],{"emptyLinePlaceholder":2549},[77,121058,121059],{"class":79,"line":4104},[77,121060,121061],{"class":83},"粘贴进去\n",[77,121063,121064],{"class":79,"line":4118},[77,121065,4875],{"emptyLinePlaceholder":2549},[77,121067,121068,121070,121072,121075],{"class":79,"line":4123},[77,121069,2841],{"class":2123},[77,121071,121047],{"class":271},[77,121073,121074],{"class":83},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[77,121076,2628],{"class":271},[77,121078,121079],{"class":79,"line":4129},[77,121080,4875],{"emptyLinePlaceholder":2549},[77,121082,121083,121086,121089,121092,121094],{"class":79,"line":4150},[77,121084,121085],{"class":83},"按一下ESC，然后英文冒号，输入",[77,121087,121088],{"class":271}," `",[77,121090,121091],{"class":83},":wq!",[77,121093,3584],{"class":271},[77,121095,121096],{"class":83},"然后回车\n",[77,121098,121099],{"class":79,"line":4155},[77,121100,4875],{"emptyLinePlaceholder":2549},[77,121102,121103,121105,121107,121110],{"class":79,"line":4169},[77,121104,2841],{"class":2123},[77,121106,121047],{"class":271},[77,121108,121109],{"class":83},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[77,121111,2628],{"class":271},[77,121113,121114],{"class":79,"line":4174},[77,121115,4875],{"emptyLinePlaceholder":2549},[77,121117,121118],{"class":79,"line":4203},[77,121119,121120],{"class":83},"输入以下命令\n",[77,121122,121123],{"class":79,"line":4208},[77,121124,4875],{"emptyLinePlaceholder":2549},[77,121126,121127,121130],{"class":79,"line":4225},[77,121128,121129],{"class":271},"```",[77,121131,121132],{"class":83},"Bash\n",[77,121134,121135,121137,121139],{"class":79,"line":4230},[77,121136,27044],{"class":83},[77,121138,119749],{"class":271},[77,121140,28710],{"class":271},[24,121142,121143],{},"这里被替换成对应学校则成功",[24,121145,121146],{},[40,121147],{"alt":72,"src":121148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,121150,121152],{"id":121151},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[19,121154,121156],{"id":121155},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[24,121158,121159],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[24,121161,121162],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[24,121164,121165],{},[417,121166,121167],{"href":121167,"rel":121168},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26332],[24,121170,121171],{},[40,121172],{"alt":72,"src":121173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[24,121175,121176],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[24,121178,121179],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[24,121181,121182],{},[40,121183],{"alt":72,"src":121184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[67,121186,121188],{"className":119728,"code":121187,"language":119730,"meta":72,"style":72},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[74,121189,121190,121195,121202,121207],{"__ignoreMap":72},[77,121191,121192],{"class":79,"line":80},[77,121193,121194],{"class":323},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[77,121196,121197,121199],{"class":79,"line":91},[77,121198,103711],{"class":94},[77,121200,121201],{"class":271}," ~\u002FDownloads\n",[77,121203,121204],{"class":79,"line":107},[77,121205,121206],{"class":323},"#下方chrome安装包名不一定是这个，根据名字来看\n",[77,121208,121209,121211,121213,121215],{"class":79,"line":191},[77,121210,27044],{"class":83},[77,121212,119749],{"class":271},[77,121214,26301],{"class":271},[77,121216,121217],{"class":271}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[24,121219,121220],{},[40,121221],{"alt":72,"src":121222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[19,121224,121226],{"id":121225},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[67,121228,121230],{"className":119728,"code":121229,"language":119730,"meta":72,"style":72},"# 老版\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",[74,121231,121232,121237,121245,121256,121261,121265,121270,121280,121288,121299],{"__ignoreMap":72},[77,121233,121234],{"class":79,"line":80},[77,121235,121236],{"class":323},"# 老版\n",[77,121238,121239,121241,121243],{"class":79,"line":91},[77,121240,27044],{"class":83},[77,121242,119749],{"class":271},[77,121244,28710],{"class":271},[77,121246,121247,121249,121251,121253],{"class":79,"line":107},[77,121248,27044],{"class":83},[77,121250,119749],{"class":271},[77,121252,26301],{"class":271},[77,121254,121255],{"class":271}," neofetch\n",[77,121257,121258],{"class":79,"line":191},[77,121259,121260],{"class":83},"neofetch\n",[77,121262,121263],{"class":79,"line":1543},[77,121264,4875],{"emptyLinePlaceholder":2549},[77,121266,121267],{"class":79,"line":1549},[77,121268,121269],{"class":323},"# 新版\n",[77,121271,121272,121274,121277],{"class":79,"line":1566},[77,121273,27044],{"class":83},[77,121275,121276],{"class":271}," add-apt-repository",[77,121278,121279],{"class":271}," ppa:zhangsongcui3371\u002Ffastfetch\n",[77,121281,121282,121284,121286],{"class":79,"line":1572},[77,121283,27044],{"class":83},[77,121285,119749],{"class":271},[77,121287,28710],{"class":271},[77,121289,121290,121292,121294,121296],{"class":79,"line":1589},[77,121291,27044],{"class":83},[77,121293,119749],{"class":271},[77,121295,26301],{"class":271},[77,121297,121298],{"class":271}," fastfetch\n",[77,121300,121301],{"class":79,"line":1595},[77,121302,121303],{"class":83},"fastfetch\n",[24,121305,121306],{},"这里显示，一共有3162个debian的程序，7个snap程序",[24,121308,121309],{},[40,121310],{"alt":72,"src":121311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[19,121313,121315],{"id":121314},"_323-移除snap应用","3.2.3 移除snap应用",[24,121317,121318],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[67,121320,121322],{"className":119728,"code":121321,"language":119730,"meta":72,"style":72},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[74,121323,121324,121336,121347],{"__ignoreMap":72},[77,121325,121326,121328,121330,121333],{"class":79,"line":80},[77,121327,27044],{"class":83},[77,121329,28981],{"class":271},[77,121331,121332],{"class":271}," disable",[77,121334,121335],{"class":271}," snapd.service\n",[77,121337,121338,121340,121342,121344],{"class":79,"line":91},[77,121339,27044],{"class":83},[77,121341,28981],{"class":271},[77,121343,121332],{"class":271},[77,121345,121346],{"class":271}," snapd.socket\n",[77,121348,121349,121351,121353,121355],{"class":79,"line":107},[77,121350,27044],{"class":83},[77,121352,28981],{"class":271},[77,121354,121332],{"class":271},[77,121356,121357],{"class":271}," snapd.seeded.service\n",[24,121359,121360],{},"然后查看snap应用列表",[24,121362,121363,121364,121369],{},"根据你安装的选择不同（最小安装或普通安装），有",[417,121365,121368],{"href":121366,"rel":121367},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26332],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[67,121371,121373],{"className":119728,"code":121372,"language":119730,"meta":72,"style":72},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[74,121374,121375,121380],{"__ignoreMap":72},[77,121376,121377],{"class":79,"line":80},[77,121378,121379],{"class":323},"# 查询当前系统上snap安装了哪些app\n",[77,121381,121382,121385],{"class":79,"line":91},[77,121383,121384],{"class":83},"snap",[77,121386,121387],{"class":271}," list\n",[24,121389,121390],{},[40,121391],{"alt":72,"src":121392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[24,121394,121395,121396,121399],{},"卸载掉图中所有应用，按照 ",[27,121397,121398],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[67,121401,121403],{"className":119728,"code":121402,"language":119730,"meta":72,"style":72},"#移除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",[74,121404,121405,121410,121422,121427,121438,121443,121454,121459,121470,121475,121479,121484,121495,121506],{"__ignoreMap":72},[77,121406,121407],{"class":79,"line":80},[77,121408,121409],{"class":323},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[77,121411,121412,121414,121417,121419],{"class":79,"line":91},[77,121413,27044],{"class":83},[77,121415,121416],{"class":271}," snap",[77,121418,28547],{"class":271},[77,121420,121421],{"class":271}," snap-store\n",[77,121423,121424],{"class":79,"line":107},[77,121425,121426],{"class":323},"#移除firefox浏览器\n",[77,121428,121429,121431,121433,121435],{"class":79,"line":191},[77,121430,27044],{"class":83},[77,121432,121416],{"class":271},[77,121434,28547],{"class":271},[77,121436,121437],{"class":271}," firefox\n",[77,121439,121440],{"class":79,"line":1543},[77,121441,121442],{"class":323},"#移除gnome-42-2204\n",[77,121444,121445,121447,121449,121451],{"class":79,"line":1549},[77,121446,27044],{"class":83},[77,121448,121416],{"class":271},[77,121450,28547],{"class":271},[77,121452,121453],{"class":271}," gnome-42-2204\n",[77,121455,121456],{"class":79,"line":1566},[77,121457,121458],{"class":323},"#移除gtk-common-themes\n",[77,121460,121461,121463,121465,121467],{"class":79,"line":1572},[77,121462,27044],{"class":83},[77,121464,121416],{"class":271},[77,121466,28547],{"class":271},[77,121468,121469],{"class":271}," gtk-common-themes\n",[77,121471,121472],{"class":79,"line":1589},[77,121473,121474],{"class":323},"#移除其它...\n",[77,121476,121477],{"class":79,"line":1595},[77,121478,5149],{"class":87},[77,121480,121481],{"class":79,"line":4088},[77,121482,121483],{"class":323},"#移除core22,bare以及snapd\n",[77,121485,121486,121488,121490,121492],{"class":79,"line":4093},[77,121487,27044],{"class":83},[77,121489,121416],{"class":271},[77,121491,28547],{"class":271},[77,121493,121494],{"class":271}," core22\n",[77,121496,121497,121499,121501,121503],{"class":79,"line":4099},[77,121498,27044],{"class":83},[77,121500,121416],{"class":271},[77,121502,28547],{"class":271},[77,121504,121505],{"class":271}," bare\n",[77,121507,121508,121510,121512,121514],{"class":79,"line":4104},[77,121509,27044],{"class":83},[77,121511,121416],{"class":271},[77,121513,28547],{"class":271},[77,121515,121516],{"class":271}," snapd\n",[24,121518,121519],{},[40,121520],{"alt":72,"src":121521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[24,121523,121524],{},"输入以下命令查看是否还有snap包",[67,121526,121528],{"className":119728,"code":121527,"language":119730,"meta":72,"style":72},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[74,121529,121530,121536,121540,121544,121548],{"__ignoreMap":72},[77,121531,121532,121534],{"class":79,"line":80},[77,121533,121384],{"class":83},[77,121535,121387],{"class":271},[77,121537,121538],{"class":79,"line":91},[77,121539,121236],{"class":323},[77,121541,121542],{"class":79,"line":107},[77,121543,121260],{"class":83},[77,121545,121546],{"class":79,"line":191},[77,121547,121269],{"class":323},[77,121549,121550],{"class":79,"line":1543},[77,121551,121303],{"class":83},[24,121553,121554],{},[40,121555],{"alt":72,"src":121556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[19,121558,121560],{"id":121559},"_324-移除snap","3.2.4 移除snap",[24,121562,121563,121564,121569],{},"在删除掉",[417,121565,121568],{"href":121566,"rel":121567},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26332],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[67,121571,121573],{"className":119728,"code":121572,"language":119730,"meta":72,"style":72}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[74,121574,121575,121580,121593,121598,121609],{"__ignoreMap":72},[77,121576,121577],{"class":79,"line":80},[77,121578,121579],{"class":323}," #使用apt移除掉snap\n",[77,121581,121582,121584,121586,121588,121591],{"class":79,"line":91},[77,121583,27044],{"class":83},[77,121585,119749],{"class":271},[77,121587,120057],{"class":271},[77,121589,121590],{"class":94}," --purge",[77,121592,121516],{"class":271},[77,121594,121595],{"class":79,"line":107},[77,121596,121597],{"class":323},"#移除snapd的一些目录\n",[77,121599,121600,121602,121604,121606],{"class":79,"line":191},[77,121601,27044],{"class":83},[77,121603,120985],{"class":271},[77,121605,27793],{"class":94},[77,121607,121608],{"class":271}," \u002Fvar\u002Fcache\u002Fsnapd\n",[77,121610,121611,121613,121615,121617],{"class":79,"line":1543},[77,121612,27044],{"class":83},[77,121614,120985],{"class":271},[77,121616,27793],{"class":94},[77,121618,121619],{"class":271}," ~\u002Fsnap\n",[24,121621,121622,121623,121626],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[74,121624,121625],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[19,121628,121630],{"id":121629},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[24,121632,121633],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[67,121635,121637],{"className":119728,"code":121636,"language":119730,"meta":72,"style":72},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[74,121638,121639],{"__ignoreMap":72},[77,121640,121641,121643,121645],{"class":79,"line":80},[77,121642,27044],{"class":83},[77,121644,121015],{"class":271},[77,121646,121647],{"class":271}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[24,121649,121650,121651,121654],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[74,121652,121653],{},":wq"," 回车",[67,121656,121658],{"className":119728,"code":121657,"language":119730,"meta":72,"style":72},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[74,121659,121660,121667,121681],{"__ignoreMap":72},[77,121661,121662,121665],{"class":79,"line":80},[77,121663,121664],{"class":83},"Package:",[77,121666,121516],{"class":271},[77,121668,121669,121672,121675,121678],{"class":79,"line":91},[77,121670,121671],{"class":83},"Pin:",[77,121673,121674],{"class":271}," release",[77,121676,121677],{"class":271}," a=",[77,121679,121680],{"class":94},"*\n",[77,121682,121683,121686],{"class":79,"line":107},[77,121684,121685],{"class":83},"Pin-Priority:",[77,121687,121688],{"class":94}," -10\n",[24,121690,121691],{},[40,121692],{"alt":72,"src":121693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[19,121695,121697],{"id":121696},"_326-测试是否成功","3.2.6 测试是否成功",[67,121699,121701],{"className":119728,"code":121700,"language":119730,"meta":72,"style":72},"sudo apt update\nsudo apt install firefox\n",[74,121702,121703,121711],{"__ignoreMap":72},[77,121704,121705,121707,121709],{"class":79,"line":80},[77,121706,27044],{"class":83},[77,121708,119749],{"class":271},[77,121710,28710],{"class":271},[77,121712,121713,121715,121717,121719],{"class":79,"line":91},[77,121714,27044],{"class":83},[77,121716,119749],{"class":271},[77,121718,26301],{"class":271},[77,121720,121437],{"class":271},[24,121722,121723],{},"这里提示snapd无法被安装，就证明成功了",[24,121725,121726],{},[40,121727],{"alt":72,"src":121728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[19,121730,121732],{"id":121731},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[24,121734,121735],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[24,121737,121738],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[24,121740,121741],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[67,121743,121745],{"className":119728,"code":121744,"language":119730,"meta":72,"style":72},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[74,121746,121747,121752,121761,121766,121774],{"__ignoreMap":72},[77,121748,121749],{"class":79,"line":80},[77,121750,121751],{"class":323},"# 添加Mozilla提供的源\n",[77,121753,121754,121756,121758],{"class":79,"line":91},[77,121755,27044],{"class":83},[77,121757,121276],{"class":271},[77,121759,121760],{"class":271}," ppa:mozillateam\u002Fppa\n",[77,121762,121763],{"class":79,"line":107},[77,121764,121765],{"class":323},"# 安装Firefox\n",[77,121767,121768,121770,121772],{"class":79,"line":191},[77,121769,27044],{"class":83},[77,121771,119749],{"class":271},[77,121773,28710],{"class":271},[77,121775,121776,121778,121780,121782],{"class":79,"line":1543},[77,121777,27044],{"class":83},[77,121779,119749],{"class":271},[77,121781,26301],{"class":271},[77,121783,121437],{"class":271},[19,121785,121787],{"id":121786},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[24,121789,121790],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[24,121792,121793],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[67,121795,121797],{"className":119728,"code":121796,"language":119730,"meta":72,"style":72},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[74,121798,121799,121804,121814,121822,121826],{"__ignoreMap":72},[77,121800,121801],{"class":79,"line":80},[77,121802,121803],{"class":323},"#删掉禁止安装snap的配置文件\n",[77,121805,121806,121808,121810,121812],{"class":79,"line":91},[77,121807,27044],{"class":83},[77,121809,120985],{"class":271},[77,121811,27793],{"class":94},[77,121813,121647],{"class":271},[77,121815,121816,121818,121820],{"class":79,"line":107},[77,121817,27044],{"class":83},[77,121819,119749],{"class":271},[77,121821,28710],{"class":271},[77,121823,121824],{"class":79,"line":191},[77,121825,4875],{"emptyLinePlaceholder":2549},[77,121827,121828,121830,121832],{"class":79,"line":1543},[77,121829,27044],{"class":83},[77,121831,119749],{"class":271},[77,121833,121834],{"class":271}," dist-update\n",[14,121836,121838],{"id":121837},"_33-中文输入法","3.3 中文输入法",[19,121840,121842],{"id":121841},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[24,121844,121845],{},"官网下载搜狗输入法",[24,121847,121848],{},[40,121849],{"alt":72,"src":121850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[24,121852,121853],{},[40,121854],{"alt":72,"src":121855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[24,121857,121858],{},"打开终端输入如下",[67,121860,121862],{"className":119728,"code":121861,"language":119730,"meta":72,"style":72},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[74,121863,121864,121871],{"__ignoreMap":72},[77,121865,121866,121868],{"class":79,"line":80},[77,121867,103711],{"class":94},[77,121869,121870],{"class":271}," ~\u002FDownloads\u002F\n",[77,121872,121873,121875,121877,121879],{"class":79,"line":91},[77,121874,27044],{"class":83},[77,121876,119749],{"class":271},[77,121878,26301],{"class":271},[77,121880,121881],{"class":271}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[24,121883,121884],{},"打开Fcitx",[24,121886,121887,121890],{},[40,121888],{"alt":72,"src":121889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[40,121891],{"alt":72,"src":121892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[24,121894,121895],{},[40,121896],{"alt":72,"src":121897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[24,121899,121900],{},"添加搜狗输入法",[24,121902,121903],{},[40,121904],{"alt":72,"src":121905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[24,121907,121908],{},[40,121909],{"alt":72,"src":121910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[24,121912,121913],{},"将搜狗输入法设置为唯一输入法",[24,121915,121916],{},[40,121917],{"alt":72,"src":121918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[19,121920,121922],{"id":121921},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[139,121924,121925],{},[54,121926,121927],{},"卸载旧输入法",[67,121929,121931],{"className":120955,"code":121930,"language":120957,"meta":72,"style":72},"sudo apt purge fcitx* ibus*\n",[74,121932,121933],{"__ignoreMap":72},[77,121934,121935,121937,121939,121941,121944,121946,121949],{"class":79,"line":80},[77,121936,27044],{"class":83},[77,121938,119749],{"class":271},[77,121940,120090],{"class":271},[77,121942,121943],{"class":271}," fcitx",[77,121945,3068],{"class":94},[77,121947,121948],{"class":271}," ibus",[77,121950,121680],{"class":94},[139,121952,121953],{"start":91},[54,121954,121955],{},"安装Fcitx5",[67,121957,121959],{"className":119728,"code":121958,"language":119730,"meta":72,"style":72},"# 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",[74,121960,121961,121966,121980,121984,121989,121998,122006],{"__ignoreMap":72},[77,121962,121963],{"class":79,"line":80},[77,121964,121965],{"class":323},"# Ubuntu22.04及以上、Debian12及以上\n",[77,121967,121968,121970,121972,121974,121977],{"class":79,"line":91},[77,121969,27044],{"class":83},[77,121971,119749],{"class":271},[77,121973,26301],{"class":271},[77,121975,121976],{"class":271}," fcitx5",[77,121978,121979],{"class":271}," fcitx5-chinese-addons\n",[77,121981,121982],{"class":79,"line":107},[77,121983,4875],{"emptyLinePlaceholder":2549},[77,121985,121986],{"class":79,"line":191},[77,121987,121988],{"class":323},"# Ubuntu20.04\n",[77,121990,121991,121993,121995],{"class":79,"line":1543},[77,121992,27044],{"class":83},[77,121994,121276],{"class":271},[77,121996,121997],{"class":271}," ppa:zhsj\u002Ffcitx5\n",[77,121999,122000,122002,122004],{"class":79,"line":1549},[77,122001,27044],{"class":83},[77,122003,119749],{"class":271},[77,122005,28710],{"class":271},[77,122007,122008,122010,122012,122014,122016],{"class":79,"line":1566},[77,122009,27044],{"class":83},[77,122011,119749],{"class":271},[77,122013,26301],{"class":271},[77,122015,121976],{"class":271},[77,122017,121979],{"class":271},[139,122019,122020,122023],{"start":107},[54,122021,122022],{},"Reboot System",[54,122024,122025],{},"启动Fcitx5",[24,122027,122028],{},[40,122029],{"alt":72,"src":122030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[139,122032,122033],{"start":1543},[54,122034,122035],{},"修改一些设置",[24,122037,122038],{},"将Pinyin和Keyboard - English US加入到左边。",[24,122040,122041],{},[40,122042],{"alt":72,"src":122043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[24,122045,122046],{},"添加快捷键以便于更好切换中英文",[24,122048,122049],{},[40,122050],{"alt":72,"src":122051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[139,122053,122054],{"start":1549},[54,122055,122056],{},"重启",[67,122058,122060],{"className":120955,"code":122059,"language":120957,"meta":72,"style":72},"sudo shutdown -r now\n",[74,122061,122062],{"__ignoreMap":72},[77,122063,122064,122066,122069,122072],{"class":79,"line":80},[77,122065,27044],{"class":83},[77,122067,122068],{"class":271}," shutdown",[77,122070,122071],{"class":94}," -r",[77,122073,122074],{"class":271}," now\n",[139,122076,122077],{"start":1566},[54,122078,122079],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[24,122081,122082],{},[417,122083,122084],{"href":122084,"rel":122085},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26332],[139,122087,122088],{"start":1572},[54,122089,122090],{},"再重启",[67,122092,122093],{"className":120955,"code":122059,"language":120957,"meta":72,"style":72},[74,122094,122095],{"__ignoreMap":72},[77,122096,122097,122099,122101,122103],{"class":79,"line":80},[77,122098,27044],{"class":83},[77,122100,122068],{"class":271},[77,122102,122071],{"class":94},[77,122104,122074],{"class":271},[14,122106,122108],{"id":122107},"_34-pip3源替换","3.4 pip3源替换",[24,122110,122111],{},"非Debian系发行版需要做。",[24,122113,122114],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[24,122116,122117],{},"使用dnf的系统也可能不用做。",[67,122119,122121],{"className":119728,"code":122120,"language":119730,"meta":72,"style":72},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[74,122122,122123,122128,122135,122140,122145],{"__ignoreMap":72},[77,122124,122125],{"class":79,"line":80},[77,122126,122127],{"class":323},"# 检查是否已安装 pip\n",[77,122129,122130,122133],{"class":79,"line":91},[77,122131,122132],{"class":83},"pip3",[77,122134,28761],{"class":94},[77,122136,122137],{"class":79,"line":107},[77,122138,122139],{"class":323},"# 如果未安装，先安装 pip3（见下方）\n",[77,122141,122142],{"class":79,"line":191},[77,122143,122144],{"class":323},"# 配置 pip 使用清华源\n",[77,122146,122147,122149,122152,122155,122158],{"class":79,"line":1543},[77,122148,122132],{"class":83},[77,122150,122151],{"class":271}," config",[77,122153,122154],{"class":271}," set",[77,122156,122157],{"class":271}," global.index-url",[77,122159,122160],{"class":271}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[24,122162,122163],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[24,122165,122166],{},[40,122167],{"alt":72,"src":122168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[67,122170,122172],{"className":119728,"code":122171,"language":119730,"meta":72,"style":72},"#安装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",[74,122173,122174,122179,122187,122198,122202,122207,122226,122230,122235,122247,122251,122256],{"__ignoreMap":72},[77,122175,122176],{"class":79,"line":80},[77,122177,122178],{"class":323},"#安装pip3\n",[77,122180,122181,122183,122185],{"class":79,"line":91},[77,122182,27044],{"class":83},[77,122184,119749],{"class":271},[77,122186,28710],{"class":271},[77,122188,122189,122191,122193,122195],{"class":79,"line":107},[77,122190,27044],{"class":83},[77,122192,28544],{"class":271},[77,122194,26301],{"class":271},[77,122196,122197],{"class":271}," python3-pip\n",[77,122199,122200],{"class":79,"line":191},[77,122201,4875],{"emptyLinePlaceholder":2549},[77,122203,122204],{"class":79,"line":1543},[77,122205,122206],{"class":323},"#更新pip3\n",[77,122208,122209,122211,122213,122215,122217,122219,122222,122224],{"class":79,"line":1549},[77,122210,103315],{"class":83},[77,122212,103318],{"class":94},[77,122214,103341],{"class":271},[77,122216,26301],{"class":271},[77,122218,28898],{"class":94},[77,122220,122221],{"class":271}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[77,122223,103346],{"class":94},[77,122225,103349],{"class":271},[77,122227,122228],{"class":79,"line":1566},[77,122229,4875],{"emptyLinePlaceholder":2549},[77,122231,122232],{"class":79,"line":1572},[77,122233,122234],{"class":323},"#设置pip源为清华源\n",[77,122236,122237,122239,122241,122243,122245],{"class":79,"line":1589},[77,122238,122132],{"class":83},[77,122240,122151],{"class":271},[77,122242,122154],{"class":271},[77,122244,122157],{"class":271},[77,122246,122160],{"class":271},[77,122248,122249],{"class":79,"line":1595},[77,122250,4875],{"emptyLinePlaceholder":2549},[77,122252,122253],{"class":79,"line":4088},[77,122254,122255],{"class":323},"#测试\n",[77,122257,122258,122260,122262,122264,122266,122268],{"class":79,"line":4093},[77,122259,103315],{"class":83},[77,122261,103318],{"class":94},[77,122263,103341],{"class":271},[77,122265,26301],{"class":271},[77,122267,103346],{"class":94},[77,122269,103349],{"class":271},[24,122271,122272],{},"成功的话，会看到Looking后面是tsinghua字样。",[24,122274,122275],{},[40,122276],{"alt":72,"src":122277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122279,122281],{"id":122280},"_35-显卡驱动安装","3.5 显卡驱动安装",[19,122283,122285],{"id":122284},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[67,122287,122289],{"className":120955,"code":122288,"language":120957,"meta":72,"style":72},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[74,122290,122291,122296,122311,122316],{"__ignoreMap":72},[77,122292,122293],{"class":79,"line":80},[77,122294,122295],{"class":323},"# 如果是使用apt安装的驱动\n",[77,122297,122298,122300,122302,122304,122306,122309],{"class":79,"line":91},[77,122299,27044],{"class":83},[77,122301,28544],{"class":271},[77,122303,28547],{"class":271},[77,122305,121590],{"class":94},[77,122307,122308],{"class":271}," nvidia",[77,122310,121680],{"class":94},[77,122312,122313],{"class":79,"line":107},[77,122314,122315],{"class":323},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[77,122317,122318,122320],{"class":79,"line":191},[77,122319,27044],{"class":83},[77,122321,122322],{"class":271}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[19,122324,122326],{"id":122325},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24468,122328,122330],{"id":122329},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[406,122332,122334],{"id":122333},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[67,122336,122338],{"className":120955,"code":122337,"language":120957,"meta":72,"style":72},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[74,122339,122340,122345,122356,122361,122371,122376],{"__ignoreMap":72},[77,122341,122342],{"class":79,"line":80},[77,122343,122344],{"class":323},"# 安装英伟达驱动\n",[77,122346,122347,122349,122351,122353],{"class":79,"line":91},[77,122348,27044],{"class":83},[77,122350,119749],{"class":271},[77,122352,26301],{"class":271},[77,122354,122355],{"class":271}," nvidia-driver-版本号\n",[77,122357,122358],{"class":79,"line":107},[77,122359,122360],{"class":323},"# 重启 \n",[77,122362,122363,122365,122367,122369],{"class":79,"line":191},[77,122364,27044],{"class":83},[77,122366,122068],{"class":271},[77,122368,122071],{"class":94},[77,122370,122074],{"class":271},[77,122372,122373],{"class":79,"line":1543},[77,122374,122375],{"class":323},"# 检查驱动是否安装成功\n",[77,122377,122378],{"class":79,"line":1549},[77,122379,122380],{"class":83},"nvidia-smi\n",[406,122382,122384],{"id":122383},"_35212-debian","3.5.2.1.2 Debian",[67,122386,122388],{"className":120955,"code":122387,"language":120957,"meta":72,"style":72},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[74,122389,122390,122394,122408,122412,122422,122426],{"__ignoreMap":72},[77,122391,122392],{"class":79,"line":80},[77,122393,122344],{"class":323},[77,122395,122396,122398,122400,122402,122405],{"class":79,"line":91},[77,122397,27044],{"class":83},[77,122399,119749],{"class":271},[77,122401,26301],{"class":271},[77,122403,122404],{"class":271}," nvidia-driver",[77,122406,122407],{"class":271}," nvidia-settings\n",[77,122409,122410],{"class":79,"line":107},[77,122411,122360],{"class":323},[77,122413,122414,122416,122418,122420],{"class":79,"line":191},[77,122415,27044],{"class":83},[77,122417,122068],{"class":271},[77,122419,122071],{"class":94},[77,122421,122074],{"class":271},[77,122423,122424],{"class":79,"line":1543},[77,122425,122375],{"class":323},[77,122427,122428],{"class":79,"line":1549},[77,122429,122380],{"class":83},[24468,122431,122433],{"id":122432},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[24,122435,122436,122437,122440],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[27,122438,122439],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[24,122442,122443,122444],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[687,122445,122446],{},[27,122447,122448],{},"（也可以不禁用桌面环境，直接进行下一步。）",[67,122450,122452],{"className":120955,"code":122451,"language":120957,"meta":72,"style":72},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[74,122453,122454,122459,122469,122474,122487,122492],{"__ignoreMap":72},[77,122455,122456],{"class":79,"line":80},[77,122457,122458],{"class":323},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[77,122460,122461,122463,122466],{"class":79,"line":91},[77,122462,27044],{"class":83},[77,122464,122465],{"class":271}," telinit",[77,122467,122468],{"class":94}," 3\n",[77,122470,122471],{"class":79,"line":107},[77,122472,122473],{"class":323},"# ubuntu 使用下方命令\n",[77,122475,122476,122478,122481,122484],{"class":79,"line":191},[77,122477,27044],{"class":83},[77,122479,122480],{"class":271}," service",[77,122482,122483],{"class":271}," lightdm",[77,122485,122486],{"class":271}," stop\n",[77,122488,122489],{"class":79,"line":1543},[77,122490,122491],{"class":323},"# Fedora 使用下方命令\n",[77,122493,122494,122496,122498,122501],{"class":79,"line":1549},[77,122495,27044],{"class":83},[77,122497,28981],{"class":271},[77,122499,122500],{"class":271}," isolate",[77,122502,122503],{"class":271}," multi-user.target\n",[24,122505,122506],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[67,122508,122510],{"className":120955,"code":122509,"language":120957,"meta":72,"style":72},"# 编译环境+准备工作\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",[74,122511,122512,122517,122528,122533,122540,122545,122557,122562,122569,122574],{"__ignoreMap":72},[77,122513,122514],{"class":79,"line":80},[77,122515,122516],{"class":323},"# 编译环境+准备工作\n",[77,122518,122519,122521,122523,122525],{"class":79,"line":91},[77,122520,27044],{"class":83},[77,122522,119749],{"class":271},[77,122524,26301],{"class":271},[77,122526,122527],{"class":271}," build-essential\n",[77,122529,122530],{"class":79,"line":107},[77,122531,122532],{"class":323},"# 进入到.run目录中\n",[77,122534,122535,122537],{"class":79,"line":191},[77,122536,103711],{"class":94},[77,122538,122539],{"class":271}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[77,122541,122542],{"class":79,"line":1543},[77,122543,122544],{"class":323},"# 给驱动文件增加可执行权限：\n",[77,122546,122547,122549,122551,122554],{"class":79,"line":1549},[77,122548,27044],{"class":83},[77,122550,27047],{"class":271},[77,122552,122553],{"class":271}," a+x",[77,122555,122556],{"class":271}," NVIDIA-Linux-x86_64-550.107.02.run\n",[77,122558,122559],{"class":79,"line":1566},[77,122560,122561],{"class":323},"# 然后执行安装：\n",[77,122563,122564,122566],{"class":79,"line":1572},[77,122565,27044],{"class":83},[77,122567,122568],{"class":271}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[77,122570,122571],{"class":79,"line":1589},[77,122572,122573],{"class":323},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[77,122575,122576,122578,122581],{"class":79,"line":1595},[77,122577,27044],{"class":83},[77,122579,122580],{"class":271}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[77,122582,122583],{"class":94},"  --no-opengl-files\n",[24,122585,122586],{},"安装完毕重启即可",[67,122588,122590],{"className":120955,"code":122589,"language":120957,"meta":72,"style":72},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[74,122591,122592,122596,122602,122606],{"__ignoreMap":72},[77,122593,122594],{"class":79,"line":80},[77,122595,122360],{"class":323},[77,122597,122598,122600],{"class":79,"line":91},[77,122599,27044],{"class":83},[77,122601,29115],{"class":271},[77,122603,122604],{"class":79,"line":107},[77,122605,122375],{"class":323},[77,122607,122608],{"class":79,"line":191},[77,122609,122380],{"class":83},[19,122611,122613],{"id":122612},"_353-安装cuda","3.5.3 安装CUDA",[24,122615,122616],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[24,122618,122619],{},[40,122620],{"alt":72,"src":122621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[139,122623,122624],{},[54,122625,122626],{},"先查看显卡驱动所支持的最高CUDA版本",[67,122628,122629],{"className":120955,"code":122380,"language":120957,"meta":72,"style":72},[74,122630,122631],{"__ignoreMap":72},[77,122632,122633],{"class":79,"line":80},[77,122634,122380],{"class":83},[24,122636,122637],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[24,122639,122640],{},[40,122641],{"alt":72,"src":122642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[139,122644,122645],{"start":91},[54,122646,122647],{},"下载CUDA并安装CUDA",[24,122649,120734,122650],{},[417,122651,120737],{"href":120737,"rel":122652},[26332],[24,122654,122655],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[24,122657,122658],{},[40,122659],{"alt":72,"src":122660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[24,122662,122663,122664,122669],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[417,122665,122668],{"href":122666,"rel":122667},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26332],"Vinci机器人队单片机教程","）",[24,122671,122672],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[24,122674,122675],{},[40,122676],{"alt":72,"src":122677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[24,122679,122680],{},"将最下方框框里的命令敲入终端",[67,122682,122684],{"className":120955,"code":122683,"language":120957,"meta":72,"style":72},"# 在当前文件夹下创建一个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",[74,122685,122686,122691,122700,122705,122712,122717,122725,122730,122741,122746],{"__ignoreMap":72},[77,122687,122688],{"class":79,"line":80},[77,122689,122690],{"class":323},"# 在当前文件夹下创建一个ttt的子文件夹\n",[77,122692,122693,122695,122697],{"class":79,"line":91},[77,122694,103701],{"class":83},[77,122696,31684],{"class":94},[77,122698,122699],{"class":271}," .\u002Fttt\n",[77,122701,122702],{"class":79,"line":107},[77,122703,122704],{"class":323},"# 进入ttt文件夹\n",[77,122706,122707,122709],{"class":79,"line":191},[77,122708,103711],{"class":94},[77,122710,122711],{"class":271}," ttt\n",[77,122713,122714],{"class":79,"line":1543},[77,122715,122716],{"class":323},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[77,122718,122719,122722],{"class":79,"line":1549},[77,122720,122721],{"class":83},"wget",[77,122723,122724],{"class":271}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[77,122726,122727],{"class":79,"line":1566},[77,122728,122729],{"class":323},"# 给予权限\n",[77,122731,122732,122734,122736,122738],{"class":79,"line":1572},[77,122733,27044],{"class":83},[77,122735,27047],{"class":271},[77,122737,122553],{"class":271},[77,122739,122740],{"class":271}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[77,122742,122743],{"class":79,"line":1589},[77,122744,122745],{"class":323},"# 运行脚本\n",[77,122747,122748,122750],{"class":79,"line":1595},[77,122749,27044],{"class":83},[77,122751,122740],{"class":271},[24,122753,122754],{},[40,122755],{"alt":72,"src":122756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[24,122758,122759],{},"正在安装中：",[24,122761,122762],{},[40,122763],{"alt":72,"src":122764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[24,122766,122767],{},"输入accept接受即可",[24,122769,122770],{},[40,122771],{"alt":72,"src":122772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[24,122774,122775],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[24,122777,122778],{},[40,122779],{"alt":72,"src":122780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[24,122782,122783],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[24,122785,122786],{},[40,122787],{"alt":72,"src":122788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[139,122790,122791],{"start":107},[54,122792,122793],{},"配置环境",[24,122795,122796],{},"根据上方确认一下路径，比如我上面红色框起来的为",[67,122798,122800],{"className":120955,"code":122799,"language":120957,"meta":72,"style":72},"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",[74,122801,122802,122818,122833],{"__ignoreMap":72},[77,122803,122804,122807,122810,122813,122816],{"class":79,"line":80},[77,122805,122806],{"class":83},"Please",[77,122808,122809],{"class":271}," make",[77,122811,122812],{"class":271}," sure",[77,122814,122815],{"class":271}," that",[77,122817,5149],{"class":87},[77,122819,122820,122822,122825,122828,122831],{"class":79,"line":91},[77,122821,54729],{"class":83},[77,122823,122824],{"class":271},"   PATH",[77,122826,122827],{"class":271}," includes",[77,122829,122830],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[77,122832,5149],{"class":87},[77,122834,122835,122837,122840,122842,122845,122848,122850,122853,122856,122859,122862,122864,122867,122869],{"class":79,"line":107},[77,122836,54729],{"class":83},[77,122838,122839],{"class":271},"   LD_LIBRARY_PATH",[77,122841,122827],{"class":271},[77,122843,122844],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[77,122846,122847],{"class":271}," or,",[77,122849,7684],{"class":271},[77,122851,122852],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[77,122854,122855],{"class":271}," to",[77,122857,122858],{"class":271}," \u002Fetc\u002Fld.so.conf",[77,122860,122861],{"class":271}," and",[77,122863,29698],{"class":271},[77,122865,122866],{"class":271}," ldconfig",[77,122868,67047],{"class":271},[77,122870,122871],{"class":271}," root\n",[24,122873,122874],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[67,122876,122878],{"className":120955,"code":122877,"language":120957,"meta":72,"style":72},"which nvcc\n",[74,122879,122880],{"__ignoreMap":72},[77,122881,122882,122885],{"class":79,"line":80},[77,122883,122884],{"class":94},"which",[77,122886,122887],{"class":271}," nvcc\n",[24,122889,122890],{},[40,122891],{"alt":72,"src":122892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[24,122894,122895],{},"所以我进行以下操作：",[67,122897,122899],{"className":120955,"code":122898,"language":120957,"meta":72,"style":72},"sudo vim ~\u002F.bashrc\n",[74,122900,122901],{"__ignoreMap":72},[77,122902,122903,122905,122907],{"class":79,"line":80},[77,122904,27044],{"class":83},[77,122906,121015],{"class":271},[77,122908,122909],{"class":271}," ~\u002F.bashrc\n",[24,122911,122912],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[67,122914,122916],{"className":120955,"code":122915,"language":120957,"meta":72,"style":72},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[74,122917,122918,122930],{"__ignoreMap":72},[77,122919,122920,122922,122925,122927],{"class":79,"line":80},[77,122921,27510],{"class":2123},[77,122923,122924],{"class":87}," PATH",[77,122926,268],{"class":2123},[77,122928,122929],{"class":87},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[77,122931,122932,122934,122937,122939],{"class":79,"line":91},[77,122933,27510],{"class":2123},[77,122935,122936],{"class":87}," LD_LIBRARY_PATH",[77,122938,268],{"class":2123},[77,122940,122941],{"class":87},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[24,122943,122944],{},[40,122945],{"alt":72,"src":122946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[67,122948,122950],{"className":120955,"code":122949,"language":120957,"meta":72,"style":72},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[74,122951,122952,122957,122963,122968],{"__ignoreMap":72},[77,122953,122954],{"class":79,"line":80},[77,122955,122956],{"class":323},"# 刷新当前终端的环境变量\n",[77,122958,122959,122961],{"class":79,"line":91},[77,122960,103329],{"class":94},[77,122962,122909],{"class":271},[77,122964,122965],{"class":79,"line":107},[77,122966,122967],{"class":323},"# 验证CUDA是否安装成功\n",[77,122969,122970,122973],{"class":79,"line":191},[77,122971,122972],{"class":83},"nvcc",[77,122974,122975],{"class":94}," -V\n",[24,122977,122978],{},"出现下图这种则安装成功。",[24,122980,122981],{},[40,122982],{"alt":72,"src":122983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[19,122985,122987],{"id":122986},"_354-安装cudnn","3.5.4 安装cuDNN",[139,122989,122990],{},[54,122991,122992],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[24,122994,122995,122996,123001],{},"前往 NVIDIA cuDNN 下载页面：",[417,122997,123000],{"href":122998,"rel":122999},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26332],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[24,123003,123004],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[24,123006,123007],{},[40,123008],{"alt":72,"src":123009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[24,123011,123012],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[24,123014,123015],{},[40,123016],{"alt":72,"src":123017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[24,123019,123020],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[24,123022,123023],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[24,123025,123026],{},[27,123027,123028],{},"我这里选择所有Linux X86_64最通用的办法：",[24,123030,123031],{},"下载好的：",[24,123033,123034],{},[40,123035],{"alt":72,"src":123036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[139,123038,123039],{"start":91},[54,123040,123041],{},"安装cuDNN",[24,123043,123044],{},"找到该文件所在目录，并打开终端，cd到该目录。",[24,123046,123047],{},[40,123048],{"alt":72,"src":123049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[24,123051,123052],{},"解压文件，并复制到对应位置完成安装",[67,123054,123056],{"className":120955,"code":123055,"language":120957,"meta":72,"style":72},"# 解压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",[74,123057,123058,123063,123074,123079,123086,123091,123107,123121,123126,123137,123146,123150,123166],{"__ignoreMap":72},[77,123059,123060],{"class":79,"line":80},[77,123061,123062],{"class":323},"# 解压cuDNN文件\n",[77,123064,123065,123068,123071],{"class":79,"line":91},[77,123066,123067],{"class":83},"tar",[77,123069,123070],{"class":94}," -xvf",[77,123072,123073],{"class":271}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[77,123075,123076],{"class":79,"line":107},[77,123077,123078],{"class":323},"# cd进文件夹\n",[77,123080,123081,123083],{"class":79,"line":191},[77,123082,103711],{"class":94},[77,123084,123085],{"class":271}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[77,123087,123088],{"class":79,"line":1543},[77,123089,123090],{"class":323},"# 复制cuDNN文件到CUDA目录\n",[77,123092,123093,123095,123097,123100,123102,123105],{"class":79,"line":1549},[77,123094,27044],{"class":83},[77,123096,30329],{"class":271},[77,123098,123099],{"class":271}," include\u002Fcudnn",[77,123101,3068],{"class":94},[77,123103,123104],{"class":271},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[77,123106,5149],{"class":87},[77,123108,123109,123111,123113,123116,123118],{"class":79,"line":1566},[77,123110,27044],{"class":83},[77,123112,30329],{"class":271},[77,123114,123115],{"class":271}," lib\u002Flibcudnn",[77,123117,3068],{"class":94},[77,123119,123120],{"class":271},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[77,123122,123123],{"class":79,"line":1572},[77,123124,123125],{"class":323},"# 对比一下有没有缺文件\n",[77,123127,123128,123130,123133,123135],{"class":79,"line":1589},[77,123129,29229],{"class":83},[77,123131,123132],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[77,123134,3068],{"class":94},[77,123136,5149],{"class":87},[77,123138,123139,123141,123144],{"class":79,"line":1595},[77,123140,29229],{"class":83},[77,123142,123143],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[77,123145,121680],{"class":94},[77,123147,123148],{"class":79,"line":4088},[77,123149,122729],{"class":323},[77,123151,123152,123154,123156,123159,123161,123163],{"class":79,"line":4093},[77,123153,27044],{"class":83},[77,123155,27047],{"class":271},[77,123157,123158],{"class":271}," a+r",[77,123160,123132],{"class":271},[77,123162,3068],{"class":94},[77,123164,123165],{"class":87},"   \n",[77,123167,123168,123170,123172,123174,123176],{"class":79,"line":4099},[77,123169,27044],{"class":83},[77,123171,27047],{"class":271},[77,123173,123158],{"class":271},[77,123175,123143],{"class":271},[77,123177,121680],{"class":94},[139,123179,123180],{"start":107},[54,123181,123182],{},"检查是否安装成功",[67,123184,123186],{"className":120955,"code":123185,"language":120957,"meta":72,"style":72},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[74,123187,123188,123193],{"__ignoreMap":72},[77,123189,123190],{"class":79,"line":80},[77,123191,123192],{"class":323},"# 检查cuDNN版本命令\n",[77,123194,123195,123198,123201,123203,123205,123208,123211],{"class":79,"line":91},[77,123196,123197],{"class":83},"cat",[77,123199,123200],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[77,123202,27577],{"class":2123},[77,123204,32704],{"class":83},[77,123206,123207],{"class":271}," CUDNN_MAJOR",[77,123209,123210],{"class":94}," -A",[77,123212,50189],{"class":94},[24,123214,123215],{},"出现下图这样的就是安装成功了",[24,123217,123218],{},[40,123219],{"alt":72,"src":123220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[139,123222,123223],{"start":191},[54,123224,123225],{},"软链接(一般不需要)",[67,123227,123229],{"className":120955,"code":123228,"language":120957,"meta":72,"style":72},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[74,123230,123231,123236],{"__ignoreMap":72},[77,123232,123233],{"class":79,"line":80},[77,123234,123235],{"class":323},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[77,123237,123238,123240],{"class":79,"line":91},[77,123239,27044],{"class":83},[77,123241,123242],{"class":271}," ldconfig\n",[24,123244,123245],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[67,123247,123252],{"className":123248,"code":123249,"language":123250,"meta":123251,"style":72},"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",[74,123253,123254,123259,123264,123269,123274,123279,123284],{"__ignoreMap":72},[77,123255,123256],{"class":79,"line":80},[77,123257,123258],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[77,123260,123261],{"class":79,"line":91},[77,123262,123263],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[77,123265,123266],{"class":79,"line":107},[77,123267,123268],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[77,123270,123271],{"class":79,"line":191},[77,123272,123273],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[77,123275,123276],{"class":79,"line":1543},[77,123277,123278],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[77,123280,123281],{"class":79,"line":1549},[77,123282,123283],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[77,123285,123286],{"class":79,"line":1566},[77,123287,123288],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[24,123290,123291],{},"运行下方的命令",[67,123293,123295],{"className":120955,"code":123294,"language":120957,"meta":72,"style":72},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[74,123296,123297,123302,123309,123314],{"__ignoreMap":72},[77,123298,123299],{"class":79,"line":80},[77,123300,123301],{"class":323},"# cd进入CUDA路径\n",[77,123303,123304,123306],{"class":79,"line":91},[77,123305,103711],{"class":94},[77,123307,123308],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[77,123310,123311],{"class":79,"line":107},[77,123312,123313],{"class":323}," # 查看本路径下的需要软链接的文件名\n",[77,123315,123316],{"class":79,"line":191},[77,123317,123318],{"class":83}," ls\n",[24,123320,123321],{},[40,123322],{"alt":72,"src":123323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[24,123325,123326,123327,20880,123330,20880,123333,123336],{},"如上图，我需要将",[74,123328,123329],{},"libcudnn_xxx_xxxxx.so.8.9.7",[74,123331,123332],{},"libcudnn_xxx_xxxxx.so.8",[74,123334,123335],{},"libcudnn_xxx_xxxxx.so","软链接",[67,123338,123340],{"className":120955,"code":123339,"language":120957,"meta":72,"style":72},"# 创建符号链接。对于每个 .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",[74,123341,123342,123347,123363,123377,123391,123405,123419,123433,123447,123452,123458,123463],{"__ignoreMap":72},[77,123343,123344],{"class":79,"line":80},[77,123345,123346],{"class":323},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[77,123348,123349,123351,123354,123357,123360],{"class":79,"line":91},[77,123350,27044],{"class":83},[77,123352,123353],{"class":271}," ln",[77,123355,123356],{"class":94}," -sf",[77,123358,123359],{"class":271}," libcudnn_cnn_train.so.8.9.7",[77,123361,123362],{"class":271}," libcudnn_cnn_train.so.8\n",[77,123364,123365,123367,123369,123371,123374],{"class":79,"line":107},[77,123366,27044],{"class":83},[77,123368,123353],{"class":271},[77,123370,123356],{"class":94},[77,123372,123373],{"class":271}," libcudnn_adv_infer.so.8.9.7",[77,123375,123376],{"class":271}," libcudnn_adv_infer.so.8\n",[77,123378,123379,123381,123383,123385,123388],{"class":79,"line":191},[77,123380,27044],{"class":83},[77,123382,123353],{"class":271},[77,123384,123356],{"class":94},[77,123386,123387],{"class":271}," libcudnn_adv_train.so.8.9.7",[77,123389,123390],{"class":271}," libcudnn_adv_train.so.8\n",[77,123392,123393,123395,123397,123399,123402],{"class":79,"line":1543},[77,123394,27044],{"class":83},[77,123396,123353],{"class":271},[77,123398,123356],{"class":94},[77,123400,123401],{"class":271}," libcudnn_cnn_infer.so.8.9.7",[77,123403,123404],{"class":271}," libcudnn_cnn_infer.so.8\n",[77,123406,123407,123409,123411,123413,123416],{"class":79,"line":1549},[77,123408,27044],{"class":83},[77,123410,123353],{"class":271},[77,123412,123356],{"class":94},[77,123414,123415],{"class":271}," libcudnn.so.8.9.7",[77,123417,123418],{"class":271}," libcudnn.so.8\n",[77,123420,123421,123423,123425,123427,123430],{"class":79,"line":1566},[77,123422,27044],{"class":83},[77,123424,123353],{"class":271},[77,123426,123356],{"class":94},[77,123428,123429],{"class":271}," libcudnn_ops_infer.so.8.9.7",[77,123431,123432],{"class":271}," libcudnn_ops_infer.so.8\n",[77,123434,123435,123437,123439,123441,123444],{"class":79,"line":1572},[77,123436,27044],{"class":83},[77,123438,123353],{"class":271},[77,123440,123356],{"class":94},[77,123442,123443],{"class":271}," libcudnn_ops_train.so.8.9.7",[77,123445,123446],{"class":271}," libcudnn_ops_train.so.8\n",[77,123448,123449],{"class":79,"line":1589},[77,123450,123451],{"class":323},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[77,123453,123454,123456],{"class":79,"line":1595},[77,123455,27044],{"class":83},[77,123457,123242],{"class":271},[77,123459,123460],{"class":79,"line":4088},[77,123461,123462],{"class":323},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[77,123464,123465,123467,123470,123473,123475,123478],{"class":79,"line":4093},[77,123466,29229],{"class":83},[77,123468,123469],{"class":94}," -l",[77,123471,123472],{"class":271}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[77,123474,3068],{"class":94},[77,123476,123477],{"class":271},".so",[77,123479,121680],{"class":94},[19,123481,123483],{"id":123482},"_355-常见问题","3.5.5 常见问题",[139,123485,123486],{},[54,123487,123488],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[67,123490,123492],{"className":120955,"code":123491,"language":120957,"meta":72,"style":72},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[74,123493,123494],{"__ignoreMap":72},[77,123495,123496,123498,123500],{"class":79,"line":80},[77,123497,27044],{"class":83},[77,123499,121015],{"class":271},[77,123501,123502],{"class":271}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[24,123504,123505],{},"blacklist-nouveau.conf文件内容如下：",[67,123507,123509],{"className":120955,"code":123508,"language":120957,"meta":72,"style":72},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[74,123510,123511,123519,123526,123538,123548],{"__ignoreMap":72},[77,123512,123513,123516],{"class":79,"line":80},[77,123514,123515],{"class":83},"blacklist",[77,123517,123518],{"class":271}," nouveau\n",[77,123520,123521,123523],{"class":79,"line":91},[77,123522,123515],{"class":83},[77,123524,123525],{"class":271}," lbm-nouveau\n",[77,123527,123528,123530,123533,123536],{"class":79,"line":107},[77,123529,118363],{"class":83},[77,123531,123532],{"class":271}," nouveau",[77,123534,123535],{"class":271}," modeset=",[77,123537,5560],{"class":94},[77,123539,123540,123543,123545],{"class":79,"line":191},[77,123541,123542],{"class":94},"alias",[77,123544,123532],{"class":271},[77,123546,123547],{"class":271}," off\n",[77,123549,123550,123552,123555],{"class":79,"line":1543},[77,123551,123542],{"class":94},[77,123553,123554],{"class":271}," lbm-nouveau",[77,123556,123547],{"class":271},[24,123558,123559],{},"接着运行下方命令",[67,123561,123563],{"className":120955,"code":123562,"language":120957,"meta":72,"style":72},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[74,123564,123565,123575,123580],{"__ignoreMap":72},[77,123566,123567,123569,123572],{"class":79,"line":80},[77,123568,27044],{"class":83},[77,123570,123571],{"class":271}," update-initramfs",[77,123573,123574],{"class":94}," -u\n",[77,123576,123577],{"class":79,"line":91},[77,123578,123579],{"class":83},"或者\n",[77,123581,123582,123584,123587],{"class":79,"line":107},[77,123583,27044],{"class":83},[77,123585,123586],{"class":271}," dracut",[77,123588,123589],{"class":94}," --force\n",[24,123591,123592],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[67,123594,123596],{"className":120955,"code":123595,"language":120957,"meta":72,"style":72},"lsmod | grep nouveau\n",[74,123597,123598],{"__ignoreMap":72},[77,123599,123600,123603,123605,123607],{"class":79,"line":80},[77,123601,123602],{"class":83},"lsmod",[77,123604,27577],{"class":2123},[77,123606,32704],{"class":83},[77,123608,123518],{"class":271},[139,123610,123611],{"start":91},[54,123612,123613],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[67,123615,123617],{"className":120955,"code":123616,"language":120957,"meta":72,"style":72},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[74,123618,123619],{"__ignoreMap":72},[77,123620,123621,123623,123625],{"class":79,"line":80},[77,123622,27044],{"class":83},[77,123624,121015],{"class":271},[77,123626,123627],{"class":271}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[24,123629,123630],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[67,123632,123634],{"className":120955,"code":123633,"language":120957,"meta":72,"style":72},"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",[74,123635,123636,123644,123652,123660,123667,123675,123685,123693],{"__ignoreMap":72},[77,123637,123638,123641],{"class":79,"line":80},[77,123639,123640],{"class":83},"Section",[77,123642,123643],{"class":271}," \"OutputClass\"\n",[77,123645,123646,123649],{"class":79,"line":91},[77,123647,123648],{"class":83},"   Identifier",[77,123650,123651],{"class":271}," \"nvidia\"\n",[77,123653,123654,123657],{"class":79,"line":107},[77,123655,123656],{"class":83},"   MatchDriver",[77,123658,123659],{"class":271}," \"nvidia-drm\"\n",[77,123661,123662,123665],{"class":79,"line":191},[77,123663,123664],{"class":83},"   Driver",[77,123666,123651],{"class":271},[77,123668,123669,123672],{"class":79,"line":1543},[77,123670,123671],{"class":83},"   Option",[77,123673,123674],{"class":271}," \"AllowEmptyInitialConfiguration\"\n",[77,123676,123677,123679,123682],{"class":79,"line":1549},[77,123678,123671],{"class":83},[77,123680,123681],{"class":271}," \"PrimaryGPU\"",[77,123683,123684],{"class":271}," \"yes\"\n",[77,123686,123687,123690],{"class":79,"line":1566},[77,123688,123689],{"class":83},"   ModulePath",[77,123691,123692],{"class":271}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[77,123694,123695],{"class":79,"line":1572},[77,123696,123697],{"class":83},"EndSection\n",[139,123699,123700],{"start":107},[54,123701,123702],{},"安装N卡驱动提示错误",[67,123704,123706],{"className":123248,"code":123705,"language":123250,"meta":123251,"style":72},"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",[74,123707,123708],{"__ignoreMap":72},[77,123709,123710],{"class":79,"line":80},[77,123711,123705],{},[139,123713,123714],{},[54,123715,123716],{},"检查当前运行的内核版本：",[24,123718,123719],{},"运行以下命令以查看你当前正在使用的内核版本：",[67,123721,123723],{"className":119728,"code":123722,"language":119730,"meta":72,"style":72},"uname -r\n",[74,123724,123725],{"__ignoreMap":72},[77,123726,123727,123729],{"class":79,"line":80},[77,123728,72647],{"class":83},[77,123730,123731],{"class":94}," -r\n",[139,123733,123734],{"start":91},[54,123735,123736],{},"安装内核开发文件：",[24,123738,123739,123740,123743],{},"确保你已经安装了与当前内核版本相匹配的 ",[74,123741,123742],{},"kernel-devel"," 包。运行以下命令来安装：",[67,123745,123747],{"className":119728,"code":123746,"language":119730,"meta":72,"style":72},"sudo dnf install kernel-devel-$(uname -r)\n",[74,123748,123749],{"__ignoreMap":72},[77,123750,123751,123753,123755,123757,123760,123762,123764,123766],{"class":79,"line":80},[77,123752,27044],{"class":83},[77,123754,28783],{"class":271},[77,123756,26301],{"class":271},[77,123758,123759],{"class":271}," kernel-devel-",[77,123761,27567],{"class":87},[77,123763,72647],{"class":83},[77,123765,122071],{"class":94},[77,123767,2628],{"class":87},[24,123769,123770],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[139,123772,123773],{"start":107},[54,123774,123775],{},"安装内核源代码（如果需要）：",[24,123777,123778],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[67,123780,123782],{"className":119728,"code":123781,"language":119730,"meta":72,"style":72},"sudo dnf install kernel-headers kernel-source\n",[74,123783,123784],{"__ignoreMap":72},[77,123785,123786,123788,123790,123792,123795],{"class":79,"line":80},[77,123787,27044],{"class":83},[77,123789,28783],{"class":271},[77,123791,26301],{"class":271},[77,123793,123794],{"class":271}," kernel-headers",[77,123796,123797],{"class":271}," kernel-source\n",[139,123799,123800],{"start":191},[54,123801,123802],{},"检查安装：",[24,123804,123805,123806,123809],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[74,123807,123808],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[67,123811,123813],{"className":119728,"code":123812,"language":119730,"meta":72,"style":72},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[74,123814,123815],{"__ignoreMap":72},[77,123816,123817,123819],{"class":79,"line":80},[77,123818,29229],{"class":83},[77,123820,123821],{"class":271}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[24,123823,123824,123825,123828],{},"如果仍然遇到问题，可以通过 ",[74,123826,123827],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2520,123830,123831],{},"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":72,"searchDepth":91,"depth":91,"links":123833},[123834,123838,123848,123852,123853],{"id":120931,"depth":91,"text":120932,"children":123835},[123836,123837],{"id":120941,"depth":107,"text":120942},{"id":120951,"depth":107,"text":120952},{"id":121151,"depth":91,"text":121152,"children":123839},[123840,123841,123842,123843,123844,123845,123846,123847],{"id":121155,"depth":107,"text":121156},{"id":121225,"depth":107,"text":121226},{"id":121314,"depth":107,"text":121315},{"id":121559,"depth":107,"text":121560},{"id":121629,"depth":107,"text":121630},{"id":121696,"depth":107,"text":121697},{"id":121731,"depth":107,"text":121732},{"id":121786,"depth":107,"text":121787},{"id":121837,"depth":91,"text":121838,"children":123849},[123850,123851],{"id":121841,"depth":107,"text":121842},{"id":121921,"depth":107,"text":121922},{"id":122107,"depth":91,"text":122108},{"id":122280,"depth":91,"text":122281,"children":123854},[123855,123856,123857,123858,123859],{"id":122284,"depth":107,"text":122285},{"id":122325,"depth":107,"text":122326},{"id":122612,"depth":107,"text":122613},{"id":122986,"depth":107,"text":122987},{"id":123482,"depth":107,"text":123483},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120923,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123866,"title":123867,"body":123868,"description":2546,"extension":2547,"meta":124208,"navigation":2549,"path":124209,"seo":124210,"stem":124211,"__hash__":124212},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123869,"toc":124206},[123870,123873,123878,123881,124127,124132,124135,124171,124174,124203],[10,123871,123867],{"id":123872},"_4-命令教程长期积累",[139,123874,123875],{},[54,123876,123877],{},"大多数命令",[24,123879,123880],{},"常用 Linux 命令速查：",[67,123882,123884],{"className":119728,"code":123883,"language":119730,"meta":72,"style":72},"# 文件与目录\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",[74,123885,123886,123891,123898,123905,123913,123920,123927,123935,123943,123950,123957,123965,123969,123974,123981,123989,123996,124000,124005,124012,124020,124028,124036,124044,124048,124053,124061,124068,124075,124083,124091,124095,124100,124109,124118],{"__ignoreMap":72},[77,123887,123888],{"class":79,"line":80},[77,123889,123890],{"class":323},"# 文件与目录\n",[77,123892,123893,123895],{"class":79,"line":91},[77,123894,29229],{"class":83},[77,123896,123897],{"class":323},"        # 列出目录内容\n",[77,123899,123900,123902],{"class":79,"line":107},[77,123901,103711],{"class":94},[77,123903,123904],{"class":323},"        # 切换目录\n",[77,123906,123907,123910],{"class":79,"line":191},[77,123908,123909],{"class":94},"pwd",[77,123911,123912],{"class":323},"       # 显示当前路径\n",[77,123914,123915,123917],{"class":79,"line":1543},[77,123916,103701],{"class":83},[77,123918,123919],{"class":323},"     # 创建目录\n",[77,123921,123922,123924],{"class":79,"line":1549},[77,123923,27790],{"class":83},[77,123925,123926],{"class":323},"        # 删除文件或目录\n",[77,123928,123929,123932],{"class":79,"line":1566},[77,123930,123931],{"class":83},"cp",[77,123933,123934],{"class":323},"        # 复制文件或目录\n",[77,123936,123937,123940],{"class":79,"line":1572},[77,123938,123939],{"class":83},"mv",[77,123941,123942],{"class":323},"        # 移动\u002F重命名文件或目录\n",[77,123944,123945,123947],{"class":79,"line":1589},[77,123946,103718],{"class":83},[77,123948,123949],{"class":323},"     # 创建空文件\n",[77,123951,123952,123954],{"class":79,"line":1595},[77,123953,123197],{"class":83},[77,123955,123956],{"class":323},"       # 查看文件内容\n",[77,123958,123959,123962],{"class":79,"line":4088},[77,123960,123961],{"class":83},"head\u002Ftail",[77,123963,123964],{"class":323}," # 查看文件头部\u002F尾部\n",[77,123966,123967],{"class":79,"line":4093},[77,123968,4875],{"emptyLinePlaceholder":2549},[77,123970,123971],{"class":79,"line":4099},[77,123972,123973],{"class":323},"# 权限管理\n",[77,123975,123976,123978],{"class":79,"line":4104},[77,123977,27079],{"class":83},[77,123979,123980],{"class":323},"     # 修改文件权限\n",[77,123982,123983,123986],{"class":79,"line":4118},[77,123984,123985],{"class":83},"chown",[77,123987,123988],{"class":323},"     # 修改文件所有者\n",[77,123990,123991,123993],{"class":79,"line":4123},[77,123992,27044],{"class":83},[77,123994,123995],{"class":323},"      # 以管理员身份执行\n",[77,123997,123998],{"class":79,"line":4129},[77,123999,4875],{"emptyLinePlaceholder":2549},[77,124001,124002],{"class":79,"line":4150},[77,124003,124004],{"class":323},"# 系统信息\n",[77,124006,124007,124009],{"class":79,"line":4155},[77,124008,72647],{"class":83},[77,124010,124011],{"class":323},"     # 系统信息\n",[77,124013,124014,124017],{"class":79,"line":4169},[77,124015,124016],{"class":83},"df",[77,124018,124019],{"class":323},"        # 磁盘使用情况\n",[77,124021,124022,124025],{"class":79,"line":4174},[77,124023,124024],{"class":83},"free",[77,124026,124027],{"class":323},"      # 内存使用情况\n",[77,124029,124030,124033],{"class":79,"line":4203},[77,124031,124032],{"class":83},"top\u002Fhtop",[77,124034,124035],{"class":323},"  # 进程监控\n",[77,124037,124038,124041],{"class":79,"line":4208},[77,124039,124040],{"class":83},"ps",[77,124042,124043],{"class":323},"        # 查看进程\n",[77,124045,124046],{"class":79,"line":4225},[77,124047,4875],{"emptyLinePlaceholder":2549},[77,124049,124050],{"class":79,"line":4230},[77,124051,124052],{"class":323},"# 网络\n",[77,124054,124055,124058],{"class":79,"line":4235},[77,124056,124057],{"class":83},"ping",[77,124059,124060],{"class":323},"      # 测试网络连通性\n",[77,124062,124063,124065],{"class":79,"line":4240},[77,124064,29317],{"class":83},[77,124066,124067],{"class":323},"      # 发送 HTTP 请求\n",[77,124069,124070,124072],{"class":79,"line":4254},[77,124071,122721],{"class":83},[77,124073,124074],{"class":323},"      # 下载文件\n",[77,124076,124077,124080],{"class":79,"line":4259},[77,124078,124079],{"class":83},"ssh",[77,124081,124082],{"class":323},"       # 远程登录\n",[77,124084,124085,124088],{"class":79,"line":5052},[77,124086,124087],{"class":83},"scp",[77,124089,124090],{"class":323},"       # 远程文件传输\n",[77,124092,124093],{"class":79,"line":5066},[77,124094,4875],{"emptyLinePlaceholder":2549},[77,124096,124097],{"class":79,"line":5074},[77,124098,124099],{"class":323},"# 包管理（Debian\u002FUbuntu）\n",[77,124101,124102,124104,124106],{"class":79,"line":5079},[77,124103,119800],{"class":83},[77,124105,119779],{"class":271},[77,124107,124108],{"class":323},"   # 更新软件源\n",[77,124110,124111,124113,124115],{"class":79,"line":5085},[77,124112,119800],{"class":83},[77,124114,26301],{"class":271},[77,124116,124117],{"class":323},"  # 安装软件包\n",[77,124119,124120,124122,124124],{"class":79,"line":5091},[77,124121,119800],{"class":83},[77,124123,28547],{"class":271},[77,124125,124126],{"class":323},"   # 卸载软件包\n",[139,124128,124129],{"start":91},[54,124130,124131],{},"KDE Dolphin 以root打开",[24,124133,124134],{},"kde5",[67,124136,124138],{"className":119728,"code":124137,"language":119730,"meta":72,"style":72},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[74,124139,124140],{"__ignoreMap":72},[77,124141,124142,124145,124148,124151,124153,124155,124158,124161,124163,124166,124168],{"class":79,"line":80},[77,124143,124144],{"class":83},"pkexec",[77,124146,124147],{"class":271}," env",[77,124149,124150],{"class":271}," DISPLAY=",[77,124152,30611],{"class":87},[77,124154,30669],{"class":271},[77,124156,124157],{"class":87},"$XAUTHORITY ",[77,124159,124160],{"class":271},"KDE_SESSION_VERSION=",[77,124162,2933],{"class":94},[77,124164,124165],{"class":271}," KDE_FULL_SESSION=",[77,124167,3840],{"class":94},[77,124169,124170],{"class":271}," dolphin\n",[24,124172,124173],{},"kde6",[67,124175,124177],{"className":119728,"code":124176,"language":119730,"meta":72,"style":72},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[74,124178,124179],{"__ignoreMap":72},[77,124180,124181,124183,124185,124187,124189,124191,124193,124195,124197,124199,124201],{"class":79,"line":80},[77,124182,124144],{"class":83},[77,124184,124147],{"class":271},[77,124186,124150],{"class":271},[77,124188,30611],{"class":87},[77,124190,30669],{"class":271},[77,124192,124157],{"class":87},[77,124194,124160],{"class":271},[77,124196,2958],{"class":94},[77,124198,124165],{"class":271},[77,124200,3840],{"class":94},[77,124202,124170],{"class":271},[2520,124204,124205],{},"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":72,"searchDepth":91,"depth":91,"links":124207},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123867,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124214,"title":124215,"body":124216,"description":2546,"extension":2547,"meta":124230,"navigation":2549,"path":124231,"seo":124232,"stem":124233,"__hash__":124234},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124217,"toc":124228},[124218,124221],[10,124219,124215],{"id":124220},"_5-各种环境配置",[24,124222,124223],{},[417,124224,124227],{"href":124225,"rel":124226},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26332],"电控组环境搭建大全",{"title":72,"searchDepth":91,"depth":91,"links":124229},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124215,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124236,"title":124237,"body":124238,"description":2546,"extension":2547,"meta":124586,"navigation":2549,"path":124587,"seo":124588,"stem":124589,"__hash__":124590},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124239,"toc":124578},[124240,124243,124247,124251,124255,124260,124267,124271,124564,124568,124575],[10,124241,124237],{"id":124242},"_6-拓展功能",[14,124244,124246],{"id":124245},"_61-wine","6.1 Wine",[14,124248,124250],{"id":124249},"_62-android","6.2 Android",[19,124252,124254],{"id":124253},"_621-i卡a卡","6.2.1 I卡、A卡",[139,124256,124257],{},[54,124258,124259],{},"Wayland-Waydroid(体验超级好)",[24,124261,124262,124263],{},"Waydroid 官网与安装指南：",[417,124264,124265],{"href":124265,"rel":124266},"https:\u002F\u002Fwaydro.id\u002F",[26332],[19,124268,124270],{"id":124269},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[139,124272,124273],{},[54,124274,124275,124276,124278,124279,124283,124285,124288,124293,124490],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56172,124277],{},"BlissOS 官网下载：",[417,124280,124281],{"href":124281,"rel":124282},"https:\u002F\u002Fblissos.org\u002F",[26332],[56172,124284],{},[40,124286],{"alt":72,"src":124287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[139,124289,124290],{"start":107},[54,124291,124292],{},"比较推荐的配置",[67,124294,124296],{"className":119728,"code":124295,"language":119730,"meta":72,"style":72},"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",[74,124297,124298,124305,124315,124325,124335,124347,124357,124364,124374,124383,124392,124402,124412,124421,124431,124441,124453,124463,124472,124482],{"__ignoreMap":72},[77,124299,124300,124303],{"class":79,"line":80},[77,124301,124302],{"class":83},"qemu-system-x86_64",[77,124304,27146],{"class":94},[77,124306,124307,124310,124313],{"class":79,"line":91},[77,124308,124309],{"class":94},"        -M",[77,124311,124312],{"class":271}," q35,vmport=off",[77,124314,27146],{"class":94},[77,124316,124317,124320,124323],{"class":79,"line":107},[77,124318,124319],{"class":94},"        -accel",[77,124321,124322],{"class":271}," kvm",[77,124324,27146],{"class":94},[77,124326,124327,124330,124333],{"class":79,"line":191},[77,124328,124329],{"class":94},"        -cpu",[77,124331,124332],{"class":271}," qemu64,+sse3,+sse4.2",[77,124334,27146],{"class":94},[77,124336,124337,124340,124343,124345],{"class":79,"line":1543},[77,124338,124339],{"class":94},"        -smp",[77,124341,124342],{"class":271}," 8,cores=",[77,124344,2907],{"class":94},[77,124346,27146],{"class":94},[77,124348,124349,124352,124355],{"class":79,"line":1549},[77,124350,124351],{"class":94},"        -m",[77,124353,124354],{"class":271}," 6G",[77,124356,27146],{"class":94},[77,124358,124359,124362],{"class":79,"line":1566},[77,124360,124361],{"class":94},"        -usb",[77,124363,27146],{"class":94},[77,124365,124366,124369,124372],{"class":79,"line":1572},[77,124367,124368],{"class":94},"        -device",[77,124370,124371],{"class":271}," virtio-tablet",[77,124373,27146],{"class":94},[77,124375,124376,124378,124381],{"class":79,"line":1589},[77,124377,124368],{"class":94},[77,124379,124380],{"class":271}," virtio-keyboard",[77,124382,27146],{"class":94},[77,124384,124385,124387,124390],{"class":79,"line":1595},[77,124386,124368],{"class":94},[77,124388,124389],{"class":271}," usb-tablet",[77,124391,27146],{"class":94},[77,124393,124394,124397,124400],{"class":79,"line":4088},[77,124395,124396],{"class":94},"        -bios",[77,124398,124399],{"class":271}," OVMF-pure-efi64.fd",[77,124401,27146],{"class":94},[77,124403,124404,124407,124410],{"class":79,"line":4093},[77,124405,124406],{"class":94},"        -net",[77,124408,124409],{"class":271}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[77,124411,27146],{"class":94},[77,124413,124414,124416,124419],{"class":79,"line":4099},[77,124415,124406],{"class":94},[77,124417,124418],{"class":271}," nic,model=virtio",[77,124420,27146],{"class":94},[77,124422,124423,124426,124429],{"class":79,"line":4104},[77,124424,124425],{"class":94},"        -audio",[77,124427,124428],{"class":271}," sdl,model=hda",[77,124430,27146],{"class":94},[77,124432,124433,124436,124439],{"class":79,"line":4118},[77,124434,124435],{"class":94},"        -display",[77,124437,124438],{"class":271}," sdl,gl=on,show-cursor=on",[77,124440,27146],{"class":94},[77,124442,124443,124445,124448,124451],{"class":79,"line":4123},[77,124444,124368],{"class":94},[77,124446,124447],{"class":271}," virtio-vga-gl,xres=1920,yres=",[77,124449,124450],{"class":94},"1080",[77,124452,27146],{"class":94},[77,124454,124455,124458,124461],{"class":79,"line":4129},[77,124456,124457],{"class":94},"        -drive",[77,124459,124460],{"class":271}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[77,124462,27146],{"class":94},[77,124464,124465,124467,124470],{"class":79,"line":4150},[77,124466,124457],{"class":94},[77,124468,124469],{"class":271}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[77,124471,27146],{"class":94},[77,124473,124474,124477,124480],{"class":79,"line":4155},[77,124475,124476],{"class":94},"        -monitor",[77,124478,124479],{"class":271}," stdio",[77,124481,27146],{"class":94},[77,124483,124484,124487],{"class":79,"line":4169},[77,124485,124486],{"class":94},"        -serial",[77,124488,124489],{"class":271}," none\n",[139,124491,124492],{"start":1543},[54,124493,124494,124495],{},"常用操作：",[139,124496,124497,124500,124556],{},[54,124498,124499],{},"全屏：Ctrl+Alt+F",[54,124501,124502,124503,124508],{},"adb调试",[139,124504,124505],{},[54,124506,124507],{},"使Linux与Android用ADB连接。",[67,124509,124511],{"className":119728,"code":124510,"language":119730,"meta":72,"style":72},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[74,124512,124513,124518,124529,124534,124546,124551],{"__ignoreMap":72},[77,124514,124515],{"class":79,"line":80},[77,124516,124517],{"class":323},"# 连接安卓\n",[77,124519,124520,124523,124526],{"class":79,"line":91},[77,124521,124522],{"class":83},"adb",[77,124524,124525],{"class":271}," connect",[77,124527,124528],{"class":94}," 127.0.0.1\n",[77,124530,124531],{"class":79,"line":107},[77,124532,124533],{"class":323},"# 打开shell\n",[77,124535,124536,124538,124540,124543],{"class":79,"line":191},[77,124537,124522],{"class":83},[77,124539,29351],{"class":94},[77,124541,124542],{"class":271}," 127.0.0.1:5555",[77,124544,124545],{"class":271}," shell\n",[77,124547,124548],{"class":79,"line":1543},[77,124549,124550],{"class":323},"# 使用root权限\n",[77,124552,124553],{"class":79,"line":1549},[77,124554,124555],{"class":83},"su\n",[54,124557,124558,124559],{},"中文输入法",[139,124560,124561],{},[54,124562,124563],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124565,124567],{"id":124566},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[24,124569,124570,124571],{},"rEFInd 官网与文档：",[417,124572,124573],{"href":124573,"rel":124574},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26332],[2520,124576,124577],{},"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":72,"searchDepth":91,"depth":91,"links":124579},[124580,124581,124585],{"id":124245,"depth":91,"text":124246},{"id":124249,"depth":91,"text":124250,"children":124582},[124583,124584],{"id":124253,"depth":107,"text":124254},{"id":124269,"depth":107,"text":124270},{"id":124566,"depth":91,"text":124567},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124237,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124592,"title":124593,"body":124594,"description":2546,"extension":2547,"meta":127893,"navigation":2549,"path":127894,"seo":127895,"stem":127896,"__hash__":127897},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124595,"toc":127867},[124596,124599,124603,124606,124613,124863,124866,124938,124941,124945,124949,124954,124957,124960,124963,124968,124971,124974,124977,124982,124985,124990,124993,124996,125001,125004,125009,125012,125016,125020,125023,125028,125031,125045,125048,125051,125060,125063,125072,125075,125078,125087,125090,125099,125102,125105,125114,125117,125120,125135,125138,125141,125150,125155,125158,125161,125170,125173,125182,125185,125194,125197,125206,125211,125214,125222,125227,125230,125239,125242,125250,125255,125258,125267,125270,125273,125277,125280,125285,125288,125293,125307,125312,125317,125328,125333,125339,125344,125359,125364,125367,125372,125377,125382,125390,125395,125402,125407,125418,125423,125426,125430,125433,125436,125441,125444,125463,125468,125471,125480,125485,125488,125510,125513,125543,125546,125551,125554,125568,125573,125592,125595,125598,125603,125615,125620,125625,125628,125633,125636,125651,125654,125659,125664,125668,125673,125713,125716,125720,125726,125732,125737,125740,125747,125752,125759,125762,125765,125772,125786,125789,125849,125852,125866,125878,125881,125884,125887,125951,125954,125957,125960,125980,125983,125988,125995,125999,126002,126006,126011,126016,126020,126023,126026,126068,126073,126076,126098,126113,126115,126120,126132,126192,126194,126196,126250,126252,126254,126260,126265,126268,126273,126277,126280,126342,126347,126350,126352,126356,126368,126450,126452,126454,126508,126514,126516,126520,126525,126527,126532,126536,126556,126591,126595,126598,126601,126604,126611,126614,126626,126629,126644,126647,126666,126714,126717,126734,126737,126751,126756,126759,126768,126783,126795,126833,126838,126847,126852,126857,126883,126892,126896,126900,126905,126908,126912,126916,126921,126924,126929,126932,126937,126940,126945,126948,126952,126957,126960,126965,126968,126972,126977,126980,126985,126988,126993,126996,127000,127005,127008,127013,127016,127021,127024,127028,127033,127036,127041,127044,127049,127052,127057,127060,127065,127068,127073,127076,127080,127085,127088,127093,127100,127104,127109,127112,127117,127120,127124,127129,127132,127135,127138,127141,127144,127148,127151,127161,127166,127171,127193,127198,127203,127210,127214,127219,127222,127225,127230,127233,127236,127239,127242,127245,127248,127251,127254,127257,127260,127263,127266,127271,127276,127281,127286,127291,127296,127301,127304,127308,127311,127315,127320,127325,127330,127335,127339,127345,127353,127358,127361,127366,127381,127384,127389,127423,127438,127441,127496,127522,127534,127537,127546,127549,127564,127569,127572,127578,127583,127586,127591,127594,127599,127604,127611,127614,127629,127632,127667,127672,127680,127718,127721,127724,127729,127732,127737,127748,127782,127787,127790,127799,127804,127810,127813,127818,127827,127832,127835,127838,127843,127851,127854,127859,127864],[10,124597,124593],{"id":124598},"_7-其他操作",[14,124600,124602],{"id":124601},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[24,124604,124605],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[24,124607,124608,124609,124612],{},"进入工控机的硬盘目录，进入",[74,124610,124611],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[67,124614,124618],{"className":124615,"code":124616,"language":124617,"meta":72,"style":72},"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",[74,124619,124620,124628,124639,124646,124653,124665,124672,124684,124695,124706,124713,124720,124727,124739,124751,124758,124770,124782,124789,124801,124813,124825,124836,124843,124854],{"__ignoreMap":72},[77,124621,124622,124625],{"class":79,"line":80},[77,124623,124624],{"class":158},"network",[77,124626,124627],{"class":87},": \n",[77,124629,124630,124633,124635,124637],{"class":79,"line":91},[77,124631,124632],{"class":158},"  version",[77,124634,98],{"class":87},[77,124636,2696],{"class":94},[77,124638,5149],{"class":87},[77,124640,124641,124644],{"class":79,"line":107},[77,124642,124643],{"class":158},"  wifis",[77,124645,124627],{"class":87},[77,124647,124648,124651],{"class":79,"line":191},[77,124649,124650],{"class":158},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[77,124652,124627],{"class":87},[77,124654,124655,124658,124660,124663],{"class":79,"line":1543},[77,124656,124657],{"class":158},"      renderer",[77,124659,98],{"class":87},[77,124661,124662],{"class":271},"NetworkManager",[77,124664,5149],{"class":87},[77,124666,124667,124670],{"class":79,"line":1549},[77,124668,124669],{"class":158},"      match",[77,124671,124627],{"class":87},[77,124673,124674,124677,124679,124682],{"class":79,"line":1566},[77,124675,124676],{"class":158},"        name",[77,124678,98],{"class":87},[77,124680,124681],{"class":271},"\"wlan0\"",[77,124683,5149],{"class":87},[77,124685,124686,124689,124691,124693],{"class":79,"line":1572},[77,124687,124688],{"class":158},"      dhcp4",[77,124690,98],{"class":87},[77,124692,3840],{"class":94},[77,124694,5149],{"class":87},[77,124696,124697,124700,124702,124704],{"class":79,"line":1589},[77,124698,124699],{"class":158},"      dhcp6",[77,124701,98],{"class":87},[77,124703,3840],{"class":94},[77,124705,5149],{"class":87},[77,124707,124708,124711],{"class":79,"line":1595},[77,124709,124710],{"class":158},"      access-points",[77,124712,124627],{"class":87},[77,124714,124715,124718],{"class":79,"line":4088},[77,124716,124717],{"class":271},"        \"EMIS_Vinci_Robocon_5G\"",[77,124719,124627],{"class":87},[77,124721,124722,124725],{"class":79,"line":4093},[77,124723,124724],{"class":158},"          auth",[77,124726,124627],{"class":87},[77,124728,124729,124732,124734,124737],{"class":79,"line":4099},[77,124730,124731],{"class":158},"            key-management",[77,124733,98],{"class":87},[77,124735,124736],{"class":271},"\"psk\"",[77,124738,5149],{"class":87},[77,124740,124741,124744,124746,124749],{"class":79,"line":4104},[77,124742,124743],{"class":158},"            password",[77,124745,98],{"class":87},[77,124747,124748],{"class":271},"\"vinci666\"",[77,124750,5149],{"class":87},[77,124752,124753,124756],{"class":79,"line":4118},[77,124754,124755],{"class":158},"          networkmanager",[77,124757,124627],{"class":87},[77,124759,124760,124763,124765,124768],{"class":79,"line":4123},[77,124761,124762],{"class":158},"            uuid",[77,124764,98],{"class":87},[77,124766,124767],{"class":271},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[77,124769,5149],{"class":87},[77,124771,124772,124775,124777,124780],{"class":79,"line":4129},[77,124773,124774],{"class":158},"            name",[77,124776,98],{"class":87},[77,124778,124779],{"class":271},"\"EMIS_Vinci_Robocon_5G\"",[77,124781,5149],{"class":87},[77,124783,124784,124787],{"class":79,"line":4150},[77,124785,124786],{"class":158},"            passthrough",[77,124788,124627],{"class":87},[77,124790,124791,124794,124796,124799],{"class":79,"line":4155},[77,124792,124793],{"class":158},"              wifi-security.auth-alg",[77,124795,98],{"class":87},[77,124797,124798],{"class":271},"\"open\"",[77,124800,5149],{"class":87},[77,124802,124803,124806,124808,124811],{"class":79,"line":4169},[77,124804,124805],{"class":158},"              ipv6.addr-gen-mode",[77,124807,98],{"class":87},[77,124809,124810],{"class":271},"\"default\"",[77,124812,5149],{"class":87},[77,124814,124815,124818,124820,124823],{"class":79,"line":4174},[77,124816,124817],{"class":158},"              ipv6.ip6-privacy",[77,124819,98],{"class":87},[77,124821,124822],{"class":271},"\"-1\"",[77,124824,5149],{"class":87},[77,124826,124827,124830,124832,124834],{"class":79,"line":4203},[77,124828,124829],{"class":158},"              proxy._",[77,124831,98],{"class":87},[77,124833,444],{"class":271},[77,124835,5149],{"class":87},[77,124837,124838,124841],{"class":79,"line":4208},[77,124839,124840],{"class":158},"      networkmanager",[77,124842,124627],{"class":87},[77,124844,124845,124848,124850,124852],{"class":79,"line":4225},[77,124846,124847],{"class":158},"        uuid",[77,124849,98],{"class":87},[77,124851,124767],{"class":271},[77,124853,5149],{"class":87},[77,124855,124856,124858,124860],{"class":79,"line":4230},[77,124857,124676],{"class":158},[77,124859,98],{"class":87},[77,124861,124862],{"class":271},"\"EMIS_Vinci_Robocon_5G\"\n",[24,124864,124865],{},"将其改为新wifi的名和密码：",[67,124867,124869],{"className":124615,"code":124868,"language":124617,"meta":72,"style":72},"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",[74,124870,124871,124877,124886,124892,124899,124908,124916,124922,124928],{"__ignoreMap":72},[77,124872,124873,124875],{"class":79,"line":80},[77,124874,124624],{"class":158},[77,124876,6214],{"class":87},[77,124878,124879,124881,124883],{"class":79,"line":91},[77,124880,124632],{"class":158},[77,124882,98],{"class":87},[77,124884,124885],{"class":94},"2\n",[77,124887,124888,124890],{"class":79,"line":107},[77,124889,124643],{"class":158},[77,124891,6214],{"class":87},[77,124893,124894,124897],{"class":79,"line":191},[77,124895,124896],{"class":158},"    wlan0",[77,124898,6214],{"class":87},[77,124900,124901,124903,124905],{"class":79,"line":1543},[77,124902,124688],{"class":158},[77,124904,98],{"class":87},[77,124906,124907],{"class":94},"true\n",[77,124909,124910,124912,124914],{"class":79,"line":1549},[77,124911,124699],{"class":158},[77,124913,98],{"class":87},[77,124915,124907],{"class":94},[77,124917,124918,124920],{"class":79,"line":1566},[77,124919,124710],{"class":158},[77,124921,6214],{"class":87},[77,124923,124924,124926],{"class":79,"line":1572},[77,124925,124717],{"class":271},[77,124927,6214],{"class":87},[77,124929,124930,124933,124935],{"class":79,"line":1589},[77,124931,124932],{"class":158},"          password",[77,124934,98],{"class":87},[77,124936,124937],{"class":271},"\"vinci666\"\n",[24,124939,124940],{},"工控机开机即可连上网。",[14,124942,124944],{"id":124943},"_72-ssh远程开发","7.2 SSH远程开发",[19,124946,124948],{"id":124947},"_721-环境准备","7.2.1 环境准备",[24,124950,124951],{},[27,124952,124953],{},"1.硬件准备",[24,124955,124956],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[24,124958,124959],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[24,124961,124962],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[24,124964,124965],{},[27,124966,124967],{},"2.设置固定IP",[24,124969,124970],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[24,124972,124973],{},"1.进入设置界面",[24,124975,124976],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[24,124978,124979],{},[40,124980],{"alt":72,"src":124981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[24,124983,124984],{},"2.配置所连接的网络",[24,124986,124987],{},[40,124988],{"alt":72,"src":124989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[24,124991,124992],{},"3.设置固定IP",[24,124994,124995],{},"查看当前IP地址。",[24,124997,124998],{},[40,124999],{"alt":72,"src":125000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[24,125002,125003],{},"设置固定IP。",[24,125005,125006],{},[40,125007],{"alt":72,"src":125008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[24,125010,125011],{},"至此，IP配置完毕。",[19,125013,125015],{"id":125014},"_722-环境搭建","7.2.2 环境搭建",[24,125017,125018],{},[27,125019,28221],{},[24,125021,125022],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[24,125024,125025],{},[27,125026,125027],{},"实现",[24,125029,125030],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[139,125032,125033,125036,125039,125042],{},[54,125034,125035],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[54,125037,125038],{},"远程主机启动SSH服务；",[54,125040,125041],{},"本地主机登陆远程主机；",[54,125043,125044],{},"实现数据传输。",[24,125046,125047],{},"1.安装SSH客户端与服务端",[24,125049,125050],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[67,125052,125054],{"className":123248,"code":125053,"language":123250,"meta":123251,"style":72}," sudo apt install openssh-server\n",[74,125055,125056],{"__ignoreMap":72},[77,125057,125058],{"class":79,"line":80},[77,125059,125053],{},[24,125061,125062],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[67,125064,125066],{"className":123248,"code":125065,"language":123250,"meta":123251,"style":72},"sudo apt install openssh-client\n",[74,125067,125068],{"__ignoreMap":72},[77,125069,125070],{"class":79,"line":80},[77,125071,125065],{},[24,125073,125074],{},"2.远程主机启动SSH服务",[24,125076,125077],{},"远程主机启动 ssh 服务命令如下：",[67,125079,125081],{"className":123248,"code":125080,"language":123250,"meta":123251,"style":72},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[74,125082,125083],{"__ignoreMap":72},[77,125084,125085],{"class":79,"line":80},[77,125086,125080],{},[24,125088,125089],{},"启动后可使用如下命令查看服务是否正常运行：",[67,125091,125093],{"className":123248,"code":125092,"language":123250,"meta":123251,"style":72},"ps -e | grep ssh\n",[74,125094,125095],{"__ignoreMap":72},[77,125096,125097],{"class":79,"line":80},[77,125098,125092],{},[24,125100,125101],{},"如果启动成功，会包含 sshd 程序。",[24,125103,125104],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[67,125106,125108],{"className":123248,"code":125107,"language":123250,"meta":123251,"style":72},"sudo systemctl enable ssh\n",[74,125109,125110],{"__ignoreMap":72},[77,125111,125112],{"class":79,"line":80},[77,125113,125107],{},[24,125115,125116],{},"3.本地远程登录",[24,125118,125119],{},"登录远程主机可以调用如下命令:",[67,125121,125123],{"className":119728,"code":125122,"language":119730,"meta":72,"style":72},"ssh -X 用户名@ip地址\n",[74,125124,125125],{"__ignoreMap":72},[77,125126,125127,125129,125132],{"class":79,"line":80},[77,125128,124079],{"class":83},[77,125130,125131],{"class":94}," -X",[77,125133,125134],{"class":271}," 用户名@ip地址\n",[24,125136,125137],{},"然后根据提示，录入登陆密码，即可成功登录。",[24,125139,125140],{},"如果退出，可以调用exit命令：",[67,125142,125144],{"className":123248,"code":125143,"language":123250,"meta":123251,"style":72},"exit\n",[74,125145,125146],{"__ignoreMap":72},[77,125147,125148],{"class":79,"line":80},[77,125149,125143],{},[24,125151,125152],{},[27,125153,125154],{},"4.实现数据传输",[24,125156,125157],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[24,125159,125160],{},"上传文件指令格式如下：",[67,125162,125164],{"className":123248,"code":125163,"language":123250,"meta":123251,"style":72},"scp 本地文件路径 账号@ip:路径\n",[74,125165,125166],{"__ignoreMap":72},[77,125167,125168],{"class":79,"line":80},[77,125169,125163],{},[24,125171,125172],{},"上传文件夹指令格式如下：",[67,125174,125176],{"className":123248,"code":125175,"language":123250,"meta":123251,"style":72},"scp -r 本地文件夹路径 账号@ip:路径\n",[74,125177,125178],{"__ignoreMap":72},[77,125179,125180],{"class":79,"line":80},[77,125181,125175],{},[24,125183,125184],{},"下载文件指令格式如下：",[67,125186,125188],{"className":123248,"code":125187,"language":123250,"meta":123251,"style":72},"scp 账号@ip:路径 本地文件夹路径\n",[74,125189,125190],{"__ignoreMap":72},[77,125191,125192],{"class":79,"line":80},[77,125193,125187],{},[24,125195,125196],{},"下载文件夹指令格式如下：",[67,125198,125200],{"className":123248,"code":125199,"language":123250,"meta":123251,"style":72},"scp -r 账号@ip:路径 本地文件夹路径\n",[74,125201,125202],{"__ignoreMap":72},[77,125203,125204],{"class":79,"line":80},[77,125205,125199],{},[24,125207,125208],{},[27,125209,125210],{},"优化",[24,125212,125213],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[139,125215,125216,125219],{},[54,125217,125218],{},"本地生成密钥对；",[54,125220,125221],{},"将公钥上传至远程主机。",[24,125223,125224],{},[27,125225,125226],{},"1.生成密钥对",[24,125228,125229],{},"本地客户端生成公私钥：（一路回车默认即可）",[67,125231,125233],{"className":123248,"code":125232,"language":123250,"meta":123251,"style":72},"ssh-keygen\n",[74,125234,125235],{"__ignoreMap":72},[77,125236,125237],{"class":79,"line":80},[77,125238,125232],{},[24,125240,125241],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[139,125243,125244,125247],{},[54,125245,125246],{},"id_rsa （私钥）；",[54,125248,125249],{},"id_rsa.pub (公钥)。",[24,125251,125252],{},[27,125253,125254],{},"2.公钥上传",[24,125256,125257],{},"上传指令如下：",[67,125259,125261],{"className":123248,"code":125260,"language":123250,"meta":123251,"style":72},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[74,125262,125263],{"__ignoreMap":72},[77,125264,125265],{"class":79,"line":80},[77,125266,125260],{},[24,125268,125269],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[24,125271,125272],{},"以后再远程登录就无需录入密码了。",[19,125274,125276],{"id":125275},"_723-使用vscode优化","7.2.3 使用VScode优化",[24,125278,125279],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[24,125281,125282],{},[27,125283,125284],{},"1.准备工作",[24,125286,125287],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[24,125289,125290],{},[27,125291,125292],{},"2.为VScode安装远程开发插件",[24,125294,125295,125296,125299,125300,125303,125304,30853],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[74,125297,125298],{},"扩展：商店","的搜索栏输入",[74,125301,125302],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[74,125305,125306],{},"安装",[24,125308,125309],{},[40,125310],{"alt":72,"src":125311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[24,125313,125314],{},[27,125315,125316],{},"3.配置远程连接",[24,125318,125319,125320,125323,125324,125327],{},"步骤1：使用快捷键",[74,125321,125322],{},"ctrl + shift + p","打开命令输入窗口，并输入",[74,125325,125326],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[24,125329,125330],{},[40,125331],{"alt":72,"src":125332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[24,125334,125335,125336,30853],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[74,125337,125338],{},"Add New SSH Host",[24,125340,125341],{},[40,125342],{"alt":72,"src":125343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[24,125345,125346,125347,125350,125351,125354,125355,125358],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[74,125348,125349],{},"ssh +X ubuntu@192.168.43.164","，其中，",[74,125352,125353],{},"ubuntu","需要替换为你的登录用户名，",[74,125356,125357],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[24,125360,125361],{},[40,125362],{"alt":72,"src":125363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[24,125365,125366],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[24,125368,125369],{},[40,125370],{"alt":72,"src":125371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[24,125373,125374],{},[40,125375],{"alt":72,"src":125376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[24,125378,125379],{},[27,125380,125381],{},"4.使用",[24,125383,125384,125385,125323,125387,125389],{},"步骤1：继续使用快捷键",[74,125386,125322],{},[74,125388,125326],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[24,125391,125392],{},[40,125393],{"alt":72,"src":125394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[24,125396,125397,125398,125401],{},"或者，也可以点击侧边栏的",[74,125399,125400],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[24,125403,125404],{},[40,125405],{"alt":72,"src":125406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[24,125408,125409,125410,125413,125414,125417],{},"步骤2：选择菜单栏的",[74,125411,125412],{},"文件","下的",[74,125415,125416],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[24,125419,125420],{},[40,125421],{"alt":72,"src":125422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[24,125424,125425],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125427,125429],{"id":125428},"_73-远程桌面","7.3 远程桌面",[24,125431,125432],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[24,125434,125435],{},"我们选择使用VNC来看。",[139,125437,125438],{},[54,125439,125440],{},"安装VNC服务器：",[24,125442,125443],{},"这里以TigerVNC为例进行安装：",[67,125445,125447],{"className":119728,"code":125446,"language":119730,"meta":72,"style":72},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[74,125448,125449],{"__ignoreMap":72},[77,125450,125451,125453,125455,125457,125460],{"class":79,"line":80},[77,125452,27044],{"class":83},[77,125454,119749],{"class":271},[77,125456,26301],{"class":271},[77,125458,125459],{"class":271}," tigervnc-standalone-server",[77,125461,125462],{"class":271}," tigervnc-common\n",[139,125464,125465],{"start":91},[54,125466,125467],{},"设置VNC密码：",[24,125469,125470],{},"为VNC用户设置密码，运行以下命令：",[67,125472,125474],{"className":119728,"code":125473,"language":119730,"meta":72,"style":72},"vncpasswd\n",[74,125475,125476],{"__ignoreMap":72},[77,125477,125478],{"class":79,"line":80},[77,125479,125473],{"class":83},[139,125481,125482],{"start":107},[54,125483,125484],{},"配置VNC启动脚本:",[24,125486,125487],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[67,125489,125491],{"className":119728,"code":125490,"language":119730,"meta":72,"style":72},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[74,125492,125493,125502],{"__ignoreMap":72},[77,125494,125495,125497,125499],{"class":79,"line":80},[77,125496,103701],{"class":83},[77,125498,31684],{"class":94},[77,125500,125501],{"class":271}," ~\u002F.vnc\n",[77,125503,125504,125507],{"class":79,"line":91},[77,125505,125506],{"class":83},"nano",[77,125508,125509],{"class":271}," ~\u002F.vnc\u002Fxstartup\n",[24,125511,125512],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[67,125514,125516],{"className":119728,"code":125515,"language":119730,"meta":72,"style":72},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[74,125517,125518,125523,125531,125538],{"__ignoreMap":72},[77,125519,125520],{"class":79,"line":80},[77,125521,125522],{"class":323},"#!\u002Fbin\u002Fsh\n",[77,125524,125525,125528],{"class":79,"line":91},[77,125526,125527],{"class":94},"unset",[77,125529,125530],{"class":271}," SESSION_MANAGER\n",[77,125532,125533,125535],{"class":79,"line":107},[77,125534,125527],{"class":94},[77,125536,125537],{"class":271}," DBUS_SESSION_BUS_ADDRESS\n",[77,125539,125540],{"class":79,"line":191},[77,125541,125542],{"class":83},"gnome-session\n",[24,125544,125545],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[139,125547,125548],{"start":191},[54,125549,125550],{},"给予执行权限：",[24,125552,125553],{},"为xstartup文件设置执行权限：",[67,125555,125557],{"className":119728,"code":125556,"language":119730,"meta":72,"style":72},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[74,125558,125559],{"__ignoreMap":72},[77,125560,125561,125563,125566],{"class":79,"line":80},[77,125562,27079],{"class":83},[77,125564,125565],{"class":271}," +x",[77,125567,125509],{"class":271},[139,125569,125570],{"start":1543},[54,125571,125572],{},"启动VNC服务器：",[67,125574,125576],{"className":119728,"code":125575,"language":119730,"meta":72,"style":72},"vncserver -geometry 1920x1080 -localhost=0\n",[74,125577,125578],{"__ignoreMap":72},[77,125579,125580,125583,125586,125589],{"class":79,"line":80},[77,125581,125582],{"class":83},"vncserver",[77,125584,125585],{"class":94}," -geometry",[77,125587,125588],{"class":271}," 1920x1080",[77,125590,125591],{"class":94}," -localhost=0\n",[24,125593,125594],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[24,125596,125597],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[139,125599,125600],{"start":1549},[54,125601,125602],{},"查看已开启的VNC服务器：",[67,125604,125606],{"className":119728,"code":125605,"language":119730,"meta":72,"style":72},"vncserver -list\n",[74,125607,125608],{"__ignoreMap":72},[77,125609,125610,125612],{"class":79,"line":80},[77,125611,125582],{"class":83},[77,125613,125614],{"class":94}," -list\n",[24,125616,125617],{},[40,125618],{"alt":72,"src":125619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[139,125621,125622],{"start":1566},[54,125623,125624],{},"连接到VNC服务器：",[24,125626,125627],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[139,125629,125630],{"start":1572},[54,125631,125632],{},"停止VNC服务器：",[24,125634,125635],{},"如果需要停止VNC服务器，可以使用以下命令：",[67,125637,125639],{"className":119728,"code":125638,"language":119730,"meta":72,"style":72},"vncserver -kill :1\n",[74,125640,125641],{"__ignoreMap":72},[77,125642,125643,125645,125648],{"class":79,"line":80},[77,125644,125582],{"class":83},[77,125646,125647],{"class":94}," -kill",[77,125649,125650],{"class":271}," :1\n",[24,125652,125653],{},"将:1替换为你实际使用的显示编号。",[24,125655,125656],{},[40,125657],{"alt":72,"src":125658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[24,125660,125661],{},[40,125662],{"alt":72,"src":125663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125665,125667],{"id":125666},"_74-usb端口设置","7.4 USB端口设置",[24,125669,125670],{},[27,125671,125672],{},"首先先配置好权限",[67,125674,125676],{"className":119728,"code":125675,"language":119730,"meta":72,"style":72},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[74,125677,125678,125683,125696,125703,125708],{"__ignoreMap":72},[77,125679,125680],{"class":79,"line":80},[77,125681,125682],{"class":323},"# 将用户权限提高\n",[77,125684,125685,125687,125689,125691,125694],{"class":79,"line":91},[77,125686,27044],{"class":83},[77,125688,29042],{"class":271},[77,125690,29045],{"class":94},[77,125692,125693],{"class":271}," dialout",[77,125695,29050],{"class":87},[77,125697,125698,125700],{"class":79,"line":107},[77,125699,29069],{"class":83},[77,125701,125702],{"class":271}," dialout\n",[77,125704,125705],{"class":79,"line":191},[77,125706,125707],{"class":323},"# 查看下面命令是否输出dialout（若输出才正常）\n",[77,125709,125710],{"class":79,"line":1543},[77,125711,125712],{"class":83},"groups\n",[24,125714,125715],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[19,125717,125719],{"id":125718},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[24,125721,125722,125725],{},[27,125723,125724],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[24,125727,125728,125731],{},[27,125729,125730],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[24,125733,125734],{},[27,125735,125736],{},"流程如下：",[24,125738,125739],{},"（1）.查找设备idVendor和idProduct",[24,125741,125742,125743,125746],{},"接入两个USB设备，在终端调用指令",[74,125744,125745],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[24,125748,125749],{},[40,125750],{"alt":72,"src":125751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[24,125753,125754,125755,125758],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[74,125756,125757],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[24,125760,125761],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[24,125763,125764],{},"（2）.编写映射规则",[24,125766,125767,125768,125771],{},"在",[74,125769,125770],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[67,125773,125775],{"className":119728,"code":125774,"language":119730,"meta":72,"style":72},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[74,125776,125777],{"__ignoreMap":72},[77,125778,125779,125781,125783],{"class":79,"line":80},[77,125780,27044],{"class":83},[77,125782,121015],{"class":271},[77,125784,125785],{"class":271}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[24,125787,125788],{},"输入如下内容：",[67,125790,125792],{"className":119728,"code":125791,"language":119730,"meta":72,"style":72},"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",[74,125793,125794,125824],{"__ignoreMap":72},[77,125795,125796,125799,125801,125804,125807,125810,125813,125815,125818,125821],{"class":79,"line":80},[77,125797,125798],{"class":87},"KERNEL",[77,125800,268],{"class":2123},[77,125802,125803],{"class":271},"=\"ttyUSB*\",",[77,125805,125806],{"class":83}," ATTRS",[77,125808,125809],{"class":271},"{idVendor}==",[77,125811,125812],{"class":83},"\"10c4\"",[77,125814,2992],{"class":83},[77,125816,125817],{"class":271}," ATTRS{idProduct}==\"ea60\",",[77,125819,125820],{"class":271}," MODE:=\"0777\",",[77,125822,125823],{"class":271}," SYMLINK+=\"mylidar\"\n",[77,125825,125826,125828,125830,125832,125834,125836,125839,125841,125844,125846],{"class":79,"line":91},[77,125827,125798],{"class":87},[77,125829,268],{"class":2123},[77,125831,125803],{"class":271},[77,125833,125806],{"class":83},[77,125835,125809],{"class":271},[77,125837,125838],{"class":83},"\"1a86\"",[77,125840,2992],{"class":83},[77,125842,125843],{"class":271}," ATTRS{idProduct}==\"7523\",",[77,125845,125820],{"class":271},[77,125847,125848],{"class":271}," SYMLINK+=\"mycar\"\n",[24,125850,125851],{},"代码解释：",[51,125853,125854,125857,125860,125863],{},[54,125855,125856],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[54,125858,125859],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[54,125861,125862],{},"SYMLINK是符号连接，即绑定的别名；",[54,125864,125865],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[24,125867,125868,125869,125872,125875],{},"***小提示：***",[687,125870,125871],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[74,125873,125874],{},"\u002Fetc\u002Fudev\u002Frule.d",[687,125876,125877],{},"目录即可。",[24,125879,125880],{},"表格 还在加载中，请等待加载完成后再尝试复制",[24,125882,125883],{},"（3）.使规则生效",[24,125885,125886],{},"在终端下输入如下指令：",[67,125888,125890],{"className":119728,"code":125889,"language":119730,"meta":72,"style":72},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[74,125891,125892,125897,125909,125920,125924,125929,125942],{"__ignoreMap":72},[77,125893,125894],{"class":79,"line":80},[77,125895,125896],{"class":323},"# Ubuntu用下方命令\n",[77,125898,125899,125901,125903,125906],{"class":79,"line":91},[77,125900,27044],{"class":83},[77,125902,122480],{"class":271},[77,125904,125905],{"class":271}," udev",[77,125907,125908],{"class":271}," reload\n",[77,125910,125911,125913,125915,125917],{"class":79,"line":107},[77,125912,27044],{"class":83},[77,125914,122480],{"class":271},[77,125916,125905],{"class":271},[77,125918,125919],{"class":271}," restart\n",[77,125921,125922],{"class":79,"line":191},[77,125923,4875],{"emptyLinePlaceholder":2549},[77,125925,125926],{"class":79,"line":1543},[77,125927,125928],{"class":323},"#Fedora用下方命令\n",[77,125930,125931,125933,125936,125939],{"class":79,"line":1549},[77,125932,27044],{"class":83},[77,125934,125935],{"class":271}," udevadm",[77,125937,125938],{"class":271}," control",[77,125940,125941],{"class":94}," --reload\n",[77,125943,125944,125946,125948],{"class":79,"line":1566},[77,125945,27044],{"class":83},[77,125947,125935],{"class":271},[77,125949,125950],{"class":271}," trigger\n",[24,125952,125953],{},"再重新插拔设备即可。",[24,125955,125956],{},"（4）.测试",[24,125958,125959],{},"终端下输入如下指令",[67,125961,125963],{"className":119728,"code":125962,"language":119730,"meta":72,"style":72},"ll \u002Fdev | grep ttyUSB\n",[74,125964,125965],{"__ignoreMap":72},[77,125966,125967,125970,125973,125975,125977],{"class":79,"line":80},[77,125968,125969],{"class":83},"ll",[77,125971,125972],{"class":271}," \u002Fdev",[77,125974,27577],{"class":2123},[77,125976,32704],{"class":83},[77,125978,125979],{"class":271}," ttyUSB\n",[24,125981,125982],{},"运行结果如下：",[24,125984,125985],{},[40,125986],{"alt":72,"src":125987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[24,125989,125990,125991,125994],{},"也可以多次插拔USB设备，会发现设备端口",[74,125992,125993],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[24,125996,125997],{},[27,125998,120396],{},[24,126000,126001],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[19,126003,126005],{"id":126004},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[24,126007,126008,126010],{},[27,126009,125724],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[24,126012,126013,126015],{},[27,126014,125730],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[24,126017,126018],{},[27,126019,125736],{},[24,126021,126022],{},"（1）.查看所连接的主机USB接口的KERNELS",[24,126024,126025],{},"调用如下指令查看第一台雷达的USB信息：",[67,126027,126029],{"className":119728,"code":126028,"language":119730,"meta":72,"style":72},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[74,126030,126031,126051],{"__ignoreMap":72},[77,126032,126033,126036,126038,126041,126044,126046,126048],{"class":79,"line":80},[77,126034,126035],{"class":83},"udevadm",[77,126037,72264],{"class":271},[77,126039,126040],{"class":94}," --attribute-walk",[77,126042,126043],{"class":94}," --name=\u002Fdev\u002FttyUSB0",[77,126045,27577],{"class":2123},[77,126047,32704],{"class":83},[77,126049,126050],{"class":271}," KERNELS\n",[77,126052,126053,126055,126057,126059,126062,126064,126066],{"class":79,"line":91},[77,126054,126035],{"class":83},[77,126056,72264],{"class":271},[77,126058,126040],{"class":94},[77,126060,126061],{"class":94}," --name=\u002Fdev\u002FttyACM0",[77,126063,27577],{"class":2123},[77,126065,32704],{"class":83},[77,126067,126050],{"class":271},[24,126069,126070],{},[40,126071],{"alt":72,"src":126072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[24,126074,126075],{},"调用如下指令查看第二台雷达的USB信息：",[67,126077,126079],{"className":119728,"code":126078,"language":119730,"meta":72,"style":72},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[74,126080,126081],{"__ignoreMap":72},[77,126082,126083,126085,126087,126089,126092,126094,126096],{"class":79,"line":80},[77,126084,126035],{"class":83},[77,126086,72264],{"class":271},[77,126088,126040],{"class":94},[77,126090,126091],{"class":94}," --name=\u002Fdev\u002FttyUSB1",[77,126093,27577],{"class":2123},[77,126095,32704],{"class":83},[77,126097,126050],{"class":271},[24,126099,126100,126101,126104,126105,126108,126109,126112],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[74,126102,126103],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[74,126106,126107],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[27,126110,126111],{},"唯一性标识","”。",[24,126114,125764],{},[24,126116,125767,126117,126119],{},[74,126118,125770],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[67,126121,126122],{"className":119728,"code":125774,"language":119730,"meta":72,"style":72},[74,126123,126124],{"__ignoreMap":72},[77,126125,126126,126128,126130],{"class":79,"line":80},[77,126127,27044],{"class":83},[77,126129,121015],{"class":271},[77,126131,125785],{"class":271},[67,126133,126135],{"className":119728,"code":126134,"language":119730,"meta":72,"style":72},"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",[74,126136,126137,126166],{"__ignoreMap":72},[77,126138,126139,126141,126143,126145,126148,126150,126153,126156,126158,126161,126163],{"class":79,"line":80},[77,126140,125798],{"class":87},[77,126142,268],{"class":2123},[77,126144,125803],{"class":271},[77,126146,126147],{"class":87}," KERNELS",[77,126149,268],{"class":2123},[77,126151,126152],{"class":271},"=\"1-1.3:1.0\",",[77,126154,126155],{"class":83}," MODE:",[77,126157,268],{"class":271},[77,126159,126160],{"class":83},"\"0777\"",[77,126162,2992],{"class":83},[77,126164,126165],{"class":271}," SYMLINK+=\"rplidar_front\"\n",[77,126167,126168,126170,126172,126174,126176,126178,126181,126183,126185,126187,126189],{"class":79,"line":91},[77,126169,125798],{"class":87},[77,126171,268],{"class":2123},[77,126173,125803],{"class":271},[77,126175,126147],{"class":87},[77,126177,268],{"class":2123},[77,126179,126180],{"class":271},"=\"1-1.4:1.0\",",[77,126182,126155],{"class":83},[77,126184,268],{"class":271},[77,126186,126160],{"class":83},[77,126188,2992],{"class":83},[77,126190,126191],{"class":271}," SYMLINK+=\"rplidar_back\"\n",[24,126193,125883],{},[24,126195,125886],{},[67,126197,126198],{"className":119728,"code":125889,"language":119730,"meta":72,"style":72},[74,126199,126200,126204,126214,126224,126228,126232,126242],{"__ignoreMap":72},[77,126201,126202],{"class":79,"line":80},[77,126203,125896],{"class":323},[77,126205,126206,126208,126210,126212],{"class":79,"line":91},[77,126207,27044],{"class":83},[77,126209,122480],{"class":271},[77,126211,125905],{"class":271},[77,126213,125908],{"class":271},[77,126215,126216,126218,126220,126222],{"class":79,"line":107},[77,126217,27044],{"class":83},[77,126219,122480],{"class":271},[77,126221,125905],{"class":271},[77,126223,125919],{"class":271},[77,126225,126226],{"class":79,"line":191},[77,126227,4875],{"emptyLinePlaceholder":2549},[77,126229,126230],{"class":79,"line":1543},[77,126231,125928],{"class":323},[77,126233,126234,126236,126238,126240],{"class":79,"line":1549},[77,126235,27044],{"class":83},[77,126237,125935],{"class":271},[77,126239,125938],{"class":271},[77,126241,125941],{"class":94},[77,126243,126244,126246,126248],{"class":79,"line":1566},[77,126245,27044],{"class":83},[77,126247,125935],{"class":271},[77,126249,125950],{"class":271},[24,126251,125953],{},[24,126253,125956],{},[24,126255,125959,126256,126259],{},[74,126257,126258],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[24,126261,126262],{},[40,126263],{"alt":72,"src":126264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[24,126266,126267],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[24,126269,126270,126272],{},[27,126271,120396],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[19,126274,126276],{"id":126275},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[24,126278,126279],{},"（1）.查看所连接的主机USB接口的信息",[67,126281,126283],{"className":119728,"code":126282,"language":119730,"meta":72,"style":72},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[74,126284,126285,126315],{"__ignoreMap":72},[77,126286,126287,126289,126291,126294,126296,126298,126300,126302,126305,126308,126310,126313],{"class":79,"line":80},[77,126288,126035],{"class":83},[77,126290,72264],{"class":271},[77,126292,126293],{"class":94}," -a",[77,126295,31684],{"class":94},[77,126297,30890],{"class":87},[77,126299,126035],{"class":83},[77,126301,72264],{"class":271},[77,126303,126304],{"class":94}," -q",[77,126306,126307],{"class":271}," path",[77,126309,27583],{"class":94},[77,126311,126312],{"class":271}," \u002Fdev\u002FttyACM0",[77,126314,2628],{"class":87},[77,126316,126317,126319,126321,126323,126325,126327,126329,126331,126333,126335,126337,126340],{"class":79,"line":91},[77,126318,126035],{"class":83},[77,126320,72264],{"class":271},[77,126322,126293],{"class":94},[77,126324,31684],{"class":94},[77,126326,30890],{"class":87},[77,126328,126035],{"class":83},[77,126330,72264],{"class":271},[77,126332,126304],{"class":94},[77,126334,126307],{"class":271},[77,126336,27583],{"class":94},[77,126338,126339],{"class":271}," \u002Fdev\u002FttyUSB0",[77,126341,2628],{"class":87},[24,126343,126344],{},[40,126345],{"alt":72,"src":126346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[24,126348,126349],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[24,126351,125764],{},[24,126353,125767,126354,126119],{},[74,126355,125770],{},[67,126357,126358],{"className":119728,"code":125774,"language":119730,"meta":72,"style":72},[74,126359,126360],{"__ignoreMap":72},[77,126361,126362,126364,126366],{"class":79,"line":80},[77,126363,27044],{"class":83},[77,126365,121015],{"class":271},[77,126367,125785],{"class":271},[67,126369,126371],{"className":119728,"code":126370,"language":119730,"meta":72,"style":72},"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",[74,126372,126373,126401,126427],{"__ignoreMap":72},[77,126374,126375,126377,126379,126382,126384,126386,126388,126390,126393,126396,126398],{"class":79,"line":80},[77,126376,125798],{"class":87},[77,126378,268],{"class":2123},[77,126380,126381],{"class":271},"=\"ttyACM*\",",[77,126383,125806],{"class":83},[77,126385,125809],{"class":271},[77,126387,125838],{"class":83},[77,126389,2992],{"class":83},[77,126391,126392],{"class":271}," ATTRS{idProduct}==\"55d4\",",[77,126394,126395],{"class":271}," ATTRS{serial}==\"0001\",",[77,126397,125820],{"class":271},[77,126399,126400],{"class":271}," SYMLINK+=\"ttyACM_MCU\"\n",[77,126402,126403,126405,126407,126409,126411,126413,126415,126417,126419,126422,126424],{"class":79,"line":91},[77,126404,125798],{"class":87},[77,126406,268],{"class":2123},[77,126408,126381],{"class":271},[77,126410,125806],{"class":83},[77,126412,125809],{"class":271},[77,126414,125838],{"class":83},[77,126416,2992],{"class":83},[77,126418,126392],{"class":271},[77,126420,126421],{"class":271}," ATTRS{serial}==\"0002\",",[77,126423,125820],{"class":271},[77,126425,126426],{"class":271}," SYMLINK+=\"ttyACM_Lidar\"\n",[77,126428,126429,126431,126433,126435,126437,126439,126441,126443,126445,126447],{"class":79,"line":107},[77,126430,125798],{"class":87},[77,126432,268],{"class":2123},[77,126434,125803],{"class":271},[77,126436,125806],{"class":83},[77,126438,125809],{"class":271},[77,126440,125838],{"class":83},[77,126442,2992],{"class":83},[77,126444,125843],{"class":271},[77,126446,125820],{"class":271},[77,126448,126449],{"class":271}," SYMLINK+=\"ttyUSB_IMU\"\n",[24,126451,125883],{},[24,126453,125886],{},[67,126455,126456],{"className":119728,"code":125889,"language":119730,"meta":72,"style":72},[74,126457,126458,126462,126472,126482,126486,126490,126500],{"__ignoreMap":72},[77,126459,126460],{"class":79,"line":80},[77,126461,125896],{"class":323},[77,126463,126464,126466,126468,126470],{"class":79,"line":91},[77,126465,27044],{"class":83},[77,126467,122480],{"class":271},[77,126469,125905],{"class":271},[77,126471,125908],{"class":271},[77,126473,126474,126476,126478,126480],{"class":79,"line":107},[77,126475,27044],{"class":83},[77,126477,122480],{"class":271},[77,126479,125905],{"class":271},[77,126481,125919],{"class":271},[77,126483,126484],{"class":79,"line":191},[77,126485,4875],{"emptyLinePlaceholder":2549},[77,126487,126488],{"class":79,"line":1543},[77,126489,125928],{"class":323},[77,126491,126492,126494,126496,126498],{"class":79,"line":1549},[77,126493,27044],{"class":83},[77,126495,125935],{"class":271},[77,126497,125938],{"class":271},[77,126499,125941],{"class":94},[77,126501,126502,126504,126506],{"class":79,"line":1566},[77,126503,27044],{"class":83},[77,126505,125935],{"class":271},[77,126507,125950],{"class":271},[24,126509,126510,126511],{},"再重新插拔设备即可，或者 ",[27,126512,126513],{},"直接重启系统。",[24,126515,125956],{},[24,126517,125959,126518,126259],{},[74,126519,126258],{},[24,126521,126522],{},[40,126523],{"alt":72,"src":126524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[24,126526,126267],{},[24,126528,126529,126531],{},[27,126530,120396],{}," 一些设备可能没有串口号等。",[19,126533,126535],{"id":126534},"_744-其他注意事项","7.4.4 其他注意事项",[24,126537,126538,126539,126541,126542,126545,126546,20880,126549,126552,126553,126555],{},"并非所有的USB设备端口号都是",[74,126540,125993],{},"的格式，比如Arduino的端口号可能是",[74,126543,126544],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[74,126547,126548],{},"videon",[74,126550,126551],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[74,126554,126548],{},"端口，绑定时需要关联的也是该接口。",[24,126557,126558,126559,126562,126563,126566,126567,126569,126570,126573,126574,126577,126578,126581,126582,126581,126585,126581,126588,30853],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[74,126560,126561],{},"KERNEL==\"ttyUSB*\"","修改为",[74,126564,126565],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[74,126568,126561],{},"修改为类似于",[74,126571,126572],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[74,126575,126576],{},"video[0,2,4,6]","表示可以绑定的端口为",[74,126579,126580],{},"video0","或",[74,126583,126584],{},"video2",[74,126586,126587],{},"video4",[74,126589,126590],{},"video6",[14,126592,126594],{"id":126593},"_75-挂载内网网页","7.5 挂载内网网页",[24,126596,126597],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[24,126599,126600],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[24,126602,126603],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[24,126605,126606,126607],{},"Termux 下载地址（F-Droid）：",[417,126608,126609],{"href":126609,"rel":126610},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26332],[24,126612,126613],{},"首先打开app后，先更新软件缓存：",[67,126615,126617],{"className":119728,"code":126616,"language":119730,"meta":72,"style":72},"pkg update\n",[74,126618,126619],{"__ignoreMap":72},[77,126620,126621,126624],{"class":79,"line":80},[77,126622,126623],{"class":83},"pkg",[77,126625,28710],{"class":271},[24,126627,126628],{},"然后换源",[67,126630,126632],{"className":119728,"code":126631,"language":119730,"meta":72,"style":72},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[74,126633,126634],{"__ignoreMap":72},[77,126635,126636,126638,126641],{"class":79,"line":80},[77,126637,125506],{"class":83},[77,126639,126640],{"class":87}," $PREFIX",[77,126642,126643],{"class":271},"\u002Fetc\u002Fapt\u002Fsources.list\n",[24,126645,126646],{},"将该文件内容替换为下面：",[67,126648,126650],{"className":119728,"code":126649,"language":119730,"meta":72,"style":72},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[74,126651,126652],{"__ignoreMap":72},[77,126653,126654,126657,126660,126663],{"class":79,"line":80},[77,126655,126656],{"class":83},"deb",[77,126658,126659],{"class":271}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[77,126661,126662],{"class":271}," stable",[77,126664,126665],{"class":271}," main\n",[51,126667,126668,126695],{},[54,126669,126670,126671,126673,126674],{},"如果你使用的是",[74,126672,125506],{},"编辑器：",[51,126675,126676,126683,126689],{},[54,126677,126678,126679,126682],{},"按 ",[74,126680,126681],{},"Ctrl+O"," 保存文件。",[54,126684,126678,126685,126688],{},[74,126686,126687],{},"Enter"," 确认文件名。",[54,126690,126678,126691,126694],{},[74,126692,126693],{},"Ctrl+X"," 退出编辑器。",[54,126696,126670,126697,126673,126700],{},[74,126698,126699],{},"vim",[51,126701,126702,126708],{},[54,126703,126678,126704,126707],{},[74,126705,126706],{},"Esc"," 退出编辑模式。",[54,126709,126710,126711,126713],{},"输入 ",[74,126712,121653],{}," 保存并退出。",[24,126715,126716],{},"接下来重新更新软件源：",[67,126718,126720],{"className":119728,"code":126719,"language":119730,"meta":72,"style":72},"pkg update && pkg upgrade\n",[74,126721,126722],{"__ignoreMap":72},[77,126723,126724,126726,126728,126730,126732],{"class":79,"line":80},[77,126725,126623],{"class":83},[77,126727,119779],{"class":271},[77,126729,28658],{"class":87},[77,126731,126623],{"class":83},[77,126733,119765],{"class":271},[24,126735,126736],{},"安装python：",[67,126738,126740],{"className":119728,"code":126739,"language":119730,"meta":72,"style":72},"pkg install python\n",[74,126741,126742],{"__ignoreMap":72},[77,126743,126744,126746,126748],{"class":79,"line":80},[77,126745,126623],{"class":83},[77,126747,26301],{"class":271},[77,126749,126750],{"class":271}," python\n",[24,126752,126753,28941],{},[27,126754,126755],{},"通过Termux访问设备存储",[24,126757,126758],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[67,126760,126762],{"className":119728,"code":126761,"language":119730,"meta":72,"style":72},"termux-setup-storage\n",[74,126763,126764],{"__ignoreMap":72},[77,126765,126766],{"class":79,"line":80},[77,126767,126761],{"class":83},[139,126769,126770],{},[54,126771,126772,28941,126775],{},[27,126773,126774],{},"进入HTML文件所在的目录",[139,126776,126777],{},[54,126778,126779,126780,126782],{},"使用",[74,126781,103711],{},"命令进入HTML文件所在的目录：",[67,126784,126786],{"className":119728,"code":126785,"language":119730,"meta":72,"style":72},"cd ~\u002Fyour_html_folder\n",[74,126787,126788],{"__ignoreMap":72},[77,126789,126790,126792],{"class":79,"line":80},[77,126791,103711],{"class":94},[77,126793,126794],{"class":271}," ~\u002Fyour_html_folder\n",[139,126796,126797],{"start":91},[54,126798,126799,28941,126802,126807,126824],{},[27,126800,126801],{},"启动Python HTTP服务器",[139,126803,126804],{},[54,126805,126806],{},"运行以下命令启动一个简单的HTTP服务器：",[67,126808,126810],{"className":119728,"code":126809,"language":119730,"meta":72,"style":72},"python -m http.server 8000\n",[74,126811,126812],{"__ignoreMap":72},[77,126813,126814,126816,126818,126821],{"class":79,"line":80},[77,126815,32848],{"class":83},[77,126817,103318],{"class":94},[77,126819,126820],{"class":271}," http.server",[77,126822,126823],{"class":94}," 8000\n",[139,126825,126826],{"start":107},[54,126827,126828,126829,126832],{},"这会在端口",[74,126830,126831],{},"8000","上启动一个Web服务器。",[51,126834,126835],{},[54,126836,126837],{},"启动服务器后，Termux会显示日志信息，例如：",[67,126839,126841],{"className":123248,"code":126840,"language":123250,"meta":123251,"style":72},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[74,126842,126843],{"__ignoreMap":72},[77,126844,126845],{"class":79,"line":80},[77,126846,126840],{},[51,126848,126849],{},[54,126850,126851],{},"这表示服务器已成功启动。",[24,126853,126854],{},[27,126855,126856],{},"在浏览器中访问HTML文件",[139,126858,126859],{},[54,126860,126861,28941,126864,126869],{},[27,126862,126863],{},"在同一设备上访问",[139,126865,126866],{},[54,126867,126868],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[67,126870,126873],{"className":126871,"code":126872,"language":74103,"meta":72,"style":72},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[74,126874,126875],{"__ignoreMap":72},[77,126876,126877,126880],{"class":79,"line":80},[77,126878,126879],{"class":87},"http:",[77,126881,126882],{"class":323},"\u002F\u002Flocalhost:8000\n",[51,126884,126885],{},[54,126886,126887,126888,126891],{},"如果HTML文件中有",[74,126889,126890],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126893,126895],{"id":126894},"_76-linux重点知识","7.6 Linux重点知识",[19,126897,126899],{"id":126898},"_761-关于点的说明","7.6.1 关于点的说明",[24,126901,126902],{},[40,126903],{"alt":72,"src":126904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[24,126906,126907],{},"一点本目录，两点上目录",[19,126909,126911],{"id":126910},"_762-目录","7.6.2 目录",[24468,126913,126915],{"id":126914},"_7621-系统启动必须","7.6.2.1 系统启动必须",[24,126917,126918],{},[27,126919,126920],{},"\u002Fboot:",[24,126922,126923],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[24,126925,126926],{},[27,126927,126928],{},"\u002Fetc:",[24,126930,126931],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[24,126933,126934],{},[27,126935,126936],{},"\u002Flib：",[24,126938,126939],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[24,126941,126942],{},[27,126943,126944],{},"\u002Fsys:",[24,126946,126947],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24468,126949,126951],{"id":126950},"_7622-指令集合","7.6.2.2 指令集合",[24,126953,126954],{},[27,126955,126956],{},"\u002Fbin:",[24,126958,126959],{},"为二进制文件的缩写，存放最经常使用的命令",[24,126961,126962],{},[27,126963,126964],{},"\u002Fsbin:",[24,126966,126967],{},"只有系统管理员才能使用的程序和指令",[24468,126969,126971],{"id":126970},"_7623-外部文件管理","7.6.2.3 外部文件管理",[24,126973,126974],{},[27,126975,126976],{},"\u002Fdev:",[24,126978,126979],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[24,126981,126982],{},[27,126983,126984],{},"\u002Fmedia:",[24,126986,126987],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[24,126989,126990],{},[27,126991,126992],{},"\u002Fmnt:",[24,126994,126995],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24468,126997,126999],{"id":126998},"_7624-临时文件","7.6.2.4 临时文件",[24,127001,127002],{},[27,127003,127004],{},"\u002Frun:",[24,127006,127007],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[24,127009,127010],{},[27,127011,127012],{},"\u002Flost+found:",[24,127014,127015],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[24,127017,127018],{},[27,127019,127020],{},"\u002Ftmp:",[24,127022,127023],{},"这个目录是用来存放一些临时文件的",[24468,127025,127027],{"id":127026},"_7625-账户","7.6.2.5 账户",[24,127029,127030],{},[27,127031,127032],{},"\u002Froot：",[24,127034,127035],{},"系统管理员的用户主目录",[24,127037,127038,28941],{},[27,127039,127040],{},"\u002Fhome",[24,127042,127043],{},"用户的主目录，以用户的账号命名的",[24,127045,127046,28941],{},[27,127047,127048],{},"\u002Fusr",[24,127050,127051],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[24,127053,127054],{},[27,127055,127056],{},"\u002Fusr\u002Fbin：",[24,127058,127059],{},"系统用户使用的应用程序与指令",[24,127061,127062],{},[27,127063,127064],{},"\u002Fusr\u002Fsbin：",[24,127066,127067],{},"超级用户使用的比较高级的管理程序和系统守护程序",[24,127069,127070],{},[27,127071,127072],{},"\u002Fusr\u002Fsrc：",[24,127074,127075],{},"内核源代码默认的放置目录",[24468,127077,127079],{"id":127078},"_7626-运行过程要用","7.6.2.6 运行过程要用",[24,127081,127082],{},[27,127083,127084],{},"\u002Fvar：",[24,127086,127087],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[24,127089,127090],{},[27,127091,127092],{},"\u002Fproc:",[24,127094,127095,127096,127099],{},"管理 ",[27,127097,127098],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24468,127101,127103],{"id":127102},"_7627-扩展用的","7.6.2.7 扩展用的",[24,127105,127106],{},[27,127107,127108],{},"\u002Fopt:",[24,127110,127111],{},"默认是空的，我们安装额外软件可以放在这个里面",[24,127113,127114],{},[27,127115,127116],{},"\u002Fsrv:",[24,127118,127119],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[19,127121,127123],{"id":127122},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[24,127125,127126],{},[40,127127],{"alt":72,"src":127128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[24,127130,127131],{},"windows-->linux:",[24,127133,127134],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[24,127136,127137],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[24,127139,127140],{},"linux传输文件到windows",[24,127142,127143],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[19,127145,127147],{"id":127146},"_764-易忘知识","7.6.4 易忘知识",[24,127149,127150],{},"操作系统内核查看",[67,127152,127153],{"className":119728,"code":123722,"language":119730,"meta":72,"style":72},[74,127154,127155],{"__ignoreMap":72},[77,127156,127157,127159],{"class":79,"line":80},[77,127158,72647],{"class":83},[77,127160,123731],{"class":94},[24,127162,127163],{},[40,127164],{"alt":72,"src":127165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[24,127167,127168],{},[40,127169],{"alt":72,"src":127170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[67,127172,127174],{"className":119728,"code":127173,"language":119730,"meta":72,"style":72},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[74,127175,127176,127188],{"__ignoreMap":72},[77,127177,127178,127180,127183,127186],{"class":79,"line":80},[77,127179,123939],{"class":83},[77,127181,127182],{"class":271}," mvtest",[77,127184,127185],{"class":271}," mvtest2",[77,127187,5149],{"class":87},[77,127189,127190],{"class":79,"line":91},[77,127191,127192],{"class":83},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[24,127194,127195],{},[40,127196],{"alt":72,"src":127197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[24,127199,127200],{},[40,127201],{"alt":72,"src":127202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[24,127204,127205,127206,127209],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[74,127207,127208],{},"du -a"," 可以快速查看磁盘使用细节。",[19,127211,127213],{"id":127212},"_765-vim","7.6.5 Vim",[24,127215,127216],{},[40,127217],{"alt":72,"src":127218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[24,127220,127221],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[24,127223,127224],{},"一开始进去为命令模式，此时点击输入的字母为命令",[24,127226,127227],{},[27,127228,127229],{},"1.命令模式：",[24,127231,127232],{},"i 切换到输入模式，在光标当前位置开始输入文本",[24,127234,127235],{},"x 删除当前光标所在处的字符",[24,127237,127238],{},"：切换到底线命令模式，以在最底一行输入命令",[24,127240,127241],{},"a 进行插入模式，在光标下一个位置输入文本",[24,127243,127244],{},"o 在当前的下方插入一个新行，并进入插入模式",[24,127246,127247],{},"0 在当前行的上方插入一个新行，并进入插入模式",[24,127249,127250],{},"dd 剪切当前行",[24,127252,127253],{},"yy 复制当前行",[24,127255,127256],{},"p 粘贴剪贴板内容到光标下方",[24,127258,127259],{},"P 粘贴剪贴板内容到光标上方",[24,127261,127262],{},"u 撤销上一次操作",[24,127264,127265],{},"ctrl+r 重做上一次操作",[24,127267,127268,127270],{},[3408,127269],{}," 保存文件",[24,127272,127273,127275],{},[3258,127274],{}," 退出Vim编辑器",[24,127277,127278,127280],{},[3258,127279],{},"! 强制退出Vim编辑器，不保存修改",[24,127282,127283],{},[27,127284,127285],{},"2.输入模式：",[24,127287,127288],{},[40,127289],{"alt":72,"src":127290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[24,127292,127293],{},[27,127294,127295],{},"3.底线命令模式：",[24,127297,127298],{},[40,127299],{"alt":72,"src":127300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[24,127302,127303],{},"按下esc可以退出底线命令模式",[19,127305,127307],{"id":127306},"_766-apt","7.6.6 apt",[24,127309,127310],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[19,127312,127314],{"id":127313},"_767-home与root的区别","7.6.7 home与root的区别",[24,127316,127317],{},[40,127318],{"alt":72,"src":127319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[24,127321,127322],{},[40,127323],{"alt":72,"src":127324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[24,127326,127327],{},[40,127328],{"alt":72,"src":127329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[24,127331,127332],{},[40,127333],{"alt":72,"src":127334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[19,127336,127338],{"id":127337},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[24,127340,127341],{},[417,127342,127343],{"href":127343,"rel":127344},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26332],[139,127346,127347,127350],{},[54,127348,127349],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[54,127351,127352],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[24,127354,127355],{},[40,127356],{"alt":72,"src":127357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[24,127359,127360],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[24,127362,127363],{},[40,127364],{"alt":72,"src":127365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[67,127367,127369],{"className":123248,"code":127368,"language":123250,"meta":123251,"style":72},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[74,127370,127371,127376],{"__ignoreMap":72},[77,127372,127373],{"class":79,"line":80},[77,127374,127375],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[77,127377,127378],{"class":79,"line":91},[77,127379,127380],{},".\u002Fpycharm.sh\n",[24,127382,127383],{},"3️⃣创建.desktop文件",[24,127385,127386],{},[27,127387,127388],{},"原理：",[51,127390,127391,127401],{},[54,127392,127393,127394,127400],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[27,127395,127396,127399],{},[74,127397,127398],{},".desktop"," 文件"," 来识别应用。",[54,127402,127403,127405,127406],{},[74,127404,127398],{}," 文件相当于一个“应用注册表”，告诉系统：",[51,127407,127408,127411,127414,127417,127420],{},[54,127409,127410],{},"应用名字（Name）",[54,127412,127413],{},"图标（Icon）",[54,127415,127416],{},"执行命令（Exec）",[54,127418,127419],{},"分类（Categories）",[54,127421,127422],{},"是否需要终端（Terminal）",[67,127424,127426],{"className":123248,"code":127425,"language":123250,"meta":123251,"style":72},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[74,127427,127428,127433],{"__ignoreMap":72},[77,127429,127430],{"class":79,"line":80},[77,127431,127432],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[77,127434,127435],{"class":79,"line":91},[77,127436,127437],{},"nano pycharm.desktop\n",[24,127439,127440],{},"nano是一个命令行下的编辑器，也可以使用vim",[67,127442,127444],{"className":123248,"code":127443,"language":123250,"meta":123251,"style":72},"[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",[74,127445,127446,127451,127456,127461,127466,127471,127476,127481,127486,127491],{"__ignoreMap":72},[77,127447,127448],{"class":79,"line":80},[77,127449,127450],{},"[Desktop Entry]\n",[77,127452,127453],{"class":79,"line":91},[77,127454,127455],{},"Version=1.0\n",[77,127457,127458],{"class":79,"line":107},[77,127459,127460],{},"Type=Application\n",[77,127462,127463],{"class":79,"line":191},[77,127464,127465],{},"Name=PyCharm\n",[77,127467,127468],{"class":79,"line":1543},[77,127469,127470],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[77,127472,127473],{"class":79,"line":1549},[77,127474,127475],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[77,127477,127478],{"class":79,"line":1566},[77,127479,127480],{},"Comment=JetBrains PyCharm IDE\n",[77,127482,127483],{"class":79,"line":1572},[77,127484,127485],{},"Categories=Development;IDE;\n",[77,127487,127488],{"class":79,"line":1589},[77,127489,127490],{},"Terminal=false\n",[77,127492,127493],{"class":79,"line":1595},[77,127494,127495],{},"StartupWMClass=jetbrains-pycharm\n",[51,127497,127498,127504,127510,127516],{},[54,127499,127500,127503],{},[74,127501,127502],{},"Exec"," → 点击图标时执行的命令",[54,127505,127506,127509],{},[74,127507,127508],{},"Icon"," → 显示在菜单和桌面上的图标",[54,127511,127512,127515],{},[74,127513,127514],{},"Terminal=false"," → 不打开终端",[54,127517,127518,127521],{},[74,127519,127520],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127523,127524,127525],"blockquote",{},[24,127526,127527,127528,127530,127531],{},"可以理解成 ",[74,127529,127398],{}," 文件是 Linux 的 ",[27,127532,127533],{},"快捷方式配置文件",[24,127535,127536],{},"4️⃣设置可执行权限",[67,127538,127540],{"className":123248,"code":127539,"language":123250,"meta":123251,"style":72},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[74,127541,127542],{"__ignoreMap":72},[77,127543,127544],{"class":79,"line":80},[77,127545,127539],{},[24,127547,127548],{},"5️⃣桌面图标启动的话如下：",[67,127550,127552],{"className":123248,"code":127551,"language":123250,"meta":123251,"style":72},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[74,127553,127554,127559],{"__ignoreMap":72},[77,127555,127556],{"class":79,"line":80},[77,127557,127558],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[77,127560,127561],{"class":79,"line":91},[77,127562,127563],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[139,127565,127566],{"start":107},[54,127567,127568],{},"下载Appimage文件实现软件的安装",[24,127570,127571],{},"1️⃣先下载appimage",[24,127573,127574],{},[417,127575,127576],{"href":127576,"rel":127577},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26332],[24,127579,127580],{},[40,127581],{"alt":72,"src":127582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[24,127584,127585],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[24,127587,127588],{},[40,127589],{"alt":72,"src":127590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[24,127592,127593],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[24,127595,127596],{},[40,127597],{"alt":72,"src":127598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[24,127600,127601],{},[40,127602],{"alt":72,"src":127603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[24,127605,127606,127607,127610],{},"3️⃣给他们放在",[74,127608,127609],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[24,127612,127613],{},"4️⃣给软件执行权限",[67,127615,127617],{"className":123248,"code":127616,"language":123250,"meta":123251,"style":72},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[74,127618,127619,127624],{"__ignoreMap":72},[77,127620,127621],{"class":79,"line":80},[77,127622,127623],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[77,127625,127626],{"class":79,"line":91},[77,127627,127628],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[24,127630,127631],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[67,127633,127635],{"className":119728,"code":127634,"language":119730,"meta":72,"style":72},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[74,127636,127637,127644,127651,127657],{"__ignoreMap":72},[77,127638,127639,127641],{"class":79,"line":80},[77,127640,103711],{"class":94},[77,127642,127643],{"class":271}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[77,127645,127646,127648],{"class":79,"line":91},[77,127647,103718],{"class":83},[77,127649,127650],{"class":271}," .\u002Fqqmusic.desktop\n",[77,127652,127653,127655],{"class":79,"line":107},[77,127654,126699],{"class":83},[77,127656,127650],{"class":271},[77,127658,127659,127661,127663,127665],{"class":79,"line":191},[77,127660,27044],{"class":83},[77,127662,27047],{"class":271},[77,127664,125565],{"class":271},[77,127666,127650],{"class":271},[24,127668,127669,127671],{},[74,127670,103718],{},"：一个 Linux 命令，主要功能是：",[51,127673,127674,127677],{},[54,127675,127676],{},"如果文件不存在，就创建一个新的空文件",[54,127678,127679],{},"如果文件已存在，就更新该文件的最后修改时间",[67,127681,127683],{"className":123248,"code":127682,"language":123250,"meta":123251,"style":72},"[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",[74,127684,127685,127689,127694,127699,127704,127708,127713],{"__ignoreMap":72},[77,127686,127687],{"class":79,"line":80},[77,127688,127450],{},[77,127690,127691],{"class":79,"line":91},[77,127692,127693],{},"Name=QQ音乐\n",[77,127695,127696],{"class":79,"line":107},[77,127697,127698],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[77,127700,127701],{"class":79,"line":191},[77,127702,127703],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[77,127705,127706],{"class":79,"line":1543},[77,127707,127460],{},[77,127709,127710],{"class":79,"line":1549},[77,127711,127712],{},"Categories=Audio;Music;Player;\n",[77,127714,127715],{"class":79,"line":1566},[77,127716,127717],{},"Comment=QQ Music Client for Linux\n",[24,127719,127720],{},"将文件复制进去",[24,127722,127723],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[24,127725,127726],{},[40,127727],{"alt":72,"src":127728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[24,127730,127731],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[24,127733,127734],{},[40,127735],{"alt":72,"src":127736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[24,127738,127739,127740,127743,127744,127747],{},"如果你用的不是KDE，那么也可以直接修改",[74,127741,127742],{},"qqmuic.desktop","：在exec的末尾加上",[74,127745,127746],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[67,127749,127751],{"className":123248,"code":127750,"language":123250,"meta":123251,"style":72},"[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",[74,127752,127753,127757,127761,127766,127770,127774,127778],{"__ignoreMap":72},[77,127754,127755],{"class":79,"line":80},[77,127756,127450],{},[77,127758,127759],{"class":79,"line":91},[77,127760,127693],{},[77,127762,127763],{"class":79,"line":107},[77,127764,127765],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[77,127767,127768],{"class":79,"line":191},[77,127769,127703],{},[77,127771,127772],{"class":79,"line":1543},[77,127773,127460],{},[77,127775,127776],{"class":79,"line":1549},[77,127777,127712],{},[77,127779,127780],{"class":79,"line":1566},[77,127781,127717],{},[24,127783,127784],{},[40,127785],{"alt":72,"src":127786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[24,127788,127789],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[67,127791,127793],{"className":123248,"code":127792,"language":123250,"meta":123251,"style":72},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[74,127794,127795],{"__ignoreMap":72},[77,127796,127797],{"class":79,"line":80},[77,127798,127792],{},[139,127800,127801],{"start":191},[54,127802,127803],{},"去Flathub上安装软件",[24,127805,127806],{},[417,127807,127808],{"href":127808,"rel":127809},"https:\u002F\u002Fflathub.org\u002F",[26332],[24,127811,127812],{},"1️⃣去上面的官网搜索软件+下载软件",[24,127814,127815],{},[40,127816],{"alt":72,"src":127817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[67,127819,127821],{"className":123248,"code":127820,"language":123250,"meta":123251,"style":72},"flatpak install flathub com.obsproject.Studio\n",[74,127822,127823],{"__ignoreMap":72},[77,127824,127825],{"class":79,"line":80},[77,127826,127820],{},[24,127828,127829],{},[40,127830],{"alt":72,"src":127831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[24,127833,127834],{},"2️⃣运行软件",[24,127836,127837],{},"a.官方方式：",[24,127839,127840],{},[40,127841],{"alt":72,"src":127842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[67,127844,127845],{"className":123248,"code":127820,"language":123250,"meta":123251,"style":72},[74,127846,127847],{"__ignoreMap":72},[77,127848,127849],{"class":79,"line":80},[77,127850,127820],{},[24,127852,127853],{},"b.当普通软件运行：",[24,127855,127856],{},[40,127857],{"alt":72,"src":127858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[24,127860,127861],{},[40,127862],{"alt":72,"src":127863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2520,127865,127866],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":72,"searchDepth":91,"depth":91,"links":127868},[127869,127870,127875,127876,127882,127883],{"id":124601,"depth":91,"text":124602},{"id":124943,"depth":91,"text":124944,"children":127871},[127872,127873,127874],{"id":124947,"depth":107,"text":124948},{"id":125014,"depth":107,"text":125015},{"id":125275,"depth":107,"text":125276},{"id":125428,"depth":91,"text":125429},{"id":125666,"depth":91,"text":125667,"children":127877},[127878,127879,127880,127881],{"id":125718,"depth":107,"text":125719},{"id":126004,"depth":107,"text":126005},{"id":126275,"depth":107,"text":126276},{"id":126534,"depth":107,"text":126535},{"id":126593,"depth":91,"text":126594},{"id":126894,"depth":91,"text":126895,"children":127884},[127885,127886,127887,127888,127889,127890,127891,127892],{"id":126898,"depth":107,"text":126899},{"id":126910,"depth":107,"text":126911},{"id":127122,"depth":107,"text":127123},{"id":127146,"depth":107,"text":127147},{"id":127212,"depth":107,"text":127213},{"id":127306,"depth":107,"text":127307},{"id":127313,"depth":107,"text":127314},{"id":127337,"depth":107,"text":127338},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124593,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127899,"title":127900,"body":127901,"description":2546,"extension":2547,"meta":127905,"navigation":2549,"path":127906,"seo":127907,"stem":127908,"__hash__":127909},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127902,"toc":127903},[],{"title":72,"searchDepth":91,"depth":91,"links":127904},[],{"category":32731},"\u002Fwiki\u002F2025-01-27-linux",{"title":127900,"description":2546},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127911,"title":127912,"body":127913,"description":127917,"extension":2547,"meta":128308,"navigation":2549,"path":128309,"seo":128310,"stem":128311,"__hash__":128312},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127914,"toc":128306},[127915,127918,127922,127939,127942,127995,127999,128001,128041,128050,128054,128057,128298,128303],[24,127916,127917],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127919,127921],{"id":127920},"_1ubuntu环境配置","1.Ubuntu环境配置",[139,127923,127924,127927,127930,127933,127936],{},[54,127925,127926],{},"ubuntu环境换源",[54,127928,127929],{},"安装cuda",[54,127931,127932],{},"安装miniconda",[54,127934,127935],{},"安装pytorch",[54,127937,127938],{},"安装genesis",[24,127940,127941],{},"参考链接：",[67,127943,127945],{"className":26289,"code":127944,"language":26291,"meta":72,"style":72},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[74,127946,127947],{"__ignoreMap":72},[77,127948,127949,127952,127955,127958,127960,127963,127966,127968,127971,127974,127976,127979,127982,127984,127987,127990,127992],{"class":79,"line":80},[77,127950,127951],{"class":83},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[77,127953,127954],{"class":271},"=blogdetail",[77,127956,127957],{"class":87},"&sharetype",[77,127959,268],{"class":2123},[77,127961,127962],{"class":271},"blogdetail",[77,127964,127965],{"class":87},"&sharerId",[77,127967,268],{"class":2123},[77,127969,127970],{"class":271},"144728092",[77,127972,127973],{"class":87},"&sharerefer",[77,127975,268],{"class":2123},[77,127977,127978],{"class":271},"PC",[77,127980,127981],{"class":87},"&sharesource",[77,127983,268],{"class":2123},[77,127985,127986],{"class":271},"qq_69379513",[77,127988,127989],{"class":87},"&sharefrom",[77,127991,268],{"class":2123},[77,127993,127994],{"class":271},"from_link\n",[10,127996,127998],{"id":127997},"_2genesis-报错issue","2.Genesis 报错issue",[24,128000,127941],{},[67,128002,128003],{"className":26289,"code":127944,"language":26291,"meta":72,"style":72},[74,128004,128005],{"__ignoreMap":72},[77,128006,128007,128009,128011,128013,128015,128017,128019,128021,128023,128025,128027,128029,128031,128033,128035,128037,128039],{"class":79,"line":80},[77,128008,127951],{"class":83},[77,128010,127954],{"class":271},[77,128012,127957],{"class":87},[77,128014,268],{"class":2123},[77,128016,127962],{"class":271},[77,128018,127965],{"class":87},[77,128020,268],{"class":2123},[77,128022,127970],{"class":271},[77,128024,127973],{"class":87},[77,128026,268],{"class":2123},[77,128028,127978],{"class":271},[77,128030,127981],{"class":87},[77,128032,268],{"class":2123},[77,128034,127986],{"class":271},[77,128036,127989],{"class":87},[77,128038,268],{"class":2123},[77,128040,127994],{"class":271},[67,128042,128044],{"className":26289,"code":128043,"language":26291,"meta":72,"style":72},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[74,128045,128046],{"__ignoreMap":72},[77,128047,128048],{"class":79,"line":80},[77,128049,128043],{"class":83},[10,128051,128053],{"id":128052},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[24,128055,128056],{},"hello_robot.py",[67,128058,128060],{"className":32846,"code":128059,"language":32848,"meta":72,"style":72},"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",[74,128061,128062,128068,128083,128087,128099,128111,128115,128128,128132,128151,128161,128171,128185,128189,128193,128198,128202,128212,128219,128233,128240,128250,128255,128259,128277,128282,128286,128293],{"__ignoreMap":72},[77,128063,128064,128066],{"class":79,"line":80},[77,128065,32860],{"class":2123},[77,128067,47771],{"class":87},[77,128069,128070,128073,128076,128078,128080],{"class":79,"line":91},[77,128071,128072],{"class":87},"os.environ[",[77,128074,128075],{"class":271},"'PYOPENGL_PLATFORM'",[77,128077,6918],{"class":87},[77,128079,268],{"class":2123},[77,128081,128082],{"class":271}," 'glx'\n",[77,128084,128085],{"class":79,"line":107},[77,128086,4875],{"emptyLinePlaceholder":2549},[77,128088,128089,128091,128094,128096],{"class":79,"line":191},[77,128090,32860],{"class":2123},[77,128092,128093],{"class":87}," genesis ",[77,128095,33850],{"class":2123},[77,128097,128098],{"class":87}," gs\n",[77,128100,128101,128103,128106,128108],{"class":79,"line":1543},[77,128102,33205],{"class":2123},[77,128104,128105],{"class":87}," pynput ",[77,128107,32860],{"class":2123},[77,128109,128110],{"class":87}," keyboard\n",[77,128112,128113],{"class":79,"line":1549},[77,128114,4875],{"emptyLinePlaceholder":2549},[77,128116,128117,128120,128123,128125],{"class":79,"line":1566},[77,128118,128119],{"class":87},"gs.init(",[77,128121,128122],{"class":7691},"backend",[77,128124,268],{"class":2123},[77,128126,128127],{"class":87},"gs.gpu)\n",[77,128129,128130],{"class":79,"line":1572},[77,128131,4875],{"emptyLinePlaceholder":2549},[77,128133,128134,128137,128139,128142,128145,128147,128149],{"class":79,"line":1589},[77,128135,128136],{"class":87},"scene ",[77,128138,268],{"class":2123},[77,128140,128141],{"class":87}," gs.Scene(",[77,128143,128144],{"class":7691},"show_viewer",[77,128146,268],{"class":2123},[77,128148,33943],{"class":94},[77,128150,2628],{"class":87},[77,128152,128153,128156,128158],{"class":79,"line":1595},[77,128154,128155],{"class":87},"plane ",[77,128157,268],{"class":2123},[77,128159,128160],{"class":87}," scene.add_entity(gs.morphs.Plane())\n",[77,128162,128163,128166,128168],{"class":79,"line":4088},[77,128164,128165],{"class":87},"franka ",[77,128167,268],{"class":2123},[77,128169,128170],{"class":87}," scene.add_entity(\n",[77,128172,128173,128176,128178,128180,128183],{"class":79,"line":4093},[77,128174,128175],{"class":87},"    gs.morphs.MJCF(",[77,128177,47820],{"class":7691},[77,128179,268],{"class":2123},[77,128181,128182],{"class":271},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[77,128184,40513],{"class":87},[77,128186,128187],{"class":79,"line":4099},[77,128188,2628],{"class":87},[77,128190,128191],{"class":79,"line":4104},[77,128192,4875],{"emptyLinePlaceholder":2549},[77,128194,128195],{"class":79,"line":4118},[77,128196,128197],{"class":87},"scene.build()\n",[77,128199,128200],{"class":79,"line":4123},[77,128201,4875],{"emptyLinePlaceholder":2549},[77,128203,128204,128206,128209],{"class":79,"line":4129},[77,128205,34414],{"class":2123},[77,128207,128208],{"class":83}," on_press",[77,128210,128211],{"class":87},"(key):\n",[77,128213,128214,128217],{"class":79,"line":4150},[77,128215,128216],{"class":2123},"    try",[77,128218,6214],{"class":87},[77,128220,128221,128223,128226,128228,128231],{"class":79,"line":4155},[77,128222,4972],{"class":2123},[77,128224,128225],{"class":87}," key.char ",[77,128227,5424],{"class":2123},[77,128229,128230],{"class":271}," 'q'",[77,128232,6214],{"class":87},[77,128234,128235,128237],{"class":79,"line":4169},[77,128236,18202],{"class":2123},[77,128238,128239],{"class":94}," False\n",[77,128241,128242,128245,128248],{"class":79,"line":4174},[77,128243,128244],{"class":2123},"    except",[77,128246,128247],{"class":94}," AttributeError",[77,128249,6214],{"class":87},[77,128251,128252],{"class":79,"line":4203},[77,128253,128254],{"class":2123},"        pass\n",[77,128256,128257],{"class":79,"line":4208},[77,128258,4875],{"emptyLinePlaceholder":2549},[77,128260,128261,128264,128266,128269,128272,128274],{"class":79,"line":4225},[77,128262,128263],{"class":87},"listener ",[77,128265,268],{"class":2123},[77,128267,128268],{"class":87}," keyboard.Listener(",[77,128270,128271],{"class":7691},"on_press",[77,128273,268],{"class":2123},[77,128275,128276],{"class":87},"on_press)\n",[77,128278,128279],{"class":79,"line":4230},[77,128280,128281],{"class":87},"listener.start()\n",[77,128283,128284],{"class":79,"line":4235},[77,128285,4875],{"emptyLinePlaceholder":2549},[77,128287,128288,128290],{"class":79,"line":4240},[77,128289,111096],{"class":2123},[77,128291,128292],{"class":87}," listener.running:\n",[77,128294,128295],{"class":79,"line":4254},[77,128296,128297],{"class":87},"    scene.step()\n",[24,128299,128300],{},[40,128301],{"alt":72,"src":128302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2520,128304,128305],{},"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":72,"searchDepth":91,"depth":91,"links":128307},[],{"category":25847},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127912,"description":127917},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128314,"title":128315,"body":128316,"description":2546,"extension":2547,"meta":128331,"navigation":2549,"path":128332,"seo":128333,"stem":128334,"__hash__":128335},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128317,"toc":128328},[128318,128321,128325],[10,128319,128315],{"id":128320},"_1-基础知识",[14,128322,128324],{"id":128323},"_11-js的组成","1.1 js的组成",[24,128326,128327],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":72,"searchDepth":91,"depth":91,"links":128329},[128330],{"id":128323,"depth":91,"text":128324},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128315,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128337,"title":128338,"body":128339,"description":2546,"extension":2547,"meta":128478,"navigation":2549,"path":128479,"seo":128480,"stem":128481,"__hash__":128482},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128340,"toc":128466},[128341,128344,128348,128351,128355,128365,128369,128372,128375,128378,128382,128389,128395,128399,128405,128416,128420,128423,128427,128430,128434,128437,128441,128444,128448,128451,128454,128457,128460,128463],[10,128342,128338],{"id":128343},"_2-vscode必备内容",[14,128345,128347],{"id":128346},"_21-标签分类","2.1 标签分类",[24,128349,128350],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128352,128354],{"id":128353},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[24,128356,128357,128358,128360,128361,128364],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[74,128359,2841],{}," 然后按 ",[74,128362,128363],{},"Tab","，快速自动生成基本结构。",[14,128366,128368],{"id":128367},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[24,128370,128371],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[24,128373,128374],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[24,128376,128377],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128379,128381],{"id":128380},"_24-视图缩放","2.4 视图缩放",[24,128383,128384,128385,128388],{},"缩放视图 ",[74,128386,128387],{},"ctrl+"," 可实现代码增大。",[24,128390,128391,128394],{},[74,128392,128393],{},"ctrl-"," 可实现代码减小。",[14,128396,128398],{"id":128397},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[24,128400,128401,128402,30853],{},"VSCode 新建文件快捷键为 ",[74,128403,128404],{},"ctrl+N",[24,128406,128407,128408,128411,128412,128415],{},"保存快捷键为 ",[74,128409,128410],{},"ctrl+S","，将文本保存为 ",[74,128413,128414],{},".html"," 文件。",[14,128417,128419],{"id":128418},"_26-auto-rename-tag","2.6 Auto Rename Tag",[24,128421,128422],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128424,128426],{"id":128425},"_27-vscode-icons","2.7 vscode-icons",[24,128428,128429],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128431,128433],{"id":128432},"_28-easy-less","2.8 Easy LESS",[24,128435,128436],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128438,128440],{"id":128439},"_29-会了吧插件","2.9 会了吧插件",[24,128442,128443],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128445,128447],{"id":128446},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[24,128449,128450],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[24,128452,128453],{},"②选定多个相同的单词:ctrl+D",[24,128455,128456],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[24,128458,128459],{},"④全局替换某些单词:ctrl+h",[24,128461,128462],{},"⑤快速定位到某一行:ctrl+g",[24,128464,128465],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":72,"searchDepth":91,"depth":91,"links":128467},[128468,128469,128470,128471,128472,128473,128474,128475,128476,128477],{"id":128346,"depth":91,"text":128347},{"id":128353,"depth":91,"text":128354},{"id":128367,"depth":91,"text":128368},{"id":128380,"depth":91,"text":128381},{"id":128397,"depth":91,"text":128398},{"id":128418,"depth":91,"text":128419},{"id":128425,"depth":91,"text":128426},{"id":128432,"depth":91,"text":128433},{"id":128439,"depth":91,"text":128440},{"id":128446,"depth":91,"text":128447},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128338,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128484,"title":128485,"body":128486,"description":2546,"extension":2547,"meta":128645,"navigation":2549,"path":128646,"seo":128647,"stem":128648,"__hash__":128649},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128487,"toc":128637},[128488,128491,128495,128505,128511,128517,128521,128530,128534,128539,128542,128545,128549,128552,128562,128571,128580,128589,128599,128606,128611,128616,128629],[10,128489,128485],{"id":128490},"_3-html文本与容器标签",[14,128492,128494],{"id":128493},"_31-标题标签","3.1 标题标签",[24,128496,128497,128500,128501,128504],{},[74,128498,128499],{},"\u003Ch1>","我是一级标签",[74,128502,128503],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[24,128506,128507,128500,128509],{},[74,128508,128499],{},[74,128510,128503],{},[24,128512,125767,128513,128516],{},[74,128514,128515],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128518,128520],{"id":128519},"_32-段落标签","3.2 段落标签",[24,128522,128523,128526,128527],{},[74,128524,128525],{},"\u003Cp>","....",[74,128528,128529],{},"\u003C\u002Fp>",[14,128531,128533],{"id":128532},"_33-换行标签","3.3 换行标签",[24,128535,128536],{},[74,128537,128538],{},"\u003Cbr \u002F>",[24,128540,128541],{},"具有强制换行的作用",[24,128543,128544],{},"单标签",[14,128546,128548],{"id":128547},"_34-文本格式化标签","3.4 文本格式化标签",[24,128550,128551],{},"提供粗体、斜体和下划线等效果",[24,128553,128554,128555,84976,128558,128561],{},"加粗：",[74,128556,128557],{},"\u003Cstrong>...\u003C\u002Fstrong>",[74,128559,128560],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[24,128563,128564,128565,84976,128568,128561],{},"斜体：",[74,128566,128567],{},"\u003Cem>...\u003C\u002Fem>",[74,128569,128570],{},"\u003Ci>...\u003C\u002Fi>",[24,128572,128573,128574,84976,128577,128561],{},"删除线：",[74,128575,128576],{},"\u003Cdel>...\u003C\u002Fdel>",[74,128578,128579],{},"\u003Cs>...\u003C\u002Fs>",[24,128581,128582,128583,84976,128586,128561],{},"下划线：",[74,128584,128585],{},"\u003Cins>...\u003C\u002Fins>",[74,128587,128588],{},"\u003Cu>...\u003C\u002Fu>",[14,128590,128592,128593,20880,128596,413],{"id":128591},"_35-div和span标签","3.5 ",[74,128594,128595],{},"\u003Cdiv>",[74,128597,128598],{},"\u003Cspan>",[24,128600,128601,513,128603,128605],{},[74,128602,128595],{},[74,128604,128598],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[24,128607,128608],{},[74,128609,128610],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[24,128612,128613],{},[74,128614,128615],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[24,128617,128618,128619,128621,128622,128624,128625,128628],{},"两者特点：①",[74,128620,128595],{}," 标签用来布局，但一行通常只放一个 ",[74,128623,128595],{},"。可以理解为一个大盒子，独占一行，在 ",[74,128626,128627],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[24,128630,79687,128631,128633,128634,128636],{},[74,128632,128598],{}," 标签也可用于布局，一行可以放多个 ",[74,128635,128598],{},"，可理解为小盒子。",{"title":72,"searchDepth":91,"depth":91,"links":128638},[128639,128640,128641,128642,128643],{"id":128493,"depth":91,"text":128494},{"id":128519,"depth":91,"text":128520},{"id":128532,"depth":91,"text":128533},{"id":128547,"depth":91,"text":128548},{"id":128591,"depth":91,"text":128644},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128485,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128651,"title":128652,"body":128653,"description":2546,"extension":2547,"meta":128849,"navigation":2549,"path":128850,"seo":128851,"stem":128852,"__hash__":128853},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128654,"toc":128841},[128655,128658,128662,128665,128671,128678,128684,128690,128693,128696,128699,128702,128705,128708,128711,128715,128718,128721,128724,128730,128736,128742,128749,128753,128759,128765,128768,128771,128777,128783,128789,128792,128795,128799,128802,128812,128818,128822,128831,128835,128838],[10,128656,128652],{"id":128657},"_4-html图像与链接",[14,128659,128661],{"id":128660},"_41-图像标签","4.1 图像标签",[24,128663,128664],{},"（1）标签",[24,128666,128667,128670],{},[74,128668,128669],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[24,128672,128673,128674,128677],{},"src是",[74,128675,128676],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[24,128679,128680,128681],{},"alt:文本，替换文本。图像不能显示的文字 ",[74,128682,128683],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[24,128685,128686,128687],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[74,128688,128689],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[24,128691,128692],{},"width:像素，设置图像的宽度",[24,128694,128695],{},"height:像素，设置图像的高度",[24,128697,128698],{},"border：像素，设置图像的边框粗细",[24,128700,128701],{},"（2）图像标签属性的注意点：",[24,128703,128704],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[24,128706,128707],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[24,128709,128710],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128712,128714],{"id":128713},"_42-路径注意要点","4.2 路径注意要点：",[24,128716,128717],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[24,128719,128720],{},"（2）根目录：就是打开文件夹的第一层根目录",[24,128722,128723],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[24,128725,128726,128727],{},"①同一级路径：图像文件位于HTML文件同一级，如",[74,128728,128729],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[24,128731,128732,128733],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[74,128734,128735],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[24,128737,128738,128739],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[74,128740,128741],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[24,128743,128744,128745,2865],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[417,128746,128747],{"href":128747,"rel":128748},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26332],[14,128750,128752],{"id":128751},"_43-超链接标签","4.3 超链接标签",[24,128754,128755,128758],{},[74,128756,128757],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[24,128760,128761,128762],{},"①语法格式：",[74,128763,128764],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[24,128766,128767],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[24,128769,128770],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[24,128772,128773,128774],{},"③链接分类：外部链接：",[74,128775,128776],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[24,128778,128779,128780],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[74,128781,128782],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[24,128784,128785,128786],{},"空链接：如果当时没有确定链接目标时，",[74,128787,128788],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[24,128790,128791],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[24,128793,128794],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128796,128798],{"id":128797},"_44-锚点链接","4.4 锚点链接",[24,128800,128801],{},"点我们点击链接，可以快速定位到页面中的某个位置",[24,128803,128804,128805,128808,128809],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[74,128806,128807],{},"\u003Ca href=\"#two\">","第二级",[74,128810,128811],{},"\u003C\u002Fa>",[24,128813,128814,128815],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[74,128816,128817],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128819,128821],{"id":128820},"_45-注释标签","4.5 注释标签",[24,128823,128824,128827,128828],{},[74,128825,128826],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[74,128829,128830],{},"ctrl+\u002F",[14,128832,128834],{"id":128833},"_46-特殊字符","4.6 特殊字符",[24,128836,128837],{},"可以实现添加多个空格",[40,128839],{"style":42,"src":128840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":72,"searchDepth":91,"depth":91,"links":128842},[128843,128844,128845,128846,128847,128848],{"id":128660,"depth":91,"text":128661},{"id":128713,"depth":91,"text":128714},{"id":128751,"depth":91,"text":128752},{"id":128797,"depth":91,"text":128798},{"id":128820,"depth":91,"text":128821},{"id":128833,"depth":91,"text":128834},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128652,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128855,"title":128856,"body":128857,"description":2546,"extension":2547,"meta":129148,"navigation":2549,"path":129149,"seo":129150,"stem":129151,"__hash__":129152},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128858,"toc":129139},[128859,128862,128866,128869,128872,128875,128878,128881,128884,128887,128890,128893,128913,128919,128923,128926,128929,128932,128935,128938,128941,128945,128948,128951,128954,128957,128970,128975,128978,128981,128994,128997,129000,129003,129006,129009,129013,129016,129023,129026,129029,129032,129035,129038,129044,129047,129050,129056,129059,129062,129065,129071,129074,129077,129091,129098,129101,129104,129111,129120,129123,129126,129129,129133,129136],[10,128860,128856],{"id":128861},"_5-html表格列表与表单",[14,128863,128865],{"id":128864},"_51-表格标签","5.1 表格标签",[24,128867,128868],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[24,128870,128871],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[24,128873,128874],{},"②表格基本语法：",[40,128876],{"style":42,"src":128877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[24,128879,128880],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[40,128882],{"style":42,"src":128883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[24,128885,128886],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[40,128888],{"style":42,"src":128889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[24,128891,128892],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[24,128894,128895,128898,128899,128901,128902,128905,128906,128908,128909,128912],{},[74,128896,128897],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[74,128900,128897],{},"内部必须拥有",[74,128903,128904],{},"\u003Ctr>","标签，一般位于第一行，",[74,128907,128897],{},"比",[74,128910,128911],{},"\u003Cth>","范围广",[24,128914,128915,128918],{},[74,128916,128917],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128920,128922],{"id":128921},"_52-合并单元格","5.2 合并单元格",[24,128924,128925],{},"（1）合并单元格方式：",[24,128927,128928],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[24,128930,128931],{},"②跨列合并：colspan=\"合并单元格的个数\"",[24,128933,128934],{},"（2）目标单元格：",[24,128936,128937],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[24,128939,128940],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128942,128944],{"id":128943},"_53-列表标签","5.3 列表标签",[24,128946,128947],{},"（1）分类：无序列表、有序列表、自定义列表",[24,128949,128950],{},"①无序列表：",[40,128952],{"style":42,"src":128953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[24,128955,128956],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[24,128958,128959,128962,128963,128966,128967,128969],{},[74,128960,128961],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[74,128964,128965],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[74,128968,128961],{},"中输入其他标签或文字是不对的",[24,128971,128972,128974],{},[74,128973,128965],{},"之间相当于一个容器，可以容纳所有元素",[24,128976,128977],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[24,128979,128980],{},"在css中去除前边的小圆点采用如下代码:",[67,128982,128984],{"className":69,"code":128983,"language":71,"meta":72,"style":72},"list-style: none;\n",[74,128985,128986],{"__ignoreMap":72},[77,128987,128988,128991],{"class":79,"line":80},[77,128989,128990],{"class":158},"list-style",[77,128992,128993],{"class":87},": none;\n",[24,128995,128996],{},"②有序列表：",[40,128998],{"style":42,"src":128999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[24,129001,129002],{},"③自定义列表：",[40,129004],{"style":42,"src":129005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[40,129007],{"style":42,"src":129008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,129010,129012],{"id":129011},"_54-表单标签","5.4 表单标签",[24,129014,129015],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[24,129017,129018,129019,129022],{},"（1）表单域：包含单元素的区域，",[74,129020,129021],{},"\u003Cform>","标签可以实现信息的收集和传递。",[40,129024],{"style":42,"src":129025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[24,129027,129028],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[24,129030,129031],{},"表单元素提交必须有name属性",[24,129033,129034],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[24,129036,129037],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[24,129039,79664,129040,129043],{},[74,129041,129042],{},"\u003Cinput>","输入表单元素",[40,129045],{"style":42,"src":129046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[40,129048],{"style":42,"src":129049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[24,129051,129052,129053],{},"单选按钮：",[74,129054,129055],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[40,129057],{"style":42,"src":129058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[24,129060,129061],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[40,129063],{"style":42,"src":129064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[24,129066,129067,129070],{},[27,129068,129069],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[24,129072,129073],{},"②select下拉表单元素：可以节约页面控件",[40,129075],{"style":42,"src":129076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[24,129078,129079,16267,129081,129084,129085,129087,129088,129090],{},[27,129080,2651],{},[74,129082,129083],{},"\u003Cselect>","中至少包含一对",[74,129086,105147],{},"；在",[74,129089,105147],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[24,129092,129093,129094,129097],{},"③",[74,129095,129096],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[40,129099],{"style":42,"src":129100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[24,129102,129103],{},"3行20列",[14,129105,129107,129108,413],{"id":129106},"_55-lable标签","5.5 ",[74,129109,129110],{},"\u003Clable>",[24,129112,129113,129114,129116,129117,129119],{},"它不是表单标签，但常常与表单标签搭配使用，",[74,129115,129110],{},"标签用于绑定一个表单标签，当点击",[74,129118,129110],{},"标签内的文本",[24,129121,129122],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[40,129124],{"style":42,"src":129125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[40,129127],{"style":42,"src":129128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129130,129132],{"id":129131},"_56-实例","5.6 实例",[40,129134],{"style":42,"src":129135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2520,129137,129138],{},"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":72,"searchDepth":91,"depth":91,"links":129140},[129141,129142,129143,129144,129145,129147],{"id":128864,"depth":91,"text":128865},{"id":128921,"depth":91,"text":128922},{"id":128943,"depth":91,"text":128944},{"id":129011,"depth":91,"text":129012},{"id":129106,"depth":91,"text":129146},"5.5 \u003Clable>标签",{"id":129131,"depth":91,"text":129132},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128856,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129154,"title":129155,"body":129156,"description":2546,"extension":2547,"meta":129705,"navigation":2549,"path":129706,"seo":129707,"stem":129708,"__hash__":129709},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129157,"toc":129680},[129158,129161,129165,129168,129171,129175,129178,129181,129184,129187,129190,129193,129196,129200,129203,129207,129210,129213,129216,129220,129223,129226,129229,129235,129238,129241,129244,129247,129250,129253,129256,129289,129293,129296,129299,129302,129306,129309,129312,129315,129318,129321,129325,129328,129331,129334,129338,129341,129345,129348,129352,129355,129360,129364,129367,129371,129374,129377,129380,129383,129410,129413,129417,129420,129423,129428,129431,129434,129438,129441,129446,129449,129452,129455,129459,129462,129465,129468,129472,129475,129478,129481,129485,129489,129492,129532,129535,129539,129546,129549,129553,129556,129602,129606,129609,129612,129615,129643,129647,129650,129677],[10,129159,129155],{"id":129160},"_6-css语法与文本样式",[14,129162,129164],{"id":129163},"_61-css语法规范","6.1 css语法规范",[24,129166,129167],{},"由两部分组成，选择器及一条或多条声明",[40,129169],{"style":42,"src":129170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[24,129172,129173],{},[27,129174,2651],{},[24,129176,129177],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[24,129179,129180],{},"②属性与属性值以“键值对”的形式出现",[24,129182,129183],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[24,129185,129186],{},"④属性和属性值之间用英文“;”分开",[40,129188],{"style":42,"src":129189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[40,129191],{"style":42,"src":129192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[40,129194],{"style":42,"src":129195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129197,129199],{"id":129198},"_62-css选择器","6.2 css选择器",[24,129201,129202],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[19,129204,129206],{"id":129205},"_621-标签选择器","6.2.1 标签选择器",[24,129208,129209],{},"①优点：能快速为页面中同类型的标签统一设置样式",[24,129211,129212],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[40,129214],{"style":42,"src":129215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[19,129217,129219],{"id":129218},"_622-类选择器","6.2.2 类选择器",[24,129221,129222],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[24,129224,129225],{},"②样例",[40,129227],{"style":42,"src":129228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[24,129230,129231,129232,129234],{},"③ ",[27,129233,129069],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[24,129236,129237],{},"可以理解为给这个标签起了个名字，来表示；",[24,129239,129240],{},"长名称或词组可以使用横线来为选择器命名；",[24,129242,129243],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[24,129245,129246],{},"命名要有意义；",[40,129248],{"style":42,"src":129249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[24,129251,129252],{},"类选择器也可以指定特殊的元素p.center{}",[24,129254,129255],{},"p.center和.center都对",[67,129257,129259],{"className":69,"code":129258,"language":71,"meta":72,"style":72},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[74,129260,129261,129266,129275,129285],{"__ignoreMap":72},[77,129262,129263],{"class":79,"line":80},[77,129264,129265],{"class":323},"\u002F* 类选择器指定特殊元素 *\u002F\n",[77,129267,129268,129270,129273],{"class":79,"line":91},[77,129269,24],{"class":158},[77,129271,129272],{"class":83},".center",[77,129274,88],{"class":87},[77,129276,129277,129279,129281,129283],{"class":79,"line":107},[77,129278,72968],{"class":94},[77,129280,98],{"class":87},[77,129282,54052],{"class":94},[77,129284,104],{"class":87},[77,129286,129287],{"class":79,"line":191},[77,129288,110],{"class":87},[19,129290,129292],{"id":129291},"_623-多类名使用","6.2.3 多类名使用",[24,129294,129295],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[40,129297],{"style":42,"src":129298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[24,129300,129301],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[19,129303,129305],{"id":129304},"_624-id选择器","6.2.4 id选择器",[24,129307,129308],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[24,129310,129311],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[40,129313],{"style":42,"src":129314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[24,129316,129317],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[24,129319,129320],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[19,129322,129324],{"id":129323},"_625-通配符选择器","6.2.5 通配符选择器",[24,129326,129327],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[24,129329,129330],{},"* {",[24,129332,129333],{},"color=\"red\"}",[19,129335,129337],{"id":129336},"_626-总结","6.2.6 总结",[40,129339],{"style":42,"src":129340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129342,129344],{"id":129343},"_63-css字体属性","6.3 css字体属性",[24,129346,129347],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[19,129349,129351],{"id":129350},"_631-字体系列","6.3.1 字体系列",[24,129353,129354],{},"font-family: '宋体';",[24,129356,129357,129359],{},[27,129358,2651],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[19,129361,129363],{"id":129362},"_632-字体大小","6.3.2 字体大小",[24,129365,129366],{},"font-size: 20px",[24,129368,129369,28941],{},[27,129370,129069],{},[24,129372,129373],{},"①px（像素）大小是网页的最常用单位",[24,129375,129376],{},"②谷歌浏览器默认为16px",[24,129378,129379],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[24,129381,129382],{},"④可以给body指定整个页面的大小：会自动引用",[67,129384,129386],{"className":69,"code":129385,"language":71,"meta":72,"style":72},"body {\n  font-size: 16px;\n}\n",[74,129387,129388,129394,129406],{"__ignoreMap":72},[77,129389,129390,129392],{"class":79,"line":80},[77,129391,54258],{"class":158},[77,129393,88],{"class":87},[77,129395,129396,129398,129400,129402,129404],{"class":79,"line":91},[77,129397,73068],{"class":94},[77,129399,98],{"class":87},[77,129401,3214],{"class":94},[77,129403,2124],{"class":2123},[77,129405,104],{"class":87},[77,129407,129408],{"class":79,"line":107},[77,129409,110],{"class":87},[24,129411,129412],{},"⑤标题标签比较特殊，需要单独指定大小",[19,129414,129416],{"id":129415},"_633-字体粗细","6.3.3 字体粗细",[24,129418,129419],{},"font-weight: bold;",[24,129421,129422],{},"font-weight: 100；",[24,129424,129425,129427],{},[27,129426,2651],{}," ①粗体文字变细：尽量别用normal，多用数字",[24,129429,129430],{},"font-weight= 400;",[24,129432,129433],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[19,129435,129437],{"id":129436},"_634-文字样式","6.3.4 文字样式",[24,129439,129440],{},"font-style: normal；",[24,129442,129443,28941],{},[27,129444,129445],{},"属性值",[24,129447,129448],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[24,129450,129451],{},"②italic：浏览器会显示斜体的字体样式",[40,129453],{"style":42,"src":129454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[19,129456,129458],{"id":129457},"_635-字体符合属性","6.3.5 字体符合属性",[40,129460],{"style":42,"src":129461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[40,129463],{"style":42,"src":129464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[24,129466,129467],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[24,129469,129470,28941],{},[27,129471,129069],{},[24,129473,129474],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[24,129476,129477],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[24,129479,129480],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129482,129484],{"id":129483},"_64-css-test文本属性","6.4 css test文本属性",[19,129486,129488],{"id":129487},"_641-文本颜色","6.4.1 文本颜色",[24,129490,129491],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[67,129493,129495],{"className":69,"code":129494,"language":71,"meta":72,"style":72},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[74,129496,129497,129502,129508,129518,129523,129528],{"__ignoreMap":72},[77,129498,129499],{"class":79,"line":80},[77,129500,129501],{"class":323},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[77,129503,129504,129506],{"class":79,"line":91},[77,129505,24],{"class":158},[77,129507,88],{"class":87},[77,129509,129510,129512,129514,129516],{"class":79,"line":107},[77,129511,73344],{"class":94},[77,129513,98],{"class":87},[77,129515,59869],{"class":94},[77,129517,104],{"class":87},[77,129519,129520],{"class":79,"line":191},[77,129521,129522],{"class":323},"  \u002F* color: #ff0000; *\u002F\n",[77,129524,129525],{"class":79,"line":1543},[77,129526,129527],{"class":323},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[77,129529,129530],{"class":79,"line":1549},[77,129531,110],{"class":87},[40,129533],{"style":42,"src":129534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[19,129536,129538],{"id":129537},"_642-对齐文本","6.4.2 对齐文本",[24,129540,129541,129542,129545],{},"text-align属于用于设置元素内文本内容的 ",[27,129543,129544],{},"水平对齐"," 方式",[24,129547,129548],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[19,129550,129552],{"id":129551},"_643-装饰文本","6.4.3 装饰文本",[24,129554,129555],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[67,129557,129559],{"className":69,"code":129558,"language":71,"meta":72,"style":72},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[74,129560,129561,129567,129577,129581,129587,129598],{"__ignoreMap":72},[77,129562,129563,129565],{"class":79,"line":80},[77,129564,417],{"class":158},[77,129566,88],{"class":87},[77,129568,129569,129571,129573,129575],{"class":79,"line":91},[77,129570,72944],{"class":94},[77,129572,98],{"class":87},[77,129574,186],{"class":94},[77,129576,104],{"class":87},[77,129578,129579],{"class":79,"line":107},[77,129580,110],{"class":87},[77,129582,129583,129585],{"class":79,"line":191},[77,129584,24],{"class":158},[77,129586,88],{"class":87},[77,129588,129589,129591,129593,129596],{"class":79,"line":1543},[77,129590,72944],{"class":94},[77,129592,98],{"class":87},[77,129594,129595],{"class":94},"underline",[77,129597,104],{"class":87},[77,129599,129600],{"class":79,"line":1549},[77,129601,110],{"class":87},[19,129603,129605],{"id":129604},"_644-文本缩进","6.4.4 文本缩进",[24,129607,129608],{},"实现文本的第一行首行缩进自己指定的距离",[24,129610,129611],{},"20px往右边走；-20px往左边走",[24,129613,129614],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[67,129616,129618],{"className":69,"code":129617,"language":71,"meta":72,"style":72},"p {\n  text-indent: 2em;\n}\n",[74,129619,129620,129626,129639],{"__ignoreMap":72},[77,129621,129622,129624],{"class":79,"line":80},[77,129623,24],{"class":158},[77,129625,88],{"class":87},[77,129627,129628,129631,129633,129635,129637],{"class":79,"line":91},[77,129629,129630],{"class":94},"  text-indent",[77,129632,98],{"class":87},[77,129634,2696],{"class":94},[77,129636,687],{"class":2123},[77,129638,104],{"class":87},[77,129640,129641],{"class":79,"line":107},[77,129642,110],{"class":87},[19,129644,129646],{"id":129645},"_645-行间距","6.4.5 行间距",[24,129648,129649],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[67,129651,129653],{"className":69,"code":129652,"language":71,"meta":72,"style":72},"p {\n  line-height: 1.6;\n}\n",[74,129654,129655,129661,129673],{"__ignoreMap":72},[77,129656,129657,129659],{"class":79,"line":80},[77,129658,24],{"class":158},[77,129660,88],{"class":87},[77,129662,129663,129666,129668,129671],{"class":79,"line":91},[77,129664,129665],{"class":94},"  line-height",[77,129667,98],{"class":87},[77,129669,129670],{"class":94},"1.6",[77,129672,104],{"class":87},[77,129674,129675],{"class":79,"line":107},[77,129676,110],{"class":87},[2520,129678,129679],{},"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":72,"searchDepth":91,"depth":91,"links":129681},[129682,129683,129691,129698],{"id":129163,"depth":91,"text":129164},{"id":129198,"depth":91,"text":129199,"children":129684},[129685,129686,129687,129688,129689,129690],{"id":129205,"depth":107,"text":129206},{"id":129218,"depth":107,"text":129219},{"id":129291,"depth":107,"text":129292},{"id":129304,"depth":107,"text":129305},{"id":129323,"depth":107,"text":129324},{"id":129336,"depth":107,"text":129337},{"id":129343,"depth":91,"text":129344,"children":129692},[129693,129694,129695,129696,129697],{"id":129350,"depth":107,"text":129351},{"id":129362,"depth":107,"text":129363},{"id":129415,"depth":107,"text":129416},{"id":129436,"depth":107,"text":129437},{"id":129457,"depth":107,"text":129458},{"id":129483,"depth":91,"text":129484,"children":129699},[129700,129701,129702,129703,129704],{"id":129487,"depth":107,"text":129488},{"id":129537,"depth":107,"text":129538},{"id":129551,"depth":107,"text":129552},{"id":129604,"depth":107,"text":129605},{"id":129645,"depth":107,"text":129646},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129155,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129711,"title":129712,"body":129713,"description":2546,"extension":2547,"meta":130358,"navigation":2549,"path":130359,"seo":130360,"stem":130361,"__hash__":130362},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129714,"toc":130339},[129715,129718,129722,129726,129784,129788,129798,129801,129804,129808,129833,129837,129840,129843,129846,129849,129852,129856,129859,129862,129904,129907,129933,129939,129942,129946,129950,129956,129959,129962,129965,129968,129971,129974,130019,130023,130026,130029,130033,130037,130066,130069,130074,130077,130080,130083,130086,130090,130094,130097,130099,130102,130106,130109,130113,130116,130119,130122,130126,130130,130136,130146,130149,130152,130155,130158,130161,130284,130292,130300,130336],[10,129716,129712],{"id":129717},"_7-css引入方式与选择器进阶",[14,129719,129721],{"id":129720},"_71-css引入方式","7.1 css引入方式",[19,129723,129725],{"id":129724},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[67,129727,129729],{"className":251,"code":129728,"language":253,"meta":72,"style":72},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[74,129730,129731,129739,129746,129758,129771,129776],{"__ignoreMap":72},[77,129732,129733,129735,129737],{"class":79,"line":80},[77,129734,260],{"class":87},[77,129736,2520],{"class":158},[77,129738,291],{"class":87},[77,129740,129741,129744],{"class":79,"line":91},[77,129742,129743],{"class":158},"  h1",[77,129745,88],{"class":87},[77,129747,129748,129751,129753,129756],{"class":79,"line":107},[77,129749,129750],{"class":94},"    color",[77,129752,98],{"class":87},[77,129754,129755],{"class":94},"blue",[77,129757,104],{"class":87},[77,129759,129760,129763,129765,129767,129769],{"class":79,"line":191},[77,129761,129762],{"class":94},"    font-size",[77,129764,98],{"class":87},[77,129766,3413],{"class":94},[77,129768,2124],{"class":2123},[77,129770,104],{"class":87},[77,129772,129773],{"class":79,"line":1543},[77,129774,129775],{"class":87},"  }\n",[77,129777,129778,129780,129782],{"class":79,"line":1549},[77,129779,351],{"class":87},[77,129781,2520],{"class":158},[77,129783,291],{"class":87},[24,129785,129786,28941],{},[27,129787,129069],{},[24,129789,79664,129790,129793,129794,129797],{},[74,129791,129792],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[74,129795,129796],{},"\u003Chead>","标签中",[24,129799,129800],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[24,129802,129803],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[19,129805,129807],{"id":129806},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[67,129809,129811],{"className":251,"code":129810,"language":253,"meta":72,"style":72},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[74,129812,129813],{"__ignoreMap":72},[77,129814,129815,129817,129819,129821,129823,129826,129829,129831],{"class":79,"line":80},[77,129816,260],{"class":87},[77,129818,24],{"class":158},[77,129820,65070],{"class":83},[77,129822,268],{"class":87},[77,129824,129825],{"class":271},"\"color: red; font-size: 16px;\"",[77,129827,129828],{"class":87},">这是一个段落\u003C\u002F",[77,129830,24],{"class":158},[77,129832,291],{"class":87},[24,129834,129835,28941],{},[27,129836,129069],{},[24,129838,129839],{},"①style其实就是标签的属性",[24,129841,129842],{},"②在双引号中间，写法要符合css规范",[24,129844,129845],{},"③可以控制当前的标签设置样式",[24,129847,129848],{},"④书写繁琐，简单时才用",[24,129850,129851],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[19,129853,129855],{"id":129854},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[24,129857,129858],{},"使用最多，单独建一个css文件，然后html引用",[24,129860,129861],{},"①css文件部分： style.css",[67,129863,129865],{"className":69,"code":129864,"language":71,"meta":72,"style":72},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[74,129866,129867,129872,129878,129888,129900],{"__ignoreMap":72},[77,129868,129869],{"class":79,"line":80},[77,129870,129871],{"class":323},"\u002F* style.css *\u002F\n",[77,129873,129874,129876],{"class":79,"line":91},[77,129875,10],{"class":158},[77,129877,88],{"class":87},[77,129879,129880,129882,129884,129886],{"class":79,"line":107},[77,129881,73344],{"class":94},[77,129883,98],{"class":87},[77,129885,129755],{"class":94},[77,129887,104],{"class":87},[77,129889,129890,129892,129894,129896,129898],{"class":79,"line":191},[77,129891,73068],{"class":94},[77,129893,98],{"class":87},[77,129895,3413],{"class":94},[77,129897,2124],{"class":2123},[77,129899,104],{"class":87},[77,129901,129902],{"class":79,"line":1543},[77,129903,110],{"class":87},[24,129905,129906],{},"②html部分",[67,129908,129910],{"className":251,"code":129909,"language":253,"meta":72,"style":72},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[74,129911,129912],{"__ignoreMap":72},[77,129913,129914,129916,129918,129920,129922,129924,129926,129928,129931],{"class":79,"line":80},[77,129915,260],{"class":87},[77,129917,71448],{"class":158},[77,129919,71451],{"class":83},[77,129921,268],{"class":87},[77,129923,71456],{"class":271},[77,129925,63503],{"class":83},[77,129927,268],{"class":87},[77,129929,129930],{"class":271},"\"style.css\"",[77,129932,291],{"class":87},[24,129934,129935,129938],{},[74,129936,129937],{},"\u003Chr>","水平线标签（但是不常用！）",[24,129940,129941],{},"ctrl+0回到页面原来大小",[14,129943,129945],{"id":129944},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[19,129947,129949],{"id":129948},"_721-快速生成html","7.2.1 快速生成html",[24,129951,129952,129953],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[74,129954,129955],{},"\u003Cdiv>``\u003C\u002Fdiv>",[24,129957,129958],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[24,129960,129961],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[24,129963,129964],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[24,129966,129967],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[24,129969,129970],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[24,129972,129973],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[67,129975,129977],{"className":251,"code":129976,"language":253,"meta":72,"style":72},"\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",[74,129978,129979,129984,129989,129994,129999,130004,130009,130014],{"__ignoreMap":72},[77,129980,129981],{"class":79,"line":80},[77,129982,129983],{"class":323},"\u003C!-- Emmet 语法示例 -->\n",[77,129985,129986],{"class":79,"line":91},[77,129987,129988],{"class":323},"\u003C!-- div*3        → 生成3个div -->\n",[77,129990,129991],{"class":79,"line":107},[77,129992,129993],{"class":323},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[77,129995,129996],{"class":79,"line":191},[77,129997,129998],{"class":323},"\u003C!-- div+p        → 兄弟div和p -->\n",[77,130000,130001],{"class":79,"line":1543},[77,130002,130003],{"class":323},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[77,130005,130006],{"class":79,"line":1549},[77,130007,130008],{"class":323},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[77,130010,130011],{"class":79,"line":1566},[77,130012,130013],{"class":323},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[77,130015,130016],{"class":79,"line":1572},[77,130017,130018],{"class":323},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[19,130020,130022],{"id":130021},"_722-快速生成css","7.2.2 快速生成css",[24,130024,130025],{},"简写开头",[24,130027,130028],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,130030,130032],{"id":130031},"_73-css复合选择器","7.3 css复合选择器",[19,130034,130036],{"id":130035},"_731-后代选择器","7.3.1 后代选择器",[67,130038,130040],{"className":69,"code":130039,"language":71,"meta":72,"style":72},".parent .child {\n  color: blue;\n}\n",[74,130041,130042,130052,130062],{"__ignoreMap":72},[77,130043,130044,130047,130050],{"class":79,"line":80},[77,130045,130046],{"class":83},".parent",[77,130048,130049],{"class":83}," .child",[77,130051,88],{"class":87},[77,130053,130054,130056,130058,130060],{"class":79,"line":91},[77,130055,73344],{"class":94},[77,130057,98],{"class":87},[77,130059,129755],{"class":94},[77,130061,104],{"class":87},[77,130063,130064],{"class":79,"line":107},[77,130065,110],{"class":87},[24,130067,130068],{},"元素1 元素2 {样式声明}",[24,130070,130071],{},[27,130072,130073],{},"注意点:",[24,130075,130076],{},"①元素1和元素2中间用空格隔开",[24,130078,130079],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[24,130081,130082],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[24,130084,130085],{},"④元素1和元素2可以是任意基础选择器",[19,130087,130089],{"id":130088},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[24,130091,130092],{},[27,130093,130073],{},[24,130095,130096],{},"①元素1和元素2中间用大于号隔开",[24,130098,130079],{},[24,130100,130101],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[19,130103,130105],{"id":130104},"_733-并集选择器","7.3.3 并集选择器",[24,130107,130108],{},"元素1，元素2 {样式声明}",[24,130110,130111],{},[27,130112,130073],{},[24,130114,130115],{},"①元素1和元素2中间用逗号隔开",[24,130117,130118],{},"②逗号可以理解为和的意思",[24,130120,130121],{},"③并集选择器通常用于集体声明",[19,130123,130125],{"id":130124},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[24,130127,130128],{},[27,130129,130073],{},[24,130131,130132,130133,130135],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71448,130134],{},"－:visited－:hover－:active。",[24,130137,130138,130139,130142,130143,28208],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130140,130141],"hover",{}," 、 ",[130144,130145],"first-child",{},[24,130147,130148],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[24,130150,130151],{},"link对没访问的进行设置",[24,130153,130154],{},"vistied对已访问的进行改变",[24,130156,130157],{},"hover鼠标经过就会变",[24,130159,130160],{},"active常按(点)就会变",[67,130162,130164],{"className":69,"code":130163,"language":71,"meta":72,"style":72},"\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",[74,130165,130166,130171,130180,130190,130200,130204,130213,130224,130228,130236,130246,130256,130260,130269,130280],{"__ignoreMap":72},[77,130167,130168],{"class":79,"line":80},[77,130169,130170],{"class":323},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[77,130172,130173,130175,130178],{"class":79,"line":91},[77,130174,417],{"class":158},[77,130176,130177],{"class":83},":link",[77,130179,88],{"class":87},[77,130181,130182,130184,130186,130188],{"class":79,"line":107},[77,130183,73344],{"class":94},[77,130185,98],{"class":87},[77,130187,64813],{"class":94},[77,130189,104],{"class":87},[77,130191,130192,130194,130196,130198],{"class":79,"line":191},[77,130193,72944],{"class":94},[77,130195,98],{"class":87},[77,130197,186],{"class":94},[77,130199,104],{"class":87},[77,130201,130202],{"class":79,"line":1543},[77,130203,110],{"class":87},[77,130205,130206,130208,130211],{"class":79,"line":1549},[77,130207,417],{"class":158},[77,130209,130210],{"class":83},":visited",[77,130212,88],{"class":87},[77,130214,130215,130217,130219,130222],{"class":79,"line":1566},[77,130216,73344],{"class":94},[77,130218,98],{"class":87},[77,130220,130221],{"class":94},"purple",[77,130223,104],{"class":87},[77,130225,130226],{"class":79,"line":1572},[77,130227,110],{"class":87},[77,130229,130230,130232,130234],{"class":79,"line":1589},[77,130231,417],{"class":158},[77,130233,63387],{"class":83},[77,130235,88],{"class":87},[77,130237,130238,130240,130242,130244],{"class":79,"line":1595},[77,130239,73344],{"class":94},[77,130241,98],{"class":87},[77,130243,174],{"class":94},[77,130245,104],{"class":87},[77,130247,130248,130250,130252,130254],{"class":79,"line":4088},[77,130249,72944],{"class":94},[77,130251,98],{"class":87},[77,130253,129595],{"class":94},[77,130255,104],{"class":87},[77,130257,130258],{"class":79,"line":4093},[77,130259,110],{"class":87},[77,130261,130262,130264,130267],{"class":79,"line":4099},[77,130263,417],{"class":158},[77,130265,130266],{"class":83},":active",[77,130268,88],{"class":87},[77,130270,130271,130273,130275,130278],{"class":79,"line":4104},[77,130272,73344],{"class":94},[77,130274,98],{"class":87},[77,130276,130277],{"class":94},"green",[77,130279,104],{"class":87},[77,130281,130282],{"class":79,"line":4118},[77,130283,110],{"class":87},[19,130285,130287,130288,130291],{"id":130286},"_735-伪类选择器","7.3.5 ",[130289,130290],"focus",{},"伪类选择器",[24,130293,130294,130296,130297,130299],{},[130289,130295],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[74,130298,129042],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[67,130301,130302],{"className":69,"code":151,"language":71,"meta":72,"style":72},[74,130303,130304,130312,130322,130332],{"__ignoreMap":72},[77,130305,130306,130308,130310],{"class":79,"line":80},[77,130307,159],{"class":158},[77,130309,162],{"class":83},[77,130311,88],{"class":87},[77,130313,130314,130316,130318,130320],{"class":79,"line":91},[77,130315,169],{"class":94},[77,130317,98],{"class":87},[77,130319,174],{"class":94},[77,130321,104],{"class":87},[77,130323,130324,130326,130328,130330],{"class":79,"line":107},[77,130325,181],{"class":94},[77,130327,98],{"class":87},[77,130329,186],{"class":94},[77,130331,104],{"class":87},[77,130333,130334],{"class":79,"line":191},[77,130335,110],{"class":87},[2520,130337,130338],{},"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":72,"searchDepth":91,"depth":91,"links":130340},[130341,130346,130350],{"id":129720,"depth":91,"text":129721,"children":130342},[130343,130344,130345],{"id":129724,"depth":107,"text":129725},{"id":129806,"depth":107,"text":129807},{"id":129854,"depth":107,"text":129855},{"id":129944,"depth":91,"text":129945,"children":130347},[130348,130349],{"id":129948,"depth":107,"text":129949},{"id":130021,"depth":107,"text":130022},{"id":130031,"depth":91,"text":130032,"children":130351},[130352,130353,130354,130355,130356],{"id":130035,"depth":107,"text":130036},{"id":130088,"depth":107,"text":130089},{"id":130104,"depth":107,"text":130105},{"id":130124,"depth":107,"text":130125},{"id":130286,"depth":107,"text":130357},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129712,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130364,"title":130365,"body":130366,"description":2546,"extension":2547,"meta":132285,"navigation":2549,"path":132286,"seo":132287,"stem":132288,"__hash__":132289},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130367,"toc":132259},[130368,130371,130375,130384,130388,130414,130419,130422,130425,130428,130431,130435,130438,130448,130456,130460,130495,130500,130503,130506,130509,130512,130516,130519,130528,130532,130545,130550,130553,130556,130559,130563,130566,130570,130573,130627,130630,130660,130663,130717,130721,130724,130890,131013,131016,131019,131022,131025,131029,131032,131036,131039,131042,131046,131049,131080,131107,131135,131138,131142,131168,131211,131215,131309,131312,131338,131341,131344,131347,131350,131353,131356,131359,131362,131365,131369,131426,131453,131457,131505,131509,131550,131552,131555,131558,131561,131564,131568,131660,131663,131666,131669,131673,131796,131996,132000,132004,132007,132010,132013,132017,132020,132023,132048,132051,132054,132057,132060,132063,132067,132075,132137,132140,132198,132201,132204,132207,132210,132213,132216,132219,132256],[10,130369,130365],{"id":130370},"_8-css显示模式与背景特性",[14,130372,130374],{"id":130373},"_81-css元素显示模式","8.1 css元素显示模式",[24,130376,130377,130378,130380,130381,130383],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[74,130379,128595],{},"自己占一行，比如一行可以放多个",[74,130382,128598],{},"，HTML 元素一般分为块元素和行内元素两种类型",[19,130385,130387],{"id":130386},"_811-块元素","8.1.1 块元素",[24,130389,130390,130391,130393,130394,2828,130397,2828,130399,2828,130401,2828,130404,2828,130407,130410,130411,130413],{},"常见的块元素有",[74,130392,128499],{},"~",[74,130395,130396],{},"\u003Ch6>",[74,130398,128525],{},[74,130400,128595],{},[74,130402,130403],{},"\u003Cul>",[74,130405,130406],{},"\u003Col>",[74,130408,130409],{},"\u003Cli>","等，其中 ",[74,130412,128595],{}," 标签是最典型的块元素",[24,130415,130416],{},[27,130417,130418],{},"块级元素的特点：",[24,130420,130421],{},"① 比较霸道，自己独占一行。",[24,130423,130424],{},"② 高度，宽度、外边距以及内边距都可以控制。",[24,130426,130427],{},"③ 宽度默认是容器（父级宽度）的100%。",[24,130429,130430],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[24,130432,130433],{},[27,130434,2651],{},[24,130436,130437],{},"①文字类的元素内不能使用块级元素",[24,130439,79687,130440,130442,130443,130445,130446],{},[74,130441,128525],{}," 标签主要用于存放文字，因此 ",[74,130444,128525],{}," 里面不能放块级元素，特别是不能放",[74,130447,128595],{},[24,130449,130450,130451,130393,130453,130455],{},"⑥同理， ",[74,130452,128499],{},[74,130454,130396],{},"等都是文字类块级标签，里面也不能放其他块级元素",[19,130457,130459],{"id":130458},"_812-行内元素","8.1.2 行内元素",[24,130461,130462,130463,2828,130465,2828,130468,2828,130471,2828,130474,2828,130477,2828,130480,2828,130483,2828,130486,2828,130489,130491,130492,130494],{},"常见的行内元素有 ",[74,130464,128757],{},[74,130466,130467],{},"\u003Cstrong>",[74,130469,130470],{},"\u003Cb>",[74,130472,130473],{},"\u003Cem>",[74,130475,130476],{},"\u003Ci>",[74,130478,130479],{},"\u003Cdel>",[74,130481,130482],{},"\u003Cs>",[74,130484,130485],{},"\u003Cins>",[74,130487,130488],{},"\u003Cu>",[74,130490,128598],{}," 等，其中 ",[74,130493,128598],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[24,130496,130497],{},[27,130498,130499],{},"特点：",[24,130501,130502],{},"① 相邻行内元素在一行上，一行可以显示多个。",[24,130504,130505],{},"② 高、宽直接设置是无效的。",[24,130507,130508],{},"③ 默认宽度就是它本身内容的宽度。",[24,130510,130511],{},"④ 行内元素只能容纳文本或其他行内元素。",[24,130513,130514],{},[27,130515,2651],{},[24,130517,130518],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[24,130520,130521,130522,130524,130525,130527],{},"②特殊情况链接 ",[74,130523,128757],{}," 里面可以放块级元素，但是给 ",[74,130526,128757],{}," 转换一下块级模式最安全",[19,130529,130531],{"id":130530},"_813-行内块元素","8.1.3 行内块元素",[24,130533,130534,130535,2828,130538,2828,130541,130544],{},"在行内元素中有几个特殊的标签 —— ",[74,130536,130537],{},"\u003Cimg \u002F>",[74,130539,130540],{},"\u003Cinput \u002F>",[74,130542,130543],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[24,130546,130547],{},[27,130548,130549],{},"行内块元素的特点：",[24,130551,130552],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[24,130554,130555],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[24,130557,130558],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[19,130560,130562],{"id":130561},"_814-总结","8.1.4 总结",[40,130564],{"style":42,"src":130565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[19,130567,130569],{"id":130568},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[24,130571,130572],{},"①转换为块元素：display:block;",[67,130574,130576],{"className":69,"code":130575,"language":71,"meta":72,"style":72},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[74,130577,130578,130583,130589,130599,130611,130623],{"__ignoreMap":72},[77,130579,130580],{"class":79,"line":80},[77,130581,130582],{"class":323},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[77,130584,130585,130587],{"class":79,"line":91},[77,130586,417],{"class":158},[77,130588,88],{"class":87},[77,130590,130591,130593,130595,130597],{"class":79,"line":107},[77,130592,451],{"class":94},[77,130594,98],{"class":87},[77,130596,456],{"class":94},[77,130598,104],{"class":87},[77,130600,130601,130603,130605,130607,130609],{"class":79,"line":191},[77,130602,73010],{"class":94},[77,130604,98],{"class":87},[77,130606,2925],{"class":94},[77,130608,2124],{"class":2123},[77,130610,104],{"class":87},[77,130612,130613,130615,130617,130619,130621],{"class":79,"line":1543},[77,130614,73230],{"class":94},[77,130616,98],{"class":87},[77,130618,3015],{"class":94},[77,130620,2124],{"class":2123},[77,130622,104],{"class":87},[77,130624,130625],{"class":79,"line":1549},[77,130626,110],{"class":87},[24,130628,130629],{},"②转换为行内元素：display:inline;",[67,130631,130633],{"className":69,"code":130632,"language":71,"meta":72,"style":72},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[74,130634,130635,130640,130646,130656],{"__ignoreMap":72},[77,130636,130637],{"class":79,"line":80},[77,130638,130639],{"class":323},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[77,130641,130642,130644],{"class":79,"line":91},[77,130643,331],{"class":158},[77,130645,88],{"class":87},[77,130647,130648,130650,130652,130654],{"class":79,"line":107},[77,130649,451],{"class":94},[77,130651,98],{"class":87},[77,130653,707],{"class":94},[77,130655,104],{"class":87},[77,130657,130658],{"class":79,"line":191},[77,130659,110],{"class":87},[24,130661,130662],{},"③转换为行内块：display:inline-block;",[67,130664,130666],{"className":69,"code":130665,"language":71,"meta":72,"style":72},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[74,130667,130668,130673,130679,130689,130701,130713],{"__ignoreMap":72},[77,130669,130670],{"class":79,"line":80},[77,130671,130672],{"class":323},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[77,130674,130675,130677],{"class":79,"line":91},[77,130676,77],{"class":158},[77,130678,88],{"class":87},[77,130680,130681,130683,130685,130687],{"class":79,"line":107},[77,130682,451],{"class":94},[77,130684,98],{"class":87},[77,130686,74822],{"class":94},[77,130688,104],{"class":87},[77,130690,130691,130693,130695,130697,130699],{"class":79,"line":191},[77,130692,73010],{"class":94},[77,130694,98],{"class":87},[77,130696,3225],{"class":94},[77,130698,2124],{"class":2123},[77,130700,104],{"class":87},[77,130702,130703,130705,130707,130709,130711],{"class":79,"line":1543},[77,130704,73230],{"class":94},[77,130706,98],{"class":87},[77,130708,3563],{"class":94},[77,130710,2124],{"class":2123},[77,130712,104],{"class":87},[77,130714,130715],{"class":79,"line":1549},[77,130716,110],{"class":87},[19,130718,130720],{"id":130719},"_816-小米侧边栏","8.1.6 小米侧边栏",[40,130722],{"style":42,"src":130723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[67,130725,130727],{"className":251,"code":130726,"language":253,"meta":72,"style":72},"\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",[74,130728,130729,130734,130749,130768,130787,130806,130825,130844,130863,130882],{"__ignoreMap":72},[77,130730,130731],{"class":79,"line":80},[77,130732,130733],{"class":323},"\u003C!-- 小米侧边栏案例 -->\n",[77,130735,130736,130738,130740,130742,130744,130747],{"class":79,"line":91},[77,130737,260],{"class":87},[77,130739,331],{"class":158},[77,130741,334],{"class":83},[77,130743,268],{"class":87},[77,130745,130746],{"class":271},"\"sidebar\"",[77,130748,291],{"class":87},[77,130750,130751,130753,130755,130757,130759,130761,130764,130766],{"class":79,"line":107},[77,130752,54602],{"class":87},[77,130754,417],{"class":158},[77,130756,63503],{"class":83},[77,130758,268],{"class":87},[77,130760,63508],{"class":271},[77,130762,130763],{"class":87},">手机 电话卡\u003C\u002F",[77,130765,417],{"class":158},[77,130767,291],{"class":87},[77,130769,130770,130772,130774,130776,130778,130780,130783,130785],{"class":79,"line":191},[77,130771,54602],{"class":87},[77,130773,417],{"class":158},[77,130775,63503],{"class":83},[77,130777,268],{"class":87},[77,130779,63508],{"class":271},[77,130781,130782],{"class":87},">电视 盒子\u003C\u002F",[77,130784,417],{"class":158},[77,130786,291],{"class":87},[77,130788,130789,130791,130793,130795,130797,130799,130802,130804],{"class":79,"line":1543},[77,130790,54602],{"class":87},[77,130792,417],{"class":158},[77,130794,63503],{"class":83},[77,130796,268],{"class":87},[77,130798,63508],{"class":271},[77,130800,130801],{"class":87},">笔记本 平板\u003C\u002F",[77,130803,417],{"class":158},[77,130805,291],{"class":87},[77,130807,130808,130810,130812,130814,130816,130818,130821,130823],{"class":79,"line":1549},[77,130809,54602],{"class":87},[77,130811,417],{"class":158},[77,130813,63503],{"class":83},[77,130815,268],{"class":87},[77,130817,63508],{"class":271},[77,130819,130820],{"class":87},">出行 穿戴\u003C\u002F",[77,130822,417],{"class":158},[77,130824,291],{"class":87},[77,130826,130827,130829,130831,130833,130835,130837,130840,130842],{"class":79,"line":1566},[77,130828,54602],{"class":87},[77,130830,417],{"class":158},[77,130832,63503],{"class":83},[77,130834,268],{"class":87},[77,130836,63508],{"class":271},[77,130838,130839],{"class":87},">智能 路由器\u003C\u002F",[77,130841,417],{"class":158},[77,130843,291],{"class":87},[77,130845,130846,130848,130850,130852,130854,130856,130859,130861],{"class":79,"line":1572},[77,130847,54602],{"class":87},[77,130849,417],{"class":158},[77,130851,63503],{"class":83},[77,130853,268],{"class":87},[77,130855,63508],{"class":271},[77,130857,130858],{"class":87},">健康 儿童\u003C\u002F",[77,130860,417],{"class":158},[77,130862,291],{"class":87},[77,130864,130865,130867,130869,130871,130873,130875,130878,130880],{"class":79,"line":1589},[77,130866,54602],{"class":87},[77,130868,417],{"class":158},[77,130870,63503],{"class":83},[77,130872,268],{"class":87},[77,130874,63508],{"class":271},[77,130876,130877],{"class":87},">耳机 音响\u003C\u002F",[77,130879,417],{"class":158},[77,130881,291],{"class":87},[77,130883,130884,130886,130888],{"class":79,"line":1595},[77,130885,351],{"class":87},[77,130887,331],{"class":158},[77,130889,291],{"class":87},[67,130891,130893],{"className":69,"code":130892,"language":71,"meta":72,"style":72},".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",[74,130894,130895,130904,130914,130927,130939,130951,130963,130973,130984,130988,130998,131009],{"__ignoreMap":72},[77,130896,130897,130900,130902],{"class":79,"line":80},[77,130898,130899],{"class":83},".sidebar",[77,130901,3876],{"class":158},[77,130903,88],{"class":87},[77,130905,130906,130908,130910,130912],{"class":79,"line":91},[77,130907,451],{"class":94},[77,130909,98],{"class":87},[77,130911,456],{"class":94},[77,130913,104],{"class":87},[77,130915,130916,130918,130920,130923,130925],{"class":79,"line":107},[77,130917,73010],{"class":94},[77,130919,98],{"class":87},[77,130921,130922],{"class":94},"234",[77,130924,2124],{"class":2123},[77,130926,104],{"class":87},[77,130928,130929,130931,130933,130935,130937],{"class":79,"line":191},[77,130930,73230],{"class":94},[77,130932,98],{"class":87},[77,130934,3065],{"class":94},[77,130936,2124],{"class":2123},[77,130938,104],{"class":87},[77,130940,130941,130943,130945,130947,130949],{"class":79,"line":1543},[77,130942,129665],{"class":94},[77,130944,98],{"class":87},[77,130946,3065],{"class":94},[77,130948,2124],{"class":2123},[77,130950,104],{"class":87},[77,130952,130953,130955,130957,130959,130961],{"class":79,"line":1549},[77,130954,73264],{"class":94},[77,130956,98],{"class":87},[77,130958,3563],{"class":94},[77,130960,2124],{"class":2123},[77,130962,104],{"class":87},[77,130964,130965,130967,130969,130971],{"class":79,"line":1566},[77,130966,73344],{"class":94},[77,130968,98],{"class":87},[77,130970,63290],{"class":94},[77,130972,104],{"class":87},[77,130974,130975,130977,130979,130982],{"class":79,"line":1572},[77,130976,875],{"class":94},[77,130978,98],{"class":87},[77,130980,130981],{"class":94},"#55585a",[77,130983,104],{"class":87},[77,130985,130986],{"class":79,"line":1589},[77,130987,110],{"class":87},[77,130989,130990,130992,130994,130996],{"class":79,"line":1595},[77,130991,130899],{"class":83},[77,130993,3876],{"class":158},[77,130995,63387],{"class":83},[77,130997,88],{"class":87},[77,130999,131000,131002,131004,131007],{"class":79,"line":4088},[77,131001,875],{"class":94},[77,131003,98],{"class":87},[77,131005,131006],{"class":94},"#ff6700",[77,131008,104],{"class":87},[77,131010,131011],{"class":79,"line":4093},[77,131012,110],{"class":87},[40,131014],{"style":42,"src":131015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[24,131017,131018],{},"行高=盒子高度：实现文字的垂直居中",[24,131020,131021],{},"原理讲解：",[40,131023],{"style":42,"src":131024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,131026,131028],{"id":131027},"_82-css背景","8.2 css背景",[24,131030,131031],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[19,131033,131035],{"id":131034},"_821-背景颜色","8.2.1 背景颜色",[24,131037,131038],{},"background-color:颜色值;",[24,131040,131041],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[19,131043,131045],{"id":131044},"_822-背景图片","8.2.2 背景图片",[24,131047,131048],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[67,131050,131052],{"className":69,"code":131051,"language":71,"meta":72,"style":72},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[74,131053,131054,131060,131076],{"__ignoreMap":72},[77,131055,131056,131058],{"class":79,"line":80},[77,131057,331],{"class":158},[77,131059,88],{"class":87},[77,131061,131062,131065,131067,131069,131071,131074],{"class":79,"line":91},[77,131063,131064],{"class":94},"  background-image",[77,131066,98],{"class":87},[77,131068,64171],{"class":94},[77,131070,2622],{"class":87},[77,131072,131073],{"class":7691},"images\u002Fbg.png",[77,131075,5194],{"class":87},[77,131077,131078],{"class":79,"line":107},[77,131079,110],{"class":87},[2755,131081,131082,131091],{},[2758,131083,131084],{},[2761,131085,131086,131089],{},[2764,131087,131088],{"align":101},"参数值",[2764,131090,105129],{"align":101},[2801,131092,131093,131100],{},[2761,131094,131095,131097],{},[2806,131096,186],{"align":101},[2806,131098,131099],{"align":101},"无背景图（默认的）",[2761,131101,131102,131104],{},[2806,131103,64171],{"align":101},[2806,131105,131106],{"align":101},"使用绝对或相对地址指定背景图像",[67,131108,131109],{"className":69,"code":131051,"language":71,"meta":72,"style":72},[74,131110,131111,131117,131131],{"__ignoreMap":72},[77,131112,131113,131115],{"class":79,"line":80},[77,131114,331],{"class":158},[77,131116,88],{"class":87},[77,131118,131119,131121,131123,131125,131127,131129],{"class":79,"line":91},[77,131120,131064],{"class":94},[77,131122,98],{"class":87},[77,131124,64171],{"class":94},[77,131126,2622],{"class":87},[77,131128,131073],{"class":7691},[77,131130,5194],{"class":87},[77,131132,131133],{"class":79,"line":107},[77,131134,110],{"class":87},[24,131136,131137],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[19,131139,131141],{"id":131140},"_823-背景平铺","8.2.3 背景平铺",[67,131143,131145],{"className":69,"code":131144,"language":71,"meta":72,"style":72},"div {\n  background-repeat: no-repeat;\n}\n",[74,131146,131147,131153,131164],{"__ignoreMap":72},[77,131148,131149,131151],{"class":79,"line":80},[77,131150,331],{"class":158},[77,131152,88],{"class":87},[77,131154,131155,131158,131160,131162],{"class":79,"line":91},[77,131156,131157],{"class":94},"  background-repeat",[77,131159,98],{"class":87},[77,131161,64181],{"class":94},[77,131163,104],{"class":87},[77,131165,131166],{"class":79,"line":107},[77,131167,110],{"class":87},[2755,131169,131170,131178],{},[2758,131171,131172],{},[2761,131173,131174,131176],{},[2764,131175,131088],{"align":101},[2764,131177,105129],{"align":101},[2801,131179,131180,131188,131195,131203],{},[2761,131181,131182,131185],{},[2806,131183,131184],{"align":101},"repeat",[2806,131186,131187],{"align":101},"背景图像在纵向和横向上平铺（默认的）",[2761,131189,131190,131192],{},[2806,131191,64181],{"align":101},[2806,131193,131194],{"align":101},"背景图像不平铺",[2761,131196,131197,131200],{},[2806,131198,131199],{"align":101},"repeat-x",[2806,131201,131202],{"align":101},"背景图像在横向上平铺",[2761,131204,131205,131208],{},[2806,131206,131207],{"align":101},"repeat-y",[2806,131209,131210],{"align":101},"背景图像在纵向平铺",[19,131212,131214],{"id":131213},"_824-背景图片位置","8.2.4 背景图片位置",[67,131216,131218],{"className":69,"code":131217,"language":71,"meta":72,"style":72},"\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",[74,131219,131220,131225,131231,131245,131249,131254,131260,131276,131280,131285,131291,131305],{"__ignoreMap":72},[77,131221,131222],{"class":79,"line":80},[77,131223,131224],{"class":323},"\u002F* 方位名词 *\u002F\n",[77,131226,131227,131229],{"class":79,"line":91},[77,131228,331],{"class":158},[77,131230,88],{"class":87},[77,131232,131233,131236,131238,131240,131243],{"class":79,"line":107},[77,131234,131235],{"class":94},"  background-position",[77,131237,98],{"class":87},[77,131239,54052],{"class":94},[77,131241,131242],{"class":94}," top",[77,131244,104],{"class":87},[77,131246,131247],{"class":79,"line":191},[77,131248,110],{"class":87},[77,131250,131251],{"class":79,"line":1543},[77,131252,131253],{"class":323},"\u002F* 精确单位 *\u002F\n",[77,131255,131256,131258],{"class":79,"line":1549},[77,131257,331],{"class":158},[77,131259,88],{"class":87},[77,131261,131262,131264,131266,131268,131270,131272,131274],{"class":79,"line":1566},[77,131263,131235],{"class":94},[77,131265,98],{"class":87},[77,131267,3313],{"class":94},[77,131269,2124],{"class":2123},[77,131271,59952],{"class":94},[77,131273,2124],{"class":2123},[77,131275,104],{"class":87},[77,131277,131278],{"class":79,"line":1572},[77,131279,110],{"class":87},[77,131281,131282],{"class":79,"line":1589},[77,131283,131284],{"class":323},"\u002F* 混合单位 *\u002F\n",[77,131286,131287,131289],{"class":79,"line":1595},[77,131288,331],{"class":158},[77,131290,88],{"class":87},[77,131292,131293,131295,131297,131299,131301,131303],{"class":79,"line":4088},[77,131294,131235],{"class":94},[77,131296,98],{"class":87},[77,131298,3313],{"class":94},[77,131300,2124],{"class":2123},[77,131302,19614],{"class":94},[77,131304,104],{"class":87},[77,131306,131307],{"class":79,"line":4093},[77,131308,110],{"class":87},[24,131310,131311],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2755,131313,131314,131322],{},[2758,131315,131316],{},[2761,131317,131318,131320],{},[2764,131319,131088],{"align":101},[2764,131321,28337],{"align":101},[2801,131323,131324,131331],{},[2761,131325,131326,131328],{},[2806,131327,54426],{"align":101},[2806,131329,131330],{"align":101},"百分数|由浮点数和单位标识符组成的长度值",[2761,131332,131333,131335],{},[2806,131334,1511],{"align":101},[2806,131336,131337],{"align":101},"top|center|bottom|left|center|right 方位名词",[24,131339,131340],{},"其他说明：",[24,131342,131343],{},"①参数是方位名词",[24,131345,131346],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[24,131348,131349],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[24,131351,131352],{},"②参数是精确单位",[24,131354,131355],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[24,131357,131358],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[24,131360,131361],{},"③参数是混合单位",[24,131363,131364],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[19,131366,131368],{"id":131367},"_825-背景图片固定","8.2.5 背景图片固定",[67,131370,131372],{"className":69,"code":131371,"language":71,"meta":72,"style":72},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[74,131373,131374,131379,131385,131397,131401,131406,131412,131422],{"__ignoreMap":72},[77,131375,131376],{"class":79,"line":80},[77,131377,131378],{"class":323},"\u002F* 背景滚动（默认） *\u002F\n",[77,131380,131381,131383],{"class":79,"line":91},[77,131382,331],{"class":158},[77,131384,88],{"class":87},[77,131386,131387,131390,131392,131395],{"class":79,"line":107},[77,131388,131389],{"class":94},"  background-attachment",[77,131391,98],{"class":87},[77,131393,131394],{"class":94},"scroll",[77,131396,104],{"class":87},[77,131398,131399],{"class":79,"line":191},[77,131400,110],{"class":87},[77,131402,131403],{"class":79,"line":1543},[77,131404,131405],{"class":323},"\u002F* 背景固定 *\u002F\n",[77,131407,131408,131410],{"class":79,"line":1549},[77,131409,331],{"class":158},[77,131411,88],{"class":87},[77,131413,131414,131416,131418,131420],{"class":79,"line":1566},[77,131415,131389],{"class":94},[77,131417,98],{"class":87},[77,131419,1584],{"class":94},[77,131421,104],{"class":87},[77,131423,131424],{"class":79,"line":1572},[77,131425,110],{"class":87},[2755,131427,131428,131437],{},[2758,131429,131430],{},[2761,131431,131432,131435],{},[2764,131433,131434],{"align":101},"参数",[2764,131436,105129],{"align":101},[2801,131438,131439,131446],{},[2761,131440,131441,131443],{},[2806,131442,131394],{"align":101},[2806,131444,131445],{"align":101},"背景图像是随对象内容滚动",[2761,131447,131448,131450],{},[2806,131449,1584],{"align":101},[2806,131451,131452],{"align":101},"背景图像固定",[19,131454,131456],{"id":131455},"_826-背景样式合写","8.2.6 背景样式合写",[67,131458,131460],{"className":69,"code":131459,"language":71,"meta":72,"style":72},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[74,131461,131462,131467,131473,131501],{"__ignoreMap":72},[77,131463,131464],{"class":79,"line":80},[77,131465,131466],{"class":323},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[77,131468,131469,131471],{"class":79,"line":91},[77,131470,331],{"class":158},[77,131472,88],{"class":87},[77,131474,131475,131477,131479,131481,131484,131486,131488,131490,131492,131495,131497,131499],{"class":79,"line":107},[77,131476,73053],{"class":94},[77,131478,98],{"class":87},[77,131480,63290],{"class":94},[77,131482,131483],{"class":94}," url",[77,131485,2622],{"class":87},[77,131487,131073],{"class":7691},[77,131489,16186],{"class":87},[77,131491,64181],{"class":94},[77,131493,131494],{"class":94}," fixed",[77,131496,19614],{"class":94},[77,131498,131242],{"class":94},[77,131500,104],{"class":87},[77,131502,131503],{"class":79,"line":191},[77,131504,110],{"class":87},[19,131506,131508],{"id":131507},"_827-背景色半透明","8.2.7 背景色半透明",[67,131510,131512],{"className":69,"code":131511,"language":71,"meta":72,"style":72},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[74,131513,131514,131520,131546],{"__ignoreMap":72},[77,131515,131516,131518],{"class":79,"line":80},[77,131517,331],{"class":158},[77,131519,88],{"class":87},[77,131521,131522,131524,131526,131528,131530,131532,131534,131536,131538,131540,131542,131544],{"class":79,"line":91},[77,131523,73053],{"class":94},[77,131525,98],{"class":87},[77,131527,57560],{"class":94},[77,131529,2622],{"class":87},[77,131531,1939],{"class":94},[77,131533,680],{"class":87},[77,131535,1939],{"class":94},[77,131537,680],{"class":87},[77,131539,1939],{"class":94},[77,131541,680],{"class":87},[77,131543,102957],{"class":94},[77,131545,5194],{"class":87},[77,131547,131548],{"class":79,"line":107},[77,131549,110],{"class":87},[24,131551,101832],{},[24,131553,131554],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[24,131556,131557],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[24,131559,131560],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[24,131562,131563],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[19,131565,131567],{"id":131566},"_828-总结","8.2.8 总结",[2755,131569,131570,131581],{},[2758,131571,131572],{},[2761,131573,131574,131577,131579],{},[2764,131575,131576],{"align":101},"属性",[2764,131578,105129],{"align":101},[2764,131580,2769],{"align":101},[2801,131582,131583,131594,131605,131616,131627,131638,131649],{},[2761,131584,131585,131588,131591],{},[2806,131586,131587],{"align":101},"background-color",[2806,131589,131590],{"align":101},"背景颜色",[2806,131592,131593],{"align":101},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2761,131595,131596,131599,131602],{},[2806,131597,131598],{"align":101},"background-image",[2806,131600,131601],{"align":101},"背景图片",[2806,131603,131604],{"align":101},"url(图片路径)",[2761,131606,131607,131610,131613],{},[2806,131608,131609],{"align":101},"background-repeat",[2806,131611,131612],{"align":101},"是否平铺",[2806,131614,131615],{"align":101},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2761,131617,131618,131621,131624],{},[2806,131619,131620],{"align":101},"background-position",[2806,131622,131623],{"align":101},"背景位置",[2806,131625,131626],{"align":101},"length\u002Fposition 分别是x和y坐标",[2761,131628,131629,131632,131635],{},[2806,131630,131631],{"align":101},"background-attachment",[2806,131633,131634],{"align":101},"背景附着",[2806,131636,131637],{"align":101},"scroll(背景滚动) \u002Ffixed (背景固定)",[2761,131639,131640,131643,131646],{},[2806,131641,131642],{"align":101},"背景简写",[2806,131644,131645],{"align":101},"书写更简单",[2806,131647,131648],{"align":101},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2761,131650,131651,131654,131657],{},[2806,131652,131653],{"align":101},"背景半透明",[2806,131655,131656],{"align":101},"背景颜色半透明",[2806,131658,131659],{"align":101},"background: rgba(0,0,0.3); 后面必须是4个值",[24,131661,131662],{},"颜色渐变：",[40,131664],{"style":42,"src":131665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[40,131667],{"style":42,"src":131668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[19,131670,131672],{"id":131671},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[67,131674,131676],{"className":251,"code":131675,"language":253,"meta":72,"style":72},"\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",[74,131677,131678,131693,131712,131731,131750,131769,131788],{"__ignoreMap":72},[77,131679,131680,131682,131684,131686,131688,131691],{"class":79,"line":80},[77,131681,260],{"class":87},[77,131683,331],{"class":158},[77,131685,334],{"class":83},[77,131687,268],{"class":87},[77,131689,131690],{"class":271},"\"nav\"",[77,131692,291],{"class":87},[77,131694,131695,131697,131699,131701,131703,131705,131708,131710],{"class":79,"line":91},[77,131696,54602],{"class":87},[77,131698,417],{"class":158},[77,131700,63503],{"class":83},[77,131702,268],{"class":87},[77,131704,63508],{"class":271},[77,131706,131707],{"class":87},">五彩导航1\u003C\u002F",[77,131709,417],{"class":158},[77,131711,291],{"class":87},[77,131713,131714,131716,131718,131720,131722,131724,131727,131729],{"class":79,"line":107},[77,131715,54602],{"class":87},[77,131717,417],{"class":158},[77,131719,63503],{"class":83},[77,131721,268],{"class":87},[77,131723,63508],{"class":271},[77,131725,131726],{"class":87},">五彩导航2\u003C\u002F",[77,131728,417],{"class":158},[77,131730,291],{"class":87},[77,131732,131733,131735,131737,131739,131741,131743,131746,131748],{"class":79,"line":191},[77,131734,54602],{"class":87},[77,131736,417],{"class":158},[77,131738,63503],{"class":83},[77,131740,268],{"class":87},[77,131742,63508],{"class":271},[77,131744,131745],{"class":87},">五彩导航3\u003C\u002F",[77,131747,417],{"class":158},[77,131749,291],{"class":87},[77,131751,131752,131754,131756,131758,131760,131762,131765,131767],{"class":79,"line":1543},[77,131753,54602],{"class":87},[77,131755,417],{"class":158},[77,131757,63503],{"class":83},[77,131759,268],{"class":87},[77,131761,63508],{"class":271},[77,131763,131764],{"class":87},">五彩导航4\u003C\u002F",[77,131766,417],{"class":158},[77,131768,291],{"class":87},[77,131770,131771,131773,131775,131777,131779,131781,131784,131786],{"class":79,"line":1549},[77,131772,54602],{"class":87},[77,131774,417],{"class":158},[77,131776,63503],{"class":83},[77,131778,268],{"class":87},[77,131780,63508],{"class":271},[77,131782,131783],{"class":87},">五彩导航5\u003C\u002F",[77,131785,417],{"class":158},[77,131787,291],{"class":87},[77,131789,131790,131792,131794],{"class":79,"line":1566},[77,131791,351],{"class":87},[77,131793,331],{"class":158},[77,131795,291],{"class":87},[67,131797,131799],{"className":69,"code":131798,"language":71,"meta":72,"style":72},".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",[74,131800,131801,131810,131820,131832,131844,131854,131866,131876,131880,131904,131927,131950,131973],{"__ignoreMap":72},[77,131802,131803,131806,131808],{"class":79,"line":80},[77,131804,131805],{"class":83},".nav",[77,131807,3876],{"class":158},[77,131809,88],{"class":87},[77,131811,131812,131814,131816,131818],{"class":79,"line":91},[77,131813,451],{"class":94},[77,131815,98],{"class":87},[77,131817,74822],{"class":94},[77,131819,104],{"class":87},[77,131821,131822,131824,131826,131828,131830],{"class":79,"line":107},[77,131823,73010],{"class":94},[77,131825,98],{"class":87},[77,131827,3430],{"class":94},[77,131829,2124],{"class":2123},[77,131831,104],{"class":87},[77,131833,131834,131836,131838,131840,131842],{"class":79,"line":191},[77,131835,73230],{"class":94},[77,131837,98],{"class":87},[77,131839,3469],{"class":94},[77,131841,2124],{"class":2123},[77,131843,104],{"class":87},[77,131845,131846,131848,131850,131852],{"class":79,"line":1543},[77,131847,72968],{"class":94},[77,131849,98],{"class":87},[77,131851,54052],{"class":94},[77,131853,104],{"class":87},[77,131855,131856,131858,131860,131862,131864],{"class":79,"line":1549},[77,131857,129665],{"class":94},[77,131859,98],{"class":87},[77,131861,3469],{"class":94},[77,131863,2124],{"class":2123},[77,131865,104],{"class":87},[77,131867,131868,131870,131872,131874],{"class":79,"line":1566},[77,131869,73344],{"class":94},[77,131871,98],{"class":87},[77,131873,63290],{"class":94},[77,131875,104],{"class":87},[77,131877,131878],{"class":79,"line":1572},[77,131879,110],{"class":87},[77,131881,131882,131884,131886,131889,131891,131893,131896,131898,131900,131902],{"class":79,"line":1589},[77,131883,131805],{"class":83},[77,131885,3876],{"class":158},[77,131887,131888],{"class":83},":nth-child",[77,131890,2622],{"class":87},[77,131892,2120],{"class":94},[77,131894,131895],{"class":87},") { ",[77,131897,131587],{"class":94},[77,131899,98],{"class":87},[77,131901,131006],{"class":94},[77,131903,1519],{"class":87},[77,131905,131906,131908,131910,131912,131914,131916,131918,131920,131922,131925],{"class":79,"line":1595},[77,131907,131805],{"class":83},[77,131909,3876],{"class":158},[77,131911,131888],{"class":83},[77,131913,2622],{"class":87},[77,131915,2696],{"class":94},[77,131917,131895],{"class":87},[77,131919,131587],{"class":94},[77,131921,98],{"class":87},[77,131923,131924],{"class":94},"#ff0000",[77,131926,1519],{"class":87},[77,131928,131929,131931,131933,131935,131937,131939,131941,131943,131945,131948],{"class":79,"line":4088},[77,131930,131805],{"class":83},[77,131932,3876],{"class":158},[77,131934,131888],{"class":83},[77,131936,2622],{"class":87},[77,131938,2690],{"class":94},[77,131940,131895],{"class":87},[77,131942,131587],{"class":94},[77,131944,98],{"class":87},[77,131946,131947],{"class":94},"#00a4ff",[77,131949,1519],{"class":87},[77,131951,131952,131954,131956,131958,131960,131962,131964,131966,131968,131971],{"class":79,"line":4093},[77,131953,131805],{"class":83},[77,131955,3876],{"class":158},[77,131957,131888],{"class":83},[77,131959,2622],{"class":87},[77,131961,2907],{"class":94},[77,131963,131895],{"class":87},[77,131965,131587],{"class":94},[77,131967,98],{"class":87},[77,131969,131970],{"class":94},"#ff00ff",[77,131972,1519],{"class":87},[77,131974,131975,131977,131979,131981,131983,131985,131987,131989,131991,131994],{"class":79,"line":4099},[77,131976,131805],{"class":83},[77,131978,3876],{"class":158},[77,131980,131888],{"class":83},[77,131982,2622],{"class":87},[77,131984,2933],{"class":94},[77,131986,131895],{"class":87},[77,131988,131587],{"class":94},[77,131990,98],{"class":87},[77,131992,131993],{"class":94},"#00ff00",[77,131995,1519],{"class":87},[14,131997,131999],{"id":131998},"_83-css三大特性","8.3 css三大特性",[19,132001,132003],{"id":132002},"_831-层叠性","8.3.1 层叠性",[24,132005,132006],{},"为了解决样式冲突问题",[24,132008,132009],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[24,132011,132012],{},"   ②样式不冲突，不会层叠",[19,132014,132016],{"id":132015},"_832-继承性","8.3.2 继承性",[24,132018,132019],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[24,132021,132022],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[67,132024,132026],{"className":69,"code":132025,"language":71,"meta":72,"style":72},"p {\n  color: #333;\n}\n",[74,132027,132028,132034,132044],{"__ignoreMap":72},[77,132029,132030,132032],{"class":79,"line":80},[77,132031,24],{"class":158},[77,132033,88],{"class":87},[77,132035,132036,132038,132040,132042],{"class":79,"line":91},[77,132037,73344],{"class":94},[77,132039,98],{"class":87},[77,132041,64813],{"class":94},[77,132043,104],{"class":87},[77,132045,132046],{"class":79,"line":107},[77,132047,110],{"class":87},[40,132049],{"style":42,"src":132050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[24,132052,132053],{},"解释：①行高可以跟单位也可以不跟单位",[24,132055,132056],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[24,132058,132059],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[24,132061,132062],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[19,132064,132066],{"id":132065},"_833-优先级","8.3.3 优先级",[139,132068,132069,132072],{},[54,132070,132071],{},"选择器相同，则执行层叠性",[54,132073,132074],{},"选择器不同，则根据选择器权重执行",[2755,132076,132077,132087],{},[2758,132078,132079],{},[2761,132080,132081,132084],{},[2764,132082,132083],{"align":101},"选择器",[2764,132085,132086],{"align":101},"选择器权重",[2801,132088,132089,132097,132105,132113,132121,132129],{},[2761,132090,132091,132094],{},[2806,132092,132093],{"align":101},"继承 或者*",[2806,132095,132096],{"align":101},"0，0，0，0",[2761,132098,132099,132102],{},[2806,132100,132101],{"align":101},"标签选择器",[2806,132103,132104],{"align":101},"0，0，0，1",[2761,132106,132107,132110],{},[2806,132108,132109],{"align":101},"类选择器，伪类选择器",[2806,132111,132112],{"align":101},"0，0，1，0",[2761,132114,132115,132118],{},[2806,132116,132117],{"align":101},"ID选择器",[2806,132119,132120],{"align":101},"0，1，0，0",[2761,132122,132123,132126],{},[2806,132124,132125],{"align":101},"行内样式",[2806,132127,132128],{"align":101},"1，0，0，0",[2761,132130,132131,132134],{},[2806,132132,132133],{"align":101},"！important",[2806,132135,132136],{"align":101},"无穷大",[24,132138,132139],{},"! important用法：",[67,132141,132143],{"className":69,"code":132142,"language":71,"meta":72,"style":72},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[74,132144,132145,132150,132156,132169,132173,132178,132184,132194],{"__ignoreMap":72},[77,132146,132147],{"class":79,"line":80},[77,132148,132149],{"class":323},"\u002F* !important 拥有最高优先级 *\u002F\n",[77,132151,132152,132154],{"class":79,"line":91},[77,132153,331],{"class":158},[77,132155,88],{"class":87},[77,132157,132158,132160,132162,132164,132167],{"class":79,"line":107},[77,132159,73344],{"class":94},[77,132161,98],{"class":87},[77,132163,54104],{"class":94},[77,132165,132166],{"class":2123}," !important",[77,132168,104],{"class":87},[77,132170,132171],{"class":79,"line":191},[77,132172,110],{"class":87},[77,132174,132175],{"class":79,"line":1543},[77,132176,132177],{"class":323},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[77,132179,132180,132182],{"class":79,"line":1549},[77,132181,331],{"class":158},[77,132183,88],{"class":87},[77,132185,132186,132188,132190,132192],{"class":79,"line":1566},[77,132187,73344],{"class":94},[77,132189,98],{"class":87},[77,132191,59869],{"class":94},[77,132193,104],{"class":87},[77,132195,132196],{"class":79,"line":1572},[77,132197,110],{"class":87},[24,132199,132200],{},"优先级注意点：",[24,132202,132203],{},"①权重是有4组数字组成,但是不会有进位",[24,132205,132206],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[24,132208,132209],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[24,132211,132212],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[24,132214,132215],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[24,132217,132218],{},"⑥复合选择器",[2755,132220,132221,132231],{},[2758,132222,132223],{},[2761,132224,132225,132228],{},[2764,132226,132227],{"align":101},"div ul li",[2764,132229,132230],{"align":101},"0,0,0,3",[2801,132232,132233,132241,132249],{},[2761,132234,132235,132238],{},[2806,132236,132237],{"align":101},".nav ul li",[2806,132239,132240],{"align":101},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2761,132242,132243,132246],{},[2806,132244,132245],{"align":101},"a:hover",[2806,132247,132248],{"align":101},"0,0,1,1",[2761,132250,132251,132254],{},[2806,132252,132253],{"align":101},".nav a",[2806,132255,132248],{"align":101},[2520,132257,132258],{},"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":72,"searchDepth":91,"depth":91,"links":132260},[132261,132269,132280],{"id":130373,"depth":91,"text":130374,"children":132262},[132263,132264,132265,132266,132267,132268],{"id":130386,"depth":107,"text":130387},{"id":130458,"depth":107,"text":130459},{"id":130530,"depth":107,"text":130531},{"id":130561,"depth":107,"text":130562},{"id":130568,"depth":107,"text":130569},{"id":130719,"depth":107,"text":130720},{"id":131027,"depth":91,"text":131028,"children":132270},[132271,132272,132273,132274,132275,132276,132277,132278,132279],{"id":131034,"depth":107,"text":131035},{"id":131044,"depth":107,"text":131045},{"id":131140,"depth":107,"text":131141},{"id":131213,"depth":107,"text":131214},{"id":131367,"depth":107,"text":131368},{"id":131455,"depth":107,"text":131456},{"id":131507,"depth":107,"text":131508},{"id":131566,"depth":107,"text":131567},{"id":131671,"depth":107,"text":131672},{"id":131998,"depth":91,"text":131999,"children":132281},[132282,132283,132284],{"id":132002,"depth":107,"text":132003},{"id":132015,"depth":107,"text":132016},{"id":132065,"depth":107,"text":132066},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130365,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132291,"title":132292,"body":132293,"description":2546,"extension":2547,"meta":133874,"navigation":2549,"path":133875,"seo":133876,"stem":133877,"__hash__":133878},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132294,"toc":133853},[132295,132298,132302,132305,132308,132311,132314,132317,132320,132323,132327,132335,132371,132407,132410,132424,132429,132463,132466,132559,132564,132567,132597,132600,132605,132613,132617,132624,132670,132714,132719,132722,132725,132728,132731,132734,132737,132739,132742,132746,132751,132795,132800,132803,132806,132842,132847,132850,132853,132856,132859,132891,132894,132897,132900,132932,132935,132938,132941,132945,132948,132980,132983,132987,133007,133010,133018,133021,133025,133030,133033,133065,133070,133073,133107,133111,133116,133119,133122,133152,133155,133172,133177,133229,133289,133294,133348,133386,133390,133394,133397,133401,133409,133412,133414,133425,133430,133477,133511,133514,133517,133520,133523,133567,133570,133573,133576,133579,133582,133585,133629,133631,133634,133637,133640,133643,133646,133652,133655,133699,133702,133705,133708,133711,133714,133758,133761,133763,133766,133770,133774,133812,133816,133819,133822,133826,133834,133838,133841,133844,133847,133850],[10,132296,132292],{"id":132297},"_9-css盒模型浮动与切图",[14,132299,132301],{"id":132300},"_91-盒子模型","9.1 盒子模型",[24,132303,132304],{},"利用盒子来设计网页",[24,132306,132307],{},"盒子包含：边框、外边距、内边距、实际内容",[24,132309,132310],{},"网页布局设置：",[24,132312,132313],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[24,132315,132316],{},"②利用css设置好盒子样式，然后摆放到相应位置",[24,132318,132319],{},"③往盒子里装内容",[40,132321],{"style":42,"src":132322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[19,132324,132326],{"id":132325},"_911-边框border","9.1.1 边框（border）",[139,132328,132329,132332],{},[54,132330,132331],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[54,132333,132334],{},"语法",[67,132336,132338],{"className":69,"code":132337,"language":71,"meta":72,"style":72},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[74,132339,132340,132345,132351,132367],{"__ignoreMap":72},[77,132341,132342],{"class":79,"line":80},[77,132343,132344],{"class":323},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[77,132346,132347,132349],{"class":79,"line":91},[77,132348,331],{"class":158},[77,132350,88],{"class":87},[77,132352,132353,132355,132357,132359,132361,132363,132365],{"class":79,"line":107},[77,132354,2115],{"class":94},[77,132356,98],{"class":87},[77,132358,2120],{"class":94},[77,132360,2124],{"class":2123},[77,132362,2127],{"class":94},[77,132364,2130],{"class":94},[77,132366,104],{"class":87},[77,132368,132369],{"class":79,"line":191},[77,132370,110],{"class":87},[2755,132372,132373,132381],{},[2758,132374,132375],{},[2761,132376,132377,132379],{},[2764,132378,131576],{"align":101},[2764,132380,105129],{"align":101},[2801,132382,132383,132391,132399],{},[2761,132384,132385,132388],{},[2806,132386,132387],{"align":101},"border-width",[2806,132389,132390],{"align":101},"定义边框粗细，单位是px",[2761,132392,132393,132396],{},[2806,132394,132395],{"align":101},"border-style",[2806,132397,132398],{"align":101},"边框的样式",[2761,132400,132401,132404],{},[2806,132402,132403],{"align":101},"border-color",[2806,132405,132406],{"align":101},"边框的颜色",[24,132408,132409],{},"边框样式 border-style 可以设置如下值：",[51,132411,132412,132415,132418,132421],{},[54,132413,132414],{},"none：没有边框即忽略所有边框的宽度（默认值）",[54,132416,132417],{},"solid：边框为单实线(最为常用的)",[54,132419,132420],{},"dashed：边框为虚线",[54,132422,132423],{},"dotted：边框为点线",[139,132425,132426],{"start":107},[54,132427,132428],{},"边框的合写分写",[67,132430,132431],{"className":69,"code":132337,"language":71,"meta":72,"style":72},[74,132432,132433,132437,132443,132459],{"__ignoreMap":72},[77,132434,132435],{"class":79,"line":80},[77,132436,132344],{"class":323},[77,132438,132439,132441],{"class":79,"line":91},[77,132440,331],{"class":158},[77,132442,88],{"class":87},[77,132444,132445,132447,132449,132451,132453,132455,132457],{"class":79,"line":107},[77,132446,2115],{"class":94},[77,132448,98],{"class":87},[77,132450,2120],{"class":94},[77,132452,2124],{"class":2123},[77,132454,2127],{"class":94},[77,132456,2130],{"class":94},[77,132458,104],{"class":87},[77,132460,132461],{"class":79,"line":191},[77,132462,110],{"class":87},[24,132464,132465],{},"边框分开写法：",[67,132467,132469],{"className":69,"code":132468,"language":71,"meta":72,"style":72},"\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",[74,132470,132471,132476,132482,132500,132518,132537,132555],{"__ignoreMap":72},[77,132472,132473],{"class":79,"line":80},[77,132474,132475],{"class":323},"\u002F* 边框分开写法 *\u002F\n",[77,132477,132478,132480],{"class":79,"line":91},[77,132479,331],{"class":158},[77,132481,88],{"class":87},[77,132483,132484,132487,132489,132491,132493,132495,132498],{"class":79,"line":107},[77,132485,132486],{"class":94},"  border-top",[77,132488,98],{"class":87},[77,132490,2120],{"class":94},[77,132492,2124],{"class":2123},[77,132494,2127],{"class":94},[77,132496,132497],{"class":94}," #000",[77,132499,104],{"class":87},[77,132501,132502,132505,132507,132509,132511,132513,132516],{"class":79,"line":191},[77,132503,132504],{"class":94},"  border-right",[77,132506,98],{"class":87},[77,132508,2696],{"class":94},[77,132510,2124],{"class":2123},[77,132512,64685],{"class":94},[77,132514,132515],{"class":94}," #333",[77,132517,104],{"class":87},[77,132519,132520,132523,132525,132527,132529,132532,132535],{"class":79,"line":1543},[77,132521,132522],{"class":94},"  border-bottom",[77,132524,98],{"class":87},[77,132526,2690],{"class":94},[77,132528,2124],{"class":2123},[77,132530,132531],{"class":94}," dotted",[77,132533,132534],{"class":94}," #666",[77,132536,104],{"class":87},[77,132538,132539,132542,132544,132546,132548,132550,132553],{"class":79,"line":1549},[77,132540,132541],{"class":94},"  border-left",[77,132543,98],{"class":87},[77,132545,2120],{"class":94},[77,132547,2124],{"class":2123},[77,132549,2127],{"class":94},[77,132551,132552],{"class":94}," #999",[77,132554,104],{"class":87},[77,132556,132557],{"class":79,"line":1566},[77,132558,110],{"class":87},[139,132560,132561],{"start":191},[54,132562,132563],{},"表格的细线边框",[24,132565,132566],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[67,132568,132570],{"className":69,"code":132569,"language":71,"meta":72,"style":72},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[74,132571,132572,132577,132583,132593],{"__ignoreMap":72},[77,132573,132574],{"class":79,"line":80},[77,132575,132576],{"class":323},"\u002F* 表格细线边框合并 *\u002F\n",[77,132578,132579,132581],{"class":79,"line":91},[77,132580,2755],{"class":158},[77,132582,88],{"class":87},[77,132584,132585,132587,132589,132591],{"class":79,"line":107},[77,132586,73020],{"class":94},[77,132588,98],{"class":87},[77,132590,67478],{"class":94},[77,132592,104],{"class":87},[77,132594,132595],{"class":79,"line":191},[77,132596,110],{"class":87},[24,132598,132599],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[139,132601,132602],{"start":1543},[54,132603,132604],{},"解决边框额外增加盒子的实际大小的方法：",[51,132606,132607,132610],{},[54,132608,132609],{},"测量盒子大小的时候,不量边框",[54,132611,132612],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[19,132614,132616],{"id":132615},"_912-内边距","9.1.2 内边距",[139,132618,132619,132622],{},[54,132620,132621],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[54,132623,132334],{},[2755,132625,132626,132636],{},[2758,132627,132628],{},[2761,132629,132630,132633],{},[2764,132631,132632],{"align":101},"值的个数",[2764,132634,132635],{"align":101},"表达意思",[2801,132637,132638,132646,132654,132662],{},[2761,132639,132640,132643],{},[2806,132641,132642],{"align":101},"padding: 5px;",[2806,132644,132645],{"align":101},"1个值，代表上下左右都有5个元素",[2761,132647,132648,132651],{},[2806,132649,132650],{"align":101},"padding: 5px 10px;",[2806,132652,132653],{"align":101},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2761,132655,132656,132659],{},[2806,132657,132658],{"align":101},"padding: 5px 10px 20px;",[2806,132660,132661],{"align":101},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2761,132663,132664,132667],{},[2806,132665,132666],{"align":101},"padding: 5px 10px 20px 30px;",[2806,132668,132669],{"align":101},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2755,132671,132672,132680],{},[2758,132673,132674],{},[2761,132675,132676,132678],{},[2764,132677,131576],{"align":101},[2764,132679,105129],{"align":101},[2801,132681,132682,132690,132698,132706],{},[2761,132683,132684,132687],{},[2806,132685,132686],{"align":101},"padding-left",[2806,132688,132689],{"align":101},"左内边距",[2761,132691,132692,132695],{},[2806,132693,132694],{"align":101},"padding-right",[2806,132696,132697],{"align":101},"右内边距",[2761,132699,132700,132703],{},[2806,132701,132702],{"align":101},"padding-top",[2806,132704,132705],{"align":101},"上内边距",[2761,132707,132708,132711],{},[2806,132709,132710],{"align":101},"padding-bottom",[2806,132712,132713],{"align":101},"下内边距",[139,132715,132716],{"start":107},[54,132717,132718],{},"内边距会影响盒子的实际大小",[24,132720,132721],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[24,132723,132724],{},"①内容和边框有了距离，添加了内边距",[24,132726,132727],{},"②padding影响了盒子实际大小",[24,132729,132730],{},"内边距对盒子大小的影响：",[24,132732,132733],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[24,132735,132736],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[24,132738,97656],{},[24,132740,132741],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[19,132743,132745],{"id":132744},"_913-外边距","9.1.3 外边距",[139,132747,132748],{},[54,132749,132750],{},"控制盒子与盒子之间的距离",[2755,132752,132753,132761],{},[2758,132754,132755],{},[2761,132756,132757,132759],{},[2764,132758,131576],{"align":101},[2764,132760,105129],{"align":101},[2801,132762,132763,132771,132779,132787],{},[2761,132764,132765,132768],{},[2806,132766,132767],{"align":101},"margin-left",[2806,132769,132770],{"align":101},"左外边距",[2761,132772,132773,132776],{},[2806,132774,132775],{"align":101},"margin-right",[2806,132777,132778],{"align":101},"右外边距",[2761,132780,132781,132784],{},[2806,132782,132783],{"align":101},"margin-top",[2806,132785,132786],{"align":101},"上外边距",[2761,132788,132789,132792],{},[2806,132790,132791],{"align":101},"margin-bottom",[2806,132793,132794],{"align":101},"下外边距",[139,132796,132797],{"start":91},[54,132798,132799],{},"外边距可以让块级盒子水平居中的两个条件：",[24,132801,132802],{},"①盒子必须指定了宽度（width）",[24,132804,132805],{},"②盒子左右的外边距都设置为 auto",[67,132807,132809],{"className":69,"code":132808,"language":71,"meta":72,"style":72},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[74,132810,132811,132816,132822,132838],{"__ignoreMap":72},[77,132812,132813],{"class":79,"line":80},[77,132814,132815],{"class":323},"\u002F* margin 复合写法（同上） *\u002F\n",[77,132817,132818,132820],{"class":79,"line":91},[77,132819,84],{"class":83},[77,132821,88],{"class":87},[77,132823,132824,132826,132828,132830,132832,132835],{"class":79,"line":107},[77,132825,1934],{"class":94},[77,132827,98],{"class":87},[77,132829,1939],{"class":94},[77,132831,1942],{"class":94},[77,132833,132834],{"class":87},";  ",[77,132836,132837],{"class":323},"\u002F* 块级盒子水平居中 *\u002F\n",[77,132839,132840],{"class":79,"line":191},[77,132841,110],{"class":87},[139,132843,132844],{"start":107},[54,132845,132846],{},"外边距塌陷问题",[24,132848,132849],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[40,132851],{"style":42,"src":132852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[24,132854,132855],{},"解决方案：",[24,132857,132858],{},"①可以为父亲元素定义上边距",[67,132860,132861],{"className":69,"code":132808,"language":71,"meta":72,"style":72},[74,132862,132863,132867,132873,132887],{"__ignoreMap":72},[77,132864,132865],{"class":79,"line":80},[77,132866,132815],{"class":323},[77,132868,132869,132871],{"class":79,"line":91},[77,132870,84],{"class":83},[77,132872,88],{"class":87},[77,132874,132875,132877,132879,132881,132883,132885],{"class":79,"line":107},[77,132876,1934],{"class":94},[77,132878,98],{"class":87},[77,132880,1939],{"class":94},[77,132882,1942],{"class":94},[77,132884,132834],{"class":87},[77,132886,132837],{"class":323},[77,132888,132889],{"class":79,"line":191},[77,132890,110],{"class":87},[24,132892,132893],{},"②可以为父亲元素定义上内边距",[24,132895,132896],{},"③可以为父亲元素添加overflow:hidden",[40,132898],{"style":42,"src":132899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[67,132901,132902],{"className":69,"code":132808,"language":71,"meta":72,"style":72},[74,132903,132904,132908,132914,132928],{"__ignoreMap":72},[77,132905,132906],{"class":79,"line":80},[77,132907,132815],{"class":323},[77,132909,132910,132912],{"class":79,"line":91},[77,132911,84],{"class":83},[77,132913,88],{"class":87},[77,132915,132916,132918,132920,132922,132924,132926],{"class":79,"line":107},[77,132917,1934],{"class":94},[77,132919,98],{"class":87},[77,132921,1939],{"class":94},[77,132923,1942],{"class":94},[77,132925,132834],{"class":87},[77,132927,132837],{"class":323},[77,132929,132930],{"class":79,"line":191},[77,132931,110],{"class":87},[40,132933],{"style":42,"src":132934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[24,132936,132937],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[24,132939,132940],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[19,132942,132944],{"id":132943},"_914-清除内外边距","9.1.4 清除内外边距",[24,132946,132947],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[67,132949,132950],{"className":69,"code":132808,"language":71,"meta":72,"style":72},[74,132951,132952,132956,132962,132976],{"__ignoreMap":72},[77,132953,132954],{"class":79,"line":80},[77,132955,132815],{"class":323},[77,132957,132958,132960],{"class":79,"line":91},[77,132959,84],{"class":83},[77,132961,88],{"class":87},[77,132963,132964,132966,132968,132970,132972,132974],{"class":79,"line":107},[77,132965,1934],{"class":94},[77,132967,98],{"class":87},[77,132969,1939],{"class":94},[77,132971,1942],{"class":94},[77,132973,132834],{"class":87},[77,132975,132837],{"class":323},[77,132977,132978],{"class":79,"line":191},[77,132979,110],{"class":87},[24,132981,132982],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[19,132984,132986],{"id":132985},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[51,132988,132989,132992,132995,132998,133001,133004],{},[54,132990,132991],{},"文件→打开 ：可以打开我们要测量的图片",[54,132993,132994],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[54,132996,132997],{},"右击标尺，把里面的单位改为像素",[54,132999,133000],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[54,133002,133003],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[54,133005,133006],{},"用选区拖动 可以测量大小",[40,133008],{"style":42,"src":133009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[51,133011,133012,133015],{},[54,133013,133014],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[54,133016,133017],{},"吸管取色工具",[40,133019],{"style":42,"src":133020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[19,133022,133024],{"id":133023},"_916-案例","9.1.6 案例",[139,133026,133027],{},[54,133028,133029],{},"小米商品",[40,133031],{"style":42,"src":133032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[67,133034,133035],{"className":69,"code":132808,"language":71,"meta":72,"style":72},[74,133036,133037,133041,133047,133061],{"__ignoreMap":72},[77,133038,133039],{"class":79,"line":80},[77,133040,132815],{"class":323},[77,133042,133043,133045],{"class":79,"line":91},[77,133044,84],{"class":83},[77,133046,88],{"class":87},[77,133048,133049,133051,133053,133055,133057,133059],{"class":79,"line":107},[77,133050,1934],{"class":94},[77,133052,98],{"class":87},[77,133054,1939],{"class":94},[77,133056,1942],{"class":94},[77,133058,132834],{"class":87},[77,133060,132837],{"class":323},[77,133062,133063],{"class":79,"line":191},[77,133064,110],{"class":87},[139,133066,133067],{"start":91},[54,133068,133069],{},"快报模块",[40,133071],{"style":42,"src":133072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[67,133074,133075],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,133076,133077,133081,133095,133099],{"__ignoreMap":72},[77,133078,133079],{"class":79,"line":80},[77,133080,324],{"class":323},[77,133082,133083,133085,133087,133089,133091,133093],{"class":79,"line":91},[77,133084,260],{"class":87},[77,133086,331],{"class":158},[77,133088,334],{"class":83},[77,133090,268],{"class":87},[77,133092,339],{"class":271},[77,133094,291],{"class":87},[77,133096,133097],{"class":79,"line":107},[77,133098,346],{"class":87},[77,133100,133101,133103,133105],{"class":79,"line":191},[77,133102,351],{"class":87},[77,133104,331],{"class":158},[77,133106,291],{"class":87},[19,133108,133110],{"id":133109},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[139,133112,133113],{},[54,133114,133115],{},"圆角边框",[24,133117,133118],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[40,133120],{"style":42,"src":133121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[67,133123,133124],{"className":69,"code":2102,"language":71,"meta":72,"style":72},[74,133125,133126,133132,133148],{"__ignoreMap":72},[77,133127,133128,133130],{"class":79,"line":80},[77,133129,331],{"class":158},[77,133131,88],{"class":87},[77,133133,133134,133136,133138,133140,133142,133144,133146],{"class":79,"line":91},[77,133135,2115],{"class":94},[77,133137,98],{"class":87},[77,133139,2120],{"class":94},[77,133141,2124],{"class":2123},[77,133143,2127],{"class":94},[77,133145,2130],{"class":94},[77,133147,104],{"class":87},[77,133149,133150],{"class":79,"line":107},[77,133151,110],{"class":87},[24,133153,133154],{},"解释:",[51,133156,133157,133160,133163,133166,133169],{},[54,133158,133159],{},"参数值可以为数值或百分比的形式",[54,133161,133162],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[54,133164,133165],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[54,133167,133168],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[54,133170,133171],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[139,133173,133174],{"start":91},[54,133175,133176],{},"盒子阴影",[67,133178,133180],{"className":69,"code":133179,"language":71,"meta":72,"style":72},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[74,133181,133182,133188,133225],{"__ignoreMap":72},[77,133183,133184,133186],{"class":79,"line":80},[77,133185,331],{"class":158},[77,133187,88],{"class":87},[77,133189,133190,133193,133195,133197,133199,133201,133203,133205,133207,133209,133211,133213,133215,133217,133219,133221,133223],{"class":79,"line":91},[77,133191,133192],{"class":94},"  box-shadow",[77,133194,98],{"class":87},[77,133196,1939],{"class":94},[77,133198,17227],{"class":94},[77,133200,2124],{"class":2123},[77,133202,4513],{"class":94},[77,133204,2124],{"class":2123},[77,133206,81205],{"class":94},[77,133208,2622],{"class":87},[77,133210,1939],{"class":94},[77,133212,680],{"class":87},[77,133214,1939],{"class":94},[77,133216,680],{"class":87},[77,133218,1939],{"class":94},[77,133220,680],{"class":87},[77,133222,88647],{"class":94},[77,133224,5194],{"class":87},[77,133226,133227],{"class":79,"line":107},[77,133228,110],{"class":87},[2755,133230,133231,133239],{},[2758,133232,133233],{},[2761,133234,133235,133237],{},[2764,133236,2769],{"align":101},[2764,133238,29957],{"align":101},[2801,133240,133241,133249,133257,133265,133273,133281],{},[2761,133242,133243,133246],{},[2806,133244,133245],{"align":101},"h-shadow",[2806,133247,133248],{"align":101},"必需,水平阴影的位置,允许负值",[2761,133250,133251,133254],{},[2806,133252,133253],{"align":101},"v-shadow",[2806,133255,133256],{"align":101},"必需,垂直阴影的位置,允许负值",[2761,133258,133259,133262],{},[2806,133260,133261],{"align":101},"blur",[2806,133263,133264],{"align":101},"可选,模糊距离,就是影子的虚实",[2761,133266,133267,133270],{},[2806,133268,133269],{"align":101},"spread",[2806,133271,133272],{"align":101},"可选,阴影尺寸",[2761,133274,133275,133278],{},[2806,133276,133277],{"align":101},"color",[2806,133279,133280],{"align":101},"可选,阴影的颜色",[2761,133282,133283,133286],{},[2806,133284,133285],{"align":101},"inset",[2806,133287,133288],{"align":101},"可选,将外部阴影(outset)改为内部阴影",[139,133290,133291],{"start":107},[54,133292,133293],{},"文字阴影",[67,133295,133297],{"className":69,"code":133296,"language":71,"meta":72,"style":72},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[74,133298,133299,133305,133344],{"__ignoreMap":72},[77,133300,133301,133303],{"class":79,"line":80},[77,133302,24],{"class":158},[77,133304,88],{"class":87},[77,133306,133307,133310,133312,133314,133316,133318,133320,133322,133324,133326,133328,133330,133332,133334,133336,133338,133340,133342],{"class":79,"line":91},[77,133308,133309],{"class":94},"  text-shadow",[77,133311,98],{"class":87},[77,133313,2120],{"class":94},[77,133315,2124],{"class":2123},[77,133317,27586],{"class":94},[77,133319,2124],{"class":2123},[77,133321,17227],{"class":94},[77,133323,2124],{"class":2123},[77,133325,81205],{"class":94},[77,133327,2622],{"class":87},[77,133329,1939],{"class":94},[77,133331,680],{"class":87},[77,133333,1939],{"class":94},[77,133335,680],{"class":87},[77,133337,1939],{"class":94},[77,133339,680],{"class":87},[77,133341,102957],{"class":94},[77,133343,5194],{"class":87},[77,133345,133346],{"class":79,"line":107},[77,133347,110],{"class":87},[2755,133349,133350,133358],{},[2758,133351,133352],{},[2761,133353,133354,133356],{},[2764,133355,2769],{"align":101},[2764,133357,29957],{"align":101},[2801,133359,133360,133366,133373,133380],{},[2761,133361,133362,133364],{},[2806,133363,133245],{"align":101},[2806,133365,133248],{"align":101},[2761,133367,133368,133370],{},[2806,133369,133253],{"align":101},[2806,133371,133372],{"align":101},"必需,垂直阴影位置,允许负值",[2761,133374,133375,133377],{},[2806,133376,133261],{"align":101},[2806,133378,133379],{"align":101},"可选,模糊的距离",[2761,133381,133382,133384],{},[2806,133383,133277],{"align":101},[2806,133385,133280],{"align":101},[14,133387,133389],{"id":133388},"_92-浮动","9.2 浮动",[19,133391,133393],{"id":133392},"_921-浮动介绍","9.2.1 浮动介绍",[24,133395,133396],{},"在16.2中详细介绍",[19,133398,133400],{"id":133399},"_922-清除浮动","9.2.2 清除浮动",[139,133402,133403,133406],{},[54,133404,133405],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[54,133407,133408],{},"清除浮动的本质",[24,133410,133411],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[24,133413,1988],{},[51,133415,133416,133419,133422],{},[54,133417,133418],{},"如果父盒子本身有高度，则不需要清除浮动",[54,133420,133421],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[54,133423,133424],{},"父级有了高度，就不会影响下面的标准流了",[139,133426,133427],{"start":107},[54,133428,133429],{},"清除浮动样式",[67,133431,133433],{"className":69,"code":133432,"language":71,"meta":72,"style":72},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[74,133434,133435,133442,133452,133456,133463,133473],{"__ignoreMap":72},[77,133436,133437,133440],{"class":79,"line":80},[77,133438,133439],{"class":83},".left",[77,133441,88],{"class":87},[77,133443,133444,133446,133448,133450],{"class":79,"line":91},[77,133445,95],{"class":94},[77,133447,98],{"class":87},[77,133449,101],{"class":94},[77,133451,104],{"class":87},[77,133453,133454],{"class":79,"line":107},[77,133455,110],{"class":87},[77,133457,133458,133461],{"class":79,"line":191},[77,133459,133460],{"class":83},".right",[77,133462,88],{"class":87},[77,133464,133465,133467,133469,133471],{"class":79,"line":1543},[77,133466,95],{"class":94},[77,133468,98],{"class":87},[77,133470,74961],{"class":94},[77,133472,104],{"class":87},[77,133474,133475],{"class":79,"line":1549},[77,133476,110],{"class":87},[2755,133478,133479,133487],{},[2758,133480,133481],{},[2761,133482,133483,133485],{},[2764,133484,129445],{"align":101},[2764,133486,29957],{"align":101},[2801,133488,133489,133496,133503],{},[2761,133490,133491,133493],{},[2806,133492,101],{"align":101},[2806,133494,133495],{"align":101},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2761,133497,133498,133500],{},[2806,133499,74961],{"align":101},[2806,133501,133502],{"align":101},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2761,133504,133505,133508],{},[2806,133506,133507],{"align":101},"both",[2806,133509,133510],{"align":101},"同时清除左右侧浮动的影响",[24,133512,133513],{},"法一",[24,133515,133516],{},"额外标签法也称为隔墙法",[24,133518,133519],{},"使用方式：",[24,133521,133522],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[67,133524,133525],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,133526,133527,133533,133543,133547,133553,133563],{"__ignoreMap":72},[77,133528,133529,133531],{"class":79,"line":80},[77,133530,133439],{"class":83},[77,133532,88],{"class":87},[77,133534,133535,133537,133539,133541],{"class":79,"line":91},[77,133536,95],{"class":94},[77,133538,98],{"class":87},[77,133540,101],{"class":94},[77,133542,104],{"class":87},[77,133544,133545],{"class":79,"line":107},[77,133546,110],{"class":87},[77,133548,133549,133551],{"class":79,"line":191},[77,133550,133460],{"class":83},[77,133552,88],{"class":87},[77,133554,133555,133557,133559,133561],{"class":79,"line":1543},[77,133556,95],{"class":94},[77,133558,98],{"class":87},[77,133560,74961],{"class":94},[77,133562,104],{"class":87},[77,133564,133565],{"class":79,"line":1549},[77,133566,110],{"class":87},[24,133568,133569],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[24,133571,133572],{},"优点： 通俗易懂，书写方便",[24,133574,133575],{},"缺点： 添加许多无意义的标签，结构化较差",[24,133577,133578],{},"注意： 要求这个新的空标签必须是块级元素。",[24,133580,133581],{},"法二",[24,133583,133584],{},"父级添加overflow属性",[67,133586,133587],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,133588,133589,133595,133605,133609,133615,133625],{"__ignoreMap":72},[77,133590,133591,133593],{"class":79,"line":80},[77,133592,133439],{"class":83},[77,133594,88],{"class":87},[77,133596,133597,133599,133601,133603],{"class":79,"line":91},[77,133598,95],{"class":94},[77,133600,98],{"class":87},[77,133602,101],{"class":94},[77,133604,104],{"class":87},[77,133606,133607],{"class":79,"line":107},[77,133608,110],{"class":87},[77,133610,133611,133613],{"class":79,"line":191},[77,133612,133460],{"class":83},[77,133614,88],{"class":87},[77,133616,133617,133619,133621,133623],{"class":79,"line":1543},[77,133618,95],{"class":94},[77,133620,98],{"class":87},[77,133622,74961],{"class":94},[77,133624,104],{"class":87},[77,133626,133627],{"class":79,"line":1549},[77,133628,110],{"class":87},[24,133630,525],{},[24,133632,133633],{},"优点：代码简洁",[24,133635,133636],{},"缺点：无法显示溢出的部分",[24,133638,133639],{},"注意：是给父元素添加代码",[24,133641,133642],{},"法三",[24,133644,133645],{},"父级添加after伪元素",[24,133647,133648,133651],{},[133649,133650],"after",{}," 方式是额外标签法的升级版",[24,133653,133654],{},"使用的时候复制就可以",[67,133656,133657],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,133658,133659,133665,133675,133679,133685,133695],{"__ignoreMap":72},[77,133660,133661,133663],{"class":79,"line":80},[77,133662,133439],{"class":83},[77,133664,88],{"class":87},[77,133666,133667,133669,133671,133673],{"class":79,"line":91},[77,133668,95],{"class":94},[77,133670,98],{"class":87},[77,133672,101],{"class":94},[77,133674,104],{"class":87},[77,133676,133677],{"class":79,"line":107},[77,133678,110],{"class":87},[77,133680,133681,133683],{"class":79,"line":191},[77,133682,133460],{"class":83},[77,133684,88],{"class":87},[77,133686,133687,133689,133691,133693],{"class":79,"line":1543},[77,133688,95],{"class":94},[77,133690,98],{"class":87},[77,133692,74961],{"class":94},[77,133694,104],{"class":87},[77,133696,133697],{"class":79,"line":1549},[77,133698,110],{"class":87},[24,133700,133701],{},"优点：没有增加标签，结构更简单",[24,133703,133704],{},"缺点：照顾低版本浏览器",[24,133706,133707],{},"代表网站： 百度、淘宝网、网易等",[24,133709,133710],{},"法四",[24,133712,133713],{},"父级添加双伪元素",[67,133715,133716],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,133717,133718,133724,133734,133738,133744,133754],{"__ignoreMap":72},[77,133719,133720,133722],{"class":79,"line":80},[77,133721,133439],{"class":83},[77,133723,88],{"class":87},[77,133725,133726,133728,133730,133732],{"class":79,"line":91},[77,133727,95],{"class":94},[77,133729,98],{"class":87},[77,133731,101],{"class":94},[77,133733,104],{"class":87},[77,133735,133736],{"class":79,"line":107},[77,133737,110],{"class":87},[77,133739,133740,133742],{"class":79,"line":191},[77,133741,133460],{"class":83},[77,133743,88],{"class":87},[77,133745,133746,133748,133750,133752],{"class":79,"line":1543},[77,133747,95],{"class":94},[77,133749,98],{"class":87},[77,133751,74961],{"class":94},[77,133753,104],{"class":87},[77,133755,133756],{"class":79,"line":1549},[77,133757,110],{"class":87},[24,133759,133760],{},"优点：代码更简洁",[24,133762,133704],{},[24,133764,133765],{},"代表网站：小米、腾讯等",[14,133767,133769],{"id":133768},"_93-ps切图","9.3 PS切图",[19,133771,133773],{"id":133772},"_931-常见图片格式","9.3.1 常见图片格式",[2755,133775,133776,133786],{},[2758,133777,133778],{},[2761,133779,133780,133783],{},[2764,133781,133782],{"align":101},"jpg图像格式",[2764,133784,133785],{"align":101},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2801,133787,133788,133796,133804],{},[2761,133789,133790,133793],{},[2806,133791,133792],{"align":101},"gif图像格式",[2806,133794,133795],{"align":101},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2761,133797,133798,133801],{},[2806,133799,133800],{"align":101},"png图像格式",[2806,133802,133803],{"align":101},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2761,133805,133806,133809],{},[2806,133807,133808],{"align":101},"PSD图像格式",[2806,133810,133811],{"align":101},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[19,133813,133815],{"id":133814},"_932-图层切图","9.3.2 图层切图",[24,133817,133818],{},"最简单的切图方式：右击图层 → 导出 → 切片",[24,133820,133821],{},"按住shift选中两个图层->图层菜单->合并图层",[19,133823,133825],{"id":133824},"_933-切片切图","9.3.3 切片切图",[51,133827,133828,133831],{},[54,133829,133830],{},"利用切片工具手动划出",[54,133832,133833],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[19,133835,133837],{"id":133836},"_934-切图步骤","9.3.4 切图步骤",[24,133839,133840],{},"用切片工具选中：",[40,133842],{"style":42,"src":133843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[24,133845,133846],{},"文件 -> 导出",[40,133848],{"style":42,"src":133849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2520,133851,133852],{},"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":72,"searchDepth":91,"depth":91,"links":133854},[133855,133864,133868],{"id":132300,"depth":91,"text":132301,"children":133856},[133857,133858,133859,133860,133861,133862,133863],{"id":132325,"depth":107,"text":132326},{"id":132615,"depth":107,"text":132616},{"id":132744,"depth":107,"text":132745},{"id":132943,"depth":107,"text":132944},{"id":132985,"depth":107,"text":132986},{"id":133023,"depth":107,"text":133024},{"id":133109,"depth":107,"text":133110},{"id":133388,"depth":91,"text":133389,"children":133865},[133866,133867],{"id":133392,"depth":107,"text":133393},{"id":133399,"depth":107,"text":133400},{"id":133768,"depth":91,"text":133769,"children":133869},[133870,133871,133872,133873],{"id":133772,"depth":107,"text":133773},{"id":133814,"depth":107,"text":133815},{"id":133824,"depth":107,"text":133825},{"id":133836,"depth":107,"text":133837},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132292,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133880,"title":133881,"body":133882,"description":2546,"extension":2547,"meta":134509,"navigation":2549,"path":134510,"seo":134511,"stem":134512,"__hash__":134513},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133883,"toc":134497},[133884,133887,133891,133917,133951,133955,133959,133962,134003,134010,134020,134028,134030,134033,134036,134039,134046,134060,134064,134067,134096,134100,134103,134117,134121,134124,134152,134156,134159,134185,134189,134194,134227,134232,134260,134264,134281,134327,134332,134376,134393,134487,134495],[10,133885,133881],{"id":133886},"_10-css规范与学成在线案例",[14,133888,133890],{"id":133889},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[139,133892,133893,133899,133905,133911],{},[54,133894,133895,133898],{},[27,133896,133897],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[54,133900,133901,133904],{},[27,133902,133903],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[54,133906,133907,133910],{},[27,133908,133909],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[54,133912,133913,133916],{},[27,133914,133915],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[67,133918,133919],{"className":69,"code":132337,"language":71,"meta":72,"style":72},[74,133920,133921,133925,133931,133947],{"__ignoreMap":72},[77,133922,133923],{"class":79,"line":80},[77,133924,132344],{"class":323},[77,133926,133927,133929],{"class":79,"line":91},[77,133928,331],{"class":158},[77,133930,88],{"class":87},[77,133932,133933,133935,133937,133939,133941,133943,133945],{"class":79,"line":107},[77,133934,2115],{"class":94},[77,133936,98],{"class":87},[77,133938,2120],{"class":94},[77,133940,2124],{"class":2123},[77,133942,2127],{"class":94},[77,133944,2130],{"class":94},[77,133946,104],{"class":87},[77,133948,133949],{"class":79,"line":191},[77,133950,110],{"class":87},[14,133952,133954],{"id":133953},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[19,133956,133958],{"id":133957},"_1021-header头部制作","10.2.1 header头部制作",[40,133960],{"style":42,"src":133961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[51,133963,133964,133970,133977,133983,133990,133997],{},[54,133965,133966,133967,133969],{},"1号是版心盒子 ",[27,133968,1476],{}," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[54,133971,133972,133973,133976],{},"版心盒子 里面包含 2号盒子 ",[27,133974,133975],{},"logo"," 图标",[54,133978,133979,133980,133982],{},"版心盒子 里面包含 3号盒子 ",[27,133981,1479],{}," 导航栏",[54,133984,133985,133986,133989],{},"版心盒子 里面包含 4号盒子 ",[27,133987,133988],{},"search"," 搜索框",[54,133991,133992,133993,133996],{},"版心盒子 里面包含 5号盒子 ",[27,133994,133995],{},"user"," 个人信息",[54,133998,133999,134000],{},"注意，要求里面的 ",[27,134001,134002],{},"4个子盒子 必须都浮动",[139,134004,134005],{},[54,134006,134007],{},[27,134008,134009],{},"导航栏注意点:",[24,134011,134012,134013,134016,134017],{},"实际开发中， ",[27,134014,134015],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[27,134018,134019],{},"用 li 包含链接(li+a)的做法",[51,134021,134022,134025],{},[54,134023,134024],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[54,134026,134027],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[24,134029,1988],{},[24,134031,134032],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[24,134034,134035],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[24,134037,134038],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[139,134040,134041],{"start":91},[54,134042,134043],{},[27,134044,134045],{},"4号盒子search的细节：",[51,134047,134048,134051,134054],{},[54,134049,134050],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[54,134052,134053],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[54,134055,134056,134059],{},[74,134057,134058],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[19,134061,134063],{"id":134062},"_1022-banner制作","10.2.2 banner制作",[40,134065],{"style":42,"src":134066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[51,134068,134069,134076,134082,134089],{},[54,134070,134071,134072,134075],{},"1号盒子是通栏的大盒子 ",[27,134073,134074],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[54,134077,134078,134079,134081],{},"2号盒子是版心 ",[27,134080,3408],{}," ， 要水平居中对齐",[54,134083,134084,134085,134088],{},"3号盒子版心内，左对齐 ",[27,134086,134087],{},"subnav"," 侧导航栏",[54,134090,134091,134092,134095],{},"4号盒子版心内，右对齐 ",[27,134093,134094],{},"course"," 课程",[19,134097,134099],{"id":134098},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[40,134101],{"style":42,"src":134102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[51,134104,134105,134108,134111,134114],{},[54,134106,134107],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[54,134109,134110],{},"1号盒子是标题 H3 左侧浮动",[54,134112,134113],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[54,134115,134116],{},"3号盒子 右浮动 mod 修改",[19,134118,134120],{"id":134119},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[40,134122],{"style":42,"src":134123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[51,134125,134126,134132,134139,134146,134149],{},[54,134127,134128,134129,134131],{},"1号盒子为最大的盒子 ",[27,134130,56170],{}," 版心水平居中对齐",[54,134133,134134,134135,134138],{},"2号盒子为上面部分 ",[27,134136,134137],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[54,134140,134141,134142,134145],{},"3号盒子为底下部分 ",[27,134143,134144],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[54,134147,134148],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[54,134150,134151],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[19,134153,134155],{"id":134154},"_1025-底部模块制作","10.2.5 底部模块制作",[40,134157],{"style":42,"src":134158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[51,134160,134161,134168,134171,134178],{},[54,134162,134163,134164,134167],{},"1号盒子通栏大盒子 底部 ",[27,134165,134166],{},"footer"," 给高度 底色是白色",[54,134169,134170],{},"2号盒子版心水平居中",[54,134172,134173,134174,134177],{},"3号盒子版权 ",[27,134175,134176],{},"copyright"," 左对齐",[54,134179,134180,134181,134184],{},"4号盒子 链接组 ",[27,134182,134183],{},"links"," 右对齐",[19,134186,134188],{"id":134187},"_1026-代码模块","10.2.6 代码模块",[139,134190,134191],{},[54,134192,134193],{},"html部分",[67,134195,134197],{"className":251,"code":134196,"language":253,"meta":72,"style":72},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[74,134198,134199],{"__ignoreMap":72},[77,134200,134201,134203,134205,134207,134209,134212,134215,134217,134220,134223,134225],{"class":79,"line":80},[77,134202,260],{"class":87},[77,134204,417],{"class":158},[77,134206,63503],{"class":83},[77,134208,268],{"class":87},[77,134210,134211],{"class":271},"\"https:\u002F\u002Fexample.com\"",[77,134213,134214],{"class":83}," target",[77,134216,268],{"class":87},[77,134218,134219],{"class":271},"\"_blank\"",[77,134221,134222],{"class":87},">链接文字\u003C\u002F",[77,134224,417],{"class":158},[77,134226,291],{"class":87},[139,134228,134229],{"start":91},[54,134230,134231],{},"css部分",[67,134233,134234],{"className":251,"code":134196,"language":253,"meta":72,"style":72},[74,134235,134236],{"__ignoreMap":72},[77,134237,134238,134240,134242,134244,134246,134248,134250,134252,134254,134256,134258],{"class":79,"line":80},[77,134239,260],{"class":87},[77,134241,417],{"class":158},[77,134243,63503],{"class":83},[77,134245,268],{"class":87},[77,134247,134211],{"class":271},[77,134249,134214],{"class":83},[77,134251,268],{"class":87},[77,134253,134219],{"class":271},[77,134255,134222],{"class":87},[77,134257,417],{"class":158},[77,134259,291],{"class":87},[19,134261,134263],{"id":134262},"_1027-收获","10.2.7 收获",[139,134265,134266,134269,134272,134275,134278],{},[54,134267,134268],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[54,134270,134271],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[54,134273,134274],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[54,134276,134277],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[54,134279,134280],{},"遗忘代码",[67,134282,134284],{"className":69,"code":134283,"language":71,"meta":72,"style":72},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[74,134285,134286,134308,134313,134323],{"__ignoreMap":72},[77,134287,134288,134290,134292,134294,134296,134298,134300,134302,134304,134306],{"class":79,"line":80},[77,134289,331],{"class":158},[77,134291,680],{"class":87},[77,134293,24],{"class":158},[77,134295,680],{"class":87},[77,134297,10],{"class":158},[77,134299,680],{"class":87},[77,134301,51],{"class":158},[77,134303,680],{"class":87},[77,134305,54],{"class":158},[77,134307,88],{"class":87},[77,134309,134310],{"class":79,"line":91},[77,134311,134312],{"class":323},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[77,134314,134315,134317,134319,134321],{"class":79,"line":107},[77,134316,451],{"class":94},[77,134318,98],{"class":87},[77,134320,456],{"class":94},[77,134322,104],{"class":87},[77,134324,134325],{"class":79,"line":191},[77,134326,110],{"class":87},[139,134328,134329],{"start":1549},[54,134330,134331],{},"html引css的程序",[67,134333,134334],{"className":69,"code":134283,"language":71,"meta":72,"style":72},[74,134335,134336,134358,134362,134372],{"__ignoreMap":72},[77,134337,134338,134340,134342,134344,134346,134348,134350,134352,134354,134356],{"class":79,"line":80},[77,134339,331],{"class":158},[77,134341,680],{"class":87},[77,134343,24],{"class":158},[77,134345,680],{"class":87},[77,134347,10],{"class":158},[77,134349,680],{"class":87},[77,134351,51],{"class":158},[77,134353,680],{"class":87},[77,134355,54],{"class":158},[77,134357,88],{"class":87},[77,134359,134360],{"class":79,"line":91},[77,134361,134312],{"class":323},[77,134363,134364,134366,134368,134370],{"class":79,"line":107},[77,134365,451],{"class":94},[77,134367,98],{"class":87},[77,134369,456],{"class":94},[77,134371,104],{"class":87},[77,134373,134374],{"class":79,"line":191},[77,134375,110],{"class":87},[139,134377,134378,134381,134384,134387,134390],{"start":1566},[54,134379,134380],{},"浮动的盒子不会有外边距合并问题",[54,134382,134383],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[54,134385,134386],{},"ctrl+g快速定位行；shift+alt多个光标",[54,134388,134389],{},"学习上方各个模块的选择器起名方法，以后就这样用",[54,134391,134392],{},"在写选择器时尽量写全一些，例如",[67,134394,134395],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,134396,134397,134401,134415,134419,134433,134437,134451,134455,134469,134473],{"__ignoreMap":72},[77,134398,134399],{"class":79,"line":80},[77,134400,1500],{"class":323},[77,134402,134403,134405,134407,134409,134411,134413],{"class":79,"line":91},[77,134404,1505],{"class":83},[77,134406,1508],{"class":87},[77,134408,1511],{"class":94},[77,134410,98],{"class":87},[77,134412,1516],{"class":94},[77,134414,1519],{"class":87},[77,134416,134417],{"class":79,"line":107},[77,134418,1524],{"class":323},[77,134420,134421,134423,134425,134427,134429,134431],{"class":79,"line":191},[77,134422,1529],{"class":83},[77,134424,1508],{"class":87},[77,134426,1511],{"class":94},[77,134428,98],{"class":87},[77,134430,1538],{"class":94},[77,134432,1519],{"class":87},[77,134434,134435],{"class":79,"line":1543},[77,134436,1546],{"class":323},[77,134438,134439,134441,134443,134445,134447,134449],{"class":79,"line":1549},[77,134440,1552],{"class":83},[77,134442,1508],{"class":87},[77,134444,1511],{"class":94},[77,134446,98],{"class":87},[77,134448,1561],{"class":94},[77,134450,1519],{"class":87},[77,134452,134453],{"class":79,"line":1566},[77,134454,1569],{"class":323},[77,134456,134457,134459,134461,134463,134465,134467],{"class":79,"line":1572},[77,134458,1575],{"class":83},[77,134460,1508],{"class":87},[77,134462,1511],{"class":94},[77,134464,98],{"class":87},[77,134466,1584],{"class":94},[77,134468,1519],{"class":87},[77,134470,134471],{"class":79,"line":1589},[77,134472,1592],{"class":323},[77,134474,134475,134477,134479,134481,134483,134485],{"class":79,"line":1595},[77,134476,1598],{"class":83},[77,134478,1508],{"class":87},[77,134480,1511],{"class":94},[77,134482,98],{"class":87},[77,134484,1607],{"class":94},[77,134486,1519],{"class":87},[139,134488,134489,134492],{"start":4093},[54,134490,134491],{},"一定要用好注释",[54,134493,134494],{},"浮动的盒子不会有外边距合并的问题",[2520,134496,133852],{},{"title":72,"searchDepth":91,"depth":91,"links":134498},[134499,134500],{"id":133889,"depth":91,"text":133890},{"id":133953,"depth":91,"text":133954,"children":134501},[134502,134503,134504,134505,134506,134507,134508],{"id":133957,"depth":107,"text":133958},{"id":134062,"depth":107,"text":134063},{"id":134098,"depth":107,"text":134099},{"id":134119,"depth":107,"text":134120},{"id":134154,"depth":107,"text":134155},{"id":134187,"depth":107,"text":134188},{"id":134262,"depth":107,"text":134263},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133881,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134515,"title":134516,"body":134517,"description":2546,"extension":2547,"meta":136003,"navigation":2549,"path":136004,"seo":136005,"stem":136006,"__hash__":136007},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134518,"toc":135995},[134519,134522,134526,134530,134541,134545,134562,134606,134639,134642,134659,134662,134665,134709,134713,134717,134720,134723,134727,134730,134741,134804,134845,134848,134863,134917,134925,134928,134939,134993,135019,135022,135035,135089,135121,135175,135198,135252,135255,135258,135265,135319,135340,135394,135397,135400,135485,135493,135550,135573,135577,135580,135598,135602,135621,135675,135713,135717,135720,135723,135745,135749,135757,135760,135765,135776,135779,135783,135797,135841,135844,135848,135851,135856,135882,135887,135964,135967,135971,135974,135977,135980,135983,135986,135989,135992],[10,134520,134516],{"id":134521},"_11-传统布局与定位体系",[14,134523,134525],{"id":134524},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[19,134527,134529],{"id":134528},"_1111-普通流标准流","11.1.1 普通流（标准流）",[51,134531,134532,134535,134538],{},[54,134533,134534],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[54,134536,134537],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[54,134539,134540],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[19,134542,134544],{"id":134543},"_1112-浮动","11.1.2 浮动",[51,134546,134547,134550,134553,134556,134559],{},[54,134548,134549],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[54,134551,134552],{},"浮动可以改变元素标签默认的排列方式",[54,134554,134555],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[54,134557,134558],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[54,134560,134561],{},"在使用行内块转换时盒子之间是有空隙的",[67,134563,134564],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,134565,134566,134572,134582,134586,134592,134602],{"__ignoreMap":72},[77,134567,134568,134570],{"class":79,"line":80},[77,134569,133439],{"class":83},[77,134571,88],{"class":87},[77,134573,134574,134576,134578,134580],{"class":79,"line":91},[77,134575,95],{"class":94},[77,134577,98],{"class":87},[77,134579,101],{"class":94},[77,134581,104],{"class":87},[77,134583,134584],{"class":79,"line":107},[77,134585,110],{"class":87},[77,134587,134588,134590],{"class":79,"line":191},[77,134589,133460],{"class":83},[77,134591,88],{"class":87},[77,134593,134594,134596,134598,134600],{"class":79,"line":1543},[77,134595,95],{"class":94},[77,134597,98],{"class":87},[77,134599,74961],{"class":94},[77,134601,104],{"class":87},[77,134603,134604],{"class":79,"line":1549},[77,134605,110],{"class":87},[2755,134607,134608,134616],{},[2758,134609,134610],{},[2761,134611,134612,134614],{},[2764,134613,129445],{"align":101},[2764,134615,29957],{"align":101},[2801,134617,134618,134625,134632],{},[2761,134619,134620,134622],{},[2806,134621,186],{"align":101},[2806,134623,134624],{"align":101},"元素不浮动（默认值）",[2761,134626,134627,134629],{},[2806,134628,101],{"align":101},[2806,134630,134631],{"align":101},"元素向左浮动",[2761,134633,134634,134636],{},[2806,134635,74961],{"align":101},[2806,134637,134638],{"align":101},"元素向右浮动",[24,134640,134641],{},"浮动重点：",[51,134643,134644,134647,134650,134653,134656],{},[54,134645,134646],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[54,134648,134649],{},"浮动的元素会一行内显示并且元素顶部对齐",[54,134651,134652],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[54,134654,134655],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[54,134657,134658],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[24,134660,134661],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[24,134663,134664],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[67,134666,134667],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,134668,134669,134675,134685,134689,134695,134705],{"__ignoreMap":72},[77,134670,134671,134673],{"class":79,"line":80},[77,134672,133439],{"class":83},[77,134674,88],{"class":87},[77,134676,134677,134679,134681,134683],{"class":79,"line":91},[77,134678,95],{"class":94},[77,134680,98],{"class":87},[77,134682,101],{"class":94},[77,134684,104],{"class":87},[77,134686,134687],{"class":79,"line":107},[77,134688,110],{"class":87},[77,134690,134691,134693],{"class":79,"line":191},[77,134692,133460],{"class":83},[77,134694,88],{"class":87},[77,134696,134697,134699,134701,134703],{"class":79,"line":1543},[77,134698,95],{"class":94},[77,134700,98],{"class":87},[77,134702,74961],{"class":94},[77,134704,104],{"class":87},[77,134706,134707],{"class":79,"line":1549},[77,134708,110],{"class":87},[19,134710,134712],{"id":134711},"_1113-定位","11.1.3 定位",[24468,134714,134716],{"id":134715},"_11131-使用场景","11.1.3.1 使用场景",[24,134718,134719],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[24,134721,134722],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24468,134724,134726],{"id":134725},"_11132-定位组成","11.1.3.2 定位组成",[24,134728,134729],{},"定位 = 定位模式 + 边偏移",[139,134731,134732],{},[54,134733,134734,134737,134738],{},[27,134735,134736],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[27,134739,134740],{},"定位模式",[67,134742,134744],{"className":69,"code":134743,"language":71,"meta":72,"style":72},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[74,134745,134746,134752,134766,134783,134800],{"__ignoreMap":72},[77,134747,134748,134750],{"class":79,"line":80},[77,134749,84],{"class":83},[77,134751,88],{"class":87},[77,134753,134754,134757,134759,134761,134763],{"class":79,"line":91},[77,134755,134756],{"class":94},"  position",[77,134758,98],{"class":87},[77,134760,1538],{"class":94},[77,134762,132834],{"class":87},[77,134764,134765],{"class":323},"\u002F* 定位模式 *\u002F\n",[77,134767,134768,134771,134773,134775,134777,134780],{"class":79,"line":107},[77,134769,134770],{"class":94},"  top",[77,134772,98],{"class":87},[77,134774,3059],{"class":94},[77,134776,2124],{"class":2123},[77,134778,134779],{"class":87},";           ",[77,134781,134782],{"class":323},"\u002F* 边偏移：上 *\u002F\n",[77,134784,134785,134788,134790,134792,134794,134797],{"class":79,"line":191},[77,134786,134787],{"class":94},"  left",[77,134789,98],{"class":87},[77,134791,3313],{"class":94},[77,134793,2124],{"class":2123},[77,134795,134796],{"class":87},";          ",[77,134798,134799],{"class":323},"\u002F* 边偏移：左 *\u002F\n",[77,134801,134802],{"class":79,"line":1543},[77,134803,110],{"class":87},[2755,134805,134806,134815],{},[2758,134807,134808],{},[2761,134809,134810,134812],{},[2764,134811,2769],{"align":101},[2764,134813,134814],{"align":101},"语义",[2801,134816,134817,134824,134831,134838],{},[2761,134818,134819,134821],{},[2806,134820,1516],{"align":101},[2806,134822,134823],{"align":101},"静态定位",[2761,134825,134826,134828],{},[2806,134827,1538],{"align":101},[2806,134829,134830],{"align":101},"相对定位",[2761,134832,134833,134835],{},[2806,134834,1561],{"align":101},[2806,134836,134837],{"align":101},"绝对定位",[2761,134839,134840,134842],{},[2806,134841,1584],{"align":101},[2806,134843,134844],{"align":101},"固定定位",[24,134846,134847],{},"（1）静态定位：",[51,134849,134850,134861],{},[54,134851,134852,134853,134856,134857,134860],{},"静态定位是元素的 ",[27,134854,134855],{},"默认定位方式"," ， ",[27,134858,134859],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[54,134862,7656],{},[67,134864,134865],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,134866,134867,134873,134885,134899,134913],{"__ignoreMap":72},[77,134868,134869,134871],{"class":79,"line":80},[77,134870,84],{"class":83},[77,134872,88],{"class":87},[77,134874,134875,134877,134879,134881,134883],{"class":79,"line":91},[77,134876,134756],{"class":94},[77,134878,98],{"class":87},[77,134880,1538],{"class":94},[77,134882,132834],{"class":87},[77,134884,134765],{"class":323},[77,134886,134887,134889,134891,134893,134895,134897],{"class":79,"line":107},[77,134888,134770],{"class":94},[77,134890,98],{"class":87},[77,134892,3059],{"class":94},[77,134894,2124],{"class":2123},[77,134896,134779],{"class":87},[77,134898,134782],{"class":323},[77,134900,134901,134903,134905,134907,134909,134911],{"class":79,"line":191},[77,134902,134787],{"class":94},[77,134904,98],{"class":87},[77,134906,3313],{"class":94},[77,134908,2124],{"class":2123},[77,134910,134796],{"class":87},[77,134912,134799],{"class":323},[77,134914,134915],{"class":79,"line":1543},[77,134916,110],{"class":87},[51,134918,134919,134922],{},[54,134920,134921],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[54,134923,134924],{},"静态定位在布局时我们几乎不用的",[24,134926,134927],{},"（2）相对定位",[51,134929,134930,134937],{},[54,134931,134932,134933,134936],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[27,134934,134935],{},"原来的位置"," 来说的（自恋型）",[54,134938,7656],{},[67,134940,134941],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,134942,134943,134949,134961,134975,134989],{"__ignoreMap":72},[77,134944,134945,134947],{"class":79,"line":80},[77,134946,84],{"class":83},[77,134948,88],{"class":87},[77,134950,134951,134953,134955,134957,134959],{"class":79,"line":91},[77,134952,134756],{"class":94},[77,134954,98],{"class":87},[77,134956,1538],{"class":94},[77,134958,132834],{"class":87},[77,134960,134765],{"class":323},[77,134962,134963,134965,134967,134969,134971,134973],{"class":79,"line":107},[77,134964,134770],{"class":94},[77,134966,98],{"class":87},[77,134968,3059],{"class":94},[77,134970,2124],{"class":2123},[77,134972,134779],{"class":87},[77,134974,134782],{"class":323},[77,134976,134977,134979,134981,134983,134985,134987],{"class":79,"line":191},[77,134978,134787],{"class":94},[77,134980,98],{"class":87},[77,134982,3313],{"class":94},[77,134984,2124],{"class":2123},[77,134986,134796],{"class":87},[77,134988,134799],{"class":323},[77,134990,134991],{"class":79,"line":1543},[77,134992,110],{"class":87},[51,134994,134995],{},[54,134996,134997,134998,135000,135001,135003,135004,135007,135008,135011,135012,135014,135015,135018],{},"相对定位的特点：",[56172,134999],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56172,135002],{},"  ② ",[27,135005,135006],{},"原来"," 在标准流的 ",[27,135009,135010],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56172,135013],{},"  ③因此， ",[27,135016,135017],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[24,135020,135021],{},"（3）绝对定位",[51,135023,135024,135033],{},[54,135025,135026,135028,135029,135032],{},[27,135027,134837],{}," 是元素在移动位置的时候，是相对于它 ",[27,135030,135031],{},"祖先元素"," 来说的（拼爹型）",[54,135034,7656],{},[67,135036,135037],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,135038,135039,135045,135057,135071,135085],{"__ignoreMap":72},[77,135040,135041,135043],{"class":79,"line":80},[77,135042,84],{"class":83},[77,135044,88],{"class":87},[77,135046,135047,135049,135051,135053,135055],{"class":79,"line":91},[77,135048,134756],{"class":94},[77,135050,98],{"class":87},[77,135052,1538],{"class":94},[77,135054,132834],{"class":87},[77,135056,134765],{"class":323},[77,135058,135059,135061,135063,135065,135067,135069],{"class":79,"line":107},[77,135060,134770],{"class":94},[77,135062,98],{"class":87},[77,135064,3059],{"class":94},[77,135066,2124],{"class":2123},[77,135068,134779],{"class":87},[77,135070,134782],{"class":323},[77,135072,135073,135075,135077,135079,135081,135083],{"class":79,"line":191},[77,135074,134787],{"class":94},[77,135076,98],{"class":87},[77,135078,3313],{"class":94},[77,135080,2124],{"class":2123},[77,135082,134796],{"class":87},[77,135084,134799],{"class":323},[77,135086,135087],{"class":79,"line":1543},[77,135088,110],{"class":87},[51,135090,135091,135106,135115,135118],{},[54,135092,135093,135094,135096,135097,135099,135100,135102,135103,135105],{},"绝对定位的特点：",[56172,135095],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56172,135098],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56172,135101],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56172,135104],{},"  (4)固定定位",[54,135107,135108,135110,135111,135114],{},[27,135109,134844],{}," 是元素 ",[27,135112,135113],{},"固定于浏览器可视区的位置"," 。（认死理型）",[54,135116,135117],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[54,135119,135120],{},"语法:",[67,135122,135123],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,135124,135125,135131,135143,135157,135171],{"__ignoreMap":72},[77,135126,135127,135129],{"class":79,"line":80},[77,135128,84],{"class":83},[77,135130,88],{"class":87},[77,135132,135133,135135,135137,135139,135141],{"class":79,"line":91},[77,135134,134756],{"class":94},[77,135136,98],{"class":87},[77,135138,1538],{"class":94},[77,135140,132834],{"class":87},[77,135142,134765],{"class":323},[77,135144,135145,135147,135149,135151,135153,135155],{"class":79,"line":107},[77,135146,134770],{"class":94},[77,135148,98],{"class":87},[77,135150,3059],{"class":94},[77,135152,2124],{"class":2123},[77,135154,134779],{"class":87},[77,135156,134782],{"class":323},[77,135158,135159,135161,135163,135165,135167,135169],{"class":79,"line":191},[77,135160,134787],{"class":94},[77,135162,98],{"class":87},[77,135164,3313],{"class":94},[77,135166,2124],{"class":2123},[77,135168,134796],{"class":87},[77,135170,134799],{"class":323},[77,135172,135173],{"class":79,"line":1543},[77,135174,110],{"class":87},[51,135176,135177,135186],{},[54,135178,135179,135180,135182,135183,135185],{},"特点:",[56172,135181],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56172,135184],{},"  ②固定定位不再占有原先的位置,完全脱标",[54,135187,135188,135189,135191,135192,135194,135195,135197],{},"固定在版心位置的方法:",[56172,135190],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56172,135193],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56172,135196],{},"  实例：",[67,135199,135200],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,135201,135202,135208,135220,135234,135248],{"__ignoreMap":72},[77,135203,135204,135206],{"class":79,"line":80},[77,135205,84],{"class":83},[77,135207,88],{"class":87},[77,135209,135210,135212,135214,135216,135218],{"class":79,"line":91},[77,135211,134756],{"class":94},[77,135213,98],{"class":87},[77,135215,1538],{"class":94},[77,135217,132834],{"class":87},[77,135219,134765],{"class":323},[77,135221,135222,135224,135226,135228,135230,135232],{"class":79,"line":107},[77,135223,134770],{"class":94},[77,135225,98],{"class":87},[77,135227,3059],{"class":94},[77,135229,2124],{"class":2123},[77,135231,134779],{"class":87},[77,135233,134782],{"class":323},[77,135235,135236,135238,135240,135242,135244,135246],{"class":79,"line":191},[77,135237,134787],{"class":94},[77,135239,98],{"class":87},[77,135241,3313],{"class":94},[77,135243,2124],{"class":2123},[77,135245,134796],{"class":87},[77,135247,134799],{"class":323},[77,135249,135250],{"class":79,"line":1543},[77,135251,110],{"class":87},[40,135253],{"style":42,"src":135254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[24,135256,135257],{},"(5)粘性定位",[51,135259,135260,135263],{},[54,135261,135262],{},"粘性定位可以被认为是相对定位和固定定位的混合",[54,135264,7656],{},[67,135266,135267],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,135268,135269,135275,135287,135301,135315],{"__ignoreMap":72},[77,135270,135271,135273],{"class":79,"line":80},[77,135272,84],{"class":83},[77,135274,88],{"class":87},[77,135276,135277,135279,135281,135283,135285],{"class":79,"line":91},[77,135278,134756],{"class":94},[77,135280,98],{"class":87},[77,135282,1538],{"class":94},[77,135284,132834],{"class":87},[77,135286,134765],{"class":323},[77,135288,135289,135291,135293,135295,135297,135299],{"class":79,"line":107},[77,135290,134770],{"class":94},[77,135292,98],{"class":87},[77,135294,3059],{"class":94},[77,135296,2124],{"class":2123},[77,135298,134779],{"class":87},[77,135300,134782],{"class":323},[77,135302,135303,135305,135307,135309,135311,135313],{"class":79,"line":191},[77,135304,134787],{"class":94},[77,135306,98],{"class":87},[77,135308,3313],{"class":94},[77,135310,2124],{"class":2123},[77,135312,134796],{"class":87},[77,135314,134799],{"class":323},[77,135316,135317],{"class":79,"line":1543},[77,135318,110],{"class":87},[51,135320,135321],{},[54,135322,135323,135324,135326,135327,135329,135330,135332,135333,135336,135337,135339],{},"粘性定位的特点：",[56172,135325],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56172,135328],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56172,135331],{},"  ③必须添加 top 、left、right、bottom ",[27,135334,135335],{},"其中一个"," 才有效",[56172,135338],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[67,135341,135342],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,135343,135344,135350,135362,135376,135390],{"__ignoreMap":72},[77,135345,135346,135348],{"class":79,"line":80},[77,135347,84],{"class":83},[77,135349,88],{"class":87},[77,135351,135352,135354,135356,135358,135360],{"class":79,"line":91},[77,135353,134756],{"class":94},[77,135355,98],{"class":87},[77,135357,1538],{"class":94},[77,135359,132834],{"class":87},[77,135361,134765],{"class":323},[77,135363,135364,135366,135368,135370,135372,135374],{"class":79,"line":107},[77,135365,134770],{"class":94},[77,135367,98],{"class":87},[77,135369,3059],{"class":94},[77,135371,2124],{"class":2123},[77,135373,134779],{"class":87},[77,135375,134782],{"class":323},[77,135377,135378,135380,135382,135384,135386,135388],{"class":79,"line":191},[77,135379,134787],{"class":94},[77,135381,98],{"class":87},[77,135383,3313],{"class":94},[77,135385,2124],{"class":2123},[77,135387,134796],{"class":87},[77,135389,134799],{"class":323},[77,135391,135392],{"class":79,"line":1543},[77,135393,110],{"class":87},[40,135395],{"style":42,"src":135396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[24,135398,135399],{},"(6)总结",[2755,135401,135402,135417],{},[2758,135403,135404],{},[2761,135405,135406,135408,135411,135414],{},[2764,135407,134740],{"align":101},[2764,135409,135410],{"align":101},"是否脱标",[2764,135412,135413],{"align":101},"移动位置",[2764,135415,135416],{"align":101},"是否常用",[2801,135418,135419,135432,135446,135460,135473],{},[2761,135420,135421,135424,135426,135429],{},[2806,135422,135423],{"align":101},"Static 静态定位",[2806,135425,107111],{"align":101},[2806,135427,135428],{"align":101},"不能使用边偏移",[2806,135430,135431],{"align":101},"很少",[2761,135433,135434,135437,135440,135443],{},[2806,135435,135436],{"align":101},"Relative 相对定位",[2806,135438,135439],{"align":101},"否(占有位置)",[2806,135441,135442],{"align":101},"相对于自身位置移动",[2806,135444,135445],{"align":101},"基本单独使用",[2761,135447,135448,135451,135454,135457],{},[2806,135449,135450],{"align":101},"Absolute 绝对定位",[2806,135452,135453],{"align":101},"是(不占有位置)",[2806,135455,135456],{"align":101},"带有定位的父级",[2806,135458,135459],{"align":101},"要和定位父级元素搭配使用",[2761,135461,135462,135465,135467,135470],{},[2806,135463,135464],{"align":101},"Fixed 固定定位",[2806,135466,135453],{"align":101},[2806,135468,135469],{"align":101},"浏览器可视区",[2806,135471,135472],{"align":101},"单独使用,不需要父级",[2761,135474,135475,135478,135480,135482],{},[2806,135476,135477],{"align":101},"Sticky 粘性定位",[2806,135479,135439],{"align":101},[2806,135481,135469],{"align":101},[2806,135483,135484],{"align":101},"当前阶段少",[139,135486,135487],{"start":91},[54,135488,135489,135492],{},[27,135490,135491],{},"边偏移"," 则决定了该元素的最终位置",[2755,135494,135495,135506],{},[2758,135496,135497],{},[2761,135498,135499,135502,135504],{},[2764,135500,135501],{"align":101},"边偏移属性",[2764,135503,29960],{"align":101},[2764,135505,29957],{"align":101},[2801,135507,135508,135519,135530,135540],{},[2761,135509,135510,135513,135516],{},[2806,135511,135512],{"align":101},"top",[2806,135514,135515],{"align":101},"top: 80px;",[2806,135517,135518],{"align":101},"顶端偏移量，定义元素相对于父元素上边线的距离",[2761,135520,135521,135524,135527],{},[2806,135522,135523],{"align":101},"bottom",[2806,135525,135526],{"align":101},"bottom: 80px ;",[2806,135528,135529],{"align":101},"底部偏移量，定义元素相对于其父元素下边线的距离",[2761,135531,135532,135534,135537],{},[2806,135533,101],{"align":101},[2806,135535,135536],{"align":101},"left: 80px ;",[2806,135538,135539],{"align":101},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2761,135541,135542,135544,135547],{},[2806,135543,74961],{"align":101},[2806,135545,135546],{"align":101},"right: 80px ;",[2806,135548,135549],{"align":101},"右侧偏移量，定义元素相对于其父元素右边线的距离",[51,135551,135552],{},[54,135553,1988,135554,135556,135557,135559,135560,135562,135563,135566,135567,135569,135570,135572],{},[56172,135555],{},"  ① ",[27,135558,135491],{}," 需要和 ",[27,135561,134740],{}," 联合使用， ",[27,135564,135565],{},"单独使用无效"," ；",[56172,135568],{},"  ②top和bottom不要同时使用",[56172,135571],{},"  ③left和right不要同时使用",[24468,135574,135576],{"id":135575},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[24,135578,135579],{},"子级是绝对定位的话，父级要用相对定位",[51,135581,135582,135585,135588,135591],{},[54,135583,135584],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[54,135586,135587],{},"父盒子需要加定位限制子盒子在父盒子内显示",[54,135589,135590],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[54,135592,135593,135594,135597],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[27,135595,135596],{},"子绝父绝"," 也会遇到",[24468,135599,135601],{"id":135600},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[51,135603,135604,135619],{},[54,135605,135606,135607,135610,135611,135614,135615,135618],{},"在使用 ",[27,135608,135609],{},"定位"," 布局时，可能会 ",[27,135612,135613],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[27,135616,135617],{},"z-index"," 来控制盒子的前后次序 (z轴)",[54,135620,7656],{},[67,135622,135623],{"className":69,"code":134743,"language":71,"meta":72,"style":72},[74,135624,135625,135631,135643,135657,135671],{"__ignoreMap":72},[77,135626,135627,135629],{"class":79,"line":80},[77,135628,84],{"class":83},[77,135630,88],{"class":87},[77,135632,135633,135635,135637,135639,135641],{"class":79,"line":91},[77,135634,134756],{"class":94},[77,135636,98],{"class":87},[77,135638,1538],{"class":94},[77,135640,132834],{"class":87},[77,135642,134765],{"class":323},[77,135644,135645,135647,135649,135651,135653,135655],{"class":79,"line":107},[77,135646,134770],{"class":94},[77,135648,98],{"class":87},[77,135650,3059],{"class":94},[77,135652,2124],{"class":2123},[77,135654,134779],{"class":87},[77,135656,134782],{"class":323},[77,135658,135659,135661,135663,135665,135667,135669],{"class":79,"line":191},[77,135660,134787],{"class":94},[77,135662,98],{"class":87},[77,135664,3313],{"class":94},[77,135666,2124],{"class":2123},[77,135668,134796],{"class":87},[77,135670,134799],{"class":323},[77,135672,135673],{"class":79,"line":1543},[77,135674,110],{"class":87},[51,135676,135677],{},[54,135678,135679,135680,135556,135682,135684,135685,130142,135688,84976,135691,135693,135694,135696,135697,135700,135701,135566,135704,135706,135707,135710,135712],{},"z-index的特性",[56172,135681],{},[27,135683,129445],{}," ： ",[27,135686,135687],{},"正整数",[27,135689,135690],{},"负整数",[27,135692,1939],{}," ，默认值是 0，数值越大，盒子越靠上；",[56172,135695],{},"  ②如果 ",[27,135698,135699],{},"属性值相同"," ，则按照书写顺序， ",[27,135702,135703],{},"后来居上",[56172,135705],{},"  ③数字后面 ",[27,135708,135709],{},"不能加单位",[56172,135711],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24468,135714,135716],{"id":135715},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[24,135718,135719],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[24,135721,135722],{},"方法:",[51,135724,135725,135735],{},[54,135726,135727,135728,135731,135732],{},"left: 50%; 让 ",[27,135729,135730],{},"盒子的左侧"," 移动到 ",[27,135733,135734],{},"父级元素的水平中心位置",[54,135736,135737,135738,135741,135742],{},"margin-left: -100px; 让盒子 ",[27,135739,135740],{},"向左"," 移动 ",[27,135743,135744],{},"自身宽度的一半",[24468,135746,135748],{"id":135747},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[139,135750,135751,135754],{},[54,135752,135753],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[54,135755,135756],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[24,135758,135759],{},"也就是说绝对定位和固定定位和浮动类似",[139,135761,135762],{"start":107},[54,135763,135764],{},"display 是显示模式， 可以改变显示模式有以下方式:",[51,135766,135767,135770,135773],{},[54,135768,135769],{},"可以用inline-block 转换为行内块",[54,135771,135772],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[54,135774,135775],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[24,135777,135778],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24468,135780,135782],{"id":135781},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[139,135784,135785,135788,135791,135794],{},[54,135786,135787],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[54,135789,135790],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[54,135792,135793],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[54,135795,135796],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[67,135798,135799],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,135800,135801,135807,135817,135821,135827,135837],{"__ignoreMap":72},[77,135802,135803,135805],{"class":79,"line":80},[77,135804,133439],{"class":83},[77,135806,88],{"class":87},[77,135808,135809,135811,135813,135815],{"class":79,"line":91},[77,135810,95],{"class":94},[77,135812,98],{"class":87},[77,135814,101],{"class":94},[77,135816,104],{"class":87},[77,135818,135819],{"class":79,"line":107},[77,135820,110],{"class":87},[77,135822,135823,135825],{"class":79,"line":191},[77,135824,133460],{"class":83},[77,135826,88],{"class":87},[77,135828,135829,135831,135833,135835],{"class":79,"line":1543},[77,135830,95],{"class":94},[77,135832,98],{"class":87},[77,135834,74961],{"class":94},[77,135836,104],{"class":87},[77,135838,135839],{"class":79,"line":1549},[77,135840,110],{"class":87},[40,135842],{"style":42,"src":135843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24468,135845,135847],{"id":135846},"_11138-轮播图","11.1.3.8 轮播图",[40,135849],{"style":42,"src":135850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[139,135852,135853],{},[54,135854,135855],{},"制作顺序:",[51,135857,135858,135861,135864,135873],{},[54,135859,135860],{},"大盒子我们类名为： tb-promo 淘宝广告",[54,135862,135863],{},"里面先放一张图片",[54,135865,135866,135867,135869,135870,135872],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56172,135868],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56172,135871],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[54,135874,135875,135876,135878,135879,135881],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56172,135877],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56172,135880],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[139,135883,135884],{"start":91},[54,135885,135886],{},"代码模块",[67,135888,135890],{"className":69,"code":135889,"language":71,"meta":72,"style":72},"\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",[74,135891,135892,135897,135904,135914,135924,135934,135938,135943,135950,135960],{"__ignoreMap":72},[77,135893,135894],{"class":79,"line":80},[77,135895,135896],{"class":323},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[77,135898,135899,135902],{"class":79,"line":91},[77,135900,135901],{"class":83},".son",[77,135903,88],{"class":87},[77,135905,135906,135908,135910,135912],{"class":79,"line":107},[77,135907,134756],{"class":94},[77,135909,98],{"class":87},[77,135911,1561],{"class":94},[77,135913,104],{"class":87},[77,135915,135916,135918,135920,135922],{"class":79,"line":191},[77,135917,134770],{"class":94},[77,135919,98],{"class":87},[77,135921,1939],{"class":94},[77,135923,104],{"class":87},[77,135925,135926,135928,135930,135932],{"class":79,"line":1543},[77,135927,134787],{"class":94},[77,135929,98],{"class":87},[77,135931,1939],{"class":94},[77,135933,104],{"class":87},[77,135935,135936],{"class":79,"line":1549},[77,135937,110],{"class":87},[77,135939,135940],{"class":79,"line":1566},[77,135941,135942],{"class":323},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[77,135944,135945,135948],{"class":79,"line":1572},[77,135946,135947],{"class":83},".father",[77,135949,88],{"class":87},[77,135951,135952,135954,135956,135958],{"class":79,"line":1589},[77,135953,134756],{"class":94},[77,135955,98],{"class":87},[77,135957,1538],{"class":94},[77,135959,104],{"class":87},[77,135961,135962],{"class":79,"line":1595},[77,135963,110],{"class":87},[24,135965,135966],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[19,135968,135970],{"id":135969},"_1114-定位数值的移动","11.1.4 定位数值的移动",[40,135972],{"style":42,"src":135973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[24,135975,135976],{},"✨ 黄金口诀：",[24,135978,135979],{},"\"TOP正下负上，LEFT正右负左\"",[24,135981,135982],{},"\"RIGHT正左负右，BOTTOM正上负下",[24,135984,135985],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[24,135987,135988],{},"✨ 简单记：",[24,135990,135991],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2520,135993,135994],{},"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":72,"searchDepth":91,"depth":91,"links":135996},[135997],{"id":134524,"depth":91,"text":134525,"children":135998},[135999,136000,136001,136002],{"id":134528,"depth":107,"text":134529},{"id":134543,"depth":107,"text":134544},{"id":134711,"depth":107,"text":134712},{"id":135969,"depth":107,"text":135970},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134516,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":136009,"title":136010,"body":136011,"description":2546,"extension":2547,"meta":137429,"navigation":2549,"path":137430,"seo":137431,"stem":137432,"__hash__":137433},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":136012,"toc":137408},[136013,136016,136020,136028,136032,136037,136045,136057,136061,136066,136074,136085,136089,136094,136135,136143,136147,136150,136153,136156,136250,136253,136347,136350,136444,136447,136450,136480,136483,136486,136516,136519,136522,136525,136528,136531,136534,136537,136607,136610,136614,136618,136659,136663,136669,136672,136675,136679,136682,136685,136688,136769,136772,136775,136779,136783,136786,136789,136792,136795,136798,136804,136813,136817,136836,136840,136850,136853,136856,136859,136862,136865,136868,136871,136874,136883,136887,136896,136899,136904,136957,136962,137128,137131,137134,137139,137142,137145,137148,137151,137156,137304,137307,137310,137315,137318,137323,137357,137360,137363,137367,137370,137377,137380,137383,137386,137389,137392,137395,137398,137402,137405],[10,136014,136010],{"id":136015},"_12-显示隐藏与图形资源",[14,136017,136019],{"id":136018},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[51,136021,136022,136025],{},[54,136023,136024],{},"目的:让一个元素在页面中消失或者显示出来",[54,136026,136027],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[19,136029,136031],{"id":136030},"_1211-display-显示","12.1.1 display 显示",[139,136033,136034],{},[54,136035,136036],{},"display 设置或检索对象是否及如何显示",[51,136038,136039,136042],{},[54,136040,136041],{},"display: none;隐藏对象",[54,136043,136044],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[139,136046,136047,136054],{"start":91},[54,136048,136049,136050,136053],{},"特点： display 隐藏元素后， ",[27,136051,136052],{},"不再占"," 有原来的位置",[54,136055,136056],{},"在js中使用非常的广泛",[19,136058,136060],{"id":136059},"_1212-visibility可见性","12.1.2 visibility可见性",[139,136062,136063],{},[54,136064,136065],{},"visibility 属性用于指定一个元素应可见还是隐藏",[51,136067,136068,136071],{},[54,136069,136070],{},"visibility： visible；元素可见",[54,136072,136073],{},"visibility：hidden；元素隐藏",[139,136075,136076,136079,136082],{"start":91},[54,136077,136078],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[54,136080,136081],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[54,136083,136084],{},"隐藏后继续占有原有位置",[19,136086,136088],{"id":136087},"_1213-overflow溢出","12.1.3 overflow溢出",[51,136090,136091],{},[54,136092,136093],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2755,136095,136096,136104],{},[2758,136097,136098],{},[2761,136099,136100,136102],{},[2764,136101,129445],{"align":101},[2764,136103,29957],{"align":101},[2801,136105,136106,136114,136121,136128],{},[2761,136107,136108,136111],{},[2806,136109,136110],{"align":101},"visible",[2806,136112,136113],{"align":101},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2761,136115,136116,136118],{},[2806,136117,556],{"align":101},[2806,136119,136120],{"align":101},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2761,136122,136123,136125],{},[2806,136124,131394],{"align":101},[2806,136126,136127],{"align":101},"不管超出内容否，总是显示滚动条",[2761,136129,136130,136132],{},[2806,136131,75102],{"align":101},[2806,136133,136134],{"align":101},"超出自动显示滚动条，不超出不显示滚动条",[51,136136,136137,136140],{},[54,136138,136139],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[54,136141,136142],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[19,136144,136146],{"id":136145},"_1214-案例收获","12.1.4 案例收获",[40,136148],{"style":42,"src":136149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[24,136151,136152],{},"问题：没做出来动态效果，使用hover没实现",[24,136154,136155],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[67,136157,136158],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,136159,136160,136164,136178,136182,136196,136200,136214,136218,136232,136236],{"__ignoreMap":72},[77,136161,136162],{"class":79,"line":80},[77,136163,1500],{"class":323},[77,136165,136166,136168,136170,136172,136174,136176],{"class":79,"line":91},[77,136167,1505],{"class":83},[77,136169,1508],{"class":87},[77,136171,1511],{"class":94},[77,136173,98],{"class":87},[77,136175,1516],{"class":94},[77,136177,1519],{"class":87},[77,136179,136180],{"class":79,"line":107},[77,136181,1524],{"class":323},[77,136183,136184,136186,136188,136190,136192,136194],{"class":79,"line":191},[77,136185,1529],{"class":83},[77,136187,1508],{"class":87},[77,136189,1511],{"class":94},[77,136191,98],{"class":87},[77,136193,1538],{"class":94},[77,136195,1519],{"class":87},[77,136197,136198],{"class":79,"line":1543},[77,136199,1546],{"class":323},[77,136201,136202,136204,136206,136208,136210,136212],{"class":79,"line":1549},[77,136203,1552],{"class":83},[77,136205,1508],{"class":87},[77,136207,1511],{"class":94},[77,136209,98],{"class":87},[77,136211,1561],{"class":94},[77,136213,1519],{"class":87},[77,136215,136216],{"class":79,"line":1566},[77,136217,1569],{"class":323},[77,136219,136220,136222,136224,136226,136228,136230],{"class":79,"line":1572},[77,136221,1575],{"class":83},[77,136223,1508],{"class":87},[77,136225,1511],{"class":94},[77,136227,98],{"class":87},[77,136229,1584],{"class":94},[77,136231,1519],{"class":87},[77,136233,136234],{"class":79,"line":1589},[77,136235,1592],{"class":323},[77,136237,136238,136240,136242,136244,136246,136248],{"class":79,"line":1595},[77,136239,1598],{"class":83},[77,136241,1508],{"class":87},[77,136243,1511],{"class":94},[77,136245,98],{"class":87},[77,136247,1607],{"class":94},[77,136249,1519],{"class":87},[24,136251,136252],{},"完整代码：",[67,136254,136255],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,136256,136257,136261,136275,136279,136293,136297,136311,136315,136329,136333],{"__ignoreMap":72},[77,136258,136259],{"class":79,"line":80},[77,136260,1500],{"class":323},[77,136262,136263,136265,136267,136269,136271,136273],{"class":79,"line":91},[77,136264,1505],{"class":83},[77,136266,1508],{"class":87},[77,136268,1511],{"class":94},[77,136270,98],{"class":87},[77,136272,1516],{"class":94},[77,136274,1519],{"class":87},[77,136276,136277],{"class":79,"line":107},[77,136278,1524],{"class":323},[77,136280,136281,136283,136285,136287,136289,136291],{"class":79,"line":191},[77,136282,1529],{"class":83},[77,136284,1508],{"class":87},[77,136286,1511],{"class":94},[77,136288,98],{"class":87},[77,136290,1538],{"class":94},[77,136292,1519],{"class":87},[77,136294,136295],{"class":79,"line":1543},[77,136296,1546],{"class":323},[77,136298,136299,136301,136303,136305,136307,136309],{"class":79,"line":1549},[77,136300,1552],{"class":83},[77,136302,1508],{"class":87},[77,136304,1511],{"class":94},[77,136306,98],{"class":87},[77,136308,1561],{"class":94},[77,136310,1519],{"class":87},[77,136312,136313],{"class":79,"line":1566},[77,136314,1569],{"class":323},[77,136316,136317,136319,136321,136323,136325,136327],{"class":79,"line":1572},[77,136318,1575],{"class":83},[77,136320,1508],{"class":87},[77,136322,1511],{"class":94},[77,136324,98],{"class":87},[77,136326,1584],{"class":94},[77,136328,1519],{"class":87},[77,136330,136331],{"class":79,"line":1589},[77,136332,1592],{"class":323},[77,136334,136335,136337,136339,136341,136343,136345],{"class":79,"line":1595},[77,136336,1598],{"class":83},[77,136338,1508],{"class":87},[77,136340,1511],{"class":94},[77,136342,98],{"class":87},[77,136344,1607],{"class":94},[77,136346,1519],{"class":87},[24,136348,136349],{},"分布思路重点详解：",[67,136351,136352],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,136353,136354,136358,136372,136376,136390,136394,136408,136412,136426,136430],{"__ignoreMap":72},[77,136355,136356],{"class":79,"line":80},[77,136357,1500],{"class":323},[77,136359,136360,136362,136364,136366,136368,136370],{"class":79,"line":91},[77,136361,1505],{"class":83},[77,136363,1508],{"class":87},[77,136365,1511],{"class":94},[77,136367,98],{"class":87},[77,136369,1516],{"class":94},[77,136371,1519],{"class":87},[77,136373,136374],{"class":79,"line":107},[77,136375,1524],{"class":323},[77,136377,136378,136380,136382,136384,136386,136388],{"class":79,"line":191},[77,136379,1529],{"class":83},[77,136381,1508],{"class":87},[77,136383,1511],{"class":94},[77,136385,98],{"class":87},[77,136387,1538],{"class":94},[77,136389,1519],{"class":87},[77,136391,136392],{"class":79,"line":1543},[77,136393,1546],{"class":323},[77,136395,136396,136398,136400,136402,136404,136406],{"class":79,"line":1549},[77,136397,1552],{"class":83},[77,136399,1508],{"class":87},[77,136401,1511],{"class":94},[77,136403,98],{"class":87},[77,136405,1561],{"class":94},[77,136407,1519],{"class":87},[77,136409,136410],{"class":79,"line":1566},[77,136411,1569],{"class":323},[77,136413,136414,136416,136418,136420,136422,136424],{"class":79,"line":1572},[77,136415,1575],{"class":83},[77,136417,1508],{"class":87},[77,136419,1511],{"class":94},[77,136421,98],{"class":87},[77,136423,1584],{"class":94},[77,136425,1519],{"class":87},[77,136427,136428],{"class":79,"line":1589},[77,136429,1592],{"class":323},[77,136431,136432,136434,136436,136438,136440,136442],{"class":79,"line":1595},[77,136433,1598],{"class":83},[77,136435,1508],{"class":87},[77,136437,1511],{"class":94},[77,136439,98],{"class":87},[77,136441,1607],{"class":94},[77,136443,1519],{"class":87},[40,136445],{"style":42,"src":136446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[24,136448,136449],{},"图片太大，盒子太小，此时需要修改图片的大小",[67,136451,136452],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,136453,136454],{"__ignoreMap":72},[77,136455,136456,136458,136460,136462,136464,136466,136468,136470,136472,136474,136476,136478],{"class":79,"line":80},[77,136457,260],{"class":87},[77,136459,40],{"class":158},[77,136461,265],{"class":83},[77,136463,268],{"class":87},[77,136465,272],{"class":271},[77,136467,275],{"class":83},[77,136469,268],{"class":87},[77,136471,280],{"class":271},[77,136473,283],{"class":83},[77,136475,268],{"class":87},[77,136477,288],{"class":271},[77,136479,291],{"class":87},[40,136481],{"style":42,"src":136482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[24,136484,136485],{},"制造遮罩层",[67,136487,136488],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,136489,136490],{"__ignoreMap":72},[77,136491,136492,136494,136496,136498,136500,136502,136504,136506,136508,136510,136512,136514],{"class":79,"line":80},[77,136493,260],{"class":87},[77,136495,40],{"class":158},[77,136497,265],{"class":83},[77,136499,268],{"class":87},[77,136501,272],{"class":271},[77,136503,275],{"class":83},[77,136505,268],{"class":87},[77,136507,280],{"class":271},[77,136509,283],{"class":83},[77,136511,268],{"class":87},[77,136513,288],{"class":271},[77,136515,291],{"class":87},[24,136517,136518],{},"此时是这样的为标准流",[40,136520],{"style":42,"src":136521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[24,136523,136524],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[24,136526,136527],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[24,136529,136530],{},"让他在中间，用center(background-position)",[24,136532,136533],{},"将需要变的尽可能放到一个盒子中",[24,136535,136536],{},"放大盒子上内部盒子发生变化",[67,136538,136540],{"className":69,"code":136539,"language":71,"meta":72,"style":72},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[74,136541,136542,136548,136558,136562,136569,136579,136591,136603],{"__ignoreMap":72},[77,136543,136544,136546],{"class":79,"line":80},[77,136545,130046],{"class":83},[77,136547,88],{"class":87},[77,136549,136550,136552,136554,136556],{"class":79,"line":91},[77,136551,134756],{"class":94},[77,136553,98],{"class":87},[77,136555,1538],{"class":94},[77,136557,104],{"class":87},[77,136559,136560],{"class":79,"line":107},[77,136561,110],{"class":87},[77,136563,136564,136567],{"class":79,"line":191},[77,136565,136566],{"class":83},".child",[77,136568,88],{"class":87},[77,136570,136571,136573,136575,136577],{"class":79,"line":1543},[77,136572,134756],{"class":94},[77,136574,98],{"class":87},[77,136576,1561],{"class":94},[77,136578,104],{"class":87},[77,136580,136581,136583,136585,136587,136589],{"class":79,"line":1549},[77,136582,134770],{"class":94},[77,136584,98],{"class":87},[77,136586,3269],{"class":94},[77,136588,2942],{"class":2123},[77,136590,104],{"class":87},[77,136592,136593,136595,136597,136599,136601],{"class":79,"line":1566},[77,136594,134787],{"class":94},[77,136596,98],{"class":87},[77,136598,3269],{"class":94},[77,136600,2942],{"class":2123},[77,136602,104],{"class":87},[77,136604,136605],{"class":79,"line":1572},[77,136606,110],{"class":87},[24,136608,136609],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136611,136613],{"id":136612},"_122-精灵图","12.2 精灵图",[19,136615,136617],{"id":136616},"_1221-理解","12.2.1 理解",[139,136619,136620,136638],{},[54,136621,136622,136623,134856,136626,136629,136630,136633,136634,136637],{},"目的： ",[27,136624,136625],{},"为了有效地减少服务器接收和发送请求的次数",[27,136627,136628],{},"提高"," 页面的 ",[27,136631,136632],{},"加载速度"," ，出现了 ",[27,136635,136636],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[54,136639,136640,136641,136643,136644,136646,136647,136649,136650,136652,136653,136655,136656,136658],{},"使用精灵图核心：",[56172,136642],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56172,136645],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56172,136648],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56172,136651],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56172,136654],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56172,136657],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[19,136660,136662],{"id":136661},"_1222-扒图","12.2.2 扒图",[67,136664,136667],{"className":136665,"code":136666,"language":7662},[7660],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[74,136668,136666],{"__ignoreMap":72},[40,136670],{"style":42,"src":136671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[40,136673],{"style":42,"src":136674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[19,136676,136678],{"id":136677},"_1223-精灵图的实现","12.2.3 精灵图的实现",[40,136680],{"style":42,"src":136681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[24,136683,136684],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[40,136686],{"style":42,"src":136687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[67,136689,136691],{"className":69,"code":136690,"language":71,"meta":72,"style":72},"\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",[74,136692,136693,136698,136705,136717,136729,136748,136765],{"__ignoreMap":72},[77,136694,136695],{"class":79,"line":80},[77,136696,136697],{"class":323},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[77,136699,136700,136703],{"class":79,"line":91},[77,136701,136702],{"class":83},".icon",[77,136704,88],{"class":87},[77,136706,136707,136709,136711,136713,136715],{"class":79,"line":107},[77,136708,73010],{"class":94},[77,136710,98],{"class":87},[77,136712,3313],{"class":94},[77,136714,2124],{"class":2123},[77,136716,104],{"class":87},[77,136718,136719,136721,136723,136725,136727],{"class":79,"line":191},[77,136720,73230],{"class":94},[77,136722,98],{"class":87},[77,136724,3313],{"class":94},[77,136726,2124],{"class":2123},[77,136728,104],{"class":87},[77,136730,136731,136733,136735,136737,136739,136742,136744,136746],{"class":79,"line":1543},[77,136732,73053],{"class":94},[77,136734,98],{"class":87},[77,136736,64171],{"class":94},[77,136738,2622],{"class":87},[77,136740,136741],{"class":7691},"sprites.png",[77,136743,16186],{"class":87},[77,136745,64181],{"class":94},[77,136747,104],{"class":87},[77,136749,136750,136752,136754,136756,136758,136761,136763],{"class":79,"line":1549},[77,136751,131235],{"class":94},[77,136753,98],{"class":87},[77,136755,54222],{"class":94},[77,136757,2124],{"class":2123},[77,136759,136760],{"class":94}," -20",[77,136762,2124],{"class":2123},[77,136764,104],{"class":87},[77,136766,136767],{"class":79,"line":1566},[77,136768,110],{"class":87},[40,136770],{"style":42,"src":136771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[24,136773,136774],{},"在前端中坐标轴的正方向是右和下",[14,136776,136778],{"id":136777},"_123-字体图标","12.3 字体图标",[19,136780,136782],{"id":136781},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[24,136784,136785],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[24,136787,136788],{},"精灵图是有诸多优点的，但是缺点很明显。",[24,136790,136791],{},"1.图片文件还是比较大的。",[24,136793,136794],{},"2.图片本身放大和缩小会失真。",[24,136796,136797],{},"3.一旦图片制作完毕想要更换非常复杂。",[24,136799,136800,136801,28208],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[27,136802,136803],{},"字体图标 iconfont",[24,136805,136806,136809,136810,30853],{},[27,136807,136808],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[27,136811,136812],{},"展示的是图标，本质属于字体",[19,136814,136816],{"id":136815},"_1232-字体图标的优点","12.3.2 字体图标的优点",[51,136818,136819,136824,136827,136830,136833],{},[54,136820,136821,136823],{},[27,136822,28344],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[54,136825,136826],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[54,136828,136829],{},"兼容性：几乎支持所有的浏览器，请放心使用",[54,136831,136832],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[54,136834,136835],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[19,136837,136839],{"id":136838},"_1233-字体库下载网站","12.3.3 字体库下载网站",[51,136841,136842],{},[54,136843,136844,136845],{},"icomoon字体库：",[417,136846,136849],{"href":136847,"rel":136848},"http:\u002F\u002Ficomoon.io\u002F",[26332],"http:\u002F\u002Ficomoon.io",[24,136851,136852],{},"进去之后点icomoon app",[40,136854],{"style":42,"src":136855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[24,136857,136858],{},"可以对其编辑：",[40,136860],{"style":42,"src":136861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[24,136863,136864],{},"生成字体：",[40,136866],{"style":42,"src":136867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[24,136869,136870],{},"下载：",[40,136872],{"style":42,"src":136873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[51,136875,136876],{},[54,136877,136878,136879],{},"阿里iconfont字体库： ",[417,136880,136881],{"href":136881,"rel":136882},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26332],[19,136884,136886],{"id":136885},"_1234-字体图标的引入","12.3.4 字体图标的引入",[139,136888,136889],{},[54,136890,136891,136892,136895],{},"把下载包里面的 ",[27,136893,136894],{},"fonts"," 文件夹放入页面根目录下",[40,136897],{"style":42,"src":136898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[139,136900,136901],{"start":91},[54,136902,136903],{},"字体文件格式",[2755,136905,136906,136915],{},[2758,136907,136908],{},[2761,136909,136910,136913],{},[2764,136911,136912],{"align":101},"格式",[2764,136914,26207],{"align":101},[2801,136916,136917,136927,136937,136947],{},[2761,136918,136919,136924],{},[2806,136920,136921],{"align":101},[27,136922,136923],{},".ttf",[2806,136925,136926],{"align":101},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2761,136928,136929,136934],{},[2806,136930,136931],{"align":101},[27,136932,136933],{},".woff",[2806,136935,136936],{"align":101},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2761,136938,136939,136944],{},[2806,136940,136941],{"align":101},[27,136942,136943],{},".eot",[2806,136945,136946],{"align":101},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2761,136948,136949,136954],{},[2806,136950,136951],{"align":101},[27,136952,136953],{},"svg",[2806,136955,136956],{"align":101},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[139,136958,136959],{"start":107},[54,136960,136961],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[67,136963,136965],{"className":69,"code":136964,"language":71,"meta":72,"style":72},"\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",[74,136966,136967,136972,136979,136991,137007,137032,137053,137073,137093,137097,137103,137113,137124],{"__ignoreMap":72},[77,136968,136969],{"class":79,"line":80},[77,136970,136971],{"class":323},"\u002F* 引入字体图标 *\u002F\n",[77,136973,136974,136977],{"class":79,"line":91},[77,136975,136976],{"class":2123},"@font-face",[77,136978,88],{"class":87},[77,136980,136981,136984,136986,136989],{"class":79,"line":107},[77,136982,136983],{"class":94},"  font-family",[77,136985,98],{"class":87},[77,136987,136988],{"class":271},"'icomoon'",[77,136990,104],{"class":87},[77,136992,136993,136996,136998,137000,137002,137005],{"class":79,"line":191},[77,136994,136995],{"class":94},"  src",[77,136997,98],{"class":87},[77,136999,64171],{"class":94},[77,137001,2622],{"class":87},[77,137003,137004],{"class":271},"'fonts\u002Ficomoon.eot'",[77,137006,5194],{"class":87},[77,137008,137009,137011,137013,137015,137017,137020,137022,137025,137027,137030],{"class":79,"line":1543},[77,137010,136995],{"class":94},[77,137012,98],{"class":87},[77,137014,64171],{"class":94},[77,137016,2622],{"class":87},[77,137018,137019],{"class":271},"'fonts\u002Ficomoon.eot?#iefix'",[77,137021,16186],{"class":87},[77,137023,137024],{"class":94},"format",[77,137026,2622],{"class":87},[77,137028,137029],{"class":271},"'embedded-opentype'",[77,137031,40513],{"class":87},[77,137033,137034,137037,137039,137042,137044,137046,137048,137051],{"class":79,"line":1549},[77,137035,137036],{"class":94},"       url",[77,137038,2622],{"class":87},[77,137040,137041],{"class":271},"'fonts\u002Ficomoon.woff'",[77,137043,16186],{"class":87},[77,137045,137024],{"class":94},[77,137047,2622],{"class":87},[77,137049,137050],{"class":271},"'woff'",[77,137052,40513],{"class":87},[77,137054,137055,137057,137059,137062,137064,137066,137068,137071],{"class":79,"line":1566},[77,137056,137036],{"class":94},[77,137058,2622],{"class":87},[77,137060,137061],{"class":271},"'fonts\u002Ficomoon.ttf'",[77,137063,16186],{"class":87},[77,137065,137024],{"class":94},[77,137067,2622],{"class":87},[77,137069,137070],{"class":271},"'truetype'",[77,137072,40513],{"class":87},[77,137074,137075,137077,137079,137082,137084,137086,137088,137091],{"class":79,"line":1572},[77,137076,137036],{"class":94},[77,137078,2622],{"class":87},[77,137080,137081],{"class":271},"'fonts\u002Ficomoon.svg#icomoon'",[77,137083,16186],{"class":87},[77,137085,137024],{"class":94},[77,137087,2622],{"class":87},[77,137089,137090],{"class":271},"'svg'",[77,137092,5194],{"class":87},[77,137094,137095],{"class":79,"line":1589},[77,137096,110],{"class":87},[77,137098,137099,137101],{"class":79,"line":1595},[77,137100,136702],{"class":83},[77,137102,88],{"class":87},[77,137104,137105,137107,137109,137111],{"class":79,"line":4088},[77,137106,136983],{"class":94},[77,137108,98],{"class":87},[77,137110,136988],{"class":271},[77,137112,104],{"class":87},[77,137114,137115,137118,137120,137122],{"class":79,"line":4093},[77,137116,137117],{"class":94},"  font-style",[77,137119,98],{"class":87},[77,137121,66284],{"class":94},[77,137123,104],{"class":87},[77,137125,137126],{"class":79,"line":4099},[77,137127,110],{"class":87},[24,137129,137130],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[40,137132],{"style":42,"src":137133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[139,137135,137136],{"start":191},[54,137137,137138],{},"添加字体",[40,137140],{"style":42,"src":137141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[24,137143,137144],{},"复制：",[40,137146],{"style":42,"src":137147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[24,137149,137150],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[139,137152,137153],{"start":1543},[54,137154,137155],{},"代码展示：",[67,137157,137158],{"className":69,"code":136964,"language":71,"meta":72,"style":72},[74,137159,137160,137164,137170,137180,137194,137216,137234,137252,137270,137274,137280,137290,137300],{"__ignoreMap":72},[77,137161,137162],{"class":79,"line":80},[77,137163,136971],{"class":323},[77,137165,137166,137168],{"class":79,"line":91},[77,137167,136976],{"class":2123},[77,137169,88],{"class":87},[77,137171,137172,137174,137176,137178],{"class":79,"line":107},[77,137173,136983],{"class":94},[77,137175,98],{"class":87},[77,137177,136988],{"class":271},[77,137179,104],{"class":87},[77,137181,137182,137184,137186,137188,137190,137192],{"class":79,"line":191},[77,137183,136995],{"class":94},[77,137185,98],{"class":87},[77,137187,64171],{"class":94},[77,137189,2622],{"class":87},[77,137191,137004],{"class":271},[77,137193,5194],{"class":87},[77,137195,137196,137198,137200,137202,137204,137206,137208,137210,137212,137214],{"class":79,"line":1543},[77,137197,136995],{"class":94},[77,137199,98],{"class":87},[77,137201,64171],{"class":94},[77,137203,2622],{"class":87},[77,137205,137019],{"class":271},[77,137207,16186],{"class":87},[77,137209,137024],{"class":94},[77,137211,2622],{"class":87},[77,137213,137029],{"class":271},[77,137215,40513],{"class":87},[77,137217,137218,137220,137222,137224,137226,137228,137230,137232],{"class":79,"line":1549},[77,137219,137036],{"class":94},[77,137221,2622],{"class":87},[77,137223,137041],{"class":271},[77,137225,16186],{"class":87},[77,137227,137024],{"class":94},[77,137229,2622],{"class":87},[77,137231,137050],{"class":271},[77,137233,40513],{"class":87},[77,137235,137236,137238,137240,137242,137244,137246,137248,137250],{"class":79,"line":1566},[77,137237,137036],{"class":94},[77,137239,2622],{"class":87},[77,137241,137061],{"class":271},[77,137243,16186],{"class":87},[77,137245,137024],{"class":94},[77,137247,2622],{"class":87},[77,137249,137070],{"class":271},[77,137251,40513],{"class":87},[77,137253,137254,137256,137258,137260,137262,137264,137266,137268],{"class":79,"line":1572},[77,137255,137036],{"class":94},[77,137257,2622],{"class":87},[77,137259,137081],{"class":271},[77,137261,16186],{"class":87},[77,137263,137024],{"class":94},[77,137265,2622],{"class":87},[77,137267,137090],{"class":271},[77,137269,5194],{"class":87},[77,137271,137272],{"class":79,"line":1589},[77,137273,110],{"class":87},[77,137275,137276,137278],{"class":79,"line":1595},[77,137277,136702],{"class":83},[77,137279,88],{"class":87},[77,137281,137282,137284,137286,137288],{"class":79,"line":4088},[77,137283,136983],{"class":94},[77,137285,98],{"class":87},[77,137287,136988],{"class":271},[77,137289,104],{"class":87},[77,137291,137292,137294,137296,137298],{"class":79,"line":4093},[77,137293,137117],{"class":94},[77,137295,98],{"class":87},[77,137297,66284],{"class":94},[77,137299,104],{"class":87},[77,137301,137302],{"class":79,"line":4099},[77,137303,110],{"class":87},[40,137305],{"style":42,"src":137306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[24,137308,137309],{},"更加细节展示：",[139,137311,137312],{},[54,137313,137314],{},"html 标签内添加小图标",[40,137316],{"style":42,"src":137317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[139,137319,137320],{"start":91},[54,137321,137322],{},"给标签定义字体",[67,137324,137325],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,137326,137327,137331,137345,137349],{"__ignoreMap":72},[77,137328,137329],{"class":79,"line":80},[77,137330,324],{"class":323},[77,137332,137333,137335,137337,137339,137341,137343],{"class":79,"line":91},[77,137334,260],{"class":87},[77,137336,331],{"class":158},[77,137338,334],{"class":83},[77,137340,268],{"class":87},[77,137342,339],{"class":271},[77,137344,291],{"class":87},[77,137346,137347],{"class":79,"line":107},[77,137348,346],{"class":87},[77,137350,137351,137353,137355],{"class":79,"line":191},[77,137352,351],{"class":87},[77,137354,331],{"class":158},[77,137356,291],{"class":87},[24,137358,137359],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[40,137361],{"style":42,"src":137362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[19,137364,137366],{"id":137365},"_1235-字体图标的追加","12.3.5 字体图标的追加",[24,137368,137369],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[24,137371,137372,137373,137376],{},"把压缩包里面的 ",[27,137374,137375],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[24,137378,137379],{},"打开网站，点下方：",[40,137381],{"style":42,"src":137382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[40,137384],{"style":42,"src":137385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[40,137387],{"style":42,"src":137388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[24,137390,137391],{},"点yes重新加载",[24,137393,137394],{},"然后重复之前的操作就可以实现了",[24,137396,137397],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[19,137399,137401],{"id":137400},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[40,137403],{"style":42,"src":137404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2520,137406,137407],{},"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":72,"searchDepth":91,"depth":91,"links":137409},[137410,137416,137421],{"id":136018,"depth":91,"text":136019,"children":137411},[137412,137413,137414,137415],{"id":136030,"depth":107,"text":136031},{"id":136059,"depth":107,"text":136060},{"id":136087,"depth":107,"text":136088},{"id":136145,"depth":107,"text":136146},{"id":136612,"depth":91,"text":136613,"children":137417},[137418,137419,137420],{"id":136616,"depth":107,"text":136617},{"id":136661,"depth":107,"text":136662},{"id":136677,"depth":107,"text":136678},{"id":136777,"depth":91,"text":136778,"children":137422},[137423,137424,137425,137426,137427,137428],{"id":136781,"depth":107,"text":136782},{"id":136815,"depth":107,"text":136816},{"id":136838,"depth":107,"text":136839},{"id":136885,"depth":107,"text":136886},{"id":137365,"depth":107,"text":137366},{"id":137400,"depth":107,"text":137401},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":136010,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137435,"title":137436,"body":137437,"description":2546,"extension":2547,"meta":138664,"navigation":2549,"path":138665,"seo":138666,"stem":138667,"__hash__":138668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137438,"toc":138645},[137439,137442,137446,137449,137463,137531,137561,137564,137568,137572,137674,137721,137725,137728,137731,137765,137768,137771,137774,137777,137780,137783,137786,137788,137791,137794,137797,137800,137803,137806,137809,137837,137840,137844,137847,137854,137857,137860,137886,137889,137893,137896,137899,137906,137910,137913,137915,137947,137950,137953,137965,137971,137974,137977,137980,137982,137986,137989,137992,137995,138040,138044,138046,138049,138056,138098,138101,138105,138110,138124,138128,138131,138134,138137,138140,138143,138177,138180,138183,138237,138240,138243,138246,138249,138301,138304,138307,138356,138360,138362,138365,138368,138371,138374,138377,138435,138438,138444,138447,138450,138482,138485,138489,138493,138496,138528,138532,138535,138579,138583,138586,138589,138592,138595,138598,138601,138604,138606,138609,138611,138614,138617,138620,138623,138628,138631,138633,138636,138639,138642],[10,137440,137436],{"id":137441},"_13-界面样式与布局技巧",[14,137443,137445],{"id":137444},"_131-css三角","13.1 css三角",[24,137447,137448],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[51,137450,137451,137454,137457,137460],{},[54,137452,137453],{},"用css 边框可以模拟三角效果",[54,137455,137456],{},"宽度高度为0",[54,137458,137459],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[54,137461,137462],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[67,137464,137466],{"className":69,"code":137465,"language":71,"meta":72,"style":72},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[74,137467,137468,137473,137480,137490,137500,137516,137527],{"__ignoreMap":72},[77,137469,137470],{"class":79,"line":80},[77,137471,137472],{"class":323},"\u002F* CSS 实现三角形 *\u002F\n",[77,137474,137475,137478],{"class":79,"line":91},[77,137476,137477],{"class":83},".triangle",[77,137479,88],{"class":87},[77,137481,137482,137484,137486,137488],{"class":79,"line":107},[77,137483,73010],{"class":94},[77,137485,98],{"class":87},[77,137487,1939],{"class":94},[77,137489,104],{"class":87},[77,137491,137492,137494,137496,137498],{"class":79,"line":191},[77,137493,73230],{"class":94},[77,137495,98],{"class":87},[77,137497,1939],{"class":94},[77,137499,104],{"class":87},[77,137501,137502,137504,137506,137508,137510,137512,137514],{"class":79,"line":1543},[77,137503,2115],{"class":94},[77,137505,98],{"class":87},[77,137507,3059],{"class":94},[77,137509,2124],{"class":2123},[77,137511,2127],{"class":94},[77,137513,66434],{"class":94},[77,137515,104],{"class":87},[77,137517,137518,137521,137523,137525],{"class":79,"line":1549},[77,137519,137520],{"class":94},"  border-bottom-color",[77,137522,98],{"class":87},[77,137524,64813],{"class":94},[77,137526,104],{"class":87},[77,137528,137529],{"class":79,"line":1566},[77,137530,110],{"class":87},[67,137532,137533],{"className":69,"code":2102,"language":71,"meta":72,"style":72},[74,137534,137535,137541,137557],{"__ignoreMap":72},[77,137536,137537,137539],{"class":79,"line":80},[77,137538,331],{"class":158},[77,137540,88],{"class":87},[77,137542,137543,137545,137547,137549,137551,137553,137555],{"class":79,"line":91},[77,137544,2115],{"class":94},[77,137546,98],{"class":87},[77,137548,2120],{"class":94},[77,137550,2124],{"class":2123},[77,137552,2127],{"class":94},[77,137554,2130],{"class":94},[77,137556,104],{"class":87},[77,137558,137559],{"class":79,"line":107},[77,137560,110],{"class":87},[40,137562],{"style":42,"src":137563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137565,137567],{"id":137566},"_132-css用户界面样式","13.2 css用户界面样式",[19,137569,137571],{"id":137570},"_1321-鼠标样式","13.2.1 鼠标样式",[67,137573,137575],{"className":69,"code":137574,"language":71,"meta":72,"style":72},"\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",[74,137576,137577,137582,137601,137619,137638,137655],{"__ignoreMap":72},[77,137578,137579],{"class":79,"line":80},[77,137580,137581],{"class":323},"\u002F* 鼠标样式 *\u002F\n",[77,137583,137584,137586,137588,137591,137593,137595,137598],{"class":79,"line":91},[77,137585,331],{"class":158},[77,137587,1508],{"class":87},[77,137589,137590],{"class":94},"cursor",[77,137592,98],{"class":87},[77,137594,64474],{"class":94},[77,137596,137597],{"class":87},"; }   ",[77,137599,137600],{"class":323},"\u002F* 手型 *\u002F\n",[77,137602,137603,137605,137607,137609,137611,137614,137616],{"class":79,"line":107},[77,137604,331],{"class":158},[77,137606,1508],{"class":87},[77,137608,137590],{"class":94},[77,137610,98],{"class":87},[77,137612,137613],{"class":94},"default",[77,137615,137597],{"class":87},[77,137617,137618],{"class":323},"\u002F* 默认 *\u002F\n",[77,137620,137621,137623,137625,137627,137629,137632,137635],{"class":79,"line":191},[77,137622,331],{"class":158},[77,137624,1508],{"class":87},[77,137626,137590],{"class":94},[77,137628,98],{"class":87},[77,137630,137631],{"class":94},"move",[77,137633,137634],{"class":87},"; }      ",[77,137636,137637],{"class":323},"\u002F* 移动 *\u002F\n",[77,137639,137640,137642,137644,137646,137648,137650,137652],{"class":79,"line":1543},[77,137641,331],{"class":158},[77,137643,1508],{"class":87},[77,137645,137590],{"class":94},[77,137647,98],{"class":87},[77,137649,7662],{"class":94},[77,137651,137634],{"class":87},[77,137653,137654],{"class":323},"\u002F* 文本 *\u002F\n",[77,137656,137657,137659,137661,137663,137665,137668,137671],{"class":79,"line":1549},[77,137658,331],{"class":158},[77,137660,1508],{"class":87},[77,137662,137590],{"class":94},[77,137664,98],{"class":87},[77,137666,137667],{"class":94},"not-allowed",[77,137669,137670],{"class":87},"; } ",[77,137672,137673],{"class":323},"\u002F* 禁止 *\u002F\n",[2755,137675,137676,137684],{},[2758,137677,137678],{},[2761,137679,137680,137682],{},[2764,137681,129445],{"align":101},[2764,137683,29957],{"align":101},[2801,137685,137686,137693,137700,137707,137714],{},[2761,137687,137688,137690],{},[2806,137689,137613],{"align":101},[2806,137691,137692],{"align":101},"小白 默认",[2761,137694,137695,137697],{},[2806,137696,64474],{"align":101},[2806,137698,137699],{"align":101},"小手",[2761,137701,137702,137704],{},[2806,137703,137631],{"align":101},[2806,137705,137706],{"align":101},"移动",[2761,137708,137709,137711],{},[2806,137710,7662],{"align":101},[2806,137712,137713],{"align":101},"文本",[2761,137715,137716,137718],{},[2806,137717,137667],{"align":101},[2806,137719,137720],{"align":101},"禁止",[19,137722,137724],{"id":137723},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[24,137726,137727],{},"去除表单轮廓线",[24,137729,137730],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[67,137732,137733],{"className":69,"code":132337,"language":71,"meta":72,"style":72},[74,137734,137735,137739,137745,137761],{"__ignoreMap":72},[77,137736,137737],{"class":79,"line":80},[77,137738,132344],{"class":323},[77,137740,137741,137743],{"class":79,"line":91},[77,137742,331],{"class":158},[77,137744,88],{"class":87},[77,137746,137747,137749,137751,137753,137755,137757,137759],{"class":79,"line":107},[77,137748,2115],{"class":94},[77,137750,98],{"class":87},[77,137752,2120],{"class":94},[77,137754,2124],{"class":2123},[77,137756,2127],{"class":94},[77,137758,2130],{"class":94},[77,137760,104],{"class":87},[77,137762,137763],{"class":79,"line":191},[77,137764,110],{"class":87},[24,137766,137767],{},"文本域：",[40,137769],{"style":42,"src":137770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[24,137772,137773],{},"此时会有一个空白区域",[40,137775],{"style":42,"src":137776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[24,137778,137779],{},"写在同一行就不会出现这个问题",[40,137781],{"style":42,"src":137782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[24,137784,137785],{},"文本域是行内块元素，一定记住！！！",[24,137787,100669],{},[40,137789],{"style":42,"src":137790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[24,137792,137793],{},"文本域尽量放在一行",[24,137795,137796],{},"知识回顾：cols是列，rols是行",[40,137798],{"style":42,"src":137799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[24,137801,137802],{},"它可以进行拖动，显然这是我们不愿意看到的",[40,137804],{"style":42,"src":137805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[24,137807,137808],{},"使用resize进行解决",[67,137810,137812],{"className":69,"code":137811,"language":71,"meta":72,"style":72},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[74,137813,137814,137820,137833],{"__ignoreMap":72},[77,137815,137816,137818],{"class":79,"line":80},[77,137817,159],{"class":158},[77,137819,88],{"class":87},[77,137821,137822,137824,137826,137828,137830],{"class":79,"line":91},[77,137823,181],{"class":94},[77,137825,98],{"class":87},[77,137827,186],{"class":94},[77,137829,132834],{"class":87},[77,137831,137832],{"class":323},"\u002F* 取消表单轮廓线 *\u002F\n",[77,137834,137835],{"class":79,"line":107},[77,137836,110],{"class":87},[24,137838,137839],{},"此时就无法通过右下方实现拖动了",[19,137841,137843],{"id":137842},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[24,137845,137846],{},"实现一个盒子中的文字和图片对齐",[24,137848,137849,137850,137853],{},"用于设置一个元素的 ",[27,137851,137852],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[24,137855,137856],{},"图片和文字默认是基线对齐",[40,137858],{"style":42,"src":137859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[67,137861,137862],{"className":69,"code":137811,"language":71,"meta":72,"style":72},[74,137863,137864,137870,137882],{"__ignoreMap":72},[77,137865,137866,137868],{"class":79,"line":80},[77,137867,159],{"class":158},[77,137869,88],{"class":87},[77,137871,137872,137874,137876,137878,137880],{"class":79,"line":91},[77,137873,181],{"class":94},[77,137875,98],{"class":87},[77,137877,186],{"class":94},[77,137879,132834],{"class":87},[77,137881,137832],{"class":323},[77,137883,137884],{"class":79,"line":107},[77,137885,110],{"class":87},[40,137887],{"style":42,"src":137888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24468,137890,137892],{"id":137891},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[24,137894,137895],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[40,137897],{"style":42,"src":137898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[24,137900,137901,137902,137905],{},"此时可以给图片、表单这些行内块元素的 ",[27,137903,137904],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24468,137907,137909],{"id":137908},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[24,137911,137912],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[24,137914,17105],{},[67,137916,137918],{"className":69,"code":137917,"language":71,"meta":72,"style":72},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[74,137919,137920,137925,137931,137943],{"__ignoreMap":72},[77,137921,137922],{"class":79,"line":80},[77,137923,137924],{"class":323},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[77,137926,137927,137929],{"class":79,"line":91},[77,137928,40],{"class":158},[77,137930,88],{"class":87},[77,137932,137933,137936,137938,137941],{"class":79,"line":107},[77,137934,137935],{"class":94},"  vertical-align",[77,137937,98],{"class":87},[77,137939,137940],{"class":94},"middle",[77,137942,104],{"class":87},[77,137944,137945],{"class":79,"line":191},[77,137946,110],{"class":87},[40,137948],{"style":42,"src":137949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[24,137951,137952],{},"主要解决方法有两种：",[139,137954,137955],{},[54,137956,137957,137960,137961,137964],{},[27,137958,137959],{},"给图片"," 添加 ",[27,137962,137963],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[24,137966,137967,137968],{},"2.把图片转换为块级元素 ",[27,137969,137970],{},"display: block",[24,137972,137973],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[24,137975,137976],{},"img {",[24,137978,137979],{},"vertical-align:middle;",[24,137981,3558],{},[19,137983,137985],{"id":137984},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[24,137987,137988],{},"效果：",[40,137990],{"style":42,"src":137991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[24,137993,137994],{},"单行文本溢出显示省略号--必须满足三个条件：",[67,137996,137998],{"className":69,"code":137997,"language":71,"meta":72,"style":72},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[74,137999,138000,138005,138011,138021,138026,138036],{"__ignoreMap":72},[77,138001,138002],{"class":79,"line":80},[77,138003,138004],{"class":323},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[77,138006,138007,138009],{"class":79,"line":91},[77,138008,40],{"class":158},[77,138010,88],{"class":87},[77,138012,138013,138015,138017,138019],{"class":79,"line":107},[77,138014,137935],{"class":94},[77,138016,98],{"class":87},[77,138018,137940],{"class":94},[77,138020,104],{"class":87},[77,138022,138023],{"class":79,"line":191},[77,138024,138025],{"class":323},"  \u002F* 或 *\u002F\n",[77,138027,138028,138030,138032,138034],{"class":79,"line":1543},[77,138029,451],{"class":94},[77,138031,98],{"class":87},[77,138033,456],{"class":94},[77,138035,104],{"class":87},[77,138037,138038],{"class":79,"line":1549},[77,138039,110],{"class":87},[19,138041,138043],{"id":138042},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[24,138045,137988],{},[40,138047],{"style":42,"src":138048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[24,138050,138051,138052,138055],{},"多行文本溢出显示省略号， ",[27,138053,138054],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[67,138057,138058],{"className":69,"code":137997,"language":71,"meta":72,"style":72},[74,138059,138060,138064,138070,138080,138084,138094],{"__ignoreMap":72},[77,138061,138062],{"class":79,"line":80},[77,138063,138004],{"class":323},[77,138065,138066,138068],{"class":79,"line":91},[77,138067,40],{"class":158},[77,138069,88],{"class":87},[77,138071,138072,138074,138076,138078],{"class":79,"line":107},[77,138073,137935],{"class":94},[77,138075,98],{"class":87},[77,138077,137940],{"class":94},[77,138079,104],{"class":87},[77,138081,138082],{"class":79,"line":191},[77,138083,138025],{"class":323},[77,138085,138086,138088,138090,138092],{"class":79,"line":1543},[77,138087,451],{"class":94},[77,138089,98],{"class":87},[77,138091,456],{"class":94},[77,138093,104],{"class":87},[77,138095,138096],{"class":79,"line":1549},[77,138097,110],{"class":87},[24,138099,138100],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138102,138104],{"id":138103},"_133-常见布局技巧","13.3 常见布局技巧",[24,138106,138107],{},[27,138108,138109],{},"巧妙利用一个技术更快更好的布局：",[139,138111,138112,138115,138118,138121],{},[54,138113,138114],{},"margin负值的运用",[54,138116,138117],{},"文字围绕浮动元素",[54,138119,138120],{},"行内块的巧妙运用",[54,138122,138123],{},"CSS三角强化",[19,138125,138127],{"id":138126},"_1331-margin负值的运用","13.3.1 margin负值的运用",[24,138129,138130],{},"应用场景：",[40,138132],{"style":42,"src":138133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[40,138135],{"style":42,"src":138136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[24,138138,138139],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[24,138141,138142],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[67,138144,138145],{"className":69,"code":132337,"language":71,"meta":72,"style":72},[74,138146,138147,138151,138157,138173],{"__ignoreMap":72},[77,138148,138149],{"class":79,"line":80},[77,138150,132344],{"class":323},[77,138152,138153,138155],{"class":79,"line":91},[77,138154,331],{"class":158},[77,138156,88],{"class":87},[77,138158,138159,138161,138163,138165,138167,138169,138171],{"class":79,"line":107},[77,138160,2115],{"class":94},[77,138162,98],{"class":87},[77,138164,2120],{"class":94},[77,138166,2124],{"class":2123},[77,138168,2127],{"class":94},[77,138170,2130],{"class":94},[77,138172,104],{"class":87},[77,138174,138175],{"class":79,"line":191},[77,138176,110],{"class":87},[40,138178],{"style":42,"src":138179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[24,138181,138182],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[67,138184,138186],{"className":69,"code":138185,"language":71,"meta":72,"style":72},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[74,138187,138188,138193,138199,138209,138221,138233],{"__ignoreMap":72},[77,138189,138190],{"class":79,"line":80},[77,138191,138192],{"class":323},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[77,138194,138195,138197],{"class":79,"line":91},[77,138196,84],{"class":83},[77,138198,88],{"class":87},[77,138200,138201,138203,138205,138207],{"class":79,"line":107},[77,138202,134756],{"class":94},[77,138204,98],{"class":87},[77,138206,1538],{"class":94},[77,138208,104],{"class":87},[77,138210,138211,138213,138215,138217,138219],{"class":79,"line":191},[77,138212,134770],{"class":94},[77,138214,98],{"class":87},[77,138216,3059],{"class":94},[77,138218,2124],{"class":2123},[77,138220,104],{"class":87},[77,138222,138223,138225,138227,138229,138231],{"class":79,"line":1543},[77,138224,134787],{"class":94},[77,138226,98],{"class":87},[77,138228,3313],{"class":94},[77,138230,2124],{"class":2123},[77,138232,104],{"class":87},[77,138234,138235],{"class":79,"line":1549},[77,138236,110],{"class":87},[24,138238,138239],{},"加上上述代码会发现：",[40,138241],{"style":42,"src":138242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[24,138244,138245],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[24,138247,138248],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[67,138250,138251],{"className":69,"code":138185,"language":71,"meta":72,"style":72},[74,138252,138253,138257,138263,138273,138285,138297],{"__ignoreMap":72},[77,138254,138255],{"class":79,"line":80},[77,138256,138192],{"class":323},[77,138258,138259,138261],{"class":79,"line":91},[77,138260,84],{"class":83},[77,138262,88],{"class":87},[77,138264,138265,138267,138269,138271],{"class":79,"line":107},[77,138266,134756],{"class":94},[77,138268,98],{"class":87},[77,138270,1538],{"class":94},[77,138272,104],{"class":87},[77,138274,138275,138277,138279,138281,138283],{"class":79,"line":191},[77,138276,134770],{"class":94},[77,138278,98],{"class":87},[77,138280,3059],{"class":94},[77,138282,2124],{"class":2123},[77,138284,104],{"class":87},[77,138286,138287,138289,138291,138293,138295],{"class":79,"line":1543},[77,138288,134787],{"class":94},[77,138290,98],{"class":87},[77,138292,3313],{"class":94},[77,138294,2124],{"class":2123},[77,138296,104],{"class":87},[77,138298,138299],{"class":79,"line":1549},[77,138300,110],{"class":87},[24,138302,138303],{},"解决方式2：",[24,138305,138306],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[67,138308,138310],{"className":69,"code":138309,"language":71,"meta":72,"style":72},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[74,138311,138312,138318,138328,138340,138352],{"__ignoreMap":72},[77,138313,138314,138316],{"class":79,"line":80},[77,138315,331],{"class":158},[77,138317,88],{"class":87},[77,138319,138320,138322,138324,138326],{"class":79,"line":91},[77,138321,134756],{"class":94},[77,138323,98],{"class":87},[77,138325,1538],{"class":94},[77,138327,104],{"class":87},[77,138329,138330,138332,138334,138336,138338],{"class":79,"line":107},[77,138331,134770],{"class":94},[77,138333,98],{"class":87},[77,138335,3059],{"class":94},[77,138337,2124],{"class":2123},[77,138339,104],{"class":87},[77,138341,138342,138344,138346,138348,138350],{"class":79,"line":191},[77,138343,134787],{"class":94},[77,138345,98],{"class":87},[77,138347,3313],{"class":94},[77,138349,2124],{"class":2123},[77,138351,104],{"class":87},[77,138353,138354],{"class":79,"line":1543},[77,138355,110],{"class":87},[19,138357,138359],{"id":138358},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[24,138361,138130],{},[40,138363],{"style":42,"src":138364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[24,138366,138367],{},"实现结构图：",[40,138369],{"style":42,"src":138370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[24,138372,138373],{},"巧妙运用浮动元素不会压住文字的特性",[24,138375,138376],{},"代码显示：",[67,138378,138380],{"className":69,"code":138379,"language":71,"meta":72,"style":72},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[74,138381,138382,138388,138398,138402,138407,138411,138417,138431],{"__ignoreMap":72},[77,138383,138384,138386],{"class":79,"line":80},[77,138385,84],{"class":83},[77,138387,88],{"class":87},[77,138389,138390,138392,138394,138396],{"class":79,"line":91},[77,138391,95],{"class":94},[77,138393,98],{"class":87},[77,138395,101],{"class":94},[77,138397,104],{"class":87},[77,138399,138400],{"class":79,"line":107},[77,138401,110],{"class":87},[77,138403,138404],{"class":79,"line":191},[77,138405,138406],{"class":87},"```Css\n",[77,138408,138409],{"class":79,"line":1543},[77,138410,132815],{"class":323},[77,138412,138413,138415],{"class":79,"line":1549},[77,138414,84],{"class":83},[77,138416,88],{"class":87},[77,138418,138419,138421,138423,138425,138427,138429],{"class":79,"line":1566},[77,138420,1934],{"class":94},[77,138422,98],{"class":87},[77,138424,1939],{"class":94},[77,138426,1942],{"class":94},[77,138428,132834],{"class":87},[77,138430,132837],{"class":323},[77,138432,138433],{"class":79,"line":1572},[77,138434,110],{"class":87},[24,138436,138437],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[67,138439,138442],{"className":138440,"code":138441,"language":7662},[7660],"\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",[74,138443,138441],{"__ignoreMap":72},[40,138445],{"style":42,"src":138446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[24,138448,138449],{},"最终展示结果：",[67,138451,138452],{"className":69,"code":132808,"language":71,"meta":72,"style":72},[74,138453,138454,138458,138464,138478],{"__ignoreMap":72},[77,138455,138456],{"class":79,"line":80},[77,138457,132815],{"class":323},[77,138459,138460,138462],{"class":79,"line":91},[77,138461,84],{"class":83},[77,138463,88],{"class":87},[77,138465,138466,138468,138470,138472,138474,138476],{"class":79,"line":107},[77,138467,1934],{"class":94},[77,138469,98],{"class":87},[77,138471,1939],{"class":94},[77,138473,1942],{"class":94},[77,138475,132834],{"class":87},[77,138477,132837],{"class":323},[77,138479,138480],{"class":79,"line":191},[77,138481,110],{"class":87},[40,138483],{"style":42,"src":138484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138486,138488],{"id":138487},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[19,138490,138492],{"id":138491},"_1341-原理","13.4.1 原理",[40,138494],{"style":42,"src":138495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[67,138497,138498],{"className":69,"code":132808,"language":71,"meta":72,"style":72},[74,138499,138500,138504,138510,138524],{"__ignoreMap":72},[77,138501,138502],{"class":79,"line":80},[77,138503,132815],{"class":323},[77,138505,138506,138508],{"class":79,"line":91},[77,138507,84],{"class":83},[77,138509,88],{"class":87},[77,138511,138512,138514,138516,138518,138520,138522],{"class":79,"line":107},[77,138513,1934],{"class":94},[77,138515,98],{"class":87},[77,138517,1939],{"class":94},[77,138519,1942],{"class":94},[77,138521,132834],{"class":87},[77,138523,132837],{"class":323},[77,138525,138526],{"class":79,"line":191},[77,138527,110],{"class":87},[19,138529,138531],{"id":138530},"_1342-实例","13.4.2 实例",[40,138533],{"style":42,"src":138534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[67,138536,138537],{"className":69,"code":133432,"language":71,"meta":72,"style":72},[74,138538,138539,138545,138555,138559,138565,138575],{"__ignoreMap":72},[77,138540,138541,138543],{"class":79,"line":80},[77,138542,133439],{"class":83},[77,138544,88],{"class":87},[77,138546,138547,138549,138551,138553],{"class":79,"line":91},[77,138548,95],{"class":94},[77,138550,98],{"class":87},[77,138552,101],{"class":94},[77,138554,104],{"class":87},[77,138556,138557],{"class":79,"line":107},[77,138558,110],{"class":87},[77,138560,138561,138563],{"class":79,"line":191},[77,138562,133460],{"class":83},[77,138564,88],{"class":87},[77,138566,138567,138569,138571,138573],{"class":79,"line":1543},[77,138568,95],{"class":94},[77,138570,98],{"class":87},[77,138572,74961],{"class":94},[77,138574,104],{"class":87},[77,138576,138577],{"class":79,"line":1549},[77,138578,110],{"class":87},[14,138580,138582],{"id":138581},"_135-css的初始化","13.5 css的初始化",[24,138584,138585],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[24,138587,138588],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[24,138590,138591],{},"每个网页都必须首先进行 CSS初始化。",[24,138593,138594],{},"这里我们以 京东CSS初始化代码为例。",[24,138596,138597],{},"在网页右键查看网页源代码",[24,138599,138600],{},"找到css的link引入语句",[24,138602,138603],{},"然后ctrl+f 输入body",[24,138605,79664],{},[40,138607],{"style":42,"src":138608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[24,138610,79687],{},[40,138612],{"style":42,"src":138613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[24,138615,138616],{},"③打开了网页上传压缩的代码",[40,138618],{"style":42,"src":138619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[24,138621,138622],{},"④从body前可以查看这个网页的初始化代码",[24,138624,138625],{},[27,138626,138627],{},"Unicode编码字体：",[24,138629,138630],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[24,138632,85644],{},[24,138634,138635],{},"黑体 \\9ED1\\4F53",[24,138637,138638],{},"宋体 \\5B8B\\4F53",[24,138640,138641],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2520,138643,138644],{},"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":72,"searchDepth":91,"depth":91,"links":138646},[138647,138648,138655,138659,138663],{"id":137444,"depth":91,"text":137445},{"id":137566,"depth":91,"text":137567,"children":138649},[138650,138651,138652,138653,138654],{"id":137570,"depth":107,"text":137571},{"id":137723,"depth":107,"text":137724},{"id":137842,"depth":107,"text":137843},{"id":137984,"depth":107,"text":137985},{"id":138042,"depth":107,"text":138043},{"id":138103,"depth":91,"text":138104,"children":138656},[138657,138658],{"id":138126,"depth":107,"text":138127},{"id":138358,"depth":107,"text":138359},{"id":138487,"depth":91,"text":138488,"children":138660},[138661,138662],{"id":138491,"depth":107,"text":138492},{"id":138530,"depth":107,"text":138531},{"id":138581,"depth":91,"text":138582},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137436,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138670,"title":138671,"body":138672,"description":2546,"extension":2547,"meta":140353,"navigation":2549,"path":140354,"seo":140355,"stem":140356,"__hash__":140357},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138673,"toc":140342},[138674,138677,138681,138685,138688,138695,138698,138701,138739,138742,138744,138758,138762,138771,138775,138780,138783,138786,138789,138824,138829,138832,138862,138865,138870,138873,138876,138906,138909,138963,138966,138970,138975,138987,138990,138994,139024,139027,139032,139035,139065,139068,139072,139089,139093,139097,139100,139130,139133,139137,139140,139143,139146,139149,139152,139263,139266,139269,139272,139374,139377,139381,139385,139389,139392,139432,139435,139437,139453,139457,139460,139465,139546,139549,139552,139678,139683,139686,139694,139697,139702,139787,139790,139794,139797,139800,139804,139824,139829,139913,139916,139921,139924,139927,140003,140006,140009,140012,140015,140018,140023,140026,140029,140101,140104,140109,140112,140209,140212,140218,140221,140224,140227,140230,140233,140236,140239,140242,140246,140251,140254,140287,140292,140295,140336,140339],[10,138675,138671],{"id":138676},"_14-html5与css3新特性",[14,138678,138680],{"id":138679},"_141-html5的新特性","14.1 HTML5的新特性",[19,138682,138684],{"id":138683},"_1411-基本标签","14.1.1 基本标签",[24,138686,138687],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[24,138689,138690,138691,138694],{},"这些新特性都有兼容性问题，基本是 ",[27,138692,138693],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[24,138696,138697],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[24,138699,138700],{},"现在使用的是新特性：",[51,138702,138703,138709,138715,138721,138727,138733],{},[54,138704,138705,138708],{},[74,138706,138707],{},"\u003Cheader>"," 头部标签",[54,138710,138711,138714],{},[74,138712,138713],{},"\u003Cnav>"," 导航标签",[54,138716,138717,138720],{},[74,138718,138719],{},"\u003Carticle>"," 内容标签",[54,138722,138723,138726],{},[74,138724,138725],{},"\u003Csection>"," 定义文档某个区域",[54,138728,138729,138732],{},[74,138730,138731],{},"\u003Caside>"," 侧边栏标签",[54,138734,138735,138738],{},[74,138736,138737],{},"\u003Cfooter>"," 尾部标签",[40,138740],{"style":42,"src":138741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[24,138743,2651],{},[51,138745,138746,138749,138752,138755],{},[54,138747,138748],{},"这种语义化标准主要是针对搜索引擎的",[54,138750,138751],{},"这些标签页面中可以经常使用",[54,138753,138754],{},"在IE9中，需要把这些元素转换为块级元素",[54,138756,138757],{},"移动端更喜欢使用这些标签",[19,138759,138761],{"id":138760},"_1412-多媒体标签","14.1.2 多媒体标签",[24,138763,138764,138765,138767,138768,138770],{},"音频 ",[27,138766,30642],{}," 和视频 ",[27,138769,30651],{}," 两个标签",[24468,138772,138774],{"id":138773},"_14121-视频标签-video","14.1.2.1 视频标签- video",[139,138776,138777],{},[54,138778,138779],{},"支持格式：",[40,138781],{"style":42,"src":138782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[24,138784,138785],{},"尽量使用MP4，兼容性好",[24,138787,138788],{},"用MP4就可以",[67,138790,138792],{"className":251,"code":138791,"language":253,"meta":72,"style":72},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[74,138793,138794],{"__ignoreMap":72},[77,138795,138796,138798,138800,138802,138804,138807,138809,138812,138815,138818,138820,138822],{"class":79,"line":80},[77,138797,260],{"class":87},[77,138799,30651],{"class":158},[77,138801,265],{"class":83},[77,138803,268],{"class":87},[77,138805,138806],{"class":271},"\"movie.mp4\"",[77,138808,94859],{"class":83},[77,138810,138811],{"class":83}," autoplay",[77,138813,138814],{"class":83}," muted",[77,138816,138817],{"class":83}," loop",[77,138819,57762],{"class":87},[77,138821,30651],{"class":158},[77,138823,291],{"class":87},[139,138825,138826],{"start":91},[54,138827,138828],{},"兼容写法",[24,138830,138831],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[67,138833,138834],{"className":251,"code":138791,"language":253,"meta":72,"style":72},[74,138835,138836],{"__ignoreMap":72},[77,138837,138838,138840,138842,138844,138846,138848,138850,138852,138854,138856,138858,138860],{"class":79,"line":80},[77,138839,260],{"class":87},[77,138841,30651],{"class":158},[77,138843,265],{"class":83},[77,138845,268],{"class":87},[77,138847,138806],{"class":271},[77,138849,94859],{"class":83},[77,138851,138811],{"class":83},[77,138853,138814],{"class":83},[77,138855,138817],{"class":83},[77,138857,57762],{"class":87},[77,138859,30651],{"class":158},[77,138861,291],{"class":87},[24,138863,138864],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[139,138866,138867],{"start":107},[54,138868,138869],{},"video常用属性",[40,138871],{"style":42,"src":138872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[24,138874,138875],{},"poster属性后面是跟的等待加载图片的地址",[67,138877,138878],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,138879,138880],{"__ignoreMap":72},[77,138881,138882,138884,138886,138888,138890,138892,138894,138896,138898,138900,138902,138904],{"class":79,"line":80},[77,138883,260],{"class":87},[77,138885,40],{"class":158},[77,138887,265],{"class":83},[77,138889,268],{"class":87},[77,138891,272],{"class":271},[77,138893,275],{"class":83},[77,138895,268],{"class":87},[77,138897,280],{"class":271},[77,138899,283],{"class":83},[77,138901,268],{"class":87},[77,138903,288],{"class":271},[77,138905,291],{"class":87},[24,138907,138908],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[67,138910,138912],{"className":69,"code":138911,"language":71,"meta":72,"style":72},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[74,138913,138914,138919,138925,138949,138954,138959],{"__ignoreMap":72},[77,138915,138916],{"class":79,"line":80},[77,138917,138918],{"class":323},"\u002F* 2D 位移 *\u002F\n",[77,138920,138921,138923],{"class":79,"line":91},[77,138922,331],{"class":158},[77,138924,88],{"class":87},[77,138926,138927,138930,138932,138935,138937,138939,138941,138943,138945,138947],{"class":79,"line":107},[77,138928,138929],{"class":94},"  transform",[77,138931,98],{"class":87},[77,138933,138934],{"class":94},"translate",[77,138936,2622],{"class":87},[77,138938,2925],{"class":94},[77,138940,2124],{"class":2123},[77,138942,680],{"class":87},[77,138944,3269],{"class":94},[77,138946,2124],{"class":2123},[77,138948,5194],{"class":87},[77,138950,138951],{"class":79,"line":191},[77,138952,138953],{"class":323},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[77,138955,138956],{"class":79,"line":1543},[77,138957,138958],{"class":323},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[77,138960,138961],{"class":79,"line":1549},[77,138962,110],{"class":87},[24,138964,138965],{},"muted:自动静音属性",[24468,138967,138969],{"id":138968},"_14122-音频标签audio","14.1.2.2 音频标签audio",[139,138971,138972],{},[54,138973,138974],{},"基本使用",[24,138976,138977,138978,138983,138984],{},"当前 ",[27,138979,138980],{},[74,138981,138982],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[27,138985,138986],{},"mp3格式",[40,138988],{"style":42,"src":138989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[139,138991,138992],{"start":91},[54,138993,138828],{},[67,138995,138996],{"className":251,"code":138791,"language":253,"meta":72,"style":72},[74,138997,138998],{"__ignoreMap":72},[77,138999,139000,139002,139004,139006,139008,139010,139012,139014,139016,139018,139020,139022],{"class":79,"line":80},[77,139001,260],{"class":87},[77,139003,30651],{"class":158},[77,139005,265],{"class":83},[77,139007,268],{"class":87},[77,139009,138806],{"class":271},[77,139011,94859],{"class":83},[77,139013,138811],{"class":83},[77,139015,138814],{"class":83},[77,139017,138817],{"class":83},[77,139019,57762],{"class":87},[77,139021,30651],{"class":158},[77,139023,291],{"class":87},[24,139025,139026],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[139,139028,139029],{"start":107},[54,139030,139031],{},"常用属性",[40,139033],{"style":42,"src":139034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[67,139036,139037],{"className":251,"code":138791,"language":253,"meta":72,"style":72},[74,139038,139039],{"__ignoreMap":72},[77,139040,139041,139043,139045,139047,139049,139051,139053,139055,139057,139059,139061,139063],{"class":79,"line":80},[77,139042,260],{"class":87},[77,139044,30651],{"class":158},[77,139046,265],{"class":83},[77,139048,268],{"class":87},[77,139050,138806],{"class":271},[77,139052,94859],{"class":83},[77,139054,138811],{"class":83},[77,139056,138814],{"class":83},[77,139058,138817],{"class":83},[77,139060,57762],{"class":87},[77,139062,30651],{"class":158},[77,139064,291],{"class":87},[24,139066,139067],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24468,139069,139071],{"id":139070},"_14123-总结","14.1.2.3 总结",[51,139073,139074,139077,139080,139083,139086],{},[54,139075,139076],{},"音频标签和视频标签使用方式基本一致",[54,139078,139079],{},"浏览器支持情况不同",[54,139081,139082],{},"谷歌浏览器把音频和视频自动播放禁止了",[54,139084,139085],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[54,139087,139088],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[19,139090,139092],{"id":139091},"_1413-表单元素","14.1.3 表单元素",[24468,139094,139096],{"id":139095},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[40,139098],{"style":42,"src":139099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[67,139101,139102],{"className":251,"code":2476,"language":253,"meta":72,"style":72},[74,139103,139104],{"__ignoreMap":72},[77,139105,139106,139108,139110,139112,139114,139116,139118,139120,139122,139124,139126,139128],{"class":79,"line":80},[77,139107,260],{"class":87},[77,139109,159],{"class":158},[77,139111,2487],{"class":83},[77,139113,268],{"class":87},[77,139115,2492],{"class":271},[77,139117,2495],{"class":83},[77,139119,268],{"class":87},[77,139121,2500],{"class":271},[77,139123,2503],{"class":83},[77,139125,268],{"class":87},[77,139127,2508],{"class":271},[77,139129,291],{"class":87},[40,139131],{"style":42,"src":139132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24468,139134,139136],{"id":139135},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[40,139138],{"style":42,"src":139139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[24,139141,139142],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[24,139144,139145],{},"快捷操作：",[40,139147],{"style":42,"src":139148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[24,139150,139151],{},"例子1：",[67,139153,139155],{"className":251,"code":139154,"language":253,"meta":72,"style":72},"\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",[74,139156,139157,139180,139207,139236,139255],{"__ignoreMap":72},[77,139158,139159,139161,139163,139165,139167,139170,139173,139175,139178],{"class":79,"line":80},[77,139160,260],{"class":87},[77,139162,69068],{"class":158},[77,139164,69071],{"class":83},[77,139166,268],{"class":87},[77,139168,139169],{"class":271},"\"\u002Fsubmit\"",[77,139171,139172],{"class":83}," method",[77,139174,268],{"class":87},[77,139176,139177],{"class":271},"\"post\"",[77,139179,291],{"class":87},[77,139181,139182,139184,139186,139188,139190,139192,139194,139196,139198,139200,139202,139205],{"class":79,"line":91},[77,139183,54602],{"class":87},[77,139185,159],{"class":158},[77,139187,2487],{"class":83},[77,139189,268],{"class":87},[77,139191,2492],{"class":271},[77,139193,2495],{"class":83},[77,139195,268],{"class":87},[77,139197,2500],{"class":271},[77,139199,2503],{"class":83},[77,139201,268],{"class":87},[77,139203,139204],{"class":271},"\"用户名\"",[77,139206,291],{"class":87},[77,139208,139209,139211,139213,139215,139217,139220,139222,139224,139227,139229,139231,139234],{"class":79,"line":107},[77,139210,54602],{"class":87},[77,139212,159],{"class":158},[77,139214,2487],{"class":83},[77,139216,268],{"class":87},[77,139218,139219],{"class":271},"\"password\"",[77,139221,2495],{"class":83},[77,139223,268],{"class":87},[77,139225,139226],{"class":271},"\"pwd\"",[77,139228,2503],{"class":83},[77,139230,268],{"class":87},[77,139232,139233],{"class":271},"\"密码\"",[77,139235,291],{"class":87},[77,139237,139238,139240,139242,139244,139246,139248,139251,139253],{"class":79,"line":191},[77,139239,54602],{"class":87},[77,139241,56341],{"class":158},[77,139243,2487],{"class":83},[77,139245,268],{"class":87},[77,139247,69091],{"class":271},[77,139249,139250],{"class":87},">提交\u003C\u002F",[77,139252,56341],{"class":158},[77,139254,291],{"class":87},[77,139256,139257,139259,139261],{"class":79,"line":1543},[77,139258,351],{"class":87},[77,139260,69068],{"class":158},[77,139262,291],{"class":87},[40,139264],{"style":42,"src":139265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[24,139267,139268],{},"value是表单域的内容",[24,139270,139271],{},"例子2：",[67,139273,139274],{"className":251,"code":139154,"language":253,"meta":72,"style":72},[74,139275,139276,139296,139322,139348,139366],{"__ignoreMap":72},[77,139277,139278,139280,139282,139284,139286,139288,139290,139292,139294],{"class":79,"line":80},[77,139279,260],{"class":87},[77,139281,69068],{"class":158},[77,139283,69071],{"class":83},[77,139285,268],{"class":87},[77,139287,139169],{"class":271},[77,139289,139172],{"class":83},[77,139291,268],{"class":87},[77,139293,139177],{"class":271},[77,139295,291],{"class":87},[77,139297,139298,139300,139302,139304,139306,139308,139310,139312,139314,139316,139318,139320],{"class":79,"line":91},[77,139299,54602],{"class":87},[77,139301,159],{"class":158},[77,139303,2487],{"class":83},[77,139305,268],{"class":87},[77,139307,2492],{"class":271},[77,139309,2495],{"class":83},[77,139311,268],{"class":87},[77,139313,2500],{"class":271},[77,139315,2503],{"class":83},[77,139317,268],{"class":87},[77,139319,139204],{"class":271},[77,139321,291],{"class":87},[77,139323,139324,139326,139328,139330,139332,139334,139336,139338,139340,139342,139344,139346],{"class":79,"line":107},[77,139325,54602],{"class":87},[77,139327,159],{"class":158},[77,139329,2487],{"class":83},[77,139331,268],{"class":87},[77,139333,139219],{"class":271},[77,139335,2495],{"class":83},[77,139337,268],{"class":87},[77,139339,139226],{"class":271},[77,139341,2503],{"class":83},[77,139343,268],{"class":87},[77,139345,139233],{"class":271},[77,139347,291],{"class":87},[77,139349,139350,139352,139354,139356,139358,139360,139362,139364],{"class":79,"line":191},[77,139351,54602],{"class":87},[77,139353,56341],{"class":158},[77,139355,2487],{"class":83},[77,139357,268],{"class":87},[77,139359,69091],{"class":271},[77,139361,139250],{"class":87},[77,139363,56341],{"class":158},[77,139365,291],{"class":87},[77,139367,139368,139370,139372],{"class":79,"line":1543},[77,139369,351],{"class":87},[77,139371,69068],{"class":158},[77,139373,291],{"class":87},[40,139375],{"style":42,"src":139376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139378,139380],{"id":139379},"_142-css新特性","14.2 CSS新特性",[19,139382,139384],{"id":139383},"_1421-新增选择器","14.2.1 新增选择器",[24468,139386,139388],{"id":139387},"_14211-属性选择器","14.2.1.1 属性选择器",[40,139390],{"style":42,"src":139391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[67,139393,139395],{"className":69,"code":139394,"language":71,"meta":72,"style":72},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[74,139396,139397,139412,139428],{"__ignoreMap":72},[77,139398,139399,139401,139403,139405,139407,139409],{"class":79,"line":80},[77,139400,159],{"class":158},[77,139402,3503],{"class":87},[77,139404,105540],{"class":83},[77,139406,268],{"class":2123},[77,139408,2492],{"class":271},[77,139410,139411],{"class":87},"] {\n",[77,139413,139414,139416,139418,139420,139422,139424,139426],{"class":79,"line":91},[77,139415,2115],{"class":94},[77,139417,98],{"class":87},[77,139419,2120],{"class":94},[77,139421,2124],{"class":2123},[77,139423,2127],{"class":94},[77,139425,132552],{"class":94},[77,139427,104],{"class":87},[77,139429,139430],{"class":79,"line":107},[77,139431,110],{"class":87},[40,139433],{"style":42,"src":139434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[24,139436,2651],{},[51,139438,139439,139442,139445,139448],{},[54,139440,139441],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[54,139443,139444],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[54,139446,139447],{},"属性选择器也可以选择出来自定义的属性",[54,139449,139450,139452],{},[27,139451,1988],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24468,139454,139456],{"id":139455},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[40,139458],{"style":42,"src":139459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[139,139461,139462],{},[54,139463,139464],{},"fist-child",[67,139466,139468],{"className":69,"code":139467,"language":71,"meta":72,"style":72},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[74,139469,139470,139475,139490,139510,139528],{"__ignoreMap":72},[77,139471,139472],{"class":79,"line":80},[77,139473,139474],{"class":323},"\u002F* 属性选择器 *\u002F\n",[77,139476,139477,139479,139481,139483,139485,139487],{"class":79,"line":91},[77,139478,159],{"class":158},[77,139480,3503],{"class":87},[77,139482,105540],{"class":83},[77,139484,268],{"class":2123},[77,139486,2492],{"class":271},[77,139488,139489],{"class":87},"] { }\n",[77,139491,139492,139494,139496,139498,139501,139504,139507],{"class":79,"line":107},[77,139493,159],{"class":158},[77,139495,3503],{"class":87},[77,139497,17166],{"class":83},[77,139499,139500],{"class":2123},"^=",[77,139502,139503],{"class":271},"\"icon\"",[77,139505,139506],{"class":87},"] { }  ",[77,139508,139509],{"class":323},"\u002F* 以 icon 开头 *\u002F\n",[77,139511,139512,139514,139516,139518,139521,139523,139525],{"class":79,"line":191},[77,139513,159],{"class":158},[77,139515,3503],{"class":87},[77,139517,17166],{"class":83},[77,139519,139520],{"class":2123},"$=",[77,139522,139503],{"class":271},[77,139524,139506],{"class":87},[77,139526,139527],{"class":323},"\u002F* 以 icon 结尾 *\u002F\n",[77,139529,139530,139532,139534,139536,139539,139541,139543],{"class":79,"line":1543},[77,139531,159],{"class":158},[77,139533,3503],{"class":87},[77,139535,17166],{"class":83},[77,139537,139538],{"class":2123},"*=",[77,139540,139503],{"class":271},[77,139542,139506],{"class":87},[77,139544,139545],{"class":323},"\u002F* 包含 icon *\u002F\n",[24,139547,139548],{},"ul的第一个儿子文本为红色",[24,139550,139551],{},"一定要在冒号前加空格，不然就是选中所有的了",[67,139553,139555],{"className":69,"code":139554,"language":71,"meta":72,"style":72},".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",[74,139556,139557,139563,139573,139577,139581,139586,139599,139612,139628,139645,139662],{"__ignoreMap":72},[77,139558,139559,139561],{"class":79,"line":80},[77,139560,129272],{"class":83},[77,139562,88],{"class":87},[77,139564,139565,139567,139569,139571],{"class":79,"line":91},[77,139566,73344],{"class":94},[77,139568,98],{"class":87},[77,139570,59869],{"class":94},[77,139572,104],{"class":87},[77,139574,139575],{"class":79,"line":107},[77,139576,110],{"class":87},[77,139578,139579],{"class":79,"line":191},[77,139580,138406],{"class":87},[77,139582,139583],{"class":79,"line":1543},[77,139584,139585],{"class":323},"\u002F* 结构伪类选择器 *\u002F\n",[77,139587,139588,139590,139593,139596],{"class":79,"line":1549},[77,139589,54],{"class":158},[77,139591,139592],{"class":83},":first-child",[77,139594,139595],{"class":87}," { }           ",[77,139597,139598],{"class":323},"\u002F* 第一个 *\u002F\n",[77,139600,139601,139603,139606,139609],{"class":79,"line":1566},[77,139602,54],{"class":158},[77,139604,139605],{"class":83},":last-child",[77,139607,139608],{"class":87}," { }            ",[77,139610,139611],{"class":323},"\u002F* 最后一个 *\u002F\n",[77,139613,139614,139616,139618,139620,139622,139625],{"class":79,"line":1572},[77,139615,54],{"class":158},[77,139617,131888],{"class":83},[77,139619,2622],{"class":87},[77,139621,2696],{"class":94},[77,139623,139624],{"class":87},") { }          ",[77,139626,139627],{"class":323},"\u002F* 第2个 *\u002F\n",[77,139629,139630,139632,139634,139636,139639,139642],{"class":79,"line":1589},[77,139631,54],{"class":158},[77,139633,131888],{"class":83},[77,139635,2622],{"class":87},[77,139637,139638],{"class":94},"2n",[77,139640,139641],{"class":87},") { }         ",[77,139643,139644],{"class":323},"\u002F* 偶数 *\u002F\n",[77,139646,139647,139649,139651,139653,139656,139659],{"class":79,"line":1595},[77,139648,54],{"class":158},[77,139650,131888],{"class":83},[77,139652,2622],{"class":87},[77,139654,139655],{"class":94},"2n+1",[77,139657,139658],{"class":87},") { }       ",[77,139660,139661],{"class":323},"\u002F* 奇数 *\u002F\n",[77,139663,139664,139666,139668,139670,139673,139675],{"class":79,"line":4088},[77,139665,54],{"class":158},[77,139667,131888],{"class":83},[77,139669,2622],{"class":87},[77,139671,139672],{"class":94},"-n+3",[77,139674,139658],{"class":87},[77,139676,139677],{"class":323},"\u002F* 前3个 *\u002F\n",[331,139679,139682],{"className":139680},[139681],"example","\n  示例内容\n",[24,139684,139685],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[51,139687,139688],{},[54,139689,139690,139693],{},[74,139691,139692],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[24,139695,139696],{},"也就是说它选择的是熊大",[139,139698,139699],{"start":1549},[54,139700,139701],{},"权重",[67,139703,139705],{"className":69,"code":139704,"language":71,"meta":72,"style":72},"\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",[74,139706,139707,139711,139721,139731,139745,139759,139773],{"__ignoreMap":72},[77,139708,139709],{"class":79,"line":80},[77,139710,139585],{"class":323},[77,139712,139713,139715,139717,139719],{"class":79,"line":91},[77,139714,54],{"class":158},[77,139716,139592],{"class":83},[77,139718,139595],{"class":87},[77,139720,139598],{"class":323},[77,139722,139723,139725,139727,139729],{"class":79,"line":107},[77,139724,54],{"class":158},[77,139726,139605],{"class":83},[77,139728,139608],{"class":87},[77,139730,139611],{"class":323},[77,139732,139733,139735,139737,139739,139741,139743],{"class":79,"line":191},[77,139734,54],{"class":158},[77,139736,131888],{"class":83},[77,139738,2622],{"class":87},[77,139740,2696],{"class":94},[77,139742,139624],{"class":87},[77,139744,139627],{"class":323},[77,139746,139747,139749,139751,139753,139755,139757],{"class":79,"line":1543},[77,139748,54],{"class":158},[77,139750,131888],{"class":83},[77,139752,2622],{"class":87},[77,139754,139638],{"class":94},[77,139756,139641],{"class":87},[77,139758,139644],{"class":323},[77,139760,139761,139763,139765,139767,139769,139771],{"class":79,"line":1549},[77,139762,54],{"class":158},[77,139764,131888],{"class":83},[77,139766,2622],{"class":87},[77,139768,139655],{"class":94},[77,139770,139658],{"class":87},[77,139772,139661],{"class":323},[77,139774,139775,139777,139779,139781,139783,139785],{"class":79,"line":1566},[77,139776,54],{"class":158},[77,139778,131888],{"class":83},[77,139780,2622],{"class":87},[77,139782,139672],{"class":94},[77,139784,139658],{"class":87},[77,139786,139677],{"class":323},[24,139788,139789],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24468,139791,139793],{"id":139792},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[24,139795,139796],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[40,139798],{"style":42,"src":139799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[139,139801,139802],{},[54,139803,2651],{},[51,139805,139806,139809,139812,139815,139818,139821],{},[54,139807,139808],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[54,139810,139811],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[54,139813,139814],{},"语法： element::before {}",[54,139816,139817],{},"before 和 after 必须有 content 属性",[54,139819,139820],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[54,139822,139823],{},"伪元素选择器和标签选择器一样，权重为 1",[139,139825,139826],{"start":91},[54,139827,139828],{},"实例",[67,139830,139831],{"className":69,"code":139704,"language":71,"meta":72,"style":72},[74,139832,139833,139837,139847,139857,139871,139885,139899],{"__ignoreMap":72},[77,139834,139835],{"class":79,"line":80},[77,139836,139585],{"class":323},[77,139838,139839,139841,139843,139845],{"class":79,"line":91},[77,139840,54],{"class":158},[77,139842,139592],{"class":83},[77,139844,139595],{"class":87},[77,139846,139598],{"class":323},[77,139848,139849,139851,139853,139855],{"class":79,"line":107},[77,139850,54],{"class":158},[77,139852,139605],{"class":83},[77,139854,139608],{"class":87},[77,139856,139611],{"class":323},[77,139858,139859,139861,139863,139865,139867,139869],{"class":79,"line":191},[77,139860,54],{"class":158},[77,139862,131888],{"class":83},[77,139864,2622],{"class":87},[77,139866,2696],{"class":94},[77,139868,139624],{"class":87},[77,139870,139627],{"class":323},[77,139872,139873,139875,139877,139879,139881,139883],{"class":79,"line":1543},[77,139874,54],{"class":158},[77,139876,131888],{"class":83},[77,139878,2622],{"class":87},[77,139880,139638],{"class":94},[77,139882,139641],{"class":87},[77,139884,139644],{"class":323},[77,139886,139887,139889,139891,139893,139895,139897],{"class":79,"line":1549},[77,139888,54],{"class":158},[77,139890,131888],{"class":83},[77,139892,2622],{"class":87},[77,139894,139655],{"class":94},[77,139896,139658],{"class":87},[77,139898,139661],{"class":323},[77,139900,139901,139903,139905,139907,139909,139911],{"class":79,"line":1566},[77,139902,54],{"class":158},[77,139904,131888],{"class":83},[77,139906,2622],{"class":87},[77,139908,139672],{"class":94},[77,139910,139658],{"class":87},[77,139912,139677],{"class":323},[40,139914],{"style":42,"src":139915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[139,139917,139918],{"start":107},[54,139919,139920],{},"使用场景1",[40,139922],{"style":42,"src":139923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[24,139925,139926],{},"不需要再加盒子来整红色那部分了",[67,139928,139930],{"className":69,"code":139929,"language":71,"meta":72,"style":72},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[74,139931,139932,139937,139945,139955,139965,139969,139978,139989,139999],{"__ignoreMap":72},[77,139933,139934],{"class":79,"line":80},[77,139935,139936],{"class":323},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[77,139938,139939,139941,139943],{"class":79,"line":91},[77,139940,331],{"class":158},[77,139942,432],{"class":83},[77,139944,88],{"class":87},[77,139946,139947,139949,139951,139953],{"class":79,"line":107},[77,139948,439],{"class":94},[77,139950,98],{"class":87},[77,139952,444],{"class":271},[77,139954,104],{"class":87},[77,139956,139957,139959,139961,139963],{"class":79,"line":191},[77,139958,451],{"class":94},[77,139960,98],{"class":87},[77,139962,456],{"class":94},[77,139964,104],{"class":87},[77,139966,139967],{"class":79,"line":1543},[77,139968,110],{"class":87},[77,139970,139971,139973,139976],{"class":79,"line":1549},[77,139972,331],{"class":158},[77,139974,139975],{"class":83},"::after",[77,139977,88],{"class":87},[77,139979,139980,139982,139984,139987],{"class":79,"line":1566},[77,139981,439],{"class":94},[77,139983,98],{"class":87},[77,139985,139986],{"class":271},"\"→\"",[77,139988,104],{"class":87},[77,139990,139991,139993,139995,139997],{"class":79,"line":1572},[77,139992,73344],{"class":94},[77,139994,98],{"class":87},[77,139996,64514],{"class":94},[77,139998,104],{"class":87},[77,140000,140001],{"class":79,"line":1589},[77,140002,110],{"class":87},[40,140004],{"style":42,"src":140005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[24,140007,140008],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[40,140010],{"style":42,"src":140011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[24,140013,140014],{},"但是在引用时需要先转义一下",[24,140016,140017],{},"content='\\e930'",[139,140019,140020],{"start":191},[54,140021,140022],{},"使用场景2",[24,140024,140025],{},"仿土豆效果",[24,140027,140028],{},"通过使用伪元素选择器可以减少body中盒子的数量",[67,140030,140031],{"className":69,"code":139929,"language":71,"meta":72,"style":72},[74,140032,140033,140037,140045,140055,140065,140069,140077,140087,140097],{"__ignoreMap":72},[77,140034,140035],{"class":79,"line":80},[77,140036,139936],{"class":323},[77,140038,140039,140041,140043],{"class":79,"line":91},[77,140040,331],{"class":158},[77,140042,432],{"class":83},[77,140044,88],{"class":87},[77,140046,140047,140049,140051,140053],{"class":79,"line":107},[77,140048,439],{"class":94},[77,140050,98],{"class":87},[77,140052,444],{"class":271},[77,140054,104],{"class":87},[77,140056,140057,140059,140061,140063],{"class":79,"line":191},[77,140058,451],{"class":94},[77,140060,98],{"class":87},[77,140062,456],{"class":94},[77,140064,104],{"class":87},[77,140066,140067],{"class":79,"line":1543},[77,140068,110],{"class":87},[77,140070,140071,140073,140075],{"class":79,"line":1549},[77,140072,331],{"class":158},[77,140074,139975],{"class":83},[77,140076,88],{"class":87},[77,140078,140079,140081,140083,140085],{"class":79,"line":1566},[77,140080,439],{"class":94},[77,140082,98],{"class":87},[77,140084,139986],{"class":271},[77,140086,104],{"class":87},[77,140088,140089,140091,140093,140095],{"class":79,"line":1572},[77,140090,73344],{"class":94},[77,140092,98],{"class":87},[77,140094,64514],{"class":94},[77,140096,104],{"class":87},[77,140098,140099],{"class":79,"line":1589},[77,140100,110],{"class":87},[40,140102],{"style":42,"src":140103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[139,140105,140106],{"start":1543},[54,140107,140108],{},"使用场景3",[24,140110,140111],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[67,140113,140115],{"className":69,"code":140114,"language":71,"meta":72,"style":72},".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",[74,140116,140117,140123,140133,140137,140141,140145,140153,140163,140173,140177,140185,140195,140205],{"__ignoreMap":72},[77,140118,140119,140121],{"class":79,"line":80},[77,140120,84],{"class":83},[77,140122,88],{"class":87},[77,140124,140125,140127,140129,140131],{"class":79,"line":91},[77,140126,95],{"class":94},[77,140128,98],{"class":87},[77,140130,101],{"class":94},[77,140132,104],{"class":87},[77,140134,140135],{"class":79,"line":107},[77,140136,110],{"class":87},[77,140138,140139],{"class":79,"line":191},[77,140140,138406],{"class":87},[77,140142,140143],{"class":79,"line":1543},[77,140144,139936],{"class":323},[77,140146,140147,140149,140151],{"class":79,"line":1549},[77,140148,331],{"class":158},[77,140150,432],{"class":83},[77,140152,88],{"class":87},[77,140154,140155,140157,140159,140161],{"class":79,"line":1566},[77,140156,439],{"class":94},[77,140158,98],{"class":87},[77,140160,444],{"class":271},[77,140162,104],{"class":87},[77,140164,140165,140167,140169,140171],{"class":79,"line":1572},[77,140166,451],{"class":94},[77,140168,98],{"class":87},[77,140170,456],{"class":94},[77,140172,104],{"class":87},[77,140174,140175],{"class":79,"line":1589},[77,140176,110],{"class":87},[77,140178,140179,140181,140183],{"class":79,"line":1595},[77,140180,331],{"class":158},[77,140182,139975],{"class":83},[77,140184,88],{"class":87},[77,140186,140187,140189,140191,140193],{"class":79,"line":4088},[77,140188,439],{"class":94},[77,140190,98],{"class":87},[77,140192,139986],{"class":271},[77,140194,104],{"class":87},[77,140196,140197,140199,140201,140203],{"class":79,"line":4093},[77,140198,73344],{"class":94},[77,140200,98],{"class":87},[77,140202,64514],{"class":94},[77,140204,104],{"class":87},[77,140206,140207],{"class":79,"line":4099},[77,140208,110],{"class":87},[24,140210,140211],{},"div {\nmargin: 0 auto;\n}",[67,140213,140216],{"className":140214,"code":140215,"language":7662},[7660],"\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",[74,140217,140215],{"__ignoreMap":72},[24,140219,140220],{},"如果想让多个元素都发生变化",[24,140222,140223],{},"不能如下操作：",[24,140225,140226],{},"transition: width 2s ease 0.5s;",[24,140228,140229],{},"transition: height 2s ease 0.5s;不对！！！",[24,140231,140232],{},"上方会样式冲突，导致不显示任何过渡效果",[24,140234,140235],{},"使用如下：加逗号隔开",[24,140237,140238],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[24,140240,140241],{},"transition all 2s ease;",[19,140243,140245],{"id":140244},"_1426-过渡练习","14.2.6 过渡练习",[139,140247,140248],{},[54,140249,140250],{},"进度条",[40,140252],{"style":42,"src":140253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[67,140255,140257],{"className":69,"code":140256,"language":71,"meta":72,"style":72},"div {\n  transition: all 0.3s ease;\n}\n",[74,140258,140259,140265,140283],{"__ignoreMap":72},[77,140260,140261,140263],{"class":79,"line":80},[77,140262,331],{"class":158},[77,140264,88],{"class":87},[77,140266,140267,140270,140272,140274,140277,140279,140281],{"class":79,"line":91},[77,140268,140269],{"class":94},"  transition",[77,140271,98],{"class":87},[77,140273,30589],{"class":94},[77,140275,140276],{"class":94}," 0.3",[77,140278,3308],{"class":2123},[77,140280,81118],{"class":94},[77,140282,104],{"class":87},[77,140284,140285],{"class":79,"line":107},[77,140286,110],{"class":87},[139,140288,140289],{"start":91},[54,140290,140291],{},"小米logo",[24,140293,140294],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[67,140296,140298],{"className":69,"code":140297,"language":71,"meta":72,"style":72},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[74,140299,140300,140305,140311,140327,140332],{"__ignoreMap":72},[77,140301,140302],{"class":79,"line":80},[77,140303,140304],{"class":323},"\u002F* CSS3 过渡 *\u002F\n",[77,140306,140307,140309],{"class":79,"line":91},[77,140308,331],{"class":158},[77,140310,88],{"class":87},[77,140312,140313,140315,140317,140319,140321,140323,140325],{"class":79,"line":107},[77,140314,140269],{"class":94},[77,140316,98],{"class":87},[77,140318,30589],{"class":94},[77,140320,140276],{"class":94},[77,140322,3308],{"class":2123},[77,140324,81118],{"class":94},[77,140326,104],{"class":87},[77,140328,140329],{"class":79,"line":191},[77,140330,140331],{"class":323},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[77,140333,140334],{"class":79,"line":1543},[77,140335,110],{"class":87},[24,140337,140338],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2520,140340,140341],{},"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":72,"searchDepth":91,"depth":91,"links":140343},[140344,140349],{"id":138679,"depth":91,"text":138680,"children":140345},[140346,140347,140348],{"id":138683,"depth":107,"text":138684},{"id":138760,"depth":107,"text":138761},{"id":139091,"depth":107,"text":139092},{"id":139379,"depth":91,"text":139380,"children":140350},[140351,140352],{"id":139383,"depth":107,"text":139384},{"id":140244,"depth":107,"text":140245},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138671,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140359,"title":140360,"body":140361,"description":2546,"extension":2547,"meta":142095,"navigation":2549,"path":142096,"seo":142097,"stem":142098,"__hash__":142099},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140362,"toc":142076},[140363,140366,140370,140373,140379,140385,140389,140391,140394,140397,140400,140403,140406,140409,140412,140416,140420,140423,140426,140429,140433,140436,140439,140444,140447,140450,140453,140457,140460,140469,140472,140475,140479,140482,140485,140490,140497,140511,140519,140526,140531,140534,140537,140540,140547,140551,140557,140563,140566,140569,140574,140580,140582,140590,140595,140598,140604,140606,140611,140616,140619,140621,140626,140629,140634,140639,140673,140677,140681,140684,140688,140691,140777,140779,140815,140817,140853,140857,140862,140875,140929,140931,140959,140961,140989,140995,141009,141011,141055,141057,141101,141104,141111,141122,141124,141150,141152,141178,141185,141201,141203,141297,141299,141393,141400,141403,141408,141414,141484,141487,141489,141525,141527,141563,141566,141573,141592,141595,141598,141600,141624,141626,141650,141653,141656,141686,141690,141693,141756,141758,141824,141826,141890,141893,141925,141927,141953,141955,141981,141984,142014,142016,142042,142044,142070,142073],[10,140364,140360],{"id":140365},"_15-品优购项目上篇-搭建与公共模块",[14,140367,140369],{"id":140368},"_151-项目规划","15.1 项目规划",[40,140371],{"style":42,"src":140372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[24,140374,140375,140378],{},[27,140376,140377],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[24,140380,140381,140384],{},[27,140382,140383],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140386,140388],{"id":140387},"_152-项目介绍","15.2 项目介绍",[24,140390,140377],{},[40,140392],{"style":42,"src":140393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[24,140395,140396],{},"主页：",[40,140398],{"style":42,"src":140399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[24,140401,140402],{},"列表页：",[40,140404],{"style":42,"src":140405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[24,140407,140408],{},"注册页：",[40,140410],{"style":42,"src":140411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140413,140415],{"id":140414},"_153-项目搭建工作","15.3 项目搭建工作",[19,140417,140419],{"id":140418},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[40,140421],{"style":42,"src":140422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[24,140424,140425],{},"经常更换的图片要放到upload文件夹中",[24,140427,140428],{},"不经常换的放到images文件夹中",[19,140430,140432],{"id":140431},"_1532-创建文件如下","15.3.2 创建文件如下",[40,140434],{"style":42,"src":140435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[40,140437],{"style":42,"src":140438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[24,140440,140441],{},[27,140442,140443],{},"初始化样式：",[24,140445,140446],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[24,140448,140449],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[24,140451,140452],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[19,140454,140456],{"id":140455},"_1533-项目模块化开发","15.3.3 项目模块化开发",[24,140458,140459],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[24,140461,140462,140463,140468],{},"这里最典型的应用就是 ",[27,140464,140465],{},[74,140466,140467],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[40,140470],{"style":42,"src":140471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[24,140473,140474],{},"通过link方法来引入",[19,140476,140478],{"id":140477},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[40,140480],{"style":42,"src":140481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[24,140483,140484],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[139,140486,140487],{},[54,140488,140489],{},"制作favicon图标",[24,140491,140492,140493,140496],{},"①把品优购图标切成 ",[74,140494,140495],{},"png"," 图片",[24,140498,140499,140500,140502,140503,140506,140507],{},"②把 ",[74,140501,140495],{}," 图片转换为 ",[74,140504,140505],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[417,140508,140509],{"href":140509,"rel":140510},"http:\u002F\u002Fwww.bitbug.net\u002F",[26332],[139,140512,140513,140516],{"start":91},[54,140514,140515],{},"favicon图标放到网站根目录下",[54,140517,140518],{},"HTML页面引入favicon",[24,140520,140521,140522,140525],{},"在html 页面里面的 ",[74,140523,140524],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[24,140527,140528],{},[74,140529,140530],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[24,140532,140533],{},"复制这行代码或者在生成这个的网站进行复制",[40,140535],{"style":42,"src":140536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[24,140538,140539],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[24,140541,140542,140543],{},"例如:",[417,140544,140545],{"href":140545,"rel":140546},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26332],[19,140548,140550],{"id":140549},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[24,140552,140553,140556],{},[27,140554,140555],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[24,140558,140559,140562],{},[27,140560,140561],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[24,140564,140565],{},"页面必须有三个标签用来符合 SEO 优化",[40,140567],{"style":42,"src":140568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[139,140570,140571],{},[54,140572,140573],{},"title网站标题",[24,140575,140576,140579],{},[27,140577,140578],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[24,140581,71233],{},[51,140583,140584,140587],{},[54,140585,140586],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[54,140588,140589],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[139,140591,140592],{"start":91},[54,140593,140594],{},"description网站描述",[24,140596,140597],{},"简要说明我们网站主要是做什么的",[24,140599,140600,140603],{},[27,140601,140602],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[24,140605,71233],{},[24,140607,140608],{},[74,140609,140610],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[139,140612,140613],{"start":107},[54,140614,140615],{},"keywords关键词",[24,140617,140618],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[24,140620,71233],{},[24,140622,140623],{},[74,140624,140625],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[24,140627,140628],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[24,140630,140631],{},[27,140632,140633],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[139,140635,140636],{"start":191},[54,140637,140638],{},"代码总结",[67,140640,140641],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,140642,140643,140647,140661,140665],{"__ignoreMap":72},[77,140644,140645],{"class":79,"line":80},[77,140646,324],{"class":323},[77,140648,140649,140651,140653,140655,140657,140659],{"class":79,"line":91},[77,140650,260],{"class":87},[77,140652,331],{"class":158},[77,140654,334],{"class":83},[77,140656,268],{"class":87},[77,140658,339],{"class":271},[77,140660,291],{"class":87},[77,140662,140663],{"class":79,"line":107},[77,140664,346],{"class":87},[77,140666,140667,140669,140671],{"class":79,"line":191},[77,140668,351],{"class":87},[77,140670,331],{"class":158},[77,140672,291],{"class":87},[14,140674,140676],{"id":140675},"_154-项目公共部分制作","15.4 项目公共部分制作",[19,140678,140680],{"id":140679},"_1541-常用模块类命名","15.4.1 常用模块类命名",[40,140682],{"style":42,"src":140683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[19,140685,140687],{"id":140686},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[24,140689,140690],{},"布局思路：",[51,140692,140693,140696,140699,140721,140754],{},[54,140694,140695],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[54,140697,140698],{},"里面包含版心的盒子",[54,140700,140701,140702],{},"版心盒子里面包含 1 号左侧盒子左浮动",[51,140703,140704,140712,140718],{},[54,140705,140706,140707,23970,140709,140711],{},"1 号盒子 里面包含一个",[74,140708,51],{},[74,140710,51],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[54,140713,140714,140715,140717],{},"里面的内容是水平排列，所以需要给",[74,140716,54],{},"设置浮动",[54,140719,140720],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[54,140722,140723,140724],{},"版心盒子里面包含 2 号右侧盒子右浮动",[51,140725,140726,140740,140745],{},[54,140727,140728,140729,23970,140731,140733,140734,140736,140737,140739],{},"2 号盒子 里面包含一个",[74,140730,51],{},[74,140732,51],{},"包裹",[74,140735,54],{},"，中间的",[74,140738,3533],{},"可以用样式去设置，也可以用字符 |",[54,140741,140742,140743,140717],{},"里面内容水平排列，给",[74,140744,54],{},[54,140746,140747,140748,140750,140751,140753],{},"找到里面所有偶数的 ",[74,140749,54],{}," 设置样式（偶数的 ",[74,140752,54],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[54,140755,140756,140757],{},"需要用到字体图标",[51,140758,140759,140765,140768,140771,140774],{},[54,140760,140761,140762],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[74,140763,140764],{},"arrow-icon",[54,140766,140767],{},"先要引入字体图片的资源",[54,140769,140770],{},"在样式里面利用 font-face 来进行声明",[54,140772,140773],{},"在伪元素的 content属性设置 图标的编码",[54,140775,140776],{},"给伪元素设置font-family属性",[24,140778,65],{},[67,140780,140781],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,140782,140783,140791,140801,140811],{"__ignoreMap":72},[77,140784,140785,140787,140789],{"class":79,"line":80},[77,140786,331],{"class":158},[77,140788,432],{"class":83},[77,140790,88],{"class":87},[77,140792,140793,140795,140797,140799],{"class":79,"line":91},[77,140794,439],{"class":94},[77,140796,98],{"class":87},[77,140798,444],{"class":271},[77,140800,104],{"class":87},[77,140802,140803,140805,140807,140809],{"class":79,"line":107},[77,140804,451],{"class":94},[77,140806,98],{"class":87},[77,140808,456],{"class":94},[77,140810,104],{"class":87},[77,140812,140813],{"class":79,"line":191},[77,140814,110],{"class":87},[24,140816,113],{},[67,140818,140819],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,140820,140821,140829,140839,140849],{"__ignoreMap":72},[77,140822,140823,140825,140827],{"class":79,"line":80},[77,140824,331],{"class":158},[77,140826,432],{"class":83},[77,140828,88],{"class":87},[77,140830,140831,140833,140835,140837],{"class":79,"line":91},[77,140832,439],{"class":94},[77,140834,98],{"class":87},[77,140836,444],{"class":271},[77,140838,104],{"class":87},[77,140840,140841,140843,140845,140847],{"class":79,"line":107},[77,140842,451],{"class":94},[77,140844,98],{"class":87},[77,140846,456],{"class":94},[77,140848,104],{"class":87},[77,140850,140851],{"class":79,"line":191},[77,140852,110],{"class":87},[19,140854,140856],{"id":140855},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[51,140858,140859],{},[54,140860,140861],{},"header 盒子必须要有高度",[24,140863,140864,140865,140867,140868],{},"1 号盒子是 ",[74,140866,133975],{}," 标志定位，在正常开发过程中， ",[27,140869,140870,140871,140874],{},"logo的布局其实是有讲究的，需要进行 ",[74,140872,140873],{},"logoSEO","的优化 （★★★）",[51,140876,140877,140885,140893,140920],{},[54,140878,140879,140881,140882,140884],{},[74,140880,133975],{}," 里面首先放一个 ",[74,140883,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[54,140886,140887,140889,140890,140892],{},[74,140888,10],{}," 里面再放一个链接，可以返回首页的，把 ",[74,140891,133975],{}," 的背景图片给链接即可",[54,140894,140895,140896],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[51,140897,140898,140913],{},[54,140899,140900,140901,140904,140905,140908,140909,140912],{},"方法1：",[74,140902,140903],{},"text-indent"," 移到盒子外面（",[74,140906,140907],{},"text-indent: -9999px",") ，然后 ",[74,140910,140911],{},"overflow:hidden"," ，淘宝的做法",[54,140914,140915,140916,140919],{},"方法2：直接给 ",[74,140917,140918],{},"font-size: 0;"," 就看不到文字了，京东的做法",[54,140921,140922,140923,140925,140926,140928],{},"最后给链接一个 ",[74,140924,53871],{}," 属性，这样鼠标放到 ",[74,140927,133975],{}," 上就可以看到提示文字了",[24,140930,65],{},[67,140932,140933],{"className":251,"code":134196,"language":253,"meta":72,"style":72},[74,140934,140935],{"__ignoreMap":72},[77,140936,140937,140939,140941,140943,140945,140947,140949,140951,140953,140955,140957],{"class":79,"line":80},[77,140938,260],{"class":87},[77,140940,417],{"class":158},[77,140942,63503],{"class":83},[77,140944,268],{"class":87},[77,140946,134211],{"class":271},[77,140948,134214],{"class":83},[77,140950,268],{"class":87},[77,140952,134219],{"class":271},[77,140954,134222],{"class":87},[77,140956,417],{"class":158},[77,140958,291],{"class":87},[24,140960,113],{},[67,140962,140963],{"className":251,"code":134196,"language":253,"meta":72,"style":72},[74,140964,140965],{"__ignoreMap":72},[77,140966,140967,140969,140971,140973,140975,140977,140979,140981,140983,140985,140987],{"class":79,"line":80},[77,140968,260],{"class":87},[77,140970,417],{"class":158},[77,140972,63503],{"class":83},[77,140974,268],{"class":87},[77,140976,134211],{"class":271},[77,140978,134214],{"class":83},[77,140980,268],{"class":87},[77,140982,134219],{"class":271},[77,140984,134222],{"class":87},[77,140986,417],{"class":158},[77,140988,291],{"class":87},[24,140990,140991,140992,140994],{},"2 号盒子是 ",[74,140993,133988],{}," 搜索模块定位",[51,140996,140997,141000,141003,141006],{},[54,140998,140999],{},"search盒子利用定位的方式放在对应的位置",[54,141001,141002],{},"search盒子设置绝对定位，header盒子设置相对定位",[54,141004,141005],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[54,141007,141008],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[24,141010,65],{},[67,141012,141013],{"className":69,"code":134283,"language":71,"meta":72,"style":72},[74,141014,141015,141037,141041,141051],{"__ignoreMap":72},[77,141016,141017,141019,141021,141023,141025,141027,141029,141031,141033,141035],{"class":79,"line":80},[77,141018,331],{"class":158},[77,141020,680],{"class":87},[77,141022,24],{"class":158},[77,141024,680],{"class":87},[77,141026,10],{"class":158},[77,141028,680],{"class":87},[77,141030,51],{"class":158},[77,141032,680],{"class":87},[77,141034,54],{"class":158},[77,141036,88],{"class":87},[77,141038,141039],{"class":79,"line":91},[77,141040,134312],{"class":323},[77,141042,141043,141045,141047,141049],{"class":79,"line":107},[77,141044,451],{"class":94},[77,141046,98],{"class":87},[77,141048,456],{"class":94},[77,141050,104],{"class":87},[77,141052,141053],{"class":79,"line":191},[77,141054,110],{"class":87},[24,141056,113],{},[67,141058,141059],{"className":69,"code":134283,"language":71,"meta":72,"style":72},[74,141060,141061,141083,141087,141097],{"__ignoreMap":72},[77,141062,141063,141065,141067,141069,141071,141073,141075,141077,141079,141081],{"class":79,"line":80},[77,141064,331],{"class":158},[77,141066,680],{"class":87},[77,141068,24],{"class":158},[77,141070,680],{"class":87},[77,141072,10],{"class":158},[77,141074,680],{"class":87},[77,141076,51],{"class":158},[77,141078,680],{"class":87},[77,141080,54],{"class":158},[77,141082,88],{"class":87},[77,141084,141085],{"class":79,"line":91},[77,141086,134312],{"class":323},[77,141088,141089,141091,141093,141095],{"class":79,"line":107},[77,141090,451],{"class":94},[77,141092,98],{"class":87},[77,141094,456],{"class":94},[77,141096,104],{"class":87},[77,141098,141099],{"class":79,"line":191},[77,141100,110],{"class":87},[24,141102,141103],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[24,141105,141106,141107,141110],{},"3 号盒子是 ",[74,141108,141109],{},"hotwords"," 热词模块定位",[51,141112,141113,141116,141119],{},[54,141114,141115],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[54,141117,141118],{},"给里面所有的a标签设置 左右10px的外边距",[54,141120,141121],{},"给第一个a标签设置文字变红色（#c81623）",[24,141123,65],{},[67,141125,141126],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,141127,141128,141134,141146],{"__ignoreMap":72},[77,141129,141130,141132],{"class":79,"line":80},[77,141131,331],{"class":158},[77,141133,88],{"class":87},[77,141135,141136,141138,141140,141142,141144],{"class":79,"line":91},[77,141137,1934],{"class":94},[77,141139,98],{"class":87},[77,141141,1939],{"class":94},[77,141143,1942],{"class":94},[77,141145,104],{"class":87},[77,141147,141148],{"class":79,"line":107},[77,141149,110],{"class":87},[24,141151,113],{},[67,141153,141154],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,141155,141156,141162,141174],{"__ignoreMap":72},[77,141157,141158,141160],{"class":79,"line":80},[77,141159,331],{"class":158},[77,141161,88],{"class":87},[77,141163,141164,141166,141168,141170,141172],{"class":79,"line":91},[77,141165,1934],{"class":94},[77,141167,98],{"class":87},[77,141169,1939],{"class":94},[77,141171,1942],{"class":94},[77,141173,104],{"class":87},[77,141175,141176],{"class":79,"line":107},[77,141177,110],{"class":87},[24,141179,141180,141181,141184],{},"4 号盒子是 ",[74,141182,141183],{},"shopcar"," 购物车模块",[51,141186,141187,141192,141195,141198],{},[54,141188,125767,141189,141191],{},[74,141190,141183],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[54,141193,141194],{},"count 统计部分用绝对定位做",[54,141196,141197],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[54,141199,141200],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[24,141202,65],{},[67,141204,141205],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,141206,141207,141211,141225,141229,141243,141247,141261,141265,141279,141283],{"__ignoreMap":72},[77,141208,141209],{"class":79,"line":80},[77,141210,1500],{"class":323},[77,141212,141213,141215,141217,141219,141221,141223],{"class":79,"line":91},[77,141214,1505],{"class":83},[77,141216,1508],{"class":87},[77,141218,1511],{"class":94},[77,141220,98],{"class":87},[77,141222,1516],{"class":94},[77,141224,1519],{"class":87},[77,141226,141227],{"class":79,"line":107},[77,141228,1524],{"class":323},[77,141230,141231,141233,141235,141237,141239,141241],{"class":79,"line":191},[77,141232,1529],{"class":83},[77,141234,1508],{"class":87},[77,141236,1511],{"class":94},[77,141238,98],{"class":87},[77,141240,1538],{"class":94},[77,141242,1519],{"class":87},[77,141244,141245],{"class":79,"line":1543},[77,141246,1546],{"class":323},[77,141248,141249,141251,141253,141255,141257,141259],{"class":79,"line":1549},[77,141250,1552],{"class":83},[77,141252,1508],{"class":87},[77,141254,1511],{"class":94},[77,141256,98],{"class":87},[77,141258,1561],{"class":94},[77,141260,1519],{"class":87},[77,141262,141263],{"class":79,"line":1566},[77,141264,1569],{"class":323},[77,141266,141267,141269,141271,141273,141275,141277],{"class":79,"line":1572},[77,141268,1575],{"class":83},[77,141270,1508],{"class":87},[77,141272,1511],{"class":94},[77,141274,98],{"class":87},[77,141276,1584],{"class":94},[77,141278,1519],{"class":87},[77,141280,141281],{"class":79,"line":1589},[77,141282,1592],{"class":323},[77,141284,141285,141287,141289,141291,141293,141295],{"class":79,"line":1595},[77,141286,1598],{"class":83},[77,141288,1508],{"class":87},[77,141290,1511],{"class":94},[77,141292,98],{"class":87},[77,141294,1607],{"class":94},[77,141296,1519],{"class":87},[24,141298,113],{},[67,141300,141301],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,141302,141303,141307,141321,141325,141339,141343,141357,141361,141375,141379],{"__ignoreMap":72},[77,141304,141305],{"class":79,"line":80},[77,141306,1500],{"class":323},[77,141308,141309,141311,141313,141315,141317,141319],{"class":79,"line":91},[77,141310,1505],{"class":83},[77,141312,1508],{"class":87},[77,141314,1511],{"class":94},[77,141316,98],{"class":87},[77,141318,1516],{"class":94},[77,141320,1519],{"class":87},[77,141322,141323],{"class":79,"line":107},[77,141324,1524],{"class":323},[77,141326,141327,141329,141331,141333,141335,141337],{"class":79,"line":191},[77,141328,1529],{"class":83},[77,141330,1508],{"class":87},[77,141332,1511],{"class":94},[77,141334,98],{"class":87},[77,141336,1538],{"class":94},[77,141338,1519],{"class":87},[77,141340,141341],{"class":79,"line":1543},[77,141342,1546],{"class":323},[77,141344,141345,141347,141349,141351,141353,141355],{"class":79,"line":1549},[77,141346,1552],{"class":83},[77,141348,1508],{"class":87},[77,141350,1511],{"class":94},[77,141352,98],{"class":87},[77,141354,1561],{"class":94},[77,141356,1519],{"class":87},[77,141358,141359],{"class":79,"line":1566},[77,141360,1569],{"class":323},[77,141362,141363,141365,141367,141369,141371,141373],{"class":79,"line":1572},[77,141364,1575],{"class":83},[77,141366,1508],{"class":87},[77,141368,1511],{"class":94},[77,141370,98],{"class":87},[77,141372,1584],{"class":94},[77,141374,1519],{"class":87},[77,141376,141377],{"class":79,"line":1589},[77,141378,1592],{"class":323},[77,141380,141381,141383,141385,141387,141389,141391],{"class":79,"line":1595},[77,141382,1598],{"class":83},[77,141384,1508],{"class":87},[77,141386,1511],{"class":94},[77,141388,98],{"class":87},[77,141390,1607],{"class":94},[77,141392,1519],{"class":87},[19,141394,141396,141397,141399],{"id":141395},"_1544-nav导航模块制作","15.4.4 ",[74,141398,1479],{},"导航模块制作",[40,141401],{"style":42,"src":141402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[24,141404,141405,141407],{},[74,141406,1479],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[24,141409,141410,141411],{},"1 号盒子左侧浮动，",[74,141412,141413],{},"dropdown",[51,141415,141416,141426,141434,141439,141446,141455,141463,141473],{},[54,141417,141418,141419,513,141422,141425],{},"1号盒子有讲究，根据相关性 里面包含 ",[74,141420,141421],{},".dt",[74,141423,141424],{},".dd"," 两个盒子",[54,141427,141428,141430,141431,141433],{},[74,141429,141421],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[74,141432,141424],{}," 挤到下面去了",[54,141435,653,141436,141438],{},[74,141437,141424],{}," 盒子设置宽度 和 高度，以及背景颜色",[54,141440,653,141441,141443,141444,122669],{},[74,141442,141424],{}," 盒子里面定义 无序列表 （",[74,141445,1185],{},[54,141447,2248,141448,141450,141451,141454],{},[74,141449,54],{}," 都有一个高度（",[74,141452,141453],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[54,141456,653,141457,141459,141460,122669],{},[74,141458,54],{}," 里面的a设置文字大小（",[74,141461,141462],{},"14px",[54,141464,653,141465,662,141467,141469,141470,141472],{},[74,141466,54],{},[74,141468,130140],{},"，当鼠标移入的时候，让",[74,141471,54],{},"的背景变成白色，让里面的文字变成红色",[54,141474,141475,141477,141478,141480,141481,141483],{},[74,141476,54],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[74,141479,54],{},"的右侧，那么给",[74,141482,54],{},"设置相对定位",[24,141485,141486],{},"一定要注意相关性",[24,141488,65],{},[67,141490,141491],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,141492,141493,141501,141511,141521],{"__ignoreMap":72},[77,141494,141495,141497,141499],{"class":79,"line":80},[77,141496,331],{"class":158},[77,141498,432],{"class":83},[77,141500,88],{"class":87},[77,141502,141503,141505,141507,141509],{"class":79,"line":91},[77,141504,439],{"class":94},[77,141506,98],{"class":87},[77,141508,444],{"class":271},[77,141510,104],{"class":87},[77,141512,141513,141515,141517,141519],{"class":79,"line":107},[77,141514,451],{"class":94},[77,141516,98],{"class":87},[77,141518,456],{"class":94},[77,141520,104],{"class":87},[77,141522,141523],{"class":79,"line":191},[77,141524,110],{"class":87},[24,141526,113],{},[67,141528,141529],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,141530,141531,141539,141549,141559],{"__ignoreMap":72},[77,141532,141533,141535,141537],{"class":79,"line":80},[77,141534,331],{"class":158},[77,141536,432],{"class":83},[77,141538,88],{"class":87},[77,141540,141541,141543,141545,141547],{"class":79,"line":91},[77,141542,439],{"class":94},[77,141544,98],{"class":87},[77,141546,444],{"class":271},[77,141548,104],{"class":87},[77,141550,141551,141553,141555,141557],{"class":79,"line":107},[77,141552,451],{"class":94},[77,141554,98],{"class":87},[77,141556,456],{"class":94},[77,141558,104],{"class":87},[77,141560,141561],{"class":79,"line":191},[77,141562,110],{"class":87},[24,141564,141565],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[24,141567,141568,141569,141572],{},"2 号盒子左侧浮动，",[74,141570,141571],{},"navitems"," 导航栏组",[51,141574,141575,141580,141589],{},[54,141576,141577,141578],{},"里面结构是 ",[74,141579,1185],{},[54,141581,141582,141583,141585,141586,141588],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[74,141584,417],{},"左右的",[74,141587,1196],{},"把两侧撑开",[54,141590,141591],{},"让文字垂直居中（行高等于高度）",[40,141593],{"style":42,"src":141594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[24,141596,141597],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[24,141599,65],{},[67,141601,141602],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,141603,141604,141610,141620],{"__ignoreMap":72},[77,141605,141606,141608],{"class":79,"line":80},[77,141607,84],{"class":83},[77,141609,88],{"class":87},[77,141611,141612,141614,141616,141618],{"class":79,"line":91},[77,141613,95],{"class":94},[77,141615,98],{"class":87},[77,141617,101],{"class":94},[77,141619,104],{"class":87},[77,141621,141622],{"class":79,"line":107},[77,141623,110],{"class":87},[24,141625,113],{},[67,141627,141628],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,141629,141630,141636,141646],{"__ignoreMap":72},[77,141631,141632,141634],{"class":79,"line":80},[77,141633,84],{"class":83},[77,141635,88],{"class":87},[77,141637,141638,141640,141642,141644],{"class":79,"line":91},[77,141639,95],{"class":94},[77,141641,98],{"class":87},[77,141643,101],{"class":94},[77,141645,104],{"class":87},[77,141647,141648],{"class":79,"line":107},[77,141649,110],{"class":87},[24,141651,141652],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[40,141654],{"style":42,"src":141655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[67,141657,141658],{"className":69,"code":2102,"language":71,"meta":72,"style":72},[74,141659,141660,141666,141682],{"__ignoreMap":72},[77,141661,141662,141664],{"class":79,"line":80},[77,141663,331],{"class":158},[77,141665,88],{"class":87},[77,141667,141668,141670,141672,141674,141676,141678,141680],{"class":79,"line":91},[77,141669,2115],{"class":94},[77,141671,98],{"class":87},[77,141673,2120],{"class":94},[77,141675,2124],{"class":2123},[77,141677,2127],{"class":94},[77,141679,2130],{"class":94},[77,141681,104],{"class":87},[77,141683,141684],{"class":79,"line":107},[77,141685,110],{"class":87},[19,141687,141689],{"id":141688},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[40,141691],{"style":42,"src":141692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[51,141694,141695,141700,141705],{},[54,141696,141697,141699],{},[74,141698,134166],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[54,141701,141702,141704],{},[74,141703,134166],{}," 里面有一个大的版心",[54,141706,141707,141708,141711,141712],{},"版心里面包含 1 号盒子，",[74,141709,141710],{},"mod_service"," 是服务模块，mod 是模块的意思",[51,141713,141714,141719,141732,141748,141753],{},[54,141715,653,141716,141718],{},[74,141717,141710],{}," 设置高度（80px）和下边框",[54,141720,141721,141722,141725,141726,141728,141729,141731],{},"在里面定义 ",[74,141723,141724],{},"ul > li"," ,每个",[74,141727,54],{}," 宽度是300px 高度是 50px，给每个",[74,141730,54],{},"设置35px的左内边距",[54,141733,141734,141735,141737,141738,141740,141741,141743,141744,20880,141746,122669],{},"在每个",[74,141736,54],{},"里面，放一个 ",[74,141739,406],{},"（里面放图标），一个",[74,141742,331],{},"（里面放",[74,141745,331],{},[74,141747,24],{},[54,141749,653,141750,141752],{},[74,141751,406],{},"设置浮动，让h5与这个div左右排列",[54,141754,141755],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[24,141757,65],{},[67,141759,141761],{"className":69,"code":141760,"language":71,"meta":72,"style":72},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[74,141762,141763,141769,141781,141793,141820],{"__ignoreMap":72},[77,141764,141765,141767],{"class":79,"line":80},[77,141766,136702],{"class":83},[77,141768,88],{"class":87},[77,141770,141771,141773,141775,141777,141779],{"class":79,"line":91},[77,141772,73010],{"class":94},[77,141774,98],{"class":87},[77,141776,3313],{"class":94},[77,141778,2124],{"class":2123},[77,141780,104],{"class":87},[77,141782,141783,141785,141787,141789,141791],{"class":79,"line":107},[77,141784,73230],{"class":94},[77,141786,98],{"class":87},[77,141788,3313],{"class":94},[77,141790,2124],{"class":2123},[77,141792,104],{"class":87},[77,141794,141795,141797,141799,141801,141803,141805,141807,141809,141812,141814,141816,141818],{"class":79,"line":191},[77,141796,73053],{"class":94},[77,141798,98],{"class":87},[77,141800,64171],{"class":94},[77,141802,2622],{"class":87},[77,141804,136741],{"class":7691},[77,141806,16186],{"class":87},[77,141808,64181],{"class":94},[77,141810,141811],{"class":94}," -10",[77,141813,2124],{"class":2123},[77,141815,136760],{"class":94},[77,141817,2124],{"class":2123},[77,141819,104],{"class":87},[77,141821,141822],{"class":79,"line":1543},[77,141823,110],{"class":87},[24,141825,113],{},[67,141827,141828],{"className":69,"code":141760,"language":71,"meta":72,"style":72},[74,141829,141830,141836,141848,141860,141886],{"__ignoreMap":72},[77,141831,141832,141834],{"class":79,"line":80},[77,141833,136702],{"class":83},[77,141835,88],{"class":87},[77,141837,141838,141840,141842,141844,141846],{"class":79,"line":91},[77,141839,73010],{"class":94},[77,141841,98],{"class":87},[77,141843,3313],{"class":94},[77,141845,2124],{"class":2123},[77,141847,104],{"class":87},[77,141849,141850,141852,141854,141856,141858],{"class":79,"line":107},[77,141851,73230],{"class":94},[77,141853,98],{"class":87},[77,141855,3313],{"class":94},[77,141857,2124],{"class":2123},[77,141859,104],{"class":87},[77,141861,141862,141864,141866,141868,141870,141872,141874,141876,141878,141880,141882,141884],{"class":79,"line":191},[77,141863,73053],{"class":94},[77,141865,98],{"class":87},[77,141867,64171],{"class":94},[77,141869,2622],{"class":87},[77,141871,136741],{"class":7691},[77,141873,16186],{"class":87},[77,141875,64181],{"class":94},[77,141877,141811],{"class":94},[77,141879,2124],{"class":2123},[77,141881,136760],{"class":94},[77,141883,2124],{"class":2123},[77,141885,104],{"class":87},[77,141887,141888],{"class":79,"line":1543},[77,141889,110],{"class":87},[24,141891,141892],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[51,141894,141895,141898,141904,141910,141922],{},[54,141896,141897],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[54,141899,141900,141901,122669],{},"里面的布局利用 自定义列表来实现（",[74,141902,141903],{},"dl > dt + dd",[54,141905,653,141906,141909],{},[74,141907,141908],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[54,141911,653,141912,141915,141916,20880,141918,141921],{},[74,141913,141914],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[74,141917,141914],{},[74,141919,141920],{},"dd","之间有些距离",[54,141923,141924],{},"最后一个 dl 结构和样式不一样，需要单独设置",[24,141926,65],{},[67,141928,141929],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,141930,141931,141937,141949],{"__ignoreMap":72},[77,141932,141933,141935],{"class":79,"line":80},[77,141934,331],{"class":158},[77,141936,88],{"class":87},[77,141938,141939,141941,141943,141945,141947],{"class":79,"line":91},[77,141940,1934],{"class":94},[77,141942,98],{"class":87},[77,141944,1939],{"class":94},[77,141946,1942],{"class":94},[77,141948,104],{"class":87},[77,141950,141951],{"class":79,"line":107},[77,141952,110],{"class":87},[24,141954,113],{},[67,141956,141957],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,141958,141959,141965,141977],{"__ignoreMap":72},[77,141960,141961,141963],{"class":79,"line":80},[77,141962,331],{"class":158},[77,141964,88],{"class":87},[77,141966,141967,141969,141971,141973,141975],{"class":79,"line":91},[77,141968,1934],{"class":94},[77,141970,98],{"class":87},[77,141972,1939],{"class":94},[77,141974,1942],{"class":94},[77,141976,104],{"class":87},[77,141978,141979],{"class":79,"line":107},[77,141980,110],{"class":87},[24,141982,141983],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[51,141985,141986,141995,141998,142009],{},[54,141987,141988,141989,141991,141992,141994],{},"分为上下两块，上面是 ",[74,141990,134183],{}," 友情链接，下面是 ",[74,141993,134176],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[54,141996,141997],{},"把内容分别复制到相应模块中",[54,141999,653,142000,142002,142003,142005,142006,142008],{},[74,142001,134183],{}," 设置 15px 的下外边距，给",[74,142004,134183],{}," 里面 的 ",[74,142007,417],{}," 标签设置 左右 3px 的外边距",[54,142010,519,142011,142013],{},[74,142012,134176],{}," 设置 20px 的行高",[24,142015,65],{},[67,142017,142018],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,142019,142020,142026,142038],{"__ignoreMap":72},[77,142021,142022,142024],{"class":79,"line":80},[77,142023,331],{"class":158},[77,142025,88],{"class":87},[77,142027,142028,142030,142032,142034,142036],{"class":79,"line":91},[77,142029,1934],{"class":94},[77,142031,98],{"class":87},[77,142033,1939],{"class":94},[77,142035,1942],{"class":94},[77,142037,104],{"class":87},[77,142039,142040],{"class":79,"line":107},[77,142041,110],{"class":87},[24,142043,113],{},[67,142045,142046],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,142047,142048,142054,142066],{"__ignoreMap":72},[77,142049,142050,142052],{"class":79,"line":80},[77,142051,331],{"class":158},[77,142053,88],{"class":87},[77,142055,142056,142058,142060,142062,142064],{"class":79,"line":91},[77,142057,1934],{"class":94},[77,142059,98],{"class":87},[77,142061,1939],{"class":94},[77,142063,1942],{"class":94},[77,142065,104],{"class":87},[77,142067,142068],{"class":79,"line":107},[77,142069,110],{"class":87},[24,142071,142072],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2520,142074,142075],{},"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":72,"searchDepth":91,"depth":91,"links":142077},[142078,142079,142080,142087],{"id":140368,"depth":91,"text":140369},{"id":140387,"depth":91,"text":140388},{"id":140414,"depth":91,"text":140415,"children":142081},[142082,142083,142084,142085,142086],{"id":140418,"depth":107,"text":140419},{"id":140431,"depth":107,"text":140432},{"id":140455,"depth":107,"text":140456},{"id":140477,"depth":107,"text":140478},{"id":140549,"depth":107,"text":140550},{"id":140675,"depth":91,"text":140676,"children":142088},[142089,142090,142091,142092,142094],{"id":140679,"depth":107,"text":140680},{"id":140686,"depth":107,"text":140687},{"id":140855,"depth":107,"text":140856},{"id":141395,"depth":107,"text":142093},"15.4.4 nav导航模块制作",{"id":141688,"depth":107,"text":141689},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140360,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":4,"title":5,"body":142101,"description":2546,"extension":2547,"meta":144228,"navigation":2549,"path":2550,"seo":144229,"stem":2552,"__hash__":2553},{"type":7,"value":142102,"toc":144209},[142103,142105,142107,142109,142117,142119,142121,142123,142131,142133,142157,142159,142183,142187,142189,142191,142227,142229,142265,142267,142271,142273,142275,142277,142307,142311,142313,142319,142321,142355,142357,142391,142395,142407,142409,142445,142447,142483,142487,142505,142507,142531,142533,142557,142561,142563,142609,142611,142651,142653,142693,142697,142701,142703,142733,142735,142765,142767,142769,142773,142781,142783,142807,142809,142833,142835,142837,142861,142865,142873,142875,142905,142907,142937,142941,142971,142973,143009,143011,143047,143049,143051,143053,143055,143059,143063,143065,143083,143085,143109,143111,143135,143139,143141,143143,143145,143147,143149,143199,143201,143231,143233,143263,143265,143267,143289,143291,143293,143303,143309,143311,143315,143317,143411,143413,143507,143525,143527,143551,143553,143577,143581,143583,143591,143593,143617,143621,143627,143629,143659,143663,143691,143693,143719,143721,143747,143749,143751,143755,143757,143759,143765,143769,143775,143777,143807,143809,143839,143843,143845,143847,143849,143879,143881,143911,143913,143917,143919,143943,143945,143969,143971,144029,144031,144055,144057,144081,144083,144085,144109,144111,144145,144147,144157,144159,144163,144165,144169,144171,144201,144207],[10,142104,5],{"id":12},[14,142106,17],{"id":16},[19,142108,22],{"id":21},[24,142110,142111,30,142113,34,142115,38],{},[27,142112,29],{},[27,142114,33],{},[27,142116,37],{},[40,142118],{"style":42,"src":43},[40,142120],{"style":42,"src":46},[24,142122,49],{},[51,142124,142125,142127,142129],{},[54,142126,56],{},[54,142128,59],{},[54,142130,62],{},[24,142132,65],{},[67,142134,142135],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,142136,142137,142143,142153],{"__ignoreMap":72},[77,142138,142139,142141],{"class":79,"line":80},[77,142140,84],{"class":83},[77,142142,88],{"class":87},[77,142144,142145,142147,142149,142151],{"class":79,"line":91},[77,142146,95],{"class":94},[77,142148,98],{"class":87},[77,142150,101],{"class":94},[77,142152,104],{"class":87},[77,142154,142155],{"class":79,"line":107},[77,142156,110],{"class":87},[24,142158,113],{},[67,142160,142161],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,142162,142163,142169,142179],{"__ignoreMap":72},[77,142164,142165,142167],{"class":79,"line":80},[77,142166,84],{"class":83},[77,142168,88],{"class":87},[77,142170,142171,142173,142175,142177],{"class":79,"line":91},[77,142172,95],{"class":94},[77,142174,98],{"class":87},[77,142176,101],{"class":94},[77,142178,104],{"class":87},[77,142180,142181],{"class":79,"line":107},[77,142182,110],{"class":87},[139,142184,142185],{},[54,142186,143],{},[40,142188],{"style":42,"src":146},[24,142190,65],{},[67,142192,142193],{"className":69,"code":151,"language":71,"meta":72,"style":72},[74,142194,142195,142203,142213,142223],{"__ignoreMap":72},[77,142196,142197,142199,142201],{"class":79,"line":80},[77,142198,159],{"class":158},[77,142200,162],{"class":83},[77,142202,88],{"class":87},[77,142204,142205,142207,142209,142211],{"class":79,"line":91},[77,142206,169],{"class":94},[77,142208,98],{"class":87},[77,142210,174],{"class":94},[77,142212,104],{"class":87},[77,142214,142215,142217,142219,142221],{"class":79,"line":107},[77,142216,181],{"class":94},[77,142218,98],{"class":87},[77,142220,186],{"class":94},[77,142222,104],{"class":87},[77,142224,142225],{"class":79,"line":191},[77,142226,110],{"class":87},[24,142228,113],{},[67,142230,142231],{"className":69,"code":151,"language":71,"meta":72,"style":72},[74,142232,142233,142241,142251,142261],{"__ignoreMap":72},[77,142234,142235,142237,142239],{"class":79,"line":80},[77,142236,159],{"class":158},[77,142238,162],{"class":83},[77,142240,88],{"class":87},[77,142242,142243,142245,142247,142249],{"class":79,"line":91},[77,142244,169],{"class":94},[77,142246,98],{"class":87},[77,142248,174],{"class":94},[77,142250,104],{"class":87},[77,142252,142253,142255,142257,142259],{"class":79,"line":107},[77,142254,181],{"class":94},[77,142256,98],{"class":87},[77,142258,186],{"class":94},[77,142260,104],{"class":87},[77,142262,142263],{"class":79,"line":191},[77,142264,110],{"class":87},[24,142266,234],{},[139,142268,142269],{"start":91},[54,142270,239],{},[40,142272],{"style":42,"src":242},[24,142274,245],{},[24,142276,248],{},[67,142278,142279],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,142280,142281],{"__ignoreMap":72},[77,142282,142283,142285,142287,142289,142291,142293,142295,142297,142299,142301,142303,142305],{"class":79,"line":80},[77,142284,260],{"class":87},[77,142286,40],{"class":158},[77,142288,265],{"class":83},[77,142290,268],{"class":87},[77,142292,272],{"class":271},[77,142294,275],{"class":83},[77,142296,268],{"class":87},[77,142298,280],{"class":271},[77,142300,283],{"class":83},[77,142302,268],{"class":87},[77,142304,288],{"class":271},[77,142306,291],{"class":87},[24,142308,294,142309,298],{},[74,142310,297],{},[40,142312],{"style":42,"src":301},[24,142314,304,142315,308,142317],{},[74,142316,307],{},[74,142318,311],{},[24,142320,248],{},[67,142322,142323],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,142324,142325,142329,142343,142347],{"__ignoreMap":72},[77,142326,142327],{"class":79,"line":80},[77,142328,324],{"class":323},[77,142330,142331,142333,142335,142337,142339,142341],{"class":79,"line":91},[77,142332,260],{"class":87},[77,142334,331],{"class":158},[77,142336,334],{"class":83},[77,142338,268],{"class":87},[77,142340,339],{"class":271},[77,142342,291],{"class":87},[77,142344,142345],{"class":79,"line":107},[77,142346,346],{"class":87},[77,142348,142349,142351,142353],{"class":79,"line":191},[77,142350,351],{"class":87},[77,142352,331],{"class":158},[77,142354,291],{"class":87},[24,142356,358],{},[67,142358,142359],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,142360,142361,142365,142379,142383],{"__ignoreMap":72},[77,142362,142363],{"class":79,"line":80},[77,142364,324],{"class":323},[77,142366,142367,142369,142371,142373,142375,142377],{"class":79,"line":91},[77,142368,260],{"class":87},[77,142370,331],{"class":158},[77,142372,334],{"class":83},[77,142374,268],{"class":87},[77,142376,339],{"class":271},[77,142378,291],{"class":87},[77,142380,142381],{"class":79,"line":107},[77,142382,346],{"class":87},[77,142384,142385,142387,142389],{"class":79,"line":191},[77,142386,351],{"class":87},[77,142388,331],{"class":158},[77,142390,291],{"class":87},[24,142392,395,142393,398],{},[74,142394,307],{},[51,142396,142397,142401],{},[54,142398,403,142399,407],{},[74,142400,406],{},[54,142402,410,142403,414,142405,418],{},[74,142404,413],{},[74,142406,417],{},[24,142408,248],{},[67,142410,142411],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,142412,142413,142421,142431,142441],{"__ignoreMap":72},[77,142414,142415,142417,142419],{"class":79,"line":80},[77,142416,331],{"class":158},[77,142418,432],{"class":83},[77,142420,88],{"class":87},[77,142422,142423,142425,142427,142429],{"class":79,"line":91},[77,142424,439],{"class":94},[77,142426,98],{"class":87},[77,142428,444],{"class":271},[77,142430,104],{"class":87},[77,142432,142433,142435,142437,142439],{"class":79,"line":107},[77,142434,451],{"class":94},[77,142436,98],{"class":87},[77,142438,456],{"class":94},[77,142440,104],{"class":87},[77,142442,142443],{"class":79,"line":191},[77,142444,110],{"class":87},[24,142446,358],{},[67,142448,142449],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,142450,142451,142459,142469,142479],{"__ignoreMap":72},[77,142452,142453,142455,142457],{"class":79,"line":80},[77,142454,331],{"class":158},[77,142456,432],{"class":83},[77,142458,88],{"class":87},[77,142460,142461,142463,142465,142467],{"class":79,"line":91},[77,142462,439],{"class":94},[77,142464,98],{"class":87},[77,142466,444],{"class":271},[77,142468,104],{"class":87},[77,142470,142471,142473,142475,142477],{"class":79,"line":107},[77,142472,451],{"class":94},[77,142474,98],{"class":87},[77,142476,456],{"class":94},[77,142478,104],{"class":87},[77,142480,142481],{"class":79,"line":191},[77,142482,110],{"class":87},[24,142484,503,142485],{},[74,142486,311],{},[51,142488,142489,142495],{},[54,142490,510,142491,513,142493,516],{},[74,142492,51],{},[74,142494,54],{},[54,142496,519,142497,522,142499,526,142501,530,142503],{},[74,142498,54],{},[74,142500,525],{},[74,142502,529],{},[74,142504,533],{},[24,142506,248],{},[67,142508,142509],{"className":69,"code":538,"language":71,"meta":72,"style":72},[74,142510,142511,142517,142527],{"__ignoreMap":72},[77,142512,142513,142515],{"class":79,"line":80},[77,142514,331],{"class":158},[77,142516,88],{"class":87},[77,142518,142519,142521,142523,142525],{"class":79,"line":91},[77,142520,551],{"class":94},[77,142522,98],{"class":87},[77,142524,556],{"class":94},[77,142526,104],{"class":87},[77,142528,142529],{"class":79,"line":107},[77,142530,110],{"class":87},[24,142532,358],{},[67,142534,142535],{"className":69,"code":538,"language":71,"meta":72,"style":72},[74,142536,142537,142543,142553],{"__ignoreMap":72},[77,142538,142539,142541],{"class":79,"line":80},[77,142540,331],{"class":158},[77,142542,88],{"class":87},[77,142544,142545,142547,142549,142551],{"class":79,"line":91},[77,142546,551],{"class":94},[77,142548,98],{"class":87},[77,142550,556],{"class":94},[77,142552,104],{"class":87},[77,142554,142555],{"class":79,"line":107},[77,142556,110],{"class":87},[24,142558,591,142559,595],{},[74,142560,594],{},[40,142562],{"style":42,"src":598},[51,142564,142565,142567,142573,142591,142599],{},[54,142566,603],{},[54,142568,606,142569,610,142571,613],{},[74,142570,609],{},[74,142572,54],{},[54,142574,616,142575],{},[51,142576,142577,142581,142587],{},[54,142578,142579,623],{},[74,142580,594],{},[54,142582,626,142583,629,142585,632],{},[74,142584,594],{},[74,142586,51],{},[54,142588,142589,637],{},[74,142590,594],{},[54,142592,640,142593,643,142595,647,142597,650],{},[74,142594,54],{},[74,142596,646],{},[74,142598,24],{},[54,142600,653,142601,656,142603,659,142605,662,142607,666],{},[74,142602,646],{},[74,142604,646],{},[74,142606,54],{},[74,142608,665],{},[24,142610,248],{},[67,142612,142613],{"className":69,"code":671,"language":71,"meta":72,"style":72},[74,142614,142615,142633,142637,142647],{"__ignoreMap":72},[77,142616,142617,142619,142621,142623,142625,142627,142629,142631],{"class":79,"line":80},[77,142618,77],{"class":158},[77,142620,680],{"class":87},[77,142622,417],{"class":158},[77,142624,680],{"class":87},[77,142626,687],{"class":158},[77,142628,680],{"class":87},[77,142630,27],{"class":158},[77,142632,88],{"class":87},[77,142634,142635],{"class":79,"line":91},[77,142636,698],{"class":323},[77,142638,142639,142641,142643,142645],{"class":79,"line":107},[77,142640,451],{"class":94},[77,142642,98],{"class":87},[77,142644,707],{"class":94},[77,142646,104],{"class":87},[77,142648,142649],{"class":79,"line":191},[77,142650,110],{"class":87},[24,142652,358],{},[67,142654,142655],{"className":69,"code":671,"language":71,"meta":72,"style":72},[74,142656,142657,142675,142679,142689],{"__ignoreMap":72},[77,142658,142659,142661,142663,142665,142667,142669,142671,142673],{"class":79,"line":80},[77,142660,77],{"class":158},[77,142662,680],{"class":87},[77,142664,417],{"class":158},[77,142666,680],{"class":87},[77,142668,687],{"class":158},[77,142670,680],{"class":87},[77,142672,27],{"class":158},[77,142674,88],{"class":87},[77,142676,142677],{"class":79,"line":91},[77,142678,698],{"class":323},[77,142680,142681,142683,142685,142687],{"class":79,"line":107},[77,142682,451],{"class":94},[77,142684,98],{"class":87},[77,142686,707],{"class":94},[77,142688,104],{"class":87},[77,142690,142691],{"class":79,"line":191},[77,142692,110],{"class":87},[24,142694,758,142695,762],{},[74,142696,761],{},[51,142698,142699],{},[54,142700,767],{},[24,142702,248],{},[67,142704,142705],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,142706,142707],{"__ignoreMap":72},[77,142708,142709,142711,142713,142715,142717,142719,142721,142723,142725,142727,142729,142731],{"class":79,"line":80},[77,142710,260],{"class":87},[77,142712,40],{"class":158},[77,142714,265],{"class":83},[77,142716,268],{"class":87},[77,142718,272],{"class":271},[77,142720,275],{"class":83},[77,142722,268],{"class":87},[77,142724,280],{"class":271},[77,142726,283],{"class":83},[77,142728,268],{"class":87},[77,142730,288],{"class":271},[77,142732,291],{"class":87},[24,142734,358],{},[67,142736,142737],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,142738,142739],{"__ignoreMap":72},[77,142740,142741,142743,142745,142747,142749,142751,142753,142755,142757,142759,142761,142763],{"class":79,"line":80},[77,142742,260],{"class":87},[77,142744,40],{"class":158},[77,142746,265],{"class":83},[77,142748,268],{"class":87},[77,142750,272],{"class":271},[77,142752,275],{"class":83},[77,142754,268],{"class":87},[77,142756,280],{"class":271},[77,142758,283],{"class":83},[77,142760,268],{"class":87},[77,142762,288],{"class":271},[77,142764,291],{"class":87},[19,142766,835],{"id":834},[40,142768],{"style":42,"src":838},[24,142770,841,142771,845],{},[74,142772,844],{},[51,142774,142775],{},[54,142776,850,142777,853,142779,857],{},[74,142778,844],{},[74,142780,856],{},[24,142782,248],{},[67,142784,142785],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,142786,142787,142793,142803],{"__ignoreMap":72},[77,142788,142789,142791],{"class":79,"line":80},[77,142790,331],{"class":158},[77,142792,88],{"class":87},[77,142794,142795,142797,142799,142801],{"class":79,"line":91},[77,142796,875],{"class":94},[77,142798,98],{"class":87},[77,142800,880],{"class":94},[77,142802,104],{"class":87},[77,142804,142805],{"class":79,"line":107},[77,142806,110],{"class":87},[24,142808,358],{},[67,142810,142811],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,142812,142813,142819,142829],{"__ignoreMap":72},[77,142814,142815,142817],{"class":79,"line":80},[77,142816,331],{"class":158},[77,142818,88],{"class":87},[77,142820,142821,142823,142825,142827],{"class":79,"line":91},[77,142822,875],{"class":94},[77,142824,98],{"class":87},[77,142826,880],{"class":94},[77,142828,104],{"class":87},[77,142830,142831],{"class":79,"line":107},[77,142832,110],{"class":87},[24,142834,915],{},[24,142836,248],{},[67,142838,142839],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,142840,142841,142847,142857],{"__ignoreMap":72},[77,142842,142843,142845],{"class":79,"line":80},[77,142844,84],{"class":83},[77,142846,88],{"class":87},[77,142848,142849,142851,142853,142855],{"class":79,"line":91},[77,142850,95],{"class":94},[77,142852,98],{"class":87},[77,142854,101],{"class":94},[77,142856,104],{"class":87},[77,142858,142859],{"class":79,"line":107},[77,142860,110],{"class":87},[24,142862,944,142863],{},[74,142864,947],{},[51,142866,142867,142869],{},[54,142868,952],{},[54,142870,403,142871,957],{},[74,142872,40],{},[24,142874,248],{},[67,142876,142877],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,142878,142879],{"__ignoreMap":72},[77,142880,142881,142883,142885,142887,142889,142891,142893,142895,142897,142899,142901,142903],{"class":79,"line":80},[77,142882,260],{"class":87},[77,142884,40],{"class":158},[77,142886,265],{"class":83},[77,142888,268],{"class":87},[77,142890,272],{"class":271},[77,142892,275],{"class":83},[77,142894,268],{"class":87},[77,142896,280],{"class":271},[77,142898,283],{"class":83},[77,142900,268],{"class":87},[77,142902,288],{"class":271},[77,142904,291],{"class":87},[24,142906,358],{},[67,142908,142909],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,142910,142911],{"__ignoreMap":72},[77,142912,142913,142915,142917,142919,142921,142923,142925,142927,142929,142931,142933,142935],{"class":79,"line":80},[77,142914,260],{"class":87},[77,142916,40],{"class":158},[77,142918,265],{"class":83},[77,142920,268],{"class":87},[77,142922,272],{"class":271},[77,142924,275],{"class":83},[77,142926,268],{"class":87},[77,142928,280],{"class":271},[77,142930,283],{"class":83},[77,142932,268],{"class":87},[77,142934,288],{"class":271},[77,142936,291],{"class":87},[24,142938,1024,142939,1028],{},[74,142940,1027],{},[51,142942,142943,142951,142953,142957,142961],{},[54,142944,1033,142945,1036,142947,1039,142949],{},[74,142946,51],{},[74,142948,54],{},[74,142950,40],{},[54,142952,1044],{},[54,142954,653,142955,1049],{},[74,142956,54],{},[54,142958,653,142959,1054],{},[74,142960,40],{},[54,142962,1057,142963,610,142965,1063,142967,1066,142969],{},[74,142964,1060],{},[74,142966,54],{},[74,142968,54],{},[74,142970,1069],{},[24,142972,248],{},[67,142974,142975],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,142976,142977,142985,142995,143005],{"__ignoreMap":72},[77,142978,142979,142981,142983],{"class":79,"line":80},[77,142980,331],{"class":158},[77,142982,432],{"class":83},[77,142984,88],{"class":87},[77,142986,142987,142989,142991,142993],{"class":79,"line":91},[77,142988,439],{"class":94},[77,142990,98],{"class":87},[77,142992,444],{"class":271},[77,142994,104],{"class":87},[77,142996,142997,142999,143001,143003],{"class":79,"line":107},[77,142998,451],{"class":94},[77,143000,98],{"class":87},[77,143002,456],{"class":94},[77,143004,104],{"class":87},[77,143006,143007],{"class":79,"line":191},[77,143008,110],{"class":87},[24,143010,358],{},[67,143012,143013],{"className":69,"code":423,"language":71,"meta":72,"style":72},[74,143014,143015,143023,143033,143043],{"__ignoreMap":72},[77,143016,143017,143019,143021],{"class":79,"line":80},[77,143018,331],{"class":158},[77,143020,432],{"class":83},[77,143022,88],{"class":87},[77,143024,143025,143027,143029,143031],{"class":79,"line":91},[77,143026,439],{"class":94},[77,143028,98],{"class":87},[77,143030,444],{"class":271},[77,143032,104],{"class":87},[77,143034,143035,143037,143039,143041],{"class":79,"line":107},[77,143036,451],{"class":94},[77,143038,98],{"class":87},[77,143040,456],{"class":94},[77,143042,104],{"class":87},[77,143044,143045],{"class":79,"line":191},[77,143046,110],{"class":87},[19,143048,1149],{"id":1148},[40,143050],{"style":42,"src":1152},[24,143052,1155],{},[24,143054,1158],{},[24,143056,143057,1164],{},[74,143058,1163],{},[24,143060,944,143061,1169],{},[74,143062,1163],{},[40,143064],{"style":42,"src":1172},[51,143066,143067,143071,143075,143077],{},[54,143068,143069,1179],{},[74,143070,1163],{},[54,143072,1182,143073],{},[74,143074,1185],{},[54,143076,1188],{},[54,143078,143079,1193,143081,1197],{},[74,143080,417],{},[74,143082,1196],{},[24,143084,1200],{},[67,143086,143087],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,143088,143089,143095,143105],{"__ignoreMap":72},[77,143090,143091,143093],{"class":79,"line":80},[77,143092,84],{"class":83},[77,143094,88],{"class":87},[77,143096,143097,143099,143101,143103],{"class":79,"line":91},[77,143098,95],{"class":94},[77,143100,98],{"class":87},[77,143102,101],{"class":94},[77,143104,104],{"class":87},[77,143106,143107],{"class":79,"line":107},[77,143108,110],{"class":87},[24,143110,1227],{},[67,143112,143113],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,143114,143115,143121,143131],{"__ignoreMap":72},[77,143116,143117,143119],{"class":79,"line":80},[77,143118,84],{"class":83},[77,143120,88],{"class":87},[77,143122,143123,143125,143127,143129],{"class":79,"line":91},[77,143124,95],{"class":94},[77,143126,98],{"class":87},[77,143128,101],{"class":94},[77,143130,104],{"class":87},[77,143132,143133],{"class":79,"line":107},[77,143134,110],{"class":87},[24,143136,143137,1164],{},[74,143138,1256],{},[24,143140,1259],{},[40,143142],{"style":42,"src":1262},[24,143144,1265],{},[24,143146,1268],{},[24,143148,1271],{},[51,143150,143151,143159,143169],{},[54,143152,143153,1278,143155,1282,143157,1285],{},[74,143154,1256],{},[74,143156,1281],{},[74,143158,1281],{},[54,143160,1288,143161,1292,143163,1295,143165,1298,143167,1301],{},[74,143162,1291],{},[74,143164,51],{},[74,143166,54],{},[74,143168,54],{},[54,143170,1304,143171,1307,143173,1310,143175],{},[74,143172,54],{},[74,143174,54],{},[51,143176,143177,143189,143191],{},[54,143178,1315,143179,1318,143181,1321,143183,1324,143185,1327,143187,1330],{},[74,143180,54],{},[74,143182,51],{},[74,143184,54],{},[74,143186,54],{},[74,143188,417],{},[54,143190,1333],{},[54,143192,1336,143193,1339,143195,1342,143197,1345],{},[74,143194,54],{},[74,143196,417],{},[74,143198,417],{},[24,143200,1200],{},[67,143202,143203],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,143204,143205],{"__ignoreMap":72},[77,143206,143207,143209,143211,143213,143215,143217,143219,143221,143223,143225,143227,143229],{"class":79,"line":80},[77,143208,260],{"class":87},[77,143210,40],{"class":158},[77,143212,265],{"class":83},[77,143214,268],{"class":87},[77,143216,272],{"class":271},[77,143218,275],{"class":83},[77,143220,268],{"class":87},[77,143222,280],{"class":271},[77,143224,283],{"class":83},[77,143226,268],{"class":87},[77,143228,288],{"class":271},[77,143230,291],{"class":87},[24,143232,1227],{},[67,143234,143235],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,143236,143237],{"__ignoreMap":72},[77,143238,143239,143241,143243,143245,143247,143249,143251,143253,143255,143257,143259,143261],{"class":79,"line":80},[77,143240,260],{"class":87},[77,143242,40],{"class":158},[77,143244,265],{"class":83},[77,143246,268],{"class":87},[77,143248,272],{"class":271},[77,143250,275],{"class":83},[77,143252,268],{"class":87},[77,143254,280],{"class":271},[77,143256,283],{"class":83},[77,143258,268],{"class":87},[77,143260,288],{"class":271},[77,143262,291],{"class":87},[24,143264,1412],{},[40,143266],{"style":42,"src":1415},[51,143268,143269,143275,143279,143281],{},[54,143270,143271,1423,143273],{},[74,143272,1422],{},[74,143274,1185],{},[54,143276,1428,143277,1431],{},[74,143278,1422],{},[54,143280,1434],{},[54,143282,1437,143283,1441,143285,1444,143287,1447],{},[74,143284,1440],{},[74,143286,1440],{},[74,143288,1422],{},[14,143290,1451],{"id":1450},[19,143292,1455],{"id":1454},[51,143294,143295,143297,143299,143301],{},[54,143296,1460],{},[54,143298,1463],{},[54,143300,1466],{},[54,143302,1469],{},[19,143304,1473,143305,513,143307,1480],{"id":1472},[74,143306,1476],{},[74,143308,1479],{},[40,143310],{"style":42,"src":1483},[51,143312,143313],{},[54,143314,1488],{},[24,143316,248],{},[67,143318,143319],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,143320,143321,143325,143339,143343,143357,143361,143375,143379,143393,143397],{"__ignoreMap":72},[77,143322,143323],{"class":79,"line":80},[77,143324,1500],{"class":323},[77,143326,143327,143329,143331,143333,143335,143337],{"class":79,"line":91},[77,143328,1505],{"class":83},[77,143330,1508],{"class":87},[77,143332,1511],{"class":94},[77,143334,98],{"class":87},[77,143336,1516],{"class":94},[77,143338,1519],{"class":87},[77,143340,143341],{"class":79,"line":107},[77,143342,1524],{"class":323},[77,143344,143345,143347,143349,143351,143353,143355],{"class":79,"line":191},[77,143346,1529],{"class":83},[77,143348,1508],{"class":87},[77,143350,1511],{"class":94},[77,143352,98],{"class":87},[77,143354,1538],{"class":94},[77,143356,1519],{"class":87},[77,143358,143359],{"class":79,"line":1543},[77,143360,1546],{"class":323},[77,143362,143363,143365,143367,143369,143371,143373],{"class":79,"line":1549},[77,143364,1552],{"class":83},[77,143366,1508],{"class":87},[77,143368,1511],{"class":94},[77,143370,98],{"class":87},[77,143372,1561],{"class":94},[77,143374,1519],{"class":87},[77,143376,143377],{"class":79,"line":1566},[77,143378,1569],{"class":323},[77,143380,143381,143383,143385,143387,143389,143391],{"class":79,"line":1572},[77,143382,1575],{"class":83},[77,143384,1508],{"class":87},[77,143386,1511],{"class":94},[77,143388,98],{"class":87},[77,143390,1584],{"class":94},[77,143392,1519],{"class":87},[77,143394,143395],{"class":79,"line":1589},[77,143396,1592],{"class":323},[77,143398,143399,143401,143403,143405,143407,143409],{"class":79,"line":1595},[77,143400,1598],{"class":83},[77,143402,1508],{"class":87},[77,143404,1511],{"class":94},[77,143406,98],{"class":87},[77,143408,1607],{"class":94},[77,143410,1519],{"class":87},[24,143412,358],{},[67,143414,143415],{"className":69,"code":1493,"language":71,"meta":72,"style":72},[74,143416,143417,143421,143435,143439,143453,143457,143471,143475,143489,143493],{"__ignoreMap":72},[77,143418,143419],{"class":79,"line":80},[77,143420,1500],{"class":323},[77,143422,143423,143425,143427,143429,143431,143433],{"class":79,"line":91},[77,143424,1505],{"class":83},[77,143426,1508],{"class":87},[77,143428,1511],{"class":94},[77,143430,98],{"class":87},[77,143432,1516],{"class":94},[77,143434,1519],{"class":87},[77,143436,143437],{"class":79,"line":107},[77,143438,1524],{"class":323},[77,143440,143441,143443,143445,143447,143449,143451],{"class":79,"line":191},[77,143442,1529],{"class":83},[77,143444,1508],{"class":87},[77,143446,1511],{"class":94},[77,143448,98],{"class":87},[77,143450,1538],{"class":94},[77,143452,1519],{"class":87},[77,143454,143455],{"class":79,"line":1543},[77,143456,1546],{"class":323},[77,143458,143459,143461,143463,143465,143467,143469],{"class":79,"line":1549},[77,143460,1552],{"class":83},[77,143462,1508],{"class":87},[77,143464,1511],{"class":94},[77,143466,98],{"class":87},[77,143468,1561],{"class":94},[77,143470,1519],{"class":87},[77,143472,143473],{"class":79,"line":1566},[77,143474,1569],{"class":323},[77,143476,143477,143479,143481,143483,143485,143487],{"class":79,"line":1572},[77,143478,1575],{"class":83},[77,143480,1508],{"class":87},[77,143482,1511],{"class":94},[77,143484,98],{"class":87},[77,143486,1584],{"class":94},[77,143488,1519],{"class":87},[77,143490,143491],{"class":79,"line":1589},[77,143492,1592],{"class":323},[77,143494,143495,143497,143499,143501,143503,143505],{"class":79,"line":1595},[77,143496,1598],{"class":83},[77,143498,1508],{"class":87},[77,143500,1511],{"class":94},[77,143502,98],{"class":87},[77,143504,1607],{"class":94},[77,143506,1519],{"class":87},[51,143508,143509,143517],{},[54,143510,1710,143511,1714,143513,513,143515],{},[74,143512,1713],{},[74,143514,51],{},[74,143516,54],{},[54,143518,1721,143519,1714,143521,513,143523],{},[74,143520,1724],{},[74,143522,51],{},[74,143524,54],{},[24,143526,248],{},[67,143528,143529],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,143530,143531,143537,143547],{"__ignoreMap":72},[77,143532,143533,143535],{"class":79,"line":80},[77,143534,84],{"class":83},[77,143536,88],{"class":87},[77,143538,143539,143541,143543,143545],{"class":79,"line":91},[77,143540,95],{"class":94},[77,143542,98],{"class":87},[77,143544,101],{"class":94},[77,143546,104],{"class":87},[77,143548,143549],{"class":79,"line":107},[77,143550,110],{"class":87},[24,143552,358],{},[67,143554,143555],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,143556,143557,143563,143573],{"__ignoreMap":72},[77,143558,143559,143561],{"class":79,"line":80},[77,143560,84],{"class":83},[77,143562,88],{"class":87},[77,143564,143565,143567,143569,143571],{"class":79,"line":91},[77,143566,95],{"class":94},[77,143568,98],{"class":87},[77,143570,101],{"class":94},[77,143572,104],{"class":87},[77,143574,143575],{"class":79,"line":107},[77,143576,110],{"class":87},[19,143578,1784,143579],{"id":1783},[74,143580,1787],{},[40,143582],{"style":42,"src":1790},[51,143584,143585,143589],{},[54,143586,944,143587,1797],{},[74,143588,1787],{},[54,143590,1800],{},[24,143592,248],{},[67,143594,143595],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,143596,143597,143603,143613],{"__ignoreMap":72},[77,143598,143599,143601],{"class":79,"line":80},[77,143600,84],{"class":83},[77,143602,88],{"class":87},[77,143604,143605,143607,143609,143611],{"class":79,"line":91},[77,143606,95],{"class":94},[77,143608,98],{"class":87},[77,143610,101],{"class":94},[77,143612,104],{"class":87},[77,143614,143615],{"class":79,"line":107},[77,143616,110],{"class":87},[139,143618,143619],{},[54,143620,1831],{},[51,143622,143623],{},[54,143624,1024,143625,1839],{},[74,143626,1838],{},[24,143628,248],{},[67,143630,143631],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,143632,143633],{"__ignoreMap":72},[77,143634,143635,143637,143639,143641,143643,143645,143647,143649,143651,143653,143655,143657],{"class":79,"line":80},[77,143636,260],{"class":87},[77,143638,40],{"class":158},[77,143640,265],{"class":83},[77,143642,268],{"class":87},[77,143644,272],{"class":271},[77,143646,275],{"class":83},[77,143648,268],{"class":87},[77,143650,280],{"class":271},[77,143652,283],{"class":83},[77,143654,268],{"class":87},[77,143656,288],{"class":271},[77,143658,291],{"class":87},[139,143660,143661],{"start":91},[54,143662,1876],{},[51,143664,143665],{},[54,143666,1881,143667,1885,143669,513,143671,143673],{},[74,143668,1884],{},[74,143670,51],{},[74,143672,54],{},[51,143674,143675,143681],{},[54,143676,1894,143677,1897,143679,1900],{},[74,143678,54],{},[74,143680,54],{},[54,143682,1903,143683,1906,143685,1909,143687,1913,143689,1916],{},[74,143684,54],{},[74,143686,54],{},[74,143688,1912],{},[74,143690,54],{},[24,143692,248],{},[67,143694,143695],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,143696,143697,143703,143715],{"__ignoreMap":72},[77,143698,143699,143701],{"class":79,"line":80},[77,143700,331],{"class":158},[77,143702,88],{"class":87},[77,143704,143705,143707,143709,143711,143713],{"class":79,"line":91},[77,143706,1934],{"class":94},[77,143708,98],{"class":87},[77,143710,1939],{"class":94},[77,143712,1942],{"class":94},[77,143714,104],{"class":87},[77,143716,143717],{"class":79,"line":107},[77,143718,110],{"class":87},[24,143720,358],{},[67,143722,143723],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,143724,143725,143731,143743],{"__ignoreMap":72},[77,143726,143727,143729],{"class":79,"line":80},[77,143728,331],{"class":158},[77,143730,88],{"class":87},[77,143732,143733,143735,143737,143739,143741],{"class":79,"line":91},[77,143734,1934],{"class":94},[77,143736,98],{"class":87},[77,143738,1939],{"class":94},[77,143740,1942],{"class":94},[77,143742,104],{"class":87},[77,143744,143745],{"class":79,"line":107},[77,143746,110],{"class":87},[14,143748,1980],{"id":1979},[40,143750],{"style":42,"src":1983},[24,143752,143753,1989],{},[27,143754,1988],{},[40,143756],{"style":42,"src":1992},[19,143758,1996],{"id":1995},[51,143760,143761,143763],{},[54,143762,2001],{},[54,143764,2004],{},[19,143766,2008,143767,2011],{"id":2007},[74,143768,1476],{},[51,143770,143771,143773],{},[54,143772,2016],{},[54,143774,2019],{},[24,143776,248],{},[67,143778,143779],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,143780,143781],{"__ignoreMap":72},[77,143782,143783,143785,143787,143789,143791,143793,143795,143797,143799,143801,143803,143805],{"class":79,"line":80},[77,143784,260],{"class":87},[77,143786,40],{"class":158},[77,143788,265],{"class":83},[77,143790,268],{"class":87},[77,143792,272],{"class":271},[77,143794,275],{"class":83},[77,143796,268],{"class":87},[77,143798,280],{"class":271},[77,143800,283],{"class":83},[77,143802,268],{"class":87},[77,143804,288],{"class":271},[77,143806,291],{"class":87},[24,143808,358],{},[67,143810,143811],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,143812,143813],{"__ignoreMap":72},[77,143814,143815,143817,143819,143821,143823,143825,143827,143829,143831,143833,143835,143837],{"class":79,"line":80},[77,143816,260],{"class":87},[77,143818,40],{"class":158},[77,143820,265],{"class":83},[77,143822,268],{"class":87},[77,143824,272],{"class":271},[77,143826,275],{"class":83},[77,143828,268],{"class":87},[77,143830,280],{"class":271},[77,143832,283],{"class":83},[77,143834,268],{"class":87},[77,143836,288],{"class":271},[77,143838,291],{"class":87},[19,143840,2087,143841,2091],{"id":2086},[74,143842,2090],{},[40,143844],{"style":42,"src":2094},[24,143846,2097],{},[24,143848,248],{},[67,143850,143851],{"className":69,"code":2102,"language":71,"meta":72,"style":72},[74,143852,143853,143859,143875],{"__ignoreMap":72},[77,143854,143855,143857],{"class":79,"line":80},[77,143856,331],{"class":158},[77,143858,88],{"class":87},[77,143860,143861,143863,143865,143867,143869,143871,143873],{"class":79,"line":91},[77,143862,2115],{"class":94},[77,143864,98],{"class":87},[77,143866,2120],{"class":94},[77,143868,2124],{"class":2123},[77,143870,2127],{"class":94},[77,143872,2130],{"class":94},[77,143874,104],{"class":87},[77,143876,143877],{"class":79,"line":107},[77,143878,110],{"class":87},[24,143880,358],{},[67,143882,143883],{"className":69,"code":2102,"language":71,"meta":72,"style":72},[74,143884,143885,143891,143907],{"__ignoreMap":72},[77,143886,143887,143889],{"class":79,"line":80},[77,143888,331],{"class":158},[77,143890,88],{"class":87},[77,143892,143893,143895,143897,143899,143901,143903,143905],{"class":79,"line":91},[77,143894,2115],{"class":94},[77,143896,98],{"class":87},[77,143898,2120],{"class":94},[77,143900,2124],{"class":2123},[77,143902,2127],{"class":94},[77,143904,2130],{"class":94},[77,143906,104],{"class":87},[77,143908,143909],{"class":79,"line":107},[77,143910,110],{"class":87},[24,143912,2171],{},[51,143914,143915],{},[54,143916,2176],{},[24,143918,248],{},[67,143920,143921],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,143922,143923,143929,143939],{"__ignoreMap":72},[77,143924,143925,143927],{"class":79,"line":80},[77,143926,84],{"class":83},[77,143928,88],{"class":87},[77,143930,143931,143933,143935,143937],{"class":79,"line":91},[77,143932,95],{"class":94},[77,143934,98],{"class":87},[77,143936,101],{"class":94},[77,143938,104],{"class":87},[77,143940,143941],{"class":79,"line":107},[77,143942,110],{"class":87},[24,143944,358],{},[67,143946,143947],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,143948,143949,143955,143965],{"__ignoreMap":72},[77,143950,143951,143953],{"class":79,"line":80},[77,143952,84],{"class":83},[77,143954,88],{"class":87},[77,143956,143957,143959,143961,143963],{"class":79,"line":91},[77,143958,95],{"class":94},[77,143960,98],{"class":87},[77,143962,101],{"class":94},[77,143964,104],{"class":87},[77,143966,143967],{"class":79,"line":107},[77,143968,110],{"class":87},[24,143970,2231],{},[51,143972,143973,143975,143981,143991,143999,144001,144003,144015,144025],{},[54,143974,2236],{},[54,143976,2239,143977,2242,143979,2245],{},[74,143978,51],{},[74,143980,54],{},[54,143982,2248,143983,2251,143985,2255,143987,2258,143989,2261],{},[74,143984,54],{},[74,143986,2254],{},[74,143988,159],{},[74,143990,77],{},[54,143992,2264,143993,2267,143995,2270,143997,2274],{},[74,143994,2254],{},[74,143996,2254],{},[74,143998,2273],{},[54,144000,2277],{},[54,144002,2280],{},[54,144004,2283,144005],{},[51,144006,144007,144009,144011],{},[54,144008,2288],{},[54,144010,2291],{},[54,144012,2294,144013,2298],{},[74,144014,2297],{},[54,144016,2301,144017],{},[51,144018,144019,144023],{},[54,144020,2306,144021,2309],{},[74,144022,687],{},[54,144024,2312],{},[54,144026,2315,144027,2318],{},[74,144028,54],{},[24,144030,248],{},[67,144032,144033],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,144034,144035,144041,144051],{"__ignoreMap":72},[77,144036,144037,144039],{"class":79,"line":80},[77,144038,331],{"class":158},[77,144040,88],{"class":87},[77,144042,144043,144045,144047,144049],{"class":79,"line":91},[77,144044,875],{"class":94},[77,144046,98],{"class":87},[77,144048,880],{"class":94},[77,144050,104],{"class":87},[77,144052,144053],{"class":79,"line":107},[77,144054,110],{"class":87},[24,144056,358],{},[67,144058,144059],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,144060,144061,144067,144077],{"__ignoreMap":72},[77,144062,144063,144065],{"class":79,"line":80},[77,144064,331],{"class":158},[77,144066,88],{"class":87},[77,144068,144069,144071,144073,144075],{"class":79,"line":91},[77,144070,875],{"class":94},[77,144072,98],{"class":87},[77,144074,880],{"class":94},[77,144076,104],{"class":87},[77,144078,144079],{"class":79,"line":107},[77,144080,110],{"class":87},[19,144082,2374],{"id":2373},[24,144084,248],{},[67,144086,144087],{"className":69,"code":862,"language":71,"meta":72,"style":72},[74,144088,144089,144095,144105],{"__ignoreMap":72},[77,144090,144091,144093],{"class":79,"line":80},[77,144092,331],{"class":158},[77,144094,88],{"class":87},[77,144096,144097,144099,144101,144103],{"class":79,"line":91},[77,144098,875],{"class":94},[77,144100,98],{"class":87},[77,144102,880],{"class":94},[77,144104,104],{"class":87},[77,144106,144107],{"class":79,"line":107},[77,144108,110],{"class":87},[24,144110,358],{},[67,144112,144113],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,144114,144115,144119,144133,144137],{"__ignoreMap":72},[77,144116,144117],{"class":79,"line":80},[77,144118,324],{"class":323},[77,144120,144121,144123,144125,144127,144129,144131],{"class":79,"line":91},[77,144122,260],{"class":87},[77,144124,331],{"class":158},[77,144126,334],{"class":83},[77,144128,268],{"class":87},[77,144130,339],{"class":271},[77,144132,291],{"class":87},[77,144134,144135],{"class":79,"line":107},[77,144136,346],{"class":87},[77,144138,144139,144141,144143],{"class":79,"line":191},[77,144140,351],{"class":87},[77,144142,331],{"class":158},[77,144144,291],{"class":87},[14,144146,2440],{"id":2439},[139,144148,144149,144151,144153,144155],{},[54,144150,2445],{},[54,144152,2448],{},[54,144154,2451],{},[54,144156,2454],{},[40,144158],{"style":42,"src":2457},[139,144160,144161],{"start":1543},[54,144162,2462],{},[40,144164],{"style":42,"src":2465},[139,144166,144167],{"start":1549},[54,144168,2470],{},[40,144170],{"style":42,"src":2473},[67,144172,144173],{"className":251,"code":2476,"language":253,"meta":72,"style":72},[74,144174,144175],{"__ignoreMap":72},[77,144176,144177,144179,144181,144183,144185,144187,144189,144191,144193,144195,144197,144199],{"class":79,"line":80},[77,144178,260],{"class":87},[77,144180,159],{"class":158},[77,144182,2487],{"class":83},[77,144184,268],{"class":87},[77,144186,2492],{"class":271},[77,144188,2495],{"class":83},[77,144190,268],{"class":87},[77,144192,2500],{"class":271},[77,144194,2503],{"class":83},[77,144196,268],{"class":87},[77,144198,2508],{"class":271},[77,144200,291],{"class":87},[139,144202,144203,144205],{"start":1566},[54,144204,2515],{},[54,144206,2518],{},[2520,144208,2522],{},{"title":72,"searchDepth":91,"depth":91,"links":144210},[144211,144216,144221,144227],{"id":16,"depth":91,"text":17,"children":144212},[144213,144214,144215],{"id":21,"depth":107,"text":22},{"id":834,"depth":107,"text":835},{"id":1148,"depth":107,"text":1149},{"id":1450,"depth":91,"text":1451,"children":144217},[144218,144219,144220],{"id":1454,"depth":107,"text":1455},{"id":1472,"depth":107,"text":2534},{"id":1783,"depth":107,"text":2536},{"id":1979,"depth":91,"text":1980,"children":144222},[144223,144224,144225,144226],{"id":1995,"depth":107,"text":1996},{"id":2007,"depth":107,"text":2541},{"id":2086,"depth":107,"text":2543},{"id":2373,"depth":107,"text":2374},{"id":2439,"depth":91,"text":2440},{},{"title":5,"description":2546},{"id":144231,"title":144232,"body":144233,"description":2546,"extension":2547,"meta":144341,"navigation":2549,"path":144342,"seo":144343,"stem":144344,"__hash__":144345},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144234,"toc":144336},[144235,144238,144242,144245,144248,144257,144266,144270,144275,144282,144300,144303,144306,144309,144312,144315,144318,144321,144324,144327,144330,144333],[10,144236,144232],{"id":144237},"_17-web服务器与网站发布",[14,144239,144241],{"id":144240},"_171-web服务器","17.1 Web服务器",[24,144243,144244],{},"把自己网站上传到服务器上，可以让其他人访问",[40,144246],{"style":42,"src":144247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[24,144249,144250,144253,144254],{},[27,144251,144252],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[27,144255,144256],{},"Web 服务器等",[24,144258,144259,144260,513,144263,28208],{},"根据服务器在网络中所在的位置不同，又可分为 ",[27,144261,144262],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[27,144264,144265],{},"远程服务器",[19,144267,144269],{"id":144268},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[24,144271,144272],{},[27,144273,144274],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[24,144276,144277,144278],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[417,144279,144280],{"href":144280,"rel":144281},"http:\u002F\u002Ffree.3v.do\u002F",[26332],[51,144283,144284,144287,144290,144297],{},[54,144285,144286],{},"去免费空间网站注册账号。",[54,144288,144289],{},"记录下主机名、用户名、密码、域名。",[54,144291,144292,144293,144296],{},"利用 ",[74,144294,144295],{},"utftp"," 软件 上传网站到远程服务器",[54,144298,144299],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[24,144301,144302],{},"使用软件上传，对上传软件文件进行解压",[40,144304],{"style":42,"src":144305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[40,144307],{"style":42,"src":144308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[24,144310,144311],{},"输入刚刚申请的服务器账号信息：",[40,144313],{"style":42,"src":144314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[40,144316],{"style":42,"src":144317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[40,144319],{"style":42,"src":144320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[40,144322],{"style":42,"src":144323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[24,144325,144326],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[40,144328],{"style":42,"src":144329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[24,144331,144332],{},"浏览器输入域名即可访问",[24,144334,144335],{},"首页一定必须是index",{"title":72,"searchDepth":91,"depth":91,"links":144337},[144338],{"id":144240,"depth":91,"text":144241,"children":144339},[144340],{"id":144268,"depth":107,"text":144269},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144232,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144347,"title":144348,"body":144349,"description":2546,"extension":2547,"meta":145276,"navigation":2549,"path":145277,"seo":145278,"stem":145279,"__hash__":145280},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144350,"toc":145259},[144351,144354,144358,144361,144364,144375,144378,144382,144386,144391,144394,144397,144400,144403,144407,144433,144437,144441,144444,144447,144451,144484,144488,144491,144494,144558,144562,144566,144569,144572,144575,144579,144624,144628,144631,144661,144665,144669,144672,144675,144679,144682,144751,144754,144862,144864,144870,144874,144877,144880,144976,144979,144983,145007,145011,145014,145018,145021,145025,145028,145031,145034,145037,145041,145044,145047,145051,145055,145058,145061,145064,145067,145071,145074,145078,145081,145084,145129,145133,145137,145140,145143,145146,145178,145182,145185,145219,145223,145226,145256],[10,144352,144348],{"id":144353},"_18-2d动画与3d转换",[14,144355,144357],{"id":144356},"_181-css3-2d转换","18.1 CSS3 2D转换",[24,144359,144360],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[24,144362,144363],{},"转换（transform）你可以简单理解为变形",[51,144365,144366,144369,144372],{},[54,144367,144368],{},"移动：translate",[54,144370,144371],{},"旋转：rotate",[54,144373,144374],{},"缩放：scale",[40,144376],{"style":42,"src":144377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[19,144379,144381],{"id":144380},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24468,144383,144385],{"id":144384},"_18111-translate介绍","18.1.1.1 translate介绍",[24,144387,144388,144389],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[27,144390,135609],{},[40,144392],{"style":42,"src":144393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[24,144395,144396],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[24,144398,144399],{},"对于行内元素无效",[24,144401,144402],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24468,144404,144406],{"id":144405},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[67,144408,144409],{"className":69,"code":1921,"language":71,"meta":72,"style":72},[74,144410,144411,144417,144429],{"__ignoreMap":72},[77,144412,144413,144415],{"class":79,"line":80},[77,144414,331],{"class":158},[77,144416,88],{"class":87},[77,144418,144419,144421,144423,144425,144427],{"class":79,"line":91},[77,144420,1934],{"class":94},[77,144422,98],{"class":87},[77,144424,1939],{"class":94},[77,144426,1942],{"class":94},[77,144428,104],{"class":87},[77,144430,144431],{"class":79,"line":107},[77,144432,110],{"class":87},[19,144434,144436],{"id":144435},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24468,144438,144440],{"id":144439},"_18121-rotate介绍","18.1.2.1 rotate介绍",[24,144442,144443],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[40,144445],{"style":42,"src":144446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24468,144448,144450],{"id":144449},"_18122-旋转效果","18.1.2.2 旋转效果",[67,144452,144454],{"className":69,"code":144453,"language":71,"meta":72,"style":72},"div {\n  transform: rotate(45deg);\n}\n",[74,144455,144456,144462,144480],{"__ignoreMap":72},[77,144457,144458,144460],{"class":79,"line":80},[77,144459,331],{"class":158},[77,144461,88],{"class":87},[77,144463,144464,144466,144468,144471,144473,144475,144478],{"class":79,"line":91},[77,144465,138929],{"class":94},[77,144467,98],{"class":87},[77,144469,144470],{"class":94},"rotate",[77,144472,2622],{"class":87},[77,144474,3142],{"class":94},[77,144476,144477],{"class":2123},"deg",[77,144479,5194],{"class":87},[77,144481,144482],{"class":79,"line":107},[77,144483,110],{"class":87},[24468,144485,144487],{"id":144486},"_18123-三角做法","18.1.2.3 三角做法",[24,144489,144490],{},"该下标当经过最外层大盒子时会实现向上反转",[40,144492],{"style":42,"src":144493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[67,144495,144496],{"className":69,"code":137465,"language":71,"meta":72,"style":72},[74,144497,144498,144502,144508,144518,144528,144544,144554],{"__ignoreMap":72},[77,144499,144500],{"class":79,"line":80},[77,144501,137472],{"class":323},[77,144503,144504,144506],{"class":79,"line":91},[77,144505,137477],{"class":83},[77,144507,88],{"class":87},[77,144509,144510,144512,144514,144516],{"class":79,"line":107},[77,144511,73010],{"class":94},[77,144513,98],{"class":87},[77,144515,1939],{"class":94},[77,144517,104],{"class":87},[77,144519,144520,144522,144524,144526],{"class":79,"line":191},[77,144521,73230],{"class":94},[77,144523,98],{"class":87},[77,144525,1939],{"class":94},[77,144527,104],{"class":87},[77,144529,144530,144532,144534,144536,144538,144540,144542],{"class":79,"line":1543},[77,144531,2115],{"class":94},[77,144533,98],{"class":87},[77,144535,3059],{"class":94},[77,144537,2124],{"class":2123},[77,144539,2127],{"class":94},[77,144541,66434],{"class":94},[77,144543,104],{"class":87},[77,144545,144546,144548,144550,144552],{"class":79,"line":1549},[77,144547,137520],{"class":94},[77,144549,98],{"class":87},[77,144551,64813],{"class":94},[77,144553,104],{"class":87},[77,144555,144556],{"class":79,"line":1566},[77,144557,110],{"class":87},[19,144559,144561],{"id":144560},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24468,144563,144565],{"id":144564},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[24,144567,144568],{},"设置中心点",[40,144570],{"style":42,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[24,144573,144574],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24468,144576,144578],{"id":144577},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[67,144580,144582],{"className":69,"code":144581,"language":71,"meta":72,"style":72},"\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",[74,144583,144584,144589,144595,144610,144615,144620],{"__ignoreMap":72},[77,144585,144586],{"class":79,"line":80},[77,144587,144588],{"class":323},"\u002F* 转换中心点 *\u002F\n",[77,144590,144591,144593],{"class":79,"line":91},[77,144592,331],{"class":158},[77,144594,88],{"class":87},[77,144596,144597,144600,144602,144604,144606,144608],{"class":79,"line":107},[77,144598,144599],{"class":94},"  transform-origin",[77,144601,98],{"class":87},[77,144603,54052],{"class":94},[77,144605,19614],{"class":94},[77,144607,132834],{"class":87},[77,144609,137618],{"class":323},[77,144611,144612],{"class":79,"line":191},[77,144613,144614],{"class":323},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[77,144616,144617],{"class":79,"line":1543},[77,144618,144619],{"class":323},"  \u002F* transform-origin: left top; *\u002F\n",[77,144621,144622],{"class":79,"line":1549},[77,144623,110],{"class":87},[24468,144625,144627],{"id":144626},"_18133-旋转案例","18.1.3.3 旋转案例",[40,144629],{"style":42,"src":144630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[67,144632,144633],{"className":69,"code":144453,"language":71,"meta":72,"style":72},[74,144634,144635,144641,144657],{"__ignoreMap":72},[77,144636,144637,144639],{"class":79,"line":80},[77,144638,331],{"class":158},[77,144640,88],{"class":87},[77,144642,144643,144645,144647,144649,144651,144653,144655],{"class":79,"line":91},[77,144644,138929],{"class":94},[77,144646,98],{"class":87},[77,144648,144470],{"class":94},[77,144650,2622],{"class":87},[77,144652,3142],{"class":94},[77,144654,144477],{"class":2123},[77,144656,5194],{"class":87},[77,144658,144659],{"class":79,"line":107},[77,144660,110],{"class":87},[19,144662,144664],{"id":144663},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24468,144666,144668],{"id":144667},"_18141-scale介绍","18.1.4.1 scale介绍",[24,144670,144671],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[40,144673],{"style":42,"src":144674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24468,144676,144678],{"id":144677},"_18142-分页按钮","18.1.4.2 分页按钮",[40,144680],{"style":42,"src":144681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[67,144683,144685],{"className":69,"code":144684,"language":71,"meta":72,"style":72},"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",[74,144686,144687,144693,144709,144713,144717,144722,144728,144742,144747],{"__ignoreMap":72},[77,144688,144689,144691],{"class":79,"line":80},[77,144690,331],{"class":158},[77,144692,88],{"class":87},[77,144694,144695,144697,144699,144702,144704,144707],{"class":79,"line":91},[77,144696,138929],{"class":94},[77,144698,98],{"class":87},[77,144700,144701],{"class":94},"scale",[77,144703,2622],{"class":87},[77,144705,144706],{"class":94},"1.2",[77,144708,5194],{"class":87},[77,144710,144711],{"class":79,"line":107},[77,144712,110],{"class":87},[77,144714,144715],{"class":79,"line":191},[77,144716,138406],{"class":87},[77,144718,144719],{"class":79,"line":1543},[77,144720,144721],{"class":323},"\u002F* 2D 缩放 *\u002F\n",[77,144723,144724,144726],{"class":79,"line":1549},[77,144725,331],{"class":158},[77,144727,88],{"class":87},[77,144729,144730,144732,144734,144736,144738,144740],{"class":79,"line":1566},[77,144731,138929],{"class":94},[77,144733,98],{"class":87},[77,144735,144701],{"class":94},[77,144737,2622],{"class":87},[77,144739,144706],{"class":94},[77,144741,5194],{"class":87},[77,144743,144744],{"class":79,"line":1572},[77,144745,144746],{"class":323},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[77,144748,144749],{"class":79,"line":1589},[77,144750,110],{"class":87},[24,144752,144753],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[67,144755,144757],{"className":69,"code":144756,"language":71,"meta":72,"style":72},"\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",[74,144758,144759,144764,144774,144795,144816,144820,144825,144831,144858],{"__ignoreMap":72},[77,144760,144761],{"class":79,"line":80},[77,144762,144763],{"class":323},"\u002F* 定义动画 *\u002F\n",[77,144765,144766,144769,144772],{"class":79,"line":91},[77,144767,144768],{"class":2123},"@keyframes",[77,144770,144771],{"class":7691}," move",[77,144773,88],{"class":87},[77,144775,144776,144779,144781,144783,144785,144788,144790,144792],{"class":79,"line":107},[77,144777,144778],{"class":83},"  0%",[77,144780,1508],{"class":87},[77,144782,50600],{"class":94},[77,144784,98],{"class":87},[77,144786,144787],{"class":94},"translateX",[77,144789,2622],{"class":87},[77,144791,1939],{"class":94},[77,144793,144794],{"class":87},"); }\n",[77,144796,144797,144800,144802,144804,144806,144808,144810,144812,144814],{"class":79,"line":191},[77,144798,144799],{"class":83},"  100%",[77,144801,1508],{"class":87},[77,144803,50600],{"class":94},[77,144805,98],{"class":87},[77,144807,144787],{"class":94},[77,144809,2622],{"class":87},[77,144811,2925],{"class":94},[77,144813,2124],{"class":2123},[77,144815,144794],{"class":87},[77,144817,144818],{"class":79,"line":1543},[77,144819,110],{"class":87},[77,144821,144822],{"class":79,"line":1549},[77,144823,144824],{"class":323},"\u002F* 调用动画 *\u002F\n",[77,144826,144827,144829],{"class":79,"line":1566},[77,144828,331],{"class":158},[77,144830,88],{"class":87},[77,144832,144833,144836,144838,144840,144842,144844,144846,144848,144850,144853,144856],{"class":79,"line":1572},[77,144834,144835],{"class":94},"  animation",[77,144837,98],{"class":87},[77,144839,137631],{"class":94},[77,144841,27586],{"class":94},[77,144843,3308],{"class":2123},[77,144845,81118],{"class":94},[77,144847,6568],{"class":94},[77,144849,3308],{"class":2123},[77,144851,144852],{"class":94}," infinite",[77,144854,144855],{"class":94}," alternate",[77,144857,104],{"class":87},[77,144859,144860],{"class":79,"line":1589},[77,144861,110],{"class":87},[24,144863,144753],{},[67,144865,144868],{"className":144866,"code":144867,"language":7662},[7660],"\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",[74,144869,144867],{"__ignoreMap":72},[24468,144871,144873],{"id":144872},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[24,144875,144876],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[40,144878],{"style":42,"src":144879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[67,144881,144882],{"className":69,"code":144756,"language":71,"meta":72,"style":72},[74,144883,144884,144888,144896,144914,144934,144938,144942,144948,144972],{"__ignoreMap":72},[77,144885,144886],{"class":79,"line":80},[77,144887,144763],{"class":323},[77,144889,144890,144892,144894],{"class":79,"line":91},[77,144891,144768],{"class":2123},[77,144893,144771],{"class":7691},[77,144895,88],{"class":87},[77,144897,144898,144900,144902,144904,144906,144908,144910,144912],{"class":79,"line":107},[77,144899,144778],{"class":83},[77,144901,1508],{"class":87},[77,144903,50600],{"class":94},[77,144905,98],{"class":87},[77,144907,144787],{"class":94},[77,144909,2622],{"class":87},[77,144911,1939],{"class":94},[77,144913,144794],{"class":87},[77,144915,144916,144918,144920,144922,144924,144926,144928,144930,144932],{"class":79,"line":191},[77,144917,144799],{"class":83},[77,144919,1508],{"class":87},[77,144921,50600],{"class":94},[77,144923,98],{"class":87},[77,144925,144787],{"class":94},[77,144927,2622],{"class":87},[77,144929,2925],{"class":94},[77,144931,2124],{"class":2123},[77,144933,144794],{"class":87},[77,144935,144936],{"class":79,"line":1543},[77,144937,110],{"class":87},[77,144939,144940],{"class":79,"line":1549},[77,144941,144824],{"class":323},[77,144943,144944,144946],{"class":79,"line":1566},[77,144945,331],{"class":158},[77,144947,88],{"class":87},[77,144949,144950,144952,144954,144956,144958,144960,144962,144964,144966,144968,144970],{"class":79,"line":1572},[77,144951,144835],{"class":94},[77,144953,98],{"class":87},[77,144955,137631],{"class":94},[77,144957,27586],{"class":94},[77,144959,3308],{"class":2123},[77,144961,81118],{"class":94},[77,144963,6568],{"class":94},[77,144965,3308],{"class":2123},[77,144967,144852],{"class":94},[77,144969,144855],{"class":94},[77,144971,104],{"class":87},[77,144973,144974],{"class":79,"line":1589},[77,144975,110],{"class":87},[24,144977,144978],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[19,144980,144982],{"id":144981},"_1823-知识点回顾","18.2.3 知识点回顾",[67,144984,144985],{"className":69,"code":131144,"language":71,"meta":72,"style":72},[74,144986,144987,144993,145003],{"__ignoreMap":72},[77,144988,144989,144991],{"class":79,"line":80},[77,144990,331],{"class":158},[77,144992,88],{"class":87},[77,144994,144995,144997,144999,145001],{"class":79,"line":91},[77,144996,131157],{"class":94},[77,144998,98],{"class":87},[77,145000,64181],{"class":94},[77,145002,104],{"class":87},[77,145004,145005],{"class":79,"line":107},[77,145006,110],{"class":87},[14,145008,145010],{"id":145009},"_183-3d-转换","18.3 3D 转换",[24,145012,145013],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[19,145015,145017],{"id":145016},"_1831-坐标轴认识","18.3.1 坐标轴认识",[40,145019],{"style":42,"src":145020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[19,145022,145024],{"id":145023},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[40,145026],{"style":42,"src":145027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[24,145029,145030],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[24,145032,145033],{},"translate3d的效果需要搭配透视perspective来使用",[40,145035],{"style":42,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[19,145038,145040],{"id":145039},"_1833-透视-perspective","18.3.3 透视 perspective",[40,145042],{"style":42,"src":145043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[24,145045,145046],{},"透视写在父盒子上，单位为像素",[19,145048,145050],{"id":145049},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24468,145052,145054],{"id":145053},"_18341-分开解释","18.3.4.1 分开解释",[40,145056],{"style":42,"src":145057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[40,145059],{"style":42,"src":145060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[40,145062],{"style":42,"src":145063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[24,145065,145066],{},"总结来说就是左手原则",[24468,145068,145070],{"id":145069},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[40,145072],{"style":42,"src":145073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[19,145075,145077],{"id":145076},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[40,145079],{"style":42,"src":145080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[40,145082],{"style":42,"src":145083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[67,145085,145087],{"className":69,"code":145086,"language":71,"meta":72,"style":72},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[74,145088,145089,145095,145108,145125],{"__ignoreMap":72},[77,145090,145091,145093],{"class":79,"line":80},[77,145092,331],{"class":158},[77,145094,88],{"class":87},[77,145096,145097,145100,145102,145104,145106],{"class":79,"line":91},[77,145098,145099],{"class":94},"  perspective",[77,145101,98],{"class":87},[77,145103,67517],{"class":94},[77,145105,2124],{"class":2123},[77,145107,104],{"class":87},[77,145109,145110,145112,145114,145117,145119,145121,145123],{"class":79,"line":107},[77,145111,138929],{"class":94},[77,145113,98],{"class":87},[77,145115,145116],{"class":94},"rotateX",[77,145118,2622],{"class":87},[77,145120,3142],{"class":94},[77,145122,144477],{"class":2123},[77,145124,5194],{"class":87},[77,145126,145127],{"class":79,"line":191},[77,145128,110],{"class":87},[19,145130,145132],{"id":145131},"_1836-案例","18.3.6 案例",[24468,145134,145136],{"id":145135},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[40,145138],{"style":42,"src":145139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[40,145141],{"style":42,"src":145142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[40,145144],{"style":42,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[67,145147,145149],{"className":69,"code":145148,"language":71,"meta":72,"style":72},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[74,145150,145151,145156,145162,145174],{"__ignoreMap":72},[77,145152,145153],{"class":79,"line":80},[77,145154,145155],{"class":323},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[77,145157,145158,145160],{"class":79,"line":91},[77,145159,135947],{"class":83},[77,145161,88],{"class":87},[77,145163,145164,145166,145168,145170,145172],{"class":79,"line":107},[77,145165,145099],{"class":94},[77,145167,98],{"class":87},[77,145169,67517],{"class":94},[77,145171,2124],{"class":2123},[77,145173,104],{"class":87},[77,145175,145176],{"class":79,"line":191},[77,145177,110],{"class":87},[24468,145179,145181],{"id":145180},"_18362-3d导航栏","18.3.6.2 3D导航栏",[40,145183],{"style":42,"src":145184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[67,145186,145187],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,145188,145189,145193,145207,145211],{"__ignoreMap":72},[77,145190,145191],{"class":79,"line":80},[77,145192,324],{"class":323},[77,145194,145195,145197,145199,145201,145203,145205],{"class":79,"line":91},[77,145196,260],{"class":87},[77,145198,331],{"class":158},[77,145200,334],{"class":83},[77,145202,268],{"class":87},[77,145204,339],{"class":271},[77,145206,291],{"class":87},[77,145208,145209],{"class":79,"line":107},[77,145210,346],{"class":87},[77,145212,145213,145215,145217],{"class":79,"line":191},[77,145214,351],{"class":87},[77,145216,331],{"class":158},[77,145218,291],{"class":87},[24468,145220,145222],{"id":145221},"_18363-旋转木马","18.3.6.3 旋转木马",[40,145224],{"style":42,"src":145225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[67,145227,145228],{"className":69,"code":144453,"language":71,"meta":72,"style":72},[74,145229,145230,145236,145252],{"__ignoreMap":72},[77,145231,145232,145234],{"class":79,"line":80},[77,145233,331],{"class":158},[77,145235,88],{"class":87},[77,145237,145238,145240,145242,145244,145246,145248,145250],{"class":79,"line":91},[77,145239,138929],{"class":94},[77,145241,98],{"class":87},[77,145243,144470],{"class":94},[77,145245,2622],{"class":87},[77,145247,3142],{"class":94},[77,145249,144477],{"class":2123},[77,145251,5194],{"class":87},[77,145253,145254],{"class":79,"line":107},[77,145255,110],{"class":87},[2520,145257,145258],{},"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":72,"searchDepth":91,"depth":91,"links":145260},[145261,145268],{"id":144356,"depth":91,"text":144357,"children":145262},[145263,145264,145265,145266,145267],{"id":144380,"depth":107,"text":144381},{"id":144435,"depth":107,"text":144436},{"id":144560,"depth":107,"text":144561},{"id":144663,"depth":107,"text":144664},{"id":144981,"depth":107,"text":144982},{"id":145009,"depth":91,"text":145010,"children":145269},[145270,145271,145272,145273,145274,145275],{"id":145016,"depth":107,"text":145017},{"id":145023,"depth":107,"text":145024},{"id":145039,"depth":107,"text":145040},{"id":145049,"depth":107,"text":145050},{"id":145076,"depth":107,"text":145077},{"id":145131,"depth":107,"text":145132},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144348,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145282,"title":145283,"body":145284,"description":2546,"extension":2547,"meta":145487,"navigation":2549,"path":145488,"seo":145489,"stem":145490,"__hash__":145491},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145285,"toc":145476},[145286,145289,145293,145296,145299,145303,145306,145309,145312,145316,145319,145323,145326,145330,145333,145337,145351,145355,145380,145383,145386,145403,145407,145411,145414,145417,145421,145424,145427,145445,145449,145452,145466,145470,145473],[10,145287,145283],{"id":145288},"_19-移动端基础-前缀现状与视口",[14,145290,145292],{"id":145291},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[40,145294],{"style":42,"src":145295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[24,145297,145298],{},"意思就是加个前缀，增加兼容性",[14,145300,145302],{"id":145301},"_192-移动端现状认识","19.2 移动端现状认识",[40,145304],{"style":42,"src":145305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[24,145307,145308],{},"调试方法：",[40,145310],{"style":42,"src":145311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145313,145315],{"id":145314},"_193-视口","19.3 视口",[24,145317,145318],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[19,145320,145322],{"id":145321},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[40,145324],{"style":42,"src":145325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[19,145327,145329],{"id":145328},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[40,145331],{"style":42,"src":145332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[19,145334,145336],{"id":145335},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[51,145338,145339,145342,145345,145348],{},[54,145340,145341],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[54,145343,145344],{},"理想视口，对设备来讲，是最理想的视口尺寸",[54,145346,145347],{},"需要手动添写meta视口标签通知浏览器操作",[54,145349,145350],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[19,145352,145354],{"id":145353},"_1934-meta视口标签","19.3.4 meta视口标签",[67,145356,145358],{"className":251,"code":145357,"language":253,"meta":72,"style":72},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[74,145359,145360],{"__ignoreMap":72},[77,145361,145362,145364,145366,145368,145370,145372,145374,145376,145378],{"class":79,"line":80},[77,145363,260],{"class":87},[77,145365,53808],{"class":158},[77,145367,2495],{"class":83},[77,145369,268],{"class":87},[77,145371,53855],{"class":271},[77,145373,53835],{"class":83},[77,145375,268],{"class":87},[77,145377,53862],{"class":271},[77,145379,291],{"class":87},[40,145381],{"style":42,"src":145382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[24,145384,145385],{},"标准视口设置：",[139,145387,145388,145391,145394,145397,145400],{},[54,145389,145390],{},"视口宽度和设备保持一致",[54,145392,145393],{},"视口的默认缩放比例1.0",[54,145395,145396],{},"不允许用户自行缩放",[54,145398,145399],{},"最大允许的缩放比例1.0",[54,145401,145402],{},"最小允许的缩放比例1.0",[19,145404,145406],{"id":145405},"_1935-二倍图","19.3.5 二倍图",[24468,145408,145410],{"id":145409},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[40,145412],{"style":42,"src":145413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[40,145415],{"style":42,"src":145416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24468,145418,145420],{"id":145419},"_19352-多倍图","19.3.5.2 多倍图",[40,145422],{"style":42,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[24,145425,145426],{},"二倍图法，代码如下：",[67,145428,145430],{"className":69,"code":145429,"language":71,"meta":72,"style":72},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[74,145431,145432,145437],{"__ignoreMap":72},[77,145433,145434],{"class":79,"line":80},[77,145435,145436],{"class":323},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[77,145438,145439,145442],{"class":79,"line":91},[77,145440,145441],{"class":158},"background-size",[77,145443,145444],{"class":87},": 50% 50%;\n",[24468,145446,145448],{"id":145447},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[40,145450],{"style":42,"src":145451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[139,145453,145454,145457,145460,145463],{},[54,145455,145456],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[54,145458,145459],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[54,145461,145462],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[54,145464,145465],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24468,145467,145469],{"id":145468},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[40,145471],{"style":42,"src":145472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2520,145474,145475],{},"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":72,"searchDepth":91,"depth":91,"links":145477},[145478,145479,145480],{"id":145291,"depth":91,"text":145292},{"id":145301,"depth":91,"text":145302},{"id":145314,"depth":91,"text":145315,"children":145481},[145482,145483,145484,145485,145486],{"id":145321,"depth":107,"text":145322},{"id":145328,"depth":107,"text":145329},{"id":145335,"depth":107,"text":145336},{"id":145353,"depth":107,"text":145354},{"id":145405,"depth":107,"text":145406},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145283,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145493,"title":145494,"body":145495,"description":2546,"extension":2547,"meta":146372,"navigation":2549,"path":146373,"seo":146374,"stem":146375,"__hash__":146376},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145496,"toc":146356},[145497,145500,145504,145511,145514,145521,145524,145529,145532,145536,145540,145547,145550,145553,145557,145560,145563,145566,145569,145572,145576,145579,145583,145585,145588,145591,145594,145597,145599,145602,145604,145634,145636,145666,145670,145673,145677,145680,145697,145700,145703,145779,145781,145784,145787,145790,145793,145795,145798,145801,145805,145827,145830,145833,145837,145840,145846,145849,145853,145856,145859,145863,145866,145869,145872,145876,145879,145882,145885,145888,145892,145895,145899,145906,145909,145912,145915,145918,145928,145931,145934,145941,145944,145948,145951,145954,145958,145961,145964,145967,146012,146015,146018,146021,146023,146152,146154,146192,146195,146198,146200,146318,146320,146354],[10,145498,145494],{"id":145499},"_20-移动端布局实战上篇",[14,145501,145503],{"id":145502},"_201-移动端主流方案","20.1 移动端主流方案",[139,145505,145506],{},[54,145507,145508],{},[27,145509,145510],{},"单独移动端页面（主流）",[40,145512],{"style":42,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[139,145515,145516],{"start":91},[54,145517,145518],{},[27,145519,145520],{},"响应式兼容PC移动端",[40,145522],{"style":42,"src":145523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[139,145525,145526],{"start":107},[54,145527,145528],{},"两种页面选型布局方式",[40,145530],{"style":42,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145533,145535],{"id":145534},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[19,145537,145539],{"id":145538},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[24,145541,145542,145543],{},"官网地址： ",[417,145544,145545],{"href":145545,"rel":145546},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26332],[40,145548],{"style":42,"src":145549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[40,145551],{"style":42,"src":145552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[19,145554,145556],{"id":145555},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[40,145558],{"style":42,"src":145559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[40,145561],{"style":42,"src":145562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[24,145564,145565],{},"去除高亮：",[24,145567,145568],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[24,145570,145571],{},"-webkit- tap-highlight-color: transparent;",[14,145573,145575],{"id":145574},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[40,145577],{"style":42,"src":145578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145580,145582],{"id":145581},"_204-流式布局案例","20.4 流式布局案例",[24,145584,2651],{},[24,145586,145587],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[24,145589,145590],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[24,145592,145593],{},"图片格式：",[40,145595],{"style":42,"src":145596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[24,145598,137988],{},[40,145600],{"style":42,"src":145601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[24,145603,248],{},[67,145605,145606],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,145607,145608],{"__ignoreMap":72},[77,145609,145610,145612,145614,145616,145618,145620,145622,145624,145626,145628,145630,145632],{"class":79,"line":80},[77,145611,260],{"class":87},[77,145613,40],{"class":158},[77,145615,265],{"class":83},[77,145617,268],{"class":87},[77,145619,272],{"class":271},[77,145621,275],{"class":83},[77,145623,268],{"class":87},[77,145625,280],{"class":271},[77,145627,283],{"class":83},[77,145629,268],{"class":87},[77,145631,288],{"class":271},[77,145633,291],{"class":87},[24,145635,358],{},[67,145637,145638],{"className":251,"code":252,"language":253,"meta":72,"style":72},[74,145639,145640],{"__ignoreMap":72},[77,145641,145642,145644,145646,145648,145650,145652,145654,145656,145658,145660,145662,145664],{"class":79,"line":80},[77,145643,260],{"class":87},[77,145645,40],{"class":158},[77,145647,265],{"class":83},[77,145649,268],{"class":87},[77,145651,272],{"class":271},[77,145653,275],{"class":83},[77,145655,268],{"class":87},[77,145657,280],{"class":271},[77,145659,283],{"class":83},[77,145661,268],{"class":87},[77,145663,288],{"class":271},[77,145665,291],{"class":87},[14,145667,145669],{"id":145668},"_205-flex布局","20.5 flex布局",[40,145671],{"style":42,"src":145672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[19,145674,145676],{"id":145675},"_2051-布局原理","20.5.1 布局原理",[24,145678,145679],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[51,145681,145682,145685,145688,145691,145694],{},[54,145683,145684],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[54,145686,145687],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[54,145689,145690],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[54,145692,145693],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[54,145695,145696],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[24,145698,145699],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[24,145701,145702],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[67,145704,145706],{"className":69,"code":145705,"language":71,"meta":72,"style":72},"\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",[74,145707,145708,145713,145720,145730,145742,145753,145764,145775],{"__ignoreMap":72},[77,145709,145710],{"class":79,"line":80},[77,145711,145712],{"class":323},"\u002F* Flex 弹性布局 *\u002F\n",[77,145714,145715,145718],{"class":79,"line":91},[77,145716,145717],{"class":83},".container",[77,145719,88],{"class":87},[77,145721,145722,145724,145726,145728],{"class":79,"line":107},[77,145723,451],{"class":94},[77,145725,98],{"class":87},[77,145727,53940],{"class":94},[77,145729,104],{"class":87},[77,145731,145732,145735,145737,145740],{"class":79,"line":191},[77,145733,145734],{"class":94},"  flex-direction",[77,145736,98],{"class":87},[77,145738,145739],{"class":94},"row",[77,145741,104],{"class":87},[77,145743,145744,145747,145749,145751],{"class":79,"line":1543},[77,145745,145746],{"class":94},"  justify-content",[77,145748,98],{"class":87},[77,145750,54127],{"class":94},[77,145752,104],{"class":87},[77,145754,145755,145758,145760,145762],{"class":79,"line":1549},[77,145756,145757],{"class":94},"  align-items",[77,145759,98],{"class":87},[77,145761,54052],{"class":94},[77,145763,104],{"class":87},[77,145765,145766,145769,145771,145773],{"class":79,"line":1566},[77,145767,145768],{"class":94},"  flex-wrap",[77,145770,98],{"class":87},[77,145772,81048],{"class":94},[77,145774,104],{"class":87},[77,145776,145777],{"class":79,"line":1572},[77,145778,110],{"class":87},[24,145780,72896],{},[24,145782,145783],{},".form-item .male-label {",[24,145785,145786],{},"   margin-right: 20px;",[24,145788,145789],{},"   display: inline-flex;",[24,145791,145792],{},"   align-items: center;",[24,145794,3558],{},[40,145796],{"style":42,"src":145797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[40,145799],{"style":42,"src":145800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[19,145802,145804],{"id":145803},"_2052-常见父项属性","20.5.2 常见父项属性",[139,145806,145807,145810,145813,145816,145819,145822,145825],{},[54,145808,145809],{},"flex-direction：设置主轴的方向",[54,145811,145812],{},"justify-content：设置主轴上的子元素排列方式",[54,145814,145815],{},"flex-wrap：设置子元素是否换行",[54,145817,145818],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[54,145820,145821],{},"align-items：设置侧轴上的子元素排列方式（单行）",[54,145823,145824],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[54,145826,145809],{},[40,145828],{"style":42,"src":145829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[40,145831],{"style":42,"src":145832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[139,145834,145835],{"start":91},[54,145836,145812],{},[40,145838],{"style":42,"src":145839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[24,145841,145842,145845],{},[74,145843,145844],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[24,145847,145848],{},"跟着主轴走",[139,145850,145851],{"start":107},[54,145852,145815],{},[40,145854],{"style":42,"src":145855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[24,145857,145858],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[139,145860,145861],{"start":191},[54,145862,145818],{},[40,145864],{"style":42,"src":145865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[24,145867,145868],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[24,145870,145871],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[139,145873,145874],{"start":1543},[54,145875,145821],{},[40,145877],{"style":42,"src":145878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[24,145880,145881],{},"align-items与align-content之间的区别：",[24,145883,145884],{},"单找items，多找content",[40,145886],{"style":42,"src":145887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[139,145889,145890],{"start":1549},[54,145891,145824],{},[40,145893],{"style":42,"src":145894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[19,145896,145898],{"id":145897},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[139,145900,145901],{},[54,145902,145903],{},[27,145904,145905],{},"flex 属性",[24,145907,145908],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[40,145910],{"style":42,"src":145911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[24,145913,145914],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[24,145916,145917],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[139,145919,145920],{"start":91},[54,145921,145922,16267,145925],{},[27,145923,145924],{},"align-self",[27,145926,145927],{},"控制子项自己在侧轴上的排列方式",[40,145929],{"style":42,"src":145930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[24,145932,145933],{},"单个子盒子在父盒子侧轴上的排列方式",[139,145935,145936],{"start":107},[54,145937,145938,145940],{},[27,145939,97733],{}," 属性定义项目的排列顺序",[40,145942],{"style":42,"src":145943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[19,145945,145947],{"id":145946},"_2054-背景线性渐变","20.5.4 背景线性渐变",[40,145949],{"style":42,"src":145950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[24,145952,145953],{},"必须要添加浏览器的私有前缀",[19,145955,145957],{"id":145956},"_2055-携程网首页案例","20.5.5 携程网首页案例",[24,145959,145960],{},"学到最重要的知识：",[24,145962,145963],{},"flex处理这样的布局思路",[40,145965],{"style":42,"src":145966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[67,145968,145970],{"className":69,"code":145969,"language":71,"meta":72,"style":72},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[74,145971,145972,145978,145988,145998,146008],{"__ignoreMap":72},[77,145973,145974,145976],{"class":79,"line":80},[77,145975,145717],{"class":83},[77,145977,88],{"class":87},[77,145979,145980,145982,145984,145986],{"class":79,"line":91},[77,145981,451],{"class":94},[77,145983,98],{"class":87},[77,145985,53940],{"class":94},[77,145987,104],{"class":87},[77,145989,145990,145992,145994,145996],{"class":79,"line":107},[77,145991,145746],{"class":94},[77,145993,98],{"class":87},[77,145995,54052],{"class":94},[77,145997,104],{"class":87},[77,145999,146000,146002,146004,146006],{"class":79,"line":191},[77,146001,145757],{"class":94},[77,146003,98],{"class":87},[77,146005,54052],{"class":94},[77,146007,104],{"class":87},[77,146009,146010],{"class":79,"line":1543},[77,146011,110],{"class":87},[24,146013,146014],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[24,146016,146017],{},"使用属性选择器",[40,146019],{"style":42,"src":146020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[24,146022,71332],{},[67,146024,146026],{"className":251,"code":146025,"language":253,"meta":72,"style":72},"\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",[74,146027,146028,146033,146047,146052,146072,146077,146096,146101,146120,146125,146144],{"__ignoreMap":72},[77,146029,146030],{"class":79,"line":80},[77,146031,146032],{"class":323},"\u003C!-- 携程网移动端案例结构 -->\n",[77,146034,146035,146037,146039,146041,146043,146045],{"class":79,"line":91},[77,146036,260],{"class":87},[77,146038,331],{"class":158},[77,146040,334],{"class":83},[77,146042,268],{"class":87},[77,146044,94759],{"class":271},[77,146046,291],{"class":87},[77,146048,146049],{"class":79,"line":107},[77,146050,146051],{"class":323},"  \u003C!-- 搜索栏 -->\n",[77,146053,146054,146056,146058,146060,146062,146065,146068,146070],{"class":79,"line":191},[77,146055,54602],{"class":87},[77,146057,331],{"class":158},[77,146059,334],{"class":83},[77,146061,268],{"class":87},[77,146063,146064],{"class":271},"\"search-index\"",[77,146066,146067],{"class":87},">...\u003C\u002F",[77,146069,331],{"class":158},[77,146071,291],{"class":87},[77,146073,146074],{"class":79,"line":1543},[77,146075,146076],{"class":323},"  \u003C!-- 焦点图 -->\n",[77,146078,146079,146081,146083,146085,146087,146090,146092,146094],{"class":79,"line":1549},[77,146080,54602],{"class":87},[77,146082,331],{"class":158},[77,146084,334],{"class":83},[77,146086,268],{"class":87},[77,146088,146089],{"class":271},"\"focus\"",[77,146091,146067],{"class":87},[77,146093,331],{"class":158},[77,146095,291],{"class":87},[77,146097,146098],{"class":79,"line":1566},[77,146099,146100],{"class":323},"  \u003C!-- 主导航 -->\n",[77,146102,146103,146105,146107,146109,146111,146114,146116,146118],{"class":79,"line":1572},[77,146104,54602],{"class":87},[77,146106,331],{"class":158},[77,146108,334],{"class":83},[77,146110,268],{"class":87},[77,146112,146113],{"class":271},"\"local-nav\"",[77,146115,146067],{"class":87},[77,146117,331],{"class":158},[77,146119,291],{"class":87},[77,146121,146122],{"class":79,"line":1589},[77,146123,146124],{"class":323},"  \u003C!-- 子导航 -->\n",[77,146126,146127,146129,146131,146133,146135,146138,146140,146142],{"class":79,"line":1595},[77,146128,54602],{"class":87},[77,146130,331],{"class":158},[77,146132,334],{"class":83},[77,146134,268],{"class":87},[77,146136,146137],{"class":271},"\"nav-common\"",[77,146139,146067],{"class":87},[77,146141,331],{"class":158},[77,146143,291],{"class":87},[77,146145,146146,146148,146150],{"class":79,"line":4088},[77,146147,351],{"class":87},[77,146149,331],{"class":158},[77,146151,291],{"class":87},[24,146153,72896],{},[67,146155,146156],{"className":69,"code":139394,"language":71,"meta":72,"style":72},[74,146157,146158,146172,146188],{"__ignoreMap":72},[77,146159,146160,146162,146164,146166,146168,146170],{"class":79,"line":80},[77,146161,159],{"class":158},[77,146163,3503],{"class":87},[77,146165,105540],{"class":83},[77,146167,268],{"class":2123},[77,146169,2492],{"class":271},[77,146171,139411],{"class":87},[77,146173,146174,146176,146178,146180,146182,146184,146186],{"class":79,"line":91},[77,146175,2115],{"class":94},[77,146177,98],{"class":87},[77,146179,2120],{"class":94},[77,146181,2124],{"class":2123},[77,146183,2127],{"class":94},[77,146185,132552],{"class":94},[77,146187,104],{"class":87},[77,146189,146190],{"class":79,"line":107},[77,146191,110],{"class":87},[24,146193,146194],{},"总代码和效果展示：",[40,146196],{"style":42,"src":146197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[24,146199,71332],{},[67,146201,146202],{"className":251,"code":146025,"language":253,"meta":72,"style":72},[74,146203,146204,146208,146222,146226,146244,146248,146266,146270,146288,146292,146310],{"__ignoreMap":72},[77,146205,146206],{"class":79,"line":80},[77,146207,146032],{"class":323},[77,146209,146210,146212,146214,146216,146218,146220],{"class":79,"line":91},[77,146211,260],{"class":87},[77,146213,331],{"class":158},[77,146215,334],{"class":83},[77,146217,268],{"class":87},[77,146219,94759],{"class":271},[77,146221,291],{"class":87},[77,146223,146224],{"class":79,"line":107},[77,146225,146051],{"class":323},[77,146227,146228,146230,146232,146234,146236,146238,146240,146242],{"class":79,"line":191},[77,146229,54602],{"class":87},[77,146231,331],{"class":158},[77,146233,334],{"class":83},[77,146235,268],{"class":87},[77,146237,146064],{"class":271},[77,146239,146067],{"class":87},[77,146241,331],{"class":158},[77,146243,291],{"class":87},[77,146245,146246],{"class":79,"line":1543},[77,146247,146076],{"class":323},[77,146249,146250,146252,146254,146256,146258,146260,146262,146264],{"class":79,"line":1549},[77,146251,54602],{"class":87},[77,146253,331],{"class":158},[77,146255,334],{"class":83},[77,146257,268],{"class":87},[77,146259,146089],{"class":271},[77,146261,146067],{"class":87},[77,146263,331],{"class":158},[77,146265,291],{"class":87},[77,146267,146268],{"class":79,"line":1566},[77,146269,146100],{"class":323},[77,146271,146272,146274,146276,146278,146280,146282,146284,146286],{"class":79,"line":1572},[77,146273,54602],{"class":87},[77,146275,331],{"class":158},[77,146277,334],{"class":83},[77,146279,268],{"class":87},[77,146281,146113],{"class":271},[77,146283,146067],{"class":87},[77,146285,331],{"class":158},[77,146287,291],{"class":87},[77,146289,146290],{"class":79,"line":1589},[77,146291,146124],{"class":323},[77,146293,146294,146296,146298,146300,146302,146304,146306,146308],{"class":79,"line":1595},[77,146295,54602],{"class":87},[77,146297,331],{"class":158},[77,146299,334],{"class":83},[77,146301,268],{"class":87},[77,146303,146137],{"class":271},[77,146305,146067],{"class":87},[77,146307,331],{"class":158},[77,146309,291],{"class":87},[77,146311,146312,146314,146316],{"class":79,"line":4088},[77,146313,351],{"class":87},[77,146315,331],{"class":158},[77,146317,291],{"class":87},[24,146319,72896],{},[67,146321,146322],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,146323,146324,146328,146342,146346],{"__ignoreMap":72},[77,146325,146326],{"class":79,"line":80},[77,146327,324],{"class":323},[77,146329,146330,146332,146334,146336,146338,146340],{"class":79,"line":91},[77,146331,260],{"class":87},[77,146333,331],{"class":158},[77,146335,334],{"class":83},[77,146337,268],{"class":87},[77,146339,339],{"class":271},[77,146341,291],{"class":87},[77,146343,146344],{"class":79,"line":107},[77,146345,346],{"class":87},[77,146347,146348,146350,146352],{"class":79,"line":191},[77,146349,351],{"class":87},[77,146351,331],{"class":158},[77,146353,291],{"class":87},[2520,146355,140341],{},{"title":72,"searchDepth":91,"depth":91,"links":146357},[146358,146359,146363,146364,146365],{"id":145502,"depth":91,"text":145503},{"id":145534,"depth":91,"text":145535,"children":146360},[146361,146362],{"id":145538,"depth":107,"text":145539},{"id":145555,"depth":107,"text":145556},{"id":145574,"depth":91,"text":145575},{"id":145581,"depth":91,"text":145582},{"id":145668,"depth":91,"text":145669,"children":146366},[146367,146368,146369,146370,146371],{"id":145675,"depth":107,"text":145676},{"id":145803,"depth":107,"text":145804},{"id":145897,"depth":107,"text":145898},{"id":145946,"depth":107,"text":145947},{"id":145956,"depth":107,"text":145957},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145494,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146378,"title":146379,"body":146380,"description":2546,"extension":2547,"meta":147607,"navigation":2549,"path":147608,"seo":147609,"stem":147610,"__hash__":147611},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146381,"toc":147585},[146382,146385,146389,146393,146396,146399,146403,146408,146411,146414,146417,146420,146423,146480,146483,146488,146491,146494,146498,146509,146513,146516,146519,146526,146531,146535,146538,146544,146547,146551,146554,146561,146564,146567,146574,146577,146584,146587,146590,146597,146600,146603,146605,146622,146626,146629,146632,146635,146639,146642,146645,146648,146651,146654,146657,146659,146662,146665,146727,146730,146840,146847,146853,146856,146859,146863,146866,146870,146875,146878,146885,146888,146894,146899,146902,146905,146908,146911,146914,146917,146920,146923,146979,146981,147007,147011,147014,147017,147020,147028,147031,147034,147038,147094,147097,147101,147107,147118,147121,147126,147129,147132,147138,147141,147144,147147,147150,147153,147156,147159,147162,147187,147193,147196,147199,147202,147205,147208,147211,147216,147219,147222,147225,147233,147236,147243,147246,147249,147251,147275,147277,147280,147283,147286,147289,147292,147295,147298,147332,147335,147338,147372,147379,147382,147385,147388,147391,147394,147397,147404,147407,147410,147413,147416,147423,147426,147429,147436,147439,147442,147446,147449,147452,147455,147458,147461,147464,147467,147470,147472,147496,147498,147522,147526,147537,147540,147543,147546,147549,147552,147555,147558,147561,147564,147567,147570,147573,147576,147579,147582],[10,146383,146379],{"id":146384},"_21-移动端布局实战下篇",[14,146386,146388],{"id":146387},"_211-rem适配布局","21.1 rem适配布局",[19,146390,146392],{"id":146391},"_2111-rem单位","21.1.1 rem单位",[40,146394],{"style":42,"src":146395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[24,146397,146398],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[19,146400,146402],{"id":146401},"_2112-媒体查询","21.1.2 媒体查询",[139,146404,146405],{},[54,146406,146407],{},"参数介绍",[40,146409],{"style":42,"src":146410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[40,146412],{"style":42,"src":146413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[40,146415],{"style":42,"src":146416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[40,146418],{"style":42,"src":146419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[40,146421],{"style":42,"src":146422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[67,146424,146426],{"className":69,"code":146425,"language":71,"meta":72,"style":72},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[74,146427,146428,146433,146452,146459,146472,146476],{"__ignoreMap":72},[77,146429,146430],{"class":79,"line":80},[77,146431,146432],{"class":323},"\u002F* 媒体查询 *\u002F\n",[77,146434,146435,146438,146440,146443,146445,146448,146450],{"class":79,"line":91},[77,146436,146437],{"class":2123},"@media",[77,146439,4134],{"class":87},[77,146441,146442],{"class":94},"max-width",[77,146444,98],{"class":87},[77,146446,146447],{"class":94},"768",[77,146449,2124],{"class":2123},[77,146451,14914],{"class":87},[77,146453,146454,146457],{"class":79,"line":107},[77,146455,146456],{"class":83},"  .container",[77,146458,88],{"class":87},[77,146460,146461,146464,146466,146468,146470],{"class":79,"line":191},[77,146462,146463],{"class":94},"    width",[77,146465,98],{"class":87},[77,146467,2925],{"class":94},[77,146469,2942],{"class":2123},[77,146471,104],{"class":87},[77,146473,146474],{"class":79,"line":1543},[77,146475,129775],{"class":87},[77,146477,146478],{"class":79,"line":1549},[77,146479,110],{"class":87},[24,146481,146482],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[139,146484,146485],{"start":91},[54,146486,146487],{},"引入资源",[40,146489],{"style":42,"src":146490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[24,146492,146493],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[19,146495,146497],{"id":146496},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[51,146499,146500,146503,146506],{},[54,146501,146502],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[54,146504,146505],{},"媒体查询可以根据不同设备宽度来修改样式",[54,146507,146508],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146510,146512],{"id":146511},"_212-less基础","21.2 Less基础",[24,146514,146515],{},"css冗余度较高，不利于复用，没有很好的计算能力",[24,146517,146518],{},"Less可以解决该问题，它是css的扩展语言",[24,146520,146521,146522],{},"Less中文网址： ",[417,146523,146524],{"href":146524,"rel":146525},"http:\u002F\u002Flesscss.cn\u002F",[26332],[24,146527,146528],{},[27,146529,146530],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[19,146532,146534],{"id":146533},"_2121-less安装","21.2.1 less安装",[24,146536,146537],{},"如果使用vscode，则无需进行下方安装步骤",[24,146539,146540],{},[417,146541,146542],{"href":146542,"rel":146543},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26332],[40,146545],{"style":42,"src":146546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[19,146548,146550],{"id":146549},"_2122-less使用","21.2.2 less使用",[24,146552,146553],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[139,146555,146556],{},[54,146557,146558],{},[27,146559,146560],{},"Less 变量",[40,146562],{"style":42,"src":146563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[40,146565],{"style":42,"src":146566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[139,146568,146569],{"start":91},[54,146570,146571],{},[27,146572,146573],{},"Less 编译",[40,146575],{"style":42,"src":146576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[139,146578,146579],{"start":107},[54,146580,146581],{},[27,146582,146583],{},"Less 嵌套",[40,146585],{"style":42,"src":146586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[40,146588],{"style":42,"src":146589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[139,146591,146592],{"start":191},[54,146593,146594],{},[27,146595,146596],{},"Less 运算",[40,146598],{"style":42,"src":146599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[24,146601,146602],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[24,146604,2651],{},[51,146606,146607,146610,146613,146616,146619],{},[54,146608,146609],{},"乘号（*）和除号（\u002F）的写法",[54,146611,146612],{},"运算符中间左右有个空格隔开 1px + 5",[54,146614,146615],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[54,146617,146618],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[54,146620,146621],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146623,146625],{"id":146624},"_213-rem-适配方案","21.3 rem 适配方案",[24,146627,146628],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[24,146630,146631],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[40,146633],{"style":42,"src":146634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[19,146636,146638],{"id":146637},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[24,146640,146641],{},"rem + 媒体查询 + less 技术",[40,146643],{"style":42,"src":146644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[24,146646,146647],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[24,146649,146650],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[40,146652],{"style":42,"src":146653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[24,146655,146656],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[24,146658,17105],{},[40,146660],{"style":42,"src":146661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[24,146663,146664],{},"index.html:",[67,146666,146668],{"className":69,"code":146667,"language":71,"meta":72,"style":72},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[74,146669,146670,146675,146681,146697,146701,146707,146723],{"__ignoreMap":72},[77,146671,146672],{"class":79,"line":80},[77,146673,146674],{"class":323},"\u002F* rem 适配方案 *\u002F\n",[77,146676,146677,146679],{"class":79,"line":91},[77,146678,53101],{"class":158},[77,146680,88],{"class":87},[77,146682,146683,146685,146687,146690,146692,146694],{"class":79,"line":107},[77,146684,73068],{"class":94},[77,146686,98],{"class":87},[77,146688,146689],{"class":94},"62.5",[77,146691,2942],{"class":2123},[77,146693,132834],{"class":87},[77,146695,146696],{"class":323},"\u002F* 1rem = 10px *\u002F\n",[77,146698,146699],{"class":79,"line":191},[77,146700,110],{"class":87},[77,146702,146703,146705],{"class":79,"line":1543},[77,146704,84],{"class":83},[77,146706,88],{"class":87},[77,146708,146709,146711,146713,146715,146718,146720],{"class":79,"line":1549},[77,146710,73010],{"class":94},[77,146712,98],{"class":87},[77,146714,3059],{"class":94},[77,146716,146717],{"class":2123},"rem",[77,146719,132834],{"class":87},[77,146721,146722],{"class":323},"\u002F* 100px *\u002F\n",[77,146724,146725],{"class":79,"line":1566},[77,146726,110],{"class":87},[24,146728,146729],{},"common.less",[67,146731,146733],{"className":69,"code":146732,"language":71,"meta":72,"style":72},"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",[74,146734,146735,146741,146756,146760,146766,146780,146784,146788,146792,146798,146812,146816,146822,146836],{"__ignoreMap":72},[77,146736,146737,146739],{"class":79,"line":80},[77,146738,53101],{"class":158},[77,146740,88],{"class":87},[77,146742,146743,146745,146747,146749,146751,146753],{"class":79,"line":91},[77,146744,73068],{"class":94},[77,146746,98],{"class":87},[77,146748,146689],{"class":94},[77,146750,2942],{"class":2123},[77,146752,28535],{"class":87},[77,146754,146755],{"class":323},"\u002F* 10px *\u002F\n",[77,146757,146758],{"class":79,"line":107},[77,146759,110],{"class":87},[77,146761,146762,146764],{"class":79,"line":191},[77,146763,331],{"class":158},[77,146765,88],{"class":87},[77,146767,146768,146770,146772,146774,146776,146778],{"class":79,"line":1543},[77,146769,73010],{"class":94},[77,146771,98],{"class":87},[77,146773,3059],{"class":94},[77,146775,146717],{"class":2123},[77,146777,28535],{"class":87},[77,146779,146722],{"class":323},[77,146781,146782],{"class":79,"line":1549},[77,146783,110],{"class":87},[77,146785,146786],{"class":79,"line":1566},[77,146787,138406],{"class":87},[77,146789,146790],{"class":79,"line":1572},[77,146791,146674],{"class":323},[77,146793,146794,146796],{"class":79,"line":1589},[77,146795,53101],{"class":158},[77,146797,88],{"class":87},[77,146799,146800,146802,146804,146806,146808,146810],{"class":79,"line":1595},[77,146801,73068],{"class":94},[77,146803,98],{"class":87},[77,146805,146689],{"class":94},[77,146807,2942],{"class":2123},[77,146809,132834],{"class":87},[77,146811,146696],{"class":323},[77,146813,146814],{"class":79,"line":4088},[77,146815,110],{"class":87},[77,146817,146818,146820],{"class":79,"line":4093},[77,146819,84],{"class":83},[77,146821,88],{"class":87},[77,146823,146824,146826,146828,146830,146832,146834],{"class":79,"line":4099},[77,146825,73010],{"class":94},[77,146827,98],{"class":87},[77,146829,3059],{"class":94},[77,146831,146717],{"class":2123},[77,146833,132834],{"class":87},[77,146835,146722],{"class":323},[77,146837,146838],{"class":79,"line":4104},[77,146839,110],{"class":87},[24,146841,146842,146843,146846],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[687,146844,146845],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[67,146848,146851],{"className":146849,"code":146850,"language":7662},[7660],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[74,146852,146850],{"__ignoreMap":72},[24,146854,146855],{},"less保存时会自动变成.css文件",[24,146857,146858],{},"好好搞懂上述代码写法",[19,146860,146862],{"id":146861},"_2132-样式导入样式","21.3.2 样式导入样式",[40,146864],{"style":42,"src":146865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[19,146867,146869],{"id":146868},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[139,146871,146872],{},[54,146873,146874],{},"准备工作",[40,146876],{"style":42,"src":146877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[24,146879,146880,146881],{},"github地址：",[417,146882,146883],{"href":146883,"rel":146884},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26332],[24,146886,146887],{},"下载之后，将index.js文件拖到项目中就可以了",[24,146889,146890,146891],{},"js文件引入到index.html中使用的是",[74,146892,146893],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[139,146895,146896],{"start":91},[54,146897,146898],{},"vscode插件",[40,146900],{"style":42,"src":146901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[24,146903,146904],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[24,146906,146907],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[40,146909],{"style":42,"src":146910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[24,146912,146913],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[40,146915],{"style":42,"src":146916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[24,146918,146919],{},"修改成75就可以，alt+z为快捷键",[24,146921,146922],{},"index.css：",[67,146924,146925],{"className":69,"code":146667,"language":71,"meta":72,"style":72},[74,146926,146927,146931,146937,146951,146955,146961,146975],{"__ignoreMap":72},[77,146928,146929],{"class":79,"line":80},[77,146930,146674],{"class":323},[77,146932,146933,146935],{"class":79,"line":91},[77,146934,53101],{"class":158},[77,146936,88],{"class":87},[77,146938,146939,146941,146943,146945,146947,146949],{"class":79,"line":107},[77,146940,73068],{"class":94},[77,146942,98],{"class":87},[77,146944,146689],{"class":94},[77,146946,2942],{"class":2123},[77,146948,132834],{"class":87},[77,146950,146696],{"class":323},[77,146952,146953],{"class":79,"line":191},[77,146954,110],{"class":87},[77,146956,146957,146959],{"class":79,"line":1543},[77,146958,84],{"class":83},[77,146960,88],{"class":87},[77,146962,146963,146965,146967,146969,146971,146973],{"class":79,"line":1549},[77,146964,73010],{"class":94},[77,146966,98],{"class":87},[77,146968,3059],{"class":94},[77,146970,146717],{"class":2123},[77,146972,132834],{"class":87},[77,146974,146722],{"class":323},[77,146976,146977],{"class":79,"line":1566},[77,146978,110],{"class":87},[24,146980,146664],{},[67,146982,146983],{"className":69,"code":129385,"language":71,"meta":72,"style":72},[74,146984,146985,146991,147003],{"__ignoreMap":72},[77,146986,146987,146989],{"class":79,"line":80},[77,146988,54258],{"class":158},[77,146990,88],{"class":87},[77,146992,146993,146995,146997,146999,147001],{"class":79,"line":91},[77,146994,73068],{"class":94},[77,146996,98],{"class":87},[77,146998,3214],{"class":94},[77,147000,2124],{"class":2123},[77,147002,104],{"class":87},[77,147004,147005],{"class":79,"line":107},[77,147006,110],{"class":87},[14,147008,147010],{"id":147009},"_214-响应式开发","21.4 响应式开发",[24,147012,147013],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[40,147015],{"style":42,"src":147016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[24,147018,147019],{},"做法：",[51,147021,147022,147025],{},[54,147023,147024],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[54,147026,147027],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[40,147029],{"style":42,"src":147030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[24,147032,147033],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[19,147035,147037],{"id":147036},"_2141-简单代码示范","21.4.1 简单代码示范",[67,147039,147040],{"className":69,"code":146667,"language":71,"meta":72,"style":72},[74,147041,147042,147046,147052,147066,147070,147076,147090],{"__ignoreMap":72},[77,147043,147044],{"class":79,"line":80},[77,147045,146674],{"class":323},[77,147047,147048,147050],{"class":79,"line":91},[77,147049,53101],{"class":158},[77,147051,88],{"class":87},[77,147053,147054,147056,147058,147060,147062,147064],{"class":79,"line":107},[77,147055,73068],{"class":94},[77,147057,98],{"class":87},[77,147059,146689],{"class":94},[77,147061,2942],{"class":2123},[77,147063,132834],{"class":87},[77,147065,146696],{"class":323},[77,147067,147068],{"class":79,"line":191},[77,147069,110],{"class":87},[77,147071,147072,147074],{"class":79,"line":1543},[77,147073,84],{"class":83},[77,147075,88],{"class":87},[77,147077,147078,147080,147082,147084,147086,147088],{"class":79,"line":1549},[77,147079,73010],{"class":94},[77,147081,98],{"class":87},[77,147083,3059],{"class":94},[77,147085,146717],{"class":2123},[77,147087,132834],{"class":87},[77,147089,146722],{"class":323},[77,147091,147092],{"class":79,"line":1566},[77,147093,110],{"class":87},[24,147095,147096],{},"父盒子一般命名为container",[19,147098,147100],{"id":147099},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[24,147102,147103,147104],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[27,147105,147106],{},"使得 Web 开发更加快捷",[51,147108,147109],{},[54,147110,147111,147112],{},"官网：",[27,147113,147114],{},[417,147115,147116],{"href":147116,"rel":147117},"http:\u002F\u002Fgetbootstrap.com\u002F",[26332],[24,147119,147120],{},"可以直接去官网拿现成的东西",[139,147122,147123],{},[54,147124,147125],{},"Bootstrap的使用",[24,147127,147128],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[24,147130,147131],{},"Bootstrap 使用四步曲：",[24,147133,147134,147137],{},[27,147135,147136],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[40,147139],{"style":42,"src":147140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[24,147142,147143],{},"打开Bootstrap官网，然后下载",[40,147145],{"style":42,"src":147146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[40,147148],{"style":42,"src":147149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[24,147151,147152],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[24,147154,147155],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[24,147157,147158],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[40,147160],{"style":42,"src":147161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[67,147163,147165],{"className":69,"code":147164,"language":71,"meta":72,"style":72},".center {\n  color: red;\n}\n",[74,147166,147167,147173,147183],{"__ignoreMap":72},[77,147168,147169,147171],{"class":79,"line":80},[77,147170,129272],{"class":83},[77,147172,88],{"class":87},[77,147174,147175,147177,147179,147181],{"class":79,"line":91},[77,147176,73344],{"class":94},[77,147178,98],{"class":87},[77,147180,59869],{"class":94},[77,147182,104],{"class":87},[77,147184,147185],{"class":79,"line":107},[77,147186,110],{"class":87},[24,147188,147189,147192],{},[74,147190,147191],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[40,147194],{"style":42,"src":147195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[40,147197],{"style":42,"src":147198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[40,147200],{"style":42,"src":147201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[24,147203,147204],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[40,147206],{"style":42,"src":147207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[24,147209,147210],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[139,147212,147213],{"start":91},[54,147214,147215],{},"布局容器",[40,147217],{"style":42,"src":147218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[24,147220,147221],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[24,147223,147224],{},"container-fluid用于移动式布局比较方便",[139,147226,147227],{"start":107},[54,147228,147229,147230],{},"bootstrap ",[27,147231,147232],{},"栅格系统原理",[40,147234],{"style":42,"src":147235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[139,147237,147238],{"start":191},[54,147239,147240],{},[27,147241,147242],{},"栅格选项参数",[40,147244],{"style":42,"src":147245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[24,147247,147248],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[24,147250,17105],{},[67,147252,147253],{"className":69,"code":147164,"language":71,"meta":72,"style":72},[74,147254,147255,147261,147271],{"__ignoreMap":72},[77,147256,147257,147259],{"class":79,"line":80},[77,147258,129272],{"class":83},[77,147260,88],{"class":87},[77,147262,147263,147265,147267,147269],{"class":79,"line":91},[77,147264,73344],{"class":94},[77,147266,98],{"class":87},[77,147268,59869],{"class":94},[77,147270,104],{"class":87},[77,147272,147273],{"class":79,"line":107},[77,147274,110],{"class":87},[24,147276,137988],{},[40,147278],{"style":42,"src":147279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[24,147281,147282],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[24,147284,147285],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[24,147287,147288],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[24,147290,147291],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[24,147293,147294],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[24,147296,147297],{},"汇总展示说明：",[67,147299,147300],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,147301,147302,147306,147320,147324],{"__ignoreMap":72},[77,147303,147304],{"class":79,"line":80},[77,147305,324],{"class":323},[77,147307,147308,147310,147312,147314,147316,147318],{"class":79,"line":91},[77,147309,260],{"class":87},[77,147311,331],{"class":158},[77,147313,334],{"class":83},[77,147315,268],{"class":87},[77,147317,339],{"class":271},[77,147319,291],{"class":87},[77,147321,147322],{"class":79,"line":107},[77,147323,346],{"class":87},[77,147325,147326,147328,147330],{"class":79,"line":191},[77,147327,351],{"class":87},[77,147329,331],{"class":158},[77,147331,291],{"class":87},[40,147333],{"style":42,"src":147334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[24,147336,147337],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[67,147339,147340],{"className":251,"code":316,"language":253,"meta":72,"style":72},[74,147341,147342,147346,147360,147364],{"__ignoreMap":72},[77,147343,147344],{"class":79,"line":80},[77,147345,324],{"class":323},[77,147347,147348,147350,147352,147354,147356,147358],{"class":79,"line":91},[77,147349,260],{"class":87},[77,147351,331],{"class":158},[77,147353,334],{"class":83},[77,147355,268],{"class":87},[77,147357,339],{"class":271},[77,147359,291],{"class":87},[77,147361,147362],{"class":79,"line":107},[77,147363,346],{"class":87},[77,147365,147366,147368,147370],{"class":79,"line":191},[77,147367,351],{"class":87},[77,147369,331],{"class":158},[77,147371,291],{"class":87},[139,147373,147374],{"start":1543},[54,147375,147376],{},[27,147377,147378],{},"列嵌套",[40,147380],{"style":42,"src":147381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[24,147383,147384],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[24,147386,147387],{},"没加row内部这样：",[40,147389],{"style":42,"src":147390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[24,147392,147393],{},"加上row之后内部为：",[40,147395],{"style":42,"src":147396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[139,147398,147399],{"start":1549},[54,147400,147401],{},[27,147402,147403],{},"列偏移",[40,147405],{"style":42,"src":147406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[24,147408,147409],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[24,147411,147412],{},"要加偏移量，即偏移份数",[24,147414,147415],{},"偏移的份数=12-两个盒子的份数",[139,147417,147418],{"start":1566},[54,147419,147420],{},[27,147421,147422],{},"列排序",[40,147424],{"style":42,"src":147425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[24,147427,147428],{},"pull拉左；push推右",[139,147430,147431],{"start":1572},[54,147432,147433],{},[27,147434,147435],{},"响应式工具",[40,147437],{"style":42,"src":147438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[24,147440,147441],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[19,147443,147445],{"id":147444},"_2143-响应式小项目","21.4.3 响应式小项目",[24,147447,147448],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[24,147450,147451],{},"ul {",[24,147453,147454],{},"list-style: none;",[24,147456,147457],{},"margin:0;",[24,147459,147460],{},"padding:0; }",[40,147462],{"style":42,"src":147463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[40,147465],{"style":42,"src":147466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[24,147468,147469],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[24,147471,71332],{},[67,147473,147474],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,147475,147476,147482,147492],{"__ignoreMap":72},[77,147477,147478,147480],{"class":79,"line":80},[77,147479,84],{"class":83},[77,147481,88],{"class":87},[77,147483,147484,147486,147488,147490],{"class":79,"line":91},[77,147485,95],{"class":94},[77,147487,98],{"class":87},[77,147489,101],{"class":94},[77,147491,104],{"class":87},[77,147493,147494],{"class":79,"line":107},[77,147495,110],{"class":87},[24,147497,72896],{},[67,147499,147500],{"className":69,"code":70,"language":71,"meta":72,"style":72},[74,147501,147502,147508,147518],{"__ignoreMap":72},[77,147503,147504,147506],{"class":79,"line":80},[77,147505,84],{"class":83},[77,147507,88],{"class":87},[77,147509,147510,147512,147514,147516],{"class":79,"line":91},[77,147511,95],{"class":94},[77,147513,98],{"class":87},[77,147515,101],{"class":94},[77,147517,104],{"class":87},[77,147519,147520],{"class":79,"line":107},[77,147521,110],{"class":87},[14,147523,147525],{"id":147524},"_215-swiper-插件使用","21.5 swiper 插件使用",[51,147527,147528,147531,147534],{},[54,147529,147530],{},"下载需要的css和js文件html页面中 引入相关文件",[54,147532,147533],{},"官网找到类似案例，复制html结构，css样式 js 语法",[54,147535,147536],{},"根据需求定制修改模块",[40,147538],{"style":42,"src":147539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[24,147541,147542],{},"解压后将这两部分放到项目中",[40,147544],{"style":42,"src":147545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[24,147547,147548],{},"这个插件可以帮助我们实现轮播图效果",[24,147550,147551],{},"用法：",[40,147553],{"style":42,"src":147554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[24,147556,147557],{},"找到自己喜欢的",[40,147559],{"style":42,"src":147560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[24,147562,147563],{},"右键，查看网页源代码",[40,147565],{"style":42,"src":147566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[24,147568,147569],{},"复制人家的结构内容",[24,147571,147572],{},"然后去看API文档：",[40,147574],{"style":42,"src":147575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[24,147577,147578],{},"可以看看如何修改样式",[24,147580,147581],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2520,147583,147584],{},"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":72,"searchDepth":91,"depth":91,"links":147586},[147587,147592,147596,147601,147606],{"id":146387,"depth":91,"text":146388,"children":147588},[147589,147590,147591],{"id":146391,"depth":107,"text":146392},{"id":146401,"depth":107,"text":146402},{"id":146496,"depth":107,"text":146497},{"id":146511,"depth":91,"text":146512,"children":147593},[147594,147595],{"id":146533,"depth":107,"text":146534},{"id":146549,"depth":107,"text":146550},{"id":146624,"depth":91,"text":146625,"children":147597},[147598,147599,147600],{"id":146637,"depth":107,"text":146638},{"id":146861,"depth":107,"text":146862},{"id":146868,"depth":107,"text":146869},{"id":147009,"depth":91,"text":147010,"children":147602},[147603,147604,147605],{"id":147036,"depth":107,"text":147037},{"id":147099,"depth":107,"text":147100},{"id":147444,"depth":107,"text":147445},{"id":147524,"depth":91,"text":147525},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146379,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147613,"title":147614,"body":147615,"description":2546,"extension":2547,"meta":147835,"navigation":2549,"path":147836,"seo":147837,"stem":147838,"__hash__":147839},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147616,"toc":147831},[147617,147620,147624,147627,147642,147647,147650,147655,147690,147695,147707,147712,147725,147730,147747,147752,147772,147777,147795,147798,147801,147804,147807,147811,147814,147817,147820,147823,147826,147829],[10,147618,147614],{"id":147619},"_22-代码提交与新型相对单位",[14,147621,147623],{"id":147622},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[24,147625,147626],{},"法1：",[139,147628,147629,147636,147639],{},[54,147630,147631,147632],{},"登录网站注册：",[417,147633,147634],{"href":147634,"rel":147635},"https:\u002F\u002Fgitee.com\u002F",[26332],[54,147637,147638],{},"码云创建新的仓库",[54,147640,147641],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[51,147643,147644],{},[54,147645,147646],{},"在网站根目录右键-- Git Bash Here",[40,147648],{"style":42,"src":147649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[51,147651,147652],{},[54,147653,147654],{},"如果是第一次利用git提交，请配置好全局选项",[67,147656,147658],{"className":119728,"code":147657,"language":119730,"meta":72,"style":72},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[74,147659,147660,147676],{"__ignoreMap":72},[77,147661,147662,147665,147667,147670,147673],{"class":79,"line":80},[77,147663,147664],{"class":83},"git",[77,147666,122151],{"class":271},[77,147668,147669],{"class":94}," --global",[77,147671,147672],{"class":271}," user.name",[77,147674,147675],{"class":271}," \"你的名字\"\n",[77,147677,147678,147680,147682,147684,147687],{"class":79,"line":91},[77,147679,147664],{"class":83},[77,147681,122151],{"class":271},[77,147683,147669],{"class":94},[77,147685,147686],{"class":271}," user.email",[77,147688,147689],{"class":271}," \"你的邮箱\"\n",[51,147691,147692],{},[54,147693,147694],{},"初始化仓库",[67,147696,147698],{"className":119728,"code":147697,"language":119730,"meta":72,"style":72},"git init\n",[74,147699,147700],{"__ignoreMap":72},[77,147701,147702,147704],{"class":79,"line":80},[77,147703,147664],{"class":83},[77,147705,147706],{"class":271}," init\n",[51,147708,147709],{},[54,147710,147711],{},"把本地文件放到暂存区",[67,147713,147715],{"className":119728,"code":147714,"language":119730,"meta":72,"style":72},"git add .\n",[74,147716,147717],{"__ignoreMap":72},[77,147718,147719,147721,147723],{"class":79,"line":80},[77,147720,147664],{"class":83},[77,147722,7684],{"class":271},[77,147724,31209],{"class":271},[51,147726,147727],{},[54,147728,147729],{},"把本地文件放到本地仓库里面",[67,147731,147733],{"className":119728,"code":147732,"language":119730,"meta":72,"style":72},"git commit -m \"first commit\"\n",[74,147734,147735],{"__ignoreMap":72},[77,147736,147737,147739,147742,147744],{"class":79,"line":80},[77,147738,147664],{"class":83},[77,147740,147741],{"class":271}," commit",[77,147743,103318],{"class":94},[77,147745,147746],{"class":271}," \"first commit\"\n",[51,147748,147749],{},[54,147750,147751],{},"链接远程仓库",[67,147753,147755],{"className":119728,"code":147754,"language":119730,"meta":72,"style":72},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[74,147756,147757],{"__ignoreMap":72},[77,147758,147759,147761,147764,147766,147769],{"class":79,"line":80},[77,147760,147664],{"class":83},[77,147762,147763],{"class":271}," remote",[77,147765,7684],{"class":271},[77,147767,147768],{"class":271}," origin",[77,147770,147771],{"class":271}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[51,147773,147774],{},[54,147775,147776],{},"把本地仓库的文件推送到远程仓库 push",[67,147778,147780],{"className":119728,"code":147779,"language":119730,"meta":72,"style":72},"git push -u origin master\n",[74,147781,147782],{"__ignoreMap":72},[77,147783,147784,147786,147788,147790,147792],{"class":79,"line":80},[77,147785,147664],{"class":83},[77,147787,31484],{"class":271},[77,147789,30758],{"class":94},[77,147791,147768],{"class":271},[77,147793,147794],{"class":271}," master\n",[40,147796],{"style":42,"src":147797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[24,147799,147800],{},"上方方法暂未实现，后边学完git后在整",[24,147802,147803],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[40,147805],{"style":42,"src":147806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147808,147810],{"id":147809},"_222-新型相对单位","22.2 新型相对单位",[40,147812],{"style":42,"src":147813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[40,147815],{"style":42,"src":147816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[24,147818,147819],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[24,147821,147822],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[40,147824],{"style":42,"src":147825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[24,147827,147828],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2520,147830,26425],{},{"title":72,"searchDepth":91,"depth":91,"links":147832},[147833,147834],{"id":147622,"depth":91,"text":147623},{"id":147809,"depth":91,"text":147810},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147614,"description":2546},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147841,"title":147842,"body":147843,"description":147847,"extension":2547,"meta":147848,"navigation":2549,"path":147849,"seo":147850,"stem":147851,"__hash__":147852},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147844,"toc":147845},[],{"title":72,"searchDepth":91,"depth":91,"links":147846},[],"自己正经开始学编程的第一门语言！",{"category":95275},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147842,"description":147847},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147854,"title":147855,"body":147856,"description":2546,"extension":2547,"meta":149003,"navigation":2549,"path":149004,"seo":149005,"stem":149006,"__hash__":149007},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147857,"toc":148979},[147858,147861,147865,147868,147871,147896,147899,147905,147909,147912,147939,147942,147982,147985,147997,148000,148006,148010,148014,148041,148058,148065,148069,148072,148098,148101,148105,148108,148148,148151,148168,148174,148178,148183,148227,148230,148248,148251,148319,148323,148330,148333,148348,148351,148360,148363,148374,148377,148386,148389,148406,148409,148424,148428,148432,148435,148437,148457,148461,148464,148467,148478,148481,148487,148491,148497,148524,148527,148539,148542,148553,148556,148562,148566,148572,148622,148625,148667,148670,148703,148706,148740,148744,148747,148767,148770,148806,148809,148822,148826,148830,148836,148839,148852,148856,148859,148865,148868,148872,148875,148878,148927,148931,148947,148953,148960,148966,148976],[10,147859,147855],{"id":147860},"_1-python环境与第一个程序",[14,147862,147864],{"id":147863},"_11-什么是python","1.1 什么是Python",[24,147866,147867],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[24,147869,147870],{},"理解 Python 时抓住三个关键词：",[139,147872,147873,147876,147879],{},[54,147874,147875],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[54,147877,147878],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[54,147880,147881,147882,2828,147885,2828,147888,2828,147891,2828,147893,30853],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[74,147883,147884],{},"os",[74,147886,147887],{},"sys",[74,147889,147890],{},"json",[74,147892,60308],{},[74,147894,147895],{},"datetime",[24,147897,147898],{},"Python 程序的运行链路：",[67,147900,147903],{"className":147901,"code":147902,"language":7662,"meta":72},[7660],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[74,147904,147902],{"__ignoreMap":72},[14,147906,147908],{"id":147907},"_12-python解释器","1.2 Python解释器",[24,147910,147911],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[67,147913,147915],{"className":26289,"code":147914,"language":26291,"meta":72,"style":72},"python --version\npython3 --version\npython\npython3\n",[74,147916,147917,147923,147929,147934],{"__ignoreMap":72},[77,147918,147919,147921],{"class":79,"line":80},[77,147920,32848],{"class":83},[77,147922,28761],{"class":94},[77,147924,147925,147927],{"class":79,"line":91},[77,147926,103315],{"class":83},[77,147928,28761],{"class":94},[77,147930,147931],{"class":79,"line":107},[77,147932,147933],{"class":83},"python\n",[77,147935,147936],{"class":79,"line":191},[77,147937,147938],{"class":83},"python3\n",[24,147940,147941],{},"进入交互模式后，可以直接输入表达式：",[67,147943,147945],{"className":32846,"code":147944,"language":32848,"meta":72,"style":72},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[74,147946,147947,147958,147963,147977],{"__ignoreMap":72},[77,147948,147949,147952,147954,147956],{"class":79,"line":80},[77,147950,147951],{"class":2123},">>>",[77,147953,27586],{"class":94},[77,147955,48032],{"class":2123},[77,147957,50189],{"class":94},[77,147959,147960],{"class":79,"line":91},[77,147961,147962],{"class":94},"3\n",[77,147964,147965,147967,147970,147972,147975],{"class":79,"line":107},[77,147966,147951],{"class":2123},[77,147968,147969],{"class":94}," print",[77,147971,2622],{"class":87},[77,147973,147974],{"class":271},"\"hello python\"",[77,147976,2628],{"class":87},[77,147978,147979],{"class":79,"line":191},[77,147980,147981],{"class":87},"hello python\n",[24,147983,147984],{},"退出交互模式：",[67,147986,147988],{"className":32846,"code":147987,"language":32848,"meta":72,"style":72},"exit()\n",[74,147989,147990],{"__ignoreMap":72},[77,147991,147992,147995],{"class":79,"line":80},[77,147993,147994],{"class":94},"exit",[77,147996,4451],{"class":87},[24,147998,147999],{},"或使用快捷键：",[67,148001,148004],{"className":148002,"code":148003,"language":7662,"meta":72},[7660],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[74,148005,148003],{"__ignoreMap":72},[14,148007,148009],{"id":148008},"_13-安装python","1.3 安装Python",[19,148011,148013],{"id":148012},"_131-windows安装","1.3.1 Windows安装",[139,148015,148016,148023,148026,148032,148038],{},[54,148017,148018,148019],{},"打开 Python 官网：",[417,148020,148021],{"href":148021,"rel":148022},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26332],[54,148024,148025],{},"下载 Windows Installer。",[54,148027,148028,148029,30853],{},"安装时勾选 ",[74,148030,148031],{},"Add Python to PATH",[54,148033,148034,148035,30853],{},"点击 ",[74,148036,148037],{},"Install Now",[54,148039,148040],{},"安装完成后打开命令提示符验证：",[67,148042,148044],{"className":26289,"code":148043,"language":26291,"meta":72,"style":72},"python --version\npip --version\n",[74,148045,148046,148052],{"__ignoreMap":72},[77,148047,148048,148050],{"class":79,"line":80},[77,148049,32848],{"class":83},[77,148051,28761],{"class":94},[77,148053,148054,148056],{"class":79,"line":91},[77,148055,26298],{"class":83},[77,148057,28761],{"class":94},[24,148059,148060,148061,148064],{},"如果提示 ",[74,148062,148063],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[19,148066,148068],{"id":148067},"_132-macos安装","1.3.2 macOS安装",[24,148070,148071],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[67,148073,148075],{"className":26289,"code":148074,"language":26291,"meta":72,"style":72},"brew install python\npython3 --version\npip3 --version\n",[74,148076,148077,148086,148092],{"__ignoreMap":72},[77,148078,148079,148082,148084],{"class":79,"line":80},[77,148080,148081],{"class":83},"brew",[77,148083,26301],{"class":271},[77,148085,126750],{"class":271},[77,148087,148088,148090],{"class":79,"line":91},[77,148089,103315],{"class":83},[77,148091,28761],{"class":94},[77,148093,148094,148096],{"class":79,"line":107},[77,148095,122132],{"class":83},[77,148097,28761],{"class":94},[24,148099,148100],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[19,148102,148104],{"id":148103},"_133-linux安装","1.3.3 Linux安装",[24,148106,148107],{},"Ubuntu\u002FDebian：",[67,148109,148111],{"className":26289,"code":148110,"language":26291,"meta":72,"style":72},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[74,148112,148113,148121,148136,148142],{"__ignoreMap":72},[77,148114,148115,148117,148119],{"class":79,"line":80},[77,148116,27044],{"class":83},[77,148118,119749],{"class":271},[77,148120,28710],{"class":271},[77,148122,148123,148125,148127,148129,148131,148133],{"class":79,"line":91},[77,148124,27044],{"class":83},[77,148126,119749],{"class":271},[77,148128,26301],{"class":271},[77,148130,106836],{"class":271},[77,148132,103234],{"class":271},[77,148134,148135],{"class":271}," python3-venv\n",[77,148137,148138,148140],{"class":79,"line":107},[77,148139,103315],{"class":83},[77,148141,28761],{"class":94},[77,148143,148144,148146],{"class":79,"line":191},[77,148145,122132],{"class":83},[77,148147,28761],{"class":94},[24,148149,148150],{},"Fedora：",[67,148152,148154],{"className":26289,"code":148153,"language":26291,"meta":72,"style":72},"sudo dnf install python3 python3-pip\n",[74,148155,148156],{"__ignoreMap":72},[77,148157,148158,148160,148162,148164,148166],{"class":79,"line":80},[77,148159,27044],{"class":83},[77,148161,28783],{"class":271},[77,148163,26301],{"class":271},[77,148165,106836],{"class":271},[77,148167,122197],{"class":271},[24,148169,148170,148171,148173],{},"Linux 上通常使用 ",[74,148172,103315],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148175,148177],{"id":148176},"_14-pip包管理器","1.4 pip包管理器",[24,148179,148180,148182],{},[74,148181,26298],{}," 用来安装第三方库。",[67,148184,148186],{"className":26289,"code":148185,"language":26291,"meta":72,"style":72},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[74,148187,148188,148197,148206,148214,148220],{"__ignoreMap":72},[77,148189,148190,148192,148194],{"class":79,"line":80},[77,148191,26298],{"class":83},[77,148193,26301],{"class":271},[77,148195,148196],{"class":271}," requests\n",[77,148198,148199,148201,148204],{"class":79,"line":91},[77,148200,26298],{"class":83},[77,148202,148203],{"class":271}," uninstall",[77,148205,148196],{"class":271},[77,148207,148208,148210,148212],{"class":79,"line":107},[77,148209,26298],{"class":83},[77,148211,120006],{"class":271},[77,148213,148196],{"class":271},[77,148215,148216,148218],{"class":79,"line":191},[77,148217,26298],{"class":83},[77,148219,121387],{"class":271},[77,148221,148222,148224],{"class":79,"line":1543},[77,148223,26298],{"class":83},[77,148225,148226],{"class":271}," freeze\n",[24,148228,148229],{},"国内网络较慢时可以临时使用镜像：",[67,148231,148233],{"className":26289,"code":148232,"language":26291,"meta":72,"style":72},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[74,148234,148235],{"__ignoreMap":72},[77,148236,148237,148239,148241,148244,148246],{"class":79,"line":80},[77,148238,26298],{"class":83},[77,148240,26301],{"class":271},[77,148242,148243],{"class":271}," requests",[77,148245,28898],{"class":94},[77,148247,122160],{"class":271},[24,148249,148250],{},"常见第三方库：",[2755,148252,148253,148262],{},[2758,148254,148255],{},[2761,148256,148257,148260],{},[2764,148258,148259],{},"库",[2764,148261,105129],{},[2801,148263,148264,148272,148279,148287,148295,148303,148311],{},[2761,148265,148266,148269],{},[2806,148267,148268],{},"requests",[2806,148270,148271],{},"网络请求",[2761,148273,148274,148276],{},[2806,148275,103062],{},[2806,148277,148278],{},"数值计算",[2761,148280,148281,148284],{},[2806,148282,148283],{},"pandas",[2806,148285,148286],{},"表格数据处理",[2761,148288,148289,148292],{},[2806,148290,148291],{},"matplotlib",[2806,148293,148294],{},"绘图",[2761,148296,148297,148300],{},[2806,148298,148299],{},"pyecharts",[2806,148301,148302],{},"ECharts 图表",[2761,148304,148305,148308],{},[2806,148306,148307],{},"flask",[2806,148309,148310],{},"Web 后端",[2761,148312,148313,148316],{},[2806,148314,148315],{},"pytest",[2806,148317,148318],{},"自动化测试",[14,148320,148322],{"id":148321},"_15-虚拟环境","1.5 虚拟环境",[24,148324,148325,148326,148329],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[74,148327,148328],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[24,148331,148332],{},"创建虚拟环境：",[67,148334,148336],{"className":26289,"code":148335,"language":26291,"meta":72,"style":72},"python -m venv .venv\n",[74,148337,148338],{"__ignoreMap":72},[77,148339,148340,148342,148344,148346],{"class":79,"line":80},[77,148341,32848],{"class":83},[77,148343,103318],{"class":94},[77,148345,103321],{"class":271},[77,148347,103324],{"class":271},[24,148349,148350],{},"Windows 激活：",[67,148352,148354],{"className":26289,"code":148353,"language":26291,"meta":72,"style":72},".venv\\Scripts\\activate\n",[74,148355,148356],{"__ignoreMap":72},[77,148357,148358],{"class":79,"line":80},[77,148359,148353],{"class":83},[24,148361,148362],{},"macOS\u002FLinux 激活：",[67,148364,148366],{"className":26289,"code":148365,"language":26291,"meta":72,"style":72},"source .venv\u002Fbin\u002Factivate\n",[74,148367,148368],{"__ignoreMap":72},[77,148369,148370,148372],{"class":79,"line":80},[77,148371,103329],{"class":94},[77,148373,103332],{"class":271},[24,148375,148376],{},"退出虚拟环境：",[67,148378,148380],{"className":26289,"code":148379,"language":26291,"meta":72,"style":72},"deactivate\n",[74,148381,148382],{"__ignoreMap":72},[77,148383,148384],{"class":79,"line":80},[77,148385,148379],{"class":83},[24,148387,148388],{},"保存依赖：",[67,148390,148392],{"className":26289,"code":148391,"language":26291,"meta":72,"style":72},"pip freeze > requirements.txt\n",[74,148393,148394],{"__ignoreMap":72},[77,148395,148396,148398,148401,148403],{"class":79,"line":80},[77,148397,26298],{"class":83},[77,148399,148400],{"class":271}," freeze",[77,148402,28690],{"class":2123},[77,148404,148405],{"class":271}," requirements.txt\n",[24,148407,148408],{},"安装依赖：",[67,148410,148412],{"className":26289,"code":148411,"language":26291,"meta":72,"style":72},"pip install -r requirements.txt\n",[74,148413,148414],{"__ignoreMap":72},[77,148415,148416,148418,148420,148422],{"class":79,"line":80},[77,148417,26298],{"class":83},[77,148419,26301],{"class":271},[77,148421,122071],{"class":94},[77,148423,148405],{"class":271},[14,148425,148427],{"id":148426},"_16-开发工具","1.6 开发工具",[19,148429,148431],{"id":148430},"_161-pycharm","1.6.1 PyCharm",[24,148433,148434],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[24,148436,124494],{},[139,148438,148439,148442,148445,148451,148454],{},[54,148440,148441],{},"New Project：创建项目。",[54,148443,148444],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[54,148446,148447,148448,128415],{},"New Python File：创建 ",[74,148449,148450],{},".py",[54,148452,148453],{},"Run：运行当前文件。",[54,148455,148456],{},"Debug：断点调试。",[19,148458,148460],{"id":148459},"_162-vs-code","1.6.2 VS Code",[24,148462,148463],{},"VS Code 轻量，适合后续多语言开发。",[24,148465,148466],{},"建议安装插件：",[139,148468,148469,148472,148475],{},[54,148470,148471],{},"Python。",[54,148473,148474],{},"Pylance。",[54,148476,148477],{},"Jupyter。",[24,148479,148480],{},"选择解释器：",[67,148482,148485],{"className":148483,"code":148484,"language":7662,"meta":72},[7660],"Ctrl + Shift + P -> Python: Select Interpreter\n",[74,148486,148484],{"__ignoreMap":72},[14,148488,148490],{"id":148489},"_17-第一个python程序","1.7 第一个Python程序",[24,148492,148493,148494,27086],{},"创建文件 ",[74,148495,148496],{},"hello.py",[67,148498,148500],{"className":32846,"code":148499,"language":32848,"meta":72,"style":72},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[74,148501,148502,148513],{"__ignoreMap":72},[77,148503,148504,148506,148508,148511],{"class":79,"line":80},[77,148505,32883],{"class":94},[77,148507,2622],{"class":87},[77,148509,148510],{"class":271},"\"Hello World\"",[77,148512,2628],{"class":87},[77,148514,148515,148517,148519,148522],{"class":79,"line":91},[77,148516,32883],{"class":94},[77,148518,2622],{"class":87},[77,148520,148521],{"class":271},"\"你好，Python\"",[77,148523,2628],{"class":87},[24,148525,148526],{},"在终端运行：",[67,148528,148530],{"className":26289,"code":148529,"language":26291,"meta":72,"style":72},"python hello.py\n",[74,148531,148532],{"__ignoreMap":72},[77,148533,148534,148536],{"class":79,"line":80},[77,148535,32848],{"class":83},[77,148537,148538],{"class":271}," hello.py\n",[24,148540,148541],{},"或：",[67,148543,148545],{"className":26289,"code":148544,"language":26291,"meta":72,"style":72},"python3 hello.py\n",[74,148546,148547],{"__ignoreMap":72},[77,148548,148549,148551],{"class":79,"line":80},[77,148550,103315],{"class":83},[77,148552,148538],{"class":271},[24,148554,148555],{},"输出：",[67,148557,148560],{"className":148558,"code":148559,"language":7662,"meta":72},[7660],"Hello World\n你好，Python\n",[74,148561,148559],{"__ignoreMap":72},[14,148563,148565],{"id":148564},"_18-print函数","1.8 print函数",[24,148567,148568,148571],{},[74,148569,148570],{},"print()"," 用来输出内容。",[67,148573,148575],{"className":32846,"code":148574,"language":32848,"meta":72,"style":72},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[74,148576,148577,148587,148597,148607],{"__ignoreMap":72},[77,148578,148579,148581,148583,148585],{"class":79,"line":80},[77,148580,32883],{"class":94},[77,148582,2622],{"class":87},[77,148584,8319],{"class":271},[77,148586,2628],{"class":87},[77,148588,148589,148591,148593,148595],{"class":79,"line":91},[77,148590,32883],{"class":94},[77,148592,2622],{"class":87},[77,148594,2925],{"class":94},[77,148596,2628],{"class":87},[77,148598,148599,148601,148603,148605],{"class":79,"line":107},[77,148600,32883],{"class":94},[77,148602,2622],{"class":87},[77,148604,2669],{"class":94},[77,148606,2628],{"class":87},[77,148608,148609,148611,148613,148616,148618,148620],{"class":79,"line":191},[77,148610,32883],{"class":94},[77,148612,2622],{"class":87},[77,148614,148615],{"class":271},"\"年龄:\"",[77,148617,680],{"class":87},[77,148619,3263],{"class":94},[77,148621,2628],{"class":87},[24,148623,148624],{},"多个内容用逗号隔开，默认中间加空格：",[67,148626,148628],{"className":32846,"code":148627,"language":32848,"meta":72,"style":72},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[74,148629,148630,148640,148650],{"__ignoreMap":72},[77,148631,148632,148635,148637],{"class":79,"line":80},[77,148633,148634],{"class":87},"name ",[77,148636,268],{"class":2123},[77,148638,148639],{"class":271}," \"张三\"\n",[77,148641,148642,148645,148647],{"class":79,"line":91},[77,148643,148644],{"class":87},"age ",[77,148646,268],{"class":2123},[77,148648,148649],{"class":94}," 18\n",[77,148651,148652,148654,148656,148659,148662,148664],{"class":79,"line":107},[77,148653,32883],{"class":94},[77,148655,2622],{"class":87},[77,148657,148658],{"class":271},"\"姓名:\"",[77,148660,148661],{"class":87},", name, ",[77,148663,148615],{"class":271},[77,148665,148666],{"class":87},", age)\n",[24,148668,148669],{},"修改分隔符：",[67,148671,148673],{"className":32846,"code":148672,"language":32848,"meta":72,"style":72},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[74,148674,148675],{"__ignoreMap":72},[77,148676,148677,148679,148681,148684,148686,148688,148690,148692,148694,148697,148699,148701],{"class":79,"line":80},[77,148678,32883],{"class":94},[77,148680,2622],{"class":87},[77,148682,148683],{"class":271},"\"2024\"",[77,148685,680],{"class":87},[77,148687,56770],{"class":271},[77,148689,680],{"class":87},[77,148691,56770],{"class":271},[77,148693,680],{"class":87},[77,148695,148696],{"class":7691},"sep",[77,148698,268],{"class":2123},[77,148700,34950],{"class":271},[77,148702,2628],{"class":87},[24,148704,148705],{},"修改结尾符：",[67,148707,148709],{"className":32846,"code":148708,"language":32848,"meta":72,"style":72},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[74,148710,148711,148729],{"__ignoreMap":72},[77,148712,148713,148715,148717,148719,148721,148723,148725,148727],{"class":79,"line":80},[77,148714,32883],{"class":94},[77,148716,2622],{"class":87},[77,148718,8319],{"class":271},[77,148720,680],{"class":87},[77,148722,48267],{"class":7691},[77,148724,268],{"class":2123},[77,148726,6834],{"class":271},[77,148728,2628],{"class":87},[77,148730,148731,148733,148735,148738],{"class":79,"line":91},[77,148732,32883],{"class":94},[77,148734,2622],{"class":87},[77,148736,148737],{"class":271},"\"python\"",[77,148739,2628],{"class":87},[14,148741,148743],{"id":148742},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[24,148745,148746],{},"交互运行适合临时验证：",[67,148748,148750],{"className":32846,"code":148749,"language":32848,"meta":72,"style":72},">>> 10 * 3\n30\n",[74,148751,148752,148762],{"__ignoreMap":72},[77,148753,148754,148756,148758,148760],{"class":79,"line":80},[77,148755,147951],{"class":2123},[77,148757,4513],{"class":94},[77,148759,8993],{"class":2123},[77,148761,122468],{"class":94},[77,148763,148764],{"class":79,"line":91},[77,148765,148766],{"class":94},"30\n",[24,148768,148769],{},"脚本运行适合保存程序：",[67,148771,148773],{"className":32846,"code":148772,"language":32848,"meta":72,"style":72},"price = 8\ncount = 5\nprint(price * count)\n",[74,148774,148775,148785,148794],{"__ignoreMap":72},[77,148776,148777,148780,148782],{"class":79,"line":80},[77,148778,148779],{"class":87},"price ",[77,148781,268],{"class":2123},[77,148783,148784],{"class":94}," 8\n",[77,148786,148787,148790,148792],{"class":79,"line":91},[77,148788,148789],{"class":87},"count ",[77,148791,268],{"class":2123},[77,148793,56881],{"class":94},[77,148795,148796,148798,148801,148803],{"class":79,"line":107},[77,148797,32883],{"class":94},[77,148799,148800],{"class":87},"(price ",[77,148802,3068],{"class":2123},[77,148804,148805],{"class":87}," count)\n",[24,148807,148808],{},"实际学习中推荐：",[139,148810,148811,148814,148819],{},[54,148812,148813],{},"临时试一个语法，用交互模式。",[54,148815,148816,148817,128415],{},"写完整练习，用 ",[74,148818,148450],{},[54,148820,148821],{},"写项目，用独立目录和虚拟环境。",[14,148823,148825],{"id":148824},"_110-常见错误","1.10 常见错误",[19,148827,148829],{"id":148828},"_1101-命令找不到","1.10.1 命令找不到",[67,148831,148834],{"className":148832,"code":148833,"language":7662,"meta":72},[7660],"python: command not found\n",[74,148835,148833],{"__ignoreMap":72},[24,148837,148838],{},"原因：",[139,148840,148841,148844,148847],{},[54,148842,148843],{},"没安装 Python。",[54,148845,148846],{},"PATH 没配置。",[54,148848,148849,148850,30853],{},"Linux\u002FmacOS 应该使用 ",[74,148851,103315],{},[19,148853,148855],{"id":148854},"_1102-文件名冲突","1.10.2 文件名冲突",[24,148857,148858],{},"不要把文件命名为：",[67,148860,148863],{"className":148861,"code":148862,"language":7662,"meta":72},[7660],"random.py\njson.py\ntime.py\nrequests.py\n",[74,148864,148862],{"__ignoreMap":72},[24,148866,148867],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[19,148869,148871],{"id":148870},"_1103-中文乱码","1.10.3 中文乱码",[24,148873,148874],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[24,148876,148877],{},"如果读写文件出现乱码，要明确指定编码：",[67,148879,148881],{"className":32846,"code":148880,"language":32848,"meta":72,"style":72},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[74,148882,148883,148917],{"__ignoreMap":72},[77,148884,148885,148887,148890,148892,148895,148897,148900,148902,148905,148907,148910,148912,148914],{"class":79,"line":80},[77,148886,110266],{"class":2123},[77,148888,148889],{"class":94}," open",[77,148891,2622],{"class":87},[77,148893,148894],{"class":271},"\"data.txt\"",[77,148896,680],{"class":87},[77,148898,148899],{"class":271},"\"r\"",[77,148901,680],{"class":87},[77,148903,148904],{"class":7691},"encoding",[77,148906,268],{"class":2123},[77,148908,148909],{"class":271},"\"utf-8\"",[77,148911,16186],{"class":87},[77,148913,33850],{"class":2123},[77,148915,148916],{"class":87}," f:\n",[77,148918,148919,148922,148924],{"class":79,"line":91},[77,148920,148921],{"class":87},"    content ",[77,148923,268],{"class":2123},[77,148925,148926],{"class":87}," f.read()\n",[14,148928,148930],{"id":148929},"_111-本章练习","1.11 本章练习",[139,148932,148933,148936,148942],{},[54,148934,148935],{},"安装 Python，并在终端输出版本号。",[54,148937,148938,148939,148941],{},"新建 ",[74,148940,148496],{},"，输出自己的姓名、年龄、学习目标。",[54,148943,106799,148944,148946],{},[74,148945,148570],{}," 输出下面格式：",[67,148948,148951],{"className":148949,"code":148950,"language":7662,"meta":72},[7660],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[74,148952,148950],{"__ignoreMap":72},[139,148954,148955],{"start":191},[54,148956,106799,148957,148959],{},[74,148958,148696],{}," 输出日期：",[67,148961,148964],{"className":148962,"code":148963,"language":7662,"meta":72},[7660],"2024-10-10\n",[74,148965,148963],{"__ignoreMap":72},[139,148967,148968],{"start":1543},[54,148969,106799,148970,148972,148973,148975],{},[74,148971,48267],{}," 让两次 ",[74,148974,148570],{}," 输出在同一行。",[2520,148977,148978],{},"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":72,"searchDepth":91,"depth":91,"links":148980},[148981,148982,148983,148988,148989,148990,148994,148995,148996,148997,149002],{"id":147863,"depth":91,"text":147864},{"id":147907,"depth":91,"text":147908},{"id":148008,"depth":91,"text":148009,"children":148984},[148985,148986,148987],{"id":148012,"depth":107,"text":148013},{"id":148067,"depth":107,"text":148068},{"id":148103,"depth":107,"text":148104},{"id":148176,"depth":91,"text":148177},{"id":148321,"depth":91,"text":148322},{"id":148426,"depth":91,"text":148427,"children":148991},[148992,148993],{"id":148430,"depth":107,"text":148431},{"id":148459,"depth":107,"text":148460},{"id":148489,"depth":91,"text":148490},{"id":148564,"depth":91,"text":148565},{"id":148742,"depth":91,"text":148743},{"id":148824,"depth":91,"text":148825,"children":148998},[148999,149000,149001],{"id":148828,"depth":107,"text":148829},{"id":148854,"depth":107,"text":148855},{"id":148870,"depth":107,"text":148871},{"id":148929,"depth":91,"text":148930},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147855,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149009,"title":149010,"body":149011,"description":2546,"extension":2547,"meta":151415,"navigation":2549,"path":151416,"seo":151417,"stem":151418,"__hash__":151419},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149012,"toc":151400},[149013,149016,149020,149023,149026,149043,149046,149088,149091,149095,149098,149101,149138,149141,149175,149178,149270,149274,149288,149291,149318,149321,149325,149428,149435,149438,149455,149459,149466,149655,149658,149731,149735,149738,149822,149825,149857,149861,150065,150068,150072,150078,150180,150183,150439,150443,150446,150449,150463,150465,150651,150655,151017,151023,151027,151030,151154,151157,151336,151339,151343,151376,151380,151397],[10,149014,149010],{"id":149015},"_10-json与pyecharts折线图",[14,149017,149019],{"id":149018},"_101-数据可视化","10.1 数据可视化",[24,149021,149022],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[24,149024,149025],{},"常见图表：",[139,149027,149028,149031,149034,149037,149040],{},[54,149029,149030],{},"折线图：看趋势。",[54,149032,149033],{},"柱状图：看分类对比。",[54,149035,149036],{},"饼图：看占比。",[54,149038,149039],{},"地图：看地域分布。",[54,149041,149042],{},"散点图：看两个变量之间的关系。",[24,149044,149045],{},"Python 可视化常用库：",[2755,149047,149048,149056],{},[2758,149049,149050],{},[2761,149051,149052,149054],{},[2764,149053,148259],{},[2764,149055,26207],{},[2801,149057,149058,149065,149073,149080],{},[2761,149059,149060,149062],{},[2806,149061,148291],{},[2806,149063,149064],{},"基础、经典、可定制",[2761,149066,149067,149070],{},[2806,149068,149069],{},"seaborn",[2806,149071,149072],{},"统计图表更美观",[2761,149074,149075,149077],{},[2806,149076,148299],{},[2806,149078,149079],{},"生成交互式网页图表",[2761,149081,149082,149085],{},[2806,149083,149084],{},"plotly",[2806,149086,149087],{},"交互图表能力强",[24,149089,149090],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149092,149094],{"id":149093},"_102-json回顾","10.2 JSON回顾",[24,149096,149097],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[24,149099,149100],{},"Python 字典：",[67,149102,149104],{"className":32846,"code":149103,"language":32848,"meta":72,"style":72},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[74,149105,149106,149114,149125,149134],{"__ignoreMap":72},[77,149107,149108,149110,149112],{"class":79,"line":80},[77,149109,104093],{"class":87},[77,149111,268],{"class":2123},[77,149113,88],{"class":87},[77,149115,149116,149119,149121,149123],{"class":79,"line":91},[77,149117,149118],{"class":271},"    \"name\"",[77,149120,98],{"class":87},[77,149122,71712],{"class":271},[77,149124,33933],{"class":87},[77,149126,149127,149130,149132],{"class":79,"line":107},[77,149128,149129],{"class":271},"    \"value\"",[77,149131,98],{"class":87},[77,149133,99894],{"class":94},[77,149135,149136],{"class":79,"line":191},[77,149137,110],{"class":87},[24,149139,149140],{},"JSON 字符串：",[67,149142,149145],{"className":149143,"code":149144,"language":147890,"meta":72,"style":72},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[74,149146,149147,149151,149162,149171],{"__ignoreMap":72},[77,149148,149149],{"class":79,"line":80},[77,149150,4023],{"class":87},[77,149152,149153,149156,149158,149160],{"class":79,"line":91},[77,149154,149155],{"class":94},"  \"name\"",[77,149157,98],{"class":87},[77,149159,71712],{"class":271},[77,149161,33933],{"class":87},[77,149163,149164,149167,149169],{"class":79,"line":107},[77,149165,149166],{"class":94},"  \"value\"",[77,149168,98],{"class":87},[77,149170,99894],{"class":94},[77,149172,149173],{"class":79,"line":191},[77,149174,110],{"class":87},[24,149176,149177],{},"Python 与 JSON 的转换：",[67,149179,149181],{"className":32846,"code":149180,"language":32848,"meta":72,"style":72},"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",[74,149182,149183,149190,149194,149219,149223,149242,149249,149253,149263],{"__ignoreMap":72},[77,149184,149185,149187],{"class":79,"line":80},[77,149186,32860],{"class":2123},[77,149188,149189],{"class":87}," json\n",[77,149191,149192],{"class":79,"line":91},[77,149193,4875],{"emptyLinePlaceholder":2549},[77,149195,149196,149198,149200,149202,149204,149206,149208,149210,149213,149215,149217],{"class":79,"line":107},[77,149197,104093],{"class":87},[77,149199,268],{"class":2123},[77,149201,6923],{"class":87},[77,149203,65123],{"class":271},[77,149205,98],{"class":87},[77,149207,71712],{"class":271},[77,149209,680],{"class":87},[77,149211,149212],{"class":271},"\"value\"",[77,149214,98],{"class":87},[77,149216,2925],{"class":94},[77,149218,110],{"class":87},[77,149220,149221],{"class":79,"line":191},[77,149222,4875],{"emptyLinePlaceholder":2549},[77,149224,149225,149228,149230,149233,149236,149238,149240],{"class":79,"line":1543},[77,149226,149227],{"class":87},"json_text ",[77,149229,268],{"class":2123},[77,149231,149232],{"class":87}," json.dumps(data, ",[77,149234,149235],{"class":7691},"ensure_ascii",[77,149237,268],{"class":2123},[77,149239,36453],{"class":94},[77,149241,2628],{"class":87},[77,149243,149244,149246],{"class":79,"line":1549},[77,149245,32883],{"class":94},[77,149247,149248],{"class":87},"(json_text)\n",[77,149250,149251],{"class":79,"line":1566},[77,149252,4875],{"emptyLinePlaceholder":2549},[77,149254,149255,149258,149260],{"class":79,"line":1572},[77,149256,149257],{"class":87},"new_data ",[77,149259,268],{"class":2123},[77,149261,149262],{"class":87}," json.loads(json_text)\n",[77,149264,149265,149267],{"class":79,"line":1589},[77,149266,32883],{"class":94},[77,149268,149269],{"class":87},"(new_data)\n",[14,149271,149273],{"id":149272},"_103-安装pyecharts","10.3 安装pyecharts",[67,149275,149277],{"className":26289,"code":149276,"language":26291,"meta":72,"style":72},"pip install pyecharts\n",[74,149278,149279],{"__ignoreMap":72},[77,149280,149281,149283,149285],{"class":79,"line":80},[77,149282,26298],{"class":83},[77,149284,26301],{"class":271},[77,149286,149287],{"class":271}," pyecharts\n",[24,149289,149290],{},"验证：",[67,149292,149294],{"className":32846,"code":149293,"language":32848,"meta":72,"style":72},"import pyecharts\n\nprint(pyecharts.__version__)\n",[74,149295,149296,149302,149306],{"__ignoreMap":72},[77,149297,149298,149300],{"class":79,"line":80},[77,149299,32860],{"class":2123},[77,149301,149287],{"class":87},[77,149303,149304],{"class":79,"line":91},[77,149305,4875],{"emptyLinePlaceholder":2549},[77,149307,149308,149310,149313,149316],{"class":79,"line":107},[77,149309,32883],{"class":94},[77,149311,149312],{"class":87},"(pyecharts.",[77,149314,149315],{"class":94},"__version__",[77,149317,2628],{"class":87},[24,149319,149320],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149322,149324],{"id":149323},"_104-第一个折线图","10.4 第一个折线图",[67,149326,149328],{"className":32846,"code":149327,"language":32848,"meta":72,"style":72},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[74,149329,149330,149342,149346,149356,149386,149418],{"__ignoreMap":72},[77,149331,149332,149334,149337,149339],{"class":79,"line":80},[77,149333,33205],{"class":2123},[77,149335,149336],{"class":87}," pyecharts.charts ",[77,149338,32860],{"class":2123},[77,149340,149341],{"class":87}," Line\n",[77,149343,149344],{"class":79,"line":91},[77,149345,4875],{"emptyLinePlaceholder":2549},[77,149347,149348,149351,149353],{"class":79,"line":107},[77,149349,149350],{"class":87},"line ",[77,149352,268],{"class":2123},[77,149354,149355],{"class":87}," Line()\n",[77,149357,149358,149361,149364,149366,149369,149371,149374,149376,149379,149381,149384],{"class":79,"line":191},[77,149359,149360],{"class":87},"line.add_xaxis([",[77,149362,149363],{"class":271},"\"周一\"",[77,149365,680],{"class":87},[77,149367,149368],{"class":271},"\"周二\"",[77,149370,680],{"class":87},[77,149372,149373],{"class":271},"\"周三\"",[77,149375,680],{"class":87},[77,149377,149378],{"class":271},"\"周四\"",[77,149380,680],{"class":87},[77,149382,149383],{"class":271},"\"周五\"",[77,149385,7132],{"class":87},[77,149387,149388,149391,149394,149396,149398,149400,149402,149404,149406,149408,149411,149413,149416],{"class":79,"line":1543},[77,149389,149390],{"class":87},"line.add_yaxis(",[77,149392,149393],{"class":271},"\"销售额\"",[77,149395,79956],{"class":87},[77,149397,2925],{"class":94},[77,149399,680],{"class":87},[77,149401,3430],{"class":94},[77,149403,680],{"class":87},[77,149405,3475],{"class":94},[77,149407,680],{"class":87},[77,149409,149410],{"class":94},"150",[77,149412,680],{"class":87},[77,149414,149415],{"class":94},"180",[77,149417,7132],{"class":87},[77,149419,149420,149423,149426],{"class":79,"line":1549},[77,149421,149422],{"class":87},"line.render(",[77,149424,149425],{"class":271},"\"line.html\"",[77,149427,2628],{"class":87},[24,149429,149430,149431,149434],{},"运行后会生成 ",[74,149432,149433],{},"line.html","，用浏览器打开即可看到图表。",[24,149436,149437],{},"核心步骤：",[139,149439,149440,149443,149446,149449,149452],{},[54,149441,149442],{},"导入图表类。",[54,149444,149445],{},"创建图表对象。",[54,149447,149448],{},"添加 x 轴数据。",[54,149450,149451],{},"添加 y 轴数据。",[54,149453,149454],{},"渲染为 HTML。",[14,149456,149458],{"id":149457},"_105-全局配置","10.5 全局配置",[24,149460,149461,149462,149465],{},"常用配置在 ",[74,149463,149464],{},"pyecharts.options"," 中。",[67,149467,149469],{"className":32846,"code":149468,"language":32848,"meta":72,"style":72},"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",[74,149470,149471,149488,149498,149502,149510,149534,149562,149567,149586,149605,149623,149643,149647],{"__ignoreMap":72},[77,149472,149473,149475,149478,149480,149483,149485],{"class":79,"line":80},[77,149474,33205],{"class":2123},[77,149476,149477],{"class":87}," pyecharts ",[77,149479,32860],{"class":2123},[77,149481,149482],{"class":87}," options ",[77,149484,33850],{"class":2123},[77,149486,149487],{"class":87}," opts\n",[77,149489,149490,149492,149494,149496],{"class":79,"line":91},[77,149491,33205],{"class":2123},[77,149493,149336],{"class":87},[77,149495,32860],{"class":2123},[77,149497,149341],{"class":87},[77,149499,149500],{"class":79,"line":107},[77,149501,4875],{"emptyLinePlaceholder":2549},[77,149503,149504,149506,149508],{"class":79,"line":191},[77,149505,149350],{"class":87},[77,149507,268],{"class":2123},[77,149509,149355],{"class":87},[77,149511,149512,149514,149516,149518,149520,149522,149524,149526,149528,149530,149532],{"class":79,"line":1543},[77,149513,149360],{"class":87},[77,149515,149363],{"class":271},[77,149517,680],{"class":87},[77,149519,149368],{"class":271},[77,149521,680],{"class":87},[77,149523,149373],{"class":271},[77,149525,680],{"class":87},[77,149527,149378],{"class":271},[77,149529,680],{"class":87},[77,149531,149383],{"class":271},[77,149533,7132],{"class":87},[77,149535,149536,149538,149540,149542,149544,149546,149548,149550,149552,149554,149556,149558,149560],{"class":79,"line":1549},[77,149537,149390],{"class":87},[77,149539,149393],{"class":271},[77,149541,79956],{"class":87},[77,149543,2925],{"class":94},[77,149545,680],{"class":87},[77,149547,3430],{"class":94},[77,149549,680],{"class":87},[77,149551,3475],{"class":94},[77,149553,680],{"class":87},[77,149555,149410],{"class":94},[77,149557,680],{"class":87},[77,149559,149415],{"class":94},[77,149561,7132],{"class":87},[77,149563,149564],{"class":79,"line":1566},[77,149565,149566],{"class":87},"line.set_global_opts(\n",[77,149568,149569,149572,149574,149577,149579,149581,149584],{"class":79,"line":1572},[77,149570,149571],{"class":7691},"    title_opts",[77,149573,268],{"class":2123},[77,149575,149576],{"class":87},"opts.TitleOpts(",[77,149578,53871],{"class":7691},[77,149580,268],{"class":2123},[77,149582,149583],{"class":271},"\"一周销售额\"",[77,149585,40513],{"class":87},[77,149587,149588,149591,149593,149596,149598,149600,149603],{"class":79,"line":1589},[77,149589,149590],{"class":7691},"    xaxis_opts",[77,149592,268],{"class":2123},[77,149594,149595],{"class":87},"opts.AxisOpts(",[77,149597,82247],{"class":7691},[77,149599,268],{"class":2123},[77,149601,149602],{"class":271},"\"日期\"",[77,149604,40513],{"class":87},[77,149606,149607,149610,149612,149614,149616,149618,149621],{"class":79,"line":1595},[77,149608,149609],{"class":7691},"    yaxis_opts",[77,149611,268],{"class":2123},[77,149613,149595],{"class":87},[77,149615,82247],{"class":7691},[77,149617,268],{"class":2123},[77,149619,149620],{"class":271},"\"金额\"",[77,149622,40513],{"class":87},[77,149624,149625,149628,149630,149633,149636,149638,149641],{"class":79,"line":4088},[77,149626,149627],{"class":7691},"    tooltip_opts",[77,149629,268],{"class":2123},[77,149631,149632],{"class":87},"opts.TooltipOpts(",[77,149634,149635],{"class":7691},"trigger",[77,149637,268],{"class":2123},[77,149639,149640],{"class":271},"\"axis\"",[77,149642,40513],{"class":87},[77,149644,149645],{"class":79,"line":4093},[77,149646,2628],{"class":87},[77,149648,149649,149651,149653],{"class":79,"line":4099},[77,149650,149422],{"class":87},[77,149652,149425],{"class":271},[77,149654,2628],{"class":87},[24,149656,149657],{},"常见全局配置：",[2755,149659,149660,149669],{},[2758,149661,149662],{},[2761,149663,149664,149667],{},[2764,149665,149666],{},"配置",[2764,149668,105129],{},[2801,149670,149671,149681,149691,149701,149711,149721],{},[2761,149672,149673,149678],{},[2806,149674,149675],{},[74,149676,149677],{},"TitleOpts",[2806,149679,149680],{},"标题",[2761,149682,149683,149688],{},[2806,149684,149685],{},[74,149686,149687],{},"LegendOpts",[2806,149689,149690],{},"图例",[2761,149692,149693,149698],{},[2806,149694,149695],{},[74,149696,149697],{},"TooltipOpts",[2806,149699,149700],{},"提示框",[2761,149702,149703,149708],{},[2806,149704,149705],{},[74,149706,149707],{},"AxisOpts",[2806,149709,149710],{},"坐标轴",[2761,149712,149713,149718],{},[2806,149714,149715],{},[74,149716,149717],{},"VisualMapOpts",[2806,149719,149720],{},"视觉映射",[2761,149722,149723,149728],{},[2806,149724,149725],{},[74,149726,149727],{},"DataZoomOpts",[2806,149729,149730],{},"区域缩放",[14,149732,149734],{"id":149733},"_106-系列配置","10.6 系列配置",[24,149736,149737],{},"系列配置作用于某一组数据。",[67,149739,149741],{"className":32846,"code":149740,"language":32848,"meta":72,"style":72},"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",[74,149742,149743,149748,149759,149788,149799,149818],{"__ignoreMap":72},[77,149744,149745],{"class":79,"line":80},[77,149746,149747],{"class":87},"line.add_yaxis(\n",[77,149749,149750,149753,149755,149757],{"class":79,"line":91},[77,149751,149752],{"class":7691},"    series_name",[77,149754,268],{"class":2123},[77,149756,149393],{"class":271},[77,149758,33933],{"class":87},[77,149760,149761,149764,149766,149768,149770,149772,149774,149776,149778,149780,149782,149784,149786],{"class":79,"line":107},[77,149762,149763],{"class":7691},"    y_axis",[77,149765,268],{"class":2123},[77,149767,3503],{"class":87},[77,149769,2925],{"class":94},[77,149771,680],{"class":87},[77,149773,3430],{"class":94},[77,149775,680],{"class":87},[77,149777,3475],{"class":94},[77,149779,680],{"class":87},[77,149781,149410],{"class":94},[77,149783,680],{"class":87},[77,149785,149415],{"class":94},[77,149787,90272],{"class":87},[77,149789,149790,149793,149795,149797],{"class":79,"line":191},[77,149791,149792],{"class":7691},"    is_smooth",[77,149794,268],{"class":2123},[77,149796,33943],{"class":94},[77,149798,33933],{"class":87},[77,149800,149801,149804,149806,149809,149812,149814,149816],{"class":79,"line":1543},[77,149802,149803],{"class":7691},"    label_opts",[77,149805,268],{"class":2123},[77,149807,149808],{"class":87},"opts.LabelOpts(",[77,149810,149811],{"class":7691},"is_show",[77,149813,268],{"class":2123},[77,149815,33943],{"class":94},[77,149817,40513],{"class":87},[77,149819,149820],{"class":79,"line":1549},[77,149821,2628],{"class":87},[24,149823,149824],{},"常用参数：",[139,149826,149827,149833,149839,149845,149851],{},[54,149828,149829,149832],{},[74,149830,149831],{},"series_name","：系列名称。",[54,149834,149835,149838],{},[74,149836,149837],{},"y_axis","：y 轴数据。",[54,149840,149841,149844],{},[74,149842,149843],{},"is_smooth","：是否平滑曲线。",[54,149846,149847,149850],{},[74,149848,149849],{},"label_opts","：标签配置。",[54,149852,149853,149856],{},[74,149854,149855],{},"symbol_size","：标记点大小。",[14,149858,149860],{"id":149859},"_107-多条折线","10.7 多条折线",[67,149862,149864],{"className":32846,"code":149863,"language":32848,"meta":72,"style":72},"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",[74,149865,149866,149880,149890,149894,149923,149927,149935,149940,149978,150015,150019,150036,150052,150056],{"__ignoreMap":72},[77,149867,149868,149870,149872,149874,149876,149878],{"class":79,"line":80},[77,149869,33205],{"class":2123},[77,149871,149477],{"class":87},[77,149873,32860],{"class":2123},[77,149875,149482],{"class":87},[77,149877,33850],{"class":2123},[77,149879,149487],{"class":87},[77,149881,149882,149884,149886,149888],{"class":79,"line":91},[77,149883,33205],{"class":2123},[77,149885,149336],{"class":87},[77,149887,32860],{"class":2123},[77,149889,149341],{"class":87},[77,149891,149892],{"class":79,"line":107},[77,149893,4875],{"emptyLinePlaceholder":2549},[77,149895,149896,149899,149901,149903,149905,149907,149909,149911,149913,149915,149917,149919,149921],{"class":79,"line":191},[77,149897,149898],{"class":87},"dates ",[77,149900,268],{"class":2123},[77,149902,54684],{"class":87},[77,149904,149363],{"class":271},[77,149906,680],{"class":87},[77,149908,149368],{"class":271},[77,149910,680],{"class":87},[77,149912,149373],{"class":271},[77,149914,680],{"class":87},[77,149916,149378],{"class":271},[77,149918,680],{"class":87},[77,149920,149383],{"class":271},[77,149922,35713],{"class":87},[77,149924,149925],{"class":79,"line":1543},[77,149926,4875],{"emptyLinePlaceholder":2549},[77,149928,149929,149931,149933],{"class":79,"line":1549},[77,149930,149350],{"class":87},[77,149932,268],{"class":2123},[77,149934,149355],{"class":87},[77,149936,149937],{"class":79,"line":1566},[77,149938,149939],{"class":87},"line.add_xaxis(dates)\n",[77,149941,149942,149944,149947,149949,149951,149953,149956,149958,149960,149962,149964,149966,149968,149970,149972,149974,149976],{"class":79,"line":1572},[77,149943,149390],{"class":87},[77,149945,149946],{"class":271},"\"线上销售\"",[77,149948,79956],{"class":87},[77,149950,2925],{"class":94},[77,149952,680],{"class":87},[77,149954,149955],{"class":94},"130",[77,149957,680],{"class":87},[77,149959,3430],{"class":94},[77,149961,680],{"class":87},[77,149963,23518],{"class":94},[77,149965,680],{"class":87},[77,149967,4198],{"class":94},[77,149969,114635],{"class":87},[77,149971,149843],{"class":7691},[77,149973,268],{"class":2123},[77,149975,33943],{"class":94},[77,149977,2628],{"class":87},[77,149979,149980,149982,149985,149987,149989,149991,149993,149995,149997,149999,150001,150003,150005,150007,150009,150011,150013],{"class":79,"line":1589},[77,149981,149390],{"class":87},[77,149983,149984],{"class":271},"\"线下销售\"",[77,149986,79956],{"class":87},[77,149988,3225],{"class":94},[77,149990,680],{"class":87},[77,149992,3475],{"class":94},[77,149994,680],{"class":87},[77,149996,2925],{"class":94},[77,149998,680],{"class":87},[77,150000,3430],{"class":94},[77,150002,680],{"class":87},[77,150004,149410],{"class":94},[77,150006,114635],{"class":87},[77,150008,149843],{"class":7691},[77,150010,268],{"class":2123},[77,150012,33943],{"class":94},[77,150014,2628],{"class":87},[77,150016,150017],{"class":79,"line":1595},[77,150018,149566],{"class":87},[77,150020,150021,150023,150025,150027,150029,150031,150034],{"class":79,"line":4088},[77,150022,149571],{"class":7691},[77,150024,268],{"class":2123},[77,150026,149576],{"class":87},[77,150028,53871],{"class":7691},[77,150030,268],{"class":2123},[77,150032,150033],{"class":271},"\"线上线下销售趋势\"",[77,150035,40513],{"class":87},[77,150037,150038,150040,150042,150044,150046,150048,150050],{"class":79,"line":4093},[77,150039,149627],{"class":7691},[77,150041,268],{"class":2123},[77,150043,149632],{"class":87},[77,150045,149635],{"class":7691},[77,150047,268],{"class":2123},[77,150049,149640],{"class":271},[77,150051,40513],{"class":87},[77,150053,150054],{"class":79,"line":4099},[77,150055,2628],{"class":87},[77,150057,150058,150060,150063],{"class":79,"line":4104},[77,150059,149422],{"class":87},[77,150061,150062],{"class":271},"\"sales.html\"",[77,150064,2628],{"class":87},[24,150066,150067],{},"多条折线适合比较不同指标或不同地区。",[14,150069,150071],{"id":150070},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[24,150073,150074,150075,27086],{},"假设 ",[74,150076,150077],{},"sales.json",[67,150079,150081],{"className":149143,"code":150080,"language":147890,"meta":72,"style":72},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[74,150082,150083,150088,150120,150148,150176],{"__ignoreMap":72},[77,150084,150085],{"class":79,"line":80},[77,150086,150087],{"class":87},"[\n",[77,150089,150090,150093,150096,150098,150100,150102,150105,150107,150109,150111,150114,150116,150118],{"class":79,"line":91},[77,150091,150092],{"class":87},"  {",[77,150094,150095],{"class":94},"\"date\"",[77,150097,98],{"class":87},[77,150099,149363],{"class":271},[77,150101,680],{"class":87},[77,150103,150104],{"class":94},"\"online\"",[77,150106,98],{"class":87},[77,150108,2925],{"class":94},[77,150110,680],{"class":87},[77,150112,150113],{"class":94},"\"offline\"",[77,150115,98],{"class":87},[77,150117,3225],{"class":94},[77,150119,7405],{"class":87},[77,150121,150122,150124,150126,150128,150130,150132,150134,150136,150138,150140,150142,150144,150146],{"class":79,"line":107},[77,150123,150092],{"class":87},[77,150125,150095],{"class":94},[77,150127,98],{"class":87},[77,150129,149368],{"class":271},[77,150131,680],{"class":87},[77,150133,150104],{"class":94},[77,150135,98],{"class":87},[77,150137,149955],{"class":94},[77,150139,680],{"class":87},[77,150141,150113],{"class":94},[77,150143,98],{"class":87},[77,150145,3475],{"class":94},[77,150147,7405],{"class":87},[77,150149,150150,150152,150154,150156,150158,150160,150162,150164,150166,150168,150170,150172,150174],{"class":79,"line":191},[77,150151,150092],{"class":87},[77,150153,150095],{"class":94},[77,150155,98],{"class":87},[77,150157,149373],{"class":271},[77,150159,680],{"class":87},[77,150161,150104],{"class":94},[77,150163,98],{"class":87},[77,150165,3430],{"class":94},[77,150167,680],{"class":87},[77,150169,150113],{"class":94},[77,150171,98],{"class":87},[77,150173,2925],{"class":94},[77,150175,110],{"class":87},[77,150177,150178],{"class":79,"line":1543},[77,150179,35713],{"class":87},[24,150181,150182],{},"读取并绘图：",[67,150184,150186],{"className":32846,"code":150185,"language":32848,"meta":72,"style":72},"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",[74,150187,150188,150194,150208,150218,150222,150254,150267,150271,150279,150288,150297,150301,150313,150322,150331,150340,150344,150352,150356,150373,150390,150394,150411,150427,150431],{"__ignoreMap":72},[77,150189,150190,150192],{"class":79,"line":80},[77,150191,32860],{"class":2123},[77,150193,149189],{"class":87},[77,150195,150196,150198,150200,150202,150204,150206],{"class":79,"line":91},[77,150197,33205],{"class":2123},[77,150199,149477],{"class":87},[77,150201,32860],{"class":2123},[77,150203,149482],{"class":87},[77,150205,33850],{"class":2123},[77,150207,149487],{"class":87},[77,150209,150210,150212,150214,150216],{"class":79,"line":107},[77,150211,33205],{"class":2123},[77,150213,149336],{"class":87},[77,150215,32860],{"class":2123},[77,150217,149341],{"class":87},[77,150219,150220],{"class":79,"line":191},[77,150221,4875],{"emptyLinePlaceholder":2549},[77,150223,150224,150226,150228,150230,150233,150235,150237,150239,150241,150243,150245,150247,150249,150252],{"class":79,"line":1543},[77,150225,110266],{"class":2123},[77,150227,148889],{"class":94},[77,150229,2622],{"class":87},[77,150231,150232],{"class":271},"\"sales.json\"",[77,150234,680],{"class":87},[77,150236,148899],{"class":271},[77,150238,680],{"class":87},[77,150240,148904],{"class":7691},[77,150242,268],{"class":2123},[77,150244,148909],{"class":271},[77,150246,16186],{"class":87},[77,150248,33850],{"class":2123},[77,150250,150251],{"class":7691}," file",[77,150253,6214],{"class":87},[77,150255,150256,150258,150260,150263,150265],{"class":79,"line":1549},[77,150257,103856],{"class":87},[77,150259,268],{"class":2123},[77,150261,150262],{"class":87}," json.load(",[77,150264,47820],{"class":7691},[77,150266,2628],{"class":87},[77,150268,150269],{"class":79,"line":1566},[77,150270,4875],{"emptyLinePlaceholder":2549},[77,150272,150273,150275,150277],{"class":79,"line":1572},[77,150274,149898],{"class":87},[77,150276,268],{"class":2123},[77,150278,54296],{"class":87},[77,150280,150281,150284,150286],{"class":79,"line":1589},[77,150282,150283],{"class":87},"online_sales ",[77,150285,268],{"class":2123},[77,150287,54296],{"class":87},[77,150289,150290,150293,150295],{"class":79,"line":1595},[77,150291,150292],{"class":87},"offline_sales ",[77,150294,268],{"class":2123},[77,150296,54296],{"class":87},[77,150298,150299],{"class":79,"line":4088},[77,150300,4875],{"emptyLinePlaceholder":2549},[77,150302,150303,150305,150308,150310],{"class":79,"line":4093},[77,150304,5500],{"class":2123},[77,150306,150307],{"class":87}," item ",[77,150309,28511],{"class":2123},[77,150311,150312],{"class":87}," data:\n",[77,150314,150315,150318,150320],{"class":79,"line":4099},[77,150316,150317],{"class":87},"    dates.append(item[",[77,150319,150095],{"class":271},[77,150321,7132],{"class":87},[77,150323,150324,150327,150329],{"class":79,"line":4104},[77,150325,150326],{"class":87},"    online_sales.append(item[",[77,150328,150104],{"class":271},[77,150330,7132],{"class":87},[77,150332,150333,150336,150338],{"class":79,"line":4118},[77,150334,150335],{"class":87},"    offline_sales.append(item[",[77,150337,150113],{"class":271},[77,150339,7132],{"class":87},[77,150341,150342],{"class":79,"line":4123},[77,150343,4875],{"emptyLinePlaceholder":2549},[77,150345,150346,150348,150350],{"class":79,"line":4129},[77,150347,149350],{"class":87},[77,150349,268],{"class":2123},[77,150351,149355],{"class":87},[77,150353,150354],{"class":79,"line":4150},[77,150355,149939],{"class":87},[77,150357,150358,150360,150362,150365,150367,150369,150371],{"class":79,"line":4155},[77,150359,149390],{"class":87},[77,150361,149946],{"class":271},[77,150363,150364],{"class":87},", online_sales, ",[77,150366,149843],{"class":7691},[77,150368,268],{"class":2123},[77,150370,33943],{"class":94},[77,150372,2628],{"class":87},[77,150374,150375,150377,150379,150382,150384,150386,150388],{"class":79,"line":4169},[77,150376,149390],{"class":87},[77,150378,149984],{"class":271},[77,150380,150381],{"class":87},", offline_sales, ",[77,150383,149843],{"class":7691},[77,150385,268],{"class":2123},[77,150387,33943],{"class":94},[77,150389,2628],{"class":87},[77,150391,150392],{"class":79,"line":4174},[77,150393,149566],{"class":87},[77,150395,150396,150398,150400,150402,150404,150406,150409],{"class":79,"line":4203},[77,150397,149571],{"class":7691},[77,150399,268],{"class":2123},[77,150401,149576],{"class":87},[77,150403,53871],{"class":7691},[77,150405,268],{"class":2123},[77,150407,150408],{"class":271},"\"销售趋势\"",[77,150410,40513],{"class":87},[77,150412,150413,150415,150417,150419,150421,150423,150425],{"class":79,"line":4208},[77,150414,149627],{"class":7691},[77,150416,268],{"class":2123},[77,150418,149632],{"class":87},[77,150420,149635],{"class":7691},[77,150422,268],{"class":2123},[77,150424,149640],{"class":271},[77,150426,40513],{"class":87},[77,150428,150429],{"class":79,"line":4225},[77,150430,2628],{"class":87},[77,150432,150433,150435,150437],{"class":79,"line":4230},[77,150434,149422],{"class":87},[77,150436,150062],{"class":271},[77,150438,2628],{"class":87},[14,150440,150442],{"id":150441},"_109-数据清洗","10.9 数据清洗",[24,150444,150445],{},"真实数据经常不整齐，需要清洗。",[24,150447,150448],{},"常见问题：",[139,150450,150451,150454,150457,150460],{},[54,150452,150453],{},"数字是字符串。",[54,150455,150456],{},"字段缺失。",[54,150458,150459],{},"空值。",[54,150461,150462],{},"日期格式不统一。",[24,150464,17606],{},[67,150466,150468],{"className":32846,"code":150467,"language":32848,"meta":72,"style":72},"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",[74,150469,150470,150479,150502,150522,150543,150547,150551,150559,150568,150572,150583,150597,150606,150611,150615,150623,150633,150637,150644],{"__ignoreMap":72},[77,150471,150472,150475,150477],{"class":79,"line":80},[77,150473,150474],{"class":87},"raw_data ",[77,150476,268],{"class":2123},[77,150478,57895],{"class":87},[77,150480,150481,150484,150486,150488,150490,150492,150495,150497,150500],{"class":79,"line":91},[77,150482,150483],{"class":87},"    {",[77,150485,150095],{"class":271},[77,150487,98],{"class":87},[77,150489,149363],{"class":271},[77,150491,680],{"class":87},[77,150493,150494],{"class":271},"\"sales\"",[77,150496,98],{"class":87},[77,150498,150499],{"class":271},"\"100\"",[77,150501,7405],{"class":87},[77,150503,150504,150506,150508,150510,150512,150514,150516,150518,150520],{"class":79,"line":107},[77,150505,150483],{"class":87},[77,150507,150095],{"class":271},[77,150509,98],{"class":87},[77,150511,149368],{"class":271},[77,150513,680],{"class":87},[77,150515,150494],{"class":271},[77,150517,98],{"class":87},[77,150519,444],{"class":271},[77,150521,7405],{"class":87},[77,150523,150524,150526,150528,150530,150532,150534,150536,150538,150541],{"class":79,"line":191},[77,150525,150483],{"class":87},[77,150527,150095],{"class":271},[77,150529,98],{"class":87},[77,150531,149373],{"class":271},[77,150533,680],{"class":87},[77,150535,150494],{"class":271},[77,150537,98],{"class":87},[77,150539,150540],{"class":271},"\"120\"",[77,150542,7405],{"class":87},[77,150544,150545],{"class":79,"line":1543},[77,150546,35713],{"class":87},[77,150548,150549],{"class":79,"line":1549},[77,150550,4875],{"emptyLinePlaceholder":2549},[77,150552,150553,150555,150557],{"class":79,"line":1566},[77,150554,149898],{"class":87},[77,150556,268],{"class":2123},[77,150558,54296],{"class":87},[77,150560,150561,150564,150566],{"class":79,"line":1572},[77,150562,150563],{"class":87},"sales ",[77,150565,268],{"class":2123},[77,150567,54296],{"class":87},[77,150569,150570],{"class":79,"line":1589},[77,150571,4875],{"emptyLinePlaceholder":2549},[77,150573,150574,150576,150578,150580],{"class":79,"line":1595},[77,150575,5500],{"class":2123},[77,150577,150307],{"class":87},[77,150579,28511],{"class":2123},[77,150581,150582],{"class":87}," raw_data:\n",[77,150584,150585,150588,150590,150593,150595],{"class":79,"line":4088},[77,150586,150587],{"class":87},"    value ",[77,150589,268],{"class":2123},[77,150591,150592],{"class":87}," item.get(",[77,150594,150494],{"class":271},[77,150596,2628],{"class":87},[77,150598,150599,150601,150603],{"class":79,"line":4093},[77,150600,5576],{"class":2123},[77,150602,41396],{"class":2123},[77,150604,150605],{"class":87}," value:\n",[77,150607,150608],{"class":79,"line":4099},[77,150609,150610],{"class":2123},"        continue\n",[77,150612,150613],{"class":79,"line":4104},[77,150614,4875],{"emptyLinePlaceholder":2549},[77,150616,150617,150619,150621],{"class":79,"line":4118},[77,150618,150317],{"class":87},[77,150620,150095],{"class":271},[77,150622,7132],{"class":87},[77,150624,150625,150628,150630],{"class":79,"line":4123},[77,150626,150627],{"class":87},"    sales.append(",[77,150629,2625],{"class":94},[77,150631,150632],{"class":87},"(value))\n",[77,150634,150635],{"class":79,"line":4129},[77,150636,4875],{"emptyLinePlaceholder":2549},[77,150638,150639,150641],{"class":79,"line":4150},[77,150640,32883],{"class":94},[77,150642,150643],{"class":87},"(dates)\n",[77,150645,150646,150648],{"class":79,"line":4155},[77,150647,32883],{"class":94},[77,150649,150650],{"class":87},"(sales)\n",[14,150652,150654],{"id":150653},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[67,150656,150658],{"className":32846,"code":150657,"language":32848,"meta":72,"style":72},"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",[74,150659,150660,150674,150684,150688,150696,150717,150739,150761,150783,150805,150809,150813,150835,150856,150860,150868,150872,150876,150886,150895,150905,150921,150925,150929,150946,150962,150978,150994,151004,151008],{"__ignoreMap":72},[77,150661,150662,150664,150666,150668,150670,150672],{"class":79,"line":80},[77,150663,33205],{"class":2123},[77,150665,149477],{"class":87},[77,150667,32860],{"class":2123},[77,150669,149482],{"class":87},[77,150671,33850],{"class":2123},[77,150673,149487],{"class":87},[77,150675,150676,150678,150680,150682],{"class":79,"line":91},[77,150677,33205],{"class":2123},[77,150679,149336],{"class":87},[77,150681,32860],{"class":2123},[77,150683,149341],{"class":87},[77,150685,150686],{"class":79,"line":107},[77,150687,4875],{"emptyLinePlaceholder":2549},[77,150689,150690,150692,150694],{"class":79,"line":191},[77,150691,150563],{"class":87},[77,150693,268],{"class":2123},[77,150695,57895],{"class":87},[77,150697,150698,150700,150702,150704,150707,150709,150711,150713,150715],{"class":79,"line":1543},[77,150699,150483],{"class":87},[77,150701,150095],{"class":271},[77,150703,98],{"class":87},[77,150705,150706],{"class":271},"\"2024-10-01\"",[77,150708,680],{"class":87},[77,150710,86521],{"class":271},[77,150712,98],{"class":87},[77,150714,94459],{"class":94},[77,150716,7405],{"class":87},[77,150718,150719,150721,150723,150725,150728,150730,150732,150734,150737],{"class":79,"line":1549},[77,150720,150483],{"class":87},[77,150722,150095],{"class":271},[77,150724,98],{"class":87},[77,150726,150727],{"class":271},"\"2024-10-02\"",[77,150729,680],{"class":87},[77,150731,86521],{"class":271},[77,150733,98],{"class":87},[77,150735,150736],{"class":94},"1800",[77,150738,7405],{"class":87},[77,150740,150741,150743,150745,150747,150750,150752,150754,150756,150759],{"class":79,"line":1566},[77,150742,150483],{"class":87},[77,150744,150095],{"class":271},[77,150746,98],{"class":87},[77,150748,150749],{"class":271},"\"2024-10-03\"",[77,150751,680],{"class":87},[77,150753,86521],{"class":271},[77,150755,98],{"class":87},[77,150757,150758],{"class":94},"1500",[77,150760,7405],{"class":87},[77,150762,150763,150765,150767,150769,150772,150774,150776,150778,150781],{"class":79,"line":1572},[77,150764,150483],{"class":87},[77,150766,150095],{"class":271},[77,150768,98],{"class":87},[77,150770,150771],{"class":271},"\"2024-10-04\"",[77,150773,680],{"class":87},[77,150775,86521],{"class":271},[77,150777,98],{"class":87},[77,150779,150780],{"class":94},"2100",[77,150782,7405],{"class":87},[77,150784,150785,150787,150789,150791,150794,150796,150798,150800,150803],{"class":79,"line":1589},[77,150786,150483],{"class":87},[77,150788,150095],{"class":271},[77,150790,98],{"class":87},[77,150792,150793],{"class":271},"\"2024-10-05\"",[77,150795,680],{"class":87},[77,150797,86521],{"class":271},[77,150799,98],{"class":87},[77,150801,150802],{"class":94},"2600",[77,150804,7405],{"class":87},[77,150806,150807],{"class":79,"line":1595},[77,150808,35713],{"class":87},[77,150810,150811],{"class":79,"line":4088},[77,150812,4875],{"emptyLinePlaceholder":2549},[77,150814,150815,150817,150819,150822,150824,150826,150828,150830,150832],{"class":79,"line":4093},[77,150816,149898],{"class":87},[77,150818,268],{"class":2123},[77,150820,150821],{"class":87}," [item[",[77,150823,150095],{"class":271},[77,150825,6918],{"class":87},[77,150827,5500],{"class":2123},[77,150829,150307],{"class":87},[77,150831,28511],{"class":2123},[77,150833,150834],{"class":87}," sales]\n",[77,150836,150837,150840,150842,150844,150846,150848,150850,150852,150854],{"class":79,"line":4099},[77,150838,150839],{"class":87},"amounts ",[77,150841,268],{"class":2123},[77,150843,150821],{"class":87},[77,150845,86521],{"class":271},[77,150847,6918],{"class":87},[77,150849,5500],{"class":2123},[77,150851,150307],{"class":87},[77,150853,28511],{"class":2123},[77,150855,150834],{"class":87},[77,150857,150858],{"class":79,"line":4104},[77,150859,4875],{"emptyLinePlaceholder":2549},[77,150861,150862,150864,150866],{"class":79,"line":4118},[77,150863,149350],{"class":87},[77,150865,268],{"class":2123},[77,150867,149355],{"class":87},[77,150869,150870],{"class":79,"line":4123},[77,150871,149939],{"class":87},[77,150873,150874],{"class":79,"line":4129},[77,150875,149747],{"class":87},[77,150877,150878,150880,150882,150884],{"class":79,"line":4150},[77,150879,149752],{"class":7691},[77,150881,268],{"class":2123},[77,150883,149393],{"class":271},[77,150885,33933],{"class":87},[77,150887,150888,150890,150892],{"class":79,"line":4155},[77,150889,149763],{"class":7691},[77,150891,268],{"class":2123},[77,150893,150894],{"class":87},"amounts,\n",[77,150896,150897,150899,150901,150903],{"class":79,"line":4169},[77,150898,149792],{"class":7691},[77,150900,268],{"class":2123},[77,150902,33943],{"class":94},[77,150904,33933],{"class":87},[77,150906,150907,150909,150911,150913,150915,150917,150919],{"class":79,"line":4174},[77,150908,149803],{"class":7691},[77,150910,268],{"class":2123},[77,150912,149808],{"class":87},[77,150914,149811],{"class":7691},[77,150916,268],{"class":2123},[77,150918,33943],{"class":94},[77,150920,40513],{"class":87},[77,150922,150923],{"class":79,"line":4203},[77,150924,2628],{"class":87},[77,150926,150927],{"class":79,"line":4208},[77,150928,149566],{"class":87},[77,150930,150931,150933,150935,150937,150939,150941,150944],{"class":79,"line":4225},[77,150932,149571],{"class":7691},[77,150934,268],{"class":2123},[77,150936,149576],{"class":87},[77,150938,53871],{"class":7691},[77,150940,268],{"class":2123},[77,150942,150943],{"class":271},"\"每日销售额\"",[77,150945,40513],{"class":87},[77,150947,150948,150950,150952,150954,150956,150958,150960],{"class":79,"line":4230},[77,150949,149590],{"class":7691},[77,150951,268],{"class":2123},[77,150953,149595],{"class":87},[77,150955,82247],{"class":7691},[77,150957,268],{"class":2123},[77,150959,149602],{"class":271},[77,150961,40513],{"class":87},[77,150963,150964,150966,150968,150970,150972,150974,150976],{"class":79,"line":4235},[77,150965,149609],{"class":7691},[77,150967,268],{"class":2123},[77,150969,149595],{"class":87},[77,150971,82247],{"class":7691},[77,150973,268],{"class":2123},[77,150975,149620],{"class":271},[77,150977,40513],{"class":87},[77,150979,150980,150982,150984,150986,150988,150990,150992],{"class":79,"line":4240},[77,150981,149627],{"class":7691},[77,150983,268],{"class":2123},[77,150985,149632],{"class":87},[77,150987,149635],{"class":7691},[77,150989,268],{"class":2123},[77,150991,149640],{"class":271},[77,150993,40513],{"class":87},[77,150995,150996,150999,151001],{"class":79,"line":4254},[77,150997,150998],{"class":7691},"    datazoom_opts",[77,151000,268],{"class":2123},[77,151002,151003],{"class":87},"[opts.DataZoomOpts()],\n",[77,151005,151006],{"class":79,"line":4259},[77,151007,2628],{"class":87},[77,151009,151010,151012,151015],{"class":79,"line":5052},[77,151011,149422],{"class":87},[77,151013,151014],{"class":271},"\"daily_sales.html\"",[77,151016,2628],{"class":87},[24,151018,151019,151022],{},[74,151020,151021],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151024,151026],{"id":151025},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[24,151028,151029],{},"如果数据结构如下：",[67,151031,151033],{"className":32846,"code":151032,"language":32848,"meta":72,"style":72},"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",[74,151034,151035,151043,151051,151073,151094,151099,151106,151126,151146,151150],{"__ignoreMap":72},[77,151036,151037,151039,151041],{"class":79,"line":80},[77,151038,104093],{"class":87},[77,151040,268],{"class":2123},[77,151042,88],{"class":87},[77,151044,151045,151048],{"class":79,"line":91},[77,151046,151047],{"class":271},"    \"北京\"",[77,151049,151050],{"class":87},": [\n",[77,151052,151053,151055,151057,151059,151062,151064,151067,151069,151071],{"class":79,"line":107},[77,151054,7392],{"class":87},[77,151056,150095],{"class":271},[77,151058,98],{"class":87},[77,151060,151061],{"class":271},"\"2024-01-01\"",[77,151063,680],{"class":87},[77,151065,151066],{"class":271},"\"confirm\"",[77,151068,98],{"class":87},[77,151070,3059],{"class":94},[77,151072,7405],{"class":87},[77,151074,151075,151077,151079,151081,151084,151086,151088,151090,151092],{"class":79,"line":191},[77,151076,7392],{"class":87},[77,151078,150095],{"class":271},[77,151080,98],{"class":87},[77,151082,151083],{"class":271},"\"2024-01-02\"",[77,151085,680],{"class":87},[77,151087,151066],{"class":271},[77,151089,98],{"class":87},[77,151091,3111],{"class":94},[77,151093,7405],{"class":87},[77,151095,151096],{"class":79,"line":1543},[77,151097,151098],{"class":87},"    ],\n",[77,151100,151101,151104],{"class":79,"line":1549},[77,151102,151103],{"class":271},"    \"上海\"",[77,151105,151050],{"class":87},[77,151107,151108,151110,151112,151114,151116,151118,151120,151122,151124],{"class":79,"line":1566},[77,151109,7392],{"class":87},[77,151111,150095],{"class":271},[77,151113,98],{"class":87},[77,151115,151061],{"class":271},[77,151117,680],{"class":87},[77,151119,151066],{"class":271},[77,151121,98],{"class":87},[77,151123,3009],{"class":94},[77,151125,7405],{"class":87},[77,151127,151128,151130,151132,151134,151136,151138,151140,151142,151144],{"class":79,"line":1572},[77,151129,7392],{"class":87},[77,151131,150095],{"class":271},[77,151133,98],{"class":87},[77,151135,151083],{"class":271},[77,151137,680],{"class":87},[77,151139,151066],{"class":271},[77,151141,98],{"class":87},[77,151143,3136],{"class":94},[77,151145,7405],{"class":87},[77,151147,151148],{"class":79,"line":1589},[77,151149,151098],{"class":87},[77,151151,151152],{"class":79,"line":1595},[77,151153,110],{"class":87},[24,151155,151156],{},"绘制多地区趋势：",[67,151158,151160],{"className":32846,"code":151159,"language":32848,"meta":72,"style":72},"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",[74,151161,151162,151176,151186,151190,151215,151219,151227,151231,151235,151247,151269,151282,151286,151290,151307,151323,151327],{"__ignoreMap":72},[77,151163,151164,151166,151168,151170,151172,151174],{"class":79,"line":80},[77,151165,33205],{"class":2123},[77,151167,149477],{"class":87},[77,151169,32860],{"class":2123},[77,151171,149482],{"class":87},[77,151173,33850],{"class":2123},[77,151175,149487],{"class":87},[77,151177,151178,151180,151182,151184],{"class":79,"line":91},[77,151179,33205],{"class":2123},[77,151181,149336],{"class":87},[77,151183,32860],{"class":2123},[77,151185,149341],{"class":87},[77,151187,151188],{"class":79,"line":107},[77,151189,4875],{"emptyLinePlaceholder":2549},[77,151191,151192,151194,151196,151198,151200,151202,151204,151206,151208,151211,151213],{"class":79,"line":191},[77,151193,149898],{"class":87},[77,151195,268],{"class":2123},[77,151197,150821],{"class":87},[77,151199,150095],{"class":271},[77,151201,6918],{"class":87},[77,151203,5500],{"class":2123},[77,151205,150307],{"class":87},[77,151207,28511],{"class":2123},[77,151209,151210],{"class":87}," data[",[77,151212,71712],{"class":271},[77,151214,79965],{"class":87},[77,151216,151217],{"class":79,"line":1543},[77,151218,4875],{"emptyLinePlaceholder":2549},[77,151220,151221,151223,151225],{"class":79,"line":1549},[77,151222,149350],{"class":87},[77,151224,268],{"class":2123},[77,151226,149355],{"class":87},[77,151228,151229],{"class":79,"line":1566},[77,151230,149939],{"class":87},[77,151232,151233],{"class":79,"line":1572},[77,151234,4875],{"emptyLinePlaceholder":2549},[77,151236,151237,151239,151242,151244],{"class":79,"line":1589},[77,151238,5500],{"class":2123},[77,151240,151241],{"class":87}," city, records ",[77,151243,28511],{"class":2123},[77,151245,151246],{"class":87}," data.items():\n",[77,151248,151249,151252,151254,151256,151258,151260,151262,151264,151266],{"class":79,"line":1595},[77,151250,151251],{"class":87},"    values ",[77,151253,268],{"class":2123},[77,151255,150821],{"class":87},[77,151257,151066],{"class":271},[77,151259,6918],{"class":87},[77,151261,5500],{"class":2123},[77,151263,150307],{"class":87},[77,151265,28511],{"class":2123},[77,151267,151268],{"class":87}," records]\n",[77,151270,151271,151274,151276,151278,151280],{"class":79,"line":4088},[77,151272,151273],{"class":87},"    line.add_yaxis(city, values, ",[77,151275,149843],{"class":7691},[77,151277,268],{"class":2123},[77,151279,33943],{"class":94},[77,151281,2628],{"class":87},[77,151283,151284],{"class":79,"line":4093},[77,151285,4875],{"emptyLinePlaceholder":2549},[77,151287,151288],{"class":79,"line":4099},[77,151289,149566],{"class":87},[77,151291,151292,151294,151296,151298,151300,151302,151305],{"class":79,"line":4104},[77,151293,149571],{"class":7691},[77,151295,268],{"class":2123},[77,151297,149576],{"class":87},[77,151299,53871],{"class":7691},[77,151301,268],{"class":2123},[77,151303,151304],{"class":271},"\"多地区趋势图\"",[77,151306,40513],{"class":87},[77,151308,151309,151311,151313,151315,151317,151319,151321],{"class":79,"line":4118},[77,151310,149627],{"class":7691},[77,151312,268],{"class":2123},[77,151314,149632],{"class":87},[77,151316,149635],{"class":7691},[77,151318,268],{"class":2123},[77,151320,149640],{"class":271},[77,151322,40513],{"class":87},[77,151324,151325],{"class":79,"line":4123},[77,151326,2628],{"class":87},[77,151328,151329,151331,151334],{"class":79,"line":4129},[77,151330,149422],{"class":87},[77,151332,151333],{"class":271},"\"trend.html\"",[77,151335,2628],{"class":87},[24,151337,151338],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151340,151342],{"id":151341},"_1012-易错点","10.12 易错点",[139,151344,151345,151351,151357,151367,151373],{},[54,151346,151347,151350],{},[74,151348,151349],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[54,151352,151353,151356],{},[74,151354,151355],{},"render()"," 生成的是 HTML，不是图片。",[54,151358,151359,151360,151363,151364,30853],{},"JSON 字符串用 ",[74,151361,151362],{},"json.loads()","，JSON 文件用 ",[74,151365,151366],{},"json.load()",[54,151368,151369,151370,30853],{},"中文 JSON 保存时加 ",[74,151371,151372],{},"ensure_ascii=False",[54,151374,151375],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151377,151379],{"id":151378},"_1013-本章练习","10.13 本章练习",[139,151381,151382,151385,151388,151391,151394],{},[54,151383,151384],{},"安装 pyecharts 并生成第一个折线图。",[54,151386,151387],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[54,151389,151390],{},"绘制两条折线，对比线上和线下销售额。",[54,151392,151393],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[54,151395,151396],{},"对含有空值的销售数据进行清洗后再绘图。",[2520,151398,151399],{},"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":72,"searchDepth":91,"depth":91,"links":151401},[151402,151403,151404,151405,151406,151407,151408,151409,151410,151411,151412,151413,151414],{"id":149018,"depth":91,"text":149019},{"id":149093,"depth":91,"text":149094},{"id":149272,"depth":91,"text":149273},{"id":149323,"depth":91,"text":149324},{"id":149457,"depth":91,"text":149458},{"id":149733,"depth":91,"text":149734},{"id":149859,"depth":91,"text":149860},{"id":150070,"depth":91,"text":150071},{"id":150441,"depth":91,"text":150442},{"id":150653,"depth":91,"text":150654},{"id":151025,"depth":91,"text":151026},{"id":151341,"depth":91,"text":151342},{"id":151378,"depth":91,"text":151379},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149010,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151421,"title":151422,"body":151423,"description":2546,"extension":2547,"meta":153783,"navigation":2549,"path":153784,"seo":153785,"stem":153786,"__hash__":153787},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151424,"toc":153760},[151425,151428,151432,151435,151438,151514,151517,151608,151611,151615,151618,151662,151675,151679,151682,151749,151752,151756,151759,151843,151851,151855,151860,152001,152004,152015,152021,152027,152141,152145,152148,152151,152404,152407,152411,152414,152518,152521,152525,152676,152680,152687,152800,152804,152807,152913,152916,152920,152923,152954,152957,153062,153065,153069,153073,153083,153151,153155,153162,153226,153229,153233,153239,153335,153344,153348,153672,153681,153685,153713,153717,153757],[10,151426,151422],{"id":151427},"_11-面向对象基础",[14,151429,151431],{"id":151430},"_111-什么是面向对象","11.1 什么是面向对象",[24,151433,151434],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[24,151436,151437],{},"面向过程：",[67,151439,151441],{"className":32846,"code":151440,"language":32848,"meta":72,"style":72},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[74,151442,151443,151452,151460,151464,151474,151505,151509],{"__ignoreMap":72},[77,151444,151445,151447,151449],{"class":79,"line":80},[77,151446,148634],{"class":87},[77,151448,268],{"class":2123},[77,151450,151451],{"class":271}," \"小明\"\n",[77,151453,151454,151456,151458],{"class":79,"line":91},[77,151455,148644],{"class":87},[77,151457,268],{"class":2123},[77,151459,148649],{"class":94},[77,151461,151462],{"class":79,"line":107},[77,151463,4875],{"emptyLinePlaceholder":2549},[77,151465,151466,151468,151471],{"class":79,"line":191},[77,151467,34414],{"class":2123},[77,151469,151470],{"class":83}," introduce",[77,151472,151473],{"class":87},"(name, age):\n",[77,151475,151476,151478,151480,151482,151485,151487,151489,151491,151494,151496,151498,151500,151503],{"class":79,"line":1543},[77,151477,33766],{"class":94},[77,151479,2622],{"class":87},[77,151481,2672],{"class":2123},[77,151483,151484],{"class":271},"\"我叫",[77,151486,3509],{"class":94},[77,151488,82247],{"class":87},[77,151490,3558],{"class":94},[77,151492,151493],{"class":271},"，今年",[77,151495,3509],{"class":94},[77,151497,72664],{"class":87},[77,151499,3558],{"class":94},[77,151501,151502],{"class":271},"岁\"",[77,151504,2628],{"class":87},[77,151506,151507],{"class":79,"line":1549},[77,151508,4875],{"emptyLinePlaceholder":2549},[77,151510,151511],{"class":79,"line":1566},[77,151512,151513],{"class":87},"introduce(name, age)\n",[24,151515,151516],{},"面向对象：",[67,151518,151520],{"className":32846,"code":151519,"language":32848,"meta":72,"style":72},"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",[74,151521,151522,151530,151538,151567,151571,151575,151585,151594,151603],{"__ignoreMap":72},[77,151523,151524,151526,151528],{"class":79,"line":80},[77,151525,17166],{"class":2123},[77,151527,10372],{"class":83},[77,151529,6214],{"class":87},[77,151531,151532,151534,151536],{"class":79,"line":91},[77,151533,33269],{"class":2123},[77,151535,151470],{"class":83},[77,151537,33275],{"class":87},[77,151539,151540,151542,151544,151546,151548,151551,151553,151555,151557,151559,151561,151563,151565],{"class":79,"line":107},[77,151541,34918],{"class":94},[77,151543,2622],{"class":87},[77,151545,2672],{"class":2123},[77,151547,151484],{"class":271},[77,151549,151550],{"class":94},"{self",[77,151552,82738],{"class":87},[77,151554,3558],{"class":94},[77,151556,151493],{"class":271},[77,151558,151550],{"class":94},[77,151560,82750],{"class":87},[77,151562,3558],{"class":94},[77,151564,151502],{"class":271},[77,151566,2628],{"class":87},[77,151568,151569],{"class":79,"line":191},[77,151570,4875],{"emptyLinePlaceholder":2549},[77,151572,151573],{"class":79,"line":1543},[77,151574,4875],{"emptyLinePlaceholder":2549},[77,151576,151577,151580,151582],{"class":79,"line":1549},[77,151578,151579],{"class":87},"student ",[77,151581,268],{"class":2123},[77,151583,151584],{"class":87}," Student()\n",[77,151586,151587,151590,151592],{"class":79,"line":1566},[77,151588,151589],{"class":87},"student.name ",[77,151591,268],{"class":2123},[77,151593,151451],{"class":271},[77,151595,151596,151599,151601],{"class":79,"line":1572},[77,151597,151598],{"class":87},"student.age ",[77,151600,268],{"class":2123},[77,151602,148649],{"class":94},[77,151604,151605],{"class":79,"line":1589},[77,151606,151607],{"class":87},"student.introduce()\n",[24,151609,151610],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151612,151614],{"id":151613},"_112-类和对象","11.2 类和对象",[24,151616,151617],{},"类是模板，对象是根据模板创建出来的具体实例。",[67,151619,151621],{"className":32846,"code":151620,"language":32848,"meta":72,"style":72},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[74,151622,151623,151631,151636,151640,151644,151653],{"__ignoreMap":72},[77,151624,151625,151627,151629],{"class":79,"line":80},[77,151626,17166],{"class":2123},[77,151628,10372],{"class":83},[77,151630,6214],{"class":87},[77,151632,151633],{"class":79,"line":91},[77,151634,151635],{"class":2123},"    pass\n",[77,151637,151638],{"class":79,"line":107},[77,151639,4875],{"emptyLinePlaceholder":2549},[77,151641,151642],{"class":79,"line":191},[77,151643,4875],{"emptyLinePlaceholder":2549},[77,151645,151646,151649,151651],{"class":79,"line":1543},[77,151647,151648],{"class":87},"student1 ",[77,151650,268],{"class":2123},[77,151652,151584],{"class":87},[77,151654,151655,151658,151660],{"class":79,"line":1549},[77,151656,151657],{"class":87},"student2 ",[77,151659,268],{"class":2123},[77,151661,151584],{"class":87},[24,151663,151664,151667,151668,513,151671,151674],{},[74,151665,151666],{},"Student"," 是类，",[74,151669,151670],{},"student1",[74,151672,151673],{},"student2"," 是对象。",[14,151676,151678],{"id":151677},"_113-属性","11.3 属性",[24,151680,151681],{},"属性是对象保存的数据。",[67,151683,151685],{"className":32846,"code":151684,"language":32848,"meta":72,"style":72},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[74,151686,151687,151695,151699,151703,151707,151715,151723,151731,151735,151742],{"__ignoreMap":72},[77,151688,151689,151691,151693],{"class":79,"line":80},[77,151690,17166],{"class":2123},[77,151692,10372],{"class":83},[77,151694,6214],{"class":87},[77,151696,151697],{"class":79,"line":91},[77,151698,151635],{"class":2123},[77,151700,151701],{"class":79,"line":107},[77,151702,4875],{"emptyLinePlaceholder":2549},[77,151704,151705],{"class":79,"line":191},[77,151706,4875],{"emptyLinePlaceholder":2549},[77,151708,151709,151711,151713],{"class":79,"line":1543},[77,151710,151579],{"class":87},[77,151712,268],{"class":2123},[77,151714,151584],{"class":87},[77,151716,151717,151719,151721],{"class":79,"line":1549},[77,151718,151589],{"class":87},[77,151720,268],{"class":2123},[77,151722,151451],{"class":271},[77,151724,151725,151727,151729],{"class":79,"line":1566},[77,151726,151598],{"class":87},[77,151728,268],{"class":2123},[77,151730,148649],{"class":94},[77,151732,151733],{"class":79,"line":1572},[77,151734,4875],{"emptyLinePlaceholder":2549},[77,151736,151737,151739],{"class":79,"line":1589},[77,151738,32883],{"class":94},[77,151740,151741],{"class":87},"(student.name)\n",[77,151743,151744,151746],{"class":79,"line":1595},[77,151745,32883],{"class":94},[77,151747,151748],{"class":87},"(student.age)\n",[24,151750,151751],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151753,151755],{"id":151754},"_114-方法","11.4 方法",[24,151757,151758],{},"类中的函数叫方法。",[67,151760,151761],{"className":32846,"code":151519,"language":32848,"meta":72,"style":72},[74,151762,151763,151771,151779,151807,151811,151815,151823,151831,151839],{"__ignoreMap":72},[77,151764,151765,151767,151769],{"class":79,"line":80},[77,151766,17166],{"class":2123},[77,151768,10372],{"class":83},[77,151770,6214],{"class":87},[77,151772,151773,151775,151777],{"class":79,"line":91},[77,151774,33269],{"class":2123},[77,151776,151470],{"class":83},[77,151778,33275],{"class":87},[77,151780,151781,151783,151785,151787,151789,151791,151793,151795,151797,151799,151801,151803,151805],{"class":79,"line":107},[77,151782,34918],{"class":94},[77,151784,2622],{"class":87},[77,151786,2672],{"class":2123},[77,151788,151484],{"class":271},[77,151790,151550],{"class":94},[77,151792,82738],{"class":87},[77,151794,3558],{"class":94},[77,151796,151493],{"class":271},[77,151798,151550],{"class":94},[77,151800,82750],{"class":87},[77,151802,3558],{"class":94},[77,151804,151502],{"class":271},[77,151806,2628],{"class":87},[77,151808,151809],{"class":79,"line":191},[77,151810,4875],{"emptyLinePlaceholder":2549},[77,151812,151813],{"class":79,"line":1543},[77,151814,4875],{"emptyLinePlaceholder":2549},[77,151816,151817,151819,151821],{"class":79,"line":1549},[77,151818,151579],{"class":87},[77,151820,268],{"class":2123},[77,151822,151584],{"class":87},[77,151824,151825,151827,151829],{"class":79,"line":1566},[77,151826,151589],{"class":87},[77,151828,268],{"class":2123},[77,151830,151451],{"class":271},[77,151832,151833,151835,151837],{"class":79,"line":1572},[77,151834,151598],{"class":87},[77,151836,268],{"class":2123},[77,151838,148649],{"class":94},[77,151840,151841],{"class":79,"line":1589},[77,151842,151607],{"class":87},[24,151844,151845,151847,151848,151850],{},[74,151846,33291],{}," 表示当前对象。调用方法时不需要手动传入 ",[74,151849,33291],{},"，Python 会自动传。",[14,151852,151854],{"id":151853},"_115-构造方法__init__","11.5 构造方法__init__",[24,151856,151857,151859],{},[74,151858,33297],{}," 在对象创建时自动执行，用于初始化属性。",[67,151861,151863],{"className":32846,"code":151862,"language":32848,"meta":72,"style":72},"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",[74,151864,151865,151873,151882,151894,151906,151917,151921,151929,151967,151971,151975,151997],{"__ignoreMap":72},[77,151866,151867,151869,151871],{"class":79,"line":80},[77,151868,17166],{"class":2123},[77,151870,10372],{"class":83},[77,151872,6214],{"class":87},[77,151874,151875,151877,151879],{"class":79,"line":91},[77,151876,33269],{"class":2123},[77,151878,33272],{"class":94},[77,151880,151881],{"class":87},"(self, name, age, score):\n",[77,151883,151884,151886,151889,151891],{"class":79,"line":107},[77,151885,33313],{"class":94},[77,151887,151888],{"class":87},".name ",[77,151890,268],{"class":2123},[77,151892,151893],{"class":87}," name\n",[77,151895,151896,151898,151901,151903],{"class":79,"line":191},[77,151897,33313],{"class":94},[77,151899,151900],{"class":87},".age ",[77,151902,268],{"class":2123},[77,151904,151905],{"class":87}," age\n",[77,151907,151908,151910,151913,151915],{"class":79,"line":1543},[77,151909,33313],{"class":94},[77,151911,151912],{"class":87},".score ",[77,151914,268],{"class":2123},[77,151916,4055],{"class":87},[77,151918,151919],{"class":79,"line":1549},[77,151920,4875],{"emptyLinePlaceholder":2549},[77,151922,151923,151925,151927],{"class":79,"line":1566},[77,151924,33269],{"class":2123},[77,151926,151470],{"class":83},[77,151928,33275],{"class":87},[77,151930,151931,151933,151935,151937,151939,151941,151943,151945,151947,151949,151951,151953,151956,151958,151961,151963,151965],{"class":79,"line":1572},[77,151932,34918],{"class":94},[77,151934,2622],{"class":87},[77,151936,2672],{"class":2123},[77,151938,151484],{"class":271},[77,151940,151550],{"class":94},[77,151942,82738],{"class":87},[77,151944,3558],{"class":94},[77,151946,151493],{"class":271},[77,151948,151550],{"class":94},[77,151950,82750],{"class":87},[77,151952,3558],{"class":94},[77,151954,151955],{"class":271},"岁，成绩",[77,151957,151550],{"class":94},[77,151959,151960],{"class":87},".score",[77,151962,3558],{"class":94},[77,151964,2865],{"class":271},[77,151966,2628],{"class":87},[77,151968,151969],{"class":79,"line":1589},[77,151970,4875],{"emptyLinePlaceholder":2549},[77,151972,151973],{"class":79,"line":1595},[77,151974,4875],{"emptyLinePlaceholder":2549},[77,151976,151977,151979,151981,151984,151987,151989,151991,151993,151995],{"class":79,"line":4088},[77,151978,151579],{"class":87},[77,151980,268],{"class":2123},[77,151982,151983],{"class":87}," Student(",[77,151985,151986],{"class":271},"\"小明\"",[77,151988,680],{"class":87},[77,151990,3263],{"class":94},[77,151992,680],{"class":87},[77,151994,3601],{"class":94},[77,151996,2628],{"class":87},[77,151998,151999],{"class":79,"line":4093},[77,152000,151607],{"class":87},[24,152002,152003],{},"构造方法的好处：",[139,152005,152006,152009,152012],{},[54,152007,152008],{},"创建对象时必须提供必要数据。",[54,152010,152011],{},"属性初始化集中，不容易漏。",[54,152013,152014],{},"对象状态更完整。",[14,152016,152018,152019],{"id":152017},"_116-str","11.6 ",[27,152020,3780],{},[24,152022,152023,152024,30853],{},"直接打印对象时，默认输出不直观。可以定义 ",[74,152025,152026],{},"__str__",[67,152028,152030],{"className":32846,"code":152029,"language":32848,"meta":72,"style":72},"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",[74,152031,152032,152040,152049,152059,152069,152073,152082,152110,152114,152118,152134],{"__ignoreMap":72},[77,152033,152034,152036,152038],{"class":79,"line":80},[77,152035,17166],{"class":2123},[77,152037,10372],{"class":83},[77,152039,6214],{"class":87},[77,152041,152042,152044,152046],{"class":79,"line":91},[77,152043,33269],{"class":2123},[77,152045,33272],{"class":94},[77,152047,152048],{"class":87},"(self, name, age):\n",[77,152050,152051,152053,152055,152057],{"class":79,"line":107},[77,152052,33313],{"class":94},[77,152054,151888],{"class":87},[77,152056,268],{"class":2123},[77,152058,151893],{"class":87},[77,152060,152061,152063,152065,152067],{"class":79,"line":191},[77,152062,33313],{"class":94},[77,152064,151900],{"class":87},[77,152066,268],{"class":2123},[77,152068,151905],{"class":87},[77,152070,152071],{"class":79,"line":1543},[77,152072,4875],{"emptyLinePlaceholder":2549},[77,152074,152075,152077,152080],{"class":79,"line":1549},[77,152076,33269],{"class":2123},[77,152078,152079],{"class":94}," __str__",[77,152081,33275],{"class":87},[77,152083,152084,152086,152089,152092,152094,152096,152098,152101,152103,152105,152107],{"class":79,"line":1566},[77,152085,17224],{"class":2123},[77,152087,152088],{"class":2123}," f",[77,152090,152091],{"class":271},"\"Student(name=",[77,152093,151550],{"class":94},[77,152095,82738],{"class":87},[77,152097,3558],{"class":94},[77,152099,152100],{"class":271},", age=",[77,152102,151550],{"class":94},[77,152104,82750],{"class":87},[77,152106,3558],{"class":94},[77,152108,152109],{"class":271},")\"\n",[77,152111,152112],{"class":79,"line":1572},[77,152113,4875],{"emptyLinePlaceholder":2549},[77,152115,152116],{"class":79,"line":1589},[77,152117,4875],{"emptyLinePlaceholder":2549},[77,152119,152120,152122,152124,152126,152128,152130,152132],{"class":79,"line":1595},[77,152121,151579],{"class":87},[77,152123,268],{"class":2123},[77,152125,151983],{"class":87},[77,152127,151986],{"class":271},[77,152129,680],{"class":87},[77,152131,3263],{"class":94},[77,152133,2628],{"class":87},[77,152135,152136,152138],{"class":79,"line":4088},[77,152137,32883],{"class":94},[77,152139,152140],{"class":87},"(student)\n",[14,152142,152144],{"id":152143},"_117-封装","11.7 封装",[24,152146,152147],{},"封装就是把数据和方法放到类中，并控制访问方式。",[24,152149,152150],{},"Python 中以双下划线开头的属性通常视为私有属性。",[67,152152,152154],{"className":32846,"code":152153,"language":32848,"meta":72,"style":72},"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",[74,152155,152156,152165,152174,152186,152198,152202,152211,152220,152224,152234,152247,152258,152263,152274,152278,152287,152299,152310,152314,152327,152338,152342,152353,152357,152361,152379,152388,152397],{"__ignoreMap":72},[77,152157,152158,152160,152163],{"class":79,"line":80},[77,152159,17166],{"class":2123},[77,152161,152162],{"class":83}," Account",[77,152164,6214],{"class":87},[77,152166,152167,152169,152171],{"class":79,"line":91},[77,152168,33269],{"class":2123},[77,152170,33272],{"class":94},[77,152172,152173],{"class":87},"(self, owner, balance):\n",[77,152175,152176,152178,152181,152183],{"class":79,"line":107},[77,152177,33313],{"class":94},[77,152179,152180],{"class":87},".owner ",[77,152182,268],{"class":2123},[77,152184,152185],{"class":87}," owner\n",[77,152187,152188,152190,152193,152195],{"class":79,"line":191},[77,152189,33313],{"class":94},[77,152191,152192],{"class":87},".__balance ",[77,152194,268],{"class":2123},[77,152196,152197],{"class":87}," balance\n",[77,152199,152200],{"class":79,"line":1543},[77,152201,4875],{"emptyLinePlaceholder":2549},[77,152203,152204,152206,152209],{"class":79,"line":1549},[77,152205,33269],{"class":2123},[77,152207,152208],{"class":83}," get_balance",[77,152210,33275],{"class":87},[77,152212,152213,152215,152217],{"class":79,"line":1566},[77,152214,17224],{"class":2123},[77,152216,41339],{"class":94},[77,152218,152219],{"class":87},".__balance\n",[77,152221,152222],{"class":79,"line":1572},[77,152223,4875],{"emptyLinePlaceholder":2549},[77,152225,152226,152228,152231],{"class":79,"line":1589},[77,152227,33269],{"class":2123},[77,152229,152230],{"class":83}," deposit",[77,152232,152233],{"class":87},"(self, money):\n",[77,152235,152236,152238,152241,152243,152245],{"class":79,"line":1595},[77,152237,4972],{"class":2123},[77,152239,152240],{"class":87}," money ",[77,152242,4064],{"class":2123},[77,152244,6568],{"class":94},[77,152246,6214],{"class":87},[77,152248,152249,152251,152253,152256],{"class":79,"line":4088},[77,152250,37116],{"class":94},[77,152252,2622],{"class":87},[77,152254,152255],{"class":271},"\"存款金额必须大于0\"",[77,152257,2628],{"class":87},[77,152259,152260],{"class":79,"line":4093},[77,152261,152262],{"class":2123},"            return\n",[77,152264,152265,152267,152269,152271],{"class":79,"line":4099},[77,152266,33313],{"class":94},[77,152268,152192],{"class":87},[77,152270,11950],{"class":2123},[77,152272,152273],{"class":87}," money\n",[77,152275,152276],{"class":79,"line":4104},[77,152277,4875],{"emptyLinePlaceholder":2549},[77,152279,152280,152282,152285],{"class":79,"line":4118},[77,152281,33269],{"class":2123},[77,152283,152284],{"class":83}," withdraw",[77,152286,152233],{"class":87},[77,152288,152289,152291,152293,152295,152297],{"class":79,"line":4123},[77,152290,4972],{"class":2123},[77,152292,152240],{"class":87},[77,152294,4064],{"class":2123},[77,152296,6568],{"class":94},[77,152298,6214],{"class":87},[77,152300,152301,152303,152305,152308],{"class":79,"line":4129},[77,152302,37116],{"class":94},[77,152304,2622],{"class":87},[77,152306,152307],{"class":271},"\"取款金额必须大于0\"",[77,152309,2628],{"class":87},[77,152311,152312],{"class":79,"line":4150},[77,152313,152262],{"class":2123},[77,152315,152316,152318,152320,152322,152324],{"class":79,"line":4155},[77,152317,4972],{"class":2123},[77,152319,152240],{"class":87},[77,152321,3572],{"class":2123},[77,152323,41339],{"class":94},[77,152325,152326],{"class":87},".__balance:\n",[77,152328,152329,152331,152333,152336],{"class":79,"line":4169},[77,152330,37116],{"class":94},[77,152332,2622],{"class":87},[77,152334,152335],{"class":271},"\"余额不足\"",[77,152337,2628],{"class":87},[77,152339,152340],{"class":79,"line":4174},[77,152341,152262],{"class":2123},[77,152343,152344,152346,152348,152351],{"class":79,"line":4203},[77,152345,33313],{"class":94},[77,152347,152192],{"class":87},[77,152349,152350],{"class":2123},"-=",[77,152352,152273],{"class":87},[77,152354,152355],{"class":79,"line":4208},[77,152356,4875],{"emptyLinePlaceholder":2549},[77,152358,152359],{"class":79,"line":4225},[77,152360,4875],{"emptyLinePlaceholder":2549},[77,152362,152363,152366,152368,152371,152373,152375,152377],{"class":79,"line":4230},[77,152364,152365],{"class":87},"account ",[77,152367,268],{"class":2123},[77,152369,152370],{"class":87}," Account(",[77,152372,151986],{"class":271},[77,152374,680],{"class":87},[77,152376,8885],{"class":94},[77,152378,2628],{"class":87},[77,152380,152381,152384,152386],{"class":79,"line":4235},[77,152382,152383],{"class":87},"account.deposit(",[77,152385,4198],{"class":94},[77,152387,2628],{"class":87},[77,152389,152390,152393,152395],{"class":79,"line":4240},[77,152391,152392],{"class":87},"account.withdraw(",[77,152394,2925],{"class":94},[77,152396,2628],{"class":87},[77,152398,152399,152401],{"class":79,"line":4254},[77,152400,32883],{"class":94},[77,152402,152403],{"class":87},"(account.get_balance())\n",[24,152405,152406],{},"封装的意义是避免外部随意修改内部状态。",[14,152408,152410],{"id":152409},"_118-继承","11.8 继承",[24,152412,152413],{},"继承可以让子类复用父类的属性和方法。",[67,152415,152417],{"className":32846,"code":152416,"language":32848,"meta":72,"style":72},"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",[74,152418,152419,152428,152437,152448,152452,152456,152470,152479,152490,152494,152498,152508,152513],{"__ignoreMap":72},[77,152420,152421,152423,152426],{"class":79,"line":80},[77,152422,17166],{"class":2123},[77,152424,152425],{"class":83}," Animal",[77,152427,6214],{"class":87},[77,152429,152430,152432,152435],{"class":79,"line":91},[77,152431,33269],{"class":2123},[77,152433,152434],{"class":83}," eat",[77,152436,33275],{"class":87},[77,152438,152439,152441,152443,152446],{"class":79,"line":107},[77,152440,34918],{"class":94},[77,152442,2622],{"class":87},[77,152444,152445],{"class":271},"\"吃东西\"",[77,152447,2628],{"class":87},[77,152449,152450],{"class":79,"line":191},[77,152451,4875],{"emptyLinePlaceholder":2549},[77,152453,152454],{"class":79,"line":1543},[77,152455,4875],{"emptyLinePlaceholder":2549},[77,152457,152458,152460,152463,152465,152468],{"class":79,"line":1549},[77,152459,17166],{"class":2123},[77,152461,152462],{"class":83}," Dog",[77,152464,2622],{"class":87},[77,152466,152467],{"class":83},"Animal",[77,152469,33254],{"class":87},[77,152471,152472,152474,152477],{"class":79,"line":1566},[77,152473,33269],{"class":2123},[77,152475,152476],{"class":83}," bark",[77,152478,33275],{"class":87},[77,152480,152481,152483,152485,152488],{"class":79,"line":1572},[77,152482,34918],{"class":94},[77,152484,2622],{"class":87},[77,152486,152487],{"class":271},"\"汪汪\"",[77,152489,2628],{"class":87},[77,152491,152492],{"class":79,"line":1589},[77,152493,4875],{"emptyLinePlaceholder":2549},[77,152495,152496],{"class":79,"line":1595},[77,152497,4875],{"emptyLinePlaceholder":2549},[77,152499,152500,152503,152505],{"class":79,"line":4088},[77,152501,152502],{"class":87},"dog ",[77,152504,268],{"class":2123},[77,152506,152507],{"class":87}," Dog()\n",[77,152509,152510],{"class":79,"line":4093},[77,152511,152512],{"class":87},"dog.eat()\n",[77,152514,152515],{"class":79,"line":4099},[77,152516,152517],{"class":87},"dog.bark()\n",[24,152519,152520],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152522,152524],{"id":152523},"_119-方法重写","11.9 方法重写",[67,152526,152528],{"className":32846,"code":152527,"language":32848,"meta":72,"style":72},"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",[74,152529,152530,152538,152547,152558,152562,152566,152578,152586,152596,152600,152604,152617,152625,152636,152640,152644,152652,152662,152666,152671],{"__ignoreMap":72},[77,152531,152532,152534,152536],{"class":79,"line":80},[77,152533,17166],{"class":2123},[77,152535,152425],{"class":83},[77,152537,6214],{"class":87},[77,152539,152540,152542,152545],{"class":79,"line":91},[77,152541,33269],{"class":2123},[77,152543,152544],{"class":83}," speak",[77,152546,33275],{"class":87},[77,152548,152549,152551,152553,152556],{"class":79,"line":107},[77,152550,34918],{"class":94},[77,152552,2622],{"class":87},[77,152554,152555],{"class":271},"\"动物叫\"",[77,152557,2628],{"class":87},[77,152559,152560],{"class":79,"line":191},[77,152561,4875],{"emptyLinePlaceholder":2549},[77,152563,152564],{"class":79,"line":1543},[77,152565,4875],{"emptyLinePlaceholder":2549},[77,152567,152568,152570,152572,152574,152576],{"class":79,"line":1549},[77,152569,17166],{"class":2123},[77,152571,152462],{"class":83},[77,152573,2622],{"class":87},[77,152575,152467],{"class":83},[77,152577,33254],{"class":87},[77,152579,152580,152582,152584],{"class":79,"line":1566},[77,152581,33269],{"class":2123},[77,152583,152544],{"class":83},[77,152585,33275],{"class":87},[77,152587,152588,152590,152592,152594],{"class":79,"line":1572},[77,152589,34918],{"class":94},[77,152591,2622],{"class":87},[77,152593,152487],{"class":271},[77,152595,2628],{"class":87},[77,152597,152598],{"class":79,"line":1589},[77,152599,4875],{"emptyLinePlaceholder":2549},[77,152601,152602],{"class":79,"line":1595},[77,152603,4875],{"emptyLinePlaceholder":2549},[77,152605,152606,152608,152611,152613,152615],{"class":79,"line":4088},[77,152607,17166],{"class":2123},[77,152609,152610],{"class":83}," Cat",[77,152612,2622],{"class":87},[77,152614,152467],{"class":83},[77,152616,33254],{"class":87},[77,152618,152619,152621,152623],{"class":79,"line":4093},[77,152620,33269],{"class":2123},[77,152622,152544],{"class":83},[77,152624,33275],{"class":87},[77,152626,152627,152629,152631,152634],{"class":79,"line":4099},[77,152628,34918],{"class":94},[77,152630,2622],{"class":87},[77,152632,152633],{"class":271},"\"喵喵\"",[77,152635,2628],{"class":87},[77,152637,152638],{"class":79,"line":4104},[77,152639,4875],{"emptyLinePlaceholder":2549},[77,152641,152642],{"class":79,"line":4118},[77,152643,4875],{"emptyLinePlaceholder":2549},[77,152645,152646,152648,152650],{"class":79,"line":4123},[77,152647,152502],{"class":87},[77,152649,268],{"class":2123},[77,152651,152507],{"class":87},[77,152653,152654,152657,152659],{"class":79,"line":4129},[77,152655,152656],{"class":87},"cat ",[77,152658,268],{"class":2123},[77,152660,152661],{"class":87}," Cat()\n",[77,152663,152664],{"class":79,"line":4150},[77,152665,4875],{"emptyLinePlaceholder":2549},[77,152667,152668],{"class":79,"line":4155},[77,152669,152670],{"class":87},"dog.speak()\n",[77,152672,152673],{"class":79,"line":4169},[77,152674,152675],{"class":87},"cat.speak()\n",[14,152677,152679],{"id":152678},"_1110-super","11.10 super",[24,152681,152682,152683,152686],{},"子类可以通过 ",[74,152684,152685],{},"super()"," 调用父类方法。",[67,152688,152690],{"className":32846,"code":152689,"language":32848,"meta":72,"style":72},"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",[74,152691,152692,152700,152709,152719,152723,152727,152739,152748,152759,152769,152773,152777,152793],{"__ignoreMap":72},[77,152693,152694,152696,152698],{"class":79,"line":80},[77,152695,17166],{"class":2123},[77,152697,18040],{"class":83},[77,152699,6214],{"class":87},[77,152701,152702,152704,152706],{"class":79,"line":91},[77,152703,33269],{"class":2123},[77,152705,33272],{"class":94},[77,152707,152708],{"class":87},"(self, name):\n",[77,152710,152711,152713,152715,152717],{"class":79,"line":107},[77,152712,33313],{"class":94},[77,152714,151888],{"class":87},[77,152716,268],{"class":2123},[77,152718,151893],{"class":87},[77,152720,152721],{"class":79,"line":191},[77,152722,4875],{"emptyLinePlaceholder":2549},[77,152724,152725],{"class":79,"line":1543},[77,152726,4875],{"emptyLinePlaceholder":2549},[77,152728,152729,152731,152733,152735,152737],{"class":79,"line":1549},[77,152730,17166],{"class":2123},[77,152732,10372],{"class":83},[77,152734,2622],{"class":87},[77,152736,21516],{"class":83},[77,152738,33254],{"class":87},[77,152740,152741,152743,152745],{"class":79,"line":1566},[77,152742,33269],{"class":2123},[77,152744,33272],{"class":94},[77,152746,152747],{"class":87},"(self, name, score):\n",[77,152749,152750,152752,152754,152756],{"class":79,"line":1572},[77,152751,33285],{"class":94},[77,152753,19731],{"class":87},[77,152755,33297],{"class":94},[77,152757,152758],{"class":87},"(name)\n",[77,152760,152761,152763,152765,152767],{"class":79,"line":1589},[77,152762,33313],{"class":94},[77,152764,151912],{"class":87},[77,152766,268],{"class":2123},[77,152768,4055],{"class":87},[77,152770,152771],{"class":79,"line":1595},[77,152772,4875],{"emptyLinePlaceholder":2549},[77,152774,152775],{"class":79,"line":4088},[77,152776,4875],{"emptyLinePlaceholder":2549},[77,152778,152779,152781,152783,152785,152787,152789,152791],{"class":79,"line":4093},[77,152780,151579],{"class":87},[77,152782,268],{"class":2123},[77,152784,151983],{"class":87},[77,152786,151986],{"class":271},[77,152788,680],{"class":87},[77,152790,3601],{"class":94},[77,152792,2628],{"class":87},[77,152794,152795,152797],{"class":79,"line":4099},[77,152796,32883],{"class":94},[77,152798,152799],{"class":87},"(student.name, student.score)\n",[14,152801,152803],{"id":152802},"_1111-多态","11.11 多态",[24,152805,152806],{},"多态指不同对象响应同一个方法，表现出不同结果。",[67,152808,152810],{"className":32846,"code":152809,"language":32848,"meta":72,"style":72},"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",[74,152811,152812,152820,152828,152838,152842,152846,152854,152862,152872,152876,152880,152890,152895,152899,152903,152908],{"__ignoreMap":72},[77,152813,152814,152816,152818],{"class":79,"line":80},[77,152815,17166],{"class":2123},[77,152817,152462],{"class":83},[77,152819,6214],{"class":87},[77,152821,152822,152824,152826],{"class":79,"line":91},[77,152823,33269],{"class":2123},[77,152825,152544],{"class":83},[77,152827,33275],{"class":87},[77,152829,152830,152832,152834,152836],{"class":79,"line":107},[77,152831,34918],{"class":94},[77,152833,2622],{"class":87},[77,152835,152487],{"class":271},[77,152837,2628],{"class":87},[77,152839,152840],{"class":79,"line":191},[77,152841,4875],{"emptyLinePlaceholder":2549},[77,152843,152844],{"class":79,"line":1543},[77,152845,4875],{"emptyLinePlaceholder":2549},[77,152847,152848,152850,152852],{"class":79,"line":1549},[77,152849,17166],{"class":2123},[77,152851,152610],{"class":83},[77,152853,6214],{"class":87},[77,152855,152856,152858,152860],{"class":79,"line":1566},[77,152857,33269],{"class":2123},[77,152859,152544],{"class":83},[77,152861,33275],{"class":87},[77,152863,152864,152866,152868,152870],{"class":79,"line":1572},[77,152865,34918],{"class":94},[77,152867,2622],{"class":87},[77,152869,152633],{"class":271},[77,152871,2628],{"class":87},[77,152873,152874],{"class":79,"line":1589},[77,152875,4875],{"emptyLinePlaceholder":2549},[77,152877,152878],{"class":79,"line":1595},[77,152879,4875],{"emptyLinePlaceholder":2549},[77,152881,152882,152884,152887],{"class":79,"line":4088},[77,152883,34414],{"class":2123},[77,152885,152886],{"class":83}," make_sound",[77,152888,152889],{"class":87},"(animal):\n",[77,152891,152892],{"class":79,"line":4093},[77,152893,152894],{"class":87},"    animal.speak()\n",[77,152896,152897],{"class":79,"line":4099},[77,152898,4875],{"emptyLinePlaceholder":2549},[77,152900,152901],{"class":79,"line":4104},[77,152902,4875],{"emptyLinePlaceholder":2549},[77,152904,152905],{"class":79,"line":4118},[77,152906,152907],{"class":87},"make_sound(Dog())\n",[77,152909,152910],{"class":79,"line":4123},[77,152911,152912],{"class":87},"make_sound(Cat())\n",[24,152914,152915],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152917,152919],{"id":152918},"_1112-类属性和实例属性","11.12 类属性和实例属性",[24,152921,152922],{},"实例属性属于对象：",[67,152924,152926],{"className":32846,"code":152925,"language":32848,"meta":72,"style":72},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[74,152927,152928,152936,152944],{"__ignoreMap":72},[77,152929,152930,152932,152934],{"class":79,"line":80},[77,152931,17166],{"class":2123},[77,152933,10372],{"class":83},[77,152935,6214],{"class":87},[77,152937,152938,152940,152942],{"class":79,"line":91},[77,152939,33269],{"class":2123},[77,152941,33272],{"class":94},[77,152943,152708],{"class":87},[77,152945,152946,152948,152950,152952],{"class":79,"line":107},[77,152947,33313],{"class":94},[77,152949,151888],{"class":87},[77,152951,268],{"class":2123},[77,152953,151893],{"class":87},[24,152955,152956],{},"类属性属于类，所有对象共享：",[67,152958,152960],{"className":32846,"code":152959,"language":32848,"meta":72,"style":72},"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",[74,152961,152962,152970,152980,152984,152992,153002,153006,153010,153023,153037,153041,153048,153055],{"__ignoreMap":72},[77,152963,152964,152966,152968],{"class":79,"line":80},[77,152965,17166],{"class":2123},[77,152967,10372],{"class":83},[77,152969,6214],{"class":87},[77,152971,152972,152975,152977],{"class":79,"line":91},[77,152973,152974],{"class":87},"    school ",[77,152976,268],{"class":2123},[77,152978,152979],{"class":271}," \"黑马学校\"\n",[77,152981,152982],{"class":79,"line":107},[77,152983,4875],{"emptyLinePlaceholder":2549},[77,152985,152986,152988,152990],{"class":79,"line":191},[77,152987,33269],{"class":2123},[77,152989,33272],{"class":94},[77,152991,152708],{"class":87},[77,152993,152994,152996,152998,153000],{"class":79,"line":1543},[77,152995,33313],{"class":94},[77,152997,151888],{"class":87},[77,152999,268],{"class":2123},[77,153001,151893],{"class":87},[77,153003,153004],{"class":79,"line":1549},[77,153005,4875],{"emptyLinePlaceholder":2549},[77,153007,153008],{"class":79,"line":1566},[77,153009,4875],{"emptyLinePlaceholder":2549},[77,153011,153012,153015,153017,153019,153021],{"class":79,"line":1572},[77,153013,153014],{"class":87},"s1 ",[77,153016,268],{"class":2123},[77,153018,151983],{"class":87},[77,153020,151986],{"class":271},[77,153022,2628],{"class":87},[77,153024,153025,153028,153030,153032,153035],{"class":79,"line":1589},[77,153026,153027],{"class":87},"s2 ",[77,153029,268],{"class":2123},[77,153031,151983],{"class":87},[77,153033,153034],{"class":271},"\"小红\"",[77,153036,2628],{"class":87},[77,153038,153039],{"class":79,"line":1595},[77,153040,4875],{"emptyLinePlaceholder":2549},[77,153042,153043,153045],{"class":79,"line":4088},[77,153044,32883],{"class":94},[77,153046,153047],{"class":87},"(s1.school)\n",[77,153049,153050,153052],{"class":79,"line":4093},[77,153051,32883],{"class":94},[77,153053,153054],{"class":87},"(s2.school)\n",[77,153056,153057,153059],{"class":79,"line":4099},[77,153058,32883],{"class":94},[77,153060,153061],{"class":87},"(Student.school)\n",[24,153063,153064],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153066,153068],{"id":153067},"_1113-类方法和静态方法","11.13 类方法和静态方法",[19,153070,153072],{"id":153071},"_11131-类方法","11.13.1 类方法",[24,153074,153075,153076,153079,153080,30853],{},"类方法使用 ",[74,153077,153078],{},"@classmethod","，第一个参数通常是 ",[74,153081,153082],{},"cls",[67,153084,153086],{"className":32846,"code":153085,"language":32848,"meta":72,"style":72},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[74,153087,153088,153096,153104,153108,153116,153126,153136,153140,153144],{"__ignoreMap":72},[77,153089,153090,153092,153094],{"class":79,"line":80},[77,153091,17166],{"class":2123},[77,153093,10372],{"class":83},[77,153095,6214],{"class":87},[77,153097,153098,153100,153102],{"class":79,"line":91},[77,153099,152974],{"class":87},[77,153101,268],{"class":2123},[77,153103,152979],{"class":271},[77,153105,153106],{"class":79,"line":107},[77,153107,4875],{"emptyLinePlaceholder":2549},[77,153109,153110,153113],{"class":79,"line":191},[77,153111,153112],{"class":83},"    @",[77,153114,153115],{"class":94},"classmethod\n",[77,153117,153118,153120,153123],{"class":79,"line":1543},[77,153119,33269],{"class":2123},[77,153121,153122],{"class":83}," get_school",[77,153124,153125],{"class":87},"(cls):\n",[77,153127,153128,153130,153133],{"class":79,"line":1549},[77,153129,17224],{"class":2123},[77,153131,153132],{"class":94}," cls",[77,153134,153135],{"class":87},".school\n",[77,153137,153138],{"class":79,"line":1566},[77,153139,4875],{"emptyLinePlaceholder":2549},[77,153141,153142],{"class":79,"line":1572},[77,153143,4875],{"emptyLinePlaceholder":2549},[77,153145,153146,153148],{"class":79,"line":1589},[77,153147,32883],{"class":94},[77,153149,153150],{"class":87},"(Student.get_school())\n",[19,153152,153154],{"id":153153},"_11132-静态方法","11.13.2 静态方法",[24,153156,153157,153158,153161],{},"静态方法使用 ",[74,153159,153160],{},"@staticmethod","，不需要访问实例和类。",[67,153163,153165],{"className":32846,"code":153164,"language":32848,"meta":72,"style":72},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[74,153166,153167,153176,153183,153192,153203,153207,153211],{"__ignoreMap":72},[77,153168,153169,153171,153174],{"class":79,"line":80},[77,153170,17166],{"class":2123},[77,153172,153173],{"class":83}," MathUtils",[77,153175,6214],{"class":87},[77,153177,153178,153180],{"class":79,"line":91},[77,153179,153112],{"class":83},[77,153181,153182],{"class":94},"staticmethod\n",[77,153184,153185,153187,153189],{"class":79,"line":107},[77,153186,33269],{"class":2123},[77,153188,7684],{"class":83},[77,153190,153191],{"class":87},"(a, b):\n",[77,153193,153194,153196,153198,153200],{"class":79,"line":191},[77,153195,17224],{"class":2123},[77,153197,13342],{"class":87},[77,153199,3094],{"class":2123},[77,153201,153202],{"class":87}," b\n",[77,153204,153205],{"class":79,"line":1543},[77,153206,4875],{"emptyLinePlaceholder":2549},[77,153208,153209],{"class":79,"line":1549},[77,153210,4875],{"emptyLinePlaceholder":2549},[77,153212,153213,153215,153218,153220,153222,153224],{"class":79,"line":1566},[77,153214,32883],{"class":94},[77,153216,153217],{"class":87},"(MathUtils.add(",[77,153219,2120],{"class":94},[77,153221,680],{"class":87},[77,153223,2696],{"class":94},[77,153225,32965],{"class":87},[24,153227,153228],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153230,153232],{"id":153231},"_1114-dataclass","11.14 dataclass",[24,153234,153235,153238],{},[74,153236,153237],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[67,153240,153242],{"className":32846,"code":153241,"language":32848,"meta":72,"style":72},"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",[74,153243,153244,153256,153260,153264,153269,153277,153285,153293,153301,153305,153309,153329],{"__ignoreMap":72},[77,153245,153246,153248,153251,153253],{"class":79,"line":80},[77,153247,33205],{"class":2123},[77,153249,153250],{"class":87}," dataclasses ",[77,153252,32860],{"class":2123},[77,153254,153255],{"class":87}," dataclass\n",[77,153257,153258],{"class":79,"line":91},[77,153259,4875],{"emptyLinePlaceholder":2549},[77,153261,153262],{"class":79,"line":107},[77,153263,4875],{"emptyLinePlaceholder":2549},[77,153265,153266],{"class":79,"line":191},[77,153267,153268],{"class":83},"@dataclass\n",[77,153270,153271,153273,153275],{"class":79,"line":1543},[77,153272,17166],{"class":2123},[77,153274,10372],{"class":83},[77,153276,6214],{"class":87},[77,153278,153279,153282],{"class":79,"line":1549},[77,153280,153281],{"class":87},"    name: ",[77,153283,153284],{"class":94},"str\n",[77,153286,153287,153290],{"class":79,"line":1566},[77,153288,153289],{"class":87},"    age: ",[77,153291,153292],{"class":94},"int\n",[77,153294,153295,153298],{"class":79,"line":1572},[77,153296,153297],{"class":87},"    score: ",[77,153299,153300],{"class":94},"float\n",[77,153302,153303],{"class":79,"line":1589},[77,153304,4875],{"emptyLinePlaceholder":2549},[77,153306,153307],{"class":79,"line":1595},[77,153308,4875],{"emptyLinePlaceholder":2549},[77,153310,153311,153313,153315,153317,153319,153321,153323,153325,153327],{"class":79,"line":4088},[77,153312,151579],{"class":87},[77,153314,268],{"class":2123},[77,153316,151983],{"class":87},[77,153318,151986],{"class":271},[77,153320,680],{"class":87},[77,153322,3263],{"class":94},[77,153324,680],{"class":87},[77,153326,3601],{"class":94},[77,153328,2628],{"class":87},[77,153330,153331,153333],{"class":79,"line":4093},[77,153332,32883],{"class":94},[77,153334,152140],{"class":87},[24,153336,153337,153338,2828,153340,153343],{},"它会自动生成 ",[74,153339,33297],{},[74,153341,153342],{},"__repr__"," 等方法。适合数据模型类。",[14,153345,153347],{"id":153346},"_1115-小案例学生类","11.15 小案例：学生类",[67,153349,153351],{"className":32846,"code":153350,"language":32848,"meta":72,"style":72},"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",[74,153352,153353,153361,153370,153382,153392,153402,153412,153416,153425,153438,153442,153451,153457,153469,153481,153493,153505,153509,153513,153519,153529,153538,153548,153556,153564,153573,153577,153581,153589,153625,153629,153633,153658,153665],{"__ignoreMap":72},[77,153354,153355,153357,153359],{"class":79,"line":80},[77,153356,17166],{"class":2123},[77,153358,10372],{"class":83},[77,153360,6214],{"class":87},[77,153362,153363,153365,153367],{"class":79,"line":91},[77,153364,33269],{"class":2123},[77,153366,33272],{"class":94},[77,153368,153369],{"class":87},"(self, student_id, name, age, score):\n",[77,153371,153372,153374,153377,153379],{"class":79,"line":107},[77,153373,33313],{"class":94},[77,153375,153376],{"class":87},".student_id ",[77,153378,268],{"class":2123},[77,153380,153381],{"class":87}," student_id\n",[77,153383,153384,153386,153388,153390],{"class":79,"line":191},[77,153385,33313],{"class":94},[77,153387,151888],{"class":87},[77,153389,268],{"class":2123},[77,153391,151893],{"class":87},[77,153393,153394,153396,153398,153400],{"class":79,"line":1543},[77,153395,33313],{"class":94},[77,153397,151900],{"class":87},[77,153399,268],{"class":2123},[77,153401,151905],{"class":87},[77,153403,153404,153406,153408,153410],{"class":79,"line":1549},[77,153405,33313],{"class":94},[77,153407,151912],{"class":87},[77,153409,268],{"class":2123},[77,153411,4055],{"class":87},[77,153413,153414],{"class":79,"line":1566},[77,153415,4875],{"emptyLinePlaceholder":2549},[77,153417,153418,153420,153423],{"class":79,"line":1572},[77,153419,33269],{"class":2123},[77,153421,153422],{"class":83}," is_passed",[77,153424,33275],{"class":87},[77,153426,153427,153429,153431,153433,153435],{"class":79,"line":1589},[77,153428,17224],{"class":2123},[77,153430,41339],{"class":94},[77,153432,151912],{"class":87},[77,153434,4186],{"class":2123},[77,153436,153437],{"class":94}," 60\n",[77,153439,153440],{"class":79,"line":1595},[77,153441,4875],{"emptyLinePlaceholder":2549},[77,153443,153444,153446,153449],{"class":79,"line":4088},[77,153445,33269],{"class":2123},[77,153447,153448],{"class":83}," to_dict",[77,153450,33275],{"class":87},[77,153452,153453,153455],{"class":79,"line":4093},[77,153454,17224],{"class":2123},[77,153456,88],{"class":87},[77,153458,153459,153462,153464,153466],{"class":79,"line":4099},[77,153460,153461],{"class":271},"            \"student_id\"",[77,153463,98],{"class":87},[77,153465,33291],{"class":94},[77,153467,153468],{"class":87},".student_id,\n",[77,153470,153471,153474,153476,153478],{"class":79,"line":4104},[77,153472,153473],{"class":271},"            \"name\"",[77,153475,98],{"class":87},[77,153477,33291],{"class":94},[77,153479,153480],{"class":87},".name,\n",[77,153482,153483,153486,153488,153490],{"class":79,"line":4118},[77,153484,153485],{"class":271},"            \"age\"",[77,153487,98],{"class":87},[77,153489,33291],{"class":94},[77,153491,153492],{"class":87},".age,\n",[77,153494,153495,153498,153500,153502],{"class":79,"line":4123},[77,153496,153497],{"class":271},"            \"score\"",[77,153499,98],{"class":87},[77,153501,33291],{"class":94},[77,153503,153504],{"class":87},".score,\n",[77,153506,153507],{"class":79,"line":4129},[77,153508,5004],{"class":87},[77,153510,153511],{"class":79,"line":4150},[77,153512,4875],{"emptyLinePlaceholder":2549},[77,153514,153515,153517],{"class":79,"line":4155},[77,153516,153112],{"class":83},[77,153518,153115],{"class":94},[77,153520,153521,153523,153526],{"class":79,"line":4169},[77,153522,33269],{"class":2123},[77,153524,153525],{"class":83}," from_dict",[77,153527,153528],{"class":87},"(cls, data):\n",[77,153530,153531,153533,153535],{"class":79,"line":4174},[77,153532,17224],{"class":2123},[77,153534,153132],{"class":94},[77,153536,153537],{"class":87},"(\n",[77,153539,153540,153543,153546],{"class":79,"line":4203},[77,153541,153542],{"class":87},"            data[",[77,153544,153545],{"class":271},"\"student_id\"",[77,153547,90272],{"class":87},[77,153549,153550,153552,153554],{"class":79,"line":4208},[77,153551,153542],{"class":87},[77,153553,65123],{"class":271},[77,153555,90272],{"class":87},[77,153557,153558,153560,153562],{"class":79,"line":4225},[77,153559,153542],{"class":87},[77,153561,71567],{"class":271},[77,153563,90272],{"class":87},[77,153565,153566,153568,153571],{"class":79,"line":4230},[77,153567,153542],{"class":87},[77,153569,153570],{"class":271},"\"score\"",[77,153572,90272],{"class":87},[77,153574,153575],{"class":79,"line":4235},[77,153576,40592],{"class":87},[77,153578,153579],{"class":79,"line":4240},[77,153580,4875],{"emptyLinePlaceholder":2549},[77,153582,153583,153585,153587],{"class":79,"line":4254},[77,153584,33269],{"class":2123},[77,153586,152079],{"class":94},[77,153588,33275],{"class":87},[77,153590,153591,153593,153595,153597,153599,153602,153604,153607,153609,153611,153613,153615,153617,153619,153621,153623],{"class":79,"line":4259},[77,153592,17224],{"class":2123},[77,153594,152088],{"class":2123},[77,153596,2865],{"class":271},[77,153598,151550],{"class":94},[77,153600,153601],{"class":87},".student_id",[77,153603,3558],{"class":94},[77,153605,153606],{"class":94}," {self",[77,153608,82738],{"class":87},[77,153610,3558],{"class":94},[77,153612,153606],{"class":94},[77,153614,82750],{"class":87},[77,153616,3558],{"class":94},[77,153618,153606],{"class":94},[77,153620,151960],{"class":87},[77,153622,3558],{"class":94},[77,153624,27601],{"class":271},[77,153626,153627],{"class":79,"line":5052},[77,153628,4875],{"emptyLinePlaceholder":2549},[77,153630,153631],{"class":79,"line":5066},[77,153632,4875],{"emptyLinePlaceholder":2549},[77,153634,153635,153637,153639,153641,153644,153646,153648,153650,153652,153654,153656],{"class":79,"line":5074},[77,153636,151579],{"class":87},[77,153638,268],{"class":2123},[77,153640,151983],{"class":87},[77,153642,153643],{"class":271},"\"001\"",[77,153645,680],{"class":87},[77,153647,151986],{"class":271},[77,153649,680],{"class":87},[77,153651,3263],{"class":94},[77,153653,680],{"class":87},[77,153655,3601],{"class":94},[77,153657,2628],{"class":87},[77,153659,153660,153662],{"class":79,"line":5079},[77,153661,32883],{"class":94},[77,153663,153664],{"class":87},"(student.is_passed())\n",[77,153666,153667,153669],{"class":79,"line":5085},[77,153668,32883],{"class":94},[77,153670,153671],{"class":87},"(student.to_dict())\n",[24,153673,153674,513,153677,153680],{},[74,153675,153676],{},"to_dict()",[74,153678,153679],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153682,153684],{"id":153683},"_1116-易错点","11.16 易错点",[139,153686,153687,153693,153699,153704,153707,153710],{},[54,153688,153689,153690,30853],{},"类名推荐使用大驼峰，如 ",[74,153691,153692],{},"StudentManager",[54,153694,153695,153696,153698],{},"方法第一个参数必须写 ",[74,153697,33291],{},"，调用时不用传。",[54,153700,153701,153703],{},[74,153702,33297],{}," 不是普通方法，它在创建对象时自动执行。",[54,153705,153706],{},"私有属性不是绝对安全，只是约定和名称改写。",[54,153708,153709],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[54,153711,153712],{},"类中方法太多时，说明职责可能过重。",[14,153714,153716],{"id":153715},"_1117-本章练习","11.17 本章练习",[139,153718,153719,153725,153731,153736,153749],{},[54,153720,153721,153722,153724],{},"定义 ",[74,153723,151666],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[54,153726,153721,153727,153730],{},[74,153728,153729],{},"Account"," 类，实现存款、取款、查询余额。",[54,153732,153721,153733,153735],{},[74,153734,19696],{}," 类，计算圆的周长和面积。",[54,153737,153721,153738,2828,153741,153744,153745,153748],{},[74,153739,153740],{},"Dog",[74,153742,153743],{},"Cat"," 类，并用同一个函数调用它们的 ",[74,153746,153747],{},"speak()"," 方法。",[54,153750,106799,153751,153753,153754,30853],{},[74,153752,153237],{}," 定义一个商品类 ",[74,153755,153756],{},"Product",[2520,153758,153759],{},"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":72,"searchDepth":91,"depth":91,"links":153761},[153762,153763,153764,153765,153766,153767,153769,153770,153771,153772,153773,153774,153775,153779,153780,153781,153782],{"id":151430,"depth":91,"text":151431},{"id":151613,"depth":91,"text":151614},{"id":151677,"depth":91,"text":151678},{"id":151754,"depth":91,"text":151755},{"id":151853,"depth":91,"text":151854},{"id":152017,"depth":91,"text":153768},"11.6 str",{"id":152143,"depth":91,"text":152144},{"id":152409,"depth":91,"text":152410},{"id":152523,"depth":91,"text":152524},{"id":152678,"depth":91,"text":152679},{"id":152802,"depth":91,"text":152803},{"id":152918,"depth":91,"text":152919},{"id":153067,"depth":91,"text":153068,"children":153776},[153777,153778],{"id":153071,"depth":107,"text":153072},{"id":153153,"depth":107,"text":153154},{"id":153231,"depth":91,"text":153232},{"id":153346,"depth":91,"text":153347},{"id":153683,"depth":91,"text":153684},{"id":153715,"depth":91,"text":153716},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151422,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153789,"title":153790,"body":153791,"description":2546,"extension":2547,"meta":157104,"navigation":2549,"path":157105,"seo":157106,"stem":157107,"__hash__":157108},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153792,"toc":157080},[153793,153796,153800,153803,153806,153835,153838,153846,153850,153854,153857,153880,153883,153889,153893,155339,155342,155363,155367,155370,155382,155385,155569,155572,155698,155701,155705,155709,155845,155849,155935,155939,156021,156025,156062,156066,156255,156259,156262,156492,156496,156499,156680,156683,156687,156690,156696,156699,156725,156729,156732,156746,156749,156774,156777,156791,156794,156811,156814,156831,156834,156851,156855,156881,156885,156908,156912,156915,156917,156923,156925,156946,156949,156955,156961,156965,156968,157044,157047,157051,157077],[10,153794,153790],{"id":153795},"_12-综合案例与复习路线",[14,153797,153799],{"id":153798},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[24,153801,153802],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[24,153804,153805],{},"一个合格的入门综合项目最好覆盖：",[139,153807,153808,153811,153814,153817,153820,153823,153826,153829,153832],{},[54,153809,153810],{},"输入输出。",[54,153812,153813],{},"判断和循环。",[54,153815,153816],{},"函数拆分。",[54,153818,153819],{},"列表、字典等容器。",[54,153821,153822],{},"文件持久化。",[54,153824,153825],{},"异常处理。",[54,153827,153828],{},"模块拆分。",[54,153830,153831],{},"可选：面向对象。",[54,153833,153834],{},"可选：数据可视化。",[24,153836,153837],{},"本章整理两个方向：",[139,153839,153840,153843],{},[54,153841,153842],{},"学生管理系统。",[54,153844,153845],{},"销售数据统计和可视化。",[14,153847,153849],{"id":153848},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[19,153851,153853],{"id":153852},"_1221-需求","12.2.1 需求",[24,153855,153856],{},"实现一个命令行学生管理系统：",[139,153858,153859,153862,153865,153868,153871,153874,153877],{},[54,153860,153861],{},"添加学生。",[54,153863,153864],{},"删除学生。",[54,153866,153867],{},"修改学生。",[54,153869,153870],{},"查询学生。",[54,153872,153873],{},"显示所有学生。",[54,153875,153876],{},"保存到 JSON 文件。",[54,153878,153879],{},"程序启动时自动读取 JSON 文件。",[24,153881,153882],{},"学生字段：",[67,153884,153887],{"className":153885,"code":153886,"language":7662,"meta":72},[7660],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[74,153888,153886],{"__ignoreMap":72},[14,153890,153892],{"id":153891},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[67,153894,153896],{"className":32846,"code":153895,"language":32848,"meta":72,"style":72},"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",[74,153897,153898,153904,153914,153918,153932,153936,153940,153949,153961,153967,153971,153977,154008,154018,154025,154036,154042,154046,154050,154060,154091,154117,154121,154125,154134,154145,154156,154167,154178,154189,154200,154211,154215,154219,154229,154241,154257,154264,154271,154275,154279,154289,154297,154304,154317,154327,154338,154342,154346,154355,154363,154369,154381,154389,154400,154404,154408,154417,154433,154437,154444,154455,154460,154464,154480,154495,154510,154514,154519,154527,154535,154543,154551,154555,154560,154571,154575,154579,154588,154603,154613,154617,154629,154640,154644,154648,154653,154657,154668,154672,154676,154685,154700,154708,154712,154724,154734,154738,154742,154757,154770,154783,154787,154800,154812,154824,154828,154832,154843,154847,154851,154860,154875,154883,154887,154899,154909,154913,154917,154922,154926,154930,154940,154946,154968,154987,155006,155025,155030,155034,155038,155047,155055,155066,155070,155074,155100,155110,155115,155119,155123,155131,155141,155145,155153,155158,155174,155178,155192,155197,155211,155216,155229,155234,155247,155252,155265,155270,155283,155294,155298,155304,155315,155319,155323,155335],{"__ignoreMap":72},[77,153899,153900,153902],{"class":79,"line":80},[77,153901,32860],{"class":2123},[77,153903,149189],{"class":87},[77,153905,153906,153908,153910,153912],{"class":79,"line":91},[77,153907,33205],{"class":2123},[77,153909,110744],{"class":87},[77,153911,32860],{"class":2123},[77,153913,110749],{"class":87},[77,153915,153916],{"class":79,"line":107},[77,153917,4875],{"emptyLinePlaceholder":2549},[77,153919,153920,153923,153925,153927,153930],{"class":79,"line":191},[77,153921,153922],{"class":94},"DATA_FILE",[77,153924,16036],{"class":2123},[77,153926,110978],{"class":87},[77,153928,153929],{"class":271},"\"students.json\"",[77,153931,2628],{"class":87},[77,153933,153934],{"class":79,"line":1543},[77,153935,4875],{"emptyLinePlaceholder":2549},[77,153937,153938],{"class":79,"line":1549},[77,153939,4875],{"emptyLinePlaceholder":2549},[77,153941,153942,153944,153947],{"class":79,"line":1566},[77,153943,34414],{"class":2123},[77,153945,153946],{"class":83}," load_students",[77,153948,34420],{"class":87},[77,153950,153951,153953,153955,153958],{"class":79,"line":1572},[77,153952,5576],{"class":2123},[77,153954,41396],{"class":2123},[77,153956,153957],{"class":94}," DATA_FILE",[77,153959,153960],{"class":87},".exists():\n",[77,153962,153963,153965],{"class":79,"line":1589},[77,153964,17224],{"class":2123},[77,153966,54296],{"class":87},[77,153968,153969],{"class":79,"line":1595},[77,153970,4875],{"emptyLinePlaceholder":2549},[77,153972,153973,153975],{"class":79,"line":4088},[77,153974,128216],{"class":2123},[77,153976,6214],{"class":87},[77,153978,153979,153982,153984,153986,153988,153990,153992,153994,153996,153998,154000,154002,154004,154006],{"class":79,"line":4093},[77,153980,153981],{"class":2123},"        with",[77,153983,148889],{"class":94},[77,153985,2622],{"class":87},[77,153987,153922],{"class":94},[77,153989,680],{"class":87},[77,153991,148899],{"class":271},[77,153993,680],{"class":87},[77,153995,148904],{"class":7691},[77,153997,268],{"class":2123},[77,153999,148909],{"class":271},[77,154001,16186],{"class":87},[77,154003,33850],{"class":2123},[77,154005,150251],{"class":7691},[77,154007,6214],{"class":87},[77,154009,154010,154012,154014,154016],{"class":79,"line":4099},[77,154011,18202],{"class":2123},[77,154013,150262],{"class":87},[77,154015,47820],{"class":7691},[77,154017,2628],{"class":87},[77,154019,154020,154022],{"class":79,"line":4104},[77,154021,128244],{"class":2123},[77,154023,154024],{"class":87}," json.JSONDecodeError:\n",[77,154026,154027,154029,154031,154034],{"class":79,"line":4118},[77,154028,34918],{"class":94},[77,154030,2622],{"class":87},[77,154032,154033],{"class":271},"\"数据文件格式错误，已使用空数据启动\"",[77,154035,2628],{"class":87},[77,154037,154038,154040],{"class":79,"line":4123},[77,154039,17224],{"class":2123},[77,154041,54296],{"class":87},[77,154043,154044],{"class":79,"line":4129},[77,154045,4875],{"emptyLinePlaceholder":2549},[77,154047,154048],{"class":79,"line":4150},[77,154049,4875],{"emptyLinePlaceholder":2549},[77,154051,154052,154054,154057],{"class":79,"line":4155},[77,154053,34414],{"class":2123},[77,154055,154056],{"class":83}," save_students",[77,154058,154059],{"class":87},"(students):\n",[77,154061,154062,154064,154066,154068,154070,154072,154075,154077,154079,154081,154083,154085,154087,154089],{"class":79,"line":4169},[77,154063,36644],{"class":2123},[77,154065,148889],{"class":94},[77,154067,2622],{"class":87},[77,154069,153922],{"class":94},[77,154071,680],{"class":87},[77,154073,154074],{"class":271},"\"w\"",[77,154076,680],{"class":87},[77,154078,148904],{"class":7691},[77,154080,268],{"class":2123},[77,154082,148909],{"class":271},[77,154084,16186],{"class":87},[77,154086,33850],{"class":2123},[77,154088,150251],{"class":7691},[77,154090,6214],{"class":87},[77,154092,154093,154096,154098,154100,154102,154104,154106,154108,154111,154113,154115],{"class":79,"line":4174},[77,154094,154095],{"class":87},"        json.dump(students, ",[77,154097,47820],{"class":7691},[77,154099,680],{"class":87},[77,154101,149235],{"class":7691},[77,154103,268],{"class":2123},[77,154105,36453],{"class":94},[77,154107,680],{"class":87},[77,154109,154110],{"class":7691},"indent",[77,154112,268],{"class":2123},[77,154114,2696],{"class":94},[77,154116,2628],{"class":87},[77,154118,154119],{"class":79,"line":4203},[77,154120,4875],{"emptyLinePlaceholder":2549},[77,154122,154123],{"class":79,"line":4208},[77,154124,4875],{"emptyLinePlaceholder":2549},[77,154126,154127,154129,154132],{"class":79,"line":4225},[77,154128,34414],{"class":2123},[77,154130,154131],{"class":83}," show_menu",[77,154133,34420],{"class":87},[77,154135,154136,154138,154140,154143],{"class":79,"line":4230},[77,154137,33766],{"class":94},[77,154139,2622],{"class":87},[77,154141,154142],{"class":271},"\"====== 学生管理系统 ======\"",[77,154144,2628],{"class":87},[77,154146,154147,154149,154151,154154],{"class":79,"line":4235},[77,154148,33766],{"class":94},[77,154150,2622],{"class":87},[77,154152,154153],{"class":271},"\"1. 添加学生\"",[77,154155,2628],{"class":87},[77,154157,154158,154160,154162,154165],{"class":79,"line":4240},[77,154159,33766],{"class":94},[77,154161,2622],{"class":87},[77,154163,154164],{"class":271},"\"2. 删除学生\"",[77,154166,2628],{"class":87},[77,154168,154169,154171,154173,154176],{"class":79,"line":4254},[77,154170,33766],{"class":94},[77,154172,2622],{"class":87},[77,154174,154175],{"class":271},"\"3. 修改学生\"",[77,154177,2628],{"class":87},[77,154179,154180,154182,154184,154187],{"class":79,"line":4259},[77,154181,33766],{"class":94},[77,154183,2622],{"class":87},[77,154185,154186],{"class":271},"\"4. 查询学生\"",[77,154188,2628],{"class":87},[77,154190,154191,154193,154195,154198],{"class":79,"line":5052},[77,154192,33766],{"class":94},[77,154194,2622],{"class":87},[77,154196,154197],{"class":271},"\"5. 显示所有学生\"",[77,154199,2628],{"class":87},[77,154201,154202,154204,154206,154209],{"class":79,"line":5066},[77,154203,33766],{"class":94},[77,154205,2622],{"class":87},[77,154207,154208],{"class":271},"\"0. 退出系统\"",[77,154210,2628],{"class":87},[77,154212,154213],{"class":79,"line":5074},[77,154214,4875],{"emptyLinePlaceholder":2549},[77,154216,154217],{"class":79,"line":5079},[77,154218,4875],{"emptyLinePlaceholder":2549},[77,154220,154221,154223,154226],{"class":79,"line":5085},[77,154222,34414],{"class":2123},[77,154224,154225],{"class":83}," find_student",[77,154227,154228],{"class":87},"(students, student_id):\n",[77,154230,154231,154233,154236,154238],{"class":79,"line":5091},[77,154232,5676],{"class":2123},[77,154234,154235],{"class":87}," student ",[77,154237,28511],{"class":2123},[77,154239,154240],{"class":87}," students:\n",[77,154242,154243,154245,154248,154250,154252,154254],{"class":79,"line":5096},[77,154244,4972],{"class":2123},[77,154246,154247],{"class":87}," student[",[77,154249,153545],{"class":271},[77,154251,6918],{"class":87},[77,154253,5424],{"class":2123},[77,154255,154256],{"class":87}," student_id:\n",[77,154258,154259,154261],{"class":79,"line":10422},[77,154260,18202],{"class":2123},[77,154262,154263],{"class":87}," student\n",[77,154265,154266,154268],{"class":79,"line":10446},[77,154267,6565],{"class":2123},[77,154269,154270],{"class":94}," None\n",[77,154272,154273],{"class":79,"line":10451},[77,154274,4875],{"emptyLinePlaceholder":2549},[77,154276,154277],{"class":79,"line":10457},[77,154278,4875],{"emptyLinePlaceholder":2549},[77,154280,154281,154283,154286],{"class":79,"line":10484},[77,154282,34414],{"class":2123},[77,154284,154285],{"class":83}," input_int",[77,154287,154288],{"class":87},"(prompt):\n",[77,154290,154291,154293,154295],{"class":79,"line":10489},[77,154292,4726],{"class":2123},[77,154294,97728],{"class":94},[77,154296,6214],{"class":87},[77,154298,154299,154302],{"class":79,"line":10495},[77,154300,154301],{"class":2123},"        try",[77,154303,6214],{"class":87},[77,154305,154306,154308,154310,154312,154314],{"class":79,"line":10507},[77,154307,18202],{"class":2123},[77,154309,4857],{"class":94},[77,154311,2622],{"class":87},[77,154313,159],{"class":94},[77,154315,154316],{"class":87},"(prompt))\n",[77,154318,154319,154322,154325],{"class":79,"line":10519},[77,154320,154321],{"class":2123},"        except",[77,154323,154324],{"class":94}," ValueError",[77,154326,6214],{"class":87},[77,154328,154329,154331,154333,154336],{"class":79,"line":10531},[77,154330,37116],{"class":94},[77,154332,2622],{"class":87},[77,154334,154335],{"class":271},"\"请输入整数\"",[77,154337,2628],{"class":87},[77,154339,154340],{"class":79,"line":12189},[77,154341,4875],{"emptyLinePlaceholder":2549},[77,154343,154344],{"class":79,"line":12214},[77,154345,4875],{"emptyLinePlaceholder":2549},[77,154347,154348,154350,154353],{"class":79,"line":12237},[77,154349,34414],{"class":2123},[77,154351,154352],{"class":83}," input_float",[77,154354,154288],{"class":87},[77,154356,154357,154359,154361],{"class":79,"line":12261},[77,154358,4726],{"class":2123},[77,154360,97728],{"class":94},[77,154362,6214],{"class":87},[77,154364,154365,154367],{"class":79,"line":12266},[77,154366,154301],{"class":2123},[77,154368,6214],{"class":87},[77,154370,154371,154373,154375,154377,154379],{"class":79,"line":12271},[77,154372,18202],{"class":2123},[77,154374,112230],{"class":94},[77,154376,2622],{"class":87},[77,154378,159],{"class":94},[77,154380,154316],{"class":87},[77,154382,154383,154385,154387],{"class":79,"line":12276},[77,154384,154321],{"class":2123},[77,154386,154324],{"class":94},[77,154388,6214],{"class":87},[77,154390,154391,154393,154395,154398],{"class":79,"line":12285},[77,154392,37116],{"class":94},[77,154394,2622],{"class":87},[77,154396,154397],{"class":271},"\"请输入数字\"",[77,154399,2628],{"class":87},[77,154401,154402],{"class":79,"line":12290},[77,154403,4875],{"emptyLinePlaceholder":2549},[77,154405,154406],{"class":79,"line":12296},[77,154407,4875],{"emptyLinePlaceholder":2549},[77,154409,154410,154412,154415],{"class":79,"line":12317},[77,154411,34414],{"class":2123},[77,154413,154414],{"class":83}," add_student",[77,154416,154059],{"class":87},[77,154418,154419,154422,154424,154426,154428,154431],{"class":79,"line":12323},[77,154420,154421],{"class":87},"    student_id ",[77,154423,268],{"class":2123},[77,154425,63053],{"class":94},[77,154427,2622],{"class":87},[77,154429,154430],{"class":271},"\"请输入学号:\"",[77,154432,2628],{"class":87},[77,154434,154435],{"class":79,"line":12337},[77,154436,4875],{"emptyLinePlaceholder":2549},[77,154438,154439,154441],{"class":79,"line":12343},[77,154440,5576],{"class":2123},[77,154442,154443],{"class":87}," find_student(students, student_id):\n",[77,154445,154446,154448,154450,154453],{"class":79,"line":12370},[77,154447,34918],{"class":94},[77,154449,2622],{"class":87},[77,154451,154452],{"class":271},"\"学号已存在\"",[77,154454,2628],{"class":87},[77,154456,154457],{"class":79,"line":12379},[77,154458,154459],{"class":2123},"        return\n",[77,154461,154462],{"class":79,"line":12385},[77,154463,4875],{"emptyLinePlaceholder":2549},[77,154465,154466,154469,154471,154473,154475,154478],{"class":79,"line":12393},[77,154467,154468],{"class":87},"    name ",[77,154470,268],{"class":2123},[77,154472,63053],{"class":94},[77,154474,2622],{"class":87},[77,154476,154477],{"class":271},"\"请输入姓名:\"",[77,154479,2628],{"class":87},[77,154481,154482,154485,154487,154490,154493],{"class":79,"line":12398},[77,154483,154484],{"class":87},"    age ",[77,154486,268],{"class":2123},[77,154488,154489],{"class":87}," input_int(",[77,154491,154492],{"class":271},"\"请输入年龄:\"",[77,154494,2628],{"class":87},[77,154496,154497,154500,154502,154505,154508],{"class":79,"line":19074},[77,154498,154499],{"class":87},"    score ",[77,154501,268],{"class":2123},[77,154503,154504],{"class":87}," input_float(",[77,154506,154507],{"class":271},"\"请输入成绩:\"",[77,154509,2628],{"class":87},[77,154511,154512],{"class":79,"line":19080},[77,154513,4875],{"emptyLinePlaceholder":2549},[77,154515,154516],{"class":79,"line":19103},[77,154517,154518],{"class":87},"    students.append({\n",[77,154520,154521,154524],{"class":79,"line":19109},[77,154522,154523],{"class":271},"        \"student_id\"",[77,154525,154526],{"class":87},": student_id,\n",[77,154528,154529,154532],{"class":79,"line":19132},[77,154530,154531],{"class":271},"        \"name\"",[77,154533,154534],{"class":87},": name,\n",[77,154536,154537,154540],{"class":79,"line":19146},[77,154538,154539],{"class":271},"        \"age\"",[77,154541,154542],{"class":87},": age,\n",[77,154544,154545,154548],{"class":79,"line":19166},[77,154546,154547],{"class":271},"        \"score\"",[77,154549,154550],{"class":87},": score,\n",[77,154552,154553],{"class":79,"line":19172},[77,154554,35928],{"class":87},[77,154556,154557],{"class":79,"line":19183},[77,154558,154559],{"class":87},"    save_students(students)\n",[77,154561,154562,154564,154566,154569],{"class":79,"line":19206},[77,154563,33766],{"class":94},[77,154565,2622],{"class":87},[77,154567,154568],{"class":271},"\"添加成功\"",[77,154570,2628],{"class":87},[77,154572,154573],{"class":79,"line":19228},[77,154574,4875],{"emptyLinePlaceholder":2549},[77,154576,154577],{"class":79,"line":19233},[77,154578,4875],{"emptyLinePlaceholder":2549},[77,154580,154581,154583,154586],{"class":79,"line":19239},[77,154582,34414],{"class":2123},[77,154584,154585],{"class":83}," delete_student",[77,154587,154059],{"class":87},[77,154589,154590,154592,154594,154596,154598,154601],{"class":79,"line":19253},[77,154591,154421],{"class":87},[77,154593,268],{"class":2123},[77,154595,63053],{"class":94},[77,154597,2622],{"class":87},[77,154599,154600],{"class":271},"\"请输入要删除的学号:\"",[77,154602,2628],{"class":87},[77,154604,154605,154608,154610],{"class":79,"line":19266},[77,154606,154607],{"class":87},"    student ",[77,154609,268],{"class":2123},[77,154611,154612],{"class":87}," find_student(students, student_id)\n",[77,154614,154615],{"class":79,"line":19271},[77,154616,4875],{"emptyLinePlaceholder":2549},[77,154618,154619,154621,154623,154625,154627],{"class":79,"line":19285},[77,154620,5576],{"class":2123},[77,154622,154235],{"class":87},[77,154624,41393],{"class":2123},[77,154626,41399],{"class":94},[77,154628,6214],{"class":87},[77,154630,154631,154633,154635,154638],{"class":79,"line":19290},[77,154632,34918],{"class":94},[77,154634,2622],{"class":87},[77,154636,154637],{"class":271},"\"学生不存在\"",[77,154639,2628],{"class":87},[77,154641,154642],{"class":79,"line":19296},[77,154643,154459],{"class":2123},[77,154645,154646],{"class":79,"line":19301},[77,154647,4875],{"emptyLinePlaceholder":2549},[77,154649,154650],{"class":79,"line":19315},[77,154651,154652],{"class":87},"    students.remove(student)\n",[77,154654,154655],{"class":79,"line":19320},[77,154656,154559],{"class":87},[77,154658,154659,154661,154663,154666],{"class":79,"line":19325},[77,154660,33766],{"class":94},[77,154662,2622],{"class":87},[77,154664,154665],{"class":271},"\"删除成功\"",[77,154667,2628],{"class":87},[77,154669,154670],{"class":79,"line":19339},[77,154671,4875],{"emptyLinePlaceholder":2549},[77,154673,154674],{"class":79,"line":19351},[77,154675,4875],{"emptyLinePlaceholder":2549},[77,154677,154678,154680,154683],{"class":79,"line":19356},[77,154679,34414],{"class":2123},[77,154681,154682],{"class":83}," update_student",[77,154684,154059],{"class":87},[77,154686,154687,154689,154691,154693,154695,154698],{"class":79,"line":19369},[77,154688,154421],{"class":87},[77,154690,268],{"class":2123},[77,154692,63053],{"class":94},[77,154694,2622],{"class":87},[77,154696,154697],{"class":271},"\"请输入要修改的学号:\"",[77,154699,2628],{"class":87},[77,154701,154702,154704,154706],{"class":79,"line":19374},[77,154703,154607],{"class":87},[77,154705,268],{"class":2123},[77,154707,154612],{"class":87},[77,154709,154710],{"class":79,"line":19379},[77,154711,4875],{"emptyLinePlaceholder":2549},[77,154713,154714,154716,154718,154720,154722],{"class":79,"line":19384},[77,154715,5576],{"class":2123},[77,154717,154235],{"class":87},[77,154719,41393],{"class":2123},[77,154721,41399],{"class":94},[77,154723,6214],{"class":87},[77,154725,154726,154728,154730,154732],{"class":79,"line":19397},[77,154727,34918],{"class":94},[77,154729,2622],{"class":87},[77,154731,154637],{"class":271},[77,154733,2628],{"class":87},[77,154735,154736],{"class":79,"line":19402},[77,154737,154459],{"class":2123},[77,154739,154740],{"class":79,"line":35100},[77,154741,4875],{"emptyLinePlaceholder":2549},[77,154743,154744,154746,154748,154750,154752,154755],{"class":79,"line":35106},[77,154745,154468],{"class":87},[77,154747,268],{"class":2123},[77,154749,63053],{"class":94},[77,154751,2622],{"class":87},[77,154753,154754],{"class":271},"\"请输入新姓名:\"",[77,154756,2628],{"class":87},[77,154758,154759,154761,154763,154765,154768],{"class":79,"line":35112},[77,154760,154484],{"class":87},[77,154762,268],{"class":2123},[77,154764,154489],{"class":87},[77,154766,154767],{"class":271},"\"请输入新年龄:\"",[77,154769,2628],{"class":87},[77,154771,154772,154774,154776,154778,154781],{"class":79,"line":35118},[77,154773,154499],{"class":87},[77,154775,268],{"class":2123},[77,154777,154504],{"class":87},[77,154779,154780],{"class":271},"\"请输入新成绩:\"",[77,154782,2628],{"class":87},[77,154784,154785],{"class":79,"line":35124},[77,154786,4875],{"emptyLinePlaceholder":2549},[77,154788,154789,154792,154794,154796,154798],{"class":79,"line":35135},[77,154790,154791],{"class":87},"    student[",[77,154793,65123],{"class":271},[77,154795,6918],{"class":87},[77,154797,268],{"class":2123},[77,154799,151893],{"class":87},[77,154801,154802,154804,154806,154808,154810],{"class":79,"line":35141},[77,154803,154791],{"class":87},[77,154805,71567],{"class":271},[77,154807,6918],{"class":87},[77,154809,268],{"class":2123},[77,154811,151905],{"class":87},[77,154813,154814,154816,154818,154820,154822],{"class":79,"line":35161},[77,154815,154791],{"class":87},[77,154817,153570],{"class":271},[77,154819,6918],{"class":87},[77,154821,268],{"class":2123},[77,154823,4055],{"class":87},[77,154825,154826],{"class":79,"line":35167},[77,154827,4875],{"emptyLinePlaceholder":2549},[77,154829,154830],{"class":79,"line":35178},[77,154831,154559],{"class":87},[77,154833,154834,154836,154838,154841],{"class":79,"line":35184},[77,154835,33766],{"class":94},[77,154837,2622],{"class":87},[77,154839,154840],{"class":271},"\"修改成功\"",[77,154842,2628],{"class":87},[77,154844,154845],{"class":79,"line":35190},[77,154846,4875],{"emptyLinePlaceholder":2549},[77,154848,154849],{"class":79,"line":35196},[77,154850,4875],{"emptyLinePlaceholder":2549},[77,154852,154853,154855,154858],{"class":79,"line":35202},[77,154854,34414],{"class":2123},[77,154856,154857],{"class":83}," query_student",[77,154859,154059],{"class":87},[77,154861,154862,154864,154866,154868,154870,154873],{"class":79,"line":35208},[77,154863,154421],{"class":87},[77,154865,268],{"class":2123},[77,154867,63053],{"class":94},[77,154869,2622],{"class":87},[77,154871,154872],{"class":271},"\"请输入要查询的学号:\"",[77,154874,2628],{"class":87},[77,154876,154877,154879,154881],{"class":79,"line":35214},[77,154878,154607],{"class":87},[77,154880,268],{"class":2123},[77,154882,154612],{"class":87},[77,154884,154885],{"class":79,"line":35220},[77,154886,4875],{"emptyLinePlaceholder":2549},[77,154888,154889,154891,154893,154895,154897],{"class":79,"line":35240},[77,154890,5576],{"class":2123},[77,154892,154235],{"class":87},[77,154894,41393],{"class":2123},[77,154896,41399],{"class":94},[77,154898,6214],{"class":87},[77,154900,154901,154903,154905,154907],{"class":79,"line":35246},[77,154902,34918],{"class":94},[77,154904,2622],{"class":87},[77,154906,154637],{"class":271},[77,154908,2628],{"class":87},[77,154910,154911],{"class":79,"line":35262},[77,154912,154459],{"class":2123},[77,154914,154915],{"class":79,"line":35268},[77,154916,4875],{"emptyLinePlaceholder":2549},[77,154918,154919],{"class":79,"line":35282},[77,154920,154921],{"class":87},"    print_student(student)\n",[77,154923,154924],{"class":79,"line":35288},[77,154925,4875],{"emptyLinePlaceholder":2549},[77,154927,154928],{"class":79,"line":35303},[77,154929,4875],{"emptyLinePlaceholder":2549},[77,154931,154932,154934,154937],{"class":79,"line":35309},[77,154933,34414],{"class":2123},[77,154935,154936],{"class":83}," print_student",[77,154938,154939],{"class":87},"(student):\n",[77,154941,154942,154944],{"class":79,"line":35318},[77,154943,33766],{"class":94},[77,154945,153537],{"class":87},[77,154947,154948,154951,154953,154955,154958,154961,154963,154966],{"class":79,"line":35324},[77,154949,154950],{"class":2123},"        f",[77,154952,2865],{"class":271},[77,154954,3509],{"class":94},[77,154956,154957],{"class":87},"student[",[77,154959,154960],{"class":271},"'student_id'",[77,154962,3552],{"class":87},[77,154964,154965],{"class":94},"}\\t",[77,154967,27601],{"class":271},[77,154969,154970,154972,154974,154976,154978,154981,154983,154985],{"class":79,"line":35333},[77,154971,154950],{"class":2123},[77,154973,2865],{"class":271},[77,154975,3509],{"class":94},[77,154977,154957],{"class":87},[77,154979,154980],{"class":271},"'name'",[77,154982,3552],{"class":87},[77,154984,154965],{"class":94},[77,154986,27601],{"class":271},[77,154988,154989,154991,154993,154995,154997,155000,155002,155004],{"class":79,"line":35339},[77,154990,154950],{"class":2123},[77,154992,2865],{"class":271},[77,154994,3509],{"class":94},[77,154996,154957],{"class":87},[77,154998,154999],{"class":271},"'age'",[77,155001,3552],{"class":87},[77,155003,154965],{"class":94},[77,155005,27601],{"class":271},[77,155007,155008,155010,155012,155014,155016,155019,155021,155023],{"class":79,"line":35345},[77,155009,154950],{"class":2123},[77,155011,2865],{"class":271},[77,155013,3509],{"class":94},[77,155015,154957],{"class":87},[77,155017,155018],{"class":271},"'score'",[77,155020,3552],{"class":87},[77,155022,3558],{"class":94},[77,155024,27601],{"class":271},[77,155026,155027],{"class":79,"line":35354},[77,155028,155029],{"class":87},"    )\n",[77,155031,155032],{"class":79,"line":35360},[77,155033,4875],{"emptyLinePlaceholder":2549},[77,155035,155036],{"class":79,"line":35371},[77,155037,4875],{"emptyLinePlaceholder":2549},[77,155039,155040,155042,155045],{"class":79,"line":35377},[77,155041,34414],{"class":2123},[77,155043,155044],{"class":83}," show_all_students",[77,155046,154059],{"class":87},[77,155048,155049,155051,155053],{"class":79,"line":35396},[77,155050,5576],{"class":2123},[77,155052,41396],{"class":2123},[77,155054,154240],{"class":87},[77,155056,155057,155059,155061,155064],{"class":79,"line":35402},[77,155058,34918],{"class":94},[77,155060,2622],{"class":87},[77,155062,155063],{"class":271},"\"暂无学生\"",[77,155065,2628],{"class":87},[77,155067,155068],{"class":79,"line":35413},[77,155069,154459],{"class":2123},[77,155071,155072],{"class":79,"line":35419},[77,155073,4875],{"emptyLinePlaceholder":2549},[77,155075,155076,155078,155080,155083,155085,155088,155090,155093,155095,155098],{"class":79,"line":35439},[77,155077,33766],{"class":94},[77,155079,2622],{"class":87},[77,155081,155082],{"class":271},"\"学号",[77,155084,3712],{"class":94},[77,155086,155087],{"class":271},"姓名",[77,155089,3712],{"class":94},[77,155091,155092],{"class":271},"年龄",[77,155094,3712],{"class":94},[77,155096,155097],{"class":271},"成绩\"",[77,155099,2628],{"class":87},[77,155101,155102,155104,155106,155108],{"class":79,"line":35455},[77,155103,5676],{"class":2123},[77,155105,154235],{"class":87},[77,155107,28511],{"class":2123},[77,155109,154240],{"class":87},[77,155111,155112],{"class":79,"line":35461},[77,155113,155114],{"class":87},"        print_student(student)\n",[77,155116,155117],{"class":79,"line":35475},[77,155118,4875],{"emptyLinePlaceholder":2549},[77,155120,155121],{"class":79,"line":35481},[77,155122,4875],{"emptyLinePlaceholder":2549},[77,155124,155125,155127,155129],{"class":79,"line":35487},[77,155126,34414],{"class":2123},[77,155128,4448],{"class":83},[77,155130,34420],{"class":87},[77,155132,155133,155136,155138],{"class":79,"line":35498},[77,155134,155135],{"class":87},"    students ",[77,155137,268],{"class":2123},[77,155139,155140],{"class":87}," load_students()\n",[77,155142,155143],{"class":79,"line":35504},[77,155144,4875],{"emptyLinePlaceholder":2549},[77,155146,155147,155149,155151],{"class":79,"line":35510},[77,155148,4726],{"class":2123},[77,155150,97728],{"class":94},[77,155152,6214],{"class":87},[77,155154,155155],{"class":79,"line":35520},[77,155156,155157],{"class":87},"        show_menu()\n",[77,155159,155160,155163,155165,155167,155169,155172],{"class":79,"line":35526},[77,155161,155162],{"class":87},"        choice ",[77,155164,268],{"class":2123},[77,155166,63053],{"class":94},[77,155168,2622],{"class":87},[77,155170,155171],{"class":271},"\"请输入操作:\"",[77,155173,2628],{"class":87},[77,155175,155176],{"class":79,"line":35537},[77,155177,4875],{"emptyLinePlaceholder":2549},[77,155179,155180,155182,155185,155187,155190],{"class":79,"line":35543},[77,155181,4972],{"class":2123},[77,155183,155184],{"class":87}," choice ",[77,155186,5424],{"class":2123},[77,155188,155189],{"class":271}," \"1\"",[77,155191,6214],{"class":87},[77,155193,155194],{"class":79,"line":35553},[77,155195,155196],{"class":87},"            add_student(students)\n",[77,155198,155199,155202,155204,155206,155209],{"class":79,"line":35558},[77,155200,155201],{"class":2123},"        elif",[77,155203,155184],{"class":87},[77,155205,5424],{"class":2123},[77,155207,155208],{"class":271}," \"2\"",[77,155210,6214],{"class":87},[77,155212,155213],{"class":79,"line":35564},[77,155214,155215],{"class":87},"            delete_student(students)\n",[77,155217,155218,155220,155222,155224,155227],{"class":79,"line":35613},[77,155219,155201],{"class":2123},[77,155221,155184],{"class":87},[77,155223,5424],{"class":2123},[77,155225,155226],{"class":271}," \"3\"",[77,155228,6214],{"class":87},[77,155230,155231],{"class":79,"line":35660},[77,155232,155233],{"class":87},"            update_student(students)\n",[77,155235,155236,155238,155240,155242,155245],{"class":79,"line":35665},[77,155237,155201],{"class":2123},[77,155239,155184],{"class":87},[77,155241,5424],{"class":2123},[77,155243,155244],{"class":271}," \"4\"",[77,155246,6214],{"class":87},[77,155248,155249],{"class":79,"line":35671},[77,155250,155251],{"class":87},"            query_student(students)\n",[77,155253,155254,155256,155258,155260,155263],{"class":79,"line":35690},[77,155255,155201],{"class":2123},[77,155257,155184],{"class":87},[77,155259,5424],{"class":2123},[77,155261,155262],{"class":271}," \"5\"",[77,155264,6214],{"class":87},[77,155266,155267],{"class":79,"line":35696},[77,155268,155269],{"class":87},"            show_all_students(students)\n",[77,155271,155272,155274,155276,155278,155281],{"class":79,"line":35716},[77,155273,155201],{"class":2123},[77,155275,155184],{"class":87},[77,155277,5424],{"class":2123},[77,155279,155280],{"class":271}," \"0\"",[77,155282,6214],{"class":87},[77,155284,155285,155287,155289,155292],{"class":79,"line":35722},[77,155286,37116],{"class":94},[77,155288,2622],{"class":87},[77,155290,155291],{"class":271},"\"退出系统\"",[77,155293,2628],{"class":87},[77,155295,155296],{"class":79,"line":35728},[77,155297,117531],{"class":2123},[77,155299,155300,155302],{"class":79,"line":35738},[77,155301,5009],{"class":2123},[77,155303,6214],{"class":87},[77,155305,155306,155308,155310,155313],{"class":79,"line":35743},[77,155307,37116],{"class":94},[77,155309,2622],{"class":87},[77,155311,155312],{"class":271},"\"输入错误\"",[77,155314,2628],{"class":87},[77,155316,155317],{"class":79,"line":35749},[77,155318,4875],{"emptyLinePlaceholder":2549},[77,155320,155321],{"class":79,"line":35765},[77,155322,4875],{"emptyLinePlaceholder":2549},[77,155324,155325,155327,155329,155331,155333],{"class":79,"line":35810},[77,155326,4008],{"class":2123},[77,155328,33687],{"class":94},[77,155330,103994],{"class":2123},[77,155332,103997],{"class":271},[77,155334,6214],{"class":87},[77,155336,155337],{"class":79,"line":35816},[77,155338,104004],{"class":87},[24,155340,155341],{},"这个项目串联了：",[139,155343,155344,155347,155350,155353,155356,155358],{},[54,155345,155346],{},"菜单循环。",[54,155348,155349],{},"函数封装。",[54,155351,155352],{},"列表字典。",[54,155354,155355],{},"JSON 读写。",[54,155357,153825],{},[54,155359,155360,30853],{},[74,155361,155362],{},"if __name__ == \"__main__\"",[14,155364,155366],{"id":155365},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[24,155368,155369],{},"可以进一步拆成两个类：",[139,155371,155372,155377],{},[54,155373,155374,155376],{},[74,155375,151666],{},"：表示单个学生。",[54,155378,155379,155381],{},[74,155380,153692],{},"：负责学生增删改查和文件保存。",[24,155383,155384],{},"示意代码：",[67,155386,155388],{"className":32846,"code":155387,"language":32848,"meta":72,"style":72},"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",[74,155389,155390,155400,155404,155408,155412,155420,155427,155433,155439,155445,155449,155457,155463,155473,155483,155493,155503,155507,155511,155517,155525,155533,155541,155549,155557,155565],{"__ignoreMap":72},[77,155391,155392,155394,155396,155398],{"class":79,"line":80},[77,155393,33205],{"class":2123},[77,155395,153250],{"class":87},[77,155397,32860],{"class":2123},[77,155399,153255],{"class":87},[77,155401,155402],{"class":79,"line":91},[77,155403,4875],{"emptyLinePlaceholder":2549},[77,155405,155406],{"class":79,"line":107},[77,155407,4875],{"emptyLinePlaceholder":2549},[77,155409,155410],{"class":79,"line":191},[77,155411,153268],{"class":83},[77,155413,155414,155416,155418],{"class":79,"line":1543},[77,155415,17166],{"class":2123},[77,155417,10372],{"class":83},[77,155419,6214],{"class":87},[77,155421,155422,155425],{"class":79,"line":1549},[77,155423,155424],{"class":87},"    student_id: ",[77,155426,153284],{"class":94},[77,155428,155429,155431],{"class":79,"line":1566},[77,155430,153281],{"class":87},[77,155432,153284],{"class":94},[77,155434,155435,155437],{"class":79,"line":1572},[77,155436,153289],{"class":87},[77,155438,153292],{"class":94},[77,155440,155441,155443],{"class":79,"line":1589},[77,155442,153297],{"class":87},[77,155444,153300],{"class":94},[77,155446,155447],{"class":79,"line":1595},[77,155448,4875],{"emptyLinePlaceholder":2549},[77,155450,155451,155453,155455],{"class":79,"line":4088},[77,155452,33269],{"class":2123},[77,155454,153448],{"class":83},[77,155456,33275],{"class":87},[77,155458,155459,155461],{"class":79,"line":4093},[77,155460,17224],{"class":2123},[77,155462,88],{"class":87},[77,155464,155465,155467,155469,155471],{"class":79,"line":4099},[77,155466,153461],{"class":271},[77,155468,98],{"class":87},[77,155470,33291],{"class":94},[77,155472,153468],{"class":87},[77,155474,155475,155477,155479,155481],{"class":79,"line":4104},[77,155476,153473],{"class":271},[77,155478,98],{"class":87},[77,155480,33291],{"class":94},[77,155482,153480],{"class":87},[77,155484,155485,155487,155489,155491],{"class":79,"line":4118},[77,155486,153485],{"class":271},[77,155488,98],{"class":87},[77,155490,33291],{"class":94},[77,155492,153492],{"class":87},[77,155494,155495,155497,155499,155501],{"class":79,"line":4123},[77,155496,153497],{"class":271},[77,155498,98],{"class":87},[77,155500,33291],{"class":94},[77,155502,153504],{"class":87},[77,155504,155505],{"class":79,"line":4129},[77,155506,5004],{"class":87},[77,155508,155509],{"class":79,"line":4150},[77,155510,4875],{"emptyLinePlaceholder":2549},[77,155512,155513,155515],{"class":79,"line":4155},[77,155514,153112],{"class":83},[77,155516,153115],{"class":94},[77,155518,155519,155521,155523],{"class":79,"line":4169},[77,155520,33269],{"class":2123},[77,155522,153525],{"class":83},[77,155524,153528],{"class":87},[77,155526,155527,155529,155531],{"class":79,"line":4174},[77,155528,17224],{"class":2123},[77,155530,153132],{"class":94},[77,155532,153537],{"class":87},[77,155534,155535,155537,155539],{"class":79,"line":4203},[77,155536,153542],{"class":87},[77,155538,153545],{"class":271},[77,155540,90272],{"class":87},[77,155542,155543,155545,155547],{"class":79,"line":4208},[77,155544,153542],{"class":87},[77,155546,65123],{"class":271},[77,155548,90272],{"class":87},[77,155550,155551,155553,155555],{"class":79,"line":4225},[77,155552,153542],{"class":87},[77,155554,71567],{"class":271},[77,155556,90272],{"class":87},[77,155558,155559,155561,155563],{"class":79,"line":4230},[77,155560,153542],{"class":87},[77,155562,153570],{"class":271},[77,155564,90272],{"class":87},[77,155566,155567],{"class":79,"line":4235},[77,155568,40592],{"class":87},[24,155570,155571],{},"管理器示意：",[67,155573,155575],{"className":32846,"code":155574,"language":32848,"meta":72,"style":72},"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",[74,155576,155577,155586,155594,155605,155609,155619,155632,155643,155650,155656,155660,155669,155678,155684,155691],{"__ignoreMap":72},[77,155578,155579,155581,155584],{"class":79,"line":80},[77,155580,17166],{"class":2123},[77,155582,155583],{"class":83}," StudentManager",[77,155585,6214],{"class":87},[77,155587,155588,155590,155592],{"class":79,"line":91},[77,155589,33269],{"class":2123},[77,155591,33272],{"class":94},[77,155593,33275],{"class":87},[77,155595,155596,155598,155601,155603],{"class":79,"line":107},[77,155597,33313],{"class":94},[77,155599,155600],{"class":87},".students ",[77,155602,268],{"class":2123},[77,155604,54296],{"class":87},[77,155606,155607],{"class":79,"line":191},[77,155608,4875],{"emptyLinePlaceholder":2549},[77,155610,155611,155613,155616],{"class":79,"line":1543},[77,155612,33269],{"class":2123},[77,155614,155615],{"class":83}," find_by_id",[77,155617,155618],{"class":87},"(self, student_id):\n",[77,155620,155621,155623,155625,155627,155629],{"class":79,"line":1549},[77,155622,5878],{"class":2123},[77,155624,154235],{"class":87},[77,155626,28511],{"class":2123},[77,155628,41339],{"class":94},[77,155630,155631],{"class":87},".students:\n",[77,155633,155634,155636,155639,155641],{"class":79,"line":1566},[77,155635,7117],{"class":2123},[77,155637,155638],{"class":87}," student.student_id ",[77,155640,5424],{"class":2123},[77,155642,154256],{"class":87},[77,155644,155645,155648],{"class":79,"line":1572},[77,155646,155647],{"class":2123},"                return",[77,155649,154263],{"class":87},[77,155651,155652,155654],{"class":79,"line":1589},[77,155653,17224],{"class":2123},[77,155655,154270],{"class":94},[77,155657,155658],{"class":79,"line":1595},[77,155659,4875],{"emptyLinePlaceholder":2549},[77,155661,155662,155664,155666],{"class":79,"line":4088},[77,155663,33269],{"class":2123},[77,155665,7684],{"class":83},[77,155667,155668],{"class":87},"(self, student):\n",[77,155670,155671,155673,155675],{"class":79,"line":4093},[77,155672,4972],{"class":2123},[77,155674,41339],{"class":94},[77,155676,155677],{"class":87},".find_by_id(student.student_id):\n",[77,155679,155680,155682],{"class":79,"line":4099},[77,155681,18202],{"class":2123},[77,155683,128239],{"class":94},[77,155685,155686,155688],{"class":79,"line":4104},[77,155687,33313],{"class":94},[77,155689,155690],{"class":87},".students.append(student)\n",[77,155692,155693,155695],{"class":79,"line":4118},[77,155694,17224],{"class":2123},[77,155696,155697],{"class":94}," True\n",[24,155699,155700],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155702,155704],{"id":155703},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[19,155706,155708],{"id":155707},"_1251-数据结构","12.5.1 数据结构",[67,155710,155712],{"className":32846,"code":155711,"language":32848,"meta":72,"style":72},"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",[74,155713,155714,155722,155753,155783,155812,155841],{"__ignoreMap":72},[77,155715,155716,155718,155720],{"class":79,"line":80},[77,155717,150563],{"class":87},[77,155719,268],{"class":2123},[77,155721,57895],{"class":87},[77,155723,155724,155726,155728,155730,155732,155734,155737,155739,155742,155744,155746,155748,155751],{"class":79,"line":91},[77,155725,150483],{"class":87},[77,155727,150095],{"class":271},[77,155729,98],{"class":87},[77,155731,150706],{"class":271},[77,155733,680],{"class":87},[77,155735,155736],{"class":271},"\"category\"",[77,155738,98],{"class":87},[77,155740,155741],{"class":271},"\"手机\"",[77,155743,680],{"class":87},[77,155745,86521],{"class":271},[77,155747,98],{"class":87},[77,155749,155750],{"class":94},"12000",[77,155752,7405],{"class":87},[77,155754,155755,155757,155759,155761,155763,155765,155767,155769,155772,155774,155776,155778,155781],{"class":79,"line":107},[77,155756,150483],{"class":87},[77,155758,150095],{"class":271},[77,155760,98],{"class":87},[77,155762,150706],{"class":271},[77,155764,680],{"class":87},[77,155766,155736],{"class":271},[77,155768,98],{"class":87},[77,155770,155771],{"class":271},"\"电脑\"",[77,155773,680],{"class":87},[77,155775,86521],{"class":271},[77,155777,98],{"class":87},[77,155779,155780],{"class":94},"18000",[77,155782,7405],{"class":87},[77,155784,155785,155787,155789,155791,155793,155795,155797,155799,155801,155803,155805,155807,155810],{"class":79,"line":191},[77,155786,150483],{"class":87},[77,155788,150095],{"class":271},[77,155790,98],{"class":87},[77,155792,150727],{"class":271},[77,155794,680],{"class":87},[77,155796,155736],{"class":271},[77,155798,98],{"class":87},[77,155800,155741],{"class":271},[77,155802,680],{"class":87},[77,155804,86521],{"class":271},[77,155806,98],{"class":87},[77,155808,155809],{"class":94},"15000",[77,155811,7405],{"class":87},[77,155813,155814,155816,155818,155820,155822,155824,155826,155828,155830,155832,155834,155836,155839],{"class":79,"line":1543},[77,155815,150483],{"class":87},[77,155817,150095],{"class":271},[77,155819,98],{"class":87},[77,155821,150727],{"class":271},[77,155823,680],{"class":87},[77,155825,155736],{"class":271},[77,155827,98],{"class":87},[77,155829,155771],{"class":271},[77,155831,680],{"class":87},[77,155833,86521],{"class":271},[77,155835,98],{"class":87},[77,155837,155838],{"class":94},"16000",[77,155840,7405],{"class":87},[77,155842,155843],{"class":79,"line":1549},[77,155844,35713],{"class":87},[19,155846,155848],{"id":155847},"_1252-按日期统计","12.5.2 按日期统计",[67,155850,155852],{"className":32846,"code":155851,"language":32848,"meta":72,"style":72},"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",[74,155853,155854,155863,155867,155878,155892,155905,155924,155928],{"__ignoreMap":72},[77,155855,155856,155859,155861],{"class":79,"line":80},[77,155857,155858],{"class":87},"daily_total ",[77,155860,268],{"class":2123},[77,155862,90304],{"class":87},[77,155864,155865],{"class":79,"line":91},[77,155866,4875],{"emptyLinePlaceholder":2549},[77,155868,155869,155871,155873,155875],{"class":79,"line":107},[77,155870,5500],{"class":2123},[77,155872,150307],{"class":87},[77,155874,28511],{"class":2123},[77,155876,155877],{"class":87}," sales:\n",[77,155879,155880,155883,155885,155888,155890],{"class":79,"line":191},[77,155881,155882],{"class":87},"    date ",[77,155884,268],{"class":2123},[77,155886,155887],{"class":87}," item[",[77,155889,150095],{"class":271},[77,155891,35713],{"class":87},[77,155893,155894,155897,155899,155901,155903],{"class":79,"line":1543},[77,155895,155896],{"class":87},"    amount ",[77,155898,268],{"class":2123},[77,155900,155887],{"class":87},[77,155902,86521],{"class":271},[77,155904,35713],{"class":87},[77,155906,155907,155910,155912,155915,155917,155919,155921],{"class":79,"line":1549},[77,155908,155909],{"class":87},"    daily_total[date] ",[77,155911,268],{"class":2123},[77,155913,155914],{"class":87}," daily_total.get(date, ",[77,155916,1939],{"class":94},[77,155918,16186],{"class":87},[77,155920,3094],{"class":2123},[77,155922,155923],{"class":87}," amount\n",[77,155925,155926],{"class":79,"line":1566},[77,155927,4875],{"emptyLinePlaceholder":2549},[77,155929,155930,155932],{"class":79,"line":1572},[77,155931,32883],{"class":94},[77,155933,155934],{"class":87},"(daily_total)\n",[19,155936,155938],{"id":155937},"_1253-按类别统计","12.5.3 按类别统计",[67,155940,155942],{"className":32846,"code":155941,"language":32848,"meta":72,"style":72},"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",[74,155943,155944,155953,155957,155967,155980,155992,156010,156014],{"__ignoreMap":72},[77,155945,155946,155949,155951],{"class":79,"line":80},[77,155947,155948],{"class":87},"category_total ",[77,155950,268],{"class":2123},[77,155952,90304],{"class":87},[77,155954,155955],{"class":79,"line":91},[77,155956,4875],{"emptyLinePlaceholder":2549},[77,155958,155959,155961,155963,155965],{"class":79,"line":107},[77,155960,5500],{"class":2123},[77,155962,150307],{"class":87},[77,155964,28511],{"class":2123},[77,155966,155877],{"class":87},[77,155968,155969,155972,155974,155976,155978],{"class":79,"line":191},[77,155970,155971],{"class":87},"    category ",[77,155973,268],{"class":2123},[77,155975,155887],{"class":87},[77,155977,155736],{"class":271},[77,155979,35713],{"class":87},[77,155981,155982,155984,155986,155988,155990],{"class":79,"line":1543},[77,155983,155896],{"class":87},[77,155985,268],{"class":2123},[77,155987,155887],{"class":87},[77,155989,86521],{"class":271},[77,155991,35713],{"class":87},[77,155993,155994,155997,155999,156002,156004,156006,156008],{"class":79,"line":1549},[77,155995,155996],{"class":87},"    category_total[category] ",[77,155998,268],{"class":2123},[77,156000,156001],{"class":87}," category_total.get(category, ",[77,156003,1939],{"class":94},[77,156005,16186],{"class":87},[77,156007,3094],{"class":2123},[77,156009,155923],{"class":87},[77,156011,156012],{"class":79,"line":1566},[77,156013,4875],{"emptyLinePlaceholder":2549},[77,156015,156016,156018],{"class":79,"line":1572},[77,156017,32883],{"class":94},[77,156019,156020],{"class":87},"(category_total)\n",[19,156022,156024],{"id":156023},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[67,156026,156028],{"className":32846,"code":156027,"language":32848,"meta":72,"style":72},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[74,156029,156030,156055],{"__ignoreMap":72},[77,156031,156032,156035,156037,156039,156042,156045,156048,156051,156053],{"class":79,"line":80},[77,156033,156034],{"class":87},"top_date, top_amount ",[77,156036,268],{"class":2123},[77,156038,8426],{"class":94},[77,156040,156041],{"class":87},"(daily_total.items(), ",[77,156043,156044],{"class":7691},"key",[77,156046,156047],{"class":2123},"=lambda",[77,156049,156050],{"class":87}," item: item[",[77,156052,2120],{"class":94},[77,156054,7132],{"class":87},[77,156056,156057,156059],{"class":79,"line":91},[77,156058,32883],{"class":94},[77,156060,156061],{"class":87},"(top_date, top_amount)\n",[14,156063,156065],{"id":156064},"_126-绘制柱状图","12.6 绘制柱状图",[67,156067,156069],{"className":32846,"code":156068,"language":32848,"meta":72,"style":72},"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",[74,156070,156071,156085,156096,156100,156108,156120,156132,156143,156147,156151,156161,156172,156186,156191,156208,156225,156241,156245],{"__ignoreMap":72},[77,156072,156073,156075,156077,156079,156081,156083],{"class":79,"line":80},[77,156074,33205],{"class":2123},[77,156076,149477],{"class":87},[77,156078,32860],{"class":2123},[77,156080,149482],{"class":87},[77,156082,33850],{"class":2123},[77,156084,149487],{"class":87},[77,156086,156087,156089,156091,156093],{"class":79,"line":91},[77,156088,33205],{"class":2123},[77,156090,149336],{"class":87},[77,156092,32860],{"class":2123},[77,156094,156095],{"class":87}," Bar\n",[77,156097,156098],{"class":79,"line":107},[77,156099,4875],{"emptyLinePlaceholder":2549},[77,156101,156102,156104,156106],{"class":79,"line":191},[77,156103,155948],{"class":87},[77,156105,268],{"class":2123},[77,156107,88],{"class":87},[77,156109,156110,156113,156115,156118],{"class":79,"line":1543},[77,156111,156112],{"class":271},"    \"手机\"",[77,156114,98],{"class":87},[77,156116,156117],{"class":94},"27000",[77,156119,33933],{"class":87},[77,156121,156122,156125,156127,156130],{"class":79,"line":1549},[77,156123,156124],{"class":271},"    \"电脑\"",[77,156126,98],{"class":87},[77,156128,156129],{"class":94},"34000",[77,156131,33933],{"class":87},[77,156133,156134,156137,156139,156141],{"class":79,"line":1566},[77,156135,156136],{"class":271},"    \"耳机\"",[77,156138,98],{"class":87},[77,156140,126831],{"class":94},[77,156142,33933],{"class":87},[77,156144,156145],{"class":79,"line":1572},[77,156146,110],{"class":87},[77,156148,156149],{"class":79,"line":1589},[77,156150,4875],{"emptyLinePlaceholder":2549},[77,156152,156153,156156,156158],{"class":79,"line":1595},[77,156154,156155],{"class":87},"bar ",[77,156157,268],{"class":2123},[77,156159,156160],{"class":87}," Bar()\n",[77,156162,156163,156166,156169],{"class":79,"line":4088},[77,156164,156165],{"class":87},"bar.add_xaxis(",[77,156167,156168],{"class":94},"list",[77,156170,156171],{"class":87},"(category_total.keys()))\n",[77,156173,156174,156177,156179,156181,156183],{"class":79,"line":4093},[77,156175,156176],{"class":87},"bar.add_yaxis(",[77,156178,149393],{"class":271},[77,156180,680],{"class":87},[77,156182,156168],{"class":94},[77,156184,156185],{"class":87},"(category_total.values()))\n",[77,156187,156188],{"class":79,"line":4099},[77,156189,156190],{"class":87},"bar.set_global_opts(\n",[77,156192,156193,156195,156197,156199,156201,156203,156206],{"class":79,"line":4104},[77,156194,149571],{"class":7691},[77,156196,268],{"class":2123},[77,156198,149576],{"class":87},[77,156200,53871],{"class":7691},[77,156202,268],{"class":2123},[77,156204,156205],{"class":271},"\"品类销售额\"",[77,156207,40513],{"class":87},[77,156209,156210,156212,156214,156216,156218,156220,156223],{"class":79,"line":4118},[77,156211,149590],{"class":7691},[77,156213,268],{"class":2123},[77,156215,149595],{"class":87},[77,156217,82247],{"class":7691},[77,156219,268],{"class":2123},[77,156221,156222],{"class":271},"\"品类\"",[77,156224,40513],{"class":87},[77,156226,156227,156229,156231,156233,156235,156237,156239],{"class":79,"line":4123},[77,156228,149609],{"class":7691},[77,156230,268],{"class":2123},[77,156232,149595],{"class":87},[77,156234,82247],{"class":7691},[77,156236,268],{"class":2123},[77,156238,149393],{"class":271},[77,156240,40513],{"class":87},[77,156242,156243],{"class":79,"line":4129},[77,156244,2628],{"class":87},[77,156246,156247,156250,156253],{"class":79,"line":4150},[77,156248,156249],{"class":87},"bar.render(",[77,156251,156252],{"class":271},"\"category_sales.html\"",[77,156254,2628],{"class":87},[14,156256,156258],{"id":156257},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[24,156260,156261],{},"时间线适合展示不同日期、月份、年份的数据变化。",[67,156263,156265],{"className":32846,"code":156264,"language":32848,"meta":72,"style":72},"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",[74,156266,156267,156281,156292,156296,156304,156328,156351,156376,156380,156384,156394,156398,156409,156418,156428,156442,156473,156478,156482],{"__ignoreMap":72},[77,156268,156269,156271,156273,156275,156277,156279],{"class":79,"line":80},[77,156270,33205],{"class":2123},[77,156272,149477],{"class":87},[77,156274,32860],{"class":2123},[77,156276,149482],{"class":87},[77,156278,33850],{"class":2123},[77,156280,149487],{"class":87},[77,156282,156283,156285,156287,156289],{"class":79,"line":91},[77,156284,33205],{"class":2123},[77,156286,149336],{"class":87},[77,156288,32860],{"class":2123},[77,156290,156291],{"class":87}," Bar, Timeline\n",[77,156293,156294],{"class":79,"line":107},[77,156295,4875],{"emptyLinePlaceholder":2549},[77,156297,156298,156300,156302],{"class":79,"line":191},[77,156299,104093],{"class":87},[77,156301,268],{"class":2123},[77,156303,88],{"class":87},[77,156305,156306,156309,156312,156314,156316,156318,156320,156322,156324,156326],{"class":79,"line":1543},[77,156307,156308],{"class":271},"    \"2024-10-01\"",[77,156310,156311],{"class":87},": {",[77,156313,155741],{"class":271},[77,156315,98],{"class":87},[77,156317,155750],{"class":94},[77,156319,680],{"class":87},[77,156321,155771],{"class":271},[77,156323,98],{"class":87},[77,156325,155780],{"class":94},[77,156327,7405],{"class":87},[77,156329,156330,156333,156335,156337,156339,156341,156343,156345,156347,156349],{"class":79,"line":1549},[77,156331,156332],{"class":271},"    \"2024-10-02\"",[77,156334,156311],{"class":87},[77,156336,155741],{"class":271},[77,156338,98],{"class":87},[77,156340,155809],{"class":94},[77,156342,680],{"class":87},[77,156344,155771],{"class":271},[77,156346,98],{"class":87},[77,156348,155838],{"class":94},[77,156350,7405],{"class":87},[77,156352,156353,156356,156358,156360,156362,156365,156367,156369,156371,156374],{"class":79,"line":1566},[77,156354,156355],{"class":271},"    \"2024-10-03\"",[77,156357,156311],{"class":87},[77,156359,155741],{"class":271},[77,156361,98],{"class":87},[77,156363,156364],{"class":94},"17000",[77,156366,680],{"class":87},[77,156368,155771],{"class":271},[77,156370,98],{"class":87},[77,156372,156373],{"class":94},"19000",[77,156375,7405],{"class":87},[77,156377,156378],{"class":79,"line":1572},[77,156379,110],{"class":87},[77,156381,156382],{"class":79,"line":1589},[77,156383,4875],{"emptyLinePlaceholder":2549},[77,156385,156386,156389,156391],{"class":79,"line":1595},[77,156387,156388],{"class":87},"timeline ",[77,156390,268],{"class":2123},[77,156392,156393],{"class":87}," Timeline()\n",[77,156395,156396],{"class":79,"line":4088},[77,156397,4875],{"emptyLinePlaceholder":2549},[77,156399,156400,156402,156405,156407],{"class":79,"line":4093},[77,156401,5500],{"class":2123},[77,156403,156404],{"class":87}," date, category_data ",[77,156406,28511],{"class":2123},[77,156408,151246],{"class":87},[77,156410,156411,156414,156416],{"class":79,"line":4099},[77,156412,156413],{"class":87},"    bar ",[77,156415,268],{"class":2123},[77,156417,156160],{"class":87},[77,156419,156420,156423,156425],{"class":79,"line":4104},[77,156421,156422],{"class":87},"    bar.add_xaxis(",[77,156424,156168],{"class":94},[77,156426,156427],{"class":87},"(category_data.keys()))\n",[77,156429,156430,156433,156435,156437,156439],{"class":79,"line":4118},[77,156431,156432],{"class":87},"    bar.add_yaxis(",[77,156434,149393],{"class":271},[77,156436,680],{"class":87},[77,156438,156168],{"class":94},[77,156440,156441],{"class":87},"(category_data.values()))\n",[77,156443,156444,156447,156450,156452,156454,156456,156458,156460,156462,156464,156466,156468,156471],{"class":79,"line":4123},[77,156445,156446],{"class":87},"    bar.set_global_opts(",[77,156448,156449],{"class":7691},"title_opts",[77,156451,268],{"class":2123},[77,156453,149576],{"class":87},[77,156455,53871],{"class":7691},[77,156457,268],{"class":2123},[77,156459,2672],{"class":2123},[77,156461,2865],{"class":271},[77,156463,3509],{"class":94},[77,156465,76365],{"class":87},[77,156467,3558],{"class":94},[77,156469,156470],{"class":271},"销售额\"",[77,156472,32965],{"class":87},[77,156474,156475],{"class":79,"line":4129},[77,156476,156477],{"class":87},"    timeline.add(bar, date)\n",[77,156479,156480],{"class":79,"line":4150},[77,156481,4875],{"emptyLinePlaceholder":2549},[77,156483,156484,156487,156490],{"class":79,"line":4155},[77,156485,156486],{"class":87},"timeline.render(",[77,156488,156489],{"class":271},"\"timeline_sales.html\"",[77,156491,2628],{"class":87},[14,156493,156495],{"id":156494},"_128-绘制地图","12.8 绘制地图",[24,156497,156498],{},"地图适合展示地区数据。",[67,156500,156502],{"className":32846,"code":156501,"language":32848,"meta":72,"style":72},"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",[74,156503,156504,156518,156529,156533,156541,156554,156566,156579,156592,156596,156600,156610,156625,156630,156647,156666,156670],{"__ignoreMap":72},[77,156505,156506,156508,156510,156512,156514,156516],{"class":79,"line":80},[77,156507,33205],{"class":2123},[77,156509,149477],{"class":87},[77,156511,32860],{"class":2123},[77,156513,149482],{"class":87},[77,156515,33850],{"class":2123},[77,156517,149487],{"class":87},[77,156519,156520,156522,156524,156526],{"class":79,"line":91},[77,156521,33205],{"class":2123},[77,156523,149336],{"class":87},[77,156525,32860],{"class":2123},[77,156527,156528],{"class":87}," Map\n",[77,156530,156531],{"class":79,"line":107},[77,156532,4875],{"emptyLinePlaceholder":2549},[77,156534,156535,156537,156539],{"class":79,"line":191},[77,156536,104093],{"class":87},[77,156538,268],{"class":2123},[77,156540,57895],{"class":87},[77,156542,156543,156546,156548,156550,156552],{"class":79,"line":1543},[77,156544,156545],{"class":87},"    (",[77,156547,71712],{"class":271},[77,156549,680],{"class":87},[77,156551,3430],{"class":94},[77,156553,40513],{"class":87},[77,156555,156556,156558,156560,156562,156564],{"class":79,"line":1549},[77,156557,156545],{"class":87},[77,156559,71732],{"class":271},[77,156561,680],{"class":87},[77,156563,149410],{"class":94},[77,156565,40513],{"class":87},[77,156567,156568,156570,156573,156575,156577],{"class":79,"line":1566},[77,156569,156545],{"class":87},[77,156571,156572],{"class":271},"\"广东\"",[77,156574,680],{"class":87},[77,156576,4198],{"class":94},[77,156578,40513],{"class":87},[77,156580,156581,156583,156586,156588,156590],{"class":79,"line":1572},[77,156582,156545],{"class":87},[77,156584,156585],{"class":271},"\"浙江\"",[77,156587,680],{"class":87},[77,156589,149415],{"class":94},[77,156591,40513],{"class":87},[77,156593,156594],{"class":79,"line":1589},[77,156595,35713],{"class":87},[77,156597,156598],{"class":79,"line":1595},[77,156599,4875],{"emptyLinePlaceholder":2549},[77,156601,156602,156605,156607],{"class":79,"line":4088},[77,156603,156604],{"class":87},"map_chart ",[77,156606,268],{"class":2123},[77,156608,156609],{"class":87}," Map()\n",[77,156611,156612,156615,156617,156620,156623],{"class":79,"line":4093},[77,156613,156614],{"class":87},"map_chart.add(",[77,156616,149393],{"class":271},[77,156618,156619],{"class":87},", data, ",[77,156621,156622],{"class":271},"\"china\"",[77,156624,2628],{"class":87},[77,156626,156627],{"class":79,"line":4099},[77,156628,156629],{"class":87},"map_chart.set_global_opts(\n",[77,156631,156632,156634,156636,156638,156640,156642,156645],{"class":79,"line":4104},[77,156633,149571],{"class":7691},[77,156635,268],{"class":2123},[77,156637,149576],{"class":87},[77,156639,53871],{"class":7691},[77,156641,268],{"class":2123},[77,156643,156644],{"class":271},"\"地区销售额\"",[77,156646,40513],{"class":87},[77,156648,156649,156652,156654,156657,156660,156662,156664],{"class":79,"line":4118},[77,156650,156651],{"class":7691},"    visualmap_opts",[77,156653,268],{"class":2123},[77,156655,156656],{"class":87},"opts.VisualMapOpts(",[77,156658,156659],{"class":7691},"max_",[77,156661,268],{"class":2123},[77,156663,4198],{"class":94},[77,156665,40513],{"class":87},[77,156667,156668],{"class":79,"line":4123},[77,156669,2628],{"class":87},[77,156671,156672,156675,156678],{"class":79,"line":4129},[77,156673,156674],{"class":87},"map_chart.render(",[77,156676,156677],{"class":271},"\"map_sales.html\"",[77,156679,2628],{"class":87},[24,156681,156682],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156684,156686],{"id":156685},"_129-项目拆分建议","12.9 项目拆分建议",[24,156688,156689],{},"当代码超过一个文件时，可以这样组织：",[67,156691,156694],{"className":156692,"code":156693,"language":7662,"meta":72},[7660],"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",[74,156695,156693],{"__ignoreMap":72},[24,156697,156698],{},"职责：",[139,156700,156701,156707,156713,156719],{},[54,156702,156703,156706],{},[74,156704,156705],{},"main.py","：程序入口。",[54,156708,156709,156712],{},[74,156710,156711],{},"file_utils.py","：读写 JSON。",[54,156714,156715,156718],{},[74,156716,156717],{},"sales_service.py","：统计销售数据。",[54,156720,156721,156724],{},[74,156722,156723],{},"chart_builder.py","：生成图表。",[14,156726,156728],{"id":156727},"_1210-python基础复习清单","12.10 Python基础复习清单",[24,156730,156731],{},"语法基础：",[139,156733,156734,156737,156740,156743],{},[54,156735,156736],{},"会写变量、注释、输入输出。",[54,156738,156739],{},"会使用 int、float、str、bool。",[54,156741,156742],{},"会做类型转换。",[54,156744,156745],{},"会使用 f-string 格式化输出。",[24,156747,156748],{},"流程控制：",[139,156750,156751,156757,156763,156771],{},[54,156752,156753,156754,30853],{},"会写 ",[74,156755,156756],{},"if elif else",[54,156758,156753,156759,513,156761,30853],{},[74,156760,111096],{},[74,156762,5500],{},[54,156764,156765,156766,513,156768,30853],{},"理解 ",[74,156767,4528],{},[74,156769,156770],{},"continue",[54,156772,156773],{},"能写嵌套循环。",[24,156775,156776],{},"函数：",[139,156778,156779,156782,156785,156788],{},[54,156780,156781],{},"会定义和调用函数。",[54,156783,156784],{},"理解参数和返回值。",[54,156786,156787],{},"知道局部变量和全局变量。",[54,156789,156790],{},"会使用默认参数、关键字参数、不定长参数。",[24,156792,156793],{},"容器：",[139,156795,156796,156799,156802,156805,156808],{},[54,156797,156798],{},"会使用列表增删改查。",[54,156800,156801],{},"会遍历列表、字典。",[54,156803,156804],{},"会使用切片。",[54,156806,156807],{},"会用集合去重。",[54,156809,156810],{},"会处理列表嵌套字典。",[24,156812,156813],{},"文件和模块：",[139,156815,156816,156819,156822,156825,156828],{},[54,156817,156818],{},"会读写文本文件。",[54,156820,156821],{},"会读写 JSON。",[54,156823,156824],{},"会捕获常见异常。",[54,156826,156827],{},"会导入模块和第三方包。",[54,156829,156830],{},"会创建简单包结构。",[24,156832,156833],{},"项目能力：",[139,156835,156836,156839,156842,156845,156848],{},[54,156837,156838],{},"能把代码拆成函数。",[54,156840,156841],{},"能把数据保存到文件。",[54,156843,156844],{},"能处理用户输入错误。",[54,156846,156847],{},"能写一个完整菜单程序。",[54,156849,156850],{},"能用 pyecharts 生成图表。",[14,156852,156854],{"id":156853},"_1211-推荐练习顺序","12.11 推荐练习顺序",[139,156856,156857,156860,156863,156866,156869,156872,156875,156878],{},[54,156858,156859],{},"猜数字游戏。",[54,156861,156862],{},"ATM 菜单程序。",[54,156864,156865],{},"学生成绩统计。",[54,156867,156868],{},"学生管理系统函数版。",[54,156870,156871],{},"学生管理系统文件持久化版。",[54,156873,156874],{},"学生管理系统面向对象版。",[54,156876,156877],{},"销售数据统计。",[54,156879,156880],{},"销售数据可视化。",[14,156882,156884],{"id":156883},"_1212-常见学习误区","12.12 常见学习误区",[139,156886,156887,156890,156893,156896,156899,156902,156905],{},[54,156888,156889],{},"只看视频不敲代码。",[54,156891,156892],{},"一报错就复制错误去搜，不先读报错位置。",[54,156894,156895],{},"变量名随便写，后续自己看不懂。",[54,156897,156898],{},"所有代码都写在一个文件一个函数里。",[54,156900,156901],{},"不保存练习代码，复习时没有材料。",[54,156903,156904],{},"还没掌握列表字典就急着学框架。",[54,156906,156907],{},"不会读官方文档，只依赖教程。",[14,156909,156911],{"id":156910},"_1213-如何读报错","12.13 如何读报错",[24,156913,156914],{},"报错通常从下往上看最后几行。",[24,156916,17606],{},[67,156918,156921],{"className":156919,"code":156920,"language":7662,"meta":72},[7660],"ValueError: invalid literal for int() with base 10: 'abc'\n",[74,156922,156920],{"__ignoreMap":72},[24,156924,27067],{},[139,156926,156927,156933,156943],{},[54,156928,156929,156930,30853],{},"异常类型是 ",[74,156931,156932],{},"ValueError",[54,156934,109778,156935,156938,156939,156942],{},[74,156936,156937],{},"int()"," 无法把 ",[74,156940,156941],{},"'abc'"," 转成整数。",[54,156944,156945],{},"应该检查输入内容或增加异常处理。",[24,156947,156948],{},"再看文件名和行号：",[67,156950,156953],{"className":156951,"code":156952,"language":7662,"meta":72},[7660],"File \"main.py\", line 10, in \u003Cmodule>\n",[74,156954,156952],{"__ignoreMap":72},[24,156956,156957,156958,156960],{},"表示错误发生在 ",[74,156959,156705],{}," 第 10 行。",[14,156962,156964],{"id":156963},"_1214-后续学习方向","12.14 后续学习方向",[24,156966,156967],{},"Python 基础完成后，可以按兴趣选择方向：",[139,156969,156970,156982,156991,157003,157014,157023,157033],{},[54,156971,156972,156973,2828,156976,2828,156979,30853],{},"自动化办公：",[74,156974,156975],{},"openpyxl",[74,156977,156978],{},"python-docx",[74,156980,156981],{},"pdfplumber",[54,156983,156984,156985,2828,156987,2828,156989,30853],{},"数据分析：",[74,156986,103062],{},[74,156988,148283],{},[74,156990,148291],{},[54,156992,156993,156994,2828,156997,2828,157000,30853],{},"Web 后端：",[74,156995,156996],{},"Flask",[74,156998,156999],{},"FastAPI",[74,157001,157002],{},"Django",[54,157004,157005,157006,2828,157008,2828,157011,30853],{},"爬虫：",[74,157007,148268],{},[74,157009,157010],{},"BeautifulSoup",[74,157012,157013],{},"Scrapy",[54,157015,157016,157017,2828,157019,157022],{},"测试开发：",[74,157018,148315],{},[74,157020,157021],{},"selenium","、接口测试。",[54,157024,157025,157026,2828,157028,2828,157030,30853],{},"人工智能：",[74,157027,103062],{},[74,157029,148283],{},[74,157031,157032],{},"pytorch",[54,157034,157035,157036,2828,157038,2828,157041,30853],{},"运维脚本：",[74,157037,147884],{},[74,157039,157040],{},"subprocess",[74,157042,157043],{},"paramiko",[24,157045,157046],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157048,157050],{"id":157049},"_1215-结课练习","12.15 结课练习",[139,157052,157053,157056,157059,157062,157065,157068,157071,157074],{},[54,157054,157055],{},"完成函数版学生管理系统。",[54,157057,157058],{},"给学生管理系统增加 JSON 持久化。",[54,157060,157061],{},"给学生管理系统增加异常处理。",[54,157063,157064],{},"把学生管理系统改成面向对象版。",[54,157066,157067],{},"使用 pyecharts 绘制学生成绩柱状图。",[54,157069,157070],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[54,157072,157073],{},"按品类统计销售额并绘制柱状图。",[54,157075,157076],{},"写一份自己的 Python 学习路线图。",[2520,157078,157079],{},"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":72,"searchDepth":91,"depth":91,"links":157081},[157082,157083,157086,157087,157088,157094,157095,157096,157097,157098,157099,157100,157101,157102,157103],{"id":153798,"depth":91,"text":153799},{"id":153848,"depth":91,"text":153849,"children":157084},[157085],{"id":153852,"depth":107,"text":153853},{"id":153891,"depth":91,"text":153892},{"id":155365,"depth":91,"text":155366},{"id":155703,"depth":91,"text":155704,"children":157089},[157090,157091,157092,157093],{"id":155707,"depth":107,"text":155708},{"id":155847,"depth":107,"text":155848},{"id":155937,"depth":107,"text":155938},{"id":156023,"depth":107,"text":156024},{"id":156064,"depth":91,"text":156065},{"id":156257,"depth":91,"text":156258},{"id":156494,"depth":91,"text":156495},{"id":156685,"depth":91,"text":156686},{"id":156727,"depth":91,"text":156728},{"id":156853,"depth":91,"text":156854},{"id":156883,"depth":91,"text":156884},{"id":156910,"depth":91,"text":156911},{"id":156963,"depth":91,"text":156964},{"id":157049,"depth":91,"text":157050},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153790,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157110,"title":157111,"body":157112,"description":2546,"extension":2547,"meta":159581,"navigation":2549,"path":159582,"seo":159583,"stem":159584,"__hash__":159585},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157113,"toc":159556},[157114,157117,157121,157124,157127,157147,157150,157173,157176,157179,157201,157204,157226,157230,157233,157273,157276,157397,157401,157404,157444,157447,157471,157474,157478,157481,157495,157528,157531,157566,157569,157592,157595,157628,157631,157633,157639,157714,157717,157723,157740,157780,157784,157787,157833,157835,157873,157876,157911,157914,157949,157952,157984,157987,158006,158010,158014,158127,158129,158204,158208,158254,158257,158283,158292,158296,158299,158362,158370,158398,158402,158442,158507,158511,158514,158553,158556,158601,158604,158665,158669,158696,158699,158727,158730,158734,158738,158803,158806,158844,158847,158879,158883,158982,158986,158989,159062,159065,159113,159117,159123,159163,159166,159213,159216,159265,159269,159271,159285,159287,159468,159472,159499,159519,159526,159530,159547,159553],[10,157115,157111],{"id":157116},"_2-基础语法变量与字符串",[14,157118,157120],{"id":157119},"_21-注释","2.1 注释",[24,157122,157123],{},"注释是给人看的说明文字，不会被 Python 执行。",[24,157125,157126],{},"单行注释：",[67,157128,157130],{"className":32846,"code":157129,"language":32848,"meta":72,"style":72},"# 这是单行注释\nprint(\"hello\")\n",[74,157131,157132,157137],{"__ignoreMap":72},[77,157133,157134],{"class":79,"line":80},[77,157135,157136],{"class":323},"# 这是单行注释\n",[77,157138,157139,157141,157143,157145],{"class":79,"line":91},[77,157140,32883],{"class":94},[77,157142,2622],{"class":87},[77,157144,8319],{"class":271},[77,157146,2628],{"class":87},[24,157148,157149],{},"多行说明常用三引号：",[67,157151,157153],{"className":32846,"code":157152,"language":32848,"meta":72,"style":72},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[74,157154,157155,157159,157164,157169],{"__ignoreMap":72},[77,157156,157157],{"class":79,"line":80},[77,157158,98134],{"class":271},[77,157160,157161],{"class":79,"line":91},[77,157162,157163],{"class":271},"这是多行说明。\n",[77,157165,157166],{"class":79,"line":107},[77,157167,157168],{"class":271},"常用于文件顶部说明、函数说明等。\n",[77,157170,157171],{"class":79,"line":191},[77,157172,98134],{"class":271},[24,157174,157175],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[24,157177,157178],{},"不好：",[67,157180,157182],{"className":32846,"code":157181,"language":32848,"meta":72,"style":72},"# age 加 1\nage = age + 1\n",[74,157183,157184,157189],{"__ignoreMap":72},[77,157185,157186],{"class":79,"line":80},[77,157187,157188],{"class":323},"# age 加 1\n",[77,157190,157191,157193,157195,157197,157199],{"class":79,"line":91},[77,157192,148644],{"class":87},[77,157194,268],{"class":2123},[77,157196,18177],{"class":87},[77,157198,3094],{"class":2123},[77,157200,58147],{"class":94},[24,157202,157203],{},"较好：",[67,157205,157207],{"className":32846,"code":157206,"language":32848,"meta":72,"style":72},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[74,157208,157209,157214],{"__ignoreMap":72},[77,157210,157211],{"class":79,"line":80},[77,157212,157213],{"class":323},"# 用户过完生日后，年龄增加一岁\n",[77,157215,157216,157218,157220,157222,157224],{"class":79,"line":91},[77,157217,148644],{"class":87},[77,157219,268],{"class":2123},[77,157221,18177],{"class":87},[77,157223,3094],{"class":2123},[77,157225,58147],{"class":94},[14,157227,157229],{"id":157228},"_22-字面量","2.2 字面量",[24,157231,157232],{},"字面量就是代码中直接写出来的数据。",[67,157234,157236],{"className":32846,"code":157235,"language":32848,"meta":72,"style":72},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[74,157237,157238,157245,157252,157259,157266],{"__ignoreMap":72},[77,157239,157240,157242],{"class":79,"line":80},[77,157241,2925],{"class":94},[77,157243,157244],{"class":323},"          # 整数\n",[77,157246,157247,157249],{"class":79,"line":91},[77,157248,2669],{"class":94},[77,157250,157251],{"class":323},"         # 小数\n",[77,157253,157254,157256],{"class":79,"line":107},[77,157255,8319],{"class":271},[77,157257,157258],{"class":323},"      # 字符串\n",[77,157260,157261,157263],{"class":79,"line":191},[77,157262,33943],{"class":94},[77,157264,157265],{"class":323},"         # 布尔值\n",[77,157267,157268,157270],{"class":79,"line":1543},[77,157269,98122],{"class":94},[77,157271,157272],{"class":323},"         # 空值\n",[24,157274,157275],{},"常见字面量类型：",[2755,157277,157278,157288],{},[2758,157279,157280],{},[2761,157281,157282,157284,157286],{},[2764,157283,26204],{},[2764,157285,29960],{},[2764,157287,28337],{},[2801,157289,157290,157301,157312,157323,157335,157347,157359,157372,157384],{},[2761,157291,157292,157294,157298],{},[2806,157293,2625],{},[2806,157295,157296],{},[74,157297,2925],{},[2806,157299,157300],{},"整数",[2761,157302,157303,157305,157309],{},[2806,157304,2661],{},[2806,157306,157307],{},[74,157308,2669],{},[2806,157310,157311],{},"浮点数",[2761,157313,157314,157316,157320],{},[2806,157315,3780],{},[2806,157317,157318],{},[74,157319,8319],{},[2806,157321,157322],{},"字符串",[2761,157324,157325,157327,157333],{},[2806,157326,3832],{},[2806,157328,157329,2828,157331],{},[74,157330,33943],{},[74,157332,36453],{},[2806,157334,68458],{},[2761,157336,157337,157340,157344],{},[2806,157338,157339],{},"NoneType",[2806,157341,157342],{},[74,157343,98122],{},[2806,157345,157346],{},"空值",[2761,157348,157349,157351,157356],{},[2806,157350,156168],{},[2806,157352,157353],{},[74,157354,157355],{},"[1, 2, 3]",[2806,157357,157358],{},"列表",[2761,157360,157361,157364,157369],{},[2806,157362,157363],{},"tuple",[2806,157365,157366],{},[74,157367,157368],{},"(1, 2, 3)",[2806,157370,157371],{},"元组",[2761,157373,157374,157376,157381],{},[2806,157375,116979],{},[2806,157377,157378],{},[74,157379,157380],{},"{\"name\": \"张三\"}",[2806,157382,157383],{},"字典",[2761,157385,157386,157389,157394],{},[2806,157387,157388],{},"set",[2806,157390,157391],{},[74,157392,157393],{},"{1, 2, 3}",[2806,157395,157396],{},"集合",[14,157398,157400],{"id":157399},"_23-变量","2.3 变量",[24,157402,157403],{},"变量是保存数据的名字。",[67,157405,157407],{"className":32846,"code":157406,"language":32848,"meta":72,"style":72},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[74,157408,157409,157417,157425,157435],{"__ignoreMap":72},[77,157410,157411,157413,157415],{"class":79,"line":80},[77,157412,148634],{"class":87},[77,157414,268],{"class":2123},[77,157416,151451],{"class":271},[77,157418,157419,157421,157423],{"class":79,"line":91},[77,157420,148644],{"class":87},[77,157422,268],{"class":2123},[77,157424,148649],{"class":94},[77,157426,157427,157430,157432],{"class":79,"line":107},[77,157428,157429],{"class":87},"height ",[77,157431,268],{"class":2123},[77,157433,157434],{"class":94}," 1.75\n",[77,157436,157437,157440,157442],{"class":79,"line":191},[77,157438,157439],{"class":87},"is_student ",[77,157441,268],{"class":2123},[77,157443,155697],{"class":94},[24,157445,157446],{},"Python 的变量不需要提前声明类型：",[67,157448,157450],{"className":32846,"code":157449,"language":32848,"meta":72,"style":72},"score = 100\nscore = \"满分\"\n",[74,157451,157452,157462],{"__ignoreMap":72},[77,157453,157454,157457,157459],{"class":79,"line":80},[77,157455,157456],{"class":87},"score ",[77,157458,268],{"class":2123},[77,157460,157461],{"class":94}," 100\n",[77,157463,157464,157466,157468],{"class":79,"line":91},[77,157465,157456],{"class":87},[77,157467,268],{"class":2123},[77,157469,157470],{"class":271}," \"满分\"\n",[24,157472,157473],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157475,157477],{"id":157476},"_24-变量命名规则","2.4 变量命名规则",[24,157479,157480],{},"硬性规则：",[139,157482,157483,157486,157489,157492],{},[54,157484,157485],{},"只能由字母、数字、下划线组成。",[54,157487,157488],{},"不能以数字开头。",[54,157490,157491],{},"不能使用 Python 关键字。",[54,157493,157494],{},"区分大小写。",[67,157496,157498],{"className":32846,"code":157497,"language":32848,"meta":72,"style":72},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[74,157499,157500,157509,157518],{"__ignoreMap":72},[77,157501,157502,157505,157507],{"class":79,"line":80},[77,157503,157504],{"class":87},"user_name ",[77,157506,268],{"class":2123},[77,157508,148639],{"class":271},[77,157510,157511,157514,157516],{"class":79,"line":91},[77,157512,157513],{"class":87},"age2 ",[77,157515,268],{"class":2123},[77,157517,148649],{"class":94},[77,157519,157520,157523,157525],{"class":79,"line":107},[77,157521,157522],{"class":87},"_token ",[77,157524,268],{"class":2123},[77,157526,157527],{"class":271}," \"abc\"\n",[24,157529,157530],{},"错误写法：",[67,157532,157534],{"className":32846,"code":157533,"language":32848,"meta":72,"style":72},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[74,157535,157536,157545,157557],{"__ignoreMap":72},[77,157537,157538,157541,157543],{"class":79,"line":80},[77,157539,157540],{"class":79841},"2age",[77,157542,16036],{"class":2123},[77,157544,148649],{"class":94},[77,157546,157547,157549,157551,157553,157555],{"class":79,"line":91},[77,157548,133995],{"class":87},[77,157550,3145],{"class":2123},[77,157552,148634],{"class":87},[77,157554,268],{"class":2123},[77,157556,148639],{"class":271},[77,157558,157559,157561,157563],{"class":79,"line":107},[77,157560,17166],{"class":2123},[77,157562,16036],{"class":2123},[77,157564,157565],{"class":271}," \"一班\"\n",[24,157567,157568],{},"查看关键字：",[67,157570,157572],{"className":32846,"code":157571,"language":32848,"meta":72,"style":72},"import keyword\n\nprint(keyword.kwlist)\n",[74,157573,157574,157581,157585],{"__ignoreMap":72},[77,157575,157576,157578],{"class":79,"line":80},[77,157577,32860],{"class":2123},[77,157579,157580],{"class":87}," keyword\n",[77,157582,157583],{"class":79,"line":91},[77,157584,4875],{"emptyLinePlaceholder":2549},[77,157586,157587,157589],{"class":79,"line":107},[77,157588,32883],{"class":94},[77,157590,157591],{"class":87},"(keyword.kwlist)\n",[24,157593,157594],{},"推荐命名风格：",[67,157596,157598],{"className":32846,"code":157597,"language":32848,"meta":72,"style":72},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[74,157599,157600,157609,157619],{"__ignoreMap":72},[77,157601,157602,157605,157607],{"class":79,"line":80},[77,157603,157604],{"class":87},"student_name ",[77,157606,268],{"class":2123},[77,157608,151451],{"class":271},[77,157610,157611,157614,157616],{"class":79,"line":91},[77,157612,157613],{"class":87},"total_price ",[77,157615,268],{"class":2123},[77,157617,157618],{"class":94}," 99.8\n",[77,157620,157621,157624,157626],{"class":79,"line":107},[77,157622,157623],{"class":87},"is_finished ",[77,157625,268],{"class":2123},[77,157627,128239],{"class":94},[24,157629,157630],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157632,53198],{"id":53197},[24,157634,106799,157635,157638],{},[74,157636,157637],{},"type()"," 查看数据类型：",[67,157640,157642],{"className":32846,"code":157641,"language":32848,"meta":72,"style":72},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[74,157643,157644,157658,157672,157686,157700],{"__ignoreMap":72},[77,157645,157646,157648,157650,157652,157654,157656],{"class":79,"line":80},[77,157647,32883],{"class":94},[77,157649,2622],{"class":87},[77,157651,105540],{"class":94},[77,157653,2622],{"class":87},[77,157655,2925],{"class":94},[77,157657,32965],{"class":87},[77,157659,157660,157662,157664,157666,157668,157670],{"class":79,"line":91},[77,157661,32883],{"class":94},[77,157663,2622],{"class":87},[77,157665,105540],{"class":94},[77,157667,2622],{"class":87},[77,157669,2669],{"class":94},[77,157671,32965],{"class":87},[77,157673,157674,157676,157678,157680,157682,157684],{"class":79,"line":107},[77,157675,32883],{"class":94},[77,157677,2622],{"class":87},[77,157679,105540],{"class":94},[77,157681,2622],{"class":87},[77,157683,8319],{"class":271},[77,157685,32965],{"class":87},[77,157687,157688,157690,157692,157694,157696,157698],{"class":79,"line":191},[77,157689,32883],{"class":94},[77,157691,2622],{"class":87},[77,157693,105540],{"class":94},[77,157695,2622],{"class":87},[77,157697,33943],{"class":94},[77,157699,32965],{"class":87},[77,157701,157702,157704,157706,157708,157710,157712],{"class":79,"line":1543},[77,157703,32883],{"class":94},[77,157705,2622],{"class":87},[77,157707,105540],{"class":94},[77,157709,2622],{"class":87},[77,157711,98122],{"class":94},[77,157713,32965],{"class":87},[24,157715,157716],{},"输出类似：",[67,157718,157721],{"className":157719,"code":157720,"language":7662,"meta":72},[7660],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[74,157722,157720],{"__ignoreMap":72},[24,157724,1988,157725,109716,157727,157729,157730,157732,157733,23970,157735,157732,157737,157739],{},[74,157726,3832],{},[74,157728,2625],{}," 的子类，",[74,157731,33943],{}," 可以当作 ",[74,157734,2120],{},[74,157736,36453],{},[74,157738,1939],{},"，但业务代码中不要滥用。",[67,157741,157743],{"className":32846,"code":157742,"language":32848,"meta":72,"style":72},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[74,157744,157745,157763],{"__ignoreMap":72},[77,157746,157747,157749,157751,157753,157755,157757,157760],{"class":79,"line":80},[77,157748,32883],{"class":94},[77,157750,2622],{"class":87},[77,157752,33943],{"class":94},[77,157754,48032],{"class":2123},[77,157756,27586],{"class":94},[77,157758,157759],{"class":87},")   ",[77,157761,157762],{"class":323},"# 2\n",[77,157764,157765,157767,157769,157771,157773,157775,157777],{"class":79,"line":91},[77,157766,32883],{"class":94},[77,157768,2622],{"class":87},[77,157770,36453],{"class":94},[77,157772,48032],{"class":2123},[77,157774,27586],{"class":94},[77,157776,48274],{"class":87},[77,157778,157779],{"class":323},"# 1\n",[14,157781,157783],{"id":157782},"_26-类型转换","2.6 类型转换",[24,157785,157786],{},"常用转换函数：",[67,157788,157790],{"className":32846,"code":157789,"language":32848,"meta":72,"style":72},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[74,157791,157792,157802,157813,157823],{"__ignoreMap":72},[77,157793,157794,157796,157798,157800],{"class":79,"line":80},[77,157795,2625],{"class":94},[77,157797,2622],{"class":87},[77,157799,56770],{"class":271},[77,157801,2628],{"class":87},[77,157803,157804,157806,157808,157811],{"class":79,"line":91},[77,157805,2661],{"class":94},[77,157807,2622],{"class":87},[77,157809,157810],{"class":271},"\"3.14\"",[77,157812,2628],{"class":87},[77,157814,157815,157817,157819,157821],{"class":79,"line":107},[77,157816,3780],{"class":94},[77,157818,2622],{"class":87},[77,157820,2925],{"class":94},[77,157822,2628],{"class":87},[77,157824,157825,157827,157829,157831],{"class":79,"line":191},[77,157826,3832],{"class":94},[77,157828,2622],{"class":87},[77,157830,2120],{"class":94},[77,157832,2628],{"class":87},[24,157834,17606],{},[67,157836,157838],{"className":32846,"code":157837,"language":32848,"meta":72,"style":72},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[74,157839,157840,157849,157860],{"__ignoreMap":72},[77,157841,157842,157844,157846],{"class":79,"line":80},[77,157843,148644],{"class":87},[77,157845,268],{"class":2123},[77,157847,157848],{"class":271}," \"18\"\n",[77,157850,157851,157853,157855,157857],{"class":79,"line":91},[77,157852,148644],{"class":87},[77,157854,268],{"class":2123},[77,157856,4857],{"class":94},[77,157858,157859],{"class":87},"(age)\n",[77,157861,157862,157864,157867,157869,157871],{"class":79,"line":107},[77,157863,32883],{"class":94},[77,157865,157866],{"class":87},"(age ",[77,157868,3094],{"class":2123},[77,157870,27586],{"class":94},[77,157872,2628],{"class":87},[24,157874,157875],{},"输入得到的内容永远是字符串：",[67,157877,157879],{"className":32846,"code":157878,"language":32848,"meta":72,"style":72},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[74,157880,157881,157897],{"__ignoreMap":72},[77,157882,157883,157886,157888,157890,157892,157895],{"class":79,"line":80},[77,157884,157885],{"class":87},"num ",[77,157887,268],{"class":2123},[77,157889,63053],{"class":94},[77,157891,2622],{"class":87},[77,157893,157894],{"class":271},"\"请输入数字:\"",[77,157896,2628],{"class":87},[77,157898,157899,157901,157903,157905,157908],{"class":79,"line":91},[77,157900,32883],{"class":94},[77,157902,2622],{"class":87},[77,157904,105540],{"class":94},[77,157906,157907],{"class":87},"(num))  ",[77,157909,157910],{"class":323},"# str\n",[24,157912,157913],{},"如果要做数学运算，必须转换：",[67,157915,157917],{"className":32846,"code":157916,"language":32848,"meta":72,"style":72},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[74,157918,157919,157937],{"__ignoreMap":72},[77,157920,157921,157923,157925,157927,157929,157931,157933,157935],{"class":79,"line":80},[77,157922,157885],{"class":87},[77,157924,268],{"class":2123},[77,157926,4857],{"class":94},[77,157928,2622],{"class":87},[77,157930,159],{"class":94},[77,157932,2622],{"class":87},[77,157934,157894],{"class":271},[77,157936,32965],{"class":87},[77,157938,157939,157941,157943,157945,157947],{"class":79,"line":91},[77,157940,32883],{"class":94},[77,157942,48085],{"class":87},[77,157944,3094],{"class":2123},[77,157946,4513],{"class":94},[77,157948,2628],{"class":87},[24,157950,157951],{},"常见错误：",[67,157953,157955],{"className":32846,"code":157954,"language":32848,"meta":72,"style":72},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[74,157956,157957,157970],{"__ignoreMap":72},[77,157958,157959,157961,157963,157965,157967],{"class":79,"line":80},[77,157960,2625],{"class":94},[77,157962,2622],{"class":87},[77,157964,157810],{"class":271},[77,157966,157759],{"class":87},[77,157968,157969],{"class":323},"# 错误\n",[77,157971,157972,157974,157976,157979,157982],{"class":79,"line":91},[77,157973,2625],{"class":94},[77,157975,2622],{"class":87},[77,157977,157978],{"class":271},"\"abc\"",[77,157980,157981],{"class":87},")    ",[77,157983,157969],{"class":323},[24,157985,157986],{},"正确写法：",[67,157988,157990],{"className":32846,"code":157989,"language":32848,"meta":72,"style":72},"num = float(\"3.14\")\n",[74,157991,157992],{"__ignoreMap":72},[77,157993,157994,157996,157998,158000,158002,158004],{"class":79,"line":80},[77,157995,157885],{"class":87},[77,157997,268],{"class":2123},[77,157999,112230],{"class":94},[77,158001,2622],{"class":87},[77,158003,157810],{"class":271},[77,158005,2628],{"class":87},[14,158007,158009],{"id":158008},"_27-运算符","2.7 运算符",[19,158011,158013],{"id":158012},"_271-算术运算符","2.7.1 算术运算符",[2755,158015,158016,158027],{},[2758,158017,158018],{},[2761,158019,158020,158023,158025],{},[2764,158021,158022],{},"运算符",[2764,158024,28337],{},[2764,158026,29960],{},[2801,158028,158029,158043,158057,158071,158085,158099,158113],{},[2761,158030,158031,158035,158038],{},[2806,158032,158033],{},[74,158034,3094],{},[2806,158036,158037],{},"加法",[2806,158039,158040],{},[74,158041,158042],{},"1 + 2",[2761,158044,158045,158049,158052],{},[2806,158046,158047],{},[74,158048,3145],{},[2806,158050,158051],{},"减法",[2806,158053,158054],{},[74,158055,158056],{},"5 - 3",[2761,158058,158059,158063,158066],{},[2806,158060,158061],{},[74,158062,3068],{},[2806,158064,158065],{},"乘法",[2806,158067,158068],{},[74,158069,158070],{},"2 * 3",[2761,158072,158073,158077,158080],{},[2806,158074,158075],{},[74,158076,3197],{},[2806,158078,158079],{},"除法，结果是浮点数",[2806,158081,158082],{},[74,158083,158084],{},"5 \u002F 2",[2761,158086,158087,158091,158094],{},[2806,158088,158089],{},[74,158090,35796],{},[2806,158092,158093],{},"整除",[2806,158095,158096],{},[74,158097,158098],{},"5 \u002F\u002F 2",[2761,158100,158101,158105,158108],{},[2806,158102,158103],{},[74,158104,2942],{},[2806,158106,158107],{},"取余",[2806,158109,158110],{},[74,158111,158112],{},"5 % 2",[2761,158114,158115,158119,158122],{},[2806,158116,158117],{},[74,158118,13134],{},[2806,158120,158121],{},"幂运算",[2806,158123,158124],{},[74,158125,158126],{},"2 ** 3",[24,158128,17606],{},[67,158130,158132],{"className":32846,"code":158131,"language":32848,"meta":72,"style":72},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[74,158133,158134,158152,158169,158186],{"__ignoreMap":72},[77,158135,158136,158138,158140,158142,158145,158147,158149],{"class":79,"line":80},[77,158137,32883],{"class":94},[77,158139,2622],{"class":87},[77,158141,2933],{"class":94},[77,158143,158144],{"class":2123}," \u002F",[77,158146,17227],{"class":94},[77,158148,157759],{"class":87},[77,158150,158151],{"class":323},"# 2.5\n",[77,158153,158154,158156,158158,158160,158163,158165,158167],{"class":79,"line":91},[77,158155,32883],{"class":94},[77,158157,2622],{"class":87},[77,158159,2933],{"class":94},[77,158161,158162],{"class":2123}," \u002F\u002F",[77,158164,17227],{"class":94},[77,158166,48274],{"class":87},[77,158168,157762],{"class":323},[77,158170,158171,158173,158175,158177,158180,158182,158184],{"class":79,"line":107},[77,158172,32883],{"class":94},[77,158174,2622],{"class":87},[77,158176,2933],{"class":94},[77,158178,158179],{"class":2123}," %",[77,158181,17227],{"class":94},[77,158183,157759],{"class":87},[77,158185,157779],{"class":323},[77,158187,158188,158190,158192,158194,158197,158199,158201],{"class":79,"line":191},[77,158189,32883],{"class":94},[77,158191,2622],{"class":87},[77,158193,2696],{"class":94},[77,158195,158196],{"class":2123}," **",[77,158198,80508],{"class":94},[77,158200,48274],{"class":87},[77,158202,158203],{"class":323},"# 8\n",[19,158205,158207],{"id":158206},"_272-赋值运算符","2.7.2 赋值运算符",[67,158209,158211],{"className":32846,"code":158210,"language":32848,"meta":72,"style":72},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[74,158212,158213,158221,158229,158237,158245],{"__ignoreMap":72},[77,158214,158215,158217,158219],{"class":79,"line":80},[77,158216,157885],{"class":87},[77,158218,268],{"class":2123},[77,158220,60876],{"class":94},[77,158222,158223,158225,158227],{"class":79,"line":91},[77,158224,157885],{"class":87},[77,158226,11950],{"class":2123},[77,158228,56881],{"class":94},[77,158230,158231,158233,158235],{"class":79,"line":107},[77,158232,157885],{"class":87},[77,158234,152350],{"class":2123},[77,158236,50189],{"class":94},[77,158238,158239,158241,158243],{"class":79,"line":191},[77,158240,157885],{"class":87},[77,158242,139538],{"class":2123},[77,158244,122468],{"class":94},[77,158246,158247,158249,158252],{"class":79,"line":1543},[77,158248,157885],{"class":87},[77,158250,158251],{"class":2123},"\u002F=",[77,158253,50189],{"class":94},[24,158255,158256],{},"等价关系：",[67,158258,158260],{"className":32846,"code":158259,"language":32848,"meta":72,"style":72},"num += 1\nnum = num + 1\n",[74,158261,158262,158270],{"__ignoreMap":72},[77,158263,158264,158266,158268],{"class":79,"line":80},[77,158265,157885],{"class":87},[77,158267,11950],{"class":2123},[77,158269,58147],{"class":94},[77,158271,158272,158274,158276,158279,158281],{"class":79,"line":91},[77,158273,157885],{"class":87},[77,158275,268],{"class":2123},[77,158277,158278],{"class":87}," num ",[77,158280,3094],{"class":2123},[77,158282,58147],{"class":94},[24,158284,158285,158286,513,158289,30853],{},"Python 没有 ",[74,158287,158288],{},"num++",[74,158290,158291],{},"num--",[19,158293,158295],{"id":158294},"_273-比较运算符","2.7.3 比较运算符",[24,158297,158298],{},"比较运算结果是布尔值。",[67,158300,158302],{"className":32846,"code":158301,"language":32848,"meta":72,"style":72},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[74,158303,158304,158318,158333,158347],{"__ignoreMap":72},[77,158305,158306,158308,158310,158312,158314,158316],{"class":79,"line":80},[77,158307,32883],{"class":94},[77,158309,2622],{"class":87},[77,158311,3059],{"class":94},[77,158313,28690],{"class":2123},[77,158315,4623],{"class":94},[77,158317,2628],{"class":87},[77,158319,158320,158322,158324,158326,158329,158331],{"class":79,"line":91},[77,158321,32883],{"class":94},[77,158323,2622],{"class":87},[77,158325,3059],{"class":94},[77,158327,158328],{"class":2123}," >=",[77,158330,4513],{"class":94},[77,158332,2628],{"class":87},[77,158334,158335,158337,158339,158341,158343,158345],{"class":79,"line":107},[77,158336,32883],{"class":94},[77,158338,2622],{"class":87},[77,158340,3059],{"class":94},[77,158342,103994],{"class":2123},[77,158344,4558],{"class":94},[77,158346,2628],{"class":87},[77,158348,158349,158351,158353,158355,158358,158360],{"class":79,"line":191},[77,158350,32883],{"class":94},[77,158352,2622],{"class":87},[77,158354,3059],{"class":94},[77,158356,158357],{"class":2123}," !=",[77,158359,4558],{"class":94},[77,158361,2628],{"class":87},[24,158363,158364,158365,158367,158368,30853],{},"注意：判断相等用 ",[74,158366,5424],{},"，赋值用 ",[74,158369,268],{},[67,158371,158373],{"className":32846,"code":158372,"language":32848,"meta":72,"style":72},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[74,158374,158375,158387],{"__ignoreMap":72},[77,158376,158377,158379,158381,158384],{"class":79,"line":80},[77,158378,148644],{"class":87},[77,158380,268],{"class":2123},[77,158382,158383],{"class":94}," 18",[77,158385,158386],{"class":323},"       # 赋值\n",[77,158388,158389,158391,158393,158395],{"class":79,"line":91},[77,158390,148644],{"class":87},[77,158392,5424],{"class":2123},[77,158394,158383],{"class":94},[77,158396,158397],{"class":323},"      # 判断是否相等\n",[19,158399,158401],{"id":158400},"_274-逻辑运算符","2.7.4 逻辑运算符",[2755,158403,158404,158412],{},[2758,158405,158406],{},[2761,158407,158408,158410],{},[2764,158409,158022],{},[2764,158411,28337],{},[2801,158413,158414,158423,158432],{},[2761,158415,158416,158420],{},[2806,158417,158418],{},[74,158419,32930],{},[2806,158421,158422],{},"并且",[2761,158424,158425,158429],{},[2806,158426,158427],{},[74,158428,117523],{},[2806,158430,158431],{},"或者",[2761,158433,158434,158439],{},[2806,158435,158436],{},[74,158437,158438],{},"not",[2806,158440,158441],{},"取反",[67,158443,158445],{"className":32846,"code":158444,"language":32848,"meta":72,"style":72},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[74,158446,158447,158455,158464,158468,158483,158497],{"__ignoreMap":72},[77,158448,158449,158451,158453],{"class":79,"line":80},[77,158450,148644],{"class":87},[77,158452,268],{"class":2123},[77,158454,90501],{"class":94},[77,158456,158457,158460,158462],{"class":79,"line":91},[77,158458,158459],{"class":87},"has_ticket ",[77,158461,268],{"class":2123},[77,158463,155697],{"class":94},[77,158465,158466],{"class":79,"line":107},[77,158467,4875],{"emptyLinePlaceholder":2549},[77,158469,158470,158472,158474,158476,158478,158480],{"class":79,"line":191},[77,158471,32883],{"class":94},[77,158473,157866],{"class":87},[77,158475,4186],{"class":2123},[77,158477,158383],{"class":94},[77,158479,122861],{"class":2123},[77,158481,158482],{"class":87}," has_ticket)\n",[77,158484,158485,158487,158489,158491,158493,158495],{"class":79,"line":1543},[77,158486,32883],{"class":94},[77,158488,157866],{"class":87},[77,158490,260],{"class":2123},[77,158492,158383],{"class":94},[77,158494,116634],{"class":2123},[77,158496,158482],{"class":87},[77,158498,158499,158501,158503,158505],{"class":79,"line":1549},[77,158500,32883],{"class":94},[77,158502,2622],{"class":87},[77,158504,158438],{"class":2123},[77,158506,158482],{"class":87},[14,158508,158510],{"id":158509},"_28-字符串定义","2.8 字符串定义",[24,158512,158513],{},"三种常见写法：",[67,158515,158517],{"className":32846,"code":158516,"language":32848,"meta":72,"style":72},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[74,158518,158519,158529,158538,158548],{"__ignoreMap":72},[77,158520,158521,158524,158526],{"class":79,"line":80},[77,158522,158523],{"class":87},"name1 ",[77,158525,268],{"class":2123},[77,158527,158528],{"class":271}," '小明'\n",[77,158530,158531,158534,158536],{"class":79,"line":91},[77,158532,158533],{"class":87},"name2 ",[77,158535,268],{"class":2123},[77,158537,151451],{"class":271},[77,158539,158540,158543,158545],{"class":79,"line":107},[77,158541,158542],{"class":87},"text ",[77,158544,268],{"class":2123},[77,158546,158547],{"class":271}," \"\"\"这是多行字符串\n",[77,158549,158550],{"class":79,"line":191},[77,158551,158552],{"class":271},"可以换行\"\"\"\n",[24,158554,158555],{},"字符串中包含引号：",[67,158557,158559],{"className":32846,"code":158558,"language":32848,"meta":72,"style":72},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[74,158560,158561,158571,158581],{"__ignoreMap":72},[77,158562,158563,158566,158568],{"class":79,"line":80},[77,158564,158565],{"class":87},"msg ",[77,158567,268],{"class":2123},[77,158569,158570],{"class":271}," \"他说:'你好'\"\n",[77,158572,158573,158576,158578],{"class":79,"line":91},[77,158574,158575],{"class":87},"msg2 ",[77,158577,268],{"class":2123},[77,158579,158580],{"class":271}," '他说:\"你好\"'\n",[77,158582,158583,158586,158588,158591,158594,158597,158599],{"class":79,"line":107},[77,158584,158585],{"class":87},"msg3 ",[77,158587,268],{"class":2123},[77,158589,158590],{"class":271}," \"他说:",[77,158592,158593],{"class":94},"\\\"",[77,158595,158596],{"class":271},"你好",[77,158598,158593],{"class":94},[77,158600,27601],{"class":271},[24,158602,158603],{},"常见转义字符：",[2755,158605,158606,158615],{},[2758,158607,158608],{},[2761,158609,158610,158613],{},[2764,158611,158612],{},"写法",[2764,158614,103136],{},[2801,158616,158617,158627,158636,158646,158655],{},[2761,158618,158619,158624],{},[2806,158620,158621],{},[74,158622,158623],{},"\\n",[2806,158625,158626],{},"换行",[2761,158628,158629,158633],{},[2806,158630,158631],{},[74,158632,3712],{},[2806,158634,158635],{},"制表符",[2761,158637,158638,158643],{},[2806,158639,158640],{},[74,158641,158642],{},"\\\\",[2806,158644,158645],{},"反斜杠",[2761,158647,158648,158652],{},[2806,158649,158650],{},[74,158651,158593],{},[2806,158653,158654],{},"双引号",[2761,158656,158657,158662],{},[2806,158658,158659],{},[74,158660,158661],{},"\\'",[2806,158663,158664],{},"单引号",[14,158666,158668],{"id":158667},"_29-字符串拼接","2.9 字符串拼接",[67,158670,158672],{"className":32846,"code":158671,"language":32848,"meta":72,"style":72},"name = \"小明\"\nprint(\"你好，\" + name)\n",[74,158673,158674,158682],{"__ignoreMap":72},[77,158675,158676,158678,158680],{"class":79,"line":80},[77,158677,148634],{"class":87},[77,158679,268],{"class":2123},[77,158681,151451],{"class":271},[77,158683,158684,158686,158688,158691,158693],{"class":79,"line":91},[77,158685,32883],{"class":94},[77,158687,2622],{"class":87},[77,158689,158690],{"class":271},"\"你好，\"",[77,158692,48032],{"class":2123},[77,158694,158695],{"class":87}," name)\n",[24,158697,158698],{},"字符串只能和字符串拼接：",[67,158700,158702],{"className":32846,"code":158701,"language":32848,"meta":72,"style":72},"age = 18\nprint(\"年龄:\" + str(age))\n",[74,158703,158704,158712],{"__ignoreMap":72},[77,158705,158706,158708,158710],{"class":79,"line":80},[77,158707,148644],{"class":87},[77,158709,268],{"class":2123},[77,158711,148649],{"class":94},[77,158713,158714,158716,158718,158720,158722,158724],{"class":79,"line":91},[77,158715,32883],{"class":94},[77,158717,2622],{"class":87},[77,158719,148615],{"class":271},[77,158721,48032],{"class":2123},[77,158723,76358],{"class":94},[77,158725,158726],{"class":87},"(age))\n",[24,158728,158729],{},"更推荐使用格式化字符串。",[14,158731,158733],{"id":158732},"_210-字符串格式化","2.10 字符串格式化",[19,158735,158737],{"id":158736},"_2101-百分号格式化","2.10.1 百分号格式化",[67,158739,158741],{"className":32846,"code":158740,"language":32848,"meta":72,"style":72},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[74,158742,158743,158751,158759,158768,158772],{"__ignoreMap":72},[77,158744,158745,158747,158749],{"class":79,"line":80},[77,158746,148634],{"class":87},[77,158748,268],{"class":2123},[77,158750,151451],{"class":271},[77,158752,158753,158755,158757],{"class":79,"line":91},[77,158754,148644],{"class":87},[77,158756,268],{"class":2123},[77,158758,148649],{"class":94},[77,158760,158761,158763,158765],{"class":79,"line":107},[77,158762,157456],{"class":87},[77,158764,268],{"class":2123},[77,158766,158767],{"class":94}," 95.5\n",[77,158769,158770],{"class":79,"line":191},[77,158771,4875],{"emptyLinePlaceholder":2549},[77,158773,158774,158776,158778,158781,158784,158787,158790,158793,158796,158798,158800],{"class":79,"line":1543},[77,158775,32883],{"class":94},[77,158777,2622],{"class":87},[77,158779,158780],{"class":271},"\"姓名:",[77,158782,158783],{"class":94},"%s",[77,158785,158786],{"class":271}," 年龄:",[77,158788,158789],{"class":94},"%d",[77,158791,158792],{"class":271}," 分数:",[77,158794,158795],{"class":94},"%.1f",[77,158797,2865],{"class":271},[77,158799,158179],{"class":2123},[77,158801,158802],{"class":87}," (name, age, score))\n",[24,158804,158805],{},"常用占位符：",[2755,158807,158808,158817],{},[2758,158809,158810],{},[2761,158811,158812,158815],{},[2764,158813,158814],{},"占位符",[2764,158816,28337],{},[2801,158818,158819,158827,158835],{},[2761,158820,158821,158825],{},[2806,158822,158823],{},[74,158824,158783],{},[2806,158826,157322],{},[2761,158828,158829,158833],{},[2806,158830,158831],{},[74,158832,158789],{},[2806,158834,157300],{},[2761,158836,158837,158842],{},[2806,158838,158839],{},[74,158840,158841],{},"%f",[2806,158843,157311],{},[24,158845,158846],{},"精度控制：",[67,158848,158850],{"className":32846,"code":158849,"language":32848,"meta":72,"style":72},"price = 12.3456\nprint(\"%.2f\" % price)\n",[74,158851,158852,158861],{"__ignoreMap":72},[77,158853,158854,158856,158858],{"class":79,"line":80},[77,158855,148779],{"class":87},[77,158857,268],{"class":2123},[77,158859,158860],{"class":94}," 12.3456\n",[77,158862,158863,158865,158867,158869,158872,158874,158876],{"class":79,"line":91},[77,158864,32883],{"class":94},[77,158866,2622],{"class":87},[77,158868,2865],{"class":271},[77,158870,158871],{"class":94},"%.2f",[77,158873,2865],{"class":271},[77,158875,158179],{"class":2123},[77,158877,158878],{"class":87}," price)\n",[19,158880,158882],{"id":158881},"_2102-format方法","2.10.2 format方法",[67,158884,158886],{"className":32846,"code":158885,"language":32848,"meta":72,"style":72},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[74,158887,158888,158896,158904,158908,158927,158947],{"__ignoreMap":72},[77,158889,158890,158892,158894],{"class":79,"line":80},[77,158891,148634],{"class":87},[77,158893,268],{"class":2123},[77,158895,151451],{"class":271},[77,158897,158898,158900,158902],{"class":79,"line":91},[77,158899,148644],{"class":87},[77,158901,268],{"class":2123},[77,158903,148649],{"class":94},[77,158905,158906],{"class":79,"line":107},[77,158907,4875],{"emptyLinePlaceholder":2549},[77,158909,158910,158912,158914,158916,158918,158920,158922,158924],{"class":79,"line":191},[77,158911,32883],{"class":94},[77,158913,2622],{"class":87},[77,158915,158780],{"class":271},[77,158917,34926],{"class":94},[77,158919,158786],{"class":271},[77,158921,34926],{"class":94},[77,158923,2865],{"class":271},[77,158925,158926],{"class":87},".format(name, age))\n",[77,158928,158929,158931,158933,158935,158938,158940,158943,158945],{"class":79,"line":1543},[77,158930,32883],{"class":94},[77,158932,2622],{"class":87},[77,158934,158780],{"class":271},[77,158936,158937],{"class":94},"{0}",[77,158939,158786],{"class":271},[77,158941,158942],{"class":94},"{1}",[77,158944,2865],{"class":271},[77,158946,158926],{"class":87},[77,158948,158949,158951,158953,158955,158958,158960,158963,158965,158968,158970,158972,158975,158977,158979],{"class":79,"line":1549},[77,158950,32883],{"class":94},[77,158952,2622],{"class":87},[77,158954,158780],{"class":271},[77,158956,158957],{"class":94},"{name}",[77,158959,158786],{"class":271},[77,158961,158962],{"class":94},"{age}",[77,158964,2865],{"class":271},[77,158966,158967],{"class":87},".format(",[77,158969,82247],{"class":7691},[77,158971,268],{"class":2123},[77,158973,158974],{"class":87},"name, ",[77,158976,72664],{"class":7691},[77,158978,268],{"class":2123},[77,158980,158981],{"class":87},"age))\n",[19,158983,158985],{"id":158984},"_2103-f-string","2.10.3 f-string",[24,158987,158988],{},"推荐写法：",[67,158990,158992],{"className":32846,"code":158991,"language":32848,"meta":72,"style":72},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[74,158993,158994,159002,159010,159018,159022],{"__ignoreMap":72},[77,158995,158996,158998,159000],{"class":79,"line":80},[77,158997,148634],{"class":87},[77,158999,268],{"class":2123},[77,159001,151451],{"class":271},[77,159003,159004,159006,159008],{"class":79,"line":91},[77,159005,148644],{"class":87},[77,159007,268],{"class":2123},[77,159009,148649],{"class":94},[77,159011,159012,159014,159016],{"class":79,"line":107},[77,159013,157456],{"class":87},[77,159015,268],{"class":2123},[77,159017,158767],{"class":94},[77,159019,159020],{"class":79,"line":191},[77,159021,4875],{"emptyLinePlaceholder":2549},[77,159023,159024,159026,159028,159030,159032,159034,159036,159038,159040,159042,159044,159046,159048,159050,159053,159056,159058,159060],{"class":79,"line":1543},[77,159025,32883],{"class":94},[77,159027,2622],{"class":87},[77,159029,2672],{"class":2123},[77,159031,158780],{"class":271},[77,159033,3509],{"class":94},[77,159035,82247],{"class":87},[77,159037,3558],{"class":94},[77,159039,158786],{"class":271},[77,159041,3509],{"class":94},[77,159043,72664],{"class":87},[77,159045,3558],{"class":94},[77,159047,158792],{"class":271},[77,159049,3509],{"class":94},[77,159051,159052],{"class":87},"score",[77,159054,159055],{"class":2123},":.1f",[77,159057,3558],{"class":94},[77,159059,2865],{"class":271},[77,159061,2628],{"class":87},[24,159063,159064],{},"表达式也可以放进去：",[67,159066,159068],{"className":32846,"code":159067,"language":32848,"meta":72,"style":72},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[74,159069,159070,159078,159086],{"__ignoreMap":72},[77,159071,159072,159074,159076],{"class":79,"line":80},[77,159073,148779],{"class":87},[77,159075,268],{"class":2123},[77,159077,148784],{"class":94},[77,159079,159080,159082,159084],{"class":79,"line":91},[77,159081,148789],{"class":87},[77,159083,268],{"class":2123},[77,159085,56881],{"class":94},[77,159087,159088,159090,159092,159094,159097,159099,159101,159103,159106,159108,159111],{"class":79,"line":107},[77,159089,32883],{"class":94},[77,159091,2622],{"class":87},[77,159093,2672],{"class":2123},[77,159095,159096],{"class":271},"\"总价:",[77,159098,3509],{"class":94},[77,159100,148779],{"class":87},[77,159102,3068],{"class":2123},[77,159104,159105],{"class":87}," count",[77,159107,3558],{"class":94},[77,159109,159110],{"class":271},"元\"",[77,159112,2628],{"class":87},[14,159114,159116],{"id":159115},"_211-input输入","2.11 input输入",[24,159118,159119,159122],{},[74,159120,159121],{},"input()"," 会暂停程序，等待用户输入。",[67,159124,159126],{"className":32846,"code":159125,"language":32848,"meta":72,"style":72},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[74,159127,159128,159142],{"__ignoreMap":72},[77,159129,159130,159132,159134,159136,159138,159140],{"class":79,"line":80},[77,159131,148634],{"class":87},[77,159133,268],{"class":2123},[77,159135,63053],{"class":94},[77,159137,2622],{"class":87},[77,159139,154477],{"class":271},[77,159141,2628],{"class":87},[77,159143,159144,159146,159148,159150,159153,159155,159157,159159,159161],{"class":79,"line":91},[77,159145,32883],{"class":94},[77,159147,2622],{"class":87},[77,159149,2672],{"class":2123},[77,159151,159152],{"class":271},"\"你好，",[77,159154,3509],{"class":94},[77,159156,82247],{"class":87},[77,159158,3558],{"class":94},[77,159160,2865],{"class":271},[77,159162,2628],{"class":87},[24,159164,159165],{},"输入整数：",[67,159167,159169],{"className":32846,"code":159168,"language":32848,"meta":72,"style":72},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[74,159170,159171,159189],{"__ignoreMap":72},[77,159172,159173,159175,159177,159179,159181,159183,159185,159187],{"class":79,"line":80},[77,159174,148644],{"class":87},[77,159176,268],{"class":2123},[77,159178,4857],{"class":94},[77,159180,2622],{"class":87},[77,159182,159],{"class":94},[77,159184,2622],{"class":87},[77,159186,154492],{"class":271},[77,159188,32965],{"class":87},[77,159190,159191,159193,159195,159197,159200,159202,159204,159206,159209,159211],{"class":79,"line":91},[77,159192,32883],{"class":94},[77,159194,2622],{"class":87},[77,159196,2672],{"class":2123},[77,159198,159199],{"class":271},"\"明年你",[77,159201,3509],{"class":94},[77,159203,148644],{"class":87},[77,159205,3094],{"class":2123},[77,159207,159208],{"class":94}," 1}",[77,159210,151502],{"class":271},[77,159212,2628],{"class":87},[24,159214,159215],{},"输入小数：",[67,159217,159219],{"className":32846,"code":159218,"language":32848,"meta":72,"style":72},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[74,159220,159221,159240],{"__ignoreMap":72},[77,159222,159223,159225,159227,159229,159231,159233,159235,159238],{"class":79,"line":80},[77,159224,157429],{"class":87},[77,159226,268],{"class":2123},[77,159228,112230],{"class":94},[77,159230,2622],{"class":87},[77,159232,159],{"class":94},[77,159234,2622],{"class":87},[77,159236,159237],{"class":271},"\"请输入身高:\"",[77,159239,32965],{"class":87},[77,159241,159242,159244,159246,159248,159251,159253,159255,159258,159260,159263],{"class":79,"line":91},[77,159243,32883],{"class":94},[77,159245,2622],{"class":87},[77,159247,2672],{"class":2123},[77,159249,159250],{"class":271},"\"身高:",[77,159252,3509],{"class":94},[77,159254,27449],{"class":87},[77,159256,159257],{"class":2123},":.2f",[77,159259,3558],{"class":94},[77,159261,159262],{"class":271},"米\"",[77,159264,2628],{"class":87},[14,159266,159268],{"id":159267},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[24,159270,125724],{},[139,159272,159273,159276,159279,159282],{},[54,159274,159275],{},"输入商品单价。",[54,159277,159278],{},"输入购买数量。",[54,159280,159281],{},"输入折扣，例如 0.8 表示八折。",[54,159283,159284],{},"输出最终金额，保留两位小数。",[24,159286,12508],{},[67,159288,159290],{"className":32846,"code":159289,"language":32848,"meta":72,"style":72},"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",[74,159291,159292,159311,159330,159350,159354,159374,159378,159401,159422,159444],{"__ignoreMap":72},[77,159293,159294,159296,159298,159300,159302,159304,159306,159309],{"class":79,"line":80},[77,159295,148779],{"class":87},[77,159297,268],{"class":2123},[77,159299,112230],{"class":94},[77,159301,2622],{"class":87},[77,159303,159],{"class":94},[77,159305,2622],{"class":87},[77,159307,159308],{"class":271},"\"请输入商品单价:\"",[77,159310,32965],{"class":87},[77,159312,159313,159315,159317,159319,159321,159323,159325,159328],{"class":79,"line":91},[77,159314,148789],{"class":87},[77,159316,268],{"class":2123},[77,159318,4857],{"class":94},[77,159320,2622],{"class":87},[77,159322,159],{"class":94},[77,159324,2622],{"class":87},[77,159326,159327],{"class":271},"\"请输入购买数量:\"",[77,159329,32965],{"class":87},[77,159331,159332,159335,159337,159339,159341,159343,159345,159348],{"class":79,"line":107},[77,159333,159334],{"class":87},"discount ",[77,159336,268],{"class":2123},[77,159338,112230],{"class":94},[77,159340,2622],{"class":87},[77,159342,159],{"class":94},[77,159344,2622],{"class":87},[77,159346,159347],{"class":271},"\"请输入折扣:\"",[77,159349,32965],{"class":87},[77,159351,159352],{"class":79,"line":191},[77,159353,4875],{"emptyLinePlaceholder":2549},[77,159355,159356,159359,159361,159364,159366,159369,159371],{"class":79,"line":1543},[77,159357,159358],{"class":87},"total ",[77,159360,268],{"class":2123},[77,159362,159363],{"class":87}," price ",[77,159365,3068],{"class":2123},[77,159367,159368],{"class":87}," count ",[77,159370,3068],{"class":2123},[77,159372,159373],{"class":87}," discount\n",[77,159375,159376],{"class":79,"line":1549},[77,159377,4875],{"emptyLinePlaceholder":2549},[77,159379,159380,159382,159384,159386,159389,159391,159393,159395,159397,159399],{"class":79,"line":1566},[77,159381,32883],{"class":94},[77,159383,2622],{"class":87},[77,159385,2672],{"class":2123},[77,159387,159388],{"class":271},"\"商品单价:",[77,159390,3509],{"class":94},[77,159392,82252],{"class":87},[77,159394,159257],{"class":2123},[77,159396,3558],{"class":94},[77,159398,2865],{"class":271},[77,159400,2628],{"class":87},[77,159402,159403,159405,159407,159409,159412,159414,159416,159418,159420],{"class":79,"line":1572},[77,159404,32883],{"class":94},[77,159406,2622],{"class":87},[77,159408,2672],{"class":2123},[77,159410,159411],{"class":271},"\"购买数量:",[77,159413,3509],{"class":94},[77,159415,86871],{"class":87},[77,159417,3558],{"class":94},[77,159419,2865],{"class":271},[77,159421,2628],{"class":87},[77,159423,159424,159426,159428,159430,159433,159435,159438,159440,159442],{"class":79,"line":1589},[77,159425,32883],{"class":94},[77,159427,2622],{"class":87},[77,159429,2672],{"class":2123},[77,159431,159432],{"class":271},"\"折扣:",[77,159434,3509],{"class":94},[77,159436,159437],{"class":87},"discount",[77,159439,3558],{"class":94},[77,159441,2865],{"class":271},[77,159443,2628],{"class":87},[77,159445,159446,159448,159450,159452,159455,159457,159460,159462,159464,159466],{"class":79,"line":1595},[77,159447,32883],{"class":94},[77,159449,2622],{"class":87},[77,159451,2672],{"class":2123},[77,159453,159454],{"class":271},"\"应付金额:",[77,159456,3509],{"class":94},[77,159458,159459],{"class":87},"total",[77,159461,159257],{"class":2123},[77,159463,3558],{"class":94},[77,159465,159110],{"class":271},[77,159467,2628],{"class":87},[14,159469,159471],{"id":159470},"_213-易错点","2.13 易错点",[139,159473,159474,159479,159485,159493,159496],{},[54,159475,159476,159478],{},[74,159477,159121],{}," 的结果是字符串，做运算前要转换。",[54,159480,159481,159482,30853],{},"字符串拼接时，数字要先 ",[74,159483,159484],{},"str()",[54,159486,159487,159489,159490,159492],{},[74,159488,268],{}," 是赋值，",[74,159491,5424],{}," 是比较。",[54,159494,159495],{},"Python 没有自增自减运算符。",[54,159497,159498],{},"浮点数计算可能有精度误差：",[67,159500,159502],{"className":32846,"code":159501,"language":32848,"meta":72,"style":72},"print(0.1 + 0.2)\n",[74,159503,159504],{"__ignoreMap":72},[77,159505,159506,159508,159510,159512,159514,159517],{"class":79,"line":80},[77,159507,32883],{"class":94},[77,159509,2622],{"class":87},[77,159511,88647],{"class":94},[77,159513,48032],{"class":2123},[77,159515,159516],{"class":94}," 0.2",[77,159518,2628],{"class":87},[24,159520,159521,159522,159525],{},"金额计算如果要求严格，可以后续学习 ",[74,159523,159524],{},"decimal"," 模块。",[14,159527,159529],{"id":159528},"_214-本章练习","2.14 本章练习",[139,159531,159532,159535,159538,159541,159544],{},[54,159533,159534],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[54,159536,159537],{},"输入圆的半径，计算面积，保留两位小数。",[54,159539,159540],{},"输入工资和奖金，计算总收入。",[54,159542,159543],{},"输入摄氏温度，转换为华氏温度。",[54,159545,159546],{},"写一个 BMI 计算程序：",[67,159548,159551],{"className":159549,"code":159550,"language":7662,"meta":72},[7660],"BMI = 体重kg \u002F 身高m ** 2\n",[74,159552,159550],{"__ignoreMap":72},[2520,159554,159555],{},"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":72,"searchDepth":91,"depth":91,"links":159557},[159558,159559,159560,159561,159562,159563,159564,159570,159571,159572,159577,159578,159579,159580],{"id":157119,"depth":91,"text":157120},{"id":157228,"depth":91,"text":157229},{"id":157399,"depth":91,"text":157400},{"id":157476,"depth":91,"text":157477},{"id":53197,"depth":91,"text":53198},{"id":157782,"depth":91,"text":157783},{"id":158008,"depth":91,"text":158009,"children":159565},[159566,159567,159568,159569],{"id":158012,"depth":107,"text":158013},{"id":158206,"depth":107,"text":158207},{"id":158294,"depth":107,"text":158295},{"id":158400,"depth":107,"text":158401},{"id":158509,"depth":91,"text":158510},{"id":158667,"depth":91,"text":158668},{"id":158732,"depth":91,"text":158733,"children":159573},[159574,159575,159576],{"id":158736,"depth":107,"text":158737},{"id":158881,"depth":107,"text":158882},{"id":158984,"depth":107,"text":158985},{"id":159115,"depth":91,"text":159116},{"id":159267,"depth":91,"text":159268},{"id":159470,"depth":91,"text":159471},{"id":159528,"depth":91,"text":159529},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157111,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159587,"title":159588,"body":159589,"description":2546,"extension":2547,"meta":161225,"navigation":2549,"path":161226,"seo":161227,"stem":161228,"__hash__":161229},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159590,"toc":161206},[159591,159594,159598,159601,159616,159619,159647,159651,159701,159703,159719,159722,159748,159751,159755,159822,159825,159841,159845,159848,159966,159969,159976,160025,160031,160035,160038,160151,160154,160158,160162,160165,160215,160219,160222,160272,160276,160279,160317,160321,160324,160370,160373,160408,160412,160417,160420,160466,160468,160535,160539,160545,160656,160665,160669,160671,160682,160684,160850,160854,160856,160870,160872,161086,161090,161109,161126,161129,161175,161179,161203],[10,159592,159588],{"id":159593},"_3-判断语句",[14,159595,159597],{"id":159596},"_31-布尔值","3.1 布尔值",[24,159599,159600],{},"判断语句依赖布尔值：",[67,159602,159604],{"className":32846,"code":159603,"language":32848,"meta":72,"style":72},"True\nFalse\n",[74,159605,159606,159611],{"__ignoreMap":72},[77,159607,159608],{"class":79,"line":80},[77,159609,159610],{"class":94},"True\n",[77,159612,159613],{"class":79,"line":91},[77,159614,159615],{"class":94},"False\n",[24,159617,159618],{},"比较表达式会产生布尔值：",[67,159620,159622],{"className":32846,"code":159621,"language":32848,"meta":72,"style":72},"age = 18\nprint(age >= 18)  # True\n",[74,159623,159624,159632],{"__ignoreMap":72},[77,159625,159626,159628,159630],{"class":79,"line":80},[77,159627,148644],{"class":87},[77,159629,268],{"class":2123},[77,159631,148649],{"class":94},[77,159633,159634,159636,159638,159640,159642,159644],{"class":79,"line":91},[77,159635,32883],{"class":94},[77,159637,157866],{"class":87},[77,159639,4186],{"class":2123},[77,159641,158383],{"class":94},[77,159643,48274],{"class":87},[77,159645,159646],{"class":323},"# True\n",[14,159648,159650],{"id":159649},"_32-if基础语法","3.2 if基础语法",[67,159652,159654],{"className":32846,"code":159653,"language":32848,"meta":72,"style":72},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[74,159655,159656,159674,159678,159690],{"__ignoreMap":72},[77,159657,159658,159660,159662,159664,159666,159668,159670,159672],{"class":79,"line":80},[77,159659,148644],{"class":87},[77,159661,268],{"class":2123},[77,159663,4857],{"class":94},[77,159665,2622],{"class":87},[77,159667,159],{"class":94},[77,159669,2622],{"class":87},[77,159671,154492],{"class":271},[77,159673,32965],{"class":87},[77,159675,159676],{"class":79,"line":91},[77,159677,4875],{"emptyLinePlaceholder":2549},[77,159679,159680,159682,159684,159686,159688],{"class":79,"line":107},[77,159681,4008],{"class":2123},[77,159683,18177],{"class":87},[77,159685,4186],{"class":2123},[77,159687,158383],{"class":94},[77,159689,6214],{"class":87},[77,159691,159692,159694,159696,159699],{"class":79,"line":191},[77,159693,33766],{"class":94},[77,159695,2622],{"class":87},[77,159697,159698],{"class":271},"\"可以进入网吧\"",[77,159700,2628],{"class":87},[24,159702,1988],{},[139,159704,159705,159710,159713,159716],{},[54,159706,159707,159709],{},[74,159708,4008],{}," 后面是条件表达式。",[54,159711,159712],{},"条件后面必须写冒号。",[54,159714,159715],{},"条件成立时执行缩进代码块。",[54,159717,159718],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[24,159720,159721],{},"错误示例：",[67,159723,159725],{"className":32846,"code":159724,"language":32848,"meta":72,"style":72},"if age >= 18\n    print(\"可以进入\")\n",[74,159726,159727,159737],{"__ignoreMap":72},[77,159728,159729,159731,159733,159735],{"class":79,"line":80},[77,159730,4008],{"class":2123},[77,159732,18177],{"class":87},[77,159734,4186],{"class":2123},[77,159736,148649],{"class":94},[77,159738,159739,159741,159743,159746],{"class":79,"line":91},[77,159740,33766],{"class":94},[77,159742,2622],{"class":87},[77,159744,159745],{"class":271},"\"可以进入\"",[77,159747,2628],{"class":87},[24,159749,159750],{},"缺少冒号。",[14,159752,159754],{"id":159753},"_33-if-else","3.3 if else",[67,159756,159758],{"className":32846,"code":159757,"language":32848,"meta":72,"style":72},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[74,159759,159760,159778,159782,159794,159805,159811],{"__ignoreMap":72},[77,159761,159762,159764,159766,159768,159770,159772,159774,159776],{"class":79,"line":80},[77,159763,148644],{"class":87},[77,159765,268],{"class":2123},[77,159767,4857],{"class":94},[77,159769,2622],{"class":87},[77,159771,159],{"class":94},[77,159773,2622],{"class":87},[77,159775,154492],{"class":271},[77,159777,32965],{"class":87},[77,159779,159780],{"class":79,"line":91},[77,159781,4875],{"emptyLinePlaceholder":2549},[77,159783,159784,159786,159788,159790,159792],{"class":79,"line":107},[77,159785,4008],{"class":2123},[77,159787,18177],{"class":87},[77,159789,4186],{"class":2123},[77,159791,158383],{"class":94},[77,159793,6214],{"class":87},[77,159795,159796,159798,159800,159803],{"class":79,"line":191},[77,159797,33766],{"class":94},[77,159799,2622],{"class":87},[77,159801,159802],{"class":271},"\"成年人\"",[77,159804,2628],{"class":87},[77,159806,159807,159809],{"class":79,"line":1543},[77,159808,4177],{"class":2123},[77,159810,6214],{"class":87},[77,159812,159813,159815,159817,159820],{"class":79,"line":1549},[77,159814,33766],{"class":94},[77,159816,2622],{"class":87},[77,159818,159819],{"class":271},"\"未成年人\"",[77,159821,2628],{"class":87},[24,159823,159824],{},"执行逻辑：",[139,159826,159827,159833,159838],{},[54,159828,159829,159830,159832],{},"条件成立，执行 ",[74,159831,4008],{}," 代码块。",[54,159834,159835,159836,159832],{},"条件不成立，执行 ",[74,159837,4177],{},[54,159839,159840],{},"两个代码块只会执行其中一个。",[14,159842,159844],{"id":159843},"_34-if-elif-else","3.4 if elif else",[24,159846,159847],{},"多条件判断：",[67,159849,159851],{"className":32846,"code":159850,"language":32848,"meta":72,"style":72},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[74,159852,159853,159871,159875,159889,159900,159914,159925,159938,159949,159955],{"__ignoreMap":72},[77,159854,159855,159857,159859,159861,159863,159865,159867,159869],{"class":79,"line":80},[77,159856,157456],{"class":87},[77,159858,268],{"class":2123},[77,159860,4857],{"class":94},[77,159862,2622],{"class":87},[77,159864,159],{"class":94},[77,159866,2622],{"class":87},[77,159868,154507],{"class":271},[77,159870,32965],{"class":87},[77,159872,159873],{"class":79,"line":91},[77,159874,4875],{"emptyLinePlaceholder":2549},[77,159876,159877,159879,159882,159884,159887],{"class":79,"line":107},[77,159878,4008],{"class":2123},[77,159880,159881],{"class":87}," score ",[77,159883,4186],{"class":2123},[77,159885,159886],{"class":94}," 90",[77,159888,6214],{"class":87},[77,159890,159891,159893,159895,159898],{"class":79,"line":191},[77,159892,33766],{"class":94},[77,159894,2622],{"class":87},[77,159896,159897],{"class":271},"\"优秀\"",[77,159899,2628],{"class":87},[77,159901,159902,159905,159907,159909,159912],{"class":79,"line":1543},[77,159903,159904],{"class":2123},"elif",[77,159906,159881],{"class":87},[77,159908,4186],{"class":2123},[77,159910,159911],{"class":94}," 80",[77,159913,6214],{"class":87},[77,159915,159916,159918,159920,159923],{"class":79,"line":1549},[77,159917,33766],{"class":94},[77,159919,2622],{"class":87},[77,159921,159922],{"class":271},"\"良好\"",[77,159924,2628],{"class":87},[77,159926,159927,159929,159931,159933,159936],{"class":79,"line":1566},[77,159928,159904],{"class":2123},[77,159930,159881],{"class":87},[77,159932,4186],{"class":2123},[77,159934,159935],{"class":94}," 60",[77,159937,6214],{"class":87},[77,159939,159940,159942,159944,159947],{"class":79,"line":1572},[77,159941,33766],{"class":94},[77,159943,2622],{"class":87},[77,159945,159946],{"class":271},"\"及格\"",[77,159948,2628],{"class":87},[77,159950,159951,159953],{"class":79,"line":1589},[77,159952,4177],{"class":2123},[77,159954,6214],{"class":87},[77,159956,159957,159959,159961,159964],{"class":79,"line":1595},[77,159958,33766],{"class":94},[77,159960,2622],{"class":87},[77,159962,159963],{"class":271},"\"不及格\"",[77,159965,2628],{"class":87},[24,159967,159968],{},"注意判断顺序很重要。",[24,159970,159971,159972,159975],{},"如果把 ",[74,159973,159974],{},"score >= 60"," 放在最前面：",[67,159977,159979],{"className":32846,"code":159978,"language":32848,"meta":72,"style":72},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[74,159980,159981,159993,160003,160015],{"__ignoreMap":72},[77,159982,159983,159985,159987,159989,159991],{"class":79,"line":80},[77,159984,4008],{"class":2123},[77,159986,159881],{"class":87},[77,159988,4186],{"class":2123},[77,159990,159935],{"class":94},[77,159992,6214],{"class":87},[77,159994,159995,159997,159999,160001],{"class":79,"line":91},[77,159996,33766],{"class":94},[77,159998,2622],{"class":87},[77,160000,159946],{"class":271},[77,160002,2628],{"class":87},[77,160004,160005,160007,160009,160011,160013],{"class":79,"line":107},[77,160006,159904],{"class":2123},[77,160008,159881],{"class":87},[77,160010,4186],{"class":2123},[77,160012,159886],{"class":94},[77,160014,6214],{"class":87},[77,160016,160017,160019,160021,160023],{"class":79,"line":191},[77,160018,33766],{"class":94},[77,160020,2622],{"class":87},[77,160022,159897],{"class":271},[77,160024,2628],{"class":87},[24,160026,160027,160028,160030],{},"成绩 95 会先满足 ",[74,160029,159974],{},"，后面的优秀分支就不会执行。",[14,160032,160034],{"id":160033},"_35-判断语句嵌套","3.5 判断语句嵌套",[24,160036,160037],{},"嵌套判断就是在一个判断内部再写判断。",[67,160039,160041],{"className":32846,"code":160040,"language":32848,"meta":72,"style":72},"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",[74,160042,160043,160061,160076,160080,160092,160106,160116,160123,160134,160140],{"__ignoreMap":72},[77,160044,160045,160047,160049,160051,160053,160055,160057,160059],{"class":79,"line":80},[77,160046,148644],{"class":87},[77,160048,268],{"class":2123},[77,160050,4857],{"class":94},[77,160052,2622],{"class":87},[77,160054,159],{"class":94},[77,160056,2622],{"class":87},[77,160058,154492],{"class":271},[77,160060,32965],{"class":87},[77,160062,160063,160065,160067,160069,160071,160074],{"class":79,"line":91},[77,160064,158459],{"class":87},[77,160066,268],{"class":2123},[77,160068,63053],{"class":94},[77,160070,2622],{"class":87},[77,160072,160073],{"class":271},"\"是否有票(y\u002Fn):\"",[77,160075,2628],{"class":87},[77,160077,160078],{"class":79,"line":107},[77,160079,4875],{"emptyLinePlaceholder":2549},[77,160081,160082,160084,160086,160088,160090],{"class":79,"line":191},[77,160083,4008],{"class":2123},[77,160085,18177],{"class":87},[77,160087,4186],{"class":2123},[77,160089,158383],{"class":94},[77,160091,6214],{"class":87},[77,160093,160094,160096,160099,160101,160104],{"class":79,"line":1543},[77,160095,5576],{"class":2123},[77,160097,160098],{"class":87}," has_ticket ",[77,160100,5424],{"class":2123},[77,160102,160103],{"class":271}," \"y\"",[77,160105,6214],{"class":87},[77,160107,160108,160110,160112,160114],{"class":79,"line":1549},[77,160109,34918],{"class":94},[77,160111,2622],{"class":87},[77,160113,159745],{"class":271},[77,160115,2628],{"class":87},[77,160117,160118,160121],{"class":79,"line":1566},[77,160119,160120],{"class":2123},"    else",[77,160122,6214],{"class":87},[77,160124,160125,160127,160129,160132],{"class":79,"line":1572},[77,160126,34918],{"class":94},[77,160128,2622],{"class":87},[77,160130,160131],{"class":271},"\"请先买票\"",[77,160133,2628],{"class":87},[77,160135,160136,160138],{"class":79,"line":1589},[77,160137,4177],{"class":2123},[77,160139,6214],{"class":87},[77,160141,160142,160144,160146,160149],{"class":79,"line":1595},[77,160143,33766],{"class":94},[77,160145,2622],{"class":87},[77,160147,160148],{"class":271},"\"未成年人禁止进入\"",[77,160150,2628],{"class":87},[24,160152,160153],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160155,160157],{"id":160156},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[19,160159,160161],{"id":160160},"_361-and","3.6.1 and",[24,160163,160164],{},"两个条件都成立才成立。",[67,160166,160168],{"className":32846,"code":160167,"language":32848,"meta":72,"style":72},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[74,160169,160170,160178,160186,160190,160205],{"__ignoreMap":72},[77,160171,160172,160174,160176],{"class":79,"line":80},[77,160173,148644],{"class":87},[77,160175,268],{"class":2123},[77,160177,90501],{"class":94},[77,160179,160180,160182,160184],{"class":79,"line":91},[77,160181,158459],{"class":87},[77,160183,268],{"class":2123},[77,160185,155697],{"class":94},[77,160187,160188],{"class":79,"line":107},[77,160189,4875],{"emptyLinePlaceholder":2549},[77,160191,160192,160194,160196,160198,160200,160202],{"class":79,"line":191},[77,160193,4008],{"class":2123},[77,160195,18177],{"class":87},[77,160197,4186],{"class":2123},[77,160199,158383],{"class":94},[77,160201,122861],{"class":2123},[77,160203,160204],{"class":87}," has_ticket:\n",[77,160206,160207,160209,160211,160213],{"class":79,"line":1543},[77,160208,33766],{"class":94},[77,160210,2622],{"class":87},[77,160212,159745],{"class":271},[77,160214,2628],{"class":87},[19,160216,160218],{"id":160217},"_362-or","3.6.2 or",[24,160220,160221],{},"只要一个条件成立就成立。",[67,160223,160225],{"className":32846,"code":160224,"language":32848,"meta":72,"style":72},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[74,160226,160227,160236,160245,160249,160261],{"__ignoreMap":72},[77,160228,160229,160232,160234],{"class":79,"line":80},[77,160230,160231],{"class":87},"is_vip ",[77,160233,268],{"class":2123},[77,160235,128239],{"class":94},[77,160237,160238,160241,160243],{"class":79,"line":91},[77,160239,160240],{"class":87},"coupon ",[77,160242,268],{"class":2123},[77,160244,155697],{"class":94},[77,160246,160247],{"class":79,"line":107},[77,160248,4875],{"emptyLinePlaceholder":2549},[77,160250,160251,160253,160256,160258],{"class":79,"line":191},[77,160252,4008],{"class":2123},[77,160254,160255],{"class":87}," is_vip ",[77,160257,117523],{"class":2123},[77,160259,160260],{"class":87}," coupon:\n",[77,160262,160263,160265,160267,160270],{"class":79,"line":1543},[77,160264,33766],{"class":94},[77,160266,2622],{"class":87},[77,160268,160269],{"class":271},"\"可以享受优惠\"",[77,160271,2628],{"class":87},[19,160273,160275],{"id":160274},"_363-not","3.6.3 not",[24,160277,160278],{},"取反。",[67,160280,160282],{"className":32846,"code":160281,"language":32848,"meta":72,"style":72},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[74,160283,160284,160293,160297,160306],{"__ignoreMap":72},[77,160285,160286,160289,160291],{"class":79,"line":80},[77,160287,160288],{"class":87},"is_closed ",[77,160290,268],{"class":2123},[77,160292,128239],{"class":94},[77,160294,160295],{"class":79,"line":91},[77,160296,4875],{"emptyLinePlaceholder":2549},[77,160298,160299,160301,160303],{"class":79,"line":107},[77,160300,4008],{"class":2123},[77,160302,41396],{"class":2123},[77,160304,160305],{"class":87}," is_closed:\n",[77,160307,160308,160310,160312,160315],{"class":79,"line":191},[77,160309,33766],{"class":94},[77,160311,2622],{"class":87},[77,160313,160314],{"class":271},"\"店铺营业中\"",[77,160316,2628],{"class":87},[14,160318,160320],{"id":160319},"_37-链式比较","3.7 链式比较",[24,160322,160323],{},"Python 支持链式比较：",[67,160325,160327],{"className":32846,"code":160326,"language":32848,"meta":72,"style":72},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[74,160328,160329,160338,160342,160359],{"__ignoreMap":72},[77,160330,160331,160333,160335],{"class":79,"line":80},[77,160332,157456],{"class":87},[77,160334,268],{"class":2123},[77,160336,160337],{"class":94}," 85\n",[77,160339,160340],{"class":79,"line":91},[77,160341,4875],{"emptyLinePlaceholder":2549},[77,160343,160344,160346,160348,160351,160353,160355,160357],{"class":79,"line":107},[77,160345,4008],{"class":2123},[77,160347,6568],{"class":94},[77,160349,160350],{"class":2123}," \u003C=",[77,160352,159881],{"class":87},[77,160354,4064],{"class":2123},[77,160356,8229],{"class":94},[77,160358,6214],{"class":87},[77,160360,160361,160363,160365,160368],{"class":79,"line":191},[77,160362,33766],{"class":94},[77,160364,2622],{"class":87},[77,160366,160367],{"class":271},"\"成绩合法\"",[77,160369,2628],{"class":87},[24,160371,160372],{},"等价于：",[67,160374,160376],{"className":32846,"code":160375,"language":32848,"meta":72,"style":72},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[74,160377,160378,160398],{"__ignoreMap":72},[77,160379,160380,160382,160384,160386,160388,160390,160392,160394,160396],{"class":79,"line":80},[77,160381,4008],{"class":2123},[77,160383,159881],{"class":87},[77,160385,4186],{"class":2123},[77,160387,6568],{"class":94},[77,160389,122861],{"class":2123},[77,160391,159881],{"class":87},[77,160393,4064],{"class":2123},[77,160395,8229],{"class":94},[77,160397,6214],{"class":87},[77,160399,160400,160402,160404,160406],{"class":79,"line":91},[77,160401,33766],{"class":94},[77,160403,2622],{"class":87},[77,160405,160367],{"class":271},[77,160407,2628],{"class":87},[14,160409,160411],{"id":160410},"_38-真值和假值","3.8 真值和假值",[24,160413,640,160414,160416],{},[74,160415,4008],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[24,160418,160419],{},"假值：",[67,160421,160423],{"className":32846,"code":160422,"language":32848,"meta":72,"style":72},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[74,160424,160425,160429,160434,160438,160442,160447,160451,160455,160460],{"__ignoreMap":72},[77,160426,160427],{"class":79,"line":80},[77,160428,159615],{"class":94},[77,160430,160431],{"class":79,"line":91},[77,160432,160433],{"class":94},"None\n",[77,160435,160436],{"class":79,"line":107},[77,160437,5560],{"class":94},[77,160439,160440],{"class":79,"line":191},[77,160441,34809],{"class":94},[77,160443,160444],{"class":79,"line":1543},[77,160445,160446],{"class":271},"\"\"\n",[77,160448,160449],{"class":79,"line":1549},[77,160450,34824],{"class":87},[77,160452,160453],{"class":79,"line":1566},[77,160454,4451],{"class":87},[77,160456,160457],{"class":79,"line":1572},[77,160458,160459],{"class":87},"{}\n",[77,160461,160462,160464],{"class":79,"line":1589},[77,160463,157388],{"class":94},[77,160465,4451],{"class":87},[24,160467,17606],{},[67,160469,160471],{"className":32846,"code":160470,"language":32848,"meta":72,"style":72},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[74,160472,160473,160487,160491,160498,160518,160524],{"__ignoreMap":72},[77,160474,160475,160477,160479,160481,160483,160485],{"class":79,"line":80},[77,160476,148634],{"class":87},[77,160478,268],{"class":2123},[77,160480,63053],{"class":94},[77,160482,2622],{"class":87},[77,160484,154477],{"class":271},[77,160486,2628],{"class":87},[77,160488,160489],{"class":79,"line":91},[77,160490,4875],{"emptyLinePlaceholder":2549},[77,160492,160493,160495],{"class":79,"line":107},[77,160494,4008],{"class":2123},[77,160496,160497],{"class":87}," name:\n",[77,160499,160500,160502,160504,160506,160508,160510,160512,160514,160516],{"class":79,"line":191},[77,160501,33766],{"class":94},[77,160503,2622],{"class":87},[77,160505,2672],{"class":2123},[77,160507,159152],{"class":271},[77,160509,3509],{"class":94},[77,160511,82247],{"class":87},[77,160513,3558],{"class":94},[77,160515,2865],{"class":271},[77,160517,2628],{"class":87},[77,160519,160520,160522],{"class":79,"line":1543},[77,160521,4177],{"class":2123},[77,160523,6214],{"class":87},[77,160525,160526,160528,160530,160533],{"class":79,"line":1549},[77,160527,33766],{"class":94},[77,160529,2622],{"class":87},[77,160531,160532],{"class":271},"\"姓名不能为空\"",[77,160534,2628],{"class":87},[14,160536,160538],{"id":160537},"_39-match语句","3.9 match语句",[24,160540,160541,160542,160544],{},"Python 3.10 开始支持 ",[74,160543,73704],{},"。它适合处理固定选项。",[67,160546,160548],{"className":32846,"code":160547,"language":32848,"meta":72,"style":72},"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",[74,160549,160550,160566,160570,160577,160587,160598,160607,160618,160627,160638,160645],{"__ignoreMap":72},[77,160551,160552,160555,160557,160559,160561,160564],{"class":79,"line":80},[77,160553,160554],{"class":87},"command ",[77,160556,268],{"class":2123},[77,160558,63053],{"class":94},[77,160560,2622],{"class":87},[77,160562,160563],{"class":271},"\"请输入命令:\"",[77,160565,2628],{"class":87},[77,160567,160568],{"class":79,"line":91},[77,160569,4875],{"emptyLinePlaceholder":2549},[77,160571,160572,160574],{"class":79,"line":107},[77,160573,73704],{"class":2123},[77,160575,160576],{"class":87}," command:\n",[77,160578,160579,160582,160585],{"class":79,"line":191},[77,160580,160581],{"class":2123},"    case",[77,160583,160584],{"class":271}," \"start\"",[77,160586,6214],{"class":87},[77,160588,160589,160591,160593,160596],{"class":79,"line":1543},[77,160590,34918],{"class":94},[77,160592,2622],{"class":87},[77,160594,160595],{"class":271},"\"启动\"",[77,160597,2628],{"class":87},[77,160599,160600,160602,160605],{"class":79,"line":1549},[77,160601,160581],{"class":2123},[77,160603,160604],{"class":271}," \"stop\"",[77,160606,6214],{"class":87},[77,160608,160609,160611,160613,160616],{"class":79,"line":1566},[77,160610,34918],{"class":94},[77,160612,2622],{"class":87},[77,160614,160615],{"class":271},"\"停止\"",[77,160617,2628],{"class":87},[77,160619,160620,160622,160625],{"class":79,"line":1572},[77,160621,160581],{"class":2123},[77,160623,160624],{"class":271}," \"restart\"",[77,160626,6214],{"class":87},[77,160628,160629,160631,160633,160636],{"class":79,"line":1589},[77,160630,34918],{"class":94},[77,160632,2622],{"class":87},[77,160634,160635],{"class":271},"\"重启\"",[77,160637,2628],{"class":87},[77,160639,160640,160642],{"class":79,"line":1595},[77,160641,160581],{"class":2123},[77,160643,160644],{"class":87}," _:\n",[77,160646,160647,160649,160651,160654],{"class":79,"line":4088},[77,160648,34918],{"class":94},[77,160650,2622],{"class":87},[77,160652,160653],{"class":271},"\"未知命令\"",[77,160655,2628],{"class":87},[24,160657,160658,160659,160661,160662,160664],{},"入门阶段掌握 ",[74,160660,156756],{}," 更重要，",[74,160663,73704],{}," 可以作为补充。",[14,160666,160668],{"id":160667},"_310-小案例成绩等级","3.10 小案例：成绩等级",[24,160670,125724],{},[139,160672,160673,160676,160679],{},[54,160674,160675],{},"输入成绩。",[54,160677,160678],{},"判断成绩是否合法。",[54,160680,160681],{},"输出等级。",[24,160683,12508],{},[67,160685,160687],{"className":32846,"code":160686,"language":32848,"meta":72,"style":72},"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",[74,160688,160689,160707,160711,160729,160740,160752,160763,160775,160786,160799,160810,160822,160833,160839],{"__ignoreMap":72},[77,160690,160691,160693,160695,160697,160699,160701,160703,160705],{"class":79,"line":80},[77,160692,157456],{"class":87},[77,160694,268],{"class":2123},[77,160696,112230],{"class":94},[77,160698,2622],{"class":87},[77,160700,159],{"class":94},[77,160702,2622],{"class":87},[77,160704,154507],{"class":271},[77,160706,32965],{"class":87},[77,160708,160709],{"class":79,"line":91},[77,160710,4875],{"emptyLinePlaceholder":2549},[77,160712,160713,160715,160717,160719,160721,160723,160725,160727],{"class":79,"line":107},[77,160714,4008],{"class":2123},[77,160716,41396],{"class":2123},[77,160718,6568],{"class":94},[77,160720,160350],{"class":2123},[77,160722,159881],{"class":87},[77,160724,4064],{"class":2123},[77,160726,8229],{"class":94},[77,160728,6214],{"class":87},[77,160730,160731,160733,160735,160738],{"class":79,"line":191},[77,160732,33766],{"class":94},[77,160734,2622],{"class":87},[77,160736,160737],{"class":271},"\"成绩不合法\"",[77,160739,2628],{"class":87},[77,160741,160742,160744,160746,160748,160750],{"class":79,"line":1543},[77,160743,159904],{"class":2123},[77,160745,159881],{"class":87},[77,160747,4186],{"class":2123},[77,160749,159886],{"class":94},[77,160751,6214],{"class":87},[77,160753,160754,160756,160758,160761],{"class":79,"line":1549},[77,160755,33766],{"class":94},[77,160757,2622],{"class":87},[77,160759,160760],{"class":271},"\"等级:A\"",[77,160762,2628],{"class":87},[77,160764,160765,160767,160769,160771,160773],{"class":79,"line":1566},[77,160766,159904],{"class":2123},[77,160768,159881],{"class":87},[77,160770,4186],{"class":2123},[77,160772,159911],{"class":94},[77,160774,6214],{"class":87},[77,160776,160777,160779,160781,160784],{"class":79,"line":1572},[77,160778,33766],{"class":94},[77,160780,2622],{"class":87},[77,160782,160783],{"class":271},"\"等级:B\"",[77,160785,2628],{"class":87},[77,160787,160788,160790,160792,160794,160797],{"class":79,"line":1589},[77,160789,159904],{"class":2123},[77,160791,159881],{"class":87},[77,160793,4186],{"class":2123},[77,160795,160796],{"class":94}," 70",[77,160798,6214],{"class":87},[77,160800,160801,160803,160805,160808],{"class":79,"line":1595},[77,160802,33766],{"class":94},[77,160804,2622],{"class":87},[77,160806,160807],{"class":271},"\"等级:C\"",[77,160809,2628],{"class":87},[77,160811,160812,160814,160816,160818,160820],{"class":79,"line":4088},[77,160813,159904],{"class":2123},[77,160815,159881],{"class":87},[77,160817,4186],{"class":2123},[77,160819,159935],{"class":94},[77,160821,6214],{"class":87},[77,160823,160824,160826,160828,160831],{"class":79,"line":4093},[77,160825,33766],{"class":94},[77,160827,2622],{"class":87},[77,160829,160830],{"class":271},"\"等级:D\"",[77,160832,2628],{"class":87},[77,160834,160835,160837],{"class":79,"line":4099},[77,160836,4177],{"class":2123},[77,160838,6214],{"class":87},[77,160840,160841,160843,160845,160848],{"class":79,"line":4104},[77,160842,33766],{"class":94},[77,160844,2622],{"class":87},[77,160846,160847],{"class":271},"\"等级:E\"",[77,160849,2628],{"class":87},[14,160851,160853],{"id":160852},"_311-小案例会员折扣","3.11 小案例：会员折扣",[24,160855,125724],{},[139,160857,160858,160861,160864,160867],{},[54,160859,160860],{},"输入消费金额。",[54,160862,160863],{},"输入会员等级，普通、银卡、金卡。",[54,160865,160866],{},"普通不打折，银卡 9 折，金卡 8 折。",[54,160868,160869],{},"满 500 再减 50。",[24,160871,12508],{},[67,160873,160875],{"className":32846,"code":160874,"language":32848,"meta":72,"style":72},"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",[74,160876,160877,160897,160913,160917,160925,160929,160943,160953,160966,160975,160988,160996,161002,161013,161017,161031,161035,161049,161059,161063],{"__ignoreMap":72},[77,160878,160879,160882,160884,160886,160888,160890,160892,160895],{"class":79,"line":80},[77,160880,160881],{"class":87},"amount ",[77,160883,268],{"class":2123},[77,160885,112230],{"class":94},[77,160887,2622],{"class":87},[77,160889,159],{"class":94},[77,160891,2622],{"class":87},[77,160893,160894],{"class":271},"\"请输入消费金额:\"",[77,160896,32965],{"class":87},[77,160898,160899,160902,160904,160906,160908,160911],{"class":79,"line":91},[77,160900,160901],{"class":87},"level ",[77,160903,268],{"class":2123},[77,160905,63053],{"class":94},[77,160907,2622],{"class":87},[77,160909,160910],{"class":271},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[77,160912,2628],{"class":87},[77,160914,160915],{"class":79,"line":107},[77,160916,4875],{"emptyLinePlaceholder":2549},[77,160918,160919,160921,160923],{"class":79,"line":191},[77,160920,159334],{"class":87},[77,160922,268],{"class":2123},[77,160924,58147],{"class":94},[77,160926,160927],{"class":79,"line":1543},[77,160928,4875],{"emptyLinePlaceholder":2549},[77,160930,160931,160933,160936,160938,160941],{"class":79,"line":1549},[77,160932,4008],{"class":2123},[77,160934,160935],{"class":87}," level ",[77,160937,5424],{"class":2123},[77,160939,160940],{"class":271}," \"银卡\"",[77,160942,6214],{"class":87},[77,160944,160945,160948,160950],{"class":79,"line":1566},[77,160946,160947],{"class":87},"    discount ",[77,160949,268],{"class":2123},[77,160951,160952],{"class":94}," 0.9\n",[77,160954,160955,160957,160959,160961,160964],{"class":79,"line":1572},[77,160956,159904],{"class":2123},[77,160958,160935],{"class":87},[77,160960,5424],{"class":2123},[77,160962,160963],{"class":271}," \"金卡\"",[77,160965,6214],{"class":87},[77,160967,160968,160970,160972],{"class":79,"line":1589},[77,160969,160947],{"class":87},[77,160971,268],{"class":2123},[77,160973,160974],{"class":94}," 0.8\n",[77,160976,160977,160979,160981,160983,160986],{"class":79,"line":1595},[77,160978,159904],{"class":2123},[77,160980,160935],{"class":87},[77,160982,5424],{"class":2123},[77,160984,160985],{"class":271}," \"普通\"",[77,160987,6214],{"class":87},[77,160989,160990,160992,160994],{"class":79,"line":4088},[77,160991,160947],{"class":87},[77,160993,268],{"class":2123},[77,160995,58147],{"class":94},[77,160997,160998,161000],{"class":79,"line":4093},[77,160999,4177],{"class":2123},[77,161001,6214],{"class":87},[77,161003,161004,161006,161008,161011],{"class":79,"line":4099},[77,161005,33766],{"class":94},[77,161007,2622],{"class":87},[77,161009,161010],{"class":271},"\"会员等级输入错误，按普通会员计算\"",[77,161012,2628],{"class":87},[77,161014,161015],{"class":79,"line":4104},[77,161016,4875],{"emptyLinePlaceholder":2549},[77,161018,161019,161022,161024,161027,161029],{"class":79,"line":4118},[77,161020,161021],{"class":87},"pay ",[77,161023,268],{"class":2123},[77,161025,161026],{"class":87}," amount ",[77,161028,3068],{"class":2123},[77,161030,159373],{"class":87},[77,161032,161033],{"class":79,"line":4123},[77,161034,4875],{"emptyLinePlaceholder":2549},[77,161036,161037,161039,161042,161044,161047],{"class":79,"line":4129},[77,161038,4008],{"class":2123},[77,161040,161041],{"class":87}," pay ",[77,161043,4186],{"class":2123},[77,161045,161046],{"class":94}," 500",[77,161048,6214],{"class":87},[77,161050,161051,161054,161056],{"class":79,"line":4150},[77,161052,161053],{"class":87},"    pay ",[77,161055,152350],{"class":2123},[77,161057,161058],{"class":94}," 50\n",[77,161060,161061],{"class":79,"line":4155},[77,161062,4875],{"emptyLinePlaceholder":2549},[77,161064,161065,161067,161069,161071,161073,161075,161078,161080,161082,161084],{"class":79,"line":4169},[77,161066,32883],{"class":94},[77,161068,2622],{"class":87},[77,161070,2672],{"class":2123},[77,161072,159454],{"class":271},[77,161074,3509],{"class":94},[77,161076,161077],{"class":87},"pay",[77,161079,159257],{"class":2123},[77,161081,3558],{"class":94},[77,161083,159110],{"class":271},[77,161085,2628],{"class":87},[14,161087,161089],{"id":161088},"_312-易错点","3.12 易错点",[139,161091,161092,161095,161098,161101,161106],{},[54,161093,161094],{},"冒号不能漏。",[54,161096,161097],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[54,161099,161100],{},"多分支判断要注意顺序。",[54,161102,161103,161104,30853],{},"判断相等用 ",[74,161105,5424],{},[54,161107,161108],{},"字符串比较区分大小写：",[67,161110,161112],{"className":32846,"code":161111,"language":32848,"meta":72,"style":72},"\"Y\" == \"y\"  # False\n",[74,161113,161114],{"__ignoreMap":72},[77,161115,161116,161119,161121,161123],{"class":79,"line":80},[77,161117,161118],{"class":271},"\"Y\"",[77,161120,103994],{"class":2123},[77,161122,160103],{"class":271},[77,161124,161125],{"class":323},"  # False\n",[24,161127,161128],{},"可转换后再判断：",[67,161130,161132],{"className":32846,"code":161131,"language":32848,"meta":72,"style":72},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[74,161133,161134,161151,161164],{"__ignoreMap":72},[77,161135,161136,161139,161141,161143,161145,161148],{"class":79,"line":80},[77,161137,161138],{"class":87},"answer ",[77,161140,268],{"class":2123},[77,161142,63053],{"class":94},[77,161144,2622],{"class":87},[77,161146,161147],{"class":271},"\"是否继续(y\u002Fn):\"",[77,161149,161150],{"class":87},").lower()\n",[77,161152,161153,161155,161158,161160,161162],{"class":79,"line":91},[77,161154,4008],{"class":2123},[77,161156,161157],{"class":87}," answer ",[77,161159,5424],{"class":2123},[77,161161,160103],{"class":271},[77,161163,6214],{"class":87},[77,161165,161166,161168,161170,161173],{"class":79,"line":107},[77,161167,33766],{"class":94},[77,161169,2622],{"class":87},[77,161171,161172],{"class":271},"\"继续\"",[77,161174,2628],{"class":87},[14,161176,161178],{"id":161177},"_313-本章练习","3.13 本章练习",[139,161180,161181,161184,161187,161190,161200],{},[54,161182,161183],{},"输入年龄，判断是否成年。",[54,161185,161186],{},"输入年份，判断是否为闰年。",[54,161188,161189],{},"输入三个数字，输出最大值。",[54,161191,161192,161193,161196,161197,161199],{},"写登录判断：用户名是 ",[74,161194,161195],{},"admin"," 且密码是 ",[74,161198,17555],{}," 才登录成功。",[54,161201,161202],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2520,161204,161205],{},"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":72,"searchDepth":91,"depth":91,"links":161207},[161208,161209,161210,161211,161212,161213,161218,161219,161220,161221,161222,161223,161224],{"id":159596,"depth":91,"text":159597},{"id":159649,"depth":91,"text":159650},{"id":159753,"depth":91,"text":159754},{"id":159843,"depth":91,"text":159844},{"id":160033,"depth":91,"text":160034},{"id":160156,"depth":91,"text":160157,"children":161214},[161215,161216,161217],{"id":160160,"depth":107,"text":160161},{"id":160217,"depth":107,"text":160218},{"id":160274,"depth":107,"text":160275},{"id":160319,"depth":91,"text":160320},{"id":160410,"depth":91,"text":160411},{"id":160537,"depth":91,"text":160538},{"id":160667,"depth":91,"text":160668},{"id":160852,"depth":91,"text":160853},{"id":161088,"depth":91,"text":161089},{"id":161177,"depth":91,"text":161178},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159588,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161231,"title":161232,"body":161233,"description":2546,"extension":2547,"meta":163002,"navigation":2549,"path":163003,"seo":163004,"stem":163005,"__hash__":163006},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161234,"toc":162982},[161235,161238,161242,161248,161251,161268,161272,161274,161291,161293,161338,161340,161357,161361,161364,161430,161433,161451,161455,161616,161625,161629,161633,161638,161685,161687,161693,161697,161702,161749,161751,161757,161761,161766,161802,161805,161852,161856,161862,161920,161925,161956,161961,161965,162020,162023,162095,162098,162157,162161,162164,162239,162242,162246,162352,162355,162381,162385,162397,162466,162469,162561,162565,162567,162578,162580,162710,162714,162916,162924,162928,162958,162962,162979],[10,161236,161232],{"id":161237},"_4-循环语句",[14,161239,161241],{"id":161240},"_41-为什么需要循环","4.1 为什么需要循环",[24,161243,161244,161245,161247],{},"如果要输出 1 到 100，不应该写 100 行 ",[74,161246,148570],{},"，而应该用循环。",[24,161249,161250],{},"循环适合处理重复任务：",[139,161252,161253,161256,161259,161262,161265],{},[54,161254,161255],{},"重复输出。",[54,161257,161258],{},"重复输入。",[54,161260,161261],{},"遍历数据。",[54,161263,161264],{},"持续执行菜单。",[54,161266,161267],{},"批量处理文件或数据。",[14,161269,161271],{"id":161270},"_42-while循环","4.2 while循环",[24,161273,7656],{},[67,161275,161277],{"className":32846,"code":161276,"language":32848,"meta":72,"style":72},"while 条件:\n    循环体\n",[74,161278,161279,161286],{"__ignoreMap":72},[77,161280,161281,161283],{"class":79,"line":80},[77,161282,111096],{"class":2123},[77,161284,161285],{"class":87}," 条件:\n",[77,161287,161288],{"class":79,"line":91},[77,161289,161290],{"class":87},"    循环体\n",[24,161292,17606],{},[67,161294,161296],{"className":32846,"code":161295,"language":32848,"meta":72,"style":72},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[74,161297,161298,161306,161310,161322,161329],{"__ignoreMap":72},[77,161299,161300,161302,161304],{"class":79,"line":80},[77,161301,102584],{"class":87},[77,161303,268],{"class":2123},[77,161305,58147],{"class":94},[77,161307,161308],{"class":79,"line":91},[77,161309,4875],{"emptyLinePlaceholder":2549},[77,161311,161312,161314,161316,161318,161320],{"class":79,"line":107},[77,161313,111096],{"class":2123},[77,161315,11911],{"class":87},[77,161317,4064],{"class":2123},[77,161319,4623],{"class":94},[77,161321,6214],{"class":87},[77,161323,161324,161326],{"class":79,"line":191},[77,161325,33766],{"class":94},[77,161327,161328],{"class":87},"(i)\n",[77,161330,161331,161334,161336],{"class":79,"line":1543},[77,161332,161333],{"class":87},"    i ",[77,161335,11950],{"class":2123},[77,161337,58147],{"class":94},[24,161339,83366],{},[139,161341,161342,161348,161351,161354],{},[54,161343,161344,161345,30853],{},"判断条件 ",[74,161346,161347],{},"i \u003C= 5",[54,161349,161350],{},"条件成立，执行循环体。",[54,161352,161353],{},"执行完后回到条件判断。",[54,161355,161356],{},"条件不成立，退出循环。",[14,161358,161360],{"id":161359},"_43-while累加","4.3 while累加",[24,161362,161363],{},"计算 1 到 100 的和：",[67,161365,161367],{"className":32846,"code":161366,"language":32848,"meta":72,"style":72},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[74,161368,161369,161377,161385,161389,161401,161411,161419,161423],{"__ignoreMap":72},[77,161370,161371,161373,161375],{"class":79,"line":80},[77,161372,102584],{"class":87},[77,161374,268],{"class":2123},[77,161376,58147],{"class":94},[77,161378,161379,161381,161383],{"class":79,"line":91},[77,161380,159358],{"class":87},[77,161382,268],{"class":2123},[77,161384,49799],{"class":94},[77,161386,161387],{"class":79,"line":107},[77,161388,4875],{"emptyLinePlaceholder":2549},[77,161390,161391,161393,161395,161397,161399],{"class":79,"line":191},[77,161392,111096],{"class":2123},[77,161394,11911],{"class":87},[77,161396,4064],{"class":2123},[77,161398,8229],{"class":94},[77,161400,6214],{"class":87},[77,161402,161403,161406,161408],{"class":79,"line":1543},[77,161404,161405],{"class":87},"    total ",[77,161407,11950],{"class":2123},[77,161409,161410],{"class":87}," i\n",[77,161412,161413,161415,161417],{"class":79,"line":1549},[77,161414,161333],{"class":87},[77,161416,11950],{"class":2123},[77,161418,58147],{"class":94},[77,161420,161421],{"class":79,"line":1566},[77,161422,4875],{"emptyLinePlaceholder":2549},[77,161424,161425,161427],{"class":79,"line":1572},[77,161426,32883],{"class":94},[77,161428,161429],{"class":87},"(total)\n",[24,161431,161432],{},"核心思想：",[139,161434,161435,161440,161445],{},[54,161436,161437,161439],{},[74,161438,646],{}," 控制循环次数。",[54,161441,161442,161444],{},[74,161443,159459],{}," 保存累加结果。",[54,161446,161447,161448,161450],{},"每轮循环都要更新 ",[74,161449,646],{},"，否则可能死循环。",[14,161452,161454],{"id":161453},"_44-while猜数字","4.4 while猜数字",[67,161456,161458],{"className":32846,"code":161457,"language":32848,"meta":72,"style":72},"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",[74,161459,161460,161466,161470,161487,161495,161499,161507,161527,161536,161540,161552,161563,161573,161584,161590,161612],{"__ignoreMap":72},[77,161461,161462,161464],{"class":79,"line":80},[77,161463,32860],{"class":2123},[77,161465,47794],{"class":87},[77,161467,161468],{"class":79,"line":91},[77,161469,4875],{"emptyLinePlaceholder":2549},[77,161471,161472,161474,161476,161479,161481,161483,161485],{"class":79,"line":107},[77,161473,161138],{"class":87},[77,161475,268],{"class":2123},[77,161477,161478],{"class":87}," random.randint(",[77,161480,2120],{"class":94},[77,161482,680],{"class":87},[77,161484,2925],{"class":94},[77,161486,2628],{"class":87},[77,161488,161489,161491,161493],{"class":79,"line":191},[77,161490,148789],{"class":87},[77,161492,268],{"class":2123},[77,161494,49799],{"class":94},[77,161496,161497],{"class":79,"line":1543},[77,161498,4875],{"emptyLinePlaceholder":2549},[77,161500,161501,161503,161505],{"class":79,"line":1549},[77,161502,111096],{"class":2123},[77,161504,97728],{"class":94},[77,161506,6214],{"class":87},[77,161508,161509,161512,161514,161516,161518,161520,161522,161525],{"class":79,"line":1566},[77,161510,161511],{"class":87},"    guess ",[77,161513,268],{"class":2123},[77,161515,4857],{"class":94},[77,161517,2622],{"class":87},[77,161519,159],{"class":94},[77,161521,2622],{"class":87},[77,161523,161524],{"class":271},"\"请输入1到100之间的数字:\"",[77,161526,32965],{"class":87},[77,161528,161529,161532,161534],{"class":79,"line":1572},[77,161530,161531],{"class":87},"    count ",[77,161533,11950],{"class":2123},[77,161535,58147],{"class":94},[77,161537,161538],{"class":79,"line":1589},[77,161539,4875],{"emptyLinePlaceholder":2549},[77,161541,161542,161544,161547,161549],{"class":79,"line":1595},[77,161543,5576],{"class":2123},[77,161545,161546],{"class":87}," guess ",[77,161548,3572],{"class":2123},[77,161550,161551],{"class":87}," answer:\n",[77,161553,161554,161556,161558,161561],{"class":79,"line":4088},[77,161555,34918],{"class":94},[77,161557,2622],{"class":87},[77,161559,161560],{"class":271},"\"猜大了\"",[77,161562,2628],{"class":87},[77,161564,161565,161567,161569,161571],{"class":79,"line":4093},[77,161566,41759],{"class":2123},[77,161568,161546],{"class":87},[77,161570,260],{"class":2123},[77,161572,161551],{"class":87},[77,161574,161575,161577,161579,161582],{"class":79,"line":4099},[77,161576,34918],{"class":94},[77,161578,2622],{"class":87},[77,161580,161581],{"class":271},"\"猜小了\"",[77,161583,2628],{"class":87},[77,161585,161586,161588],{"class":79,"line":4104},[77,161587,160120],{"class":2123},[77,161589,6214],{"class":87},[77,161591,161592,161594,161596,161598,161601,161603,161605,161607,161610],{"class":79,"line":4118},[77,161593,34918],{"class":94},[77,161595,2622],{"class":87},[77,161597,2672],{"class":2123},[77,161599,161600],{"class":271},"\"猜对了，一共猜了",[77,161602,3509],{"class":94},[77,161604,86871],{"class":87},[77,161606,3558],{"class":94},[77,161608,161609],{"class":271},"次\"",[77,161611,2628],{"class":87},[77,161613,161614],{"class":79,"line":4123},[77,161615,34094],{"class":2123},[24,161617,161618,161621,161622,161624],{},[74,161619,161620],{},"while True"," 表示无限循环，通常配合 ",[74,161623,4528],{}," 使用。",[14,161626,161628],{"id":161627},"_45-break和continue","4.5 break和continue",[19,161630,161632],{"id":161631},"_451-break","4.5.1 break",[24,161634,161635,161637],{},[74,161636,4528],{}," 直接结束整个循环。",[67,161639,161641],{"className":32846,"code":161640,"language":32848,"meta":72,"style":72},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[74,161642,161643,161663,161675,161679],{"__ignoreMap":72},[77,161644,161645,161647,161649,161651,161653,161655,161657,161659,161661],{"class":79,"line":80},[77,161646,5500],{"class":2123},[77,161648,11911],{"class":87},[77,161650,28511],{"class":2123},[77,161652,34910],{"class":94},[77,161654,2622],{"class":87},[77,161656,2120],{"class":94},[77,161658,680],{"class":87},[77,161660,2958],{"class":94},[77,161662,33254],{"class":87},[77,161664,161665,161667,161669,161671,161673],{"class":79,"line":91},[77,161666,5576],{"class":2123},[77,161668,11911],{"class":87},[77,161670,5424],{"class":2123},[77,161672,80508],{"class":94},[77,161674,6214],{"class":87},[77,161676,161677],{"class":79,"line":107},[77,161678,34094],{"class":2123},[77,161680,161681,161683],{"class":79,"line":191},[77,161682,33766],{"class":94},[77,161684,161328],{"class":87},[24,161686,148555],{},[67,161688,161691],{"className":161689,"code":161690,"language":7662,"meta":72},[7660],"1\n2\n",[74,161692,161690],{"__ignoreMap":72},[19,161694,161696],{"id":161695},"_452-continue","4.5.2 continue",[24,161698,161699,161701],{},[74,161700,156770],{}," 跳过本轮剩余代码，进入下一轮循环。",[67,161703,161705],{"className":32846,"code":161704,"language":32848,"meta":72,"style":72},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[74,161706,161707,161727,161739,161743],{"__ignoreMap":72},[77,161708,161709,161711,161713,161715,161717,161719,161721,161723,161725],{"class":79,"line":80},[77,161710,5500],{"class":2123},[77,161712,11911],{"class":87},[77,161714,28511],{"class":2123},[77,161716,34910],{"class":94},[77,161718,2622],{"class":87},[77,161720,2120],{"class":94},[77,161722,680],{"class":87},[77,161724,2958],{"class":94},[77,161726,33254],{"class":87},[77,161728,161729,161731,161733,161735,161737],{"class":79,"line":91},[77,161730,5576],{"class":2123},[77,161732,11911],{"class":87},[77,161734,5424],{"class":2123},[77,161736,80508],{"class":94},[77,161738,6214],{"class":87},[77,161740,161741],{"class":79,"line":107},[77,161742,150610],{"class":2123},[77,161744,161745,161747],{"class":79,"line":191},[77,161746,33766],{"class":94},[77,161748,161328],{"class":87},[24,161750,148555],{},[67,161752,161755],{"className":161753,"code":161754,"language":7662,"meta":72},[7660],"1\n2\n4\n5\n",[74,161756,161754],{"__ignoreMap":72},[14,161758,161760],{"id":161759},"_46-for循环","4.6 for循环",[24,161762,161763,161765],{},[74,161764,5500],{}," 常用于遍历序列。",[67,161767,161769],{"className":32846,"code":161768,"language":32848,"meta":72,"style":72},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[74,161770,161771,161780,161784,161795],{"__ignoreMap":72},[77,161772,161773,161775,161777],{"class":79,"line":80},[77,161774,148634],{"class":87},[77,161776,268],{"class":2123},[77,161778,161779],{"class":271}," \"python\"\n",[77,161781,161782],{"class":79,"line":91},[77,161783,4875],{"emptyLinePlaceholder":2549},[77,161785,161786,161788,161791,161793],{"class":79,"line":107},[77,161787,5500],{"class":2123},[77,161789,161790],{"class":87}," ch ",[77,161792,28511],{"class":2123},[77,161794,160497],{"class":87},[77,161796,161797,161799],{"class":79,"line":191},[77,161798,33766],{"class":94},[77,161800,161801],{"class":87},"(ch)\n",[24,161803,161804],{},"遍历列表：",[67,161806,161808],{"className":32846,"code":161807,"language":32848,"meta":72,"style":72},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[74,161809,161810,161832,161836,161846],{"__ignoreMap":72},[77,161811,161812,161815,161817,161819,161821,161823,161825,161827,161830],{"class":79,"line":80},[77,161813,161814],{"class":87},"students ",[77,161816,268],{"class":2123},[77,161818,54684],{"class":87},[77,161820,151986],{"class":271},[77,161822,680],{"class":87},[77,161824,153034],{"class":271},[77,161826,680],{"class":87},[77,161828,161829],{"class":271},"\"小刚\"",[77,161831,35713],{"class":87},[77,161833,161834],{"class":79,"line":91},[77,161835,4875],{"emptyLinePlaceholder":2549},[77,161837,161838,161840,161842,161844],{"class":79,"line":107},[77,161839,5500],{"class":2123},[77,161841,154235],{"class":87},[77,161843,28511],{"class":2123},[77,161845,154240],{"class":87},[77,161847,161848,161850],{"class":79,"line":191},[77,161849,33766],{"class":94},[77,161851,152140],{"class":87},[14,161853,161855],{"id":161854},"_47-range函数","4.7 range函数",[24,161857,161858,161861],{},[74,161859,161860],{},"range()"," 用于生成整数序列。",[67,161863,161865],{"className":32846,"code":161864,"language":32848,"meta":72,"style":72},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[74,161866,161867,161881,161899],{"__ignoreMap":72},[77,161868,161869,161871,161873,161875,161878],{"class":79,"line":80},[77,161870,35883],{"class":94},[77,161872,2622],{"class":87},[77,161874,2933],{"class":94},[77,161876,161877],{"class":87},")          ",[77,161879,161880],{"class":323},"# 0,1,2,3,4\n",[77,161882,161883,161885,161887,161889,161891,161893,161896],{"class":79,"line":91},[77,161884,35883],{"class":94},[77,161886,2622],{"class":87},[77,161888,2120],{"class":94},[77,161890,680],{"class":87},[77,161892,2933],{"class":94},[77,161894,161895],{"class":87},")       ",[77,161897,161898],{"class":323},"# 1,2,3,4\n",[77,161900,161901,161903,161905,161907,161909,161911,161913,161915,161917],{"class":79,"line":107},[77,161902,35883],{"class":94},[77,161904,2622],{"class":87},[77,161906,2120],{"class":94},[77,161908,680],{"class":87},[77,161910,3059],{"class":94},[77,161912,680],{"class":87},[77,161914,2696],{"class":94},[77,161916,157759],{"class":87},[77,161918,161919],{"class":323},"# 1,3,5,7,9\n",[24,161921,161922,161923,27086],{},"配合 ",[74,161924,5500],{},[67,161926,161928],{"className":32846,"code":161927,"language":32848,"meta":72,"style":72},"for i in range(1, 6):\n    print(i)\n",[74,161929,161930,161950],{"__ignoreMap":72},[77,161931,161932,161934,161936,161938,161940,161942,161944,161946,161948],{"class":79,"line":80},[77,161933,5500],{"class":2123},[77,161935,11911],{"class":87},[77,161937,28511],{"class":2123},[77,161939,34910],{"class":94},[77,161941,2622],{"class":87},[77,161943,2120],{"class":94},[77,161945,680],{"class":87},[77,161947,2958],{"class":94},[77,161949,33254],{"class":87},[77,161951,161952,161954],{"class":79,"line":91},[77,161953,33766],{"class":94},[77,161955,161328],{"class":87},[24,161957,1988,161958,161960],{},[74,161959,35883],{}," 的结束值不包含在内。",[14,161962,161964],{"id":161963},"_48-for循环求和","4.8 for循环求和",[67,161966,161968],{"className":32846,"code":161967,"language":32848,"meta":72,"style":72},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[74,161969,161970,161978,161982,162002,162010,162014],{"__ignoreMap":72},[77,161971,161972,161974,161976],{"class":79,"line":80},[77,161973,159358],{"class":87},[77,161975,268],{"class":2123},[77,161977,49799],{"class":94},[77,161979,161980],{"class":79,"line":91},[77,161981,4875],{"emptyLinePlaceholder":2549},[77,161983,161984,161986,161988,161990,161992,161994,161996,161998,162000],{"class":79,"line":107},[77,161985,5500],{"class":2123},[77,161987,11911],{"class":87},[77,161989,28511],{"class":2123},[77,161991,34910],{"class":94},[77,161993,2622],{"class":87},[77,161995,2120],{"class":94},[77,161997,680],{"class":87},[77,161999,2951],{"class":94},[77,162001,33254],{"class":87},[77,162003,162004,162006,162008],{"class":79,"line":191},[77,162005,161405],{"class":87},[77,162007,11950],{"class":2123},[77,162009,161410],{"class":87},[77,162011,162012],{"class":79,"line":1543},[77,162013,4875],{"emptyLinePlaceholder":2549},[77,162015,162016,162018],{"class":79,"line":1549},[77,162017,32883],{"class":94},[77,162019,161429],{"class":87},[24,162021,162022],{},"求偶数和：",[67,162024,162026],{"className":32846,"code":162025,"language":32848,"meta":72,"style":72},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[74,162027,162028,162036,162040,162060,162076,162085,162089],{"__ignoreMap":72},[77,162029,162030,162032,162034],{"class":79,"line":80},[77,162031,159358],{"class":87},[77,162033,268],{"class":2123},[77,162035,49799],{"class":94},[77,162037,162038],{"class":79,"line":91},[77,162039,4875],{"emptyLinePlaceholder":2549},[77,162041,162042,162044,162046,162048,162050,162052,162054,162056,162058],{"class":79,"line":107},[77,162043,5500],{"class":2123},[77,162045,11911],{"class":87},[77,162047,28511],{"class":2123},[77,162049,34910],{"class":94},[77,162051,2622],{"class":87},[77,162053,2120],{"class":94},[77,162055,680],{"class":87},[77,162057,2951],{"class":94},[77,162059,33254],{"class":87},[77,162061,162062,162064,162066,162068,162070,162072,162074],{"class":79,"line":191},[77,162063,5576],{"class":2123},[77,162065,11911],{"class":87},[77,162067,2942],{"class":2123},[77,162069,17227],{"class":94},[77,162071,103994],{"class":2123},[77,162073,6568],{"class":94},[77,162075,6214],{"class":87},[77,162077,162078,162081,162083],{"class":79,"line":1543},[77,162079,162080],{"class":87},"        total ",[77,162082,11950],{"class":2123},[77,162084,161410],{"class":87},[77,162086,162087],{"class":79,"line":1549},[77,162088,4875],{"emptyLinePlaceholder":2549},[77,162090,162091,162093],{"class":79,"line":1566},[77,162092,32883],{"class":94},[77,162094,161429],{"class":87},[24,162096,162097],{},"也可以：",[67,162099,162101],{"className":32846,"code":162100,"language":32848,"meta":72,"style":72},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[74,162102,162103,162111,162115,162139,162147,162151],{"__ignoreMap":72},[77,162104,162105,162107,162109],{"class":79,"line":80},[77,162106,159358],{"class":87},[77,162108,268],{"class":2123},[77,162110,49799],{"class":94},[77,162112,162113],{"class":79,"line":91},[77,162114,4875],{"emptyLinePlaceholder":2549},[77,162116,162117,162119,162121,162123,162125,162127,162129,162131,162133,162135,162137],{"class":79,"line":107},[77,162118,5500],{"class":2123},[77,162120,11911],{"class":87},[77,162122,28511],{"class":2123},[77,162124,34910],{"class":94},[77,162126,2622],{"class":87},[77,162128,2696],{"class":94},[77,162130,680],{"class":87},[77,162132,2951],{"class":94},[77,162134,680],{"class":87},[77,162136,2696],{"class":94},[77,162138,33254],{"class":87},[77,162140,162141,162143,162145],{"class":79,"line":191},[77,162142,161405],{"class":87},[77,162144,11950],{"class":2123},[77,162146,161410],{"class":87},[77,162148,162149],{"class":79,"line":1543},[77,162150,4875],{"emptyLinePlaceholder":2549},[77,162152,162153,162155],{"class":79,"line":1549},[77,162154,32883],{"class":94},[77,162156,161429],{"class":87},[14,162158,162160],{"id":162159},"_49-循环嵌套","4.9 循环嵌套",[24,162162,162163],{},"嵌套循环就是循环里面再写循环。",[67,162165,162167],{"className":32846,"code":162166,"language":32848,"meta":72,"style":72},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[74,162168,162169,162189,162209],{"__ignoreMap":72},[77,162170,162171,162173,162175,162177,162179,162181,162183,162185,162187],{"class":79,"line":80},[77,162172,5500],{"class":2123},[77,162174,11911],{"class":87},[77,162176,28511],{"class":2123},[77,162178,34910],{"class":94},[77,162180,2622],{"class":87},[77,162182,2120],{"class":94},[77,162184,680],{"class":87},[77,162186,2907],{"class":94},[77,162188,33254],{"class":87},[77,162190,162191,162193,162195,162197,162199,162201,162203,162205,162207],{"class":79,"line":91},[77,162192,5676],{"class":2123},[77,162194,11973],{"class":87},[77,162196,28511],{"class":2123},[77,162198,34910],{"class":94},[77,162200,2622],{"class":87},[77,162202,2120],{"class":94},[77,162204,680],{"class":87},[77,162206,2907],{"class":94},[77,162208,33254],{"class":87},[77,162210,162211,162213,162215,162217,162220,162222,162224,162226,162229,162231,162233,162235,162237],{"class":79,"line":107},[77,162212,34918],{"class":94},[77,162214,2622],{"class":87},[77,162216,2672],{"class":2123},[77,162218,162219],{"class":271},"\"i=",[77,162221,3509],{"class":94},[77,162223,646],{"class":87},[77,162225,3558],{"class":94},[77,162227,162228],{"class":271},", j=",[77,162230,3509],{"class":94},[77,162232,3080],{"class":87},[77,162234,3558],{"class":94},[77,162236,2865],{"class":271},[77,162238,2628],{"class":87},[24,162240,162241],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162243,162245],{"id":162244},"_410-九九乘法表","4.10 九九乘法表",[67,162247,162249],{"className":32846,"code":162248,"language":32848,"meta":72,"style":72},"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",[74,162250,162251,162271,162294,162346],{"__ignoreMap":72},[77,162252,162253,162255,162257,162259,162261,162263,162265,162267,162269],{"class":79,"line":80},[77,162254,5500],{"class":2123},[77,162256,11911],{"class":87},[77,162258,28511],{"class":2123},[77,162260,34910],{"class":94},[77,162262,2622],{"class":87},[77,162264,2120],{"class":94},[77,162266,680],{"class":87},[77,162268,3059],{"class":94},[77,162270,33254],{"class":87},[77,162272,162273,162275,162277,162279,162281,162283,162285,162288,162290,162292],{"class":79,"line":91},[77,162274,5676],{"class":2123},[77,162276,11973],{"class":87},[77,162278,28511],{"class":2123},[77,162280,34910],{"class":94},[77,162282,2622],{"class":87},[77,162284,2120],{"class":94},[77,162286,162287],{"class":87},", i ",[77,162289,3094],{"class":2123},[77,162291,27586],{"class":94},[77,162293,33254],{"class":87},[77,162295,162296,162298,162300,162302,162304,162306,162308,162310,162312,162314,162316,162318,162320,162322,162324,162326,162328,162330,162332,162334,162336,162338,162340,162342,162344],{"class":79,"line":107},[77,162297,34918],{"class":94},[77,162299,2622],{"class":87},[77,162301,2672],{"class":2123},[77,162303,2865],{"class":271},[77,162305,3509],{"class":94},[77,162307,3080],{"class":87},[77,162309,3558],{"class":94},[77,162311,3068],{"class":271},[77,162313,3509],{"class":94},[77,162315,646],{"class":87},[77,162317,3558],{"class":94},[77,162319,268],{"class":271},[77,162321,3509],{"class":94},[77,162323,102584],{"class":87},[77,162325,3068],{"class":2123},[77,162327,5885],{"class":87},[77,162329,3558],{"class":94},[77,162331,2865],{"class":271},[77,162333,680],{"class":87},[77,162335,48267],{"class":7691},[77,162337,268],{"class":2123},[77,162339,2865],{"class":271},[77,162341,3712],{"class":94},[77,162343,2865],{"class":271},[77,162345,2628],{"class":87},[77,162347,162348,162350],{"class":79,"line":191},[77,162349,33766],{"class":94},[77,162351,4451],{"class":87},[24,162353,162354],{},"关键点：",[139,162356,162357,162363,162369,162375],{},[54,162358,162359,162360,162362],{},"外层 ",[74,162361,646],{}," 控制行。",[54,162364,162365,162366,162368],{},"内层 ",[74,162367,3080],{}," 控制列。",[54,162370,162371,162372,162374],{},"每行结束后用 ",[74,162373,148570],{}," 换行。",[54,162376,162377,162380],{},[74,162378,162379],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162382,162384],{"id":162383},"_411-循环else","4.11 循环else",[24,162386,162387,162388,162390,162391,162393,162394,162396],{},"Python 的循环可以带 ",[74,162389,4177],{},"。当循环正常结束时执行 ",[74,162392,4177],{},"，如果被 ",[74,162395,4528],{}," 打断，则不执行。",[67,162398,162400],{"className":32846,"code":162399,"language":32848,"meta":72,"style":72},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[74,162401,162402,162422,162434,162445,162449,162455],{"__ignoreMap":72},[77,162403,162404,162406,162408,162410,162412,162414,162416,162418,162420],{"class":79,"line":80},[77,162405,5500],{"class":2123},[77,162407,11911],{"class":87},[77,162409,28511],{"class":2123},[77,162411,34910],{"class":94},[77,162413,2622],{"class":87},[77,162415,2120],{"class":94},[77,162417,680],{"class":87},[77,162419,2958],{"class":94},[77,162421,33254],{"class":87},[77,162423,162424,162426,162428,162430,162432],{"class":79,"line":91},[77,162425,5576],{"class":2123},[77,162427,11911],{"class":87},[77,162429,5424],{"class":2123},[77,162431,4513],{"class":94},[77,162433,6214],{"class":87},[77,162435,162436,162438,162440,162443],{"class":79,"line":107},[77,162437,34918],{"class":94},[77,162439,2622],{"class":87},[77,162441,162442],{"class":271},"\"找到了\"",[77,162444,2628],{"class":87},[77,162446,162447],{"class":79,"line":191},[77,162448,34094],{"class":2123},[77,162450,162451,162453],{"class":79,"line":1543},[77,162452,4177],{"class":2123},[77,162454,6214],{"class":87},[77,162456,162457,162459,162461,162464],{"class":79,"line":1549},[77,162458,33766],{"class":94},[77,162460,2622],{"class":87},[77,162462,162463],{"class":271},"\"没找到\"",[77,162465,2628],{"class":87},[24,162467,162468],{},"常用于搜索。",[67,162470,162472],{"className":32846,"code":162471,"language":32848,"meta":72,"style":72},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[74,162473,162474,162495,162504,162508,162520,162531,162541,162545,162551],{"__ignoreMap":72},[77,162475,162476,162479,162481,162483,162485,162487,162489,162491,162493],{"class":79,"line":80},[77,162477,162478],{"class":87},"names ",[77,162480,268],{"class":2123},[77,162482,54684],{"class":87},[77,162484,151986],{"class":271},[77,162486,680],{"class":87},[77,162488,153034],{"class":271},[77,162490,680],{"class":87},[77,162492,161829],{"class":271},[77,162494,35713],{"class":87},[77,162496,162497,162499,162501],{"class":79,"line":91},[77,162498,114011],{"class":87},[77,162500,268],{"class":2123},[77,162502,162503],{"class":271}," \"小李\"\n",[77,162505,162506],{"class":79,"line":107},[77,162507,4875],{"emptyLinePlaceholder":2549},[77,162509,162510,162512,162515,162517],{"class":79,"line":191},[77,162511,5500],{"class":2123},[77,162513,162514],{"class":87}," name ",[77,162516,28511],{"class":2123},[77,162518,162519],{"class":87}," names:\n",[77,162521,162522,162524,162526,162528],{"class":79,"line":1543},[77,162523,5576],{"class":2123},[77,162525,162514],{"class":87},[77,162527,5424],{"class":2123},[77,162529,162530],{"class":87}," target:\n",[77,162532,162533,162535,162537,162539],{"class":79,"line":1549},[77,162534,34918],{"class":94},[77,162536,2622],{"class":87},[77,162538,162442],{"class":271},[77,162540,2628],{"class":87},[77,162542,162543],{"class":79,"line":1566},[77,162544,34094],{"class":2123},[77,162546,162547,162549],{"class":79,"line":1572},[77,162548,4177],{"class":2123},[77,162550,6214],{"class":87},[77,162552,162553,162555,162557,162559],{"class":79,"line":1589},[77,162554,33766],{"class":94},[77,162556,2622],{"class":87},[77,162558,162463],{"class":271},[77,162560,2628],{"class":87},[14,162562,162564],{"id":162563},"_412-小案例登录重试","4.12 小案例：登录重试",[24,162566,125724],{},[139,162568,162569,162572,162575],{},[54,162570,162571],{},"用户最多输入 3 次密码。",[54,162573,162574],{},"密码正确则登录成功。",[54,162576,162577],{},"3 次都错误则锁定账号。",[24,162579,12508],{},[67,162581,162583],{"className":32846,"code":162582,"language":32848,"meta":72,"style":72},"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",[74,162584,162585,162595,162599,162615,162631,162635,162647,162658,162662,162668,162693,162699],{"__ignoreMap":72},[77,162586,162587,162590,162592],{"class":79,"line":80},[77,162588,162589],{"class":87},"password ",[77,162591,268],{"class":2123},[77,162593,162594],{"class":271}," \"123456\"\n",[77,162596,162597],{"class":79,"line":91},[77,162598,4875],{"emptyLinePlaceholder":2549},[77,162600,162601,162603,162605,162607,162609,162611,162613],{"class":79,"line":107},[77,162602,5500],{"class":2123},[77,162604,11911],{"class":87},[77,162606,28511],{"class":2123},[77,162608,34910],{"class":94},[77,162610,2622],{"class":87},[77,162612,2690],{"class":94},[77,162614,33254],{"class":87},[77,162616,162617,162620,162622,162624,162626,162629],{"class":79,"line":191},[77,162618,162619],{"class":87},"    user_password ",[77,162621,268],{"class":2123},[77,162623,63053],{"class":94},[77,162625,2622],{"class":87},[77,162627,162628],{"class":271},"\"请输入密码:\"",[77,162630,2628],{"class":87},[77,162632,162633],{"class":79,"line":1543},[77,162634,4875],{"emptyLinePlaceholder":2549},[77,162636,162637,162639,162642,162644],{"class":79,"line":1549},[77,162638,5576],{"class":2123},[77,162640,162641],{"class":87}," user_password ",[77,162643,5424],{"class":2123},[77,162645,162646],{"class":87}," password:\n",[77,162648,162649,162651,162653,162656],{"class":79,"line":1566},[77,162650,34918],{"class":94},[77,162652,2622],{"class":87},[77,162654,162655],{"class":271},"\"登录成功\"",[77,162657,2628],{"class":87},[77,162659,162660],{"class":79,"line":1572},[77,162661,34094],{"class":2123},[77,162663,162664,162666],{"class":79,"line":1589},[77,162665,160120],{"class":2123},[77,162667,6214],{"class":87},[77,162669,162670,162672,162674,162676,162679,162682,162684,162686,162688,162691],{"class":79,"line":1595},[77,162671,34918],{"class":94},[77,162673,2622],{"class":87},[77,162675,2672],{"class":2123},[77,162677,162678],{"class":271},"\"密码错误，还剩",[77,162680,162681],{"class":94},"{2",[77,162683,54729],{"class":2123},[77,162685,5507],{"class":87},[77,162687,3558],{"class":94},[77,162689,162690],{"class":271},"次机会\"",[77,162692,2628],{"class":87},[77,162694,162695,162697],{"class":79,"line":4088},[77,162696,4177],{"class":2123},[77,162698,6214],{"class":87},[77,162700,162701,162703,162705,162708],{"class":79,"line":4093},[77,162702,33766],{"class":94},[77,162704,2622],{"class":87},[77,162706,162707],{"class":271},"\"账号已锁定\"",[77,162709,2628],{"class":87},[14,162711,162713],{"id":162712},"_413-小案例菜单程序","4.13 小案例：菜单程序",[67,162715,162717],{"className":32846,"code":162716,"language":32848,"meta":72,"style":72},"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",[74,162718,162719,162727,162738,162749,162760,162771,162782,162786,162801,162805,162817,162828,162840,162851,162863,162874,162886,162896,162900,162906],{"__ignoreMap":72},[77,162720,162721,162723,162725],{"class":79,"line":80},[77,162722,111096],{"class":2123},[77,162724,97728],{"class":94},[77,162726,6214],{"class":87},[77,162728,162729,162731,162733,162736],{"class":79,"line":91},[77,162730,33766],{"class":94},[77,162732,2622],{"class":87},[77,162734,162735],{"class":271},"\"====== 菜单 ======\"",[77,162737,2628],{"class":87},[77,162739,162740,162742,162744,162747],{"class":79,"line":107},[77,162741,33766],{"class":94},[77,162743,2622],{"class":87},[77,162745,162746],{"class":271},"\"1. 查询余额\"",[77,162748,2628],{"class":87},[77,162750,162751,162753,162755,162758],{"class":79,"line":191},[77,162752,33766],{"class":94},[77,162754,2622],{"class":87},[77,162756,162757],{"class":271},"\"2. 存款\"",[77,162759,2628],{"class":87},[77,162761,162762,162764,162766,162769],{"class":79,"line":1543},[77,162763,33766],{"class":94},[77,162765,2622],{"class":87},[77,162767,162768],{"class":271},"\"3. 取款\"",[77,162770,2628],{"class":87},[77,162772,162773,162775,162777,162780],{"class":79,"line":1549},[77,162774,33766],{"class":94},[77,162776,2622],{"class":87},[77,162778,162779],{"class":271},"\"0. 退出\"",[77,162781,2628],{"class":87},[77,162783,162784],{"class":79,"line":1566},[77,162785,4875],{"emptyLinePlaceholder":2549},[77,162787,162788,162791,162793,162795,162797,162799],{"class":79,"line":1572},[77,162789,162790],{"class":87},"    choice ",[77,162792,268],{"class":2123},[77,162794,63053],{"class":94},[77,162796,2622],{"class":87},[77,162798,155171],{"class":271},[77,162800,2628],{"class":87},[77,162802,162803],{"class":79,"line":1589},[77,162804,4875],{"emptyLinePlaceholder":2549},[77,162806,162807,162809,162811,162813,162815],{"class":79,"line":1595},[77,162808,5576],{"class":2123},[77,162810,155184],{"class":87},[77,162812,5424],{"class":2123},[77,162814,155189],{"class":271},[77,162816,6214],{"class":87},[77,162818,162819,162821,162823,162826],{"class":79,"line":4088},[77,162820,34918],{"class":94},[77,162822,2622],{"class":87},[77,162824,162825],{"class":271},"\"余额为1000元\"",[77,162827,2628],{"class":87},[77,162829,162830,162832,162834,162836,162838],{"class":79,"line":4093},[77,162831,41759],{"class":2123},[77,162833,155184],{"class":87},[77,162835,5424],{"class":2123},[77,162837,155208],{"class":271},[77,162839,6214],{"class":87},[77,162841,162842,162844,162846,162849],{"class":79,"line":4099},[77,162843,34918],{"class":94},[77,162845,2622],{"class":87},[77,162847,162848],{"class":271},"\"存款功能\"",[77,162850,2628],{"class":87},[77,162852,162853,162855,162857,162859,162861],{"class":79,"line":4104},[77,162854,41759],{"class":2123},[77,162856,155184],{"class":87},[77,162858,5424],{"class":2123},[77,162860,155226],{"class":271},[77,162862,6214],{"class":87},[77,162864,162865,162867,162869,162872],{"class":79,"line":4118},[77,162866,34918],{"class":94},[77,162868,2622],{"class":87},[77,162870,162871],{"class":271},"\"取款功能\"",[77,162873,2628],{"class":87},[77,162875,162876,162878,162880,162882,162884],{"class":79,"line":4123},[77,162877,41759],{"class":2123},[77,162879,155184],{"class":87},[77,162881,5424],{"class":2123},[77,162883,155280],{"class":271},[77,162885,6214],{"class":87},[77,162887,162888,162890,162892,162894],{"class":79,"line":4129},[77,162889,34918],{"class":94},[77,162891,2622],{"class":87},[77,162893,155291],{"class":271},[77,162895,2628],{"class":87},[77,162897,162898],{"class":79,"line":4150},[77,162899,34094],{"class":2123},[77,162901,162902,162904],{"class":79,"line":4155},[77,162903,160120],{"class":2123},[77,162905,6214],{"class":87},[77,162907,162908,162910,162912,162914],{"class":79,"line":4169},[77,162909,34918],{"class":94},[77,162911,2622],{"class":87},[77,162913,155312],{"class":271},[77,162915,2628],{"class":87},[24,162917,162918,162919,162921,162922,30853],{},"菜单类程序通常使用 ",[74,162920,161620],{},"，用户选择退出时 ",[74,162923,4528],{},[14,162925,162927],{"id":162926},"_414-易错点","4.14 易错点",[139,162929,162930,162935,162941,162949,162955],{},[54,162931,162932,162934],{},[74,162933,111096],{}," 循环必须更新控制变量。",[54,162936,162937,162940],{},[74,162938,162939],{},"range(1, 10)"," 不包含 10。",[54,162942,162943,162945,162946,162948],{},[74,162944,4528],{}," 结束整个循环，",[74,162947,156770],{}," 只跳过本轮。",[54,162950,162951,162952,162954],{},"嵌套循环中，",[74,162953,4528],{}," 只跳出当前所在的一层循环。",[54,162956,162957],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162959,162961],{"id":162960},"_415-本章练习","4.15 本章练习",[139,162963,162964,162967,162970,162973,162976],{},[54,162965,162966],{},"输出 1 到 100。",[54,162968,162969],{},"计算 1 到 100 的偶数和。",[54,162971,162972],{},"输出 100 以内能被 3 和 5 同时整除的数。",[54,162974,162975],{},"编写猜数字游戏，限制最多猜 7 次。",[54,162977,162978],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2520,162980,162981],{},"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":72,"searchDepth":91,"depth":91,"links":162983},[162984,162985,162986,162987,162988,162992,162993,162994,162995,162996,162997,162998,162999,163000,163001],{"id":161240,"depth":91,"text":161241},{"id":161270,"depth":91,"text":161271},{"id":161359,"depth":91,"text":161360},{"id":161453,"depth":91,"text":161454},{"id":161627,"depth":91,"text":161628,"children":162989},[162990,162991],{"id":161631,"depth":107,"text":161632},{"id":161695,"depth":107,"text":161696},{"id":161759,"depth":91,"text":161760},{"id":161854,"depth":91,"text":161855},{"id":161963,"depth":91,"text":161964},{"id":162159,"depth":91,"text":162160},{"id":162244,"depth":91,"text":162245},{"id":162383,"depth":91,"text":162384},{"id":162563,"depth":91,"text":162564},{"id":162712,"depth":91,"text":162713},{"id":162926,"depth":91,"text":162927},{"id":162960,"depth":91,"text":162961},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161232,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163008,"title":163009,"body":163010,"description":2546,"extension":2547,"meta":165015,"navigation":2549,"path":165016,"seo":165017,"stem":165018,"__hash__":165019},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163011,"toc":164995},[163012,163015,163019,163022,163025,163039,163042,163056,163060,163062,163081,163083,163130,163132,163146,163150,163224,163227,163231,163234,163293,163301,163304,163357,163360,163364,163369,163424,163432,163482,163486,163491,163499,163598,163604,163608,163613,163616,163627,163668,163681,163685,163688,163724,163727,163740,163743,163803,163807,163811,163814,163865,163869,163872,163919,163925,163991,163994,163998,164001,164117,164120,164124,164127,164233,164237,164240,164278,164281,164323,164326,164386,164389,164393,164857,164860,164864,164891,164897,164958,164962,164992],[10,163013,163009],{"id":163014},"_5-函数基础",[14,163016,163018],{"id":163017},"_51-为什么需要函数","5.1 为什么需要函数",[24,163020,163021],{},"函数用于封装一段可以重复使用的代码。",[24,163023,163024],{},"不使用函数的问题：",[139,163026,163027,163030,163033,163036],{},[54,163028,163029],{},"重复代码多。",[54,163031,163032],{},"修改逻辑时容易漏改。",[54,163034,163035],{},"主流程不清晰。",[54,163037,163038],{},"程序越写越长，难以维护。",[24,163040,163041],{},"使用函数后的好处：",[139,163043,163044,163047,163050,163053],{},[54,163045,163046],{},"提高复用性。",[54,163048,163049],{},"提高可读性。",[54,163051,163052],{},"便于调试。",[54,163054,163055],{},"便于分工。",[14,163057,163059],{"id":163058},"_52-函数定义","5.2 函数定义",[24,163061,7656],{},[67,163063,163065],{"className":32846,"code":163064,"language":32848,"meta":72,"style":72},"def 函数名():\n    函数体\n",[74,163066,163067,163076],{"__ignoreMap":72},[77,163068,163069,163071,163074],{"class":79,"line":80},[77,163070,34414],{"class":2123},[77,163072,163073],{"class":83}," 函数名",[77,163075,34420],{"class":87},[77,163077,163078],{"class":79,"line":91},[77,163079,163080],{"class":87},"    函数体\n",[24,163082,17606],{},[67,163084,163086],{"className":32846,"code":163085,"language":32848,"meta":72,"style":72},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[74,163087,163088,163097,163107,163117,163121,163125],{"__ignoreMap":72},[77,163089,163090,163092,163095],{"class":79,"line":80},[77,163091,34414],{"class":2123},[77,163093,163094],{"class":83}," say_hello",[77,163096,34420],{"class":87},[77,163098,163099,163101,163103,163105],{"class":79,"line":91},[77,163100,33766],{"class":94},[77,163102,2622],{"class":87},[77,163104,8319],{"class":271},[77,163106,2628],{"class":87},[77,163108,163109,163111,163113,163115],{"class":79,"line":107},[77,163110,33766],{"class":94},[77,163112,2622],{"class":87},[77,163114,148737],{"class":271},[77,163116,2628],{"class":87},[77,163118,163119],{"class":79,"line":191},[77,163120,4875],{"emptyLinePlaceholder":2549},[77,163122,163123],{"class":79,"line":1543},[77,163124,4875],{"emptyLinePlaceholder":2549},[77,163126,163127],{"class":79,"line":1549},[77,163128,163129],{"class":87},"say_hello()\n",[24,163131,1988],{},[139,163133,163134,163137,163140,163143],{},[54,163135,163136],{},"函数必须先定义，再调用。",[54,163138,163139],{},"函数名遵循变量命名规则。",[54,163141,163142],{},"函数体需要缩进。",[54,163144,163145],{},"函数不调用就不会执行。",[14,163147,163149],{"id":163148},"_53-函数调用","5.3 函数调用",[67,163151,163153],{"className":32846,"code":163152,"language":32848,"meta":72,"style":72},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[74,163154,163155,163164,163175,163186,163197,163207,163211,163215,163220],{"__ignoreMap":72},[77,163156,163157,163159,163162],{"class":79,"line":80},[77,163158,34414],{"class":2123},[77,163160,163161],{"class":83}," print_menu",[77,163163,34420],{"class":87},[77,163165,163166,163168,163170,163173],{"class":79,"line":91},[77,163167,33766],{"class":94},[77,163169,2622],{"class":87},[77,163171,163172],{"class":271},"\"1. 查询\"",[77,163174,2628],{"class":87},[77,163176,163177,163179,163181,163184],{"class":79,"line":107},[77,163178,33766],{"class":94},[77,163180,2622],{"class":87},[77,163182,163183],{"class":271},"\"2. 添加\"",[77,163185,2628],{"class":87},[77,163187,163188,163190,163192,163195],{"class":79,"line":191},[77,163189,33766],{"class":94},[77,163191,2622],{"class":87},[77,163193,163194],{"class":271},"\"3. 删除\"",[77,163196,2628],{"class":87},[77,163198,163199,163201,163203,163205],{"class":79,"line":1543},[77,163200,33766],{"class":94},[77,163202,2622],{"class":87},[77,163204,162779],{"class":271},[77,163206,2628],{"class":87},[77,163208,163209],{"class":79,"line":1549},[77,163210,4875],{"emptyLinePlaceholder":2549},[77,163212,163213],{"class":79,"line":1566},[77,163214,4875],{"emptyLinePlaceholder":2549},[77,163216,163217],{"class":79,"line":1572},[77,163218,163219],{"class":87},"print_menu()\n",[77,163221,163222],{"class":79,"line":1589},[77,163223,163219],{"class":87},[24,163225,163226],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163228,163230],{"id":163229},"_54-参数","5.4 参数",[24,163232,163233],{},"参数用于向函数传递数据。",[67,163235,163237],{"className":32846,"code":163236,"language":32848,"meta":72,"style":72},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[74,163238,163239,163248,163268,163272,163276,163285],{"__ignoreMap":72},[77,163240,163241,163243,163245],{"class":79,"line":80},[77,163242,34414],{"class":2123},[77,163244,163094],{"class":83},[77,163246,163247],{"class":87},"(name):\n",[77,163249,163250,163252,163254,163256,163258,163260,163262,163264,163266],{"class":79,"line":91},[77,163251,33766],{"class":94},[77,163253,2622],{"class":87},[77,163255,2672],{"class":2123},[77,163257,159152],{"class":271},[77,163259,3509],{"class":94},[77,163261,82247],{"class":87},[77,163263,3558],{"class":94},[77,163265,2865],{"class":271},[77,163267,2628],{"class":87},[77,163269,163270],{"class":79,"line":107},[77,163271,4875],{"emptyLinePlaceholder":2549},[77,163273,163274],{"class":79,"line":191},[77,163275,4875],{"emptyLinePlaceholder":2549},[77,163277,163278,163281,163283],{"class":79,"line":1543},[77,163279,163280],{"class":87},"say_hello(",[77,163282,151986],{"class":271},[77,163284,2628],{"class":87},[77,163286,163287,163289,163291],{"class":79,"line":1549},[77,163288,163280],{"class":87},[77,163290,153034],{"class":271},[77,163292,2628],{"class":87},[24,163294,163295,163297,163298,163300],{},[74,163296,82247],{}," 是形参，",[74,163299,151986],{}," 是实参。",[24,163302,163303],{},"多个参数：",[67,163305,163307],{"className":32846,"code":163306,"language":32848,"meta":72,"style":72},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[74,163308,163309,163317,163330,163336,163340,163344],{"__ignoreMap":72},[77,163310,163311,163313,163315],{"class":79,"line":80},[77,163312,34414],{"class":2123},[77,163314,7684],{"class":83},[77,163316,153191],{"class":87},[77,163318,163319,163322,163324,163326,163328],{"class":79,"line":91},[77,163320,163321],{"class":87},"    result ",[77,163323,268],{"class":2123},[77,163325,13342],{"class":87},[77,163327,3094],{"class":2123},[77,163329,153202],{"class":87},[77,163331,163332,163334],{"class":79,"line":107},[77,163333,33766],{"class":94},[77,163335,79023],{"class":87},[77,163337,163338],{"class":79,"line":191},[77,163339,4875],{"emptyLinePlaceholder":2549},[77,163341,163342],{"class":79,"line":1543},[77,163343,4875],{"emptyLinePlaceholder":2549},[77,163345,163346,163349,163351,163353,163355],{"class":79,"line":1549},[77,163347,163348],{"class":87},"add(",[77,163350,3059],{"class":94},[77,163352,680],{"class":87},[77,163354,3313],{"class":94},[77,163356,2628],{"class":87},[24,163358,163359],{},"调用时参数数量必须匹配。",[14,163361,163363],{"id":163362},"_55-返回值","5.5 返回值",[24,163365,163366,163368],{},[74,163367,19516],{}," 用于把函数内部的结果返回给调用者。",[67,163370,163372],{"className":32846,"code":163371,"language":32848,"meta":72,"style":72},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[74,163373,163374,163382,163392,163396,163400,163418],{"__ignoreMap":72},[77,163375,163376,163378,163380],{"class":79,"line":80},[77,163377,34414],{"class":2123},[77,163379,7684],{"class":83},[77,163381,153191],{"class":87},[77,163383,163384,163386,163388,163390],{"class":79,"line":91},[77,163385,6565],{"class":2123},[77,163387,13342],{"class":87},[77,163389,3094],{"class":2123},[77,163391,153202],{"class":87},[77,163393,163394],{"class":79,"line":107},[77,163395,4875],{"emptyLinePlaceholder":2549},[77,163397,163398],{"class":79,"line":191},[77,163399,4875],{"emptyLinePlaceholder":2549},[77,163401,163402,163405,163407,163410,163412,163414,163416],{"class":79,"line":1543},[77,163403,163404],{"class":87},"result ",[77,163406,268],{"class":2123},[77,163408,163409],{"class":87}," add(",[77,163411,3059],{"class":94},[77,163413,680],{"class":87},[77,163415,3313],{"class":94},[77,163417,2628],{"class":87},[77,163419,163420,163422],{"class":79,"line":1549},[77,163421,32883],{"class":94},[77,163423,79023],{"class":87},[24,163425,163426,163427,163429,163430,30853],{},"如果函数没有写 ",[74,163428,19516],{},"，默认返回 ",[74,163431,98122],{},[67,163433,163435],{"className":32846,"code":163434,"language":32848,"meta":72,"style":72},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[74,163436,163437,163445,163455,163459,163463,163472],{"__ignoreMap":72},[77,163438,163439,163441,163443],{"class":79,"line":80},[77,163440,34414],{"class":2123},[77,163442,163094],{"class":83},[77,163444,34420],{"class":87},[77,163446,163447,163449,163451,163453],{"class":79,"line":91},[77,163448,33766],{"class":94},[77,163450,2622],{"class":87},[77,163452,8319],{"class":271},[77,163454,2628],{"class":87},[77,163456,163457],{"class":79,"line":107},[77,163458,4875],{"emptyLinePlaceholder":2549},[77,163460,163461],{"class":79,"line":191},[77,163462,4875],{"emptyLinePlaceholder":2549},[77,163464,163465,163467,163469],{"class":79,"line":1543},[77,163466,163404],{"class":87},[77,163468,268],{"class":2123},[77,163470,163471],{"class":87}," say_hello()\n",[77,163473,163474,163476,163479],{"class":79,"line":1549},[77,163475,32883],{"class":94},[77,163477,163478],{"class":87},"(result)  ",[77,163480,163481],{"class":323},"# None\n",[14,163483,163485],{"id":163484},"_56-return的作用","5.6 return的作用",[24,163487,163488,163490],{},[74,163489,19516],{}," 有两个作用：",[139,163492,163493,163496],{},[54,163494,163495],{},"返回结果。",[54,163497,163498],{},"结束函数。",[67,163500,163502],{"className":32846,"code":163501,"language":32848,"meta":72,"style":72},"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",[74,163503,163504,163514,163526,163533,163537,163549,163556,163560,163567,163571,163575,163586],{"__ignoreMap":72},[77,163505,163506,163508,163511],{"class":79,"line":80},[77,163507,34414],{"class":2123},[77,163509,163510],{"class":83}," check_age",[77,163512,163513],{"class":87},"(age):\n",[77,163515,163516,163518,163520,163522,163524],{"class":79,"line":91},[77,163517,5576],{"class":2123},[77,163519,18177],{"class":87},[77,163521,260],{"class":2123},[77,163523,6568],{"class":94},[77,163525,6214],{"class":87},[77,163527,163528,163530],{"class":79,"line":107},[77,163529,17224],{"class":2123},[77,163531,163532],{"class":271}," \"年龄不合法\"\n",[77,163534,163535],{"class":79,"line":191},[77,163536,4875],{"emptyLinePlaceholder":2549},[77,163538,163539,163541,163543,163545,163547],{"class":79,"line":1543},[77,163540,5576],{"class":2123},[77,163542,18177],{"class":87},[77,163544,4186],{"class":2123},[77,163546,158383],{"class":94},[77,163548,6214],{"class":87},[77,163550,163551,163553],{"class":79,"line":1549},[77,163552,17224],{"class":2123},[77,163554,163555],{"class":271}," \"成年人\"\n",[77,163557,163558],{"class":79,"line":1566},[77,163559,4875],{"emptyLinePlaceholder":2549},[77,163561,163562,163564],{"class":79,"line":1572},[77,163563,6565],{"class":2123},[77,163565,163566],{"class":271}," \"未成年人\"\n",[77,163568,163569],{"class":79,"line":1589},[77,163570,4875],{"emptyLinePlaceholder":2549},[77,163572,163573],{"class":79,"line":1595},[77,163574,4875],{"emptyLinePlaceholder":2549},[77,163576,163577,163579,163582,163584],{"class":79,"line":4088},[77,163578,32883],{"class":94},[77,163580,163581],{"class":87},"(check_age(",[77,163583,3313],{"class":94},[77,163585,32965],{"class":87},[77,163587,163588,163590,163592,163594,163596],{"class":79,"line":4093},[77,163589,32883],{"class":94},[77,163591,163581],{"class":87},[77,163593,3145],{"class":2123},[77,163595,2120],{"class":94},[77,163597,32965],{"class":87},[24,163599,163600,163601,163603],{},"函数执行到 ",[74,163602,19516],{}," 后，后面的代码不会继续执行。",[14,163605,163607],{"id":163606},"_57-none","5.7 None",[24,163609,163610,163612],{},[74,163611,98122],{}," 表示空值或没有结果。",[24,163614,163615],{},"常见使用场景：",[139,163617,163618,163621,163624],{},[54,163619,163620],{},"函数没有返回值。",[54,163622,163623],{},"变量暂时没有具体值。",[54,163625,163626],{},"表示查询不到结果。",[67,163628,163630],{"className":32846,"code":163629,"language":32848,"meta":72,"style":72},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[74,163631,163632,163640,163644,163657],{"__ignoreMap":72},[77,163633,163634,163636,163638],{"class":79,"line":80},[77,163635,163404],{"class":87},[77,163637,268],{"class":2123},[77,163639,154270],{"class":94},[77,163641,163642],{"class":79,"line":91},[77,163643,4875],{"emptyLinePlaceholder":2549},[77,163645,163646,163648,163651,163653,163655],{"class":79,"line":107},[77,163647,4008],{"class":2123},[77,163649,163650],{"class":87}," result ",[77,163652,41393],{"class":2123},[77,163654,41399],{"class":94},[77,163656,6214],{"class":87},[77,163658,163659,163661,163663,163666],{"class":79,"line":191},[77,163660,33766],{"class":94},[77,163662,2622],{"class":87},[77,163664,163665],{"class":271},"\"没有数据\"",[77,163667,2628],{"class":87},[24,163669,163670,163671,163673,163674,163677,163678,30853],{},"判断 ",[74,163672,98122],{}," 推荐使用 ",[74,163675,163676],{},"is None","，不要写成 ",[74,163679,163680],{},"== None",[14,163682,163684],{"id":163683},"_58-函数文档字符串","5.8 函数文档字符串",[24,163686,163687],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[67,163689,163691],{"className":32846,"code":163690,"language":32848,"meta":72,"style":72},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[74,163692,163693,163703,163708],{"__ignoreMap":72},[77,163694,163695,163697,163700],{"class":79,"line":80},[77,163696,34414],{"class":2123},[77,163698,163699],{"class":83}," calculate_bmi",[77,163701,163702],{"class":87},"(weight, height):\n",[77,163704,163705],{"class":79,"line":91},[77,163706,163707],{"class":271},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[77,163709,163710,163712,163715,163717,163720,163722],{"class":79,"line":107},[77,163711,6565],{"class":2123},[77,163713,163714],{"class":87}," weight ",[77,163716,3197],{"class":2123},[77,163718,163719],{"class":87}," height ",[77,163721,13134],{"class":2123},[77,163723,50189],{"class":94},[24,163725,163726],{},"查看说明：",[67,163728,163730],{"className":32846,"code":163729,"language":32848,"meta":72,"style":72},"help(calculate_bmi)\n",[74,163731,163732],{"__ignoreMap":72},[77,163733,163734,163737],{"class":79,"line":80},[77,163735,163736],{"class":94},"help",[77,163738,163739],{"class":87},"(calculate_bmi)\n",[24,163741,163742],{},"较完整的写法：",[67,163744,163746],{"className":32846,"code":163745,"language":32848,"meta":72,"style":72},"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",[74,163747,163748,163756,163761,163766,163770,163775,163780,163785,163789],{"__ignoreMap":72},[77,163749,163750,163752,163754],{"class":79,"line":80},[77,163751,34414],{"class":2123},[77,163753,163699],{"class":83},[77,163755,163702],{"class":87},[77,163757,163758],{"class":79,"line":91},[77,163759,163760],{"class":271},"    \"\"\"\n",[77,163762,163763],{"class":79,"line":107},[77,163764,163765],{"class":271},"    计算BMI。\n",[77,163767,163768],{"class":79,"line":191},[77,163769,4875],{"emptyLinePlaceholder":2549},[77,163771,163772],{"class":79,"line":1543},[77,163773,163774],{"class":271},"    :param weight: 体重，单位kg\n",[77,163776,163777],{"class":79,"line":1549},[77,163778,163779],{"class":271},"    :param height: 身高，单位m\n",[77,163781,163782],{"class":79,"line":1566},[77,163783,163784],{"class":271},"    :return: BMI数值\n",[77,163786,163787],{"class":79,"line":1572},[77,163788,163760],{"class":271},[77,163790,163791,163793,163795,163797,163799,163801],{"class":79,"line":1589},[77,163792,6565],{"class":2123},[77,163794,163714],{"class":87},[77,163796,3197],{"class":2123},[77,163798,163719],{"class":87},[77,163800,13134],{"class":2123},[77,163802,50189],{"class":94},[14,163804,163806],{"id":163805},"_59-变量作用域","5.9 变量作用域",[19,163808,163810],{"id":163809},"_591-局部变量","5.9.1 局部变量",[24,163812,163813],{},"在函数内部定义的变量，只能在函数内部使用。",[67,163815,163817],{"className":32846,"code":163816,"language":32848,"meta":72,"style":72},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[74,163818,163819,163828,163836,163842,163846,163850,163855],{"__ignoreMap":72},[77,163820,163821,163823,163826],{"class":79,"line":80},[77,163822,34414],{"class":2123},[77,163824,163825],{"class":83}," test",[77,163827,34420],{"class":87},[77,163829,163830,163832,163834],{"class":79,"line":91},[77,163831,48059],{"class":87},[77,163833,268],{"class":2123},[77,163835,60876],{"class":94},[77,163837,163838,163840],{"class":79,"line":107},[77,163839,33766],{"class":94},[77,163841,2635],{"class":87},[77,163843,163844],{"class":79,"line":191},[77,163845,4875],{"emptyLinePlaceholder":2549},[77,163847,163848],{"class":79,"line":1543},[77,163849,4875],{"emptyLinePlaceholder":2549},[77,163851,163852],{"class":79,"line":1549},[77,163853,163854],{"class":87},"test()\n",[77,163856,163857,163859,163862],{"class":79,"line":1566},[77,163858,32883],{"class":94},[77,163860,163861],{"class":87},"(num)  ",[77,163863,163864],{"class":323},"# 报错\n",[19,163866,163868],{"id":163867},"_592-全局变量","5.9.2 全局变量",[24,163870,163871],{},"在函数外部定义的变量，可以在函数内部读取。",[67,163873,163875],{"className":32846,"code":163874,"language":32848,"meta":72,"style":72},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[74,163876,163877,163885,163889,163893,163901,163907,163911,163915],{"__ignoreMap":72},[77,163878,163879,163881,163883],{"class":79,"line":80},[77,163880,148634],{"class":87},[77,163882,268],{"class":2123},[77,163884,151451],{"class":271},[77,163886,163887],{"class":79,"line":91},[77,163888,4875],{"emptyLinePlaceholder":2549},[77,163890,163891],{"class":79,"line":107},[77,163892,4875],{"emptyLinePlaceholder":2549},[77,163894,163895,163897,163899],{"class":79,"line":191},[77,163896,34414],{"class":2123},[77,163898,163094],{"class":83},[77,163900,34420],{"class":87},[77,163902,163903,163905],{"class":79,"line":1543},[77,163904,33766],{"class":94},[77,163906,152758],{"class":87},[77,163908,163909],{"class":79,"line":1549},[77,163910,4875],{"emptyLinePlaceholder":2549},[77,163912,163913],{"class":79,"line":1566},[77,163914,4875],{"emptyLinePlaceholder":2549},[77,163916,163917],{"class":79,"line":1572},[77,163918,163129],{"class":87},[24,163920,163921,163922,30853],{},"如果要在函数内部修改全局变量，需要 ",[74,163923,163924],{},"global",[67,163926,163928],{"className":32846,"code":163927,"language":32848,"meta":72,"style":72},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[74,163929,163930,163938,163942,163946,163955,163963,163971,163975,163979,163984],{"__ignoreMap":72},[77,163931,163932,163934,163936],{"class":79,"line":80},[77,163933,148789],{"class":87},[77,163935,268],{"class":2123},[77,163937,49799],{"class":94},[77,163939,163940],{"class":79,"line":91},[77,163941,4875],{"emptyLinePlaceholder":2549},[77,163943,163944],{"class":79,"line":107},[77,163945,4875],{"emptyLinePlaceholder":2549},[77,163947,163948,163950,163953],{"class":79,"line":191},[77,163949,34414],{"class":2123},[77,163951,163952],{"class":83}," add_count",[77,163954,34420],{"class":87},[77,163956,163957,163960],{"class":79,"line":1543},[77,163958,163959],{"class":2123},"    global",[77,163961,163962],{"class":87}," count\n",[77,163964,163965,163967,163969],{"class":79,"line":1549},[77,163966,161531],{"class":87},[77,163968,11950],{"class":2123},[77,163970,58147],{"class":94},[77,163972,163973],{"class":79,"line":1566},[77,163974,4875],{"emptyLinePlaceholder":2549},[77,163976,163977],{"class":79,"line":1572},[77,163978,4875],{"emptyLinePlaceholder":2549},[77,163980,163981],{"class":79,"line":1589},[77,163982,163983],{"class":87},"add_count()\n",[77,163985,163986,163988],{"class":79,"line":1595},[77,163987,32883],{"class":94},[77,163989,163990],{"class":87},"(count)\n",[24,163992,163993],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163995,163997],{"id":163996},"_510-函数嵌套调用","5.10 函数嵌套调用",[24,163999,164000],{},"一个函数中可以调用另一个函数。",[67,164002,164004],{"className":32846,"code":164003,"language":32848,"meta":72,"style":72},"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",[74,164005,164006,164015,164029,164033,164037,164046,164051,164071,164092,164096,164100,164104],{"__ignoreMap":72},[77,164007,164008,164010,164013],{"class":79,"line":80},[77,164009,34414],{"class":2123},[77,164011,164012],{"class":83}," print_line",[77,164014,34420],{"class":87},[77,164016,164017,164019,164021,164023,164025,164027],{"class":79,"line":91},[77,164018,33766],{"class":94},[77,164020,2622],{"class":87},[77,164022,34950],{"class":271},[77,164024,8993],{"class":2123},[77,164026,81103],{"class":94},[77,164028,2628],{"class":87},[77,164030,164031],{"class":79,"line":107},[77,164032,4875],{"emptyLinePlaceholder":2549},[77,164034,164035],{"class":79,"line":191},[77,164036,4875],{"emptyLinePlaceholder":2549},[77,164038,164039,164041,164044],{"class":79,"line":1543},[77,164040,34414],{"class":2123},[77,164042,164043],{"class":83}," print_info",[77,164045,151473],{"class":87},[77,164047,164048],{"class":79,"line":1549},[77,164049,164050],{"class":87},"    print_line()\n",[77,164052,164053,164055,164057,164059,164061,164063,164065,164067,164069],{"class":79,"line":1566},[77,164054,33766],{"class":94},[77,164056,2622],{"class":87},[77,164058,2672],{"class":2123},[77,164060,158780],{"class":271},[77,164062,3509],{"class":94},[77,164064,82247],{"class":87},[77,164066,3558],{"class":94},[77,164068,2865],{"class":271},[77,164070,2628],{"class":87},[77,164072,164073,164075,164077,164079,164082,164084,164086,164088,164090],{"class":79,"line":1572},[77,164074,33766],{"class":94},[77,164076,2622],{"class":87},[77,164078,2672],{"class":2123},[77,164080,164081],{"class":271},"\"年龄:",[77,164083,3509],{"class":94},[77,164085,72664],{"class":87},[77,164087,3558],{"class":94},[77,164089,2865],{"class":271},[77,164091,2628],{"class":87},[77,164093,164094],{"class":79,"line":1589},[77,164095,164050],{"class":87},[77,164097,164098],{"class":79,"line":1595},[77,164099,4875],{"emptyLinePlaceholder":2549},[77,164101,164102],{"class":79,"line":4088},[77,164103,4875],{"emptyLinePlaceholder":2549},[77,164105,164106,164109,164111,164113,164115],{"class":79,"line":4093},[77,164107,164108],{"class":87},"print_info(",[77,164110,151986],{"class":271},[77,164112,680],{"class":87},[77,164114,3263],{"class":94},[77,164116,2628],{"class":87},[24,164118,164119],{},"这种方式可以把小功能组合成大功能。",[14,164121,164123],{"id":164122},"_511-参数检查","5.11 参数检查",[24,164125,164126],{},"函数内部可以检查参数是否合法。",[67,164128,164130],{"className":32846,"code":164129,"language":32848,"meta":72,"style":72},"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",[74,164131,164132,164141,164153,164159,164169,164173,164177,164194,164198,164210,164221,164227],{"__ignoreMap":72},[77,164133,164134,164136,164139],{"class":79,"line":80},[77,164135,34414],{"class":2123},[77,164137,164138],{"class":83}," divide",[77,164140,153191],{"class":87},[77,164142,164143,164145,164147,164149,164151],{"class":79,"line":91},[77,164144,5576],{"class":2123},[77,164146,13355],{"class":87},[77,164148,5424],{"class":2123},[77,164150,6568],{"class":94},[77,164152,6214],{"class":87},[77,164154,164155,164157],{"class":79,"line":107},[77,164156,17224],{"class":2123},[77,164158,154270],{"class":94},[77,164160,164161,164163,164165,164167],{"class":79,"line":191},[77,164162,6565],{"class":2123},[77,164164,13342],{"class":87},[77,164166,3197],{"class":2123},[77,164168,153202],{"class":87},[77,164170,164171],{"class":79,"line":1543},[77,164172,4875],{"emptyLinePlaceholder":2549},[77,164174,164175],{"class":79,"line":1549},[77,164176,4875],{"emptyLinePlaceholder":2549},[77,164178,164179,164181,164183,164186,164188,164190,164192],{"class":79,"line":1566},[77,164180,163404],{"class":87},[77,164182,268],{"class":2123},[77,164184,164185],{"class":87}," divide(",[77,164187,3059],{"class":94},[77,164189,680],{"class":87},[77,164191,1939],{"class":94},[77,164193,2628],{"class":87},[77,164195,164196],{"class":79,"line":1572},[77,164197,4875],{"emptyLinePlaceholder":2549},[77,164199,164200,164202,164204,164206,164208],{"class":79,"line":1589},[77,164201,4008],{"class":2123},[77,164203,163650],{"class":87},[77,164205,41393],{"class":2123},[77,164207,41399],{"class":94},[77,164209,6214],{"class":87},[77,164211,164212,164214,164216,164219],{"class":79,"line":1595},[77,164213,33766],{"class":94},[77,164215,2622],{"class":87},[77,164217,164218],{"class":271},"\"除数不能为0\"",[77,164220,2628],{"class":87},[77,164222,164223,164225],{"class":79,"line":4088},[77,164224,4177],{"class":2123},[77,164226,6214],{"class":87},[77,164228,164229,164231],{"class":79,"line":4093},[77,164230,33766],{"class":94},[77,164232,79023],{"class":87},[14,164234,164236],{"id":164235},"_512-类型提示","5.12 类型提示",[24,164238,164239],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[67,164241,164243],{"className":32846,"code":164242,"language":32848,"meta":72,"style":72},"def add(a: int, b: int) -> int:\n    return a + b\n",[74,164244,164245,164268],{"__ignoreMap":72},[77,164246,164247,164249,164251,164254,164256,164259,164261,164264,164266],{"class":79,"line":80},[77,164248,34414],{"class":2123},[77,164250,7684],{"class":83},[77,164252,164253],{"class":87},"(a: ",[77,164255,2625],{"class":94},[77,164257,164258],{"class":87},", b: ",[77,164260,2625],{"class":94},[77,164262,164263],{"class":87},") -> ",[77,164265,2625],{"class":94},[77,164267,6214],{"class":87},[77,164269,164270,164272,164274,164276],{"class":79,"line":91},[77,164271,6565],{"class":2123},[77,164273,13342],{"class":87},[77,164275,3094],{"class":2123},[77,164277,153202],{"class":87},[24,164279,164280],{},"字符串参数：",[67,164282,164284],{"className":32846,"code":164283,"language":32848,"meta":72,"style":72},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[74,164285,164286,164303],{"__ignoreMap":72},[77,164287,164288,164290,164292,164295,164297,164299,164301],{"class":79,"line":80},[77,164289,34414],{"class":2123},[77,164291,163094],{"class":83},[77,164293,164294],{"class":87},"(name: ",[77,164296,3780],{"class":94},[77,164298,164263],{"class":87},[77,164300,98122],{"class":94},[77,164302,6214],{"class":87},[77,164304,164305,164307,164309,164311,164313,164315,164317,164319,164321],{"class":79,"line":91},[77,164306,33766],{"class":94},[77,164308,2622],{"class":87},[77,164310,2672],{"class":2123},[77,164312,159152],{"class":271},[77,164314,3509],{"class":94},[77,164316,82247],{"class":87},[77,164318,3558],{"class":94},[77,164320,2865],{"class":271},[77,164322,2628],{"class":87},[24,164324,164325],{},"列表参数：",[67,164327,164329],{"className":32846,"code":164328,"language":32848,"meta":72,"style":72},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[74,164330,164331,164350,164358,164370,164379],{"__ignoreMap":72},[77,164332,164333,164335,164338,164341,164343,164346,164348],{"class":79,"line":80},[77,164334,34414],{"class":2123},[77,164336,164337],{"class":83}," get_total",[77,164339,164340],{"class":87},"(numbers: list[",[77,164342,2625],{"class":94},[77,164344,164345],{"class":87},"]) -> ",[77,164347,2625],{"class":94},[77,164349,6214],{"class":87},[77,164351,164352,164354,164356],{"class":79,"line":91},[77,164353,161405],{"class":87},[77,164355,268],{"class":2123},[77,164357,49799],{"class":94},[77,164359,164360,164362,164365,164367],{"class":79,"line":107},[77,164361,5676],{"class":2123},[77,164363,164364],{"class":87}," number ",[77,164366,28511],{"class":2123},[77,164368,164369],{"class":87}," numbers:\n",[77,164371,164372,164374,164376],{"class":79,"line":191},[77,164373,162080],{"class":87},[77,164375,11950],{"class":2123},[77,164377,164378],{"class":87}," number\n",[77,164380,164381,164383],{"class":79,"line":1543},[77,164382,6565],{"class":2123},[77,164384,164385],{"class":87}," total\n",[24,164387,164388],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164390,164392],{"id":164391},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[67,164394,164396],{"className":32846,"code":164395,"language":32848,"meta":72,"style":72},"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",[74,164397,164398,164408,164412,164416,164424,164435,164445,164455,164465,164475,164479,164483,164492,164514,164518,164522,164531,164537,164557,164569,164580,164584,164593,164604,164609,164613,164617,164626,164632,164651,164663,164673,164677,164688,164698,164702,164710,164721,164725,164729,164733,164741,164746,164760,164764,164776,164781,164793,164798,164810,164815,164827,164837,164841,164847],{"__ignoreMap":72},[77,164399,164400,164403,164405],{"class":79,"line":80},[77,164401,164402],{"class":87},"balance ",[77,164404,268],{"class":2123},[77,164406,164407],{"class":94}," 1000\n",[77,164409,164410],{"class":79,"line":91},[77,164411,4875],{"emptyLinePlaceholder":2549},[77,164413,164414],{"class":79,"line":107},[77,164415,4875],{"emptyLinePlaceholder":2549},[77,164417,164418,164420,164422],{"class":79,"line":191},[77,164419,34414],{"class":2123},[77,164421,154131],{"class":83},[77,164423,34420],{"class":87},[77,164425,164426,164428,164430,164433],{"class":79,"line":1543},[77,164427,33766],{"class":94},[77,164429,2622],{"class":87},[77,164431,164432],{"class":271},"\"====== ATM ======\"",[77,164434,2628],{"class":87},[77,164436,164437,164439,164441,164443],{"class":79,"line":1549},[77,164438,33766],{"class":94},[77,164440,2622],{"class":87},[77,164442,162746],{"class":271},[77,164444,2628],{"class":87},[77,164446,164447,164449,164451,164453],{"class":79,"line":1566},[77,164448,33766],{"class":94},[77,164450,2622],{"class":87},[77,164452,162757],{"class":271},[77,164454,2628],{"class":87},[77,164456,164457,164459,164461,164463],{"class":79,"line":1572},[77,164458,33766],{"class":94},[77,164460,2622],{"class":87},[77,164462,162768],{"class":271},[77,164464,2628],{"class":87},[77,164466,164467,164469,164471,164473],{"class":79,"line":1589},[77,164468,33766],{"class":94},[77,164470,2622],{"class":87},[77,164472,162779],{"class":271},[77,164474,2628],{"class":87},[77,164476,164477],{"class":79,"line":1595},[77,164478,4875],{"emptyLinePlaceholder":2549},[77,164480,164481],{"class":79,"line":4088},[77,164482,4875],{"emptyLinePlaceholder":2549},[77,164484,164485,164487,164490],{"class":79,"line":4093},[77,164486,34414],{"class":2123},[77,164488,164489],{"class":83}," show_balance",[77,164491,34420],{"class":87},[77,164493,164494,164496,164498,164500,164503,164505,164508,164510,164512],{"class":79,"line":4099},[77,164495,33766],{"class":94},[77,164497,2622],{"class":87},[77,164499,2672],{"class":2123},[77,164501,164502],{"class":271},"\"当前余额:",[77,164504,3509],{"class":94},[77,164506,164507],{"class":87},"balance",[77,164509,3558],{"class":94},[77,164511,159110],{"class":271},[77,164513,2628],{"class":87},[77,164515,164516],{"class":79,"line":4104},[77,164517,4875],{"emptyLinePlaceholder":2549},[77,164519,164520],{"class":79,"line":4118},[77,164521,4875],{"emptyLinePlaceholder":2549},[77,164523,164524,164526,164529],{"class":79,"line":4123},[77,164525,34414],{"class":2123},[77,164527,164528],{"class":83}," save_money",[77,164530,34420],{"class":87},[77,164532,164533,164535],{"class":79,"line":4129},[77,164534,163959],{"class":2123},[77,164536,152197],{"class":87},[77,164538,164539,164542,164544,164546,164548,164550,164552,164555],{"class":79,"line":4150},[77,164540,164541],{"class":87},"    money ",[77,164543,268],{"class":2123},[77,164545,112230],{"class":94},[77,164547,2622],{"class":87},[77,164549,159],{"class":94},[77,164551,2622],{"class":87},[77,164553,164554],{"class":271},"\"请输入存款金额:\"",[77,164556,32965],{"class":87},[77,164558,164559,164561,164563,164565,164567],{"class":79,"line":4155},[77,164560,5576],{"class":2123},[77,164562,152240],{"class":87},[77,164564,4064],{"class":2123},[77,164566,6568],{"class":94},[77,164568,6214],{"class":87},[77,164570,164571,164573,164575,164578],{"class":79,"line":4169},[77,164572,34918],{"class":94},[77,164574,2622],{"class":87},[77,164576,164577],{"class":271},"\"金额必须大于0\"",[77,164579,2628],{"class":87},[77,164581,164582],{"class":79,"line":4174},[77,164583,154459],{"class":2123},[77,164585,164586,164589,164591],{"class":79,"line":4203},[77,164587,164588],{"class":87},"    balance ",[77,164590,11950],{"class":2123},[77,164592,152273],{"class":87},[77,164594,164595,164597,164599,164602],{"class":79,"line":4208},[77,164596,33766],{"class":94},[77,164598,2622],{"class":87},[77,164600,164601],{"class":271},"\"存款成功\"",[77,164603,2628],{"class":87},[77,164605,164606],{"class":79,"line":4225},[77,164607,164608],{"class":87},"    show_balance()\n",[77,164610,164611],{"class":79,"line":4230},[77,164612,4875],{"emptyLinePlaceholder":2549},[77,164614,164615],{"class":79,"line":4235},[77,164616,4875],{"emptyLinePlaceholder":2549},[77,164618,164619,164621,164624],{"class":79,"line":4240},[77,164620,34414],{"class":2123},[77,164622,164623],{"class":83}," withdraw_money",[77,164625,34420],{"class":87},[77,164627,164628,164630],{"class":79,"line":4254},[77,164629,163959],{"class":2123},[77,164631,152197],{"class":87},[77,164633,164634,164636,164638,164640,164642,164644,164646,164649],{"class":79,"line":4259},[77,164635,164541],{"class":87},[77,164637,268],{"class":2123},[77,164639,112230],{"class":94},[77,164641,2622],{"class":87},[77,164643,159],{"class":94},[77,164645,2622],{"class":87},[77,164647,164648],{"class":271},"\"请输入取款金额:\"",[77,164650,32965],{"class":87},[77,164652,164653,164655,164657,164659,164661],{"class":79,"line":5052},[77,164654,5576],{"class":2123},[77,164656,152240],{"class":87},[77,164658,4064],{"class":2123},[77,164660,6568],{"class":94},[77,164662,6214],{"class":87},[77,164664,164665,164667,164669,164671],{"class":79,"line":5066},[77,164666,34918],{"class":94},[77,164668,2622],{"class":87},[77,164670,164577],{"class":271},[77,164672,2628],{"class":87},[77,164674,164675],{"class":79,"line":5074},[77,164676,154459],{"class":2123},[77,164678,164679,164681,164683,164685],{"class":79,"line":5079},[77,164680,5576],{"class":2123},[77,164682,152240],{"class":87},[77,164684,3572],{"class":2123},[77,164686,164687],{"class":87}," balance:\n",[77,164689,164690,164692,164694,164696],{"class":79,"line":5085},[77,164691,34918],{"class":94},[77,164693,2622],{"class":87},[77,164695,152335],{"class":271},[77,164697,2628],{"class":87},[77,164699,164700],{"class":79,"line":5091},[77,164701,154459],{"class":2123},[77,164703,164704,164706,164708],{"class":79,"line":5096},[77,164705,164588],{"class":87},[77,164707,152350],{"class":2123},[77,164709,152273],{"class":87},[77,164711,164712,164714,164716,164719],{"class":79,"line":10422},[77,164713,33766],{"class":94},[77,164715,2622],{"class":87},[77,164717,164718],{"class":271},"\"取款成功\"",[77,164720,2628],{"class":87},[77,164722,164723],{"class":79,"line":10446},[77,164724,164608],{"class":87},[77,164726,164727],{"class":79,"line":10451},[77,164728,4875],{"emptyLinePlaceholder":2549},[77,164730,164731],{"class":79,"line":10457},[77,164732,4875],{"emptyLinePlaceholder":2549},[77,164734,164735,164737,164739],{"class":79,"line":10484},[77,164736,111096],{"class":2123},[77,164738,97728],{"class":94},[77,164740,6214],{"class":87},[77,164742,164743],{"class":79,"line":10489},[77,164744,164745],{"class":87},"    show_menu()\n",[77,164747,164748,164750,164752,164754,164756,164758],{"class":79,"line":10495},[77,164749,162790],{"class":87},[77,164751,268],{"class":2123},[77,164753,63053],{"class":94},[77,164755,2622],{"class":87},[77,164757,155171],{"class":271},[77,164759,2628],{"class":87},[77,164761,164762],{"class":79,"line":10507},[77,164763,4875],{"emptyLinePlaceholder":2549},[77,164765,164766,164768,164770,164772,164774],{"class":79,"line":10519},[77,164767,5576],{"class":2123},[77,164769,155184],{"class":87},[77,164771,5424],{"class":2123},[77,164773,155189],{"class":271},[77,164775,6214],{"class":87},[77,164777,164778],{"class":79,"line":10531},[77,164779,164780],{"class":87},"        show_balance()\n",[77,164782,164783,164785,164787,164789,164791],{"class":79,"line":12189},[77,164784,41759],{"class":2123},[77,164786,155184],{"class":87},[77,164788,5424],{"class":2123},[77,164790,155208],{"class":271},[77,164792,6214],{"class":87},[77,164794,164795],{"class":79,"line":12214},[77,164796,164797],{"class":87},"        save_money()\n",[77,164799,164800,164802,164804,164806,164808],{"class":79,"line":12237},[77,164801,41759],{"class":2123},[77,164803,155184],{"class":87},[77,164805,5424],{"class":2123},[77,164807,155226],{"class":271},[77,164809,6214],{"class":87},[77,164811,164812],{"class":79,"line":12261},[77,164813,164814],{"class":87},"        withdraw_money()\n",[77,164816,164817,164819,164821,164823,164825],{"class":79,"line":12266},[77,164818,41759],{"class":2123},[77,164820,155184],{"class":87},[77,164822,5424],{"class":2123},[77,164824,155280],{"class":271},[77,164826,6214],{"class":87},[77,164828,164829,164831,164833,164835],{"class":79,"line":12271},[77,164830,34918],{"class":94},[77,164832,2622],{"class":87},[77,164834,155291],{"class":271},[77,164836,2628],{"class":87},[77,164838,164839],{"class":79,"line":12276},[77,164840,34094],{"class":2123},[77,164842,164843,164845],{"class":79,"line":12285},[77,164844,160120],{"class":2123},[77,164846,6214],{"class":87},[77,164848,164849,164851,164853,164855],{"class":79,"line":12290},[77,164850,34918],{"class":94},[77,164852,2622],{"class":87},[77,164854,155312],{"class":271},[77,164856,2628],{"class":87},[24,164858,164859],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164861,164863],{"id":164862},"_514-易错点","5.14 易错点",[139,164865,164866,164869,164872,164877,164882,164885],{},[54,164867,164868],{},"函数定义后必须调用才会执行。",[54,164870,164871],{},"函数名后面有括号才是调用。",[54,164873,164874,164876],{},[74,164875,19516],{}," 后面的代码不会执行。",[54,164878,164879,164880,30853],{},"没有返回值的函数默认返回 ",[74,164881,98122],{},[54,164883,164884],{},"局部变量不能在函数外部访问。",[54,164886,164887,164888,164890],{},"不要滥用 ",[74,164889,163924],{},"，更好的方式是让函数返回新值。",[24,164892,164893,164894,164896],{},"例如不用 ",[74,164895,163924],{}," 改写存款：",[67,164898,164900],{"className":32846,"code":164899,"language":32848,"meta":72,"style":72},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[74,164901,164902,164911,164922,164926,164930,164938,164951],{"__ignoreMap":72},[77,164903,164904,164906,164908],{"class":79,"line":80},[77,164905,34414],{"class":2123},[77,164907,164528],{"class":83},[77,164909,164910],{"class":87},"(balance, money):\n",[77,164912,164913,164915,164918,164920],{"class":79,"line":91},[77,164914,6565],{"class":2123},[77,164916,164917],{"class":87}," balance ",[77,164919,3094],{"class":2123},[77,164921,152273],{"class":87},[77,164923,164924],{"class":79,"line":107},[77,164925,4875],{"emptyLinePlaceholder":2549},[77,164927,164928],{"class":79,"line":191},[77,164929,4875],{"emptyLinePlaceholder":2549},[77,164931,164932,164934,164936],{"class":79,"line":1543},[77,164933,164402],{"class":87},[77,164935,268],{"class":2123},[77,164937,164407],{"class":94},[77,164939,164940,164942,164944,164947,164949],{"class":79,"line":1549},[77,164941,164402],{"class":87},[77,164943,268],{"class":2123},[77,164945,164946],{"class":87}," save_money(balance, ",[77,164948,4198],{"class":94},[77,164950,2628],{"class":87},[77,164952,164953,164955],{"class":79,"line":1566},[77,164954,32883],{"class":94},[77,164956,164957],{"class":87},"(balance)\n",[14,164959,164961],{"id":164960},"_515-本章练习","5.15 本章练习",[139,164963,164964,164971,164977,164983,164989],{},[54,164965,164966,164967,164970],{},"定义函数 ",[74,164968,164969],{},"print_student(name, age)","，输出学生信息。",[54,164972,164966,164973,164976],{},[74,164974,164975],{},"get_max(a, b, c)","，返回三个数中的最大值。",[54,164978,164966,164979,164982],{},[74,164980,164981],{},"is_even(num)","，判断一个数是否为偶数。",[54,164984,164966,164985,164988],{},[74,164986,164987],{},"calculate_bmi(weight, height)","，返回 BMI。",[54,164990,164991],{},"把第 4 章的菜单程序拆分成多个函数。",[2520,164993,164994],{},"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":72,"searchDepth":91,"depth":91,"links":164996},[164997,164998,164999,165000,165001,165002,165003,165004,165005,165009,165010,165011,165012,165013,165014],{"id":163017,"depth":91,"text":163018},{"id":163058,"depth":91,"text":163059},{"id":163148,"depth":91,"text":163149},{"id":163229,"depth":91,"text":163230},{"id":163362,"depth":91,"text":163363},{"id":163484,"depth":91,"text":163485},{"id":163606,"depth":91,"text":163607},{"id":163683,"depth":91,"text":163684},{"id":163805,"depth":91,"text":163806,"children":165006},[165007,165008],{"id":163809,"depth":107,"text":163810},{"id":163867,"depth":107,"text":163868},{"id":163996,"depth":91,"text":163997},{"id":164122,"depth":91,"text":164123},{"id":164235,"depth":91,"text":164236},{"id":164391,"depth":91,"text":164392},{"id":164862,"depth":91,"text":164863},{"id":164960,"depth":91,"text":164961},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163009,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165021,"title":165022,"body":165023,"description":2546,"extension":2547,"meta":168067,"navigation":2549,"path":168068,"seo":168069,"stem":168070,"__hash__":168071},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165024,"toc":168048},[165025,165028,165032,165035,165038,165142,165145,165149,165152,165232,165235,165239,165242,165302,165305,165341,165344,165359,165363,165436,165439,165494,165497,165567,165570,165654,165664,165722,165726,165771,165774,165800,165803,165909,165913,165916,165958,165961,166025,166028,166032,166035,166096,166099,166129,166132,166170,166174,166177,166186,166189,166313,166316,166357,166361,166364,166375,166415,166418,166433,166438,166441,166508,166511,166601,166605,166608,166656,166659,166686,166688,166718,166721,166741,166744,166775,166778,166811,166815,166818,166842,166845,166869,166872,166896,166900,166903,167033,167036,167116,167119,167194,167198,167201,167251,167254,167296,167299,167323,167325,167349,167352,167407,167410,167476,167480,167483,167486,167524,167527,167580,167583,167629,167632,167665,167668,167672,167991,167995,168024,168028,168045],[10,165026,165022],{"id":165027},"_6-数据容器",[14,165029,165031],{"id":165030},"_61-什么是数据容器","6.1 什么是数据容器",[24,165033,165034],{},"数据容器用于一次保存多个数据。",[24,165036,165037],{},"常见容器：",[2755,165039,165040,165057],{},[2758,165041,165042],{},[2761,165043,165044,165046,165049,165052,165055],{},[2764,165045,28239],{},[2764,165047,165048],{},"是否有序",[2764,165050,165051],{},"是否可变",[2764,165053,165054],{},"是否允许重复",[2764,165056,29960],{},[2801,165058,165059,165077,165093,165108,165125],{},[2761,165060,165061,165064,165067,165070,165073],{},[2806,165062,165063],{},"list列表",[2806,165065,165066],{},"有序",[2806,165068,165069],{},"可变",[2806,165071,165072],{},"允许",[2806,165074,165075],{},[74,165076,157355],{},[2761,165078,165079,165082,165084,165087,165089],{},[2806,165080,165081],{},"tuple元组",[2806,165083,165066],{},[2806,165085,165086],{},"不可变",[2806,165088,165072],{},[2806,165090,165091],{},[74,165092,157368],{},[2761,165094,165095,165098,165100,165102,165104],{},[2806,165096,165097],{},"str字符串",[2806,165099,165066],{},[2806,165101,165086],{},[2806,165103,165072],{},[2806,165105,165106],{},[74,165107,157978],{},[2761,165109,165110,165113,165116,165118,165121],{},[2806,165111,165112],{},"set集合",[2806,165114,165115],{},"无序",[2806,165117,165069],{},[2806,165119,165120],{},"不允许",[2806,165122,165123],{},[74,165124,157393],{},[2761,165126,165127,165130,165132,165134,165137],{},[2806,165128,165129],{},"dict字典",[2806,165131,165066],{},[2806,165133,165069],{},[2806,165135,165136],{},"key不允许重复",[2806,165138,165139],{},[74,165140,165141],{},"{\"name\": \"小明\"}",[24,165143,165144],{},"Python 3.7 之后，字典保持插入顺序。",[14,165146,165148],{"id":165147},"_62-列表list","6.2 列表list",[24,165150,165151],{},"列表用于保存一组有顺序的数据。",[67,165153,165155],{"className":32846,"code":165154,"language":32848,"meta":72,"style":72},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[74,165156,165157,165177,165202,165223],{"__ignoreMap":72},[77,165158,165159,165161,165163,165165,165167,165169,165171,165173,165175],{"class":79,"line":80},[77,165160,162478],{"class":87},[77,165162,268],{"class":2123},[77,165164,54684],{"class":87},[77,165166,151986],{"class":271},[77,165168,680],{"class":87},[77,165170,153034],{"class":271},[77,165172,680],{"class":87},[77,165174,161829],{"class":271},[77,165176,35713],{"class":87},[77,165178,165179,165182,165184,165186,165188,165190,165192,165194,165196,165198,165200],{"class":79,"line":91},[77,165180,165181],{"class":87},"numbers ",[77,165183,268],{"class":2123},[77,165185,54684],{"class":87},[77,165187,2120],{"class":94},[77,165189,680],{"class":87},[77,165191,2696],{"class":94},[77,165193,680],{"class":87},[77,165195,2690],{"class":94},[77,165197,680],{"class":87},[77,165199,2907],{"class":94},[77,165201,35713],{"class":87},[77,165203,165204,165207,165209,165211,165213,165215,165217,165219,165221],{"class":79,"line":107},[77,165205,165206],{"class":87},"mixed ",[77,165208,268],{"class":2123},[77,165210,54684],{"class":87},[77,165212,151986],{"class":271},[77,165214,680],{"class":87},[77,165216,3263],{"class":94},[77,165218,680],{"class":87},[77,165220,33943],{"class":94},[77,165222,35713],{"class":87},[77,165224,165225,165228,165230],{"class":79,"line":191},[77,165226,165227],{"class":87},"empty ",[77,165229,268],{"class":2123},[77,165231,54296],{"class":87},[24,165233,165234],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165236,165238],{"id":165237},"_63-列表索引","6.3 列表索引",[24,165240,165241],{},"正向索引从 0 开始：",[67,165243,165245],{"className":32846,"code":165244,"language":32848,"meta":72,"style":72},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[74,165246,165247,165267,165271,165282,165292],{"__ignoreMap":72},[77,165248,165249,165251,165253,165255,165257,165259,165261,165263,165265],{"class":79,"line":80},[77,165250,162478],{"class":87},[77,165252,268],{"class":2123},[77,165254,54684],{"class":87},[77,165256,151986],{"class":271},[77,165258,680],{"class":87},[77,165260,153034],{"class":271},[77,165262,680],{"class":87},[77,165264,161829],{"class":271},[77,165266,35713],{"class":87},[77,165268,165269],{"class":79,"line":91},[77,165270,4875],{"emptyLinePlaceholder":2549},[77,165272,165273,165275,165278,165280],{"class":79,"line":107},[77,165274,32883],{"class":94},[77,165276,165277],{"class":87},"(names[",[77,165279,1939],{"class":94},[77,165281,7132],{"class":87},[77,165283,165284,165286,165288,165290],{"class":79,"line":191},[77,165285,32883],{"class":94},[77,165287,165277],{"class":87},[77,165289,2120],{"class":94},[77,165291,7132],{"class":87},[77,165293,165294,165296,165298,165300],{"class":79,"line":1543},[77,165295,32883],{"class":94},[77,165297,165277],{"class":87},[77,165299,2696],{"class":94},[77,165301,7132],{"class":87},[24,165303,165304],{},"反向索引从 -1 开始：",[67,165306,165308],{"className":32846,"code":165307,"language":32848,"meta":72,"style":72},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[74,165309,165310,165326],{"__ignoreMap":72},[77,165311,165312,165314,165316,165318,165320,165323],{"class":79,"line":80},[77,165313,32883],{"class":94},[77,165315,165277],{"class":87},[77,165317,3145],{"class":2123},[77,165319,2120],{"class":94},[77,165321,165322],{"class":87},"])  ",[77,165324,165325],{"class":323},"# 小刚\n",[77,165327,165328,165330,165332,165334,165336,165338],{"class":79,"line":91},[77,165329,32883],{"class":94},[77,165331,165277],{"class":87},[77,165333,3145],{"class":2123},[77,165335,2696],{"class":94},[77,165337,165322],{"class":87},[77,165339,165340],{"class":323},"# 小红\n",[24,165342,165343],{},"索引越界会报错：",[67,165345,165347],{"className":32846,"code":165346,"language":32848,"meta":72,"style":72},"print(names[3])\n",[74,165348,165349],{"__ignoreMap":72},[77,165350,165351,165353,165355,165357],{"class":79,"line":80},[77,165352,32883],{"class":94},[77,165354,165277],{"class":87},[77,165356,2690],{"class":94},[77,165358,7132],{"class":87},[14,165360,165362],{"id":165361},"_64-列表常用方法","6.4 列表常用方法",[67,165364,165366],{"className":32846,"code":165365,"language":32848,"meta":72,"style":72},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[74,165367,165368,165384,165388,165397,165411,165425,165429],{"__ignoreMap":72},[77,165369,165370,165372,165374,165376,165378,165380,165382],{"class":79,"line":80},[77,165371,162478],{"class":87},[77,165373,268],{"class":2123},[77,165375,54684],{"class":87},[77,165377,151986],{"class":271},[77,165379,680],{"class":87},[77,165381,153034],{"class":271},[77,165383,35713],{"class":87},[77,165385,165386],{"class":79,"line":91},[77,165387,4875],{"emptyLinePlaceholder":2549},[77,165389,165390,165393,165395],{"class":79,"line":107},[77,165391,165392],{"class":87},"names.append(",[77,165394,161829],{"class":271},[77,165396,2628],{"class":87},[77,165398,165399,165402,165404,165406,165409],{"class":79,"line":191},[77,165400,165401],{"class":87},"names.insert(",[77,165403,2120],{"class":94},[77,165405,680],{"class":87},[77,165407,165408],{"class":271},"\"小李\"",[77,165410,2628],{"class":87},[77,165412,165413,165416,165418,165420,165423],{"class":79,"line":1543},[77,165414,165415],{"class":87},"names.extend([",[77,165417,11157],{"class":271},[77,165419,680],{"class":87},[77,165421,165422],{"class":271},"\"小赵\"",[77,165424,7132],{"class":87},[77,165426,165427],{"class":79,"line":1549},[77,165428,4875],{"emptyLinePlaceholder":2549},[77,165430,165431,165433],{"class":79,"line":1566},[77,165432,32883],{"class":94},[77,165434,165435],{"class":87},"(names)\n",[24,165437,165438],{},"删除元素：",[67,165440,165442],{"className":32846,"code":165441,"language":32848,"meta":72,"style":72},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[74,165443,165444,165453,165463,165477,165489],{"__ignoreMap":72},[77,165445,165446,165449,165451],{"class":79,"line":80},[77,165447,165448],{"class":87},"names.remove(",[77,165450,153034],{"class":271},[77,165452,2628],{"class":87},[77,165454,165455,165458,165460],{"class":79,"line":91},[77,165456,165457],{"class":87},"last ",[77,165459,268],{"class":2123},[77,165461,165462],{"class":87}," names.pop()\n",[77,165464,165465,165468,165470,165473,165475],{"class":79,"line":107},[77,165466,165467],{"class":87},"first ",[77,165469,268],{"class":2123},[77,165471,165472],{"class":87}," names.pop(",[77,165474,1939],{"class":94},[77,165476,2628],{"class":87},[77,165478,165479,165482,165485,165487],{"class":79,"line":191},[77,165480,165481],{"class":2123},"del",[77,165483,165484],{"class":87}," names[",[77,165486,1939],{"class":94},[77,165488,35713],{"class":87},[77,165490,165491],{"class":79,"line":1543},[77,165492,165493],{"class":87},"names.clear()\n",[24,165495,165496],{},"查询和统计：",[67,165498,165500],{"className":32846,"code":165499,"language":32848,"meta":72,"style":72},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[74,165501,165502,165530,165534,165545,165556],{"__ignoreMap":72},[77,165503,165504,165506,165508,165510,165512,165514,165516,165518,165520,165522,165524,165526,165528],{"class":79,"line":80},[77,165505,165181],{"class":87},[77,165507,268],{"class":2123},[77,165509,54684],{"class":87},[77,165511,2120],{"class":94},[77,165513,680],{"class":87},[77,165515,2696],{"class":94},[77,165517,680],{"class":87},[77,165519,2690],{"class":94},[77,165521,680],{"class":87},[77,165523,2696],{"class":94},[77,165525,680],{"class":87},[77,165527,2907],{"class":94},[77,165529,35713],{"class":87},[77,165531,165532],{"class":79,"line":91},[77,165533,4875],{"emptyLinePlaceholder":2549},[77,165535,165536,165538,165541,165543],{"class":79,"line":107},[77,165537,32883],{"class":94},[77,165539,165540],{"class":87},"(numbers.index(",[77,165542,2690],{"class":94},[77,165544,32965],{"class":87},[77,165546,165547,165549,165552,165554],{"class":79,"line":191},[77,165548,32883],{"class":94},[77,165550,165551],{"class":87},"(numbers.count(",[77,165553,2696],{"class":94},[77,165555,32965],{"class":87},[77,165557,165558,165560,165562,165564],{"class":79,"line":1543},[77,165559,32883],{"class":94},[77,165561,2622],{"class":87},[77,165563,9833],{"class":94},[77,165565,165566],{"class":87},"(numbers))\n",[24,165568,165569],{},"排序：",[67,165571,165573],{"className":32846,"code":165572,"language":32848,"meta":72,"style":72},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[74,165574,165575,165599,165603,165608,165615,165619,165633,165639,165643,165648],{"__ignoreMap":72},[77,165576,165577,165579,165581,165583,165585,165587,165589,165591,165593,165595,165597],{"class":79,"line":80},[77,165578,165181],{"class":87},[77,165580,268],{"class":2123},[77,165582,54684],{"class":87},[77,165584,2690],{"class":94},[77,165586,680],{"class":87},[77,165588,2120],{"class":94},[77,165590,680],{"class":87},[77,165592,2933],{"class":94},[77,165594,680],{"class":87},[77,165596,2696],{"class":94},[77,165598,35713],{"class":87},[77,165600,165601],{"class":79,"line":91},[77,165602,4875],{"emptyLinePlaceholder":2549},[77,165604,165605],{"class":79,"line":107},[77,165606,165607],{"class":87},"numbers.sort()\n",[77,165609,165610,165612],{"class":79,"line":191},[77,165611,32883],{"class":94},[77,165613,165614],{"class":87},"(numbers)\n",[77,165616,165617],{"class":79,"line":1543},[77,165618,4875],{"emptyLinePlaceholder":2549},[77,165620,165621,165624,165627,165629,165631],{"class":79,"line":1549},[77,165622,165623],{"class":87},"numbers.sort(",[77,165625,165626],{"class":7691},"reverse",[77,165628,268],{"class":2123},[77,165630,33943],{"class":94},[77,165632,2628],{"class":87},[77,165634,165635,165637],{"class":79,"line":1566},[77,165636,32883],{"class":94},[77,165638,165614],{"class":87},[77,165640,165641],{"class":79,"line":1572},[77,165642,4875],{"emptyLinePlaceholder":2549},[77,165644,165645],{"class":79,"line":1589},[77,165646,165647],{"class":87},"numbers.reverse()\n",[77,165649,165650,165652],{"class":79,"line":1595},[77,165651,32883],{"class":94},[77,165653,165614],{"class":87},[24,165655,165656,165659,165660,165663],{},[74,165657,165658],{},"sort()"," 会修改原列表，",[74,165661,165662],{},"sorted()"," 返回新列表。",[67,165665,165667],{"className":32846,"code":165666,"language":32848,"meta":72,"style":72},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[74,165668,165669,165693,165705,165709,165715],{"__ignoreMap":72},[77,165670,165671,165673,165675,165677,165679,165681,165683,165685,165687,165689,165691],{"class":79,"line":80},[77,165672,165181],{"class":87},[77,165674,268],{"class":2123},[77,165676,54684],{"class":87},[77,165678,2690],{"class":94},[77,165680,680],{"class":87},[77,165682,2120],{"class":94},[77,165684,680],{"class":87},[77,165686,2933],{"class":94},[77,165688,680],{"class":87},[77,165690,2696],{"class":94},[77,165692,35713],{"class":87},[77,165694,165695,165698,165700,165703],{"class":79,"line":91},[77,165696,165697],{"class":87},"new_numbers ",[77,165699,268],{"class":2123},[77,165701,165702],{"class":94}," sorted",[77,165704,165614],{"class":87},[77,165706,165707],{"class":79,"line":107},[77,165708,4875],{"emptyLinePlaceholder":2549},[77,165710,165711,165713],{"class":79,"line":191},[77,165712,32883],{"class":94},[77,165714,165614],{"class":87},[77,165716,165717,165719],{"class":79,"line":1543},[77,165718,32883],{"class":94},[77,165720,165721],{"class":87},"(new_numbers)\n",[14,165723,165725],{"id":165724},"_65-列表遍历","6.5 列表遍历",[67,165727,165729],{"className":32846,"code":165728,"language":32848,"meta":72,"style":72},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[74,165730,165731,165751,165755,165765],{"__ignoreMap":72},[77,165732,165733,165735,165737,165739,165741,165743,165745,165747,165749],{"class":79,"line":80},[77,165734,162478],{"class":87},[77,165736,268],{"class":2123},[77,165738,54684],{"class":87},[77,165740,151986],{"class":271},[77,165742,680],{"class":87},[77,165744,153034],{"class":271},[77,165746,680],{"class":87},[77,165748,161829],{"class":271},[77,165750,35713],{"class":87},[77,165752,165753],{"class":79,"line":91},[77,165754,4875],{"emptyLinePlaceholder":2549},[77,165756,165757,165759,165761,165763],{"class":79,"line":107},[77,165758,5500],{"class":2123},[77,165760,162514],{"class":87},[77,165762,28511],{"class":2123},[77,165764,162519],{"class":87},[77,165766,165767,165769],{"class":79,"line":191},[77,165768,33766],{"class":94},[77,165770,152758],{"class":87},[24,165772,165773],{},"需要索引时：",[67,165775,165777],{"className":32846,"code":165776,"language":32848,"meta":72,"style":72},"for index, name in enumerate(names):\n    print(index, name)\n",[74,165778,165779,165793],{"__ignoreMap":72},[77,165780,165781,165783,165786,165788,165790],{"class":79,"line":80},[77,165782,5500],{"class":2123},[77,165784,165785],{"class":87}," index, name ",[77,165787,28511],{"class":2123},[77,165789,34073],{"class":94},[77,165791,165792],{"class":87},"(names):\n",[77,165794,165795,165797],{"class":79,"line":91},[77,165796,33766],{"class":94},[77,165798,165799],{"class":87},"(index, name)\n",[24,165801,165802],{},"统计总分：",[67,165804,165806],{"className":32846,"code":165805,"language":32848,"meta":72,"style":72},"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",[74,165807,165808,165833,165841,165845,165856,165864,165868,165885],{"__ignoreMap":72},[77,165809,165810,165813,165815,165817,165819,165821,165823,165825,165827,165829,165831],{"class":79,"line":80},[77,165811,165812],{"class":87},"scores ",[77,165814,268],{"class":2123},[77,165816,54684],{"class":87},[77,165818,3475],{"class":94},[77,165820,680],{"class":87},[77,165822,3349],{"class":94},[77,165824,680],{"class":87},[77,165826,2868],{"class":94},[77,165828,680],{"class":87},[77,165830,3174],{"class":94},[77,165832,35713],{"class":87},[77,165834,165835,165837,165839],{"class":79,"line":91},[77,165836,159358],{"class":87},[77,165838,268],{"class":2123},[77,165840,49799],{"class":94},[77,165842,165843],{"class":79,"line":107},[77,165844,4875],{"emptyLinePlaceholder":2549},[77,165846,165847,165849,165851,165853],{"class":79,"line":191},[77,165848,5500],{"class":2123},[77,165850,159881],{"class":87},[77,165852,28511],{"class":2123},[77,165854,165855],{"class":87}," scores:\n",[77,165857,165858,165860,165862],{"class":79,"line":1543},[77,165859,161405],{"class":87},[77,165861,11950],{"class":2123},[77,165863,4055],{"class":87},[77,165865,165866],{"class":79,"line":1549},[77,165867,4875],{"emptyLinePlaceholder":2549},[77,165869,165870,165873,165875,165878,165880,165882],{"class":79,"line":1566},[77,165871,165872],{"class":87},"avg ",[77,165874,268],{"class":2123},[77,165876,165877],{"class":87}," total ",[77,165879,3197],{"class":2123},[77,165881,9806],{"class":94},[77,165883,165884],{"class":87},"(scores)\n",[77,165886,165887,165889,165891,165893,165896,165898,165901,165903,165905,165907],{"class":79,"line":1572},[77,165888,32883],{"class":94},[77,165890,2622],{"class":87},[77,165892,2672],{"class":2123},[77,165894,165895],{"class":271},"\"平均分:",[77,165897,3509],{"class":94},[77,165899,165900],{"class":87},"avg",[77,165902,159257],{"class":2123},[77,165904,3558],{"class":94},[77,165906,2865],{"class":271},[77,165908,2628],{"class":87},[14,165910,165912],{"id":165911},"_66-元组tuple","6.6 元组tuple",[24,165914,165915],{},"元组和列表类似，但不可修改。",[67,165917,165919],{"className":32846,"code":165918,"language":32848,"meta":72,"style":72},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[74,165920,165921,165938],{"__ignoreMap":72},[77,165922,165923,165926,165928,165930,165932,165934,165936],{"class":79,"line":80},[77,165924,165925],{"class":87},"point ",[77,165927,268],{"class":2123},[77,165929,4134],{"class":87},[77,165931,3059],{"class":94},[77,165933,680],{"class":87},[77,165935,3313],{"class":94},[77,165937,2628],{"class":87},[77,165939,165940,165942,165944,165946,165948,165950,165952,165954,165956],{"class":79,"line":91},[77,165941,118747],{"class":87},[77,165943,268],{"class":2123},[77,165945,4134],{"class":87},[77,165947,151986],{"class":271},[77,165949,680],{"class":87},[77,165951,3263],{"class":94},[77,165953,680],{"class":87},[77,165955,71712],{"class":271},[77,165957,2628],{"class":87},[24,165959,165960],{},"单元素元组必须加逗号：",[67,165962,165964],{"className":32846,"code":165963,"language":32848,"meta":72,"style":72},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[74,165965,165966,165980,165993,165997,166011],{"__ignoreMap":72},[77,165967,165968,165971,165973,165975,165977],{"class":79,"line":80},[77,165969,165970],{"class":87},"t1 ",[77,165972,268],{"class":2123},[77,165974,4134],{"class":87},[77,165976,3059],{"class":94},[77,165978,165979],{"class":87},",)\n",[77,165981,165982,165985,165987,165989,165991],{"class":79,"line":91},[77,165983,165984],{"class":87},"t2 ",[77,165986,268],{"class":2123},[77,165988,4134],{"class":87},[77,165990,3059],{"class":94},[77,165992,2628],{"class":87},[77,165994,165995],{"class":79,"line":107},[77,165996,4875],{"emptyLinePlaceholder":2549},[77,165998,165999,166001,166003,166005,166008],{"class":79,"line":191},[77,166000,32883],{"class":94},[77,166002,2622],{"class":87},[77,166004,105540],{"class":94},[77,166006,166007],{"class":87},"(t1))  ",[77,166009,166010],{"class":323},"# tuple\n",[77,166012,166013,166015,166017,166019,166022],{"class":79,"line":1543},[77,166014,32883],{"class":94},[77,166016,2622],{"class":87},[77,166018,105540],{"class":94},[77,166020,166021],{"class":87},"(t2))  ",[77,166023,166024],{"class":323},"# int\n",[24,166026,166027],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166029,166031],{"id":166030},"_67-字符串str","6.7 字符串str",[24,166033,166034],{},"字符串也是序列，可以索引、切片和遍历。",[67,166036,166038],{"className":32846,"code":166037,"language":32848,"meta":72,"style":72},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[74,166039,166040,166048,166052,166063,166075,166079,166090],{"__ignoreMap":72},[77,166041,166042,166044,166046],{"class":79,"line":80},[77,166043,158542],{"class":87},[77,166045,268],{"class":2123},[77,166047,161779],{"class":271},[77,166049,166050],{"class":79,"line":91},[77,166051,4875],{"emptyLinePlaceholder":2549},[77,166053,166054,166056,166059,166061],{"class":79,"line":107},[77,166055,32883],{"class":94},[77,166057,166058],{"class":87},"(text[",[77,166060,1939],{"class":94},[77,166062,7132],{"class":87},[77,166064,166065,166067,166069,166071,166073],{"class":79,"line":191},[77,166066,32883],{"class":94},[77,166068,166058],{"class":87},[77,166070,3145],{"class":2123},[77,166072,2120],{"class":94},[77,166074,7132],{"class":87},[77,166076,166077],{"class":79,"line":1543},[77,166078,4875],{"emptyLinePlaceholder":2549},[77,166080,166081,166083,166085,166087],{"class":79,"line":1549},[77,166082,5500],{"class":2123},[77,166084,161790],{"class":87},[77,166086,28511],{"class":2123},[77,166088,166089],{"class":87}," text:\n",[77,166091,166092,166094],{"class":79,"line":1566},[77,166093,33766],{"class":94},[77,166095,161801],{"class":87},[24,166097,166098],{},"字符串不可变：",[67,166100,166102],{"className":32846,"code":166101,"language":32848,"meta":72,"style":72},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[74,166103,166104,166112],{"__ignoreMap":72},[77,166105,166106,166108,166110],{"class":79,"line":80},[77,166107,158542],{"class":87},[77,166109,268],{"class":2123},[77,166111,161779],{"class":271},[77,166113,166114,166117,166119,166121,166123,166126],{"class":79,"line":91},[77,166115,166116],{"class":87},"text[",[77,166118,1939],{"class":94},[77,166120,6918],{"class":87},[77,166122,268],{"class":2123},[77,166124,166125],{"class":271}," \"P\"",[77,166127,166128],{"class":323},"  # 报错\n",[24,166130,166131],{},"如果要得到新字符串：",[67,166133,166135],{"className":32846,"code":166134,"language":32848,"meta":72,"style":72},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[74,166136,166137,166145,166163],{"__ignoreMap":72},[77,166138,166139,166141,166143],{"class":79,"line":80},[77,166140,158542],{"class":87},[77,166142,268],{"class":2123},[77,166144,161779],{"class":271},[77,166146,166147,166149,166151,166153,166155,166158,166160],{"class":79,"line":91},[77,166148,158542],{"class":87},[77,166150,268],{"class":2123},[77,166152,166125],{"class":271},[77,166154,48032],{"class":2123},[77,166156,166157],{"class":87}," text[",[77,166159,2120],{"class":94},[77,166161,166162],{"class":87},":]\n",[77,166164,166165,166167],{"class":79,"line":107},[77,166166,32883],{"class":94},[77,166168,166169],{"class":87},"(text)\n",[14,166171,166173],{"id":166172},"_68-切片","6.8 切片",[24,166175,166176],{},"切片用于从序列中取一部分。",[67,166178,166180],{"className":32846,"code":166179,"language":32848,"meta":72,"style":72},"序列[开始:结束:步长]\n",[74,166181,166182],{"__ignoreMap":72},[77,166183,166184],{"class":79,"line":80},[77,166185,166179],{"class":87},[24,166187,166188],{},"结束位置不包含。",[67,166190,166192],{"className":32846,"code":166191,"language":32848,"meta":72,"style":72},"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",[74,166193,166194,166231,166235,166254,166269,166283,166297],{"__ignoreMap":72},[77,166195,166196,166199,166201,166203,166205,166207,166209,166211,166213,166215,166217,166219,166221,166223,166225,166227,166229],{"class":79,"line":80},[77,166197,166198],{"class":87},"nums ",[77,166200,268],{"class":2123},[77,166202,54684],{"class":87},[77,166204,1939],{"class":94},[77,166206,680],{"class":87},[77,166208,2120],{"class":94},[77,166210,680],{"class":87},[77,166212,2696],{"class":94},[77,166214,680],{"class":87},[77,166216,2690],{"class":94},[77,166218,680],{"class":87},[77,166220,2907],{"class":94},[77,166222,680],{"class":87},[77,166224,2933],{"class":94},[77,166226,680],{"class":87},[77,166228,2958],{"class":94},[77,166230,35713],{"class":87},[77,166232,166233],{"class":79,"line":91},[77,166234,4875],{"emptyLinePlaceholder":2549},[77,166236,166237,166239,166242,166244,166246,166248,166251],{"class":79,"line":107},[77,166238,32883],{"class":94},[77,166240,166241],{"class":87},"(nums[",[77,166243,2120],{"class":94},[77,166245,3472],{"class":87},[77,166247,2907],{"class":94},[77,166249,166250],{"class":87},"])    ",[77,166252,166253],{"class":323},"# [1, 2, 3]\n",[77,166255,166256,166258,166261,166263,166266],{"class":79,"line":191},[77,166257,32883],{"class":94},[77,166259,166260],{"class":87},"(nums[:",[77,166262,2690],{"class":94},[77,166264,166265],{"class":87},"])     ",[77,166267,166268],{"class":323},"# [0, 1, 2]\n",[77,166270,166271,166273,166275,166277,166280],{"class":79,"line":1543},[77,166272,32883],{"class":94},[77,166274,166241],{"class":87},[77,166276,2690],{"class":94},[77,166278,166279],{"class":87},":])     ",[77,166281,166282],{"class":323},"# [3, 4, 5, 6]\n",[77,166284,166285,166287,166290,166292,166294],{"class":79,"line":1549},[77,166286,32883],{"class":94},[77,166288,166289],{"class":87},"(nums[::",[77,166291,2696],{"class":94},[77,166293,166250],{"class":87},[77,166295,166296],{"class":323},"# [0, 2, 4, 6]\n",[77,166298,166299,166301,166303,166305,166307,166310],{"class":79,"line":1566},[77,166300,32883],{"class":94},[77,166302,166289],{"class":87},[77,166304,3145],{"class":2123},[77,166306,2120],{"class":94},[77,166308,166309],{"class":87},"])   ",[77,166311,166312],{"class":323},"# 反转\n",[24,166314,166315],{},"字符串切片：",[67,166317,166319],{"className":32846,"code":166318,"language":32848,"meta":72,"style":72},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[74,166320,166321,166330,166344],{"__ignoreMap":72},[77,166322,166323,166325,166327],{"class":79,"line":80},[77,166324,158542],{"class":87},[77,166326,268],{"class":2123},[77,166328,166329],{"class":271}," \"abcdef\"\n",[77,166331,166332,166334,166336,166338,166340,166342],{"class":79,"line":91},[77,166333,32883],{"class":94},[77,166335,166058],{"class":87},[77,166337,2120],{"class":94},[77,166339,3472],{"class":87},[77,166341,2907],{"class":94},[77,166343,7132],{"class":87},[77,166345,166346,166348,166351,166353,166355],{"class":79,"line":107},[77,166347,32883],{"class":94},[77,166349,166350],{"class":87},"(text[::",[77,166352,3145],{"class":2123},[77,166354,2120],{"class":94},[77,166356,7132],{"class":87},[14,166358,166360],{"id":166359},"_69-集合set","6.9 集合set",[24,166362,166363],{},"集合特点：",[139,166365,166366,166369,166372],{},[54,166367,166368],{},"无序。",[54,166370,166371],{},"元素不重复。",[54,166373,166374],{},"可以做交集、并集、差集。",[67,166376,166378],{"className":32846,"code":166377,"language":32848,"meta":72,"style":72},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[74,166379,166380,166408],{"__ignoreMap":72},[77,166381,166382,166384,166386,166388,166390,166392,166394,166396,166398,166400,166402,166404,166406],{"class":79,"line":80},[77,166383,166198],{"class":87},[77,166385,268],{"class":2123},[77,166387,6923],{"class":87},[77,166389,2120],{"class":94},[77,166391,680],{"class":87},[77,166393,2696],{"class":94},[77,166395,680],{"class":87},[77,166397,2690],{"class":94},[77,166399,680],{"class":87},[77,166401,2690],{"class":94},[77,166403,680],{"class":87},[77,166405,2907],{"class":94},[77,166407,110],{"class":87},[77,166409,166410,166412],{"class":79,"line":91},[77,166411,32883],{"class":94},[77,166413,166414],{"class":87},"(nums)\n",[24,166416,166417],{},"创建空集合：",[67,166419,166421],{"className":32846,"code":166420,"language":32848,"meta":72,"style":72},"s = set()\n",[74,166422,166423],{"__ignoreMap":72},[77,166424,166425,166427,166429,166431],{"class":79,"line":80},[77,166426,13052],{"class":87},[77,166428,268],{"class":2123},[77,166430,122154],{"class":94},[77,166432,4451],{"class":87},[24,166434,1988,166435,166437],{},[74,166436,34926],{}," 是空字典，不是空集合。",[24,166439,166440],{},"集合常用操作：",[67,166442,166444],{"className":32846,"code":166443,"language":32848,"meta":72,"style":72},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[74,166445,166446,166466,166470,166479,166488,166497],{"__ignoreMap":72},[77,166447,166448,166450,166452,166454,166456,166458,166460,166462,166464],{"class":79,"line":80},[77,166449,13052],{"class":87},[77,166451,268],{"class":2123},[77,166453,6923],{"class":87},[77,166455,2120],{"class":94},[77,166457,680],{"class":87},[77,166459,2696],{"class":94},[77,166461,680],{"class":87},[77,166463,2690],{"class":94},[77,166465,110],{"class":87},[77,166467,166468],{"class":79,"line":91},[77,166469,4875],{"emptyLinePlaceholder":2549},[77,166471,166472,166475,166477],{"class":79,"line":107},[77,166473,166474],{"class":87},"s.add(",[77,166476,2907],{"class":94},[77,166478,2628],{"class":87},[77,166480,166481,166484,166486],{"class":79,"line":191},[77,166482,166483],{"class":87},"s.remove(",[77,166485,2696],{"class":94},[77,166487,2628],{"class":87},[77,166489,166490,166493,166495],{"class":79,"line":1543},[77,166491,166492],{"class":87},"s.discard(",[77,166494,3059],{"class":94},[77,166496,2628],{"class":87},[77,166498,166499,166501,166503,166505],{"class":79,"line":1549},[77,166500,32883],{"class":94},[77,166502,2622],{"class":87},[77,166504,9833],{"class":94},[77,166506,166507],{"class":87},"(s))\n",[24,166509,166510],{},"交并差：",[67,166512,166514],{"className":32846,"code":166513,"language":32848,"meta":72,"style":72},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[74,166515,166516,166536,166556,166560,166575,166588],{"__ignoreMap":72},[77,166517,166518,166520,166522,166524,166526,166528,166530,166532,166534],{"class":79,"line":80},[77,166519,13392],{"class":87},[77,166521,268],{"class":2123},[77,166523,6923],{"class":87},[77,166525,2120],{"class":94},[77,166527,680],{"class":87},[77,166529,2696],{"class":94},[77,166531,680],{"class":87},[77,166533,2690],{"class":94},[77,166535,110],{"class":87},[77,166537,166538,166540,166542,166544,166546,166548,166550,166552,166554],{"class":79,"line":91},[77,166539,13418],{"class":87},[77,166541,268],{"class":2123},[77,166543,6923],{"class":87},[77,166545,2690],{"class":94},[77,166547,680],{"class":87},[77,166549,2907],{"class":94},[77,166551,680],{"class":87},[77,166553,2933],{"class":94},[77,166555,110],{"class":87},[77,166557,166558],{"class":79,"line":107},[77,166559,4875],{"emptyLinePlaceholder":2549},[77,166561,166562,166564,166567,166569,166572],{"class":79,"line":191},[77,166563,32883],{"class":94},[77,166565,166566],{"class":87},"(a ",[77,166568,2967],{"class":2123},[77,166570,166571],{"class":87}," b)  ",[77,166573,166574],{"class":323},"# 交集\n",[77,166576,166577,166579,166581,166583,166585],{"class":79,"line":1543},[77,166578,32883],{"class":94},[77,166580,166566],{"class":87},[77,166582,3533],{"class":2123},[77,166584,166571],{"class":87},[77,166586,166587],{"class":323},"# 并集\n",[77,166589,166590,166592,166594,166596,166598],{"class":79,"line":1549},[77,166591,32883],{"class":94},[77,166593,166566],{"class":87},[77,166595,3145],{"class":2123},[77,166597,166571],{"class":87},[77,166599,166600],{"class":323},"# 差集\n",[14,166602,166604],{"id":166603},"_610-字典dict","6.10 字典dict",[24,166606,166607],{},"字典通过 key-value 保存数据。",[67,166609,166611],{"className":32846,"code":166610,"language":32848,"meta":72,"style":72},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[74,166612,166613,166621,166631,166642,166652],{"__ignoreMap":72},[77,166614,166615,166617,166619],{"class":79,"line":80},[77,166616,151579],{"class":87},[77,166618,268],{"class":2123},[77,166620,88],{"class":87},[77,166622,166623,166625,166627,166629],{"class":79,"line":91},[77,166624,149118],{"class":271},[77,166626,98],{"class":87},[77,166628,151986],{"class":271},[77,166630,33933],{"class":87},[77,166632,166633,166636,166638,166640],{"class":79,"line":107},[77,166634,166635],{"class":271},"    \"age\"",[77,166637,98],{"class":87},[77,166639,3263],{"class":94},[77,166641,33933],{"class":87},[77,166643,166644,166647,166649],{"class":79,"line":191},[77,166645,166646],{"class":271},"    \"score\"",[77,166648,98],{"class":87},[77,166650,166651],{"class":94},"95\n",[77,166653,166654],{"class":79,"line":1543},[77,166655,110],{"class":87},[24,166657,166658],{},"获取值：",[67,166660,166662],{"className":32846,"code":166661,"language":32848,"meta":72,"style":72},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[74,166663,166664,166675],{"__ignoreMap":72},[77,166665,166666,166668,166671,166673],{"class":79,"line":80},[77,166667,32883],{"class":94},[77,166669,166670],{"class":87},"(student[",[77,166672,65123],{"class":271},[77,166674,7132],{"class":87},[77,166676,166677,166679,166682,166684],{"class":79,"line":91},[77,166678,32883],{"class":94},[77,166680,166681],{"class":87},"(student.get(",[77,166683,65123],{"class":271},[77,166685,32965],{"class":87},[24,166687,17859],{},[67,166689,166691],{"className":32846,"code":166690,"language":32848,"meta":72,"style":72},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[74,166692,166693,166706],{"__ignoreMap":72},[77,166694,166695,166697,166700,166703],{"class":79,"line":80},[77,166696,154957],{"class":87},[77,166698,166699],{"class":271},"\"address\"",[77,166701,166702],{"class":87},"]     ",[77,166704,166705],{"class":323},"# key不存在会报错\n",[77,166707,166708,166711,166713,166715],{"class":79,"line":91},[77,166709,166710],{"class":87},"student.get(",[77,166712,166699],{"class":271},[77,166714,16186],{"class":87},[77,166716,166717],{"class":323},"# key不存在返回None\n",[24,166719,166720],{},"设置默认值：",[67,166722,166724],{"className":32846,"code":166723,"language":32848,"meta":72,"style":72},"print(student.get(\"address\", \"未知\"))\n",[74,166725,166726],{"__ignoreMap":72},[77,166727,166728,166730,166732,166734,166736,166739],{"class":79,"line":80},[77,166729,32883],{"class":94},[77,166731,166681],{"class":87},[77,166733,166699],{"class":271},[77,166735,680],{"class":87},[77,166737,166738],{"class":271},"\"未知\"",[77,166740,32965],{"class":87},[24,166742,166743],{},"新增和修改：",[67,166745,166747],{"className":32846,"code":166746,"language":32848,"meta":72,"style":72},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[74,166748,166749,166762],{"__ignoreMap":72},[77,166750,166751,166753,166755,166757,166759],{"class":79,"line":80},[77,166752,154957],{"class":87},[77,166754,71567],{"class":271},[77,166756,6918],{"class":87},[77,166758,268],{"class":2123},[77,166760,166761],{"class":94}," 19\n",[77,166763,166764,166766,166768,166770,166772],{"class":79,"line":91},[77,166765,154957],{"class":87},[77,166767,166699],{"class":271},[77,166769,6918],{"class":87},[77,166771,268],{"class":2123},[77,166773,166774],{"class":271}," \"北京\"\n",[24,166776,166777],{},"删除：",[67,166779,166781],{"className":32846,"code":166780,"language":32848,"meta":72,"style":72},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[74,166782,166783,166796,166806],{"__ignoreMap":72},[77,166784,166785,166787,166789,166792,166794],{"class":79,"line":80},[77,166786,157456],{"class":87},[77,166788,268],{"class":2123},[77,166790,166791],{"class":87}," student.pop(",[77,166793,153570],{"class":271},[77,166795,2628],{"class":87},[77,166797,166798,166800,166802,166804],{"class":79,"line":91},[77,166799,165481],{"class":2123},[77,166801,154247],{"class":87},[77,166803,71567],{"class":271},[77,166805,35713],{"class":87},[77,166807,166808],{"class":79,"line":107},[77,166809,166810],{"class":87},"student.clear()\n",[14,166812,166814],{"id":166813},"_611-字典遍历","6.11 字典遍历",[24,166816,166817],{},"遍历 key：",[67,166819,166821],{"className":32846,"code":166820,"language":32848,"meta":72,"style":72},"for key in student:\n    print(key, student[key])\n",[74,166822,166823,166835],{"__ignoreMap":72},[77,166824,166825,166827,166830,166832],{"class":79,"line":80},[77,166826,5500],{"class":2123},[77,166828,166829],{"class":87}," key ",[77,166831,28511],{"class":2123},[77,166833,166834],{"class":87}," student:\n",[77,166836,166837,166839],{"class":79,"line":91},[77,166838,33766],{"class":94},[77,166840,166841],{"class":87},"(key, student[key])\n",[24,166843,166844],{},"遍历 value：",[67,166846,166848],{"className":32846,"code":166847,"language":32848,"meta":72,"style":72},"for value in student.values():\n    print(value)\n",[74,166849,166850,166862],{"__ignoreMap":72},[77,166851,166852,166854,166857,166859],{"class":79,"line":80},[77,166853,5500],{"class":2123},[77,166855,166856],{"class":87}," value ",[77,166858,28511],{"class":2123},[77,166860,166861],{"class":87}," student.values():\n",[77,166863,166864,166866],{"class":79,"line":91},[77,166865,33766],{"class":94},[77,166867,166868],{"class":87},"(value)\n",[24,166870,166871],{},"遍历 key 和 value：",[67,166873,166875],{"className":32846,"code":166874,"language":32848,"meta":72,"style":72},"for key, value in student.items():\n    print(key, value)\n",[74,166876,166877,166889],{"__ignoreMap":72},[77,166878,166879,166881,166884,166886],{"class":79,"line":80},[77,166880,5500],{"class":2123},[77,166882,166883],{"class":87}," key, value ",[77,166885,28511],{"class":2123},[77,166887,166888],{"class":87}," student.items():\n",[77,166890,166891,166893],{"class":79,"line":91},[77,166892,33766],{"class":94},[77,166894,166895],{"class":87},"(key, value)\n",[14,166897,166899],{"id":166898},"_612-嵌套容器","6.12 嵌套容器",[24,166901,166902],{},"列表中保存字典，是项目中最常见的结构之一。",[67,166904,166906],{"className":32846,"code":166905,"language":32848,"meta":72,"style":72},"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",[74,166907,166908,166916,166944,166972,167000,167004,167008,167018],{"__ignoreMap":72},[77,166909,166910,166912,166914],{"class":79,"line":80},[77,166911,161814],{"class":87},[77,166913,268],{"class":2123},[77,166915,57895],{"class":87},[77,166917,166918,166920,166922,166924,166926,166928,166930,166932,166934,166936,166938,166940,166942],{"class":79,"line":91},[77,166919,150483],{"class":87},[77,166921,65123],{"class":271},[77,166923,98],{"class":87},[77,166925,151986],{"class":271},[77,166927,680],{"class":87},[77,166929,71567],{"class":271},[77,166931,98],{"class":87},[77,166933,3263],{"class":94},[77,166935,680],{"class":87},[77,166937,153570],{"class":271},[77,166939,98],{"class":87},[77,166941,3601],{"class":94},[77,166943,7405],{"class":87},[77,166945,166946,166948,166950,166952,166954,166956,166958,166960,166962,166964,166966,166968,166970],{"class":79,"line":107},[77,166947,150483],{"class":87},[77,166949,65123],{"class":271},[77,166951,98],{"class":87},[77,166953,153034],{"class":271},[77,166955,680],{"class":87},[77,166957,71567],{"class":271},[77,166959,98],{"class":87},[77,166961,3238],{"class":94},[77,166963,680],{"class":87},[77,166965,153570],{"class":271},[77,166967,98],{"class":87},[77,166969,3424],{"class":94},[77,166971,7405],{"class":87},[77,166973,166974,166976,166978,166980,166982,166984,166986,166988,166990,166992,166994,166996,166998],{"class":79,"line":191},[77,166975,150483],{"class":87},[77,166977,65123],{"class":271},[77,166979,98],{"class":87},[77,166981,161829],{"class":271},[77,166983,680],{"class":87},[77,166985,71567],{"class":271},[77,166987,98],{"class":87},[77,166989,3288],{"class":94},[77,166991,680],{"class":87},[77,166993,153570],{"class":271},[77,166995,98],{"class":87},[77,166997,3020],{"class":94},[77,166999,7405],{"class":87},[77,167001,167002],{"class":79,"line":1543},[77,167003,35713],{"class":87},[77,167005,167006],{"class":79,"line":1549},[77,167007,4875],{"emptyLinePlaceholder":2549},[77,167009,167010,167012,167014,167016],{"class":79,"line":1566},[77,167011,5500],{"class":2123},[77,167013,154235],{"class":87},[77,167015,28511],{"class":2123},[77,167017,154240],{"class":87},[77,167019,167020,167022,167024,167026,167029,167031],{"class":79,"line":1572},[77,167021,33766],{"class":94},[77,167023,166670],{"class":87},[77,167025,65123],{"class":271},[77,167027,167028],{"class":87},"], student[",[77,167030,153570],{"class":271},[77,167032,7132],{"class":87},[24,167034,167035],{},"统计平均分：",[67,167037,167039],{"className":32846,"code":167038,"language":32848,"meta":72,"style":72},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[74,167040,167041,167049,167053,167063,167075,167079,167094],{"__ignoreMap":72},[77,167042,167043,167045,167047],{"class":79,"line":80},[77,167044,159358],{"class":87},[77,167046,268],{"class":2123},[77,167048,49799],{"class":94},[77,167050,167051],{"class":79,"line":91},[77,167052,4875],{"emptyLinePlaceholder":2549},[77,167054,167055,167057,167059,167061],{"class":79,"line":107},[77,167056,5500],{"class":2123},[77,167058,154235],{"class":87},[77,167060,28511],{"class":2123},[77,167062,154240],{"class":87},[77,167064,167065,167067,167069,167071,167073],{"class":79,"line":191},[77,167066,161405],{"class":87},[77,167068,11950],{"class":2123},[77,167070,154247],{"class":87},[77,167072,153570],{"class":271},[77,167074,35713],{"class":87},[77,167076,167077],{"class":79,"line":1543},[77,167078,4875],{"emptyLinePlaceholder":2549},[77,167080,167081,167083,167085,167087,167089,167091],{"class":79,"line":1549},[77,167082,165872],{"class":87},[77,167084,268],{"class":2123},[77,167086,165877],{"class":87},[77,167088,3197],{"class":2123},[77,167090,9806],{"class":94},[77,167092,167093],{"class":87},"(students)\n",[77,167095,167096,167098,167100,167102,167104,167106,167108,167110,167112,167114],{"class":79,"line":1566},[77,167097,32883],{"class":94},[77,167099,2622],{"class":87},[77,167101,2672],{"class":2123},[77,167103,165895],{"class":271},[77,167105,3509],{"class":94},[77,167107,165900],{"class":87},[77,167109,159257],{"class":2123},[77,167111,3558],{"class":94},[77,167113,2865],{"class":271},[77,167115,2628],{"class":87},[24,167117,167118],{},"查找学生：",[67,167120,167122],{"className":32846,"code":167121,"language":32848,"meta":72,"style":72},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[74,167123,167124,167139,167143,167153,167167,167173,167177,167183],{"__ignoreMap":72},[77,167125,167126,167128,167130,167132,167134,167137],{"class":79,"line":80},[77,167127,114011],{"class":87},[77,167129,268],{"class":2123},[77,167131,63053],{"class":94},[77,167133,2622],{"class":87},[77,167135,167136],{"class":271},"\"请输入学生姓名:\"",[77,167138,2628],{"class":87},[77,167140,167141],{"class":79,"line":91},[77,167142,4875],{"emptyLinePlaceholder":2549},[77,167144,167145,167147,167149,167151],{"class":79,"line":107},[77,167146,5500],{"class":2123},[77,167148,154235],{"class":87},[77,167150,28511],{"class":2123},[77,167152,154240],{"class":87},[77,167154,167155,167157,167159,167161,167163,167165],{"class":79,"line":191},[77,167156,5576],{"class":2123},[77,167158,154247],{"class":87},[77,167160,65123],{"class":271},[77,167162,6918],{"class":87},[77,167164,5424],{"class":2123},[77,167166,162530],{"class":87},[77,167168,167169,167171],{"class":79,"line":1543},[77,167170,34918],{"class":94},[77,167172,152140],{"class":87},[77,167174,167175],{"class":79,"line":1549},[77,167176,34094],{"class":2123},[77,167178,167179,167181],{"class":79,"line":1566},[77,167180,4177],{"class":2123},[77,167182,6214],{"class":87},[77,167184,167185,167187,167189,167192],{"class":79,"line":1572},[77,167186,33766],{"class":94},[77,167188,2622],{"class":87},[77,167190,167191],{"class":271},"\"没有找到\"",[77,167193,2628],{"class":87},[14,167195,167197],{"id":167196},"_613-容器通用操作","6.13 容器通用操作",[24,167199,167200],{},"长度：",[67,167202,167204],{"className":32846,"code":167203,"language":32848,"meta":72,"style":72},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[74,167205,167206,167225,167235],{"__ignoreMap":72},[77,167207,167208,167210,167213,167215,167217,167219,167221,167223],{"class":79,"line":80},[77,167209,9833],{"class":94},[77,167211,167212],{"class":87},"([",[77,167214,2120],{"class":94},[77,167216,680],{"class":87},[77,167218,2696],{"class":94},[77,167220,680],{"class":87},[77,167222,2690],{"class":94},[77,167224,7132],{"class":87},[77,167226,167227,167229,167231,167233],{"class":79,"line":91},[77,167228,9833],{"class":94},[77,167230,2622],{"class":87},[77,167232,157978],{"class":271},[77,167234,2628],{"class":87},[77,167236,167237,167239,167242,167244,167246,167248],{"class":79,"line":107},[77,167238,9833],{"class":94},[77,167240,167241],{"class":87},"({",[77,167243,65123],{"class":271},[77,167245,98],{"class":87},[77,167247,151986],{"class":271},[77,167249,167250],{"class":87},"})\n",[24,167252,167253],{},"最大最小：",[67,167255,167257],{"className":32846,"code":167256,"language":32848,"meta":72,"style":72},"max([1, 2, 3])\nmin([1, 2, 3])\n",[74,167258,167259,167277],{"__ignoreMap":72},[77,167260,167261,167263,167265,167267,167269,167271,167273,167275],{"class":79,"line":80},[77,167262,8490],{"class":94},[77,167264,167212],{"class":87},[77,167266,2120],{"class":94},[77,167268,680],{"class":87},[77,167270,2696],{"class":94},[77,167272,680],{"class":87},[77,167274,2690],{"class":94},[77,167276,7132],{"class":87},[77,167278,167279,167282,167284,167286,167288,167290,167292,167294],{"class":79,"line":91},[77,167280,167281],{"class":94},"min",[77,167283,167212],{"class":87},[77,167285,2120],{"class":94},[77,167287,680],{"class":87},[77,167289,2696],{"class":94},[77,167291,680],{"class":87},[77,167293,2690],{"class":94},[77,167295,7132],{"class":87},[24,167297,167298],{},"求和：",[67,167300,167302],{"className":32846,"code":167301,"language":32848,"meta":72,"style":72},"sum([1, 2, 3])\n",[74,167303,167304],{"__ignoreMap":72},[77,167305,167306,167309,167311,167313,167315,167317,167319,167321],{"class":79,"line":80},[77,167307,167308],{"class":94},"sum",[77,167310,167212],{"class":87},[77,167312,2120],{"class":94},[77,167314,680],{"class":87},[77,167316,2696],{"class":94},[77,167318,680],{"class":87},[77,167320,2690],{"class":94},[77,167322,7132],{"class":87},[24,167324,165569],{},[67,167326,167328],{"className":32846,"code":167327,"language":32848,"meta":72,"style":72},"sorted([3, 1, 2])\n",[74,167329,167330],{"__ignoreMap":72},[77,167331,167332,167335,167337,167339,167341,167343,167345,167347],{"class":79,"line":80},[77,167333,167334],{"class":94},"sorted",[77,167336,167212],{"class":87},[77,167338,2690],{"class":94},[77,167340,680],{"class":87},[77,167342,2120],{"class":94},[77,167344,680],{"class":87},[77,167346,2696],{"class":94},[77,167348,7132],{"class":87},[24,167350,167351],{},"类型转换：",[67,167353,167355],{"className":32846,"code":167354,"language":32848,"meta":72,"style":72},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[74,167356,167357,167367,167385],{"__ignoreMap":72},[77,167358,167359,167361,167363,167365],{"class":79,"line":80},[77,167360,156168],{"class":94},[77,167362,2622],{"class":87},[77,167364,157978],{"class":271},[77,167366,2628],{"class":87},[77,167368,167369,167371,167373,167375,167377,167379,167381,167383],{"class":79,"line":91},[77,167370,157363],{"class":94},[77,167372,167212],{"class":87},[77,167374,2120],{"class":94},[77,167376,680],{"class":87},[77,167378,2696],{"class":94},[77,167380,680],{"class":87},[77,167382,2690],{"class":94},[77,167384,7132],{"class":87},[77,167386,167387,167389,167391,167393,167395,167397,167399,167401,167403,167405],{"class":79,"line":107},[77,167388,157388],{"class":94},[77,167390,167212],{"class":87},[77,167392,2120],{"class":94},[77,167394,680],{"class":87},[77,167396,2120],{"class":94},[77,167398,680],{"class":87},[77,167400,2696],{"class":94},[77,167402,680],{"class":87},[77,167404,2690],{"class":94},[77,167406,7132],{"class":87},[24,167408,167409],{},"成员判断：",[67,167411,167413],{"className":32846,"code":167412,"language":32848,"meta":72,"style":72},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[74,167414,167415,167432,167456],{"__ignoreMap":72},[77,167416,167417,167419,167421,167424,167427,167430],{"class":79,"line":80},[77,167418,32883],{"class":94},[77,167420,2622],{"class":87},[77,167422,167423],{"class":271},"\"a\"",[77,167425,167426],{"class":2123}," in",[77,167428,167429],{"class":271}," \"abc\"",[77,167431,2628],{"class":87},[77,167433,167434,167436,167438,167440,167442,167444,167446,167448,167450,167452,167454],{"class":79,"line":91},[77,167435,32883],{"class":94},[77,167437,2622],{"class":87},[77,167439,2120],{"class":94},[77,167441,167426],{"class":2123},[77,167443,54684],{"class":87},[77,167445,2120],{"class":94},[77,167447,680],{"class":87},[77,167449,2696],{"class":94},[77,167451,680],{"class":87},[77,167453,2690],{"class":94},[77,167455,7132],{"class":87},[77,167457,167458,167460,167462,167464,167466,167468,167470,167472,167474],{"class":79,"line":107},[77,167459,32883],{"class":94},[77,167461,2622],{"class":87},[77,167463,65123],{"class":271},[77,167465,167426],{"class":2123},[77,167467,6923],{"class":87},[77,167469,65123],{"class":271},[77,167471,98],{"class":87},[77,167473,151986],{"class":271},[77,167475,167250],{"class":87},[14,167477,167479],{"id":167478},"_614-推导式","6.14 推导式",[24,167481,167482],{},"推导式用于快速生成容器。",[24,167484,167485],{},"列表推导式：",[67,167487,167489],{"className":32846,"code":167488,"language":32848,"meta":72,"style":72},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[74,167490,167491,167518],{"__ignoreMap":72},[77,167492,167493,167495,167497,167500,167502,167504,167506,167508,167510,167512,167514,167516],{"class":79,"line":80},[77,167494,166198],{"class":87},[77,167496,268],{"class":2123},[77,167498,167499],{"class":87}," [i ",[77,167501,5500],{"class":2123},[77,167503,11911],{"class":87},[77,167505,28511],{"class":2123},[77,167507,34910],{"class":94},[77,167509,2622],{"class":87},[77,167511,2120],{"class":94},[77,167513,680],{"class":87},[77,167515,2958],{"class":94},[77,167517,99736],{"class":87},[77,167519,167520,167522],{"class":79,"line":91},[77,167521,32883],{"class":94},[77,167523,166414],{"class":87},[24,167525,167526],{},"带条件：",[67,167528,167530],{"className":32846,"code":167529,"language":32848,"meta":72,"style":72},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[74,167531,167532,167573],{"__ignoreMap":72},[77,167533,167534,167537,167539,167541,167543,167545,167547,167549,167551,167553,167555,167557,167559,167561,167563,167565,167567,167569,167571],{"class":79,"line":80},[77,167535,167536],{"class":87},"even_nums ",[77,167538,268],{"class":2123},[77,167540,167499],{"class":87},[77,167542,5500],{"class":2123},[77,167544,11911],{"class":87},[77,167546,28511],{"class":2123},[77,167548,34910],{"class":94},[77,167550,2622],{"class":87},[77,167552,2120],{"class":94},[77,167554,680],{"class":87},[77,167556,2951],{"class":94},[77,167558,16186],{"class":87},[77,167560,4008],{"class":2123},[77,167562,11911],{"class":87},[77,167564,2942],{"class":2123},[77,167566,17227],{"class":94},[77,167568,103994],{"class":2123},[77,167570,6568],{"class":94},[77,167572,35713],{"class":87},[77,167574,167575,167577],{"class":79,"line":91},[77,167576,32883],{"class":94},[77,167578,167579],{"class":87},"(even_nums)\n",[24,167581,167582],{},"字典推导式：",[67,167584,167586],{"className":32846,"code":167585,"language":32848,"meta":72,"style":72},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[74,167587,167588,167622],{"__ignoreMap":72},[77,167589,167590,167593,167595,167598,167600,167602,167605,167607,167609,167611,167613,167615,167617,167619],{"class":79,"line":80},[77,167591,167592],{"class":87},"squares ",[77,167594,268],{"class":2123},[77,167596,167597],{"class":87}," {i: i ",[77,167599,13134],{"class":2123},[77,167601,17227],{"class":94},[77,167603,167604],{"class":2123}," for",[77,167606,11911],{"class":87},[77,167608,28511],{"class":2123},[77,167610,34910],{"class":94},[77,167612,2622],{"class":87},[77,167614,2120],{"class":94},[77,167616,680],{"class":87},[77,167618,2958],{"class":94},[77,167620,167621],{"class":87},")}\n",[77,167623,167624,167626],{"class":79,"line":91},[77,167625,32883],{"class":94},[77,167627,167628],{"class":87},"(squares)\n",[24,167630,167631],{},"集合推导式：",[67,167633,167635],{"className":32846,"code":167634,"language":32848,"meta":72,"style":72},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[74,167636,167637,167658],{"__ignoreMap":72},[77,167638,167639,167642,167644,167647,167649,167651,167653,167656],{"class":79,"line":80},[77,167640,167641],{"class":87},"chars ",[77,167643,268],{"class":2123},[77,167645,167646],{"class":87}," {ch ",[77,167648,5500],{"class":2123},[77,167650,161790],{"class":87},[77,167652,28511],{"class":2123},[77,167654,167655],{"class":271}," \"hello\"",[77,167657,110],{"class":87},[77,167659,167660,167662],{"class":79,"line":91},[77,167661,32883],{"class":94},[77,167663,167664],{"class":87},"(chars)\n",[24,167666,167667],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167669,167671],{"id":167670},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[67,167673,167675],{"className":32846,"code":167674,"language":32848,"meta":72,"style":72},"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",[74,167676,167677,167685,167705,167725,167745,167765,167769,167773,167781,167795,167804,167808,167818,167830,167834,167854,167863,167867,167883,167888,167892,167906,167910,167932,167968],{"__ignoreMap":72},[77,167678,167679,167681,167683],{"class":79,"line":80},[77,167680,161814],{"class":87},[77,167682,268],{"class":2123},[77,167684,57895],{"class":87},[77,167686,167687,167689,167691,167693,167695,167697,167699,167701,167703],{"class":79,"line":91},[77,167688,150483],{"class":87},[77,167690,65123],{"class":271},[77,167692,98],{"class":87},[77,167694,151986],{"class":271},[77,167696,680],{"class":87},[77,167698,153570],{"class":271},[77,167700,98],{"class":87},[77,167702,3601],{"class":94},[77,167704,7405],{"class":87},[77,167706,167707,167709,167711,167713,167715,167717,167719,167721,167723],{"class":79,"line":107},[77,167708,150483],{"class":87},[77,167710,65123],{"class":271},[77,167712,98],{"class":87},[77,167714,153034],{"class":271},[77,167716,680],{"class":87},[77,167718,153570],{"class":271},[77,167720,98],{"class":87},[77,167722,3424],{"class":94},[77,167724,7405],{"class":87},[77,167726,167727,167729,167731,167733,167735,167737,167739,167741,167743],{"class":79,"line":191},[77,167728,150483],{"class":87},[77,167730,65123],{"class":271},[77,167732,98],{"class":87},[77,167734,161829],{"class":271},[77,167736,680],{"class":87},[77,167738,153570],{"class":271},[77,167740,98],{"class":87},[77,167742,3020],{"class":94},[77,167744,7405],{"class":87},[77,167746,167747,167749,167751,167753,167755,167757,167759,167761,167763],{"class":79,"line":1543},[77,167748,150483],{"class":87},[77,167750,65123],{"class":271},[77,167752,98],{"class":87},[77,167754,165408],{"class":271},[77,167756,680],{"class":87},[77,167758,153570],{"class":271},[77,167760,98],{"class":87},[77,167762,3495],{"class":94},[77,167764,7405],{"class":87},[77,167766,167767],{"class":79,"line":1549},[77,167768,35713],{"class":87},[77,167770,167771],{"class":79,"line":1566},[77,167772,4875],{"emptyLinePlaceholder":2549},[77,167774,167775,167777,167779],{"class":79,"line":1572},[77,167776,159358],{"class":87},[77,167778,268],{"class":2123},[77,167780,49799],{"class":94},[77,167782,167783,167786,167788,167791,167793],{"class":79,"line":1589},[77,167784,167785],{"class":87},"max_student ",[77,167787,268],{"class":2123},[77,167789,167790],{"class":87}," students[",[77,167792,1939],{"class":94},[77,167794,35713],{"class":87},[77,167796,167797,167800,167802],{"class":79,"line":1595},[77,167798,167799],{"class":87},"passed ",[77,167801,268],{"class":2123},[77,167803,54296],{"class":87},[77,167805,167806],{"class":79,"line":4088},[77,167807,4875],{"emptyLinePlaceholder":2549},[77,167809,167810,167812,167814,167816],{"class":79,"line":4093},[77,167811,5500],{"class":2123},[77,167813,154235],{"class":87},[77,167815,28511],{"class":2123},[77,167817,154240],{"class":87},[77,167819,167820,167822,167824,167826,167828],{"class":79,"line":4099},[77,167821,161405],{"class":87},[77,167823,11950],{"class":2123},[77,167825,154247],{"class":87},[77,167827,153570],{"class":271},[77,167829,35713],{"class":87},[77,167831,167832],{"class":79,"line":4104},[77,167833,4875],{"emptyLinePlaceholder":2549},[77,167835,167836,167838,167840,167842,167844,167846,167849,167851],{"class":79,"line":4118},[77,167837,5576],{"class":2123},[77,167839,154247],{"class":87},[77,167841,153570],{"class":271},[77,167843,6918],{"class":87},[77,167845,3572],{"class":2123},[77,167847,167848],{"class":87}," max_student[",[77,167850,153570],{"class":271},[77,167852,167853],{"class":87},"]:\n",[77,167855,167856,167859,167861],{"class":79,"line":4123},[77,167857,167858],{"class":87},"        max_student ",[77,167860,268],{"class":2123},[77,167862,154263],{"class":87},[77,167864,167865],{"class":79,"line":4129},[77,167866,4875],{"emptyLinePlaceholder":2549},[77,167868,167869,167871,167873,167875,167877,167879,167881],{"class":79,"line":4150},[77,167870,5576],{"class":2123},[77,167872,154247],{"class":87},[77,167874,153570],{"class":271},[77,167876,6918],{"class":87},[77,167878,4186],{"class":2123},[77,167880,159935],{"class":94},[77,167882,6214],{"class":87},[77,167884,167885],{"class":79,"line":4155},[77,167886,167887],{"class":87},"        passed.append(student)\n",[77,167889,167890],{"class":79,"line":4169},[77,167891,4875],{"emptyLinePlaceholder":2549},[77,167893,167894,167896,167898,167900,167902,167904],{"class":79,"line":4174},[77,167895,165872],{"class":87},[77,167897,268],{"class":2123},[77,167899,165877],{"class":87},[77,167901,3197],{"class":2123},[77,167903,9806],{"class":94},[77,167905,167093],{"class":87},[77,167907,167908],{"class":79,"line":4203},[77,167909,4875],{"emptyLinePlaceholder":2549},[77,167911,167912,167914,167916,167918,167920,167922,167924,167926,167928,167930],{"class":79,"line":4208},[77,167913,32883],{"class":94},[77,167915,2622],{"class":87},[77,167917,2672],{"class":2123},[77,167919,165895],{"class":271},[77,167921,3509],{"class":94},[77,167923,165900],{"class":87},[77,167925,159257],{"class":2123},[77,167927,3558],{"class":94},[77,167929,2865],{"class":271},[77,167931,2628],{"class":87},[77,167933,167934,167936,167938,167940,167943,167945,167948,167950,167952,167954,167956,167958,167960,167962,167964,167966],{"class":79,"line":4225},[77,167935,32883],{"class":94},[77,167937,2622],{"class":87},[77,167939,2672],{"class":2123},[77,167941,167942],{"class":271},"\"最高分学生:",[77,167944,3509],{"class":94},[77,167946,167947],{"class":87},"max_student[",[77,167949,154980],{"class":271},[77,167951,3552],{"class":87},[77,167953,3558],{"class":94},[77,167955,6923],{"class":94},[77,167957,167947],{"class":87},[77,167959,155018],{"class":271},[77,167961,3552],{"class":87},[77,167963,3558],{"class":94},[77,167965,2865],{"class":271},[77,167967,2628],{"class":87},[77,167969,167970,167972,167974,167976,167979,167982,167985,167987,167989],{"class":79,"line":4230},[77,167971,32883],{"class":94},[77,167973,2622],{"class":87},[77,167975,2672],{"class":2123},[77,167977,167978],{"class":271},"\"及格人数:",[77,167980,167981],{"class":94},"{len",[77,167983,167984],{"class":87},"(passed)",[77,167986,3558],{"class":94},[77,167988,2865],{"class":271},[77,167990,2628],{"class":87},[14,167992,167994],{"id":167993},"_616-易错点","6.16 易错点",[139,167996,167997,168000,168003,168006,168012,168021],{},[54,167998,167999],{},"列表可变，元组和字符串不可变。",[54,168001,168002],{},"切片结束位置不包含。",[54,168004,168005],{},"字典通过 key 取值，不是通过索引。",[54,168007,168008,168009,30853],{},"空集合要用 ",[74,168010,168011],{},"set()",[54,168013,106799,168014,168017,168018,30853],{},[74,168015,168016],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[74,168019,168020],{},"get()",[54,168022,168023],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168025,168027],{"id":168026},"_617-本章练习","6.17 本章练习",[139,168029,168030,168033,168036,168039,168042],{},[54,168031,168032],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[54,168034,168035],{},"输入一句话，统计每个字符出现次数。",[54,168037,168038],{},"使用集合去除列表中的重复元素。",[54,168040,168041],{},"使用字典保存一个学生的信息，并实现修改成绩。",[54,168043,168044],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2520,168046,168047],{},"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":72,"searchDepth":91,"depth":91,"links":168049},[168050,168051,168052,168053,168054,168055,168056,168057,168058,168059,168060,168061,168062,168063,168064,168065,168066],{"id":165030,"depth":91,"text":165031},{"id":165147,"depth":91,"text":165148},{"id":165237,"depth":91,"text":165238},{"id":165361,"depth":91,"text":165362},{"id":165724,"depth":91,"text":165725},{"id":165911,"depth":91,"text":165912},{"id":166030,"depth":91,"text":166031},{"id":166172,"depth":91,"text":166173},{"id":166359,"depth":91,"text":166360},{"id":166603,"depth":91,"text":166604},{"id":166813,"depth":91,"text":166814},{"id":166898,"depth":91,"text":166899},{"id":167196,"depth":91,"text":167197},{"id":167478,"depth":91,"text":167479},{"id":167670,"depth":91,"text":167671},{"id":167993,"depth":91,"text":167994},{"id":168026,"depth":91,"text":168027},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165022,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168073,"title":168074,"body":168075,"description":2546,"extension":2547,"meta":170247,"navigation":2549,"path":170248,"seo":170249,"stem":170250,"__hash__":170251},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168076,"toc":170222},[168077,168080,168084,168087,168167,168170,168191,168194,168198,168201,168263,168266,168283,168287,168290,168335,168337,168345,168349,168352,168434,168437,168440,168465,168468,168491,168495,168498,168500,168562,168565,168567,168618,168622,168626,168632,168737,168741,168747,168818,168822,168825,168893,168896,168976,168980,168986,169022,169025,169028,169138,169144,169148,169151,169223,169226,169230,169234,169239,169301,169305,169310,169378,169382,169387,169503,169507,169510,169590,169593,169597,169600,169704,169706,169721,169724,169728,169866,169874,169878,169880,169891,169893,170151,170155,170187,170191,170219],[10,168078,168074],{"id":168079},"_7-函数进阶",[14,168081,168083],{"id":168082},"_71-多返回值","7.1 多返回值",[24,168085,168086],{},"Python 函数可以返回多个值，本质上返回的是元组。",[67,168088,168090],{"className":32846,"code":168089,"language":32848,"meta":72,"style":72},"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",[74,168091,168092,168101,168109,168117,168126,168133,168137,168141,168150,168156],{"__ignoreMap":72},[77,168093,168094,168096,168099],{"class":79,"line":80},[77,168095,34414],{"class":2123},[77,168097,168098],{"class":83}," get_info",[77,168100,34420],{"class":87},[77,168102,168103,168105,168107],{"class":79,"line":91},[77,168104,154468],{"class":87},[77,168106,268],{"class":2123},[77,168108,151451],{"class":271},[77,168110,168111,168113,168115],{"class":79,"line":107},[77,168112,154484],{"class":87},[77,168114,268],{"class":2123},[77,168116,148649],{"class":94},[77,168118,168119,168121,168123],{"class":79,"line":191},[77,168120,154499],{"class":87},[77,168122,268],{"class":2123},[77,168124,168125],{"class":94}," 95\n",[77,168127,168128,168130],{"class":79,"line":1543},[77,168129,6565],{"class":2123},[77,168131,168132],{"class":87}," name, age, score\n",[77,168134,168135],{"class":79,"line":1549},[77,168136,4875],{"emptyLinePlaceholder":2549},[77,168138,168139],{"class":79,"line":1566},[77,168140,4875],{"emptyLinePlaceholder":2549},[77,168142,168143,168145,168147],{"class":79,"line":1572},[77,168144,163404],{"class":87},[77,168146,268],{"class":2123},[77,168148,168149],{"class":87}," get_info()\n",[77,168151,168152,168154],{"class":79,"line":1589},[77,168153,32883],{"class":94},[77,168155,79023],{"class":87},[77,168157,168158,168160,168162,168164],{"class":79,"line":1595},[77,168159,32883],{"class":94},[77,168161,2622],{"class":87},[77,168163,105540],{"class":94},[77,168165,168166],{"class":87},"(result))\n",[24,168168,168169],{},"可以直接解包：",[67,168171,168173],{"className":32846,"code":168172,"language":32848,"meta":72,"style":72},"name, age, score = get_info()\nprint(name, age, score)\n",[74,168174,168175,168184],{"__ignoreMap":72},[77,168176,168177,168180,168182],{"class":79,"line":80},[77,168178,168179],{"class":87},"name, age, score ",[77,168181,268],{"class":2123},[77,168183,168149],{"class":87},[77,168185,168186,168188],{"class":79,"line":91},[77,168187,32883],{"class":94},[77,168189,168190],{"class":87},"(name, age, score)\n",[24,168192,168193],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168195,168197],{"id":168196},"_72-位置参数","7.2 位置参数",[24,168199,168200],{},"位置参数按顺序传递。",[67,168202,168204],{"className":32846,"code":168203,"language":32848,"meta":72,"style":72},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[74,168205,168206,168214,168242,168246,168250],{"__ignoreMap":72},[77,168207,168208,168210,168212],{"class":79,"line":80},[77,168209,34414],{"class":2123},[77,168211,151470],{"class":83},[77,168213,151473],{"class":87},[77,168215,168216,168218,168220,168222,168224,168226,168228,168230,168232,168234,168236,168238,168240],{"class":79,"line":91},[77,168217,33766],{"class":94},[77,168219,2622],{"class":87},[77,168221,2672],{"class":2123},[77,168223,151484],{"class":271},[77,168225,3509],{"class":94},[77,168227,82247],{"class":87},[77,168229,3558],{"class":94},[77,168231,151493],{"class":271},[77,168233,3509],{"class":94},[77,168235,72664],{"class":87},[77,168237,3558],{"class":94},[77,168239,151502],{"class":271},[77,168241,2628],{"class":87},[77,168243,168244],{"class":79,"line":107},[77,168245,4875],{"emptyLinePlaceholder":2549},[77,168247,168248],{"class":79,"line":191},[77,168249,4875],{"emptyLinePlaceholder":2549},[77,168251,168252,168255,168257,168259,168261],{"class":79,"line":1543},[77,168253,168254],{"class":87},"introduce(",[77,168256,151986],{"class":271},[77,168258,680],{"class":87},[77,168260,3263],{"class":94},[77,168262,2628],{"class":87},[24,168264,168265],{},"顺序错了就会得到错误含义：",[67,168267,168269],{"className":32846,"code":168268,"language":32848,"meta":72,"style":72},"introduce(18, \"小明\")\n",[74,168270,168271],{"__ignoreMap":72},[77,168272,168273,168275,168277,168279,168281],{"class":79,"line":80},[77,168274,168254],{"class":87},[77,168276,3263],{"class":94},[77,168278,680],{"class":87},[77,168280,151986],{"class":271},[77,168282,2628],{"class":87},[14,168284,168286],{"id":168285},"_73-关键字参数","7.3 关键字参数",[24,168288,168289],{},"关键字参数按参数名传递。",[67,168291,168293],{"className":32846,"code":168292,"language":32848,"meta":72,"style":72},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[74,168294,168295,168315],{"__ignoreMap":72},[77,168296,168297,168299,168301,168303,168305,168307,168309,168311,168313],{"class":79,"line":80},[77,168298,168254],{"class":87},[77,168300,82247],{"class":7691},[77,168302,268],{"class":2123},[77,168304,151986],{"class":271},[77,168306,680],{"class":87},[77,168308,72664],{"class":7691},[77,168310,268],{"class":2123},[77,168312,3263],{"class":94},[77,168314,2628],{"class":87},[77,168316,168317,168319,168321,168323,168325,168327,168329,168331,168333],{"class":79,"line":91},[77,168318,168254],{"class":87},[77,168320,72664],{"class":7691},[77,168322,268],{"class":2123},[77,168324,3263],{"class":94},[77,168326,680],{"class":87},[77,168328,82247],{"class":7691},[77,168330,268],{"class":2123},[77,168332,151986],{"class":271},[77,168334,2628],{"class":87},[24,168336,120366],{},[139,168338,168339,168342],{},[54,168340,168341],{},"顺序不容易错。",[54,168343,168344],{},"调用时可读性更强。",[14,168346,168348],{"id":168347},"_74-默认参数","7.4 默认参数",[24,168350,168351],{},"默认参数给参数设置默认值。",[67,168353,168355],{"className":32846,"code":168354,"language":32848,"meta":72,"style":72},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[74,168356,168357,168373,168403,168407,168411,168421],{"__ignoreMap":72},[77,168358,168359,168361,168363,168366,168368,168371],{"class":79,"line":80},[77,168360,34414],{"class":2123},[77,168362,124525],{"class":83},[77,168364,168365],{"class":87},"(host, port",[77,168367,268],{"class":2123},[77,168369,168370],{"class":94},"3306",[77,168372,33254],{"class":87},[77,168374,168375,168377,168379,168381,168384,168386,168388,168390,168392,168394,168397,168399,168401],{"class":79,"line":91},[77,168376,33766],{"class":94},[77,168378,2622],{"class":87},[77,168380,2672],{"class":2123},[77,168382,168383],{"class":271},"\"连接",[77,168385,3509],{"class":94},[77,168387,29863],{"class":87},[77,168389,3558],{"class":94},[77,168391,3472],{"class":271},[77,168393,3509],{"class":94},[77,168395,168396],{"class":87},"port",[77,168398,3558],{"class":94},[77,168400,2865],{"class":271},[77,168402,2628],{"class":87},[77,168404,168405],{"class":79,"line":107},[77,168406,4875],{"emptyLinePlaceholder":2549},[77,168408,168409],{"class":79,"line":191},[77,168410,4875],{"emptyLinePlaceholder":2549},[77,168412,168413,168416,168419],{"class":79,"line":1543},[77,168414,168415],{"class":87},"connect(",[77,168417,168418],{"class":271},"\"localhost\"",[77,168420,2628],{"class":87},[77,168422,168423,168425,168427,168429,168432],{"class":79,"line":1549},[77,168424,168415],{"class":87},[77,168426,168418],{"class":271},[77,168428,680],{"class":87},[77,168430,168431],{"class":94},"6379",[77,168433,2628],{"class":87},[24,168435,168436],{},"注意：默认参数必须放在非默认参数后面。",[24,168438,168439],{},"错误：",[67,168441,168443],{"className":32846,"code":168442,"language":32848,"meta":72,"style":72},"def connect(port=3306, host):\n    pass\n",[74,168444,168445,168461],{"__ignoreMap":72},[77,168446,168447,168449,168451,168454,168456,168458],{"class":79,"line":80},[77,168448,34414],{"class":2123},[77,168450,124525],{"class":83},[77,168452,168453],{"class":87},"(port",[77,168455,268],{"class":2123},[77,168457,168370],{"class":94},[77,168459,168460],{"class":87},", host):\n",[77,168462,168463],{"class":79,"line":91},[77,168464,151635],{"class":2123},[24,168466,168467],{},"正确：",[67,168469,168471],{"className":32846,"code":168470,"language":32848,"meta":72,"style":72},"def connect(host, port=3306):\n    pass\n",[74,168472,168473,168487],{"__ignoreMap":72},[77,168474,168475,168477,168479,168481,168483,168485],{"class":79,"line":80},[77,168476,34414],{"class":2123},[77,168478,124525],{"class":83},[77,168480,168365],{"class":87},[77,168482,268],{"class":2123},[77,168484,168370],{"class":94},[77,168486,33254],{"class":87},[77,168488,168489],{"class":79,"line":91},[77,168490,151635],{"class":2123},[14,168492,168494],{"id":168493},"_75-默认参数的坑","7.5 默认参数的坑",[24,168496,168497],{},"不要使用可变对象作为默认参数。",[24,168499,159721],{},[67,168501,168503],{"className":32846,"code":168502,"language":32848,"meta":72,"style":72},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[74,168504,168505,168520,168525,168532,168536,168540,168551],{"__ignoreMap":72},[77,168506,168507,168509,168512,168515,168517],{"class":79,"line":80},[77,168508,34414],{"class":2123},[77,168510,168511],{"class":83}," add_item",[77,168513,168514],{"class":87},"(item, items",[77,168516,268],{"class":2123},[77,168518,168519],{"class":87},"[]):\n",[77,168521,168522],{"class":79,"line":91},[77,168523,168524],{"class":87},"    items.append(item)\n",[77,168526,168527,168529],{"class":79,"line":107},[77,168528,6565],{"class":2123},[77,168530,168531],{"class":87}," items\n",[77,168533,168534],{"class":79,"line":191},[77,168535,4875],{"emptyLinePlaceholder":2549},[77,168537,168538],{"class":79,"line":1543},[77,168539,4875],{"emptyLinePlaceholder":2549},[77,168541,168542,168544,168547,168549],{"class":79,"line":1549},[77,168543,32883],{"class":94},[77,168545,168546],{"class":87},"(add_item(",[77,168548,167423],{"class":271},[77,168550,32965],{"class":87},[77,168552,168553,168555,168557,168560],{"class":79,"line":1566},[77,168554,32883],{"class":94},[77,168556,168546],{"class":87},[77,168558,168559],{"class":271},"\"b\"",[77,168561,32965],{"class":87},[24,168563,168564],{},"第二次调用会复用第一次的列表。",[24,168566,157986],{},[67,168568,168570],{"className":32846,"code":168569,"language":32848,"meta":72,"style":72},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[74,168571,168572,168586,168599,168608,168612],{"__ignoreMap":72},[77,168573,168574,168576,168578,168580,168582,168584],{"class":79,"line":80},[77,168575,34414],{"class":2123},[77,168577,168511],{"class":83},[77,168579,168514],{"class":87},[77,168581,268],{"class":2123},[77,168583,98122],{"class":94},[77,168585,33254],{"class":87},[77,168587,168588,168590,168593,168595,168597],{"class":79,"line":91},[77,168589,5576],{"class":2123},[77,168591,168592],{"class":87}," items ",[77,168594,41393],{"class":2123},[77,168596,41399],{"class":94},[77,168598,6214],{"class":87},[77,168600,168601,168604,168606],{"class":79,"line":107},[77,168602,168603],{"class":87},"        items ",[77,168605,268],{"class":2123},[77,168607,54296],{"class":87},[77,168609,168610],{"class":79,"line":191},[77,168611,168524],{"class":87},[77,168613,168614,168616],{"class":79,"line":1543},[77,168615,6565],{"class":2123},[77,168617,168531],{"class":87},[14,168619,168621],{"id":168620},"_76-不定长参数","7.6 不定长参数",[19,168623,168625],{"id":168624},"_761-args","7.6.1 *args",[24,168627,168628,168631],{},[74,168629,168630],{},"*args"," 接收任意数量的位置参数，得到元组。",[67,168633,168635],{"className":32846,"code":168634,"language":32848,"meta":72,"style":72},"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",[74,168636,168637,168650,168658,168669,168678,168684,168688,168692,168711],{"__ignoreMap":72},[77,168638,168639,168641,168643,168645,168647],{"class":79,"line":80},[77,168640,34414],{"class":2123},[77,168642,7684],{"class":83},[77,168644,2622],{"class":87},[77,168646,3068],{"class":2123},[77,168648,168649],{"class":87},"args):\n",[77,168651,168652,168654,168656],{"class":79,"line":91},[77,168653,161405],{"class":87},[77,168655,268],{"class":2123},[77,168657,49799],{"class":94},[77,168659,168660,168662,168664,168666],{"class":79,"line":107},[77,168661,5676],{"class":2123},[77,168663,158278],{"class":87},[77,168665,28511],{"class":2123},[77,168667,168668],{"class":87}," args:\n",[77,168670,168671,168673,168675],{"class":79,"line":191},[77,168672,162080],{"class":87},[77,168674,11950],{"class":2123},[77,168676,168677],{"class":87}," num\n",[77,168679,168680,168682],{"class":79,"line":1543},[77,168681,6565],{"class":2123},[77,168683,164385],{"class":87},[77,168685,168686],{"class":79,"line":1549},[77,168687,4875],{"emptyLinePlaceholder":2549},[77,168689,168690],{"class":79,"line":1566},[77,168691,4875],{"emptyLinePlaceholder":2549},[77,168693,168694,168696,168699,168701,168703,168705,168707,168709],{"class":79,"line":1572},[77,168695,32883],{"class":94},[77,168697,168698],{"class":87},"(add(",[77,168700,2120],{"class":94},[77,168702,680],{"class":87},[77,168704,2696],{"class":94},[77,168706,680],{"class":87},[77,168708,2690],{"class":94},[77,168710,32965],{"class":87},[77,168712,168713,168715,168717,168719,168721,168723,168725,168727,168729,168731,168733,168735],{"class":79,"line":1589},[77,168714,32883],{"class":94},[77,168716,168698],{"class":87},[77,168718,2120],{"class":94},[77,168720,680],{"class":87},[77,168722,2696],{"class":94},[77,168724,680],{"class":87},[77,168726,2690],{"class":94},[77,168728,680],{"class":87},[77,168730,2907],{"class":94},[77,168732,680],{"class":87},[77,168734,2933],{"class":94},[77,168736,32965],{"class":87},[19,168738,168740],{"id":168739},"_762-kwargs","7.6.2 **kwargs",[24,168742,168743,168746],{},[74,168744,168745],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[67,168748,168750],{"className":32846,"code":168749,"language":32848,"meta":72,"style":72},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[74,168751,168752,168765,168776,168782,168786,168790],{"__ignoreMap":72},[77,168753,168754,168756,168758,168760,168762],{"class":79,"line":80},[77,168755,34414],{"class":2123},[77,168757,164043],{"class":83},[77,168759,2622],{"class":87},[77,168761,13134],{"class":2123},[77,168763,168764],{"class":87},"kwargs):\n",[77,168766,168767,168769,168771,168773],{"class":79,"line":91},[77,168768,5676],{"class":2123},[77,168770,166883],{"class":87},[77,168772,28511],{"class":2123},[77,168774,168775],{"class":87}," kwargs.items():\n",[77,168777,168778,168780],{"class":79,"line":107},[77,168779,34918],{"class":94},[77,168781,166895],{"class":87},[77,168783,168784],{"class":79,"line":191},[77,168785,4875],{"emptyLinePlaceholder":2549},[77,168787,168788],{"class":79,"line":1543},[77,168789,4875],{"emptyLinePlaceholder":2549},[77,168791,168792,168794,168796,168798,168800,168802,168804,168806,168808,168810,168812,168814,168816],{"class":79,"line":1549},[77,168793,164108],{"class":87},[77,168795,82247],{"class":7691},[77,168797,268],{"class":2123},[77,168799,151986],{"class":271},[77,168801,680],{"class":87},[77,168803,72664],{"class":7691},[77,168805,268],{"class":2123},[77,168807,3263],{"class":94},[77,168809,680],{"class":87},[77,168811,72715],{"class":7691},[77,168813,268],{"class":2123},[77,168815,71712],{"class":271},[77,168817,2628],{"class":87},[14,168819,168821],{"id":168820},"_77-参数解包","7.7 参数解包",[24,168823,168824],{},"列表或元组解包为位置参数：",[67,168826,168828],{"className":32846,"code":168827,"language":32848,"meta":72,"style":72},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[74,168829,168830,168839,168854,168858,168862,168882],{"__ignoreMap":72},[77,168831,168832,168834,168836],{"class":79,"line":80},[77,168833,34414],{"class":2123},[77,168835,7684],{"class":83},[77,168837,168838],{"class":87},"(a, b, c):\n",[77,168840,168841,168843,168845,168847,168849,168851],{"class":79,"line":91},[77,168842,6565],{"class":2123},[77,168844,13342],{"class":87},[77,168846,3094],{"class":2123},[77,168848,13355],{"class":87},[77,168850,3094],{"class":2123},[77,168852,168853],{"class":87}," c\n",[77,168855,168856],{"class":79,"line":107},[77,168857,4875],{"emptyLinePlaceholder":2549},[77,168859,168860],{"class":79,"line":191},[77,168861,4875],{"emptyLinePlaceholder":2549},[77,168863,168864,168866,168868,168870,168872,168874,168876,168878,168880],{"class":79,"line":1543},[77,168865,166198],{"class":87},[77,168867,268],{"class":2123},[77,168869,54684],{"class":87},[77,168871,2120],{"class":94},[77,168873,680],{"class":87},[77,168875,2696],{"class":94},[77,168877,680],{"class":87},[77,168879,2690],{"class":94},[77,168881,35713],{"class":87},[77,168883,168884,168886,168888,168890],{"class":79,"line":1549},[77,168885,32883],{"class":94},[77,168887,168698],{"class":87},[77,168889,3068],{"class":2123},[77,168891,168892],{"class":87},"nums))\n",[24,168894,168895],{},"字典解包为关键字参数：",[67,168897,168899],{"className":32846,"code":168898,"language":32848,"meta":72,"style":72},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[74,168900,168901,168909,168935,168939,168943,168967],{"__ignoreMap":72},[77,168902,168903,168905,168907],{"class":79,"line":80},[77,168904,34414],{"class":2123},[77,168906,151470],{"class":83},[77,168908,151473],{"class":87},[77,168910,168911,168913,168915,168917,168919,168921,168923,168925,168927,168929,168931,168933],{"class":79,"line":91},[77,168912,33766],{"class":94},[77,168914,2622],{"class":87},[77,168916,2672],{"class":2123},[77,168918,2865],{"class":271},[77,168920,3509],{"class":94},[77,168922,82247],{"class":87},[77,168924,3558],{"class":94},[77,168926,6923],{"class":94},[77,168928,72664],{"class":87},[77,168930,3558],{"class":94},[77,168932,2865],{"class":271},[77,168934,2628],{"class":87},[77,168936,168937],{"class":79,"line":107},[77,168938,4875],{"emptyLinePlaceholder":2549},[77,168940,168941],{"class":79,"line":191},[77,168942,4875],{"emptyLinePlaceholder":2549},[77,168944,168945,168947,168949,168951,168953,168955,168957,168959,168961,168963,168965],{"class":79,"line":1543},[77,168946,118747],{"class":87},[77,168948,268],{"class":2123},[77,168950,6923],{"class":87},[77,168952,65123],{"class":271},[77,168954,98],{"class":87},[77,168956,151986],{"class":271},[77,168958,680],{"class":87},[77,168960,71567],{"class":271},[77,168962,98],{"class":87},[77,168964,3263],{"class":94},[77,168966,110],{"class":87},[77,168968,168969,168971,168973],{"class":79,"line":1549},[77,168970,168254],{"class":87},[77,168972,13134],{"class":2123},[77,168974,168975],{"class":87},"info)\n",[14,168977,168979],{"id":168978},"_78-匿名函数lambda","7.8 匿名函数lambda",[24,168981,168982,168985],{},[74,168983,168984],{},"lambda"," 用于定义简单匿名函数。",[67,168987,168989],{"className":32846,"code":168988,"language":32848,"meta":72,"style":72},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[74,168990,168991,169008],{"__ignoreMap":72},[77,168992,168993,168996,168998,169001,169004,169006],{"class":79,"line":80},[77,168994,168995],{"class":87},"add ",[77,168997,268],{"class":2123},[77,168999,169000],{"class":2123}," lambda",[77,169002,169003],{"class":87}," a, b: a ",[77,169005,3094],{"class":2123},[77,169007,153202],{"class":87},[77,169009,169010,169012,169014,169016,169018,169020],{"class":79,"line":91},[77,169011,32883],{"class":94},[77,169013,168698],{"class":87},[77,169015,2120],{"class":94},[77,169017,680],{"class":87},[77,169019,2696],{"class":94},[77,169021,32965],{"class":87},[24,169023,169024],{},"常和排序、过滤等函数一起使用。",[24,169026,169027],{},"按分数排序：",[67,169029,169031],{"className":32846,"code":169030,"language":32848,"meta":72,"style":72},"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",[74,169032,169033,169041,169061,169081,169101,169105,169109,169132],{"__ignoreMap":72},[77,169034,169035,169037,169039],{"class":79,"line":80},[77,169036,161814],{"class":87},[77,169038,268],{"class":2123},[77,169040,57895],{"class":87},[77,169042,169043,169045,169047,169049,169051,169053,169055,169057,169059],{"class":79,"line":91},[77,169044,150483],{"class":87},[77,169046,65123],{"class":271},[77,169048,98],{"class":87},[77,169050,151986],{"class":271},[77,169052,680],{"class":87},[77,169054,153570],{"class":271},[77,169056,98],{"class":87},[77,169058,3601],{"class":94},[77,169060,7405],{"class":87},[77,169062,169063,169065,169067,169069,169071,169073,169075,169077,169079],{"class":79,"line":107},[77,169064,150483],{"class":87},[77,169066,65123],{"class":271},[77,169068,98],{"class":87},[77,169070,153034],{"class":271},[77,169072,680],{"class":87},[77,169074,153570],{"class":271},[77,169076,98],{"class":87},[77,169078,3424],{"class":94},[77,169080,7405],{"class":87},[77,169082,169083,169085,169087,169089,169091,169093,169095,169097,169099],{"class":79,"line":191},[77,169084,150483],{"class":87},[77,169086,65123],{"class":271},[77,169088,98],{"class":87},[77,169090,161829],{"class":271},[77,169092,680],{"class":87},[77,169094,153570],{"class":271},[77,169096,98],{"class":87},[77,169098,3020],{"class":94},[77,169100,7405],{"class":87},[77,169102,169103],{"class":79,"line":1543},[77,169104,35713],{"class":87},[77,169106,169107],{"class":79,"line":1549},[77,169108,4875],{"emptyLinePlaceholder":2549},[77,169110,169111,169114,169116,169118,169120,169122,169124,169126,169128,169130],{"class":79,"line":1566},[77,169112,169113],{"class":87},"students.sort(",[77,169115,156044],{"class":7691},[77,169117,156047],{"class":2123},[77,169119,156050],{"class":87},[77,169121,153570],{"class":271},[77,169123,114635],{"class":87},[77,169125,165626],{"class":7691},[77,169127,268],{"class":2123},[77,169129,33943],{"class":94},[77,169131,2628],{"class":87},[77,169133,169134,169136],{"class":79,"line":1572},[77,169135,32883],{"class":94},[77,169137,167093],{"class":87},[24,169139,169140,169141,169143],{},"如果逻辑复杂，不要硬写 ",[74,169142,168984],{},"，定义普通函数更清晰。",[14,169145,169147],{"id":169146},"_79-函数作为参数","7.9 函数作为参数",[24,169149,169150],{},"函数可以作为参数传给另一个函数。",[67,169152,169154],{"className":32846,"code":169153,"language":32848,"meta":72,"style":72},"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",[74,169155,169156,169164,169174,169178,169182,169192,169199,169203,169207],{"__ignoreMap":72},[77,169157,169158,169160,169162],{"class":79,"line":80},[77,169159,34414],{"class":2123},[77,169161,7684],{"class":83},[77,169163,153191],{"class":87},[77,169165,169166,169168,169170,169172],{"class":79,"line":91},[77,169167,6565],{"class":2123},[77,169169,13342],{"class":87},[77,169171,3094],{"class":2123},[77,169173,153202],{"class":87},[77,169175,169176],{"class":79,"line":107},[77,169177,4875],{"emptyLinePlaceholder":2549},[77,169179,169180],{"class":79,"line":191},[77,169181,4875],{"emptyLinePlaceholder":2549},[77,169183,169184,169186,169189],{"class":79,"line":1543},[77,169185,34414],{"class":2123},[77,169187,169188],{"class":83}," calculate",[77,169190,169191],{"class":87},"(a, b, func):\n",[77,169193,169194,169196],{"class":79,"line":1549},[77,169195,6565],{"class":2123},[77,169197,169198],{"class":87}," func(a, b)\n",[77,169200,169201],{"class":79,"line":1566},[77,169202,4875],{"emptyLinePlaceholder":2549},[77,169204,169205],{"class":79,"line":1572},[77,169206,4875],{"emptyLinePlaceholder":2549},[77,169208,169209,169211,169214,169216,169218,169220],{"class":79,"line":1589},[77,169210,32883],{"class":94},[77,169212,169213],{"class":87},"(calculate(",[77,169215,3059],{"class":94},[77,169217,680],{"class":87},[77,169219,3313],{"class":94},[77,169221,169222],{"class":87},", add))\n",[24,169224,169225],{},"这种思想在排序、回调、框架中经常出现。",[14,169227,169229],{"id":169228},"_710-mapfiltersorted","7.10 map、filter、sorted",[19,169231,169233],{"id":169232},"_7101-map","7.10.1 map",[24,169235,169236,169238],{},[74,169237,76483],{}," 对每个元素执行函数。",[67,169240,169242],{"className":32846,"code":169241,"language":32848,"meta":72,"style":72},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[74,169243,169244,169268,169291],{"__ignoreMap":72},[77,169245,169246,169248,169250,169252,169254,169256,169258,169260,169262,169264,169266],{"class":79,"line":80},[77,169247,166198],{"class":87},[77,169249,268],{"class":2123},[77,169251,54684],{"class":87},[77,169253,2120],{"class":94},[77,169255,680],{"class":87},[77,169257,2696],{"class":94},[77,169259,680],{"class":87},[77,169261,2690],{"class":94},[77,169263,680],{"class":87},[77,169265,2907],{"class":94},[77,169267,35713],{"class":87},[77,169269,169270,169272,169274,169277,169279,169281,169284,169286,169288],{"class":79,"line":91},[77,169271,163404],{"class":87},[77,169273,268],{"class":2123},[77,169275,169276],{"class":94}," map",[77,169278,2622],{"class":87},[77,169280,168984],{"class":2123},[77,169282,169283],{"class":87}," x: x ",[77,169285,3068],{"class":2123},[77,169287,17227],{"class":94},[77,169289,169290],{"class":87},", nums)\n",[77,169292,169293,169295,169297,169299],{"class":79,"line":107},[77,169294,32883],{"class":94},[77,169296,2622],{"class":87},[77,169298,156168],{"class":94},[77,169300,168166],{"class":87},[19,169302,169304],{"id":169303},"_7102-filter","7.10.2 filter",[24,169306,169307,169309],{},[74,169308,82488],{}," 保留满足条件的元素。",[67,169311,169313],{"className":32846,"code":169312,"language":32848,"meta":72,"style":72},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[74,169314,169315,169343,169368],{"__ignoreMap":72},[77,169316,169317,169319,169321,169323,169325,169327,169329,169331,169333,169335,169337,169339,169341],{"class":79,"line":80},[77,169318,166198],{"class":87},[77,169320,268],{"class":2123},[77,169322,54684],{"class":87},[77,169324,2120],{"class":94},[77,169326,680],{"class":87},[77,169328,2696],{"class":94},[77,169330,680],{"class":87},[77,169332,2690],{"class":94},[77,169334,680],{"class":87},[77,169336,2907],{"class":94},[77,169338,680],{"class":87},[77,169340,2933],{"class":94},[77,169342,35713],{"class":87},[77,169344,169345,169347,169349,169352,169354,169356,169358,169360,169362,169364,169366],{"class":79,"line":91},[77,169346,163404],{"class":87},[77,169348,268],{"class":2123},[77,169350,169351],{"class":94}," filter",[77,169353,2622],{"class":87},[77,169355,168984],{"class":2123},[77,169357,169283],{"class":87},[77,169359,2942],{"class":2123},[77,169361,17227],{"class":94},[77,169363,103994],{"class":2123},[77,169365,6568],{"class":94},[77,169367,169290],{"class":87},[77,169369,169370,169372,169374,169376],{"class":79,"line":107},[77,169371,32883],{"class":94},[77,169373,2622],{"class":87},[77,169375,156168],{"class":94},[77,169377,168166],{"class":87},[19,169379,169381],{"id":169380},"_7103-sorted","7.10.3 sorted",[24,169383,169384,169386],{},[74,169385,167334],{}," 返回排序后的新列表。",[67,169388,169390],{"className":32846,"code":169389,"language":32848,"meta":72,"style":72},"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",[74,169391,169392,169400,169420,169440,169460,169464,169468,169497],{"__ignoreMap":72},[77,169393,169394,169396,169398],{"class":79,"line":80},[77,169395,161814],{"class":87},[77,169397,268],{"class":2123},[77,169399,57895],{"class":87},[77,169401,169402,169404,169406,169408,169410,169412,169414,169416,169418],{"class":79,"line":91},[77,169403,150483],{"class":87},[77,169405,65123],{"class":271},[77,169407,98],{"class":87},[77,169409,151986],{"class":271},[77,169411,680],{"class":87},[77,169413,153570],{"class":271},[77,169415,98],{"class":87},[77,169417,3601],{"class":94},[77,169419,7405],{"class":87},[77,169421,169422,169424,169426,169428,169430,169432,169434,169436,169438],{"class":79,"line":107},[77,169423,150483],{"class":87},[77,169425,65123],{"class":271},[77,169427,98],{"class":87},[77,169429,153034],{"class":271},[77,169431,680],{"class":87},[77,169433,153570],{"class":271},[77,169435,98],{"class":87},[77,169437,3424],{"class":94},[77,169439,7405],{"class":87},[77,169441,169442,169444,169446,169448,169450,169452,169454,169456,169458],{"class":79,"line":191},[77,169443,150483],{"class":87},[77,169445,65123],{"class":271},[77,169447,98],{"class":87},[77,169449,161829],{"class":271},[77,169451,680],{"class":87},[77,169453,153570],{"class":271},[77,169455,98],{"class":87},[77,169457,3020],{"class":94},[77,169459,7405],{"class":87},[77,169461,169462],{"class":79,"line":1543},[77,169463,35713],{"class":87},[77,169465,169466],{"class":79,"line":1549},[77,169467,4875],{"emptyLinePlaceholder":2549},[77,169469,169470,169472,169474,169476,169479,169481,169483,169485,169487,169489,169491,169493,169495],{"class":79,"line":1566},[77,169471,163404],{"class":87},[77,169473,268],{"class":2123},[77,169475,165702],{"class":94},[77,169477,169478],{"class":87},"(students, ",[77,169480,156044],{"class":7691},[77,169482,156047],{"class":2123},[77,169484,156050],{"class":87},[77,169486,153570],{"class":271},[77,169488,114635],{"class":87},[77,169490,165626],{"class":7691},[77,169492,268],{"class":2123},[77,169494,33943],{"class":94},[77,169496,2628],{"class":87},[77,169498,169499,169501],{"class":79,"line":1572},[77,169500,32883],{"class":94},[77,169502,79023],{"class":87},[14,169504,169506],{"id":169505},"_711-闭包入门","7.11 闭包入门",[24,169508,169509],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[67,169511,169513],{"className":32846,"code":169512,"language":32848,"meta":72,"style":72},"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",[74,169514,169515,169525,169535,169546,169550,169557,169561,169565,169579],{"__ignoreMap":72},[77,169516,169517,169519,169522],{"class":79,"line":80},[77,169518,34414],{"class":2123},[77,169520,169521],{"class":83}," outer",[77,169523,169524],{"class":87},"(base):\n",[77,169526,169527,169529,169532],{"class":79,"line":91},[77,169528,33269],{"class":2123},[77,169530,169531],{"class":83}," inner",[77,169533,169534],{"class":87},"(num):\n",[77,169536,169537,169539,169542,169544],{"class":79,"line":107},[77,169538,17224],{"class":2123},[77,169540,169541],{"class":87}," base ",[77,169543,3094],{"class":2123},[77,169545,168677],{"class":87},[77,169547,169548],{"class":79,"line":191},[77,169549,4875],{"emptyLinePlaceholder":2549},[77,169551,169552,169554],{"class":79,"line":1543},[77,169553,6565],{"class":2123},[77,169555,169556],{"class":87}," inner\n",[77,169558,169559],{"class":79,"line":1549},[77,169560,4875],{"emptyLinePlaceholder":2549},[77,169562,169563],{"class":79,"line":1566},[77,169564,4875],{"emptyLinePlaceholder":2549},[77,169566,169567,169570,169572,169575,169577],{"class":79,"line":1572},[77,169568,169569],{"class":87},"add_10 ",[77,169571,268],{"class":2123},[77,169573,169574],{"class":87}," outer(",[77,169576,3059],{"class":94},[77,169578,2628],{"class":87},[77,169580,169581,169583,169586,169588],{"class":79,"line":1589},[77,169582,32883],{"class":94},[77,169584,169585],{"class":87},"(add_10(",[77,169587,2933],{"class":94},[77,169589,32965],{"class":87},[24,169591,169592],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169594,169596],{"id":169595},"_712-装饰器入门","7.12 装饰器入门",[24,169598,169599],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[67,169601,169603],{"className":32846,"code":169602,"language":32848,"meta":72,"style":72},"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",[74,169604,169605,169614,169623,169634,169639,169650,169654,169661,169665,169669,169674,169682,169692,169696,169700],{"__ignoreMap":72},[77,169606,169607,169609,169611],{"class":79,"line":80},[77,169608,34414],{"class":2123},[77,169610,89627],{"class":83},[77,169612,169613],{"class":87},"(func):\n",[77,169615,169616,169618,169621],{"class":79,"line":91},[77,169617,33269],{"class":2123},[77,169619,169620],{"class":83}," wrapper",[77,169622,34420],{"class":87},[77,169624,169625,169627,169629,169632],{"class":79,"line":107},[77,169626,34918],{"class":94},[77,169628,2622],{"class":87},[77,169630,169631],{"class":271},"\"函数开始执行\"",[77,169633,2628],{"class":87},[77,169635,169636],{"class":79,"line":191},[77,169637,169638],{"class":87},"        func()\n",[77,169640,169641,169643,169645,169648],{"class":79,"line":1543},[77,169642,34918],{"class":94},[77,169644,2622],{"class":87},[77,169646,169647],{"class":271},"\"函数执行结束\"",[77,169649,2628],{"class":87},[77,169651,169652],{"class":79,"line":1549},[77,169653,4875],{"emptyLinePlaceholder":2549},[77,169655,169656,169658],{"class":79,"line":1566},[77,169657,6565],{"class":2123},[77,169659,169660],{"class":87}," wrapper\n",[77,169662,169663],{"class":79,"line":1572},[77,169664,4875],{"emptyLinePlaceholder":2549},[77,169666,169667],{"class":79,"line":1589},[77,169668,4875],{"emptyLinePlaceholder":2549},[77,169670,169671],{"class":79,"line":1595},[77,169672,169673],{"class":83},"@log\n",[77,169675,169676,169678,169680],{"class":79,"line":4088},[77,169677,34414],{"class":2123},[77,169679,163094],{"class":83},[77,169681,34420],{"class":87},[77,169683,169684,169686,169688,169690],{"class":79,"line":4093},[77,169685,33766],{"class":94},[77,169687,2622],{"class":87},[77,169689,8319],{"class":271},[77,169691,2628],{"class":87},[77,169693,169694],{"class":79,"line":4099},[77,169695,4875],{"emptyLinePlaceholder":2549},[77,169697,169698],{"class":79,"line":4104},[77,169699,4875],{"emptyLinePlaceholder":2549},[77,169701,169702],{"class":79,"line":4118},[77,169703,163129],{"class":87},[24,169705,160372],{},[67,169707,169709],{"className":32846,"code":169708,"language":32848,"meta":72,"style":72},"say_hello = log(say_hello)\n",[74,169710,169711],{"__ignoreMap":72},[77,169712,169713,169716,169718],{"class":79,"line":80},[77,169714,169715],{"class":87},"say_hello ",[77,169717,268],{"class":2123},[77,169719,169720],{"class":87}," log(say_hello)\n",[24,169722,169723],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169725,169727],{"id":169726},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[67,169729,169731],{"className":32846,"code":169730,"language":32848,"meta":72,"style":72},"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",[74,169732,169733,169741,169758,169768,169787,169797,169804,169808,169814,169818,169822,169826,169834,169844,169848,169852],{"__ignoreMap":72},[77,169734,169735,169737,169739],{"class":79,"line":80},[77,169736,34414],{"class":2123},[77,169738,89627],{"class":83},[77,169740,169613],{"class":87},[77,169742,169743,169745,169747,169749,169751,169754,169756],{"class":79,"line":91},[77,169744,33269],{"class":2123},[77,169746,169620],{"class":83},[77,169748,2622],{"class":87},[77,169750,3068],{"class":2123},[77,169752,169753],{"class":87},"args, ",[77,169755,13134],{"class":2123},[77,169757,168764],{"class":87},[77,169759,169760,169762,169764,169766],{"class":79,"line":107},[77,169761,34918],{"class":94},[77,169763,2622],{"class":87},[77,169765,169631],{"class":271},[77,169767,2628],{"class":87},[77,169769,169770,169773,169775,169778,169780,169782,169784],{"class":79,"line":191},[77,169771,169772],{"class":87},"        result ",[77,169774,268],{"class":2123},[77,169776,169777],{"class":87}," func(",[77,169779,3068],{"class":2123},[77,169781,169753],{"class":87},[77,169783,13134],{"class":2123},[77,169785,169786],{"class":87},"kwargs)\n",[77,169788,169789,169791,169793,169795],{"class":79,"line":1543},[77,169790,34918],{"class":94},[77,169792,2622],{"class":87},[77,169794,169647],{"class":271},[77,169796,2628],{"class":87},[77,169798,169799,169801],{"class":79,"line":1549},[77,169800,17224],{"class":2123},[77,169802,169803],{"class":87}," result\n",[77,169805,169806],{"class":79,"line":1566},[77,169807,4875],{"emptyLinePlaceholder":2549},[77,169809,169810,169812],{"class":79,"line":1572},[77,169811,6565],{"class":2123},[77,169813,169660],{"class":87},[77,169815,169816],{"class":79,"line":1589},[77,169817,4875],{"emptyLinePlaceholder":2549},[77,169819,169820],{"class":79,"line":1595},[77,169821,4875],{"emptyLinePlaceholder":2549},[77,169823,169824],{"class":79,"line":4088},[77,169825,169673],{"class":83},[77,169827,169828,169830,169832],{"class":79,"line":4093},[77,169829,34414],{"class":2123},[77,169831,7684],{"class":83},[77,169833,153191],{"class":87},[77,169835,169836,169838,169840,169842],{"class":79,"line":4099},[77,169837,6565],{"class":2123},[77,169839,13342],{"class":87},[77,169841,3094],{"class":2123},[77,169843,153202],{"class":87},[77,169845,169846],{"class":79,"line":4104},[77,169847,4875],{"emptyLinePlaceholder":2549},[77,169849,169850],{"class":79,"line":4118},[77,169851,4875],{"emptyLinePlaceholder":2549},[77,169853,169854,169856,169858,169860,169862,169864],{"class":79,"line":4123},[77,169855,32883],{"class":94},[77,169857,168698],{"class":87},[77,169859,3059],{"class":94},[77,169861,680],{"class":87},[77,169863,3313],{"class":94},[77,169865,32965],{"class":87},[24,169867,169868,169869,513,169871,169873],{},"这个写法使用 ",[74,169870,168630],{},[74,169872,168745],{}," 接收原函数的所有参数。",[14,169875,169877],{"id":169876},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[24,169879,125724],{},[139,169881,169882,169885,169888],{},[54,169883,169884],{},"给定一组学生数据。",[54,169886,169887],{},"封装函数，根据传入规则筛选学生。",[54,169889,169890],{},"筛选及格、优秀、未成年学生。",[24,169892,12508],{},[67,169894,169896],{"className":32846,"code":169895,"language":32848,"meta":72,"style":72},"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",[74,169897,169898,169906,169934,169962,169990,169994,169998,170002,170012,170020,170030,170037,170042,170048,170052,170056,170080,170103,170126,170130,170137,170144],{"__ignoreMap":72},[77,169899,169900,169902,169904],{"class":79,"line":80},[77,169901,161814],{"class":87},[77,169903,268],{"class":2123},[77,169905,57895],{"class":87},[77,169907,169908,169910,169912,169914,169916,169918,169920,169922,169924,169926,169928,169930,169932],{"class":79,"line":91},[77,169909,150483],{"class":87},[77,169911,65123],{"class":271},[77,169913,98],{"class":87},[77,169915,151986],{"class":271},[77,169917,680],{"class":87},[77,169919,71567],{"class":271},[77,169921,98],{"class":87},[77,169923,3263],{"class":94},[77,169925,680],{"class":87},[77,169927,153570],{"class":271},[77,169929,98],{"class":87},[77,169931,3601],{"class":94},[77,169933,7405],{"class":87},[77,169935,169936,169938,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960],{"class":79,"line":107},[77,169937,150483],{"class":87},[77,169939,65123],{"class":271},[77,169941,98],{"class":87},[77,169943,153034],{"class":271},[77,169945,680],{"class":87},[77,169947,71567],{"class":271},[77,169949,98],{"class":87},[77,169951,3238],{"class":94},[77,169953,680],{"class":87},[77,169955,153570],{"class":271},[77,169957,98],{"class":87},[77,169959,3424],{"class":94},[77,169961,7405],{"class":87},[77,169963,169964,169966,169968,169970,169972,169974,169976,169978,169980,169982,169984,169986,169988],{"class":79,"line":191},[77,169965,150483],{"class":87},[77,169967,65123],{"class":271},[77,169969,98],{"class":87},[77,169971,161829],{"class":271},[77,169973,680],{"class":87},[77,169975,71567],{"class":271},[77,169977,98],{"class":87},[77,169979,3288],{"class":94},[77,169981,680],{"class":87},[77,169983,153570],{"class":271},[77,169985,98],{"class":87},[77,169987,3495],{"class":94},[77,169989,7405],{"class":87},[77,169991,169992],{"class":79,"line":1543},[77,169993,35713],{"class":87},[77,169995,169996],{"class":79,"line":1549},[77,169997,4875],{"emptyLinePlaceholder":2549},[77,169999,170000],{"class":79,"line":1566},[77,170001,4875],{"emptyLinePlaceholder":2549},[77,170003,170004,170006,170009],{"class":79,"line":1572},[77,170005,34414],{"class":2123},[77,170007,170008],{"class":83}," filter_students",[77,170010,170011],{"class":87},"(students, condition):\n",[77,170013,170014,170016,170018],{"class":79,"line":1589},[77,170015,163321],{"class":87},[77,170017,268],{"class":2123},[77,170019,54296],{"class":87},[77,170021,170022,170024,170026,170028],{"class":79,"line":1595},[77,170023,5676],{"class":2123},[77,170025,154235],{"class":87},[77,170027,28511],{"class":2123},[77,170029,154240],{"class":87},[77,170031,170032,170034],{"class":79,"line":4088},[77,170033,4972],{"class":2123},[77,170035,170036],{"class":87}," condition(student):\n",[77,170038,170039],{"class":79,"line":4093},[77,170040,170041],{"class":87},"            result.append(student)\n",[77,170043,170044,170046],{"class":79,"line":4099},[77,170045,6565],{"class":2123},[77,170047,169803],{"class":87},[77,170049,170050],{"class":79,"line":4104},[77,170051,4875],{"emptyLinePlaceholder":2549},[77,170053,170054],{"class":79,"line":4118},[77,170055,4875],{"emptyLinePlaceholder":2549},[77,170057,170058,170060,170062,170065,170067,170070,170072,170074,170076,170078],{"class":79,"line":4123},[77,170059,167799],{"class":87},[77,170061,268],{"class":2123},[77,170063,170064],{"class":87}," filter_students(students, ",[77,170066,168984],{"class":2123},[77,170068,170069],{"class":87}," s: s[",[77,170071,153570],{"class":271},[77,170073,6918],{"class":87},[77,170075,4186],{"class":2123},[77,170077,159935],{"class":94},[77,170079,2628],{"class":87},[77,170081,170082,170085,170087,170089,170091,170093,170095,170097,170099,170101],{"class":79,"line":4129},[77,170083,170084],{"class":87},"excellent ",[77,170086,268],{"class":2123},[77,170088,170064],{"class":87},[77,170090,168984],{"class":2123},[77,170092,170069],{"class":87},[77,170094,153570],{"class":271},[77,170096,6918],{"class":87},[77,170098,4186],{"class":2123},[77,170100,159886],{"class":94},[77,170102,2628],{"class":87},[77,170104,170105,170108,170110,170112,170114,170116,170118,170120,170122,170124],{"class":79,"line":4150},[77,170106,170107],{"class":87},"under_age ",[77,170109,268],{"class":2123},[77,170111,170064],{"class":87},[77,170113,168984],{"class":2123},[77,170115,170069],{"class":87},[77,170117,71567],{"class":271},[77,170119,6918],{"class":87},[77,170121,260],{"class":2123},[77,170123,158383],{"class":94},[77,170125,2628],{"class":87},[77,170127,170128],{"class":79,"line":4155},[77,170129,4875],{"emptyLinePlaceholder":2549},[77,170131,170132,170134],{"class":79,"line":4169},[77,170133,32883],{"class":94},[77,170135,170136],{"class":87},"(passed)\n",[77,170138,170139,170141],{"class":79,"line":4174},[77,170140,32883],{"class":94},[77,170142,170143],{"class":87},"(excellent)\n",[77,170145,170146,170148],{"class":79,"line":4203},[77,170147,32883],{"class":94},[77,170149,170150],{"class":87},"(under_age)\n",[14,170152,170154],{"id":170153},"_715-易错点","7.15 易错点",[139,170156,170157,170160,170168,170173,170184],{},[54,170158,170159],{},"默认参数不要写可变对象。",[54,170161,170162,170164,170165,170167],{},[74,170163,168630],{}," 是元组，",[74,170166,168745],{}," 是字典。",[54,170169,170170,170172],{},[74,170171,168984],{}," 只适合简单表达式。",[54,170174,170175,513,170177,170179,170180,170183],{},[74,170176,76483],{},[74,170178,82488],{}," 的结果是迭代器，常用 ",[74,170181,170182],{},"list()"," 转换查看。",[54,170185,170186],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170188,170190],{"id":170189},"_716-本章练习","7.16 本章练习",[139,170192,170193,170200,170206,170211,170216],{},[54,170194,170195,170196,170199],{},"写函数 ",[74,170197,170198],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[54,170201,170195,170202,170205],{},[74,170203,170204],{},"print_user(**kwargs)","，输出用户所有字段。",[54,170207,106799,170208,170210],{},[74,170209,168984],{}," 对学生列表按年龄排序。",[54,170212,106799,170213,170215],{},[74,170214,82488],{}," 找出成绩不及格的学生。",[54,170217,170218],{},"写一个装饰器，统计函数执行前后的提示信息。",[2520,170220,170221],{},"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":72,"searchDepth":91,"depth":91,"links":170223},[170224,170225,170226,170227,170228,170229,170233,170234,170235,170236,170241,170242,170243,170244,170245,170246],{"id":168082,"depth":91,"text":168083},{"id":168196,"depth":91,"text":168197},{"id":168285,"depth":91,"text":168286},{"id":168347,"depth":91,"text":168348},{"id":168493,"depth":91,"text":168494},{"id":168620,"depth":91,"text":168621,"children":170230},[170231,170232],{"id":168624,"depth":107,"text":168625},{"id":168739,"depth":107,"text":168740},{"id":168820,"depth":91,"text":168821},{"id":168978,"depth":91,"text":168979},{"id":169146,"depth":91,"text":169147},{"id":169228,"depth":91,"text":169229,"children":170237},[170238,170239,170240],{"id":169232,"depth":107,"text":169233},{"id":169303,"depth":107,"text":169304},{"id":169380,"depth":107,"text":169381},{"id":169505,"depth":91,"text":169506},{"id":169595,"depth":91,"text":169596},{"id":169726,"depth":91,"text":169727},{"id":169876,"depth":91,"text":169877},{"id":170153,"depth":91,"text":170154},{"id":170189,"depth":91,"text":170190},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168074,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170253,"title":170254,"body":170255,"description":2546,"extension":2547,"meta":172774,"navigation":2549,"path":172775,"seo":172776,"stem":172777,"__hash__":172778},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170256,"toc":172749},[170257,170260,170264,170267,170270,170301,170305,170309,170312,170339,170343,170346,170397,170400,170415,170418,170453,170457,170459,170483,170486,170546,170550,170554,170557,170614,170617,170637,170641,170644,170707,170711,170714,170770,170777,170801,170805,170808,170871,170875,170880,170931,170934,170938,170943,171010,171013,171095,171099,171104,171155,171158,171162,171165,171168,171176,171179,171225,171228,171274,171278,171284,171328,171331,171377,171380,171420,171423,171484,171488,171491,171581,171584,171726,171729,171796,171800,171803,171806,171947,171950,172028,172031,172207,172211,172213,172224,172226,172425,172429,172673,172677,172711,172715,172746],[10,170258,170254],{"id":170259},"_8-文件操作",[14,170261,170263],{"id":170262},"_81-文件操作的意义","8.1 文件操作的意义",[24,170265,170266],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[24,170268,170269],{},"常见文件类型：",[139,170271,170272,170278,170284,170290,170296],{},[54,170273,170274,170277],{},[74,170275,170276],{},".txt","：普通文本。",[54,170279,170280,170283],{},[74,170281,170282],{},".csv","：表格文本。",[54,170285,170286,170289],{},[74,170287,170288],{},".json","：结构化数据。",[54,170291,170292,170295],{},[74,170293,170294],{},".log","：日志文件。",[54,170297,170298,170300],{},[74,170299,148450],{},"：Python 源代码。",[14,170302,170304],{"id":170303},"_82-路径","8.2 路径",[19,170306,170308],{"id":170307},"_821-相对路径","8.2.1 相对路径",[24,170310,170311],{},"相对当前运行目录：",[67,170313,170315],{"className":32846,"code":170314,"language":32848,"meta":72,"style":72},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[74,170316,170317],{"__ignoreMap":72},[77,170318,170319,170321,170323,170325,170327,170329,170331,170333,170335,170337],{"class":79,"line":80},[77,170320,89351],{"class":94},[77,170322,2622],{"class":87},[77,170324,148894],{"class":271},[77,170326,680],{"class":87},[77,170328,148899],{"class":271},[77,170330,680],{"class":87},[77,170332,148904],{"class":7691},[77,170334,268],{"class":2123},[77,170336,148909],{"class":271},[77,170338,2628],{"class":87},[19,170340,170342],{"id":170341},"_822-绝对路径","8.2.2 绝对路径",[24,170344,170345],{},"从根目录或盘符开始：",[67,170347,170349],{"className":32846,"code":170348,"language":32848,"meta":72,"style":72},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[74,170350,170351,170374],{"__ignoreMap":72},[77,170352,170353,170355,170357,170360,170362,170364,170366,170368,170370,170372],{"class":79,"line":80},[77,170354,89351],{"class":94},[77,170356,2622],{"class":87},[77,170358,170359],{"class":271},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[77,170361,680],{"class":87},[77,170363,148899],{"class":271},[77,170365,680],{"class":87},[77,170367,148904],{"class":7691},[77,170369,268],{"class":2123},[77,170371,148909],{"class":271},[77,170373,2628],{"class":87},[77,170375,170376,170378,170380,170383,170385,170387,170389,170391,170393,170395],{"class":79,"line":91},[77,170377,89351],{"class":94},[77,170379,2622],{"class":87},[77,170381,170382],{"class":271},"\"D:\u002Fdata\u002Fdata.txt\"",[77,170384,680],{"class":87},[77,170386,148899],{"class":271},[77,170388,680],{"class":87},[77,170390,148904],{"class":7691},[77,170392,268],{"class":2123},[77,170394,148909],{"class":271},[77,170396,2628],{"class":87},[24,170398,170399],{},"Windows 路径建议写成：",[67,170401,170403],{"className":32846,"code":170402,"language":32848,"meta":72,"style":72},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[74,170404,170405],{"__ignoreMap":72},[77,170406,170407,170410,170412],{"class":79,"line":80},[77,170408,170409],{"class":87},"path ",[77,170411,268],{"class":2123},[77,170413,170414],{"class":271}," \"D:\u002Fdata\u002Fdata.txt\"\n",[24,170416,170417],{},"或原始字符串：",[67,170419,170421],{"className":32846,"code":170420,"language":32848,"meta":72,"style":72},"path = r\"D:\\data\\data.txt\"\n",[74,170422,170423],{"__ignoreMap":72},[77,170424,170425,170427,170429,170431,170433,170436,170439,170442,170444,170446,170448,170451],{"class":79,"line":80},[77,170426,170409],{"class":87},[77,170428,268],{"class":2123},[77,170430,19591],{"class":2123},[77,170432,2865],{"class":271},[77,170434,170435],{"class":50443},"D:",[77,170437,170438],{"class":94},"\\d",[77,170440,170441],{"class":50443},"ata",[77,170443,170438],{"class":94},[77,170445,170441],{"class":50443},[77,170447,3171],{"class":94},[77,170449,170450],{"class":50443},"txt",[77,170452,27601],{"class":271},[14,170454,170456],{"id":170455},"_83-open函数","8.3 open函数",[24,170458,7656],{},[67,170460,170462],{"className":32846,"code":170461,"language":32848,"meta":72,"style":72},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[74,170463,170464],{"__ignoreMap":72},[77,170465,170466,170468,170470,170472,170475,170477,170479,170481],{"class":79,"line":80},[77,170467,47820],{"class":7691},[77,170469,16036],{"class":2123},[77,170471,148889],{"class":94},[77,170473,170474],{"class":87},"(文件路径, 打开模式, ",[77,170476,148904],{"class":7691},[77,170478,268],{"class":2123},[77,170480,148909],{"class":271},[77,170482,2628],{"class":87},[24,170484,170485],{},"常见模式：",[2755,170487,170488,170497],{},[2758,170489,170490],{},[2761,170491,170492,170495],{},[2764,170493,170494],{},"模式",[2764,170496,28337],{},[2801,170498,170499,170508,170517,170526,170536],{},[2761,170500,170501,170505],{},[2806,170502,170503],{},[74,170504,3283],{},[2806,170506,170507],{},"只读，文件不存在会报错",[2761,170509,170510,170514],{},[2806,170511,170512],{},[74,170513,3408],{},[2806,170515,170516],{},"只写，文件不存在会创建，存在会清空",[2761,170518,170519,170523],{},[2806,170520,170521],{},[74,170522,417],{},[2806,170524,170525],{},"追加，文件不存在会创建",[2761,170527,170528,170533],{},[2806,170529,170530],{},[74,170531,170532],{},"rb",[2806,170534,170535],{},"二进制只读",[2761,170537,170538,170543],{},[2806,170539,170540],{},[74,170541,170542],{},"wb",[2806,170544,170545],{},"二进制只写",[14,170547,170549],{"id":170548},"_84-读取文件","8.4 读取文件",[19,170551,170553],{"id":170552},"_841-read","8.4.1 read",[24,170555,170556],{},"一次读取全部内容：",[67,170558,170560],{"className":32846,"code":170559,"language":32848,"meta":72,"style":72},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[74,170561,170562,170588,170600,170607],{"__ignoreMap":72},[77,170563,170564,170566,170568,170570,170572,170574,170576,170578,170580,170582,170584,170586],{"class":79,"line":80},[77,170565,47820],{"class":7691},[77,170567,16036],{"class":2123},[77,170569,148889],{"class":94},[77,170571,2622],{"class":87},[77,170573,148894],{"class":271},[77,170575,680],{"class":87},[77,170577,148899],{"class":271},[77,170579,680],{"class":87},[77,170581,148904],{"class":7691},[77,170583,268],{"class":2123},[77,170585,148909],{"class":271},[77,170587,2628],{"class":87},[77,170589,170590,170593,170595,170597],{"class":79,"line":91},[77,170591,170592],{"class":87},"content ",[77,170594,268],{"class":2123},[77,170596,150251],{"class":7691},[77,170598,170599],{"class":87},".read()\n",[77,170601,170602,170604],{"class":79,"line":107},[77,170603,32883],{"class":94},[77,170605,170606],{"class":87},"(content)\n",[77,170608,170609,170611],{"class":79,"line":191},[77,170610,47820],{"class":7691},[77,170612,170613],{"class":87},".close()\n",[24,170615,170616],{},"可以指定读取字符数：",[67,170618,170620],{"className":32846,"code":170619,"language":32848,"meta":72,"style":72},"content = file.read(10)\n",[74,170621,170622],{"__ignoreMap":72},[77,170623,170624,170626,170628,170630,170633,170635],{"class":79,"line":80},[77,170625,170592],{"class":87},[77,170627,268],{"class":2123},[77,170629,150251],{"class":7691},[77,170631,170632],{"class":87},".read(",[77,170634,3059],{"class":94},[77,170636,2628],{"class":87},[19,170638,170640],{"id":170639},"_842-readline","8.4.2 readline",[24,170642,170643],{},"一次读取一行：",[67,170645,170647],{"className":32846,"code":170646,"language":32848,"meta":72,"style":72},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[74,170648,170649,170675,170679,170690,170697,170701],{"__ignoreMap":72},[77,170650,170651,170653,170655,170657,170659,170661,170663,170665,170667,170669,170671,170673],{"class":79,"line":80},[77,170652,47820],{"class":7691},[77,170654,16036],{"class":2123},[77,170656,148889],{"class":94},[77,170658,2622],{"class":87},[77,170660,148894],{"class":271},[77,170662,680],{"class":87},[77,170664,148899],{"class":271},[77,170666,680],{"class":87},[77,170668,148904],{"class":7691},[77,170670,268],{"class":2123},[77,170672,148909],{"class":271},[77,170674,2628],{"class":87},[77,170676,170677],{"class":79,"line":91},[77,170678,4875],{"emptyLinePlaceholder":2549},[77,170680,170681,170683,170685,170687],{"class":79,"line":107},[77,170682,149350],{"class":87},[77,170684,268],{"class":2123},[77,170686,150251],{"class":7691},[77,170688,170689],{"class":87},".readline()\n",[77,170691,170692,170694],{"class":79,"line":191},[77,170693,32883],{"class":94},[77,170695,170696],{"class":87},"(line)\n",[77,170698,170699],{"class":79,"line":1543},[77,170700,4875],{"emptyLinePlaceholder":2549},[77,170702,170703,170705],{"class":79,"line":1549},[77,170704,47820],{"class":7691},[77,170706,170613],{"class":87},[19,170708,170710],{"id":170709},"_843-readlines","8.4.3 readlines",[24,170712,170713],{},"读取所有行，返回列表：",[67,170715,170717],{"className":32846,"code":170716,"language":32848,"meta":72,"style":72},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[74,170718,170719,170745,170757,170764],{"__ignoreMap":72},[77,170720,170721,170723,170725,170727,170729,170731,170733,170735,170737,170739,170741,170743],{"class":79,"line":80},[77,170722,47820],{"class":7691},[77,170724,16036],{"class":2123},[77,170726,148889],{"class":94},[77,170728,2622],{"class":87},[77,170730,148894],{"class":271},[77,170732,680],{"class":87},[77,170734,148899],{"class":271},[77,170736,680],{"class":87},[77,170738,148904],{"class":7691},[77,170740,268],{"class":2123},[77,170742,148909],{"class":271},[77,170744,2628],{"class":87},[77,170746,170747,170750,170752,170754],{"class":79,"line":91},[77,170748,170749],{"class":87},"lines ",[77,170751,268],{"class":2123},[77,170753,150251],{"class":7691},[77,170755,170756],{"class":87},".readlines()\n",[77,170758,170759,170761],{"class":79,"line":107},[77,170760,32883],{"class":94},[77,170762,170763],{"class":87},"(lines)\n",[77,170765,170766,170768],{"class":79,"line":191},[77,170767,47820],{"class":7691},[77,170769,170613],{"class":87},[24,170771,170772,170773,170776],{},"每一行通常带有换行符，可以用 ",[74,170774,170775],{},"strip()"," 去掉：",[67,170778,170780],{"className":32846,"code":170779,"language":32848,"meta":72,"style":72},"for line in lines:\n    print(line.strip())\n",[74,170781,170782,170794],{"__ignoreMap":72},[77,170783,170784,170786,170789,170791],{"class":79,"line":80},[77,170785,5500],{"class":2123},[77,170787,170788],{"class":87}," line ",[77,170790,28511],{"class":2123},[77,170792,170793],{"class":87}," lines:\n",[77,170795,170796,170798],{"class":79,"line":91},[77,170797,33766],{"class":94},[77,170799,170800],{"class":87},"(line.strip())\n",[19,170802,170804],{"id":170803},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[24,170806,170807],{},"推荐读取大文件时使用：",[67,170809,170811],{"className":32846,"code":170810,"language":32848,"meta":72,"style":72},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[74,170812,170813,170839,170843,170855,170861,170865],{"__ignoreMap":72},[77,170814,170815,170817,170819,170821,170823,170825,170827,170829,170831,170833,170835,170837],{"class":79,"line":80},[77,170816,47820],{"class":7691},[77,170818,16036],{"class":2123},[77,170820,148889],{"class":94},[77,170822,2622],{"class":87},[77,170824,148894],{"class":271},[77,170826,680],{"class":87},[77,170828,148899],{"class":271},[77,170830,680],{"class":87},[77,170832,148904],{"class":7691},[77,170834,268],{"class":2123},[77,170836,148909],{"class":271},[77,170838,2628],{"class":87},[77,170840,170841],{"class":79,"line":91},[77,170842,4875],{"emptyLinePlaceholder":2549},[77,170844,170845,170847,170849,170851,170853],{"class":79,"line":107},[77,170846,5500],{"class":2123},[77,170848,170788],{"class":87},[77,170850,28511],{"class":2123},[77,170852,150251],{"class":7691},[77,170854,6214],{"class":87},[77,170856,170857,170859],{"class":79,"line":191},[77,170858,33766],{"class":94},[77,170860,170800],{"class":87},[77,170862,170863],{"class":79,"line":1543},[77,170864,4875],{"emptyLinePlaceholder":2549},[77,170866,170867,170869],{"class":79,"line":1549},[77,170868,47820],{"class":7691},[77,170870,170613],{"class":87},[14,170872,170874],{"id":170873},"_85-with语句","8.5 with语句",[24,170876,170877,170879],{},[74,170878,110266],{}," 会自动关闭文件，推荐使用。",[67,170881,170883],{"className":32846,"code":170882,"language":32848,"meta":72,"style":72},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[74,170884,170885,170915,170925],{"__ignoreMap":72},[77,170886,170887,170889,170891,170893,170895,170897,170899,170901,170903,170905,170907,170909,170911,170913],{"class":79,"line":80},[77,170888,110266],{"class":2123},[77,170890,148889],{"class":94},[77,170892,2622],{"class":87},[77,170894,148894],{"class":271},[77,170896,680],{"class":87},[77,170898,148899],{"class":271},[77,170900,680],{"class":87},[77,170902,148904],{"class":7691},[77,170904,268],{"class":2123},[77,170906,148909],{"class":271},[77,170908,16186],{"class":87},[77,170910,33850],{"class":2123},[77,170912,150251],{"class":7691},[77,170914,6214],{"class":87},[77,170916,170917,170919,170921,170923],{"class":79,"line":91},[77,170918,148921],{"class":87},[77,170920,268],{"class":2123},[77,170922,150251],{"class":7691},[77,170924,170599],{"class":87},[77,170926,170927,170929],{"class":79,"line":107},[77,170928,33766],{"class":94},[77,170930,170606],{"class":87},[24,170932,170933],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170935,170937],{"id":170936},"_86-写入文件","8.6 写入文件",[24,170939,170940,170942],{},[74,170941,3408],{}," 模式会清空原文件。",[67,170944,170946],{"className":32846,"code":170945,"language":32848,"meta":72,"style":72},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[74,170947,170948,170978,170995],{"__ignoreMap":72},[77,170949,170950,170952,170954,170956,170958,170960,170962,170964,170966,170968,170970,170972,170974,170976],{"class":79,"line":80},[77,170951,110266],{"class":2123},[77,170953,148889],{"class":94},[77,170955,2622],{"class":87},[77,170957,148894],{"class":271},[77,170959,680],{"class":87},[77,170961,154074],{"class":271},[77,170963,680],{"class":87},[77,170965,148904],{"class":7691},[77,170967,268],{"class":2123},[77,170969,148909],{"class":271},[77,170971,16186],{"class":87},[77,170973,33850],{"class":2123},[77,170975,150251],{"class":7691},[77,170977,6214],{"class":87},[77,170979,170980,170983,170986,170989,170991,170993],{"class":79,"line":91},[77,170981,170982],{"class":7691},"    file",[77,170984,170985],{"class":87},".write(",[77,170987,170988],{"class":271},"\"hello",[77,170990,158623],{"class":94},[77,170992,2865],{"class":271},[77,170994,2628],{"class":87},[77,170996,170997,170999,171001,171004,171006,171008],{"class":79,"line":107},[77,170998,170982],{"class":7691},[77,171000,170985],{"class":87},[77,171002,171003],{"class":271},"\"python",[77,171005,158623],{"class":94},[77,171007,2865],{"class":271},[77,171009,2628],{"class":87},[24,171011,171012],{},"写入多行：",[67,171014,171016],{"className":32846,"code":171015,"language":32848,"meta":72,"style":72},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[74,171017,171018,171053,171057,171088],{"__ignoreMap":72},[77,171019,171020,171022,171024,171026,171029,171031,171033,171035,171038,171040,171042,171044,171047,171049,171051],{"class":79,"line":80},[77,171021,170749],{"class":87},[77,171023,268],{"class":2123},[77,171025,54684],{"class":87},[77,171027,171028],{"class":271},"\"小明,18",[77,171030,158623],{"class":94},[77,171032,2865],{"class":271},[77,171034,680],{"class":87},[77,171036,171037],{"class":271},"\"小红,17",[77,171039,158623],{"class":94},[77,171041,2865],{"class":271},[77,171043,680],{"class":87},[77,171045,171046],{"class":271},"\"小刚,19",[77,171048,158623],{"class":94},[77,171050,2865],{"class":271},[77,171052,35713],{"class":87},[77,171054,171055],{"class":79,"line":91},[77,171056,4875],{"emptyLinePlaceholder":2549},[77,171058,171059,171061,171063,171065,171068,171070,171072,171074,171076,171078,171080,171082,171084,171086],{"class":79,"line":107},[77,171060,110266],{"class":2123},[77,171062,148889],{"class":94},[77,171064,2622],{"class":87},[77,171066,171067],{"class":271},"\"students.txt\"",[77,171069,680],{"class":87},[77,171071,154074],{"class":271},[77,171073,680],{"class":87},[77,171075,148904],{"class":7691},[77,171077,268],{"class":2123},[77,171079,148909],{"class":271},[77,171081,16186],{"class":87},[77,171083,33850],{"class":2123},[77,171085,150251],{"class":7691},[77,171087,6214],{"class":87},[77,171089,171090,171092],{"class":79,"line":191},[77,171091,170982],{"class":7691},[77,171093,171094],{"class":87},".writelines(lines)\n",[14,171096,171098],{"id":171097},"_87-追加文件","8.7 追加文件",[24,171100,171101,171103],{},[74,171102,417],{}," 模式不会清空原内容，而是在末尾追加。",[67,171105,171107],{"className":32846,"code":171106,"language":32848,"meta":72,"style":72},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[74,171108,171109,171140],{"__ignoreMap":72},[77,171110,171111,171113,171115,171117,171120,171122,171124,171126,171128,171130,171132,171134,171136,171138],{"class":79,"line":80},[77,171112,110266],{"class":2123},[77,171114,148889],{"class":94},[77,171116,2622],{"class":87},[77,171118,171119],{"class":271},"\"log.txt\"",[77,171121,680],{"class":87},[77,171123,167423],{"class":271},[77,171125,680],{"class":87},[77,171127,148904],{"class":7691},[77,171129,268],{"class":2123},[77,171131,148909],{"class":271},[77,171133,16186],{"class":87},[77,171135,33850],{"class":2123},[77,171137,150251],{"class":7691},[77,171139,6214],{"class":87},[77,171141,171142,171144,171146,171149,171151,171153],{"class":79,"line":91},[77,171143,170982],{"class":7691},[77,171145,170985],{"class":87},[77,171147,171148],{"class":271},"\"程序启动",[77,171150,158623],{"class":94},[77,171152,2865],{"class":271},[77,171154,2628],{"class":87},[24,171156,171157],{},"日志类文件常用追加模式。",[14,171159,171161],{"id":171160},"_88-文件编码","8.8 文件编码",[24,171163,171164],{},"编码决定文字如何保存为字节。",[24,171166,171167],{},"常见编码：",[139,171169,171170,171173],{},[54,171171,171172],{},"UTF-8：推荐。",[54,171174,171175],{},"GBK：部分 Windows 中文文件常见。",[24,171177,171178],{},"读取文件乱码时，可以尝试：",[67,171180,171182],{"className":32846,"code":171181,"language":32848,"meta":72,"style":72},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[74,171183,171184,171215],{"__ignoreMap":72},[77,171185,171186,171188,171190,171192,171194,171196,171198,171200,171202,171204,171207,171209,171211,171213],{"class":79,"line":80},[77,171187,110266],{"class":2123},[77,171189,148889],{"class":94},[77,171191,2622],{"class":87},[77,171193,148894],{"class":271},[77,171195,680],{"class":87},[77,171197,148899],{"class":271},[77,171199,680],{"class":87},[77,171201,148904],{"class":7691},[77,171203,268],{"class":2123},[77,171205,171206],{"class":271},"\"gbk\"",[77,171208,16186],{"class":87},[77,171210,33850],{"class":2123},[77,171212,150251],{"class":7691},[77,171214,6214],{"class":87},[77,171216,171217,171219,171221,171223],{"class":79,"line":91},[77,171218,148921],{"class":87},[77,171220,268],{"class":2123},[77,171222,150251],{"class":7691},[77,171224,170599],{"class":87},[24,171226,171227],{},"写文件时建议统一 UTF-8：",[67,171229,171231],{"className":32846,"code":171230,"language":32848,"meta":72,"style":72},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[74,171232,171233,171263],{"__ignoreMap":72},[77,171234,171235,171237,171239,171241,171243,171245,171247,171249,171251,171253,171255,171257,171259,171261],{"class":79,"line":80},[77,171236,110266],{"class":2123},[77,171238,148889],{"class":94},[77,171240,2622],{"class":87},[77,171242,148894],{"class":271},[77,171244,680],{"class":87},[77,171246,154074],{"class":271},[77,171248,680],{"class":87},[77,171250,148904],{"class":7691},[77,171252,268],{"class":2123},[77,171254,148909],{"class":271},[77,171256,16186],{"class":87},[77,171258,33850],{"class":2123},[77,171260,150251],{"class":7691},[77,171262,6214],{"class":87},[77,171264,171265,171267,171269,171272],{"class":79,"line":91},[77,171266,170982],{"class":7691},[77,171268,170985],{"class":87},[77,171270,171271],{"class":271},"\"中文内容\"",[77,171273,2628],{"class":87},[14,171275,171277],{"id":171276},"_89-pathlib","8.9 pathlib",[24,171279,171280,171283],{},[74,171281,171282],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[67,171285,171287],{"className":32846,"code":171286,"language":32848,"meta":72,"style":72},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[74,171288,171289,171299,171303,171321],{"__ignoreMap":72},[77,171290,171291,171293,171295,171297],{"class":79,"line":80},[77,171292,33205],{"class":2123},[77,171294,110744],{"class":87},[77,171296,32860],{"class":2123},[77,171298,110749],{"class":87},[77,171300,171301],{"class":79,"line":91},[77,171302,4875],{"emptyLinePlaceholder":2549},[77,171304,171305,171307,171309,171311,171314,171316,171318],{"class":79,"line":107},[77,171306,170409],{"class":87},[77,171308,268],{"class":2123},[77,171310,110978],{"class":87},[77,171312,171313],{"class":271},"\"data\"",[77,171315,16186],{"class":87},[77,171317,3197],{"class":2123},[77,171319,171320],{"class":271}," \"students.txt\"\n",[77,171322,171323,171325],{"class":79,"line":191},[77,171324,32883],{"class":94},[77,171326,171327],{"class":87},"(path)\n",[24,171329,171330],{},"创建目录：",[67,171332,171334],{"className":32846,"code":171333,"language":32848,"meta":72,"style":72},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[74,171335,171336,171346,171350,171363],{"__ignoreMap":72},[77,171337,171338,171340,171342,171344],{"class":79,"line":80},[77,171339,33205],{"class":2123},[77,171341,110744],{"class":87},[77,171343,32860],{"class":2123},[77,171345,110749],{"class":87},[77,171347,171348],{"class":79,"line":91},[77,171349,4875],{"emptyLinePlaceholder":2549},[77,171351,171352,171355,171357,171359,171361],{"class":79,"line":107},[77,171353,171354],{"class":87},"data_dir ",[77,171356,268],{"class":2123},[77,171358,110978],{"class":87},[77,171360,171313],{"class":271},[77,171362,2628],{"class":87},[77,171364,171365,171368,171371,171373,171375],{"class":79,"line":191},[77,171366,171367],{"class":87},"data_dir.mkdir(",[77,171369,171370],{"class":7691},"exist_ok",[77,171372,268],{"class":2123},[77,171374,33943],{"class":94},[77,171376,2628],{"class":87},[24,171378,171379],{},"判断文件是否存在：",[67,171381,171383],{"className":32846,"code":171382,"language":32848,"meta":72,"style":72},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[74,171384,171385,171398,171402,171409],{"__ignoreMap":72},[77,171386,171387,171389,171391,171393,171396],{"class":79,"line":80},[77,171388,170409],{"class":87},[77,171390,268],{"class":2123},[77,171392,110978],{"class":87},[77,171394,171395],{"class":271},"\"data\u002Fstudents.txt\"",[77,171397,2628],{"class":87},[77,171399,171400],{"class":79,"line":91},[77,171401,4875],{"emptyLinePlaceholder":2549},[77,171403,171404,171406],{"class":79,"line":107},[77,171405,4008],{"class":2123},[77,171407,171408],{"class":87}," path.exists():\n",[77,171410,171411,171413,171415,171418],{"class":79,"line":191},[77,171412,33766],{"class":94},[77,171414,2622],{"class":87},[77,171416,171417],{"class":271},"\"文件存在\"",[77,171419,2628],{"class":87},[24,171421,171422],{},"读写文本：",[67,171424,171426],{"className":32846,"code":171425,"language":32848,"meta":72,"style":72},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[74,171427,171428,171440,171444,171461,171478],{"__ignoreMap":72},[77,171429,171430,171432,171434,171436,171438],{"class":79,"line":80},[77,171431,170409],{"class":87},[77,171433,268],{"class":2123},[77,171435,110978],{"class":87},[77,171437,148894],{"class":271},[77,171439,2628],{"class":87},[77,171441,171442],{"class":79,"line":91},[77,171443,4875],{"emptyLinePlaceholder":2549},[77,171445,171446,171449,171451,171453,171455,171457,171459],{"class":79,"line":107},[77,171447,171448],{"class":87},"path.write_text(",[77,171450,147974],{"class":271},[77,171452,680],{"class":87},[77,171454,148904],{"class":7691},[77,171456,268],{"class":2123},[77,171458,148909],{"class":271},[77,171460,2628],{"class":87},[77,171462,171463,171465,171467,171470,171472,171474,171476],{"class":79,"line":191},[77,171464,170592],{"class":87},[77,171466,268],{"class":2123},[77,171468,171469],{"class":87}," path.read_text(",[77,171471,148904],{"class":7691},[77,171473,268],{"class":2123},[77,171475,148909],{"class":271},[77,171477,2628],{"class":87},[77,171479,171480,171482],{"class":79,"line":1543},[77,171481,32883],{"class":94},[77,171483,170606],{"class":87},[14,171485,171487],{"id":171486},"_810-json文件","8.10 JSON文件",[24,171489,171490],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[67,171492,171494],{"className":32846,"code":171493,"language":32848,"meta":72,"style":72},"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",[74,171495,171496,171502,171506,171514,171524,171534,171542,171546,171550,171575],{"__ignoreMap":72},[77,171497,171498,171500],{"class":79,"line":80},[77,171499,32860],{"class":2123},[77,171501,149189],{"class":87},[77,171503,171504],{"class":79,"line":91},[77,171505,4875],{"emptyLinePlaceholder":2549},[77,171507,171508,171510,171512],{"class":79,"line":107},[77,171509,151579],{"class":87},[77,171511,268],{"class":2123},[77,171513,88],{"class":87},[77,171515,171516,171518,171520,171522],{"class":79,"line":191},[77,171517,149118],{"class":271},[77,171519,98],{"class":87},[77,171521,151986],{"class":271},[77,171523,33933],{"class":87},[77,171525,171526,171528,171530,171532],{"class":79,"line":1543},[77,171527,166635],{"class":271},[77,171529,98],{"class":87},[77,171531,3263],{"class":94},[77,171533,33933],{"class":87},[77,171535,171536,171538,171540],{"class":79,"line":1549},[77,171537,166646],{"class":271},[77,171539,98],{"class":87},[77,171541,166651],{"class":94},[77,171543,171544],{"class":79,"line":1566},[77,171545,110],{"class":87},[77,171547,171548],{"class":79,"line":1572},[77,171549,4875],{"emptyLinePlaceholder":2549},[77,171551,171552,171554,171556,171559,171561,171563,171565,171567,171569,171571,171573],{"class":79,"line":1589},[77,171553,158542],{"class":87},[77,171555,268],{"class":2123},[77,171557,171558],{"class":87}," json.dumps(student, ",[77,171560,149235],{"class":7691},[77,171562,268],{"class":2123},[77,171564,36453],{"class":94},[77,171566,680],{"class":87},[77,171568,154110],{"class":7691},[77,171570,268],{"class":2123},[77,171572,2696],{"class":94},[77,171574,2628],{"class":87},[77,171576,171577,171579],{"class":79,"line":1595},[77,171578,32883],{"class":94},[77,171580,166169],{"class":87},[24,171582,171583],{},"写入 JSON 文件：",[67,171585,171587],{"className":32846,"code":171586,"language":32848,"meta":72,"style":72},"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",[74,171588,171589,171595,171599,171607,171635,171663,171667,171671,171701],{"__ignoreMap":72},[77,171590,171591,171593],{"class":79,"line":80},[77,171592,32860],{"class":2123},[77,171594,149189],{"class":87},[77,171596,171597],{"class":79,"line":91},[77,171598,4875],{"emptyLinePlaceholder":2549},[77,171600,171601,171603,171605],{"class":79,"line":107},[77,171602,161814],{"class":87},[77,171604,268],{"class":2123},[77,171606,57895],{"class":87},[77,171608,171609,171611,171613,171615,171617,171619,171621,171623,171625,171627,171629,171631,171633],{"class":79,"line":191},[77,171610,150483],{"class":87},[77,171612,65123],{"class":271},[77,171614,98],{"class":87},[77,171616,151986],{"class":271},[77,171618,680],{"class":87},[77,171620,71567],{"class":271},[77,171622,98],{"class":87},[77,171624,3263],{"class":94},[77,171626,680],{"class":87},[77,171628,153570],{"class":271},[77,171630,98],{"class":87},[77,171632,3601],{"class":94},[77,171634,7405],{"class":87},[77,171636,171637,171639,171641,171643,171645,171647,171649,171651,171653,171655,171657,171659,171661],{"class":79,"line":1543},[77,171638,150483],{"class":87},[77,171640,65123],{"class":271},[77,171642,98],{"class":87},[77,171644,153034],{"class":271},[77,171646,680],{"class":87},[77,171648,71567],{"class":271},[77,171650,98],{"class":87},[77,171652,3238],{"class":94},[77,171654,680],{"class":87},[77,171656,153570],{"class":271},[77,171658,98],{"class":87},[77,171660,3424],{"class":94},[77,171662,7405],{"class":87},[77,171664,171665],{"class":79,"line":1549},[77,171666,35713],{"class":87},[77,171668,171669],{"class":79,"line":1566},[77,171670,4875],{"emptyLinePlaceholder":2549},[77,171672,171673,171675,171677,171679,171681,171683,171685,171687,171689,171691,171693,171695,171697,171699],{"class":79,"line":1572},[77,171674,110266],{"class":2123},[77,171676,148889],{"class":94},[77,171678,2622],{"class":87},[77,171680,153929],{"class":271},[77,171682,680],{"class":87},[77,171684,154074],{"class":271},[77,171686,680],{"class":87},[77,171688,148904],{"class":7691},[77,171690,268],{"class":2123},[77,171692,148909],{"class":271},[77,171694,16186],{"class":87},[77,171696,33850],{"class":2123},[77,171698,150251],{"class":7691},[77,171700,6214],{"class":87},[77,171702,171703,171706,171708,171710,171712,171714,171716,171718,171720,171722,171724],{"class":79,"line":1589},[77,171704,171705],{"class":87},"    json.dump(students, ",[77,171707,47820],{"class":7691},[77,171709,680],{"class":87},[77,171711,149235],{"class":7691},[77,171713,268],{"class":2123},[77,171715,36453],{"class":94},[77,171717,680],{"class":87},[77,171719,154110],{"class":7691},[77,171721,268],{"class":2123},[77,171723,2696],{"class":94},[77,171725,2628],{"class":87},[24,171727,171728],{},"读取 JSON 文件：",[67,171730,171732],{"className":32846,"code":171731,"language":32848,"meta":72,"style":72},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[74,171733,171734,171740,171744,171774,171786,171790],{"__ignoreMap":72},[77,171735,171736,171738],{"class":79,"line":80},[77,171737,32860],{"class":2123},[77,171739,149189],{"class":87},[77,171741,171742],{"class":79,"line":91},[77,171743,4875],{"emptyLinePlaceholder":2549},[77,171745,171746,171748,171750,171752,171754,171756,171758,171760,171762,171764,171766,171768,171770,171772],{"class":79,"line":107},[77,171747,110266],{"class":2123},[77,171749,148889],{"class":94},[77,171751,2622],{"class":87},[77,171753,153929],{"class":271},[77,171755,680],{"class":87},[77,171757,148899],{"class":271},[77,171759,680],{"class":87},[77,171761,148904],{"class":7691},[77,171763,268],{"class":2123},[77,171765,148909],{"class":271},[77,171767,16186],{"class":87},[77,171769,33850],{"class":2123},[77,171771,150251],{"class":7691},[77,171773,6214],{"class":87},[77,171775,171776,171778,171780,171782,171784],{"class":79,"line":191},[77,171777,155135],{"class":87},[77,171779,268],{"class":2123},[77,171781,150262],{"class":87},[77,171783,47820],{"class":7691},[77,171785,2628],{"class":87},[77,171787,171788],{"class":79,"line":1543},[77,171789,4875],{"emptyLinePlaceholder":2549},[77,171791,171792,171794],{"class":79,"line":1549},[77,171793,32883],{"class":94},[77,171795,167093],{"class":87},[14,171797,171799],{"id":171798},"_811-csv文件","8.11 CSV文件",[24,171801,171802],{},"CSV 是逗号分隔值，常用于表格数据。",[24,171804,171805],{},"写入 CSV：",[67,171807,171809],{"className":32846,"code":171808,"language":32848,"meta":72,"style":72},"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",[74,171810,171811,171818,171822,171830,171848,171864,171880,171884,171888,171928,171942],{"__ignoreMap":72},[77,171812,171813,171815],{"class":79,"line":80},[77,171814,32860],{"class":2123},[77,171816,171817],{"class":87}," csv\n",[77,171819,171820],{"class":79,"line":91},[77,171821,4875],{"emptyLinePlaceholder":2549},[77,171823,171824,171826,171828],{"class":79,"line":107},[77,171825,161814],{"class":87},[77,171827,268],{"class":2123},[77,171829,57895],{"class":87},[77,171831,171832,171835,171837,171839,171841,171843,171846],{"class":79,"line":191},[77,171833,171834],{"class":87},"    [",[77,171836,75538],{"class":271},[77,171838,680],{"class":87},[77,171840,75571],{"class":271},[77,171842,680],{"class":87},[77,171844,171845],{"class":271},"\"成绩\"",[77,171847,90272],{"class":87},[77,171849,171850,171852,171854,171856,171858,171860,171862],{"class":79,"line":1543},[77,171851,171834],{"class":87},[77,171853,151986],{"class":271},[77,171855,680],{"class":87},[77,171857,3263],{"class":94},[77,171859,680],{"class":87},[77,171861,3601],{"class":94},[77,171863,90272],{"class":87},[77,171865,171866,171868,171870,171872,171874,171876,171878],{"class":79,"line":1549},[77,171867,171834],{"class":87},[77,171869,153034],{"class":271},[77,171871,680],{"class":87},[77,171873,3238],{"class":94},[77,171875,680],{"class":87},[77,171877,3424],{"class":94},[77,171879,90272],{"class":87},[77,171881,171882],{"class":79,"line":1566},[77,171883,35713],{"class":87},[77,171885,171886],{"class":79,"line":1572},[77,171887,4875],{"emptyLinePlaceholder":2549},[77,171889,171890,171892,171894,171896,171899,171901,171903,171905,171907,171909,171911,171913,171916,171918,171920,171922,171924,171926],{"class":79,"line":1589},[77,171891,110266],{"class":2123},[77,171893,148889],{"class":94},[77,171895,2622],{"class":87},[77,171897,171898],{"class":271},"\"students.csv\"",[77,171900,680],{"class":87},[77,171902,154074],{"class":271},[77,171904,680],{"class":87},[77,171906,148904],{"class":7691},[77,171908,268],{"class":2123},[77,171910,148909],{"class":271},[77,171912,680],{"class":87},[77,171914,171915],{"class":7691},"newline",[77,171917,268],{"class":2123},[77,171919,444],{"class":271},[77,171921,16186],{"class":87},[77,171923,33850],{"class":2123},[77,171925,150251],{"class":7691},[77,171927,6214],{"class":87},[77,171929,171930,171933,171935,171938,171940],{"class":79,"line":1595},[77,171931,171932],{"class":87},"    writer ",[77,171934,268],{"class":2123},[77,171936,171937],{"class":87}," csv.writer(",[77,171939,47820],{"class":7691},[77,171941,2628],{"class":87},[77,171943,171944],{"class":79,"line":4088},[77,171945,171946],{"class":87},"    writer.writerows(students)\n",[24,171948,171949],{},"读取 CSV：",[67,171951,171953],{"className":32846,"code":171952,"language":32848,"meta":72,"style":72},"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",[74,171954,171955,171961,171965,171995,172009,172021],{"__ignoreMap":72},[77,171956,171957,171959],{"class":79,"line":80},[77,171958,32860],{"class":2123},[77,171960,171817],{"class":87},[77,171962,171963],{"class":79,"line":91},[77,171964,4875],{"emptyLinePlaceholder":2549},[77,171966,171967,171969,171971,171973,171975,171977,171979,171981,171983,171985,171987,171989,171991,171993],{"class":79,"line":107},[77,171968,110266],{"class":2123},[77,171970,148889],{"class":94},[77,171972,2622],{"class":87},[77,171974,171898],{"class":271},[77,171976,680],{"class":87},[77,171978,148899],{"class":271},[77,171980,680],{"class":87},[77,171982,148904],{"class":7691},[77,171984,268],{"class":2123},[77,171986,148909],{"class":271},[77,171988,16186],{"class":87},[77,171990,33850],{"class":2123},[77,171992,150251],{"class":7691},[77,171994,6214],{"class":87},[77,171996,171997,172000,172002,172005,172007],{"class":79,"line":191},[77,171998,171999],{"class":87},"    reader ",[77,172001,268],{"class":2123},[77,172003,172004],{"class":87}," csv.reader(",[77,172006,47820],{"class":7691},[77,172008,2628],{"class":87},[77,172010,172011,172013,172016,172018],{"class":79,"line":1543},[77,172012,5676],{"class":2123},[77,172014,172015],{"class":87}," row ",[77,172017,28511],{"class":2123},[77,172019,172020],{"class":87}," reader:\n",[77,172022,172023,172025],{"class":79,"line":1549},[77,172024,34918],{"class":94},[77,172026,172027],{"class":87},"(row)\n",[24,172029,172030],{},"使用字典写入：",[67,172032,172034],{"className":32846,"code":172033,"language":32848,"meta":72,"style":72},"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",[74,172035,172036,172042,172046,172054,172082,172110,172114,172118,172156,172177,172198,172203],{"__ignoreMap":72},[77,172037,172038,172040],{"class":79,"line":80},[77,172039,32860],{"class":2123},[77,172041,171817],{"class":87},[77,172043,172044],{"class":79,"line":91},[77,172045,4875],{"emptyLinePlaceholder":2549},[77,172047,172048,172050,172052],{"class":79,"line":107},[77,172049,161814],{"class":87},[77,172051,268],{"class":2123},[77,172053,57895],{"class":87},[77,172055,172056,172058,172060,172062,172064,172066,172068,172070,172072,172074,172076,172078,172080],{"class":79,"line":191},[77,172057,150483],{"class":87},[77,172059,65123],{"class":271},[77,172061,98],{"class":87},[77,172063,151986],{"class":271},[77,172065,680],{"class":87},[77,172067,71567],{"class":271},[77,172069,98],{"class":87},[77,172071,3263],{"class":94},[77,172073,680],{"class":87},[77,172075,153570],{"class":271},[77,172077,98],{"class":87},[77,172079,3601],{"class":94},[77,172081,7405],{"class":87},[77,172083,172084,172086,172088,172090,172092,172094,172096,172098,172100,172102,172104,172106,172108],{"class":79,"line":1543},[77,172085,150483],{"class":87},[77,172087,65123],{"class":271},[77,172089,98],{"class":87},[77,172091,153034],{"class":271},[77,172093,680],{"class":87},[77,172095,71567],{"class":271},[77,172097,98],{"class":87},[77,172099,3238],{"class":94},[77,172101,680],{"class":87},[77,172103,153570],{"class":271},[77,172105,98],{"class":87},[77,172107,3424],{"class":94},[77,172109,7405],{"class":87},[77,172111,172112],{"class":79,"line":1549},[77,172113,35713],{"class":87},[77,172115,172116],{"class":79,"line":1566},[77,172117,4875],{"emptyLinePlaceholder":2549},[77,172119,172120,172122,172124,172126,172128,172130,172132,172134,172136,172138,172140,172142,172144,172146,172148,172150,172152,172154],{"class":79,"line":1572},[77,172121,110266],{"class":2123},[77,172123,148889],{"class":94},[77,172125,2622],{"class":87},[77,172127,171898],{"class":271},[77,172129,680],{"class":87},[77,172131,154074],{"class":271},[77,172133,680],{"class":87},[77,172135,148904],{"class":7691},[77,172137,268],{"class":2123},[77,172139,148909],{"class":271},[77,172141,680],{"class":87},[77,172143,171915],{"class":7691},[77,172145,268],{"class":2123},[77,172147,444],{"class":271},[77,172149,16186],{"class":87},[77,172151,33850],{"class":2123},[77,172153,150251],{"class":7691},[77,172155,6214],{"class":87},[77,172157,172158,172161,172163,172165,172167,172169,172171,172173,172175],{"class":79,"line":1589},[77,172159,172160],{"class":87},"    fieldnames ",[77,172162,268],{"class":2123},[77,172164,54684],{"class":87},[77,172166,65123],{"class":271},[77,172168,680],{"class":87},[77,172170,71567],{"class":271},[77,172172,680],{"class":87},[77,172174,153570],{"class":271},[77,172176,35713],{"class":87},[77,172178,172179,172181,172183,172186,172188,172190,172193,172195],{"class":79,"line":1595},[77,172180,171932],{"class":87},[77,172182,268],{"class":2123},[77,172184,172185],{"class":87}," csv.DictWriter(",[77,172187,47820],{"class":7691},[77,172189,680],{"class":87},[77,172191,172192],{"class":7691},"fieldnames",[77,172194,268],{"class":2123},[77,172196,172197],{"class":87},"fieldnames)\n",[77,172199,172200],{"class":79,"line":4088},[77,172201,172202],{"class":87},"    writer.writeheader()\n",[77,172204,172205],{"class":79,"line":4093},[77,172206,171946],{"class":87},[14,172208,172210],{"id":172209},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[24,172212,125724],{},[139,172214,172215,172218,172221],{},[54,172216,172217],{},"读取文本文件。",[54,172219,172220],{},"统计每个单词出现次数。",[54,172222,172223],{},"输出出现次数最多的前 10 个单词。",[24,172225,12508],{},[67,172227,172229],{"className":32846,"code":172228,"language":32848,"meta":72,"style":72},"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",[74,172230,172231,172241,172245,172258,172274,172278,172288,172297,172301,172313,172333,172342,172346,172364,172368,172398,172402,172418],{"__ignoreMap":72},[77,172232,172233,172235,172237,172239],{"class":79,"line":80},[77,172234,33205],{"class":2123},[77,172236,110744],{"class":87},[77,172238,32860],{"class":2123},[77,172240,110749],{"class":87},[77,172242,172243],{"class":79,"line":91},[77,172244,4875],{"emptyLinePlaceholder":2549},[77,172246,172247,172249,172251,172253,172256],{"class":79,"line":107},[77,172248,170409],{"class":87},[77,172250,268],{"class":2123},[77,172252,110978],{"class":87},[77,172254,172255],{"class":271},"\"article.txt\"",[77,172257,2628],{"class":87},[77,172259,172260,172262,172264,172266,172268,172270,172272],{"class":79,"line":191},[77,172261,170592],{"class":87},[77,172263,268],{"class":2123},[77,172265,171469],{"class":87},[77,172267,148904],{"class":7691},[77,172269,268],{"class":2123},[77,172271,148909],{"class":271},[77,172273,2628],{"class":87},[77,172275,172276],{"class":79,"line":1543},[77,172277,4875],{"emptyLinePlaceholder":2549},[77,172279,172280,172283,172285],{"class":79,"line":1549},[77,172281,172282],{"class":87},"words ",[77,172284,268],{"class":2123},[77,172286,172287],{"class":87}," content.lower().split()\n",[77,172289,172290,172293,172295],{"class":79,"line":1566},[77,172291,172292],{"class":87},"counter ",[77,172294,268],{"class":2123},[77,172296,90304],{"class":87},[77,172298,172299],{"class":79,"line":1572},[77,172300,4875],{"emptyLinePlaceholder":2549},[77,172302,172303,172305,172308,172310],{"class":79,"line":1589},[77,172304,5500],{"class":2123},[77,172306,172307],{"class":87}," word ",[77,172309,28511],{"class":2123},[77,172311,172312],{"class":87}," words:\n",[77,172314,172315,172318,172320,172323,172326,172328,172331],{"class":79,"line":1595},[77,172316,172317],{"class":87},"    word ",[77,172319,268],{"class":2123},[77,172321,172322],{"class":87}," word.strip(",[77,172324,172325],{"class":271},"\".,!?;:",[77,172327,158593],{"class":94},[77,172329,172330],{"class":271},"'()[]\"",[77,172332,2628],{"class":87},[77,172334,172335,172337,172339],{"class":79,"line":4088},[77,172336,5576],{"class":2123},[77,172338,41396],{"class":2123},[77,172340,172341],{"class":87}," word:\n",[77,172343,172344],{"class":79,"line":4093},[77,172345,150610],{"class":2123},[77,172347,172348,172351,172353,172356,172358,172360,172362],{"class":79,"line":4099},[77,172349,172350],{"class":87},"    counter[word] ",[77,172352,268],{"class":2123},[77,172354,172355],{"class":87}," counter.get(word, ",[77,172357,1939],{"class":94},[77,172359,16186],{"class":87},[77,172361,3094],{"class":2123},[77,172363,58147],{"class":94},[77,172365,172366],{"class":79,"line":4104},[77,172367,4875],{"emptyLinePlaceholder":2549},[77,172369,172370,172373,172375,172377,172380,172382,172384,172386,172388,172390,172392,172394,172396],{"class":79,"line":4118},[77,172371,172372],{"class":87},"items ",[77,172374,268],{"class":2123},[77,172376,165702],{"class":94},[77,172378,172379],{"class":87},"(counter.items(), ",[77,172381,156044],{"class":7691},[77,172383,156047],{"class":2123},[77,172385,156050],{"class":87},[77,172387,2120],{"class":94},[77,172389,114635],{"class":87},[77,172391,165626],{"class":7691},[77,172393,268],{"class":2123},[77,172395,33943],{"class":94},[77,172397,2628],{"class":87},[77,172399,172400],{"class":79,"line":4123},[77,172401,4875],{"emptyLinePlaceholder":2549},[77,172403,172404,172406,172409,172411,172414,172416],{"class":79,"line":4129},[77,172405,5500],{"class":2123},[77,172407,172408],{"class":87}," word, count ",[77,172410,28511],{"class":2123},[77,172412,172413],{"class":87}," items[:",[77,172415,3059],{"class":94},[77,172417,167853],{"class":87},[77,172419,172420,172422],{"class":79,"line":4150},[77,172421,33766],{"class":94},[77,172423,172424],{"class":87},"(word, count)\n",[14,172426,172428],{"id":172427},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[67,172430,172432],{"className":32846,"code":172431,"language":32848,"meta":72,"style":72},"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",[74,172433,172434,172440,172450,172454,172466,172470,172474,172482,172492,172498,172502,172532,172542,172546,172550,172558,172588,172612,172616,172620,172628,172657,172662],{"__ignoreMap":72},[77,172435,172436,172438],{"class":79,"line":80},[77,172437,32860],{"class":2123},[77,172439,149189],{"class":87},[77,172441,172442,172444,172446,172448],{"class":79,"line":91},[77,172443,33205],{"class":2123},[77,172445,110744],{"class":87},[77,172447,32860],{"class":2123},[77,172449,110749],{"class":87},[77,172451,172452],{"class":79,"line":107},[77,172453,4875],{"emptyLinePlaceholder":2549},[77,172455,172456,172458,172460,172462,172464],{"class":79,"line":191},[77,172457,153922],{"class":94},[77,172459,16036],{"class":2123},[77,172461,110978],{"class":87},[77,172463,153929],{"class":271},[77,172465,2628],{"class":87},[77,172467,172468],{"class":79,"line":1543},[77,172469,4875],{"emptyLinePlaceholder":2549},[77,172471,172472],{"class":79,"line":1549},[77,172473,4875],{"emptyLinePlaceholder":2549},[77,172475,172476,172478,172480],{"class":79,"line":1566},[77,172477,34414],{"class":2123},[77,172479,153946],{"class":83},[77,172481,34420],{"class":87},[77,172483,172484,172486,172488,172490],{"class":79,"line":1572},[77,172485,5576],{"class":2123},[77,172487,41396],{"class":2123},[77,172489,153957],{"class":94},[77,172491,153960],{"class":87},[77,172493,172494,172496],{"class":79,"line":1589},[77,172495,17224],{"class":2123},[77,172497,54296],{"class":87},[77,172499,172500],{"class":79,"line":1595},[77,172501,4875],{"emptyLinePlaceholder":2549},[77,172503,172504,172506,172508,172510,172512,172514,172516,172518,172520,172522,172524,172526,172528,172530],{"class":79,"line":4088},[77,172505,36644],{"class":2123},[77,172507,148889],{"class":94},[77,172509,2622],{"class":87},[77,172511,153922],{"class":94},[77,172513,680],{"class":87},[77,172515,148899],{"class":271},[77,172517,680],{"class":87},[77,172519,148904],{"class":7691},[77,172521,268],{"class":2123},[77,172523,148909],{"class":271},[77,172525,16186],{"class":87},[77,172527,33850],{"class":2123},[77,172529,150251],{"class":7691},[77,172531,6214],{"class":87},[77,172533,172534,172536,172538,172540],{"class":79,"line":4093},[77,172535,17224],{"class":2123},[77,172537,150262],{"class":87},[77,172539,47820],{"class":7691},[77,172541,2628],{"class":87},[77,172543,172544],{"class":79,"line":4099},[77,172545,4875],{"emptyLinePlaceholder":2549},[77,172547,172548],{"class":79,"line":4104},[77,172549,4875],{"emptyLinePlaceholder":2549},[77,172551,172552,172554,172556],{"class":79,"line":4118},[77,172553,34414],{"class":2123},[77,172555,154056],{"class":83},[77,172557,154059],{"class":87},[77,172559,172560,172562,172564,172566,172568,172570,172572,172574,172576,172578,172580,172582,172584,172586],{"class":79,"line":4123},[77,172561,36644],{"class":2123},[77,172563,148889],{"class":94},[77,172565,2622],{"class":87},[77,172567,153922],{"class":94},[77,172569,680],{"class":87},[77,172571,154074],{"class":271},[77,172573,680],{"class":87},[77,172575,148904],{"class":7691},[77,172577,268],{"class":2123},[77,172579,148909],{"class":271},[77,172581,16186],{"class":87},[77,172583,33850],{"class":2123},[77,172585,150251],{"class":7691},[77,172587,6214],{"class":87},[77,172589,172590,172592,172594,172596,172598,172600,172602,172604,172606,172608,172610],{"class":79,"line":4129},[77,172591,154095],{"class":87},[77,172593,47820],{"class":7691},[77,172595,680],{"class":87},[77,172597,149235],{"class":7691},[77,172599,268],{"class":2123},[77,172601,36453],{"class":94},[77,172603,680],{"class":87},[77,172605,154110],{"class":7691},[77,172607,268],{"class":2123},[77,172609,2696],{"class":94},[77,172611,2628],{"class":87},[77,172613,172614],{"class":79,"line":4150},[77,172615,4875],{"emptyLinePlaceholder":2549},[77,172617,172618],{"class":79,"line":4155},[77,172619,4875],{"emptyLinePlaceholder":2549},[77,172621,172622,172624,172626],{"class":79,"line":4169},[77,172623,161814],{"class":87},[77,172625,268],{"class":2123},[77,172627,155140],{"class":87},[77,172629,172630,172633,172635,172637,172639,172641,172643,172645,172647,172649,172651,172653,172655],{"class":79,"line":4174},[77,172631,172632],{"class":87},"students.append({",[77,172634,65123],{"class":271},[77,172636,98],{"class":87},[77,172638,151986],{"class":271},[77,172640,680],{"class":87},[77,172642,71567],{"class":271},[77,172644,98],{"class":87},[77,172646,3263],{"class":94},[77,172648,680],{"class":87},[77,172650,153570],{"class":271},[77,172652,98],{"class":87},[77,172654,3601],{"class":94},[77,172656,167250],{"class":87},[77,172658,172659],{"class":79,"line":4203},[77,172660,172661],{"class":87},"save_students(students)\n",[77,172663,172664,172666,172668,172671],{"class":79,"line":4208},[77,172665,32883],{"class":94},[77,172667,2622],{"class":87},[77,172669,172670],{"class":271},"\"保存成功\"",[77,172672,2628],{"class":87},[14,172674,172676],{"id":172675},"_814-易错点","8.14 易错点",[139,172678,172679,172683,172689,172694,172701,172708],{},[54,172680,172681,170942],{},[74,172682,3408],{},[54,172684,172685,172686,30853],{},"读写中文要指定 ",[74,172687,172688],{},"encoding=\"utf-8\"",[54,172690,172691,172692,30853],{},"打开文件后要关闭，推荐使用 ",[74,172693,110266],{},[54,172695,172696,172697,172700],{},"读取大文件不要直接 ",[74,172698,172699],{},"read()"," 全部内容。",[54,172702,172703,172704,172707],{},"Windows 写 CSV 时建议加 ",[74,172705,172706],{},"newline=\"\"","，避免空行。",[54,172709,172710],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172712,172714],{"id":172713},"_815-本章练习","8.15 本章练习",[139,172716,172717,172724,172729,172732,172735],{},[54,172718,172719,172720,172723],{},"写入一个 ",[74,172721,172722],{},"students.txt","，每行保存一个学生姓名。",[54,172725,106788,172726,172728],{},[74,172727,172722],{}," 并输出所有学生。",[54,172730,172731],{},"把学生列表保存为 JSON 文件。",[54,172733,172734],{},"从 JSON 文件读取学生数据，计算平均分。",[54,172736,172737,172738,172741,172742,172745],{},"写一个日志函数 ",[74,172739,172740],{},"write_log(message)","，每次调用向 ",[74,172743,172744],{},"app.log"," 追加一行。",[2520,172747,172748],{},"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":72,"searchDepth":91,"depth":91,"links":172750},[172751,172752,172756,172757,172763,172764,172765,172766,172767,172768,172769,172770,172771,172772,172773],{"id":170262,"depth":91,"text":170263},{"id":170303,"depth":91,"text":170304,"children":172753},[172754,172755],{"id":170307,"depth":107,"text":170308},{"id":170341,"depth":107,"text":170342},{"id":170455,"depth":91,"text":170456},{"id":170548,"depth":91,"text":170549,"children":172758},[172759,172760,172761,172762],{"id":170552,"depth":107,"text":170553},{"id":170639,"depth":107,"text":170640},{"id":170709,"depth":107,"text":170710},{"id":170803,"depth":107,"text":170804},{"id":170873,"depth":91,"text":170874},{"id":170936,"depth":91,"text":170937},{"id":171097,"depth":91,"text":171098},{"id":171160,"depth":91,"text":171161},{"id":171276,"depth":91,"text":171277},{"id":171486,"depth":91,"text":171487},{"id":171798,"depth":91,"text":171799},{"id":172209,"depth":91,"text":172210},{"id":172427,"depth":91,"text":172428},{"id":172675,"depth":91,"text":172676},{"id":172713,"depth":91,"text":172714},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170254,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172780,"title":172781,"body":172782,"description":2546,"extension":2547,"meta":174968,"navigation":2549,"path":174969,"seo":174970,"stem":174971,"__hash__":174972},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172783,"toc":174935},[172784,172787,172791,172794,172797,172889,172891,172910,172915,172919,172922,172925,172954,172961,172964,172968,172971,173000,173002,173054,173060,173113,173117,173215,173218,173285,173289,173346,173348,173354,173358,173363,173369,173460,173465,173469,173472,173550,173553,173591,173595,173713,173716,173720,173723,173768,173771,173775,173780,173786,173836,173839,173870,173874,173878,173908,173912,173947,173951,173986,174026,174030,174046,174049,174053,174057,174136,174140,174181,174185,174240,174244,174278,174282,174312,174321,174328,174334,174391,174394,174402,174405,174409,174416,174419,174425,174428,174445,174450,174454,174460,174473,174476,174513,174516,174527,174530,174544,174547,174561,174565,174572,174605,174608,174610,174616,174619,174623,174625,174631,174636,174809,174813,174876,174880,174904,174908,174932],[10,172785,172781],{"id":172786},"_9-异常模块与包",[14,172788,172790],{"id":172789},"_91-什么是异常","9.1 什么是异常",[24,172792,172793],{},"异常是程序运行过程中出现的错误。",[24,172795,172796],{},"常见异常：",[2755,172798,172799,172808],{},[2758,172800,172801],{},[2761,172802,172803,172806],{},[2764,172804,172805],{},"异常",[2764,172807,28337],{},[2801,172809,172810,172820,172830,172839,172849,172859,172869,172879],{},[2761,172811,172812,172817],{},[2806,172813,172814],{},[74,172815,172816],{},"NameError",[2806,172818,172819],{},"使用了未定义变量",[2761,172821,172822,172827],{},[2806,172823,172824],{},[74,172825,172826],{},"TypeError",[2806,172828,172829],{},"类型不匹配",[2761,172831,172832,172836],{},[2806,172833,172834],{},[74,172835,156932],{},[2806,172837,172838],{},"值不合法",[2761,172840,172841,172846],{},[2806,172842,172843],{},[74,172844,172845],{},"IndexError",[2806,172847,172848],{},"列表索引越界",[2761,172850,172851,172856],{},[2806,172852,172853],{},[74,172854,172855],{},"KeyError",[2806,172857,172858],{},"字典 key 不存在",[2761,172860,172861,172866],{},[2806,172862,172863],{},[74,172864,172865],{},"FileNotFoundError",[2806,172867,172868],{},"文件不存在",[2761,172870,172871,172876],{},[2806,172872,172873],{},[74,172874,172875],{},"ZeroDivisionError",[2806,172877,172878],{},"除数为 0",[2761,172880,172881,172886],{},[2806,172882,172883],{},[74,172884,172885],{},"ImportError",[2806,172887,172888],{},"导入失败",[24,172890,17606],{},[67,172892,172894],{"className":32846,"code":172893,"language":32848,"meta":72,"style":72},"num = int(\"abc\")\n",[74,172895,172896],{"__ignoreMap":72},[77,172897,172898,172900,172902,172904,172906,172908],{"class":79,"line":80},[77,172899,157885],{"class":87},[77,172901,268],{"class":2123},[77,172903,4857],{"class":94},[77,172905,2622],{"class":87},[77,172907,157978],{"class":271},[77,172909,2628],{"class":87},[24,172911,172912,172913,30853],{},"会触发 ",[74,172914,156932],{},[14,172916,172918],{"id":172917},"_92-为什么要处理异常","9.2 为什么要处理异常",[24,172920,172921],{},"如果不处理异常，程序会直接终止。",[24,172923,172924],{},"例如用户输入年龄：",[67,172926,172928],{"className":32846,"code":172927,"language":32848,"meta":72,"style":72},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[74,172929,172930,172948],{"__ignoreMap":72},[77,172931,172932,172934,172936,172938,172940,172942,172944,172946],{"class":79,"line":80},[77,172933,148644],{"class":87},[77,172935,268],{"class":2123},[77,172937,4857],{"class":94},[77,172939,2622],{"class":87},[77,172941,159],{"class":94},[77,172943,2622],{"class":87},[77,172945,154492],{"class":271},[77,172947,32965],{"class":87},[77,172949,172950,172952],{"class":79,"line":91},[77,172951,32883],{"class":94},[77,172953,157859],{"class":87},[24,172955,172956,172957,172960],{},"用户输入 ",[74,172958,172959],{},"abc","，程序就会报错退出。",[24,172962,172963],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172965,172967],{"id":172966},"_93-try-except","9.3 try except",[24,172969,172970],{},"基础语法：",[67,172972,172974],{"className":32846,"code":172973,"language":32848,"meta":72,"style":72},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[74,172975,172976,172983,172988,172995],{"__ignoreMap":72},[77,172977,172978,172981],{"class":79,"line":80},[77,172979,172980],{"class":2123},"try",[77,172982,6214],{"class":87},[77,172984,172985],{"class":79,"line":91},[77,172986,172987],{"class":87},"    可能出错的代码\n",[77,172989,172990,172993],{"class":79,"line":107},[77,172991,172992],{"class":2123},"except",[77,172994,6214],{"class":87},[77,172996,172997],{"class":79,"line":191},[77,172998,172999],{"class":87},"    出错后的处理代码\n",[24,173001,17606],{},[67,173003,173005],{"className":32846,"code":173004,"language":32848,"meta":72,"style":72},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[74,173006,173007,173013,173031,173037,173043],{"__ignoreMap":72},[77,173008,173009,173011],{"class":79,"line":80},[77,173010,172980],{"class":2123},[77,173012,6214],{"class":87},[77,173014,173015,173017,173019,173021,173023,173025,173027,173029],{"class":79,"line":91},[77,173016,154484],{"class":87},[77,173018,268],{"class":2123},[77,173020,4857],{"class":94},[77,173022,2622],{"class":87},[77,173024,159],{"class":94},[77,173026,2622],{"class":87},[77,173028,154492],{"class":271},[77,173030,32965],{"class":87},[77,173032,173033,173035],{"class":79,"line":107},[77,173034,33766],{"class":94},[77,173036,157859],{"class":87},[77,173038,173039,173041],{"class":79,"line":191},[77,173040,172992],{"class":2123},[77,173042,6214],{"class":87},[77,173044,173045,173047,173049,173052],{"class":79,"line":1543},[77,173046,33766],{"class":94},[77,173048,2622],{"class":87},[77,173050,173051],{"class":271},"\"年龄必须是数字\"",[77,173053,2628],{"class":87},[24,173055,173056,173057,173059],{},"不建议裸写 ",[74,173058,172992],{},"，最好指定异常类型。",[67,173061,173063],{"className":32846,"code":173062,"language":32848,"meta":72,"style":72},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[74,173064,173065,173071,173089,173095,173103],{"__ignoreMap":72},[77,173066,173067,173069],{"class":79,"line":80},[77,173068,172980],{"class":2123},[77,173070,6214],{"class":87},[77,173072,173073,173075,173077,173079,173081,173083,173085,173087],{"class":79,"line":91},[77,173074,154484],{"class":87},[77,173076,268],{"class":2123},[77,173078,4857],{"class":94},[77,173080,2622],{"class":87},[77,173082,159],{"class":94},[77,173084,2622],{"class":87},[77,173086,154492],{"class":271},[77,173088,32965],{"class":87},[77,173090,173091,173093],{"class":79,"line":107},[77,173092,33766],{"class":94},[77,173094,157859],{"class":87},[77,173096,173097,173099,173101],{"class":79,"line":191},[77,173098,172992],{"class":2123},[77,173100,154324],{"class":94},[77,173102,6214],{"class":87},[77,173104,173105,173107,173109,173111],{"class":79,"line":1543},[77,173106,33766],{"class":94},[77,173108,2622],{"class":87},[77,173110,173051],{"class":271},[77,173112,2628],{"class":87},[14,173114,173116],{"id":173115},"_94-捕获多个异常","9.4 捕获多个异常",[67,173118,173120],{"className":32846,"code":173119,"language":32848,"meta":72,"style":72},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[74,173121,173122,173128,173149,173169,173176,173184,173195,173204],{"__ignoreMap":72},[77,173123,173124,173126],{"class":79,"line":80},[77,173125,172980],{"class":2123},[77,173127,6214],{"class":87},[77,173129,173130,173133,173135,173137,173139,173141,173143,173145,173147],{"class":79,"line":91},[77,173131,173132],{"class":87},"    nums ",[77,173134,268],{"class":2123},[77,173136,54684],{"class":87},[77,173138,2120],{"class":94},[77,173140,680],{"class":87},[77,173142,2696],{"class":94},[77,173144,680],{"class":87},[77,173146,2690],{"class":94},[77,173148,35713],{"class":87},[77,173150,173151,173154,173156,173158,173160,173162,173164,173167],{"class":79,"line":107},[77,173152,173153],{"class":87},"    index ",[77,173155,268],{"class":2123},[77,173157,4857],{"class":94},[77,173159,2622],{"class":87},[77,173161,159],{"class":94},[77,173163,2622],{"class":87},[77,173165,173166],{"class":271},"\"请输入索引:\"",[77,173168,32965],{"class":87},[77,173170,173171,173173],{"class":79,"line":191},[77,173172,33766],{"class":94},[77,173174,173175],{"class":87},"(nums[index])\n",[77,173177,173178,173180,173182],{"class":79,"line":1543},[77,173179,172992],{"class":2123},[77,173181,154324],{"class":94},[77,173183,6214],{"class":87},[77,173185,173186,173188,173190,173193],{"class":79,"line":1549},[77,173187,33766],{"class":94},[77,173189,2622],{"class":87},[77,173191,173192],{"class":271},"\"索引必须是整数\"",[77,173194,2628],{"class":87},[77,173196,173197,173199,173202],{"class":79,"line":1566},[77,173198,172992],{"class":2123},[77,173200,173201],{"class":94}," IndexError",[77,173203,6214],{"class":87},[77,173205,173206,173208,173210,173213],{"class":79,"line":1572},[77,173207,33766],{"class":94},[77,173209,2622],{"class":87},[77,173211,173212],{"class":271},"\"索引越界\"",[77,173214,2628],{"class":87},[24,173216,173217],{},"多个异常使用相同处理逻辑：",[67,173219,173221],{"className":32846,"code":173220,"language":32848,"meta":72,"style":72},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[74,173222,173223,173229,173247,173260,173274],{"__ignoreMap":72},[77,173224,173225,173227],{"class":79,"line":80},[77,173226,172980],{"class":2123},[77,173228,6214],{"class":87},[77,173230,173231,173233,173235,173237,173239,173241,173243,173245],{"class":79,"line":91},[77,173232,48059],{"class":87},[77,173234,268],{"class":2123},[77,173236,4857],{"class":94},[77,173238,2622],{"class":87},[77,173240,159],{"class":94},[77,173242,2622],{"class":87},[77,173244,157894],{"class":271},[77,173246,32965],{"class":87},[77,173248,173249,173251,173253,173255,173257],{"class":79,"line":107},[77,173250,33766],{"class":94},[77,173252,2622],{"class":87},[77,173254,3059],{"class":94},[77,173256,158144],{"class":2123},[77,173258,173259],{"class":87}," num)\n",[77,173261,173262,173264,173266,173268,173270,173272],{"class":79,"line":191},[77,173263,172992],{"class":2123},[77,173265,4134],{"class":87},[77,173267,156932],{"class":94},[77,173269,680],{"class":87},[77,173271,172875],{"class":94},[77,173273,33254],{"class":87},[77,173275,173276,173278,173280,173283],{"class":79,"line":1543},[77,173277,33766],{"class":94},[77,173279,2622],{"class":87},[77,173281,173282],{"class":271},"\"输入不合法\"",[77,173284,2628],{"class":87},[14,173286,173288],{"id":173287},"_95-获取异常信息","9.5 获取异常信息",[67,173290,173292],{"className":32846,"code":173291,"language":32848,"meta":72,"style":72},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[74,173293,173294,173300,173314,173325],{"__ignoreMap":72},[77,173295,173296,173298],{"class":79,"line":80},[77,173297,172980],{"class":2123},[77,173299,6214],{"class":87},[77,173301,173302,173304,173306,173308,173310,173312],{"class":79,"line":91},[77,173303,48059],{"class":87},[77,173305,268],{"class":2123},[77,173307,4857],{"class":94},[77,173309,2622],{"class":87},[77,173311,157978],{"class":271},[77,173313,2628],{"class":87},[77,173315,173316,173318,173320,173322],{"class":79,"line":107},[77,173317,172992],{"class":2123},[77,173319,154324],{"class":94},[77,173321,67047],{"class":2123},[77,173323,173324],{"class":87}," e:\n",[77,173326,173327,173329,173331,173333,173336,173338,173340,173342,173344],{"class":79,"line":191},[77,173328,33766],{"class":94},[77,173330,2622],{"class":87},[77,173332,2672],{"class":2123},[77,173334,173335],{"class":271},"\"出错了:",[77,173337,3509],{"class":94},[77,173339,2693],{"class":87},[77,173341,3558],{"class":94},[77,173343,2865],{"class":271},[77,173345,2628],{"class":87},[24,173347,148555],{},[67,173349,173352],{"className":173350,"code":173351,"language":7662,"meta":72},[7660],"出错了:invalid literal for int() with base 10: 'abc'\n",[74,173353,173351],{"__ignoreMap":72},[14,173355,173357],{"id":173356},"_96-else和finally","9.6 else和finally",[24,173359,173360,173362],{},[74,173361,4177],{},"：没有异常时执行。",[24,173364,173365,173368],{},[74,173366,173367],{},"finally","：无论是否异常都会执行。",[67,173370,173372],{"className":32846,"code":173371,"language":32848,"meta":72,"style":72},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[74,173373,173374,173380,173398,173406,173416,173422,173443,173449],{"__ignoreMap":72},[77,173375,173376,173378],{"class":79,"line":80},[77,173377,172980],{"class":2123},[77,173379,6214],{"class":87},[77,173381,173382,173384,173386,173388,173390,173392,173394,173396],{"class":79,"line":91},[77,173383,48059],{"class":87},[77,173385,268],{"class":2123},[77,173387,4857],{"class":94},[77,173389,2622],{"class":87},[77,173391,159],{"class":94},[77,173393,2622],{"class":87},[77,173395,157894],{"class":271},[77,173397,32965],{"class":87},[77,173399,173400,173402,173404],{"class":79,"line":107},[77,173401,172992],{"class":2123},[77,173403,154324],{"class":94},[77,173405,6214],{"class":87},[77,173407,173408,173410,173412,173414],{"class":79,"line":191},[77,173409,33766],{"class":94},[77,173411,2622],{"class":87},[77,173413,155312],{"class":271},[77,173415,2628],{"class":87},[77,173417,173418,173420],{"class":79,"line":1543},[77,173419,4177],{"class":2123},[77,173421,6214],{"class":87},[77,173423,173424,173426,173428,173430,173433,173435,173437,173439,173441],{"class":79,"line":1549},[77,173425,33766],{"class":94},[77,173427,2622],{"class":87},[77,173429,2672],{"class":2123},[77,173431,173432],{"class":271},"\"输入正确:",[77,173434,3509],{"class":94},[77,173436,4141],{"class":87},[77,173438,3558],{"class":94},[77,173440,2865],{"class":271},[77,173442,2628],{"class":87},[77,173444,173445,173447],{"class":79,"line":1566},[77,173446,173367],{"class":2123},[77,173448,6214],{"class":87},[77,173450,173451,173453,173455,173458],{"class":79,"line":1572},[77,173452,33766],{"class":94},[77,173454,2622],{"class":87},[77,173456,173457],{"class":271},"\"程序结束\"",[77,173459,2628],{"class":87},[24,173461,173462,173464],{},[74,173463,173367],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173466,173468],{"id":173467},"_97-抛出异常","9.7 抛出异常",[24,173470,173471],{},"程序可以主动抛出异常。",[67,173473,173475],{"className":32846,"code":173474,"language":32848,"meta":72,"style":72},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[74,173476,173477,173486,173498,173511,173531,173535,173539],{"__ignoreMap":72},[77,173478,173479,173481,173484],{"class":79,"line":80},[77,173480,34414],{"class":2123},[77,173482,173483],{"class":83}," set_age",[77,173485,163513],{"class":87},[77,173487,173488,173490,173492,173494,173496],{"class":79,"line":91},[77,173489,5576],{"class":2123},[77,173491,18177],{"class":87},[77,173493,260],{"class":2123},[77,173495,6568],{"class":94},[77,173497,6214],{"class":87},[77,173499,173500,173502,173504,173506,173509],{"class":79,"line":107},[77,173501,105865],{"class":2123},[77,173503,154324],{"class":94},[77,173505,2622],{"class":87},[77,173507,173508],{"class":271},"\"年龄不能为负数\"",[77,173510,2628],{"class":87},[77,173512,173513,173515,173517,173519,173521,173523,173525,173527,173529],{"class":79,"line":191},[77,173514,33766],{"class":94},[77,173516,2622],{"class":87},[77,173518,2672],{"class":2123},[77,173520,164081],{"class":271},[77,173522,3509],{"class":94},[77,173524,72664],{"class":87},[77,173526,3558],{"class":94},[77,173528,2865],{"class":271},[77,173530,2628],{"class":87},[77,173532,173533],{"class":79,"line":1543},[77,173534,4875],{"emptyLinePlaceholder":2549},[77,173536,173537],{"class":79,"line":1549},[77,173538,4875],{"emptyLinePlaceholder":2549},[77,173540,173541,173544,173546,173548],{"class":79,"line":1566},[77,173542,173543],{"class":87},"set_age(",[77,173545,3145],{"class":2123},[77,173547,2120],{"class":94},[77,173549,2628],{"class":87},[24,173551,173552],{},"调用者可以捕获：",[67,173554,173556],{"className":32846,"code":173555,"language":32848,"meta":72,"style":72},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[74,173557,173558,173564,173575,173585],{"__ignoreMap":72},[77,173559,173560,173562],{"class":79,"line":80},[77,173561,172980],{"class":2123},[77,173563,6214],{"class":87},[77,173565,173566,173569,173571,173573],{"class":79,"line":91},[77,173567,173568],{"class":87},"    set_age(",[77,173570,3145],{"class":2123},[77,173572,2120],{"class":94},[77,173574,2628],{"class":87},[77,173576,173577,173579,173581,173583],{"class":79,"line":107},[77,173578,172992],{"class":2123},[77,173580,154324],{"class":94},[77,173582,67047],{"class":2123},[77,173584,173324],{"class":87},[77,173586,173587,173589],{"class":79,"line":191},[77,173588,33766],{"class":94},[77,173590,69442],{"class":87},[14,173592,173594],{"id":173593},"_98-自定义异常","9.8 自定义异常",[67,173596,173598],{"className":32846,"code":173597,"language":32848,"meta":72,"style":72},"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",[74,173599,173600,173614,173618,173622,173626,173634,173644,173655,173665,173669,173673,173679,173696,173707],{"__ignoreMap":72},[77,173601,173602,173604,173607,173609,173612],{"class":79,"line":80},[77,173603,17166],{"class":2123},[77,173605,173606],{"class":83}," BalanceNotEnoughError",[77,173608,2622],{"class":87},[77,173610,173611],{"class":94},"Exception",[77,173613,33254],{"class":87},[77,173615,173616],{"class":79,"line":91},[77,173617,151635],{"class":2123},[77,173619,173620],{"class":79,"line":107},[77,173621,4875],{"emptyLinePlaceholder":2549},[77,173623,173624],{"class":79,"line":191},[77,173625,4875],{"emptyLinePlaceholder":2549},[77,173627,173628,173630,173632],{"class":79,"line":1543},[77,173629,34414],{"class":2123},[77,173631,152284],{"class":83},[77,173633,164910],{"class":87},[77,173635,173636,173638,173640,173642],{"class":79,"line":1549},[77,173637,5576],{"class":2123},[77,173639,152240],{"class":87},[77,173641,3572],{"class":2123},[77,173643,164687],{"class":87},[77,173645,173646,173648,173651,173653],{"class":79,"line":1566},[77,173647,105865],{"class":2123},[77,173649,173650],{"class":87}," BalanceNotEnoughError(",[77,173652,152335],{"class":271},[77,173654,2628],{"class":87},[77,173656,173657,173659,173661,173663],{"class":79,"line":1572},[77,173658,6565],{"class":2123},[77,173660,164917],{"class":87},[77,173662,3145],{"class":2123},[77,173664,152273],{"class":87},[77,173666,173667],{"class":79,"line":1589},[77,173668,4875],{"emptyLinePlaceholder":2549},[77,173670,173671],{"class":79,"line":1595},[77,173672,4875],{"emptyLinePlaceholder":2549},[77,173674,173675,173677],{"class":79,"line":4088},[77,173676,172980],{"class":2123},[77,173678,6214],{"class":87},[77,173680,173681,173683,173685,173688,173690,173692,173694],{"class":79,"line":4093},[77,173682,164588],{"class":87},[77,173684,268],{"class":2123},[77,173686,173687],{"class":87}," withdraw(",[77,173689,2925],{"class":94},[77,173691,680],{"class":87},[77,173693,4198],{"class":94},[77,173695,2628],{"class":87},[77,173697,173698,173700,173703,173705],{"class":79,"line":4099},[77,173699,172992],{"class":2123},[77,173701,173702],{"class":87}," BalanceNotEnoughError ",[77,173704,33850],{"class":2123},[77,173706,173324],{"class":87},[77,173708,173709,173711],{"class":79,"line":4104},[77,173710,33766],{"class":94},[77,173712,69442],{"class":87},[24,173714,173715],{},"入门阶段大多数情况使用内置异常即可。",[14,173717,173719],{"id":173718},"_99-traceback","9.9 traceback",[24,173721,173722],{},"调试时可以输出完整异常堆栈。",[67,173724,173726],{"className":32846,"code":173725,"language":32848,"meta":72,"style":72},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[74,173727,173728,173735,173739,173745,173755,173763],{"__ignoreMap":72},[77,173729,173730,173732],{"class":79,"line":80},[77,173731,32860],{"class":2123},[77,173733,173734],{"class":87}," traceback\n",[77,173736,173737],{"class":79,"line":91},[77,173738,4875],{"emptyLinePlaceholder":2549},[77,173740,173741,173743],{"class":79,"line":107},[77,173742,172980],{"class":2123},[77,173744,6214],{"class":87},[77,173746,173747,173749,173751,173753],{"class":79,"line":191},[77,173748,4460],{"class":94},[77,173750,2622],{"class":87},[77,173752,157978],{"class":271},[77,173754,2628],{"class":87},[77,173756,173757,173759,173761],{"class":79,"line":1543},[77,173758,172992],{"class":2123},[77,173760,154324],{"class":94},[77,173762,6214],{"class":87},[77,173764,173765],{"class":79,"line":1549},[77,173766,173767],{"class":87},"    traceback.print_exc()\n",[24,173769,173770],{},"日志系统中常把异常堆栈记录到文件。",[14,173772,173774],{"id":173773},"_910-什么是模块","9.10 什么是模块",[24,173776,173777,173778,128415],{},"模块就是一个 ",[74,173779,148450],{},[24,173781,173782,173783,27086],{},"例如创建 ",[74,173784,173785],{},"my_math.py",[67,173787,173789],{"className":32846,"code":173788,"language":32848,"meta":72,"style":72},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[74,173790,173791,173799,173809,173813,173817,173826],{"__ignoreMap":72},[77,173792,173793,173795,173797],{"class":79,"line":80},[77,173794,34414],{"class":2123},[77,173796,7684],{"class":83},[77,173798,153191],{"class":87},[77,173800,173801,173803,173805,173807],{"class":79,"line":91},[77,173802,6565],{"class":2123},[77,173804,13342],{"class":87},[77,173806,3094],{"class":2123},[77,173808,153202],{"class":87},[77,173810,173811],{"class":79,"line":107},[77,173812,4875],{"emptyLinePlaceholder":2549},[77,173814,173815],{"class":79,"line":191},[77,173816,4875],{"emptyLinePlaceholder":2549},[77,173818,173819,173821,173824],{"class":79,"line":1543},[77,173820,34414],{"class":2123},[77,173822,173823],{"class":83}," sub",[77,173825,153191],{"class":87},[77,173827,173828,173830,173832,173834],{"class":79,"line":1549},[77,173829,6565],{"class":2123},[77,173831,13342],{"class":87},[77,173833,3145],{"class":2123},[77,173835,153202],{"class":87},[24,173837,173838],{},"在另一个文件中导入：",[67,173840,173842],{"className":32846,"code":173841,"language":32848,"meta":72,"style":72},"import my_math\n\nprint(my_math.add(1, 2))\n",[74,173843,173844,173851,173855],{"__ignoreMap":72},[77,173845,173846,173848],{"class":79,"line":80},[77,173847,32860],{"class":2123},[77,173849,173850],{"class":87}," my_math\n",[77,173852,173853],{"class":79,"line":91},[77,173854,4875],{"emptyLinePlaceholder":2549},[77,173856,173857,173859,173862,173864,173866,173868],{"class":79,"line":107},[77,173858,32883],{"class":94},[77,173860,173861],{"class":87},"(my_math.add(",[77,173863,2120],{"class":94},[77,173865,680],{"class":87},[77,173867,2696],{"class":94},[77,173869,32965],{"class":87},[14,173871,173873],{"id":173872},"_911-import导入","9.11 import导入",[19,173875,173877],{"id":173876},"_9111-导入模块","9.11.1 导入模块",[67,173879,173881],{"className":32846,"code":173880,"language":32848,"meta":72,"style":72},"import random\n\nprint(random.randint(1, 10))\n",[74,173882,173883,173889,173893],{"__ignoreMap":72},[77,173884,173885,173887],{"class":79,"line":80},[77,173886,32860],{"class":2123},[77,173888,47794],{"class":87},[77,173890,173891],{"class":79,"line":91},[77,173892,4875],{"emptyLinePlaceholder":2549},[77,173894,173895,173897,173900,173902,173904,173906],{"class":79,"line":107},[77,173896,32883],{"class":94},[77,173898,173899],{"class":87},"(random.randint(",[77,173901,2120],{"class":94},[77,173903,680],{"class":87},[77,173905,3059],{"class":94},[77,173907,32965],{"class":87},[19,173909,173911],{"id":173910},"_9112-导入指定内容","9.11.2 导入指定内容",[67,173913,173915],{"className":32846,"code":173914,"language":32848,"meta":72,"style":72},"from random import randint\n\nprint(randint(1, 10))\n",[74,173916,173917,173928,173932],{"__ignoreMap":72},[77,173918,173919,173921,173923,173925],{"class":79,"line":80},[77,173920,33205],{"class":2123},[77,173922,60244],{"class":87},[77,173924,32860],{"class":2123},[77,173926,173927],{"class":87}," randint\n",[77,173929,173930],{"class":79,"line":91},[77,173931,4875],{"emptyLinePlaceholder":2549},[77,173933,173934,173936,173939,173941,173943,173945],{"class":79,"line":107},[77,173935,32883],{"class":94},[77,173937,173938],{"class":87},"(randint(",[77,173940,2120],{"class":94},[77,173942,680],{"class":87},[77,173944,3059],{"class":94},[77,173946,32965],{"class":87},[19,173948,173950],{"id":173949},"_9113-起别名","9.11.3 起别名",[67,173952,173954],{"className":32846,"code":173953,"language":32848,"meta":72,"style":72},"import random as rd\n\nprint(rd.randint(1, 10))\n",[74,173955,173956,173967,173971],{"__ignoreMap":72},[77,173957,173958,173960,173962,173964],{"class":79,"line":80},[77,173959,32860],{"class":2123},[77,173961,60244],{"class":87},[77,173963,33850],{"class":2123},[77,173965,173966],{"class":87}," rd\n",[77,173968,173969],{"class":79,"line":91},[77,173970,4875],{"emptyLinePlaceholder":2549},[77,173972,173973,173975,173978,173980,173982,173984],{"class":79,"line":107},[77,173974,32883],{"class":94},[77,173976,173977],{"class":87},"(rd.randint(",[77,173979,2120],{"class":94},[77,173981,680],{"class":87},[77,173983,3059],{"class":94},[77,173985,32965],{"class":87},[67,173987,173989],{"className":32846,"code":173988,"language":32848,"meta":72,"style":72},"from random import randint as rint\n\nprint(rint(1, 10))\n",[74,173990,173991,174007,174011],{"__ignoreMap":72},[77,173992,173993,173995,173997,173999,174002,174004],{"class":79,"line":80},[77,173994,33205],{"class":2123},[77,173996,60244],{"class":87},[77,173998,32860],{"class":2123},[77,174000,174001],{"class":87}," randint ",[77,174003,33850],{"class":2123},[77,174005,174006],{"class":87}," rint\n",[77,174008,174009],{"class":79,"line":91},[77,174010,4875],{"emptyLinePlaceholder":2549},[77,174012,174013,174015,174018,174020,174022,174024],{"class":79,"line":107},[77,174014,32883],{"class":94},[77,174016,174017],{"class":87},"(rint(",[77,174019,2120],{"class":94},[77,174021,680],{"class":87},[77,174023,3059],{"class":94},[77,174025,32965],{"class":87},[19,174027,174029],{"id":174028},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[67,174031,174033],{"className":32846,"code":174032,"language":32848,"meta":72,"style":72},"from random import *\n",[74,174034,174035],{"__ignoreMap":72},[77,174036,174037,174039,174041,174043],{"class":79,"line":80},[77,174038,33205],{"class":2123},[77,174040,60244],{"class":87},[77,174042,32860],{"class":2123},[77,174044,174045],{"class":2123}," *\n",[24,174047,174048],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174050,174052],{"id":174051},"_912-常用内置模块","9.12 常用内置模块",[19,174054,174056],{"id":174055},"_9121-random","9.12.1 random",[67,174058,174060],{"className":32846,"code":174059,"language":32848,"meta":72,"style":72},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[74,174061,174062,174068,174072,174086,174105],{"__ignoreMap":72},[77,174063,174064,174066],{"class":79,"line":80},[77,174065,32860],{"class":2123},[77,174067,47794],{"class":87},[77,174069,174070],{"class":79,"line":91},[77,174071,4875],{"emptyLinePlaceholder":2549},[77,174073,174074,174076,174078,174080,174082,174084],{"class":79,"line":107},[77,174075,32883],{"class":94},[77,174077,173899],{"class":87},[77,174079,2120],{"class":94},[77,174081,680],{"class":87},[77,174083,3059],{"class":94},[77,174085,32965],{"class":87},[77,174087,174088,174090,174093,174095,174097,174099,174101,174103],{"class":79,"line":191},[77,174089,32883],{"class":94},[77,174091,174092],{"class":87},"(random.choice([",[77,174094,151986],{"class":271},[77,174096,680],{"class":87},[77,174098,153034],{"class":271},[77,174100,680],{"class":87},[77,174102,161829],{"class":271},[77,174104,35610],{"class":87},[77,174106,174107,174109,174112,174114,174116,174118,174120,174122,174124,174126,174128,174130,174132,174134],{"class":79,"line":1543},[77,174108,32883],{"class":94},[77,174110,174111],{"class":87},"(random.sample([",[77,174113,2120],{"class":94},[77,174115,680],{"class":87},[77,174117,2696],{"class":94},[77,174119,680],{"class":87},[77,174121,2690],{"class":94},[77,174123,680],{"class":87},[77,174125,2907],{"class":94},[77,174127,680],{"class":87},[77,174129,2933],{"class":94},[77,174131,114635],{"class":87},[77,174133,2696],{"class":94},[77,174135,32965],{"class":87},[19,174137,174139],{"id":174138},"_9122-time","9.12.2 time",[67,174141,174143],{"className":32846,"code":174142,"language":32848,"meta":72,"style":72},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[74,174144,174145,174151,174155,174162,174170],{"__ignoreMap":72},[77,174146,174147,174149],{"class":79,"line":80},[77,174148,32860],{"class":2123},[77,174150,34296],{"class":87},[77,174152,174153],{"class":79,"line":91},[77,174154,4875],{"emptyLinePlaceholder":2549},[77,174156,174157,174159],{"class":79,"line":107},[77,174158,32883],{"class":94},[77,174160,174161],{"class":87},"(time.time())\n",[77,174163,174164,174166,174168],{"class":79,"line":191},[77,174165,97507],{"class":87},[77,174167,2120],{"class":94},[77,174169,2628],{"class":87},[77,174171,174172,174174,174176,174179],{"class":79,"line":1543},[77,174173,32883],{"class":94},[77,174175,2622],{"class":87},[77,174177,174178],{"class":271},"\"1秒后执行\"",[77,174180,2628],{"class":87},[19,174182,174184],{"id":174183},"_9123-datetime","9.12.3 datetime",[67,174186,174188],{"className":32846,"code":174187,"language":32848,"meta":72,"style":72},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[74,174189,174190,174202,174206,174216,174223],{"__ignoreMap":72},[77,174191,174192,174194,174197,174199],{"class":79,"line":80},[77,174193,33205],{"class":2123},[77,174195,174196],{"class":87}," datetime ",[77,174198,32860],{"class":2123},[77,174200,174201],{"class":87}," datetime\n",[77,174203,174204],{"class":79,"line":91},[77,174205,4875],{"emptyLinePlaceholder":2549},[77,174207,174208,174211,174213],{"class":79,"line":107},[77,174209,174210],{"class":87},"now ",[77,174212,268],{"class":2123},[77,174214,174215],{"class":87}," datetime.now()\n",[77,174217,174218,174220],{"class":79,"line":191},[77,174219,32883],{"class":94},[77,174221,174222],{"class":87},"(now)\n",[77,174224,174225,174227,174230,174233,174235,174238],{"class":79,"line":1543},[77,174226,32883],{"class":94},[77,174228,174229],{"class":87},"(now.strftime(",[77,174231,174232],{"class":271},"\"%Y-%m-",[77,174234,158789],{"class":94},[77,174236,174237],{"class":271}," %H:%M:%S\"",[77,174239,32965],{"class":87},[19,174241,174243],{"id":174242},"_9124-os","9.12.4 os",[67,174245,174247],{"className":32846,"code":174246,"language":32848,"meta":72,"style":72},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[74,174248,174249,174255,174259,174266],{"__ignoreMap":72},[77,174250,174251,174253],{"class":79,"line":80},[77,174252,32860],{"class":2123},[77,174254,47771],{"class":87},[77,174256,174257],{"class":79,"line":91},[77,174258,4875],{"emptyLinePlaceholder":2549},[77,174260,174261,174263],{"class":79,"line":107},[77,174262,32883],{"class":94},[77,174264,174265],{"class":87},"(os.getcwd())\n",[77,174267,174268,174270,174273,174276],{"class":79,"line":191},[77,174269,32883],{"class":94},[77,174271,174272],{"class":87},"(os.listdir(",[77,174274,174275],{"class":271},"\".\"",[77,174277,32965],{"class":87},[19,174279,174281],{"id":174280},"_9125-sys","9.12.5 sys",[67,174283,174285],{"className":32846,"code":174284,"language":32848,"meta":72,"style":72},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[74,174286,174287,174294,174298,174305],{"__ignoreMap":72},[77,174288,174289,174291],{"class":79,"line":80},[77,174290,32860],{"class":2123},[77,174292,174293],{"class":87}," sys\n",[77,174295,174296],{"class":79,"line":91},[77,174297,4875],{"emptyLinePlaceholder":2549},[77,174299,174300,174302],{"class":79,"line":107},[77,174301,32883],{"class":94},[77,174303,174304],{"class":87},"(sys.version)\n",[77,174306,174307,174309],{"class":79,"line":191},[77,174308,32883],{"class":94},[77,174310,174311],{"class":87},"(sys.path)\n",[14,174313,174315,174316,174318,174319,2865],{"id":174314},"_913-if-name-main","9.13 if ",[27,174317,82247],{}," == \"",[27,174320,29],{},[24,174322,174323,174324,174327],{},"模块被直接运行和被导入时，",[74,174325,174326],{},"__name__"," 的值不同。",[24,174329,174330,174331,27086],{},"创建 ",[74,174332,174333],{},"my_module.py",[67,174335,174337],{"className":32846,"code":174336,"language":32848,"meta":72,"style":72},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[74,174338,174339,174347,174357,174361,174365,174377],{"__ignoreMap":72},[77,174340,174341,174343,174345],{"class":79,"line":80},[77,174342,34414],{"class":2123},[77,174344,7684],{"class":83},[77,174346,153191],{"class":87},[77,174348,174349,174351,174353,174355],{"class":79,"line":91},[77,174350,6565],{"class":2123},[77,174352,13342],{"class":87},[77,174354,3094],{"class":2123},[77,174356,153202],{"class":87},[77,174358,174359],{"class":79,"line":107},[77,174360,4875],{"emptyLinePlaceholder":2549},[77,174362,174363],{"class":79,"line":191},[77,174364,4875],{"emptyLinePlaceholder":2549},[77,174366,174367,174369,174371,174373,174375],{"class":79,"line":1543},[77,174368,4008],{"class":2123},[77,174370,33687],{"class":94},[77,174372,103994],{"class":2123},[77,174374,103997],{"class":271},[77,174376,6214],{"class":87},[77,174378,174379,174381,174383,174385,174387,174389],{"class":79,"line":1549},[77,174380,33766],{"class":94},[77,174382,168698],{"class":87},[77,174384,2120],{"class":94},[77,174386,680],{"class":87},[77,174388,2696],{"class":94},[77,174390,32965],{"class":87},[24,174392,174393],{},"作用：",[139,174395,174396,174399],{},[54,174397,174398],{},"直接运行该文件时，执行测试代码。",[54,174400,174401],{},"被其他文件导入时，不执行测试代码。",[24,174403,174404],{},"这是写模块时很常用的习惯。",[14,174406,174408],{"id":174407},"_914-包","9.14 包",[24,174410,174411,174412,174415],{},"包是包含 ",[74,174413,174414],{},"__init__.py"," 的目录，用于组织多个模块。",[24,174417,174418],{},"目录结构：",[67,174420,174423],{"className":174421,"code":174422,"language":7662,"meta":72},[7660],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[74,174424,174422],{"__ignoreMap":72},[24,174426,174427],{},"导入：",[67,174429,174431],{"className":32846,"code":174430,"language":32848,"meta":72,"style":72},"from utils.file_utils import read_file\n",[74,174432,174433],{"__ignoreMap":72},[77,174434,174435,174437,174440,174442],{"class":79,"line":80},[77,174436,33205],{"class":2123},[77,174438,174439],{"class":87}," utils.file_utils ",[77,174441,32860],{"class":2123},[77,174443,174444],{"class":87}," read_file\n",[24,174446,174447,174449],{},[74,174448,174414],{}," 可以为空，也可以写包初始化逻辑。",[14,174451,174453],{"id":174452},"_915-第三方包","9.15 第三方包",[24,174455,174456,174457,174459],{},"第三方包通过 ",[74,174458,26298],{}," 安装。",[67,174461,174463],{"className":26289,"code":174462,"language":26291,"meta":72,"style":72},"pip install requests\n",[74,174464,174465],{"__ignoreMap":72},[77,174466,174467,174469,174471],{"class":79,"line":80},[77,174468,26298],{"class":83},[77,174470,26301],{"class":271},[77,174472,148196],{"class":271},[24,174474,174475],{},"使用：",[67,174477,174479],{"className":32846,"code":174478,"language":32848,"meta":72,"style":72},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[74,174480,174481,174487,174491,174506],{"__ignoreMap":72},[77,174482,174483,174485],{"class":79,"line":80},[77,174484,32860],{"class":2123},[77,174486,148196],{"class":87},[77,174488,174489],{"class":79,"line":91},[77,174490,4875],{"emptyLinePlaceholder":2549},[77,174492,174493,174496,174498,174501,174504],{"class":79,"line":107},[77,174494,174495],{"class":87},"response ",[77,174497,268],{"class":2123},[77,174499,174500],{"class":87}," requests.get(",[77,174502,174503],{"class":271},"\"https:\u002F\u002Fwww.example.com\"",[77,174505,2628],{"class":87},[77,174507,174508,174510],{"class":79,"line":191},[77,174509,32883],{"class":94},[77,174511,174512],{"class":87},"(response.status_code)\n",[24,174514,174515],{},"查看已安装包：",[67,174517,174519],{"className":26289,"code":174518,"language":26291,"meta":72,"style":72},"pip list\n",[74,174520,174521],{"__ignoreMap":72},[77,174522,174523,174525],{"class":79,"line":80},[77,174524,26298],{"class":83},[77,174526,121387],{"class":271},[24,174528,174529],{},"导出项目依赖：",[67,174531,174532],{"className":26289,"code":148391,"language":26291,"meta":72,"style":72},[74,174533,174534],{"__ignoreMap":72},[77,174535,174536,174538,174540,174542],{"class":79,"line":80},[77,174537,26298],{"class":83},[77,174539,148400],{"class":271},[77,174541,28690],{"class":2123},[77,174543,148405],{"class":271},[24,174545,174546],{},"安装项目依赖：",[67,174548,174549],{"className":26289,"code":148411,"language":26291,"meta":72,"style":72},[74,174550,174551],{"__ignoreMap":72},[77,174552,174553,174555,174557,174559],{"class":79,"line":80},[77,174554,26298],{"class":83},[77,174556,26301],{"class":271},[77,174558,122071],{"class":94},[77,174560,148405],{"class":271},[14,174562,174564],{"id":174563},"_916-模块搜索路径","9.16 模块搜索路径",[24,174566,174567,174568,174571],{},"Python 导入模块时会在 ",[74,174569,174570],{},"sys.path"," 中查找。",[67,174573,174575],{"className":32846,"code":174574,"language":32848,"meta":72,"style":72},"import sys\n\nfor path in sys.path:\n    print(path)\n",[74,174576,174577,174583,174587,174599],{"__ignoreMap":72},[77,174578,174579,174581],{"class":79,"line":80},[77,174580,32860],{"class":2123},[77,174582,174293],{"class":87},[77,174584,174585],{"class":79,"line":91},[77,174586,4875],{"emptyLinePlaceholder":2549},[77,174588,174589,174591,174594,174596],{"class":79,"line":107},[77,174590,5500],{"class":2123},[77,174592,174593],{"class":87}," path ",[77,174595,28511],{"class":2123},[77,174597,174598],{"class":87}," sys.path:\n",[77,174600,174601,174603],{"class":79,"line":191},[77,174602,33766],{"class":94},[77,174604,171327],{"class":87},[24,174606,174607],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[24,174609,159721],{},[67,174611,174614],{"className":174612,"code":174613,"language":7662,"meta":72},[7660],"random.py\njson.py\ntime.py\n",[74,174615,174613],{"__ignoreMap":72},[24,174617,174618],{},"这些文件名可能导致导入异常。",[14,174620,174622],{"id":174621},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[24,174624,174418],{},[67,174626,174629],{"className":174627,"code":174628,"language":7662,"meta":72},[7660],"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",[74,174630,174628],{"__ignoreMap":72},[24,174632,174633,27086],{},[74,174634,174635],{},"utils\u002Ffile_utils.py",[67,174637,174639],{"className":32846,"code":174638,"language":32848,"meta":72,"style":72},"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",[74,174640,174641,174647,174657,174661,174665,174675,174685,174693,174699,174703,174730,174740,174744,174748,174758,174784],{"__ignoreMap":72},[77,174642,174643,174645],{"class":79,"line":80},[77,174644,32860],{"class":2123},[77,174646,149189],{"class":87},[77,174648,174649,174651,174653,174655],{"class":79,"line":91},[77,174650,33205],{"class":2123},[77,174652,110744],{"class":87},[77,174654,32860],{"class":2123},[77,174656,110749],{"class":87},[77,174658,174659],{"class":79,"line":107},[77,174660,4875],{"emptyLinePlaceholder":2549},[77,174662,174663],{"class":79,"line":191},[77,174664,4875],{"emptyLinePlaceholder":2549},[77,174666,174667,174669,174672],{"class":79,"line":1543},[77,174668,34414],{"class":2123},[77,174670,174671],{"class":83}," read_json",[77,174673,174674],{"class":87},"(path):\n",[77,174676,174677,174680,174682],{"class":79,"line":1549},[77,174678,174679],{"class":87},"    path ",[77,174681,268],{"class":2123},[77,174683,174684],{"class":87}," Path(path)\n",[77,174686,174687,174689,174691],{"class":79,"line":1566},[77,174688,5576],{"class":2123},[77,174690,41396],{"class":2123},[77,174692,171408],{"class":87},[77,174694,174695,174697],{"class":79,"line":1572},[77,174696,17224],{"class":2123},[77,174698,54296],{"class":87},[77,174700,174701],{"class":79,"line":1589},[77,174702,4875],{"emptyLinePlaceholder":2549},[77,174704,174705,174707,174709,174712,174714,174716,174718,174720,174722,174724,174726,174728],{"class":79,"line":1595},[77,174706,36644],{"class":2123},[77,174708,148889],{"class":94},[77,174710,174711],{"class":87},"(path, ",[77,174713,148899],{"class":271},[77,174715,680],{"class":87},[77,174717,148904],{"class":7691},[77,174719,268],{"class":2123},[77,174721,148909],{"class":271},[77,174723,16186],{"class":87},[77,174725,33850],{"class":2123},[77,174727,150251],{"class":7691},[77,174729,6214],{"class":87},[77,174731,174732,174734,174736,174738],{"class":79,"line":4088},[77,174733,17224],{"class":2123},[77,174735,150262],{"class":87},[77,174737,47820],{"class":7691},[77,174739,2628],{"class":87},[77,174741,174742],{"class":79,"line":4093},[77,174743,4875],{"emptyLinePlaceholder":2549},[77,174745,174746],{"class":79,"line":4099},[77,174747,4875],{"emptyLinePlaceholder":2549},[77,174749,174750,174752,174755],{"class":79,"line":4104},[77,174751,34414],{"class":2123},[77,174753,174754],{"class":83}," write_json",[77,174756,174757],{"class":87},"(path, data):\n",[77,174759,174760,174762,174764,174766,174768,174770,174772,174774,174776,174778,174780,174782],{"class":79,"line":4118},[77,174761,36644],{"class":2123},[77,174763,148889],{"class":94},[77,174765,174711],{"class":87},[77,174767,154074],{"class":271},[77,174769,680],{"class":87},[77,174771,148904],{"class":7691},[77,174773,268],{"class":2123},[77,174775,148909],{"class":271},[77,174777,16186],{"class":87},[77,174779,33850],{"class":2123},[77,174781,150251],{"class":7691},[77,174783,6214],{"class":87},[77,174785,174786,174789,174791,174793,174795,174797,174799,174801,174803,174805,174807],{"class":79,"line":4123},[77,174787,174788],{"class":87},"        json.dump(data, ",[77,174790,47820],{"class":7691},[77,174792,680],{"class":87},[77,174794,149235],{"class":7691},[77,174796,268],{"class":2123},[77,174798,36453],{"class":94},[77,174800,680],{"class":87},[77,174802,154110],{"class":7691},[77,174804,268],{"class":2123},[77,174806,2696],{"class":94},[77,174808,2628],{"class":87},[24,174810,174811,27086],{},[74,174812,156705],{},[67,174814,174816],{"className":32846,"code":174815,"language":32848,"meta":72,"style":72},"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",[74,174817,174818,174829,174833,174846,174866],{"__ignoreMap":72},[77,174819,174820,174822,174824,174826],{"class":79,"line":80},[77,174821,33205],{"class":2123},[77,174823,174439],{"class":87},[77,174825,32860],{"class":2123},[77,174827,174828],{"class":87}," read_json, write_json\n",[77,174830,174831],{"class":79,"line":91},[77,174832,4875],{"emptyLinePlaceholder":2549},[77,174834,174835,174837,174839,174842,174844],{"class":79,"line":107},[77,174836,161814],{"class":87},[77,174838,268],{"class":2123},[77,174840,174841],{"class":87}," read_json(",[77,174843,153929],{"class":271},[77,174845,2628],{"class":87},[77,174847,174848,174850,174852,174854,174856,174858,174860,174862,174864],{"class":79,"line":191},[77,174849,172632],{"class":87},[77,174851,65123],{"class":271},[77,174853,98],{"class":87},[77,174855,151986],{"class":271},[77,174857,680],{"class":87},[77,174859,153570],{"class":271},[77,174861,98],{"class":87},[77,174863,3601],{"class":94},[77,174865,167250],{"class":87},[77,174867,174868,174871,174873],{"class":79,"line":1543},[77,174869,174870],{"class":87},"write_json(",[77,174872,153929],{"class":271},[77,174874,174875],{"class":87},", students)\n",[14,174877,174879],{"id":174878},"_918-易错点","9.18 易错点",[139,174881,174882,174885,174890,174895,174898,174901],{},[54,174883,174884],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[54,174886,174887,174888,30853],{},"能指定异常类型就不要裸写 ",[74,174889,172992],{},[54,174891,174892,174894],{},[74,174893,173367],{}," 无论是否出错都会执行。",[54,174896,174897],{},"模块文件名不要和标准库重名。",[54,174899,174900],{},"导入自己写的模块时，要注意运行目录。",[54,174902,174903],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174905,174907],{"id":174906},"_919-本章练习","9.19 本章练习",[139,174909,174910,174913,174916,174922,174929],{},[54,174911,174912],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[54,174914,174915],{},"写函数读取文件，如果文件不存在则返回空字符串。",[54,174917,174330,174918,174921],{},[74,174919,174920],{},"math_utils.py","，实现加减乘除函数并导入使用。",[54,174923,174924,174925,174928],{},"创建一个 ",[74,174926,174927],{},"utils"," 包，把 JSON 读写函数放进去。",[54,174930,174931],{},"写一个程序，捕获除零异常和输入格式异常。",[2520,174933,174934],{},"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":72,"searchDepth":91,"depth":91,"links":174936},[174937,174938,174939,174940,174941,174942,174943,174944,174945,174946,174947,174953,174960,174962,174963,174964,174965,174966,174967],{"id":172789,"depth":91,"text":172790},{"id":172917,"depth":91,"text":172918},{"id":172966,"depth":91,"text":172967},{"id":173115,"depth":91,"text":173116},{"id":173287,"depth":91,"text":173288},{"id":173356,"depth":91,"text":173357},{"id":173467,"depth":91,"text":173468},{"id":173593,"depth":91,"text":173594},{"id":173718,"depth":91,"text":173719},{"id":173773,"depth":91,"text":173774},{"id":173872,"depth":91,"text":173873,"children":174948},[174949,174950,174951,174952],{"id":173876,"depth":107,"text":173877},{"id":173910,"depth":107,"text":173911},{"id":173949,"depth":107,"text":173950},{"id":174028,"depth":107,"text":174029},{"id":174051,"depth":91,"text":174052,"children":174954},[174955,174956,174957,174958,174959],{"id":174055,"depth":107,"text":174056},{"id":174138,"depth":107,"text":174139},{"id":174183,"depth":107,"text":174184},{"id":174242,"depth":107,"text":174243},{"id":174280,"depth":107,"text":174281},{"id":174314,"depth":91,"text":174961},"9.13 if name == \"main\"",{"id":174407,"depth":91,"text":174408},{"id":174452,"depth":91,"text":174453},{"id":174563,"depth":91,"text":174564},{"id":174621,"depth":91,"text":174622},{"id":174878,"depth":91,"text":174879},{"id":174906,"depth":91,"text":174907},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172781,"description":2546},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174974,"title":174975,"body":174976,"description":175139,"extension":2547,"meta":175140,"navigation":2549,"path":175141,"seo":175142,"stem":175143,"__hash__":175144},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174977,"toc":175134},[174978,174981,174984,174987,174998,175000,175074,175077,175080,175083,175086,175089,175092,175095,175098,175101,175104],[10,174979,174975],{"id":174980},"python教程",[24,174982,174983],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[24,174985,174986],{},"建议学习环境：",[139,174988,174989,174992,174995],{},[54,174990,174991],{},"Python 版本：Python 3.10 及以上。",[54,174993,174994],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[54,174996,174997],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174999,119510],{"id":119510},[139,175001,175002,175008,175014,175020,175026,175032,175038,175044,175050,175056,175062,175068],{},[54,175003,175004],{},[417,175005,175007],{"href":175006},".\u002Fch1-Python","Python环境与第一个程序",[54,175009,175010],{},[417,175011,175013],{"href":175012},".\u002Fch2","基础语法、变量与字符串",[54,175015,175016],{},[417,175017,175019],{"href":175018},".\u002Fch3","判断语句",[54,175021,175022],{},[417,175023,175025],{"href":175024},".\u002Fch4","循环语句",[54,175027,175028],{},[417,175029,175031],{"href":175030},".\u002Fch5","函数基础",[54,175033,175034],{},[417,175035,175037],{"href":175036},".\u002Fch6","数据容器",[54,175039,175040],{},[417,175041,175043],{"href":175042},".\u002Fch7","函数进阶",[54,175045,175046],{},[417,175047,175049],{"href":175048},".\u002Fch8","文件操作",[54,175051,175052],{},[417,175053,175055],{"href":175054},".\u002Fch9","异常、模块与包",[54,175057,175058],{},[417,175059,175061],{"href":175060},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[54,175063,175064],{},[417,175065,175067],{"href":175066},".\u002Fch11","面向对象基础",[54,175069,175070],{},[417,175071,175073],{"href":175072},".\u002Fch12","综合案例与复习路线",[14,175075,175076],{"id":175076},"学习路线",[24,175078,175079],{},"第一阶段：能运行程序。",[24,175081,175082],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[24,175084,175085],{},"第二阶段：能组织数据。",[24,175087,175088],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[24,175090,175091],{},"第三阶段：能封装逻辑。",[24,175093,175094],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[24,175096,175097],{},"第四阶段：能做小项目。",[24,175099,175100],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175102,175103],{"id":175103},"参考资料",[139,175105,175106,175113,175120,175127],{},[54,175107,175108,175109],{},"黑马程序员 Python 入门教程推荐：",[417,175110,175111],{"href":175111,"rel":175112},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26332],[54,175114,175115,175116],{},"Python 官方中文教程：",[417,175117,175118],{"href":175118,"rel":175119},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26332],[54,175121,175122,175123],{},"Python 标准库文档：",[417,175124,175125],{"href":175125,"rel":175126},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26332],[54,175128,175129,175130],{},"pyecharts 文档：",[417,175131,175132],{"href":175132,"rel":175133},"https:\u002F\u002Fpyecharts.org\u002F",[26332],{"title":72,"searchDepth":91,"depth":91,"links":175135},[175136,175137,175138],{"id":119510,"depth":91,"text":119510},{"id":175076,"depth":91,"text":175076},{"id":175103,"depth":91,"text":175103},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25847},"\u002Fwiki\u002F2024-10-10-python",{"title":174975,"description":175139},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331438869]