[{"data":1,"prerenderedAt":175415},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-27-linux-ji-ben-cao-zuo\u002Fch3-an-zhuang-bi-bei-pei-zhi":3,"wiki-doc-nav":3053},{"id":4,"title":5,"body":6,"description":3046,"extension":3047,"meta":3048,"navigation":115,"path":3049,"seo":3050,"stem":3051,"__hash__":3052},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":8,"toc":3018},"minimark",[9,13,18,29,34,40,44,273,277,283,287,291,294,297,305,310,313,316,321,358,363,367,444,447,452,456,459,499,502,511,529,534,542,662,667,670,697,702,706,715,766,773,777,780,794,801,835,840,844,867,870,875,879,882,885,888,930,934,937,940,981,985,989,992,997,1002,1005,1028,1031,1039,1044,1047,1052,1057,1060,1065,1069,1076,1101,1106,1168,1176,1181,1186,1189,1194,1197,1202,1207,1225,1230,1236,1241,1255,1259,1262,1265,1268,1312,1315,1320,1428,1431,1436,1440,1444,1481,1485,1490,1495,1541,1545,1590,1594,1601,1610,1665,1668,1746,1749,1773,1777,1780,1785,1790,1798,1801,1806,1811,1818,1821,1826,1835,1838,1843,1846,1919,1924,1927,1932,1935,1940,1943,1948,1951,1956,1961,1964,2043,2046,2059,2064,2067,2081,2084,2115,2120,2150,2153,2158,2162,2167,2176,2179,2184,2187,2192,2195,2198,2203,2206,2211,2216,2219,2224,2227,2354,2359,2392,2395,2400,2405,2422,2425,2468,2471,2498,2503,2517,2660,2664,2669,2683,2686,2739,2742,2772,2775,2791,2796,2810,2813,2880,2885,2894,2899,2902,2915,2920,2927,2953,2956,2961,2964,2983,2988,2995,3007,3014],[10,11,5],"h1",{"id":12},"_3-安装必备配置",[14,15,17],"h2",{"id":16},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[19,20,25],"pre",{"className":21,"code":23,"language":24},[22],"language-text","  打开下方网站（注意，该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","text",[26,27,23],"code",{"__ignoreMap":28},"",[30,31,33],"h3",{"id":32},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[19,35,38],{"className":36,"code":37,"language":24},[22],"  输入以下命令\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",[26,39,37],{"__ignoreMap":28},[30,41,43],{"id":42},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[19,45,49],{"className":46,"code":47,"language":48,"meta":28,"style":28},"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",[26,50,51,67,80,95,110,117,128,134,139,144,150,155,171,176,182,187,199,204,222,227,239,244,250,255,264],{"__ignoreMap":28},[52,53,56,60,64],"span",{"class":54,"line":55},"line",1,[52,57,59],{"class":58},"sScJk","sudo",[52,61,63],{"class":62},"sZZnC"," apt",[52,65,66],{"class":62}," update\n",[52,68,70,72,74,77],{"class":54,"line":69},2,[52,71,59],{"class":58},[52,73,63],{"class":62},[52,75,76],{"class":62}," install",[52,78,79],{"class":62}," vim\n",[52,81,83,85,88,92],{"class":54,"line":82},3,[52,84,59],{"class":58},[52,86,87],{"class":62}," rm",[52,89,91],{"class":90},"sj4cs"," -rf",[52,93,94],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list\n",[52,96,98,100,102,104,107],{"class":54,"line":97},4,[52,99,59],{"class":58},[52,101,87],{"class":62},[52,103,91],{"class":90},[52,105,106],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[52,108,109],{"class":90},"**\n",[52,111,113],{"class":54,"line":112},5,[52,114,116],{"emptyLinePlaceholder":115},true,"\n",[52,118,120,122,125],{"class":54,"line":119},6,[52,121,59],{"class":58},[52,123,124],{"class":62}," vim",[52,126,127],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[52,129,131],{"class":54,"line":130},7,[52,132,133],{"class":62},"```\n",[52,135,137],{"class":54,"line":136},8,[52,138,116],{"emptyLinePlaceholder":115},[52,140,142],{"class":54,"line":141},9,[52,143,116],{"emptyLinePlaceholder":115},[52,145,147],{"class":54,"line":146},10,[52,148,149],{"class":58},"选择好Ubuntu版本后，复制下方的内容。\n",[52,151,153],{"class":54,"line":152},11,[52,154,116],{"emptyLinePlaceholder":115},[52,156,158,162,165,168],{"class":54,"line":157},12,[52,159,161],{"class":160},"szBVR","!",[52,163,164],{"class":62},"[](",[52,166,167],{"class":58},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[52,169,170],{"class":62},")\n",[52,172,174],{"class":54,"line":173},13,[52,175,116],{"emptyLinePlaceholder":115},[52,177,179],{"class":54,"line":178},14,[52,180,181],{"class":58},"粘贴进去\n",[52,183,185],{"class":54,"line":184},15,[52,186,116],{"emptyLinePlaceholder":115},[52,188,190,192,194,197],{"class":54,"line":189},16,[52,191,161],{"class":160},[52,193,164],{"class":62},[52,195,196],{"class":58},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[52,198,170],{"class":62},[52,200,202],{"class":54,"line":201},17,[52,203,116],{"emptyLinePlaceholder":115},[52,205,207,210,213,216,219],{"class":54,"line":206},18,[52,208,209],{"class":58},"按一下ESC，然后英文冒号，输入",[52,211,212],{"class":62}," `",[52,214,215],{"class":58},":wq!",[52,217,218],{"class":62},"`",[52,220,221],{"class":58},"然后回车\n",[52,223,225],{"class":54,"line":224},19,[52,226,116],{"emptyLinePlaceholder":115},[52,228,230,232,234,237],{"class":54,"line":229},20,[52,231,161],{"class":160},[52,233,164],{"class":62},[52,235,236],{"class":58},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[52,238,170],{"class":62},[52,240,242],{"class":54,"line":241},21,[52,243,116],{"emptyLinePlaceholder":115},[52,245,247],{"class":54,"line":246},22,[52,248,249],{"class":58},"输入以下命令\n",[52,251,253],{"class":54,"line":252},23,[52,254,116],{"emptyLinePlaceholder":115},[52,256,258,261],{"class":54,"line":257},24,[52,259,260],{"class":62},"```",[52,262,263],{"class":58},"Bash\n",[52,265,267,269,271],{"class":54,"line":266},25,[52,268,59],{"class":58},[52,270,63],{"class":62},[52,272,66],{"class":62},[274,275,276],"p",{},"这里被替换成对应学校则成功",[274,278,279],{},[280,281],"img",{"alt":28,"src":282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,284,286],{"id":285},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[30,288,290],{"id":289},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[274,292,293],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[274,295,296],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[274,298,299],{},[300,301,302],"a",{"href":302,"rel":303},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[304],"nofollow",[274,306,307],{},[280,308],{"alt":28,"src":309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[274,311,312],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[274,314,315],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[274,317,318],{},[280,319],{"alt":28,"src":320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[19,322,326],{"className":323,"code":324,"language":325,"meta":28,"style":28},"language-Bash shiki shiki-themes github-light github-dark","#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n","Bash",[26,327,328,334,342,347],{"__ignoreMap":28},[52,329,330],{"class":54,"line":55},[52,331,333],{"class":332},"sJ8bj","#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[52,335,336,339],{"class":54,"line":69},[52,337,338],{"class":90},"cd",[52,340,341],{"class":62}," ~\u002FDownloads\n",[52,343,344],{"class":54,"line":82},[52,345,346],{"class":332},"#下方chrome安装包名不一定是这个，根据名字来看\n",[52,348,349,351,353,355],{"class":54,"line":97},[52,350,59],{"class":58},[52,352,63],{"class":62},[52,354,76],{"class":62},[52,356,357],{"class":62}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[274,359,360],{},[280,361],{"alt":28,"src":362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[30,364,366],{"id":365},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[19,368,370],{"className":323,"code":369,"language":325,"meta":28,"style":28},"# 老版\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",[26,371,372,377,385,396,401,405,410,420,428,439],{"__ignoreMap":28},[52,373,374],{"class":54,"line":55},[52,375,376],{"class":332},"# 老版\n",[52,378,379,381,383],{"class":54,"line":69},[52,380,59],{"class":58},[52,382,63],{"class":62},[52,384,66],{"class":62},[52,386,387,389,391,393],{"class":54,"line":82},[52,388,59],{"class":58},[52,390,63],{"class":62},[52,392,76],{"class":62},[52,394,395],{"class":62}," neofetch\n",[52,397,398],{"class":54,"line":97},[52,399,400],{"class":58},"neofetch\n",[52,402,403],{"class":54,"line":112},[52,404,116],{"emptyLinePlaceholder":115},[52,406,407],{"class":54,"line":119},[52,408,409],{"class":332},"# 新版\n",[52,411,412,414,417],{"class":54,"line":130},[52,413,59],{"class":58},[52,415,416],{"class":62}," add-apt-repository",[52,418,419],{"class":62}," ppa:zhangsongcui3371\u002Ffastfetch\n",[52,421,422,424,426],{"class":54,"line":136},[52,423,59],{"class":58},[52,425,63],{"class":62},[52,427,66],{"class":62},[52,429,430,432,434,436],{"class":54,"line":141},[52,431,59],{"class":58},[52,433,63],{"class":62},[52,435,76],{"class":62},[52,437,438],{"class":62}," fastfetch\n",[52,440,441],{"class":54,"line":146},[52,442,443],{"class":58},"fastfetch\n",[274,445,446],{},"这里显示，一共有3162个debian的程序，7个snap程序",[274,448,449],{},[280,450],{"alt":28,"src":451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[30,453,455],{"id":454},"_323-移除snap应用","3.2.3 移除snap应用",[274,457,458],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[19,460,462],{"className":323,"code":461,"language":325,"meta":28,"style":28},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[26,463,464,477,488],{"__ignoreMap":28},[52,465,466,468,471,474],{"class":54,"line":55},[52,467,59],{"class":58},[52,469,470],{"class":62}," systemctl",[52,472,473],{"class":62}," disable",[52,475,476],{"class":62}," snapd.service\n",[52,478,479,481,483,485],{"class":54,"line":69},[52,480,59],{"class":58},[52,482,470],{"class":62},[52,484,473],{"class":62},[52,486,487],{"class":62}," snapd.socket\n",[52,489,490,492,494,496],{"class":54,"line":82},[52,491,59],{"class":58},[52,493,470],{"class":62},[52,495,473],{"class":62},[52,497,498],{"class":62}," snapd.seeded.service\n",[274,500,501],{},"然后查看snap应用列表",[274,503,504,505,510],{},"根据你安装的选择不同（最小安装或普通安装），有",[300,506,509],{"href":507,"rel":508},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[304],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[19,512,514],{"className":323,"code":513,"language":325,"meta":28,"style":28},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[26,515,516,521],{"__ignoreMap":28},[52,517,518],{"class":54,"line":55},[52,519,520],{"class":332},"# 查询当前系统上snap安装了哪些app\n",[52,522,523,526],{"class":54,"line":69},[52,524,525],{"class":58},"snap",[52,527,528],{"class":62}," list\n",[274,530,531],{},[280,532],{"alt":28,"src":533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[274,535,536,537,541],{},"卸载掉图中所有应用，按照 ",[538,539,540],"strong",{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[19,543,545],{"className":323,"code":544,"language":325,"meta":28,"style":28},"#移除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",[26,546,547,552,565,570,581,586,597,602,613,618,624,629,640,651],{"__ignoreMap":28},[52,548,549],{"class":54,"line":55},[52,550,551],{"class":332},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[52,553,554,556,559,562],{"class":54,"line":69},[52,555,59],{"class":58},[52,557,558],{"class":62}," snap",[52,560,561],{"class":62}," remove",[52,563,564],{"class":62}," snap-store\n",[52,566,567],{"class":54,"line":82},[52,568,569],{"class":332},"#移除firefox浏览器\n",[52,571,572,574,576,578],{"class":54,"line":97},[52,573,59],{"class":58},[52,575,558],{"class":62},[52,577,561],{"class":62},[52,579,580],{"class":62}," firefox\n",[52,582,583],{"class":54,"line":112},[52,584,585],{"class":332},"#移除gnome-42-2204\n",[52,587,588,590,592,594],{"class":54,"line":119},[52,589,59],{"class":58},[52,591,558],{"class":62},[52,593,561],{"class":62},[52,595,596],{"class":62}," gnome-42-2204\n",[52,598,599],{"class":54,"line":130},[52,600,601],{"class":332},"#移除gtk-common-themes\n",[52,603,604,606,608,610],{"class":54,"line":136},[52,605,59],{"class":58},[52,607,558],{"class":62},[52,609,561],{"class":62},[52,611,612],{"class":62}," gtk-common-themes\n",[52,614,615],{"class":54,"line":141},[52,616,617],{"class":332},"#移除其它...\n",[52,619,620],{"class":54,"line":146},[52,621,623],{"class":622},"sVt8B"," \n",[52,625,626],{"class":54,"line":152},[52,627,628],{"class":332},"#移除core22,bare以及snapd\n",[52,630,631,633,635,637],{"class":54,"line":157},[52,632,59],{"class":58},[52,634,558],{"class":62},[52,636,561],{"class":62},[52,638,639],{"class":62}," core22\n",[52,641,642,644,646,648],{"class":54,"line":173},[52,643,59],{"class":58},[52,645,558],{"class":62},[52,647,561],{"class":62},[52,649,650],{"class":62}," bare\n",[52,652,653,655,657,659],{"class":54,"line":178},[52,654,59],{"class":58},[52,656,558],{"class":62},[52,658,561],{"class":62},[52,660,661],{"class":62}," snapd\n",[274,663,664],{},[280,665],{"alt":28,"src":666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[274,668,669],{},"输入以下命令查看是否还有snap包",[19,671,673],{"className":323,"code":672,"language":325,"meta":28,"style":28},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[26,674,675,681,685,689,693],{"__ignoreMap":28},[52,676,677,679],{"class":54,"line":55},[52,678,525],{"class":58},[52,680,528],{"class":62},[52,682,683],{"class":54,"line":69},[52,684,376],{"class":332},[52,686,687],{"class":54,"line":82},[52,688,400],{"class":58},[52,690,691],{"class":54,"line":97},[52,692,409],{"class":332},[52,694,695],{"class":54,"line":112},[52,696,443],{"class":58},[274,698,699],{},[280,700],{"alt":28,"src":701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[30,703,705],{"id":704},"_324-移除snap","3.2.4 移除snap",[274,707,708,709,714],{},"在删除掉",[300,710,713],{"href":711,"rel":712},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[304],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[19,716,718],{"className":323,"code":717,"language":325,"meta":28,"style":28}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[26,719,720,725,739,744,755],{"__ignoreMap":28},[52,721,722],{"class":54,"line":55},[52,723,724],{"class":332}," #使用apt移除掉snap\n",[52,726,727,729,731,734,737],{"class":54,"line":69},[52,728,59],{"class":58},[52,730,63],{"class":62},[52,732,733],{"class":62}," autoremove",[52,735,736],{"class":90}," --purge",[52,738,661],{"class":62},[52,740,741],{"class":54,"line":82},[52,742,743],{"class":332},"#移除snapd的一些目录\n",[52,745,746,748,750,752],{"class":54,"line":97},[52,747,59],{"class":58},[52,749,87],{"class":62},[52,751,91],{"class":90},[52,753,754],{"class":62}," \u002Fvar\u002Fcache\u002Fsnapd\n",[52,756,757,759,761,763],{"class":54,"line":112},[52,758,59],{"class":58},[52,760,87],{"class":62},[52,762,91],{"class":90},[52,764,765],{"class":62}," ~\u002Fsnap\n",[274,767,768,769,772],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[26,770,771],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[30,774,776],{"id":775},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[274,778,779],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[19,781,783],{"className":323,"code":782,"language":325,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[26,784,785],{"__ignoreMap":28},[52,786,787,789,791],{"class":54,"line":55},[52,788,59],{"class":58},[52,790,124],{"class":62},[52,792,793],{"class":62}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[274,795,796,797,800],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[26,798,799],{},":wq"," 回车",[19,802,804],{"className":323,"code":803,"language":325,"meta":28,"style":28},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[26,805,806,813,827],{"__ignoreMap":28},[52,807,808,811],{"class":54,"line":55},[52,809,810],{"class":58},"Package:",[52,812,661],{"class":62},[52,814,815,818,821,824],{"class":54,"line":69},[52,816,817],{"class":58},"Pin:",[52,819,820],{"class":62}," release",[52,822,823],{"class":62}," a=",[52,825,826],{"class":90},"*\n",[52,828,829,832],{"class":54,"line":82},[52,830,831],{"class":58},"Pin-Priority:",[52,833,834],{"class":90}," -10\n",[274,836,837],{},[280,838],{"alt":28,"src":839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[30,841,843],{"id":842},"_326-测试是否成功","3.2.6 测试是否成功",[19,845,847],{"className":323,"code":846,"language":325,"meta":28,"style":28},"sudo apt update\nsudo apt install firefox\n",[26,848,849,857],{"__ignoreMap":28},[52,850,851,853,855],{"class":54,"line":55},[52,852,59],{"class":58},[52,854,63],{"class":62},[52,856,66],{"class":62},[52,858,859,861,863,865],{"class":54,"line":69},[52,860,59],{"class":58},[52,862,63],{"class":62},[52,864,76],{"class":62},[52,866,580],{"class":62},[274,868,869],{},"这里提示snapd无法被安装，就证明成功了",[274,871,872],{},[280,873],{"alt":28,"src":874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[30,876,878],{"id":877},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[274,880,881],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[274,883,884],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[274,886,887],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[19,889,891],{"className":323,"code":890,"language":325,"meta":28,"style":28},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[26,892,893,898,907,912,920],{"__ignoreMap":28},[52,894,895],{"class":54,"line":55},[52,896,897],{"class":332},"# 添加Mozilla提供的源\n",[52,899,900,902,904],{"class":54,"line":69},[52,901,59],{"class":58},[52,903,416],{"class":62},[52,905,906],{"class":62}," ppa:mozillateam\u002Fppa\n",[52,908,909],{"class":54,"line":82},[52,910,911],{"class":332},"# 安装Firefox\n",[52,913,914,916,918],{"class":54,"line":97},[52,915,59],{"class":58},[52,917,63],{"class":62},[52,919,66],{"class":62},[52,921,922,924,926,928],{"class":54,"line":112},[52,923,59],{"class":58},[52,925,63],{"class":62},[52,927,76],{"class":62},[52,929,580],{"class":62},[30,931,933],{"id":932},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[274,935,936],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[274,938,939],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[19,941,943],{"className":323,"code":942,"language":325,"meta":28,"style":28},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[26,944,945,950,960,968,972],{"__ignoreMap":28},[52,946,947],{"class":54,"line":55},[52,948,949],{"class":332},"#删掉禁止安装snap的配置文件\n",[52,951,952,954,956,958],{"class":54,"line":69},[52,953,59],{"class":58},[52,955,87],{"class":62},[52,957,91],{"class":90},[52,959,793],{"class":62},[52,961,962,964,966],{"class":54,"line":82},[52,963,59],{"class":58},[52,965,63],{"class":62},[52,967,66],{"class":62},[52,969,970],{"class":54,"line":97},[52,971,116],{"emptyLinePlaceholder":115},[52,973,974,976,978],{"class":54,"line":112},[52,975,59],{"class":58},[52,977,63],{"class":62},[52,979,980],{"class":62}," dist-update\n",[14,982,984],{"id":983},"_33-中文输入法","3.3 中文输入法",[30,986,988],{"id":987},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[274,990,991],{},"官网下载搜狗输入法",[274,993,994],{},[280,995],{"alt":28,"src":996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[274,998,999],{},[280,1000],{"alt":28,"src":1001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[274,1003,1004],{},"打开终端输入如下",[19,1006,1008],{"className":323,"code":1007,"language":325,"meta":28,"style":28},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[26,1009,1010,1017],{"__ignoreMap":28},[52,1011,1012,1014],{"class":54,"line":55},[52,1013,338],{"class":90},[52,1015,1016],{"class":62}," ~\u002FDownloads\u002F\n",[52,1018,1019,1021,1023,1025],{"class":54,"line":69},[52,1020,59],{"class":58},[52,1022,63],{"class":62},[52,1024,76],{"class":62},[52,1026,1027],{"class":62}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[274,1029,1030],{},"打开Fcitx",[274,1032,1033,1036],{},[280,1034],{"alt":28,"src":1035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[280,1037],{"alt":28,"src":1038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[274,1040,1041],{},[280,1042],{"alt":28,"src":1043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[274,1045,1046],{},"添加搜狗输入法",[274,1048,1049],{},[280,1050],{"alt":28,"src":1051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[274,1053,1054],{},[280,1055],{"alt":28,"src":1056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[274,1058,1059],{},"将搜狗输入法设置为唯一输入法",[274,1061,1062],{},[280,1063],{"alt":28,"src":1064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[30,1066,1068],{"id":1067},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1070,1071,1072],"ol",{},[1073,1074,1075],"li",{},"卸载旧输入法",[19,1077,1079],{"className":46,"code":1078,"language":48,"meta":28,"style":28},"sudo apt purge fcitx* ibus*\n",[26,1080,1081],{"__ignoreMap":28},[52,1082,1083,1085,1087,1090,1093,1096,1099],{"class":54,"line":55},[52,1084,59],{"class":58},[52,1086,63],{"class":62},[52,1088,1089],{"class":62}," purge",[52,1091,1092],{"class":62}," fcitx",[52,1094,1095],{"class":90},"*",[52,1097,1098],{"class":62}," ibus",[52,1100,826],{"class":90},[1070,1102,1103],{"start":69},[1073,1104,1105],{},"安装Fcitx5",[19,1107,1109],{"className":323,"code":1108,"language":325,"meta":28,"style":28},"# 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",[26,1110,1111,1116,1130,1134,1139,1148,1156],{"__ignoreMap":28},[52,1112,1113],{"class":54,"line":55},[52,1114,1115],{"class":332},"# Ubuntu22.04及以上、Debian12及以上\n",[52,1117,1118,1120,1122,1124,1127],{"class":54,"line":69},[52,1119,59],{"class":58},[52,1121,63],{"class":62},[52,1123,76],{"class":62},[52,1125,1126],{"class":62}," fcitx5",[52,1128,1129],{"class":62}," fcitx5-chinese-addons\n",[52,1131,1132],{"class":54,"line":82},[52,1133,116],{"emptyLinePlaceholder":115},[52,1135,1136],{"class":54,"line":97},[52,1137,1138],{"class":332},"# Ubuntu20.04\n",[52,1140,1141,1143,1145],{"class":54,"line":112},[52,1142,59],{"class":58},[52,1144,416],{"class":62},[52,1146,1147],{"class":62}," ppa:zhsj\u002Ffcitx5\n",[52,1149,1150,1152,1154],{"class":54,"line":119},[52,1151,59],{"class":58},[52,1153,63],{"class":62},[52,1155,66],{"class":62},[52,1157,1158,1160,1162,1164,1166],{"class":54,"line":130},[52,1159,59],{"class":58},[52,1161,63],{"class":62},[52,1163,76],{"class":62},[52,1165,1126],{"class":62},[52,1167,1129],{"class":62},[1070,1169,1170,1173],{"start":82},[1073,1171,1172],{},"Reboot System",[1073,1174,1175],{},"启动Fcitx5",[274,1177,1178],{},[280,1179],{"alt":28,"src":1180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1070,1182,1183],{"start":112},[1073,1184,1185],{},"修改一些设置",[274,1187,1188],{},"将Pinyin和Keyboard - English US加入到左边。",[274,1190,1191],{},[280,1192],{"alt":28,"src":1193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[274,1195,1196],{},"添加快捷键以便于更好切换中英文",[274,1198,1199],{},[280,1200],{"alt":28,"src":1201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1070,1203,1204],{"start":119},[1073,1205,1206],{},"重启",[19,1208,1210],{"className":46,"code":1209,"language":48,"meta":28,"style":28},"sudo shutdown -r now\n",[26,1211,1212],{"__ignoreMap":28},[52,1213,1214,1216,1219,1222],{"class":54,"line":55},[52,1215,59],{"class":58},[52,1217,1218],{"class":62}," shutdown",[52,1220,1221],{"class":90}," -r",[52,1223,1224],{"class":62}," now\n",[1070,1226,1227],{"start":130},[1073,1228,1229],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[274,1231,1232],{},[300,1233,1234],{"href":1234,"rel":1235},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[304],[1070,1237,1238],{"start":136},[1073,1239,1240],{},"再重启",[19,1242,1243],{"className":46,"code":1209,"language":48,"meta":28,"style":28},[26,1244,1245],{"__ignoreMap":28},[52,1246,1247,1249,1251,1253],{"class":54,"line":55},[52,1248,59],{"class":58},[52,1250,1218],{"class":62},[52,1252,1221],{"class":90},[52,1254,1224],{"class":62},[14,1256,1258],{"id":1257},"_34-pip3源替换","3.4 pip3源替换",[274,1260,1261],{},"非Debian系发行版需要做。",[274,1263,1264],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[274,1266,1267],{},"使用dnf的系统也可能不用做。",[19,1269,1271],{"className":323,"code":1270,"language":325,"meta":28,"style":28},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,1272,1273,1278,1286,1291,1296],{"__ignoreMap":28},[52,1274,1275],{"class":54,"line":55},[52,1276,1277],{"class":332},"# 检查是否已安装 pip\n",[52,1279,1280,1283],{"class":54,"line":69},[52,1281,1282],{"class":58},"pip3",[52,1284,1285],{"class":90}," --version\n",[52,1287,1288],{"class":54,"line":82},[52,1289,1290],{"class":332},"# 如果未安装，先安装 pip3（见下方）\n",[52,1292,1293],{"class":54,"line":97},[52,1294,1295],{"class":332},"# 配置 pip 使用清华源\n",[52,1297,1298,1300,1303,1306,1309],{"class":54,"line":112},[52,1299,1282],{"class":58},[52,1301,1302],{"class":62}," config",[52,1304,1305],{"class":62}," set",[52,1307,1308],{"class":62}," global.index-url",[52,1310,1311],{"class":62}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[274,1313,1314],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[274,1316,1317],{},[280,1318],{"alt":28,"src":1319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[19,1321,1323],{"className":323,"code":1322,"language":325,"meta":28,"style":28},"#安装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",[26,1324,1325,1330,1338,1350,1354,1359,1384,1388,1393,1405,1409,1414],{"__ignoreMap":28},[52,1326,1327],{"class":54,"line":55},[52,1328,1329],{"class":332},"#安装pip3\n",[52,1331,1332,1334,1336],{"class":54,"line":69},[52,1333,59],{"class":58},[52,1335,63],{"class":62},[52,1337,66],{"class":62},[52,1339,1340,1342,1345,1347],{"class":54,"line":82},[52,1341,59],{"class":58},[52,1343,1344],{"class":62}," apt-get",[52,1346,76],{"class":62},[52,1348,1349],{"class":62}," python3-pip\n",[52,1351,1352],{"class":54,"line":97},[52,1353,116],{"emptyLinePlaceholder":115},[52,1355,1356],{"class":54,"line":112},[52,1357,1358],{"class":332},"#更新pip3\n",[52,1360,1361,1364,1367,1370,1372,1375,1378,1381],{"class":54,"line":119},[52,1362,1363],{"class":58},"python3",[52,1365,1366],{"class":90}," -m",[52,1368,1369],{"class":62}," pip",[52,1371,76],{"class":62},[52,1373,1374],{"class":90}," -i",[52,1376,1377],{"class":62}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[52,1379,1380],{"class":90}," --upgrade",[52,1382,1383],{"class":62}," pip\n",[52,1385,1386],{"class":54,"line":130},[52,1387,116],{"emptyLinePlaceholder":115},[52,1389,1390],{"class":54,"line":136},[52,1391,1392],{"class":332},"#设置pip源为清华源\n",[52,1394,1395,1397,1399,1401,1403],{"class":54,"line":141},[52,1396,1282],{"class":58},[52,1398,1302],{"class":62},[52,1400,1305],{"class":62},[52,1402,1308],{"class":62},[52,1404,1311],{"class":62},[52,1406,1407],{"class":54,"line":146},[52,1408,116],{"emptyLinePlaceholder":115},[52,1410,1411],{"class":54,"line":152},[52,1412,1413],{"class":332},"#测试\n",[52,1415,1416,1418,1420,1422,1424,1426],{"class":54,"line":157},[52,1417,1363],{"class":58},[52,1419,1366],{"class":90},[52,1421,1369],{"class":62},[52,1423,76],{"class":62},[52,1425,1380],{"class":90},[52,1427,1383],{"class":62},[274,1429,1430],{},"成功的话，会看到Looking后面是tsinghua字样。",[274,1432,1433],{},[280,1434],{"alt":28,"src":1435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,1437,1439],{"id":1438},"_35-显卡驱动安装","3.5 显卡驱动安装",[30,1441,1443],{"id":1442},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[19,1445,1447],{"className":46,"code":1446,"language":48,"meta":28,"style":28},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[26,1448,1449,1454,1469,1474],{"__ignoreMap":28},[52,1450,1451],{"class":54,"line":55},[52,1452,1453],{"class":332},"# 如果是使用apt安装的驱动\n",[52,1455,1456,1458,1460,1462,1464,1467],{"class":54,"line":69},[52,1457,59],{"class":58},[52,1459,1344],{"class":62},[52,1461,561],{"class":62},[52,1463,736],{"class":90},[52,1465,1466],{"class":62}," nvidia",[52,1468,826],{"class":90},[52,1470,1471],{"class":54,"line":82},[52,1472,1473],{"class":332},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[52,1475,1476,1478],{"class":54,"line":97},[52,1477,59],{"class":58},[52,1479,1480],{"class":62}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[30,1482,1484],{"id":1483},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[1486,1487,1489],"h4",{"id":1488},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[1491,1492,1494],"h5",{"id":1493},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[19,1496,1498],{"className":46,"code":1497,"language":48,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,1499,1500,1505,1516,1521,1531,1536],{"__ignoreMap":28},[52,1501,1502],{"class":54,"line":55},[52,1503,1504],{"class":332},"# 安装英伟达驱动\n",[52,1506,1507,1509,1511,1513],{"class":54,"line":69},[52,1508,59],{"class":58},[52,1510,63],{"class":62},[52,1512,76],{"class":62},[52,1514,1515],{"class":62}," nvidia-driver-版本号\n",[52,1517,1518],{"class":54,"line":82},[52,1519,1520],{"class":332},"# 重启 \n",[52,1522,1523,1525,1527,1529],{"class":54,"line":97},[52,1524,59],{"class":58},[52,1526,1218],{"class":62},[52,1528,1221],{"class":90},[52,1530,1224],{"class":62},[52,1532,1533],{"class":54,"line":112},[52,1534,1535],{"class":332},"# 检查驱动是否安装成功\n",[52,1537,1538],{"class":54,"line":119},[52,1539,1540],{"class":58},"nvidia-smi\n",[1491,1542,1544],{"id":1543},"_35212-debian","3.5.2.1.2 Debian",[19,1546,1548],{"className":46,"code":1547,"language":48,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,1549,1550,1554,1568,1572,1582,1586],{"__ignoreMap":28},[52,1551,1552],{"class":54,"line":55},[52,1553,1504],{"class":332},[52,1555,1556,1558,1560,1562,1565],{"class":54,"line":69},[52,1557,59],{"class":58},[52,1559,63],{"class":62},[52,1561,76],{"class":62},[52,1563,1564],{"class":62}," nvidia-driver",[52,1566,1567],{"class":62}," nvidia-settings\n",[52,1569,1570],{"class":54,"line":82},[52,1571,1520],{"class":332},[52,1573,1574,1576,1578,1580],{"class":54,"line":97},[52,1575,59],{"class":58},[52,1577,1218],{"class":62},[52,1579,1221],{"class":90},[52,1581,1224],{"class":62},[52,1583,1584],{"class":54,"line":112},[52,1585,1535],{"class":332},[52,1587,1588],{"class":54,"line":119},[52,1589,1540],{"class":58},[1486,1591,1593],{"id":1592},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[274,1595,1596,1597,1600],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[538,1598,1599],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[274,1602,1603,1604],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[1605,1606,1607],"em",{},[538,1608,1609],{},"（也可以不禁用桌面环境，直接进行下一步。）",[19,1611,1613],{"className":46,"code":1612,"language":48,"meta":28,"style":28},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[26,1614,1615,1620,1630,1635,1648,1653],{"__ignoreMap":28},[52,1616,1617],{"class":54,"line":55},[52,1618,1619],{"class":332},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[52,1621,1622,1624,1627],{"class":54,"line":69},[52,1623,59],{"class":58},[52,1625,1626],{"class":62}," telinit",[52,1628,1629],{"class":90}," 3\n",[52,1631,1632],{"class":54,"line":82},[52,1633,1634],{"class":332},"# ubuntu 使用下方命令\n",[52,1636,1637,1639,1642,1645],{"class":54,"line":97},[52,1638,59],{"class":58},[52,1640,1641],{"class":62}," service",[52,1643,1644],{"class":62}," lightdm",[52,1646,1647],{"class":62}," stop\n",[52,1649,1650],{"class":54,"line":112},[52,1651,1652],{"class":332},"# Fedora 使用下方命令\n",[52,1654,1655,1657,1659,1662],{"class":54,"line":119},[52,1656,59],{"class":58},[52,1658,470],{"class":62},[52,1660,1661],{"class":62}," isolate",[52,1663,1664],{"class":62}," multi-user.target\n",[274,1666,1667],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[19,1669,1671],{"className":46,"code":1670,"language":48,"meta":28,"style":28},"# 编译环境+准备工作\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",[26,1672,1673,1678,1689,1694,1701,1706,1719,1724,1731,1736],{"__ignoreMap":28},[52,1674,1675],{"class":54,"line":55},[52,1676,1677],{"class":332},"# 编译环境+准备工作\n",[52,1679,1680,1682,1684,1686],{"class":54,"line":69},[52,1681,59],{"class":58},[52,1683,63],{"class":62},[52,1685,76],{"class":62},[52,1687,1688],{"class":62}," build-essential\n",[52,1690,1691],{"class":54,"line":82},[52,1692,1693],{"class":332},"# 进入到.run目录中\n",[52,1695,1696,1698],{"class":54,"line":97},[52,1697,338],{"class":90},[52,1699,1700],{"class":62}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[52,1702,1703],{"class":54,"line":112},[52,1704,1705],{"class":332},"# 给驱动文件增加可执行权限：\n",[52,1707,1708,1710,1713,1716],{"class":54,"line":119},[52,1709,59],{"class":58},[52,1711,1712],{"class":62}," chmod",[52,1714,1715],{"class":62}," a+x",[52,1717,1718],{"class":62}," NVIDIA-Linux-x86_64-550.107.02.run\n",[52,1720,1721],{"class":54,"line":130},[52,1722,1723],{"class":332},"# 然后执行安装：\n",[52,1725,1726,1728],{"class":54,"line":136},[52,1727,59],{"class":58},[52,1729,1730],{"class":62}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[52,1732,1733],{"class":54,"line":141},[52,1734,1735],{"class":332},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[52,1737,1738,1740,1743],{"class":54,"line":146},[52,1739,59],{"class":58},[52,1741,1742],{"class":62}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[52,1744,1745],{"class":90},"  --no-opengl-files\n",[274,1747,1748],{},"安装完毕重启即可",[19,1750,1752],{"className":46,"code":1751,"language":48,"meta":28,"style":28},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[26,1753,1754,1758,1765,1769],{"__ignoreMap":28},[52,1755,1756],{"class":54,"line":55},[52,1757,1520],{"class":332},[52,1759,1760,1762],{"class":54,"line":69},[52,1761,59],{"class":58},[52,1763,1764],{"class":62}," reboot\n",[52,1766,1767],{"class":54,"line":82},[52,1768,1535],{"class":332},[52,1770,1771],{"class":54,"line":97},[52,1772,1540],{"class":58},[30,1774,1776],{"id":1775},"_353-安装cuda","3.5.3 安装CUDA",[274,1778,1779],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[274,1781,1782],{},[280,1783],{"alt":28,"src":1784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1070,1786,1787],{},[1073,1788,1789],{},"先查看显卡驱动所支持的最高CUDA版本",[19,1791,1792],{"className":46,"code":1540,"language":48,"meta":28,"style":28},[26,1793,1794],{"__ignoreMap":28},[52,1795,1796],{"class":54,"line":55},[52,1797,1540],{"class":58},[274,1799,1800],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[274,1802,1803],{},[280,1804],{"alt":28,"src":1805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1070,1807,1808],{"start":69},[1073,1809,1810],{},"下载CUDA并安装CUDA",[274,1812,1813,1814],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[300,1815,1816],{"href":1816,"rel":1817},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[304],[274,1819,1820],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[274,1822,1823],{},[280,1824],{"alt":28,"src":1825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[274,1827,1828,1829,1834],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[300,1830,1833],{"href":1831,"rel":1832},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[304],"Vinci机器人队单片机教程","）",[274,1836,1837],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[274,1839,1840],{},[280,1841],{"alt":28,"src":1842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[274,1844,1845],{},"将最下方框框里的命令敲入终端",[19,1847,1849],{"className":46,"code":1848,"language":48,"meta":28,"style":28},"# 在当前文件夹下创建一个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",[26,1850,1851,1856,1867,1872,1879,1884,1892,1897,1908,1913],{"__ignoreMap":28},[52,1852,1853],{"class":54,"line":55},[52,1854,1855],{"class":332},"# 在当前文件夹下创建一个ttt的子文件夹\n",[52,1857,1858,1861,1864],{"class":54,"line":69},[52,1859,1860],{"class":58},"mkdir",[52,1862,1863],{"class":90}," -p",[52,1865,1866],{"class":62}," .\u002Fttt\n",[52,1868,1869],{"class":54,"line":82},[52,1870,1871],{"class":332},"# 进入ttt文件夹\n",[52,1873,1874,1876],{"class":54,"line":97},[52,1875,338],{"class":90},[52,1877,1878],{"class":62}," ttt\n",[52,1880,1881],{"class":54,"line":112},[52,1882,1883],{"class":332},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[52,1885,1886,1889],{"class":54,"line":119},[52,1887,1888],{"class":58},"wget",[52,1890,1891],{"class":62}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[52,1893,1894],{"class":54,"line":130},[52,1895,1896],{"class":332},"# 给予权限\n",[52,1898,1899,1901,1903,1905],{"class":54,"line":136},[52,1900,59],{"class":58},[52,1902,1712],{"class":62},[52,1904,1715],{"class":62},[52,1906,1907],{"class":62}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[52,1909,1910],{"class":54,"line":141},[52,1911,1912],{"class":332},"# 运行脚本\n",[52,1914,1915,1917],{"class":54,"line":146},[52,1916,59],{"class":58},[52,1918,1907],{"class":62},[274,1920,1921],{},[280,1922],{"alt":28,"src":1923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[274,1925,1926],{},"正在安装中：",[274,1928,1929],{},[280,1930],{"alt":28,"src":1931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[274,1933,1934],{},"输入accept接受即可",[274,1936,1937],{},[280,1938],{"alt":28,"src":1939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[274,1941,1942],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[274,1944,1945],{},[280,1946],{"alt":28,"src":1947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[274,1949,1950],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[274,1952,1953],{},[280,1954],{"alt":28,"src":1955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1070,1957,1958],{"start":82},[1073,1959,1960],{},"配置环境",[274,1962,1963],{},"根据上方确认一下路径，比如我上面红色框起来的为",[19,1965,1967],{"className":46,"code":1966,"language":48,"meta":28,"style":28},"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",[26,1968,1969,1985,2001],{"__ignoreMap":28},[52,1970,1971,1974,1977,1980,1983],{"class":54,"line":55},[52,1972,1973],{"class":58},"Please",[52,1975,1976],{"class":62}," make",[52,1978,1979],{"class":62}," sure",[52,1981,1982],{"class":62}," that",[52,1984,623],{"class":622},[52,1986,1987,1990,1993,1996,1999],{"class":54,"line":69},[52,1988,1989],{"class":58}," -",[52,1991,1992],{"class":62},"   PATH",[52,1994,1995],{"class":62}," includes",[52,1997,1998],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[52,2000,623],{"class":622},[52,2002,2003,2005,2008,2010,2013,2016,2019,2022,2025,2028,2031,2034,2037,2040],{"class":54,"line":82},[52,2004,1989],{"class":58},[52,2006,2007],{"class":62},"   LD_LIBRARY_PATH",[52,2009,1995],{"class":62},[52,2011,2012],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[52,2014,2015],{"class":62}," or,",[52,2017,2018],{"class":62}," add",[52,2020,2021],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[52,2023,2024],{"class":62}," to",[52,2026,2027],{"class":62}," \u002Fetc\u002Fld.so.conf",[52,2029,2030],{"class":62}," and",[52,2032,2033],{"class":62}," run",[52,2035,2036],{"class":62}," ldconfig",[52,2038,2039],{"class":62}," as",[52,2041,2042],{"class":62}," root\n",[274,2044,2045],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[19,2047,2049],{"className":46,"code":2048,"language":48,"meta":28,"style":28},"which nvcc\n",[26,2050,2051],{"__ignoreMap":28},[52,2052,2053,2056],{"class":54,"line":55},[52,2054,2055],{"class":90},"which",[52,2057,2058],{"class":62}," nvcc\n",[274,2060,2061],{},[280,2062],{"alt":28,"src":2063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[274,2065,2066],{},"所以我进行以下操作：",[19,2068,2070],{"className":46,"code":2069,"language":48,"meta":28,"style":28},"sudo vim ~\u002F.bashrc\n",[26,2071,2072],{"__ignoreMap":28},[52,2073,2074,2076,2078],{"class":54,"line":55},[52,2075,59],{"class":58},[52,2077,124],{"class":62},[52,2079,2080],{"class":62}," ~\u002F.bashrc\n",[274,2082,2083],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[19,2085,2087],{"className":46,"code":2086,"language":48,"meta":28,"style":28},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[26,2088,2089,2103],{"__ignoreMap":28},[52,2090,2091,2094,2097,2100],{"class":54,"line":55},[52,2092,2093],{"class":160},"export",[52,2095,2096],{"class":622}," PATH",[52,2098,2099],{"class":160},"=",[52,2101,2102],{"class":622},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[52,2104,2105,2107,2110,2112],{"class":54,"line":69},[52,2106,2093],{"class":160},[52,2108,2109],{"class":622}," LD_LIBRARY_PATH",[52,2111,2099],{"class":160},[52,2113,2114],{"class":622},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[274,2116,2117],{},[280,2118],{"alt":28,"src":2119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[19,2121,2123],{"className":46,"code":2122,"language":48,"meta":28,"style":28},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[26,2124,2125,2130,2137,2142],{"__ignoreMap":28},[52,2126,2127],{"class":54,"line":55},[52,2128,2129],{"class":332},"# 刷新当前终端的环境变量\n",[52,2131,2132,2135],{"class":54,"line":69},[52,2133,2134],{"class":90},"source",[52,2136,2080],{"class":62},[52,2138,2139],{"class":54,"line":82},[52,2140,2141],{"class":332},"# 验证CUDA是否安装成功\n",[52,2143,2144,2147],{"class":54,"line":97},[52,2145,2146],{"class":58},"nvcc",[52,2148,2149],{"class":90}," -V\n",[274,2151,2152],{},"出现下图这种则安装成功。",[274,2154,2155],{},[280,2156],{"alt":28,"src":2157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[30,2159,2161],{"id":2160},"_354-安装cudnn","3.5.4 安装cuDNN",[1070,2163,2164],{},[1073,2165,2166],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[274,2168,2169,2170,2175],{},"前往 NVIDIA cuDNN 下载页面：",[300,2171,2174],{"href":2172,"rel":2173},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[304],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[274,2177,2178],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[274,2180,2181],{},[280,2182],{"alt":28,"src":2183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[274,2185,2186],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[274,2188,2189],{},[280,2190],{"alt":28,"src":2191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[274,2193,2194],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[274,2196,2197],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[274,2199,2200],{},[538,2201,2202],{},"我这里选择所有Linux X86_64最通用的办法：",[274,2204,2205],{},"下载好的：",[274,2207,2208],{},[280,2209],{"alt":28,"src":2210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1070,2212,2213],{"start":69},[1073,2214,2215],{},"安装cuDNN",[274,2217,2218],{},"找到该文件所在目录，并打开终端，cd到该目录。",[274,2220,2221],{},[280,2222],{"alt":28,"src":2223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[274,2225,2226],{},"解压文件，并复制到对应位置完成安装",[19,2228,2230],{"className":46,"code":2229,"language":48,"meta":28,"style":28},"# 解压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",[26,2231,2232,2237,2248,2253,2260,2265,2282,2296,2301,2313,2322,2326,2342],{"__ignoreMap":28},[52,2233,2234],{"class":54,"line":55},[52,2235,2236],{"class":332},"# 解压cuDNN文件\n",[52,2238,2239,2242,2245],{"class":54,"line":69},[52,2240,2241],{"class":58},"tar",[52,2243,2244],{"class":90}," -xvf",[52,2246,2247],{"class":62}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[52,2249,2250],{"class":54,"line":82},[52,2251,2252],{"class":332},"# cd进文件夹\n",[52,2254,2255,2257],{"class":54,"line":97},[52,2256,338],{"class":90},[52,2258,2259],{"class":62}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[52,2261,2262],{"class":54,"line":112},[52,2263,2264],{"class":332},"# 复制cuDNN文件到CUDA目录\n",[52,2266,2267,2269,2272,2275,2277,2280],{"class":54,"line":119},[52,2268,59],{"class":58},[52,2270,2271],{"class":62}," cp",[52,2273,2274],{"class":62}," include\u002Fcudnn",[52,2276,1095],{"class":90},[52,2278,2279],{"class":62},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[52,2281,623],{"class":622},[52,2283,2284,2286,2288,2291,2293],{"class":54,"line":130},[52,2285,59],{"class":58},[52,2287,2271],{"class":62},[52,2289,2290],{"class":62}," lib\u002Flibcudnn",[52,2292,1095],{"class":90},[52,2294,2295],{"class":62},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[52,2297,2298],{"class":54,"line":136},[52,2299,2300],{"class":332},"# 对比一下有没有缺文件\n",[52,2302,2303,2306,2309,2311],{"class":54,"line":141},[52,2304,2305],{"class":58},"ls",[52,2307,2308],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[52,2310,1095],{"class":90},[52,2312,623],{"class":622},[52,2314,2315,2317,2320],{"class":54,"line":146},[52,2316,2305],{"class":58},[52,2318,2319],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[52,2321,826],{"class":90},[52,2323,2324],{"class":54,"line":152},[52,2325,1896],{"class":332},[52,2327,2328,2330,2332,2335,2337,2339],{"class":54,"line":157},[52,2329,59],{"class":58},[52,2331,1712],{"class":62},[52,2333,2334],{"class":62}," a+r",[52,2336,2308],{"class":62},[52,2338,1095],{"class":90},[52,2340,2341],{"class":622},"   \n",[52,2343,2344,2346,2348,2350,2352],{"class":54,"line":173},[52,2345,59],{"class":58},[52,2347,1712],{"class":62},[52,2349,2334],{"class":62},[52,2351,2319],{"class":62},[52,2353,826],{"class":90},[1070,2355,2356],{"start":82},[1073,2357,2358],{},"检查是否安装成功",[19,2360,2362],{"className":46,"code":2361,"language":48,"meta":28,"style":28},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[26,2363,2364,2369],{"__ignoreMap":28},[52,2365,2366],{"class":54,"line":55},[52,2367,2368],{"class":332},"# 检查cuDNN版本命令\n",[52,2370,2371,2374,2377,2380,2383,2386,2389],{"class":54,"line":69},[52,2372,2373],{"class":58},"cat",[52,2375,2376],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[52,2378,2379],{"class":160}," |",[52,2381,2382],{"class":58}," grep",[52,2384,2385],{"class":62}," CUDNN_MAJOR",[52,2387,2388],{"class":90}," -A",[52,2390,2391],{"class":90}," 2\n",[274,2393,2394],{},"出现下图这样的就是安装成功了",[274,2396,2397],{},[280,2398],{"alt":28,"src":2399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1070,2401,2402],{"start":97},[1073,2403,2404],{},"软链接(一般不需要)",[19,2406,2408],{"className":46,"code":2407,"language":48,"meta":28,"style":28},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[26,2409,2410,2415],{"__ignoreMap":28},[52,2411,2412],{"class":54,"line":55},[52,2413,2414],{"class":332},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[52,2416,2417,2419],{"class":54,"line":69},[52,2418,59],{"class":58},[52,2420,2421],{"class":62}," ldconfig\n",[274,2423,2424],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[19,2426,2431],{"className":2427,"code":2428,"language":2429,"meta":2430,"style":28},"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",[26,2432,2433,2438,2443,2448,2453,2458,2463],{"__ignoreMap":28},[52,2434,2435],{"class":54,"line":55},[52,2436,2437],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[52,2439,2440],{"class":54,"line":69},[52,2441,2442],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[52,2444,2445],{"class":54,"line":82},[52,2446,2447],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[52,2449,2450],{"class":54,"line":97},[52,2451,2452],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[52,2454,2455],{"class":54,"line":112},[52,2456,2457],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[52,2459,2460],{"class":54,"line":119},[52,2461,2462],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[52,2464,2465],{"class":54,"line":130},[52,2466,2467],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[274,2469,2470],{},"运行下方的命令",[19,2472,2474],{"className":46,"code":2473,"language":48,"meta":28,"style":28},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[26,2475,2476,2481,2488,2493],{"__ignoreMap":28},[52,2477,2478],{"class":54,"line":55},[52,2479,2480],{"class":332},"# cd进入CUDA路径\n",[52,2482,2483,2485],{"class":54,"line":69},[52,2484,338],{"class":90},[52,2486,2487],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[52,2489,2490],{"class":54,"line":82},[52,2491,2492],{"class":332}," # 查看本路径下的需要软链接的文件名\n",[52,2494,2495],{"class":54,"line":97},[52,2496,2497],{"class":58}," ls\n",[274,2499,2500],{},[280,2501],{"alt":28,"src":2502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[274,2504,2505,2506,2509,2510,2509,2513,2516],{},"如上图，我需要将",[26,2507,2508],{},"libcudnn_xxx_xxxxx.so.8.9.7","和",[26,2511,2512],{},"libcudnn_xxx_xxxxx.so.8",[26,2514,2515],{},"libcudnn_xxx_xxxxx.so","软链接",[19,2518,2520],{"className":46,"code":2519,"language":48,"meta":28,"style":28},"# 创建符号链接。对于每个 .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",[26,2521,2522,2527,2543,2557,2571,2585,2599,2613,2627,2632,2638,2643],{"__ignoreMap":28},[52,2523,2524],{"class":54,"line":55},[52,2525,2526],{"class":332},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[52,2528,2529,2531,2534,2537,2540],{"class":54,"line":69},[52,2530,59],{"class":58},[52,2532,2533],{"class":62}," ln",[52,2535,2536],{"class":90}," -sf",[52,2538,2539],{"class":62}," libcudnn_cnn_train.so.8.9.7",[52,2541,2542],{"class":62}," libcudnn_cnn_train.so.8\n",[52,2544,2545,2547,2549,2551,2554],{"class":54,"line":82},[52,2546,59],{"class":58},[52,2548,2533],{"class":62},[52,2550,2536],{"class":90},[52,2552,2553],{"class":62}," libcudnn_adv_infer.so.8.9.7",[52,2555,2556],{"class":62}," libcudnn_adv_infer.so.8\n",[52,2558,2559,2561,2563,2565,2568],{"class":54,"line":97},[52,2560,59],{"class":58},[52,2562,2533],{"class":62},[52,2564,2536],{"class":90},[52,2566,2567],{"class":62}," libcudnn_adv_train.so.8.9.7",[52,2569,2570],{"class":62}," libcudnn_adv_train.so.8\n",[52,2572,2573,2575,2577,2579,2582],{"class":54,"line":112},[52,2574,59],{"class":58},[52,2576,2533],{"class":62},[52,2578,2536],{"class":90},[52,2580,2581],{"class":62}," libcudnn_cnn_infer.so.8.9.7",[52,2583,2584],{"class":62}," libcudnn_cnn_infer.so.8\n",[52,2586,2587,2589,2591,2593,2596],{"class":54,"line":119},[52,2588,59],{"class":58},[52,2590,2533],{"class":62},[52,2592,2536],{"class":90},[52,2594,2595],{"class":62}," libcudnn.so.8.9.7",[52,2597,2598],{"class":62}," libcudnn.so.8\n",[52,2600,2601,2603,2605,2607,2610],{"class":54,"line":130},[52,2602,59],{"class":58},[52,2604,2533],{"class":62},[52,2606,2536],{"class":90},[52,2608,2609],{"class":62}," libcudnn_ops_infer.so.8.9.7",[52,2611,2612],{"class":62}," libcudnn_ops_infer.so.8\n",[52,2614,2615,2617,2619,2621,2624],{"class":54,"line":136},[52,2616,59],{"class":58},[52,2618,2533],{"class":62},[52,2620,2536],{"class":90},[52,2622,2623],{"class":62}," libcudnn_ops_train.so.8.9.7",[52,2625,2626],{"class":62}," libcudnn_ops_train.so.8\n",[52,2628,2629],{"class":54,"line":141},[52,2630,2631],{"class":332},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[52,2633,2634,2636],{"class":54,"line":146},[52,2635,59],{"class":58},[52,2637,2421],{"class":62},[52,2639,2640],{"class":54,"line":152},[52,2641,2642],{"class":332},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[52,2644,2645,2647,2650,2653,2655,2658],{"class":54,"line":157},[52,2646,2305],{"class":58},[52,2648,2649],{"class":90}," -l",[52,2651,2652],{"class":62}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[52,2654,1095],{"class":90},[52,2656,2657],{"class":62},".so",[52,2659,826],{"class":90},[30,2661,2663],{"id":2662},"_355-常见问题","3.5.5 常见问题",[1070,2665,2666],{},[1073,2667,2668],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[19,2670,2672],{"className":46,"code":2671,"language":48,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[26,2673,2674],{"__ignoreMap":28},[52,2675,2676,2678,2680],{"class":54,"line":55},[52,2677,59],{"class":58},[52,2679,124],{"class":62},[52,2681,2682],{"class":62}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[274,2684,2685],{},"blacklist-nouveau.conf文件内容如下：",[19,2687,2689],{"className":46,"code":2688,"language":48,"meta":28,"style":28},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[26,2690,2691,2699,2706,2720,2730],{"__ignoreMap":28},[52,2692,2693,2696],{"class":54,"line":55},[52,2694,2695],{"class":58},"blacklist",[52,2697,2698],{"class":62}," nouveau\n",[52,2700,2701,2703],{"class":54,"line":69},[52,2702,2695],{"class":58},[52,2704,2705],{"class":62}," lbm-nouveau\n",[52,2707,2708,2711,2714,2717],{"class":54,"line":82},[52,2709,2710],{"class":58},"options",[52,2712,2713],{"class":62}," nouveau",[52,2715,2716],{"class":62}," modeset=",[52,2718,2719],{"class":90},"0\n",[52,2721,2722,2725,2727],{"class":54,"line":97},[52,2723,2724],{"class":90},"alias",[52,2726,2713],{"class":62},[52,2728,2729],{"class":62}," off\n",[52,2731,2732,2734,2737],{"class":54,"line":112},[52,2733,2724],{"class":90},[52,2735,2736],{"class":62}," lbm-nouveau",[52,2738,2729],{"class":62},[274,2740,2741],{},"接着运行下方命令",[19,2743,2745],{"className":46,"code":2744,"language":48,"meta":28,"style":28},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[26,2746,2747,2757,2762],{"__ignoreMap":28},[52,2748,2749,2751,2754],{"class":54,"line":55},[52,2750,59],{"class":58},[52,2752,2753],{"class":62}," update-initramfs",[52,2755,2756],{"class":90}," -u\n",[52,2758,2759],{"class":54,"line":69},[52,2760,2761],{"class":58},"或者\n",[52,2763,2764,2766,2769],{"class":54,"line":82},[52,2765,59],{"class":58},[52,2767,2768],{"class":62}," dracut",[52,2770,2771],{"class":90}," --force\n",[274,2773,2774],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[19,2776,2778],{"className":46,"code":2777,"language":48,"meta":28,"style":28},"lsmod | grep nouveau\n",[26,2779,2780],{"__ignoreMap":28},[52,2781,2782,2785,2787,2789],{"class":54,"line":55},[52,2783,2784],{"class":58},"lsmod",[52,2786,2379],{"class":160},[52,2788,2382],{"class":58},[52,2790,2698],{"class":62},[1070,2792,2793],{"start":69},[1073,2794,2795],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[19,2797,2799],{"className":46,"code":2798,"language":48,"meta":28,"style":28},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[26,2800,2801],{"__ignoreMap":28},[52,2802,2803,2805,2807],{"class":54,"line":55},[52,2804,59],{"class":58},[52,2806,124],{"class":62},[52,2808,2809],{"class":62}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[274,2811,2812],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[19,2814,2816],{"className":46,"code":2815,"language":48,"meta":28,"style":28},"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",[26,2817,2818,2826,2834,2842,2849,2857,2867,2875],{"__ignoreMap":28},[52,2819,2820,2823],{"class":54,"line":55},[52,2821,2822],{"class":58},"Section",[52,2824,2825],{"class":62}," \"OutputClass\"\n",[52,2827,2828,2831],{"class":54,"line":69},[52,2829,2830],{"class":58},"   Identifier",[52,2832,2833],{"class":62}," \"nvidia\"\n",[52,2835,2836,2839],{"class":54,"line":82},[52,2837,2838],{"class":58},"   MatchDriver",[52,2840,2841],{"class":62}," \"nvidia-drm\"\n",[52,2843,2844,2847],{"class":54,"line":97},[52,2845,2846],{"class":58},"   Driver",[52,2848,2833],{"class":62},[52,2850,2851,2854],{"class":54,"line":112},[52,2852,2853],{"class":58},"   Option",[52,2855,2856],{"class":62}," \"AllowEmptyInitialConfiguration\"\n",[52,2858,2859,2861,2864],{"class":54,"line":119},[52,2860,2853],{"class":58},[52,2862,2863],{"class":62}," \"PrimaryGPU\"",[52,2865,2866],{"class":62}," \"yes\"\n",[52,2868,2869,2872],{"class":54,"line":130},[52,2870,2871],{"class":58},"   ModulePath",[52,2873,2874],{"class":62}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[52,2876,2877],{"class":54,"line":136},[52,2878,2879],{"class":58},"EndSection\n",[1070,2881,2882],{"start":82},[1073,2883,2884],{},"安装N卡驱动提示错误",[19,2886,2888],{"className":2427,"code":2887,"language":2429,"meta":2430,"style":28},"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",[26,2889,2890],{"__ignoreMap":28},[52,2891,2892],{"class":54,"line":55},[52,2893,2887],{},[1070,2895,2896],{},[1073,2897,2898],{},"检查当前运行的内核版本：",[274,2900,2901],{},"运行以下命令以查看你当前正在使用的内核版本：",[19,2903,2905],{"className":323,"code":2904,"language":325,"meta":28,"style":28},"uname -r\n",[26,2906,2907],{"__ignoreMap":28},[52,2908,2909,2912],{"class":54,"line":55},[52,2910,2911],{"class":58},"uname",[52,2913,2914],{"class":90}," -r\n",[1070,2916,2917],{"start":69},[1073,2918,2919],{},"安装内核开发文件：",[274,2921,2922,2923,2926],{},"确保你已经安装了与当前内核版本相匹配的 ",[26,2924,2925],{},"kernel-devel"," 包。运行以下命令来安装：",[19,2928,2930],{"className":323,"code":2929,"language":325,"meta":28,"style":28},"sudo dnf install kernel-devel-$(uname -r)\n",[26,2931,2932],{"__ignoreMap":28},[52,2933,2934,2936,2939,2941,2944,2947,2949,2951],{"class":54,"line":55},[52,2935,59],{"class":58},[52,2937,2938],{"class":62}," dnf",[52,2940,76],{"class":62},[52,2942,2943],{"class":62}," kernel-devel-",[52,2945,2946],{"class":622},"$(",[52,2948,2911],{"class":58},[52,2950,1221],{"class":90},[52,2952,170],{"class":622},[274,2954,2955],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1070,2957,2958],{"start":82},[1073,2959,2960],{},"安装内核源代码（如果需要）：",[274,2962,2963],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[19,2965,2967],{"className":323,"code":2966,"language":325,"meta":28,"style":28},"sudo dnf install kernel-headers kernel-source\n",[26,2968,2969],{"__ignoreMap":28},[52,2970,2971,2973,2975,2977,2980],{"class":54,"line":55},[52,2972,59],{"class":58},[52,2974,2938],{"class":62},[52,2976,76],{"class":62},[52,2978,2979],{"class":62}," kernel-headers",[52,2981,2982],{"class":62}," kernel-source\n",[1070,2984,2985],{"start":97},[1073,2986,2987],{},"检查安装：",[274,2989,2990,2991,2994],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[26,2992,2993],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[19,2996,2998],{"className":323,"code":2997,"language":325,"meta":28,"style":28},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[26,2999,3000],{"__ignoreMap":28},[52,3001,3002,3004],{"class":54,"line":55},[52,3003,2305],{"class":58},[52,3005,3006],{"class":62}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[274,3008,3009,3010,3013],{},"如果仍然遇到问题，可以通过 ",[26,3011,3012],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[3015,3016,3017],"style",{},"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":28,"searchDepth":69,"depth":69,"links":3019},[3020,3024,3034,3038,3039],{"id":16,"depth":69,"text":17,"children":3021},[3022,3023],{"id":32,"depth":82,"text":33},{"id":42,"depth":82,"text":43},{"id":285,"depth":69,"text":286,"children":3025},[3026,3027,3028,3029,3030,3031,3032,3033],{"id":289,"depth":82,"text":290},{"id":365,"depth":82,"text":366},{"id":454,"depth":82,"text":455},{"id":704,"depth":82,"text":705},{"id":775,"depth":82,"text":776},{"id":842,"depth":82,"text":843},{"id":877,"depth":82,"text":878},{"id":932,"depth":82,"text":933},{"id":983,"depth":69,"text":984,"children":3035},[3036,3037],{"id":987,"depth":82,"text":988},{"id":1067,"depth":82,"text":1068},{"id":1257,"depth":69,"text":1258},{"id":1438,"depth":69,"text":1439,"children":3040},[3041,3042,3043,3044,3045],{"id":1442,"depth":82,"text":1443},{"id":1483,"depth":82,"text":1484},{"id":1775,"depth":82,"text":1776},{"id":2160,"depth":82,"text":2161},{"id":2662,"depth":82,"text":2663},null,"md",{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":5,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",[3054,8121,9226,10646,13635,14986,16475,17564,26324,26336,26932,26958,27082,27323,27388,27406,27419,27466,27588,27757,27956,28133,28337,28473,28568,28605,28618,28928,29661,30367,30388,31407,33037,33187,33200,33212,33513,53324,53339,53356,53389,56260,79606,95751,95772,95885,96006,96776,97439,97800,97838,97944,98044,98087,98113,98174,99828,99929,99954,100445,100945,102025,102308,103050,103552,103564,105572,107236,108739,110437,112354,114273,116295,119764,120196,120654,121401,123801,124149,124171,124527,127834,127846,128249,128272,128419,128586,128791,129092,129649,130306,132237,133835,134484,135978,137409,138644,140338,142090,144500,144616,145551,145762,146647,147882,148110,148123,149278,151690,154058,157379,159856,161500,163277,165290,168342,170522,173049,175243],{"id":3055,"title":3056,"body":3057,"description":28,"extension":3047,"meta":8116,"navigation":115,"path":8117,"seo":8118,"stem":8119,"__hash__":8120},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":3058,"toc":8088},[3059,3062,3066,3069,3073,3084,3088,3092,3095,3098,3101,3104,3107,3134,3138,3141,3144,3147,3150,3200,3204,3222,3224,3238,3241,3249,3252,4110,4117,4134,4138,4224,4228,4234,4320,4324,4362,4366,4430,4434,4438,4444,4455,4459,4464,4468,4473,4477,4482,4486,4490,4495,4750,4755,4893,4898,5154,5157,5165,5169,5174,5277,5280,5585,5594,5694,5697,5700,5703,5706,5966,5971,6110,6113,6292,6295,6423,6426,6578,6582,6587,6590,6601,6609,6612,6719,6723,6727,6732,6782,6787,6792,6816,6821,6874,6877,6882,7059,7064,7349,7354,7751,7755,7760,7817,7822,7830,7833,7973,7976,8085],[10,3060,3056],{"id":3061},"_1基础入门",[14,3063,3065],{"id":3064},"_11注释","1.1注释",[274,3067,3068],{},"\u002F\u002F或者\u002F* *\u002F",[14,3070,3072],{"id":3071},"_12命名","1.2命名",[1070,3074,3075,3078,3081],{},[1073,3076,3077],{},"字母数字下划线",[1073,3079,3080],{},"开头必须是字母或_",[1073,3082,3083],{},"不能使用关键词",[14,3085,3087],{"id":3086},"_13数据类型","1.3数据类型",[30,3089,3091],{"id":3090},"_131整形","1.3.1整形",[274,3093,3094],{},"short 短整形 2",[274,3096,3097],{},"int 整形 4",[274,3099,3100],{},"long 长整形 win4 linux32位4 linux64位8",[274,3102,3103],{},"long long 长长整形 8",[274,3105,3106],{},"利用sizeof可以求数据类型占用的内存空间大小",[19,3108,3112],{"className":3109,"code":3110,"language":3111,"meta":28,"style":28},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[26,3113,3114,3127],{"__ignoreMap":28},[52,3115,3116,3119,3122,3125],{"class":54,"line":55},[52,3117,3118],{"class":160},"sizeof",[52,3120,3121],{"class":622},"(",[52,3123,3124],{"class":160},"int",[52,3126,170],{"class":622},[52,3128,3129,3131],{"class":54,"line":69},[52,3130,3118],{"class":160},[52,3132,3133],{"class":622},"(num)\n",[30,3135,3137],{"id":3136},"_132浮点型","1.3.2浮点型",[274,3139,3140],{},"float 单精度 4节 7位有效数字",[274,3142,3143],{},"double 双精度 8节 15-16有效数字",[274,3145,3146],{},"默认情况下，输出一个小数，会显示6位有效数字",[274,3148,3149],{},"注意点：",[19,3151,3153],{"className":3109,"code":3152,"language":3111,"meta":28,"style":28},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[26,3154,3155,3177],{"__ignoreMap":28},[52,3156,3157,3160,3163,3165,3168,3171,3174],{"class":54,"line":55},[52,3158,3159],{"class":160},"float",[52,3161,3162],{"class":622}," f1",[52,3164,2099],{"class":160},[52,3166,3167],{"class":90},"3.14",[52,3169,3170],{"class":160},"f",[52,3172,3173],{"class":622},";",[52,3175,3176],{"class":332}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[52,3178,3179,3181,3184,3186,3189,3192,3195,3197],{"class":54,"line":69},[52,3180,3159],{"class":160},[52,3182,3183],{"class":622}," f2",[52,3185,2099],{"class":160},[52,3187,3188],{"class":90},"3",[52,3190,3191],{"class":160},"e",[52,3193,3194],{"class":90},"2",[52,3196,3173],{"class":622},[52,3198,3199],{"class":332}," \u002F\u002F科学记数法\n",[30,3201,3203],{"id":3202},"_133字符型","1.3.3字符型",[19,3205,3207],{"className":3109,"code":3206,"language":3111,"meta":28,"style":28},"char ch='a'\n",[26,3208,3209],{"__ignoreMap":28},[52,3210,3211,3214,3217,3219],{"class":54,"line":55},[52,3212,3213],{"class":160},"char",[52,3215,3216],{"class":622}," ch",[52,3218,2099],{"class":160},[52,3220,3221],{"class":62},"'a'\n",[274,3223,3149],{},[1070,3225,3226,3229,3232,3235],{},[1073,3227,3228],{},"在显示字符型变量时，只能单引号，双引号x",[1073,3230,3231],{},"单引号内只能一个字符，不能字符串",[1073,3233,3234],{},"c和c++字符型变量只占用一个字符",[1073,3236,3237],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[274,3239,3240],{},"ASCII码大致由以下两部分组成：",[1070,3242,3243,3246],{},[1073,3244,3245],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[1073,3247,3248],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[274,3250,3251],{},"ASCII码表格：",[3253,3254,3255,3298],"table",{},[3256,3257,3258],"thead",{},[3259,3260,3261,3268,3273,3277,3282,3286,3290,3294],"tr",{},[3262,3263,3264,3267],"th",{},[538,3265,3266],{},"ASCII","值",[3262,3269,3270],{},[538,3271,3272],{},"控制字符",[3262,3274,3275,3267],{},[538,3276,3266],{},[3262,3278,3279],{},[538,3280,3281],{},"字符",[3262,3283,3284,3267],{},[538,3285,3266],{},[3262,3287,3288],{},[538,3289,3281],{},[3262,3291,3292,3267],{},[538,3293,3266],{},[3262,3295,3296],{},[538,3297,3281],{},[3299,3300,3301,3328,3352,3377,3402,3428,3453,3478,3504,3529,3555,3580,3606,3631,3657,3683,3709,3733,3758,3783,3808,3833,3858,3883,3908,3933,3958,3984,4009,4034,4059,4084],"tbody",{},[3259,3302,3303,3307,3310,3313,3316,3319,3322,3325],{},[3304,3305,3306],"td",{},"0",[3304,3308,3309],{},"NUT",[3304,3311,3312],{},"32",[3304,3314,3315],{},"(space)",[3304,3317,3318],{},"64",[3304,3320,3321],{},"@",[3304,3323,3324],{},"96",[3304,3326,3327],{},"、",[3259,3329,3330,3333,3336,3339,3341,3344,3347,3350],{},[3304,3331,3332],{},"1",[3304,3334,3335],{},"SOH",[3304,3337,3338],{},"33",[3304,3340,161],{},[3304,3342,3343],{},"65",[3304,3345,3346],{},"A",[3304,3348,3349],{},"97",[3304,3351,300],{},[3259,3353,3354,3356,3359,3362,3365,3368,3371,3374],{},[3304,3355,3194],{},[3304,3357,3358],{},"STX",[3304,3360,3361],{},"34",[3304,3363,3364],{},"\"",[3304,3366,3367],{},"66",[3304,3369,3370],{},"B",[3304,3372,3373],{},"98",[3304,3375,3376],{},"b",[3259,3378,3379,3381,3384,3387,3390,3393,3396,3399],{},[3304,3380,3188],{},[3304,3382,3383],{},"ETX",[3304,3385,3386],{},"35",[3304,3388,3389],{},"#",[3304,3391,3392],{},"67",[3304,3394,3395],{},"C",[3304,3397,3398],{},"99",[3304,3400,3401],{},"c",[3259,3403,3404,3407,3410,3413,3416,3419,3422,3425],{},[3304,3405,3406],{},"4",[3304,3408,3409],{},"EOT",[3304,3411,3412],{},"36",[3304,3414,3415],{},"$",[3304,3417,3418],{},"68",[3304,3420,3421],{},"D",[3304,3423,3424],{},"100",[3304,3426,3427],{},"d",[3259,3429,3430,3433,3436,3439,3442,3445,3448,3451],{},[3304,3431,3432],{},"5",[3304,3434,3435],{},"ENQ",[3304,3437,3438],{},"37",[3304,3440,3441],{},"%",[3304,3443,3444],{},"69",[3304,3446,3447],{},"E",[3304,3449,3450],{},"101",[3304,3452,3191],{},[3259,3454,3455,3458,3461,3464,3467,3470,3473,3476],{},[3304,3456,3457],{},"6",[3304,3459,3460],{},"ACK",[3304,3462,3463],{},"38",[3304,3465,3466],{},"&",[3304,3468,3469],{},"70",[3304,3471,3472],{},"F",[3304,3474,3475],{},"102",[3304,3477,3170],{},[3259,3479,3480,3483,3486,3489,3492,3495,3498,3501],{},[3304,3481,3482],{},"7",[3304,3484,3485],{},"BEL",[3304,3487,3488],{},"39",[3304,3490,3491],{},",",[3304,3493,3494],{},"71",[3304,3496,3497],{},"G",[3304,3499,3500],{},"103",[3304,3502,3503],{},"g",[3259,3505,3506,3509,3512,3515,3517,3520,3523,3526],{},[3304,3507,3508],{},"8",[3304,3510,3511],{},"BS",[3304,3513,3514],{},"40",[3304,3516,3121],{},[3304,3518,3519],{},"72",[3304,3521,3522],{},"H",[3304,3524,3525],{},"104",[3304,3527,3528],{},"h",[3259,3530,3531,3534,3537,3540,3543,3546,3549,3552],{},[3304,3532,3533],{},"9",[3304,3535,3536],{},"HT",[3304,3538,3539],{},"41",[3304,3541,3542],{},")",[3304,3544,3545],{},"73",[3304,3547,3548],{},"I",[3304,3550,3551],{},"105",[3304,3553,3554],{},"i",[3259,3556,3557,3560,3563,3566,3568,3571,3574,3577],{},[3304,3558,3559],{},"10",[3304,3561,3562],{},"LF",[3304,3564,3565],{},"42",[3304,3567,1095],{},[3304,3569,3570],{},"74",[3304,3572,3573],{},"J",[3304,3575,3576],{},"106",[3304,3578,3579],{},"j",[3259,3581,3582,3585,3588,3591,3594,3597,3600,3603],{},[3304,3583,3584],{},"11",[3304,3586,3587],{},"VT",[3304,3589,3590],{},"43",[3304,3592,3593],{},"+",[3304,3595,3596],{},"75",[3304,3598,3599],{},"K",[3304,3601,3602],{},"107",[3304,3604,3605],{},"k",[3259,3607,3608,3611,3614,3617,3619,3622,3625,3628],{},[3304,3609,3610],{},"12",[3304,3612,3613],{},"FF",[3304,3615,3616],{},"44",[3304,3618,3491],{},[3304,3620,3621],{},"76",[3304,3623,3624],{},"L",[3304,3626,3627],{},"108",[3304,3629,3630],{},"l",[3259,3632,3633,3636,3639,3642,3645,3648,3651,3654],{},[3304,3634,3635],{},"13",[3304,3637,3638],{},"CR",[3304,3640,3641],{},"45",[3304,3643,3644],{},"-",[3304,3646,3647],{},"77",[3304,3649,3650],{},"M",[3304,3652,3653],{},"109",[3304,3655,3656],{},"m",[3259,3658,3659,3662,3665,3668,3671,3674,3677,3680],{},[3304,3660,3661],{},"14",[3304,3663,3664],{},"SO",[3304,3666,3667],{},"46",[3304,3669,3670],{},".",[3304,3672,3673],{},"78",[3304,3675,3676],{},"N",[3304,3678,3679],{},"110",[3304,3681,3682],{},"n",[3259,3684,3685,3688,3691,3694,3697,3700,3703,3706],{},[3304,3686,3687],{},"15",[3304,3689,3690],{},"SI",[3304,3692,3693],{},"47",[3304,3695,3696],{},"\u002F",[3304,3698,3699],{},"79",[3304,3701,3702],{},"O",[3304,3704,3705],{},"111",[3304,3707,3708],{},"o",[3259,3710,3711,3714,3717,3720,3722,3725,3728,3731],{},[3304,3712,3713],{},"16",[3304,3715,3716],{},"DLE",[3304,3718,3719],{},"48",[3304,3721,3306],{},[3304,3723,3724],{},"80",[3304,3726,3727],{},"P",[3304,3729,3730],{},"112",[3304,3732,274],{},[3259,3734,3735,3738,3741,3744,3746,3749,3752,3755],{},[3304,3736,3737],{},"17",[3304,3739,3740],{},"DCI",[3304,3742,3743],{},"49",[3304,3745,3332],{},[3304,3747,3748],{},"81",[3304,3750,3751],{},"Q",[3304,3753,3754],{},"113",[3304,3756,3757],{},"q",[3259,3759,3760,3763,3766,3769,3771,3774,3777,3780],{},[3304,3761,3762],{},"18",[3304,3764,3765],{},"DC2",[3304,3767,3768],{},"50",[3304,3770,3194],{},[3304,3772,3773],{},"82",[3304,3775,3776],{},"R",[3304,3778,3779],{},"114",[3304,3781,3782],{},"r",[3259,3784,3785,3788,3791,3794,3796,3799,3802,3805],{},[3304,3786,3787],{},"19",[3304,3789,3790],{},"DC3",[3304,3792,3793],{},"51",[3304,3795,3188],{},[3304,3797,3798],{},"83",[3304,3800,3801],{},"S",[3304,3803,3804],{},"115",[3304,3806,3807],{},"s",[3259,3809,3810,3813,3816,3819,3821,3824,3827,3830],{},[3304,3811,3812],{},"20",[3304,3814,3815],{},"DC4",[3304,3817,3818],{},"52",[3304,3820,3406],{},[3304,3822,3823],{},"84",[3304,3825,3826],{},"T",[3304,3828,3829],{},"116",[3304,3831,3832],{},"t",[3259,3834,3835,3838,3841,3844,3846,3849,3852,3855],{},[3304,3836,3837],{},"21",[3304,3839,3840],{},"NAK",[3304,3842,3843],{},"53",[3304,3845,3432],{},[3304,3847,3848],{},"85",[3304,3850,3851],{},"U",[3304,3853,3854],{},"117",[3304,3856,3857],{},"u",[3259,3859,3860,3863,3866,3869,3871,3874,3877,3880],{},[3304,3861,3862],{},"22",[3304,3864,3865],{},"SYN",[3304,3867,3868],{},"54",[3304,3870,3457],{},[3304,3872,3873],{},"86",[3304,3875,3876],{},"V",[3304,3878,3879],{},"118",[3304,3881,3882],{},"v",[3259,3884,3885,3888,3891,3894,3896,3899,3902,3905],{},[3304,3886,3887],{},"23",[3304,3889,3890],{},"TB",[3304,3892,3893],{},"55",[3304,3895,3482],{},[3304,3897,3898],{},"87",[3304,3900,3901],{},"W",[3304,3903,3904],{},"119",[3304,3906,3907],{},"w",[3259,3909,3910,3913,3916,3919,3921,3924,3927,3930],{},[3304,3911,3912],{},"24",[3304,3914,3915],{},"CAN",[3304,3917,3918],{},"56",[3304,3920,3508],{},[3304,3922,3923],{},"88",[3304,3925,3926],{},"X",[3304,3928,3929],{},"120",[3304,3931,3932],{},"x",[3259,3934,3935,3938,3941,3944,3946,3949,3952,3955],{},[3304,3936,3937],{},"25",[3304,3939,3940],{},"EM",[3304,3942,3943],{},"57",[3304,3945,3533],{},[3304,3947,3948],{},"89",[3304,3950,3951],{},"Y",[3304,3953,3954],{},"121",[3304,3956,3957],{},"y",[3259,3959,3960,3963,3966,3969,3972,3975,3978,3981],{},[3304,3961,3962],{},"26",[3304,3964,3965],{},"SUB",[3304,3967,3968],{},"58",[3304,3970,3971],{},":",[3304,3973,3974],{},"90",[3304,3976,3977],{},"Z",[3304,3979,3980],{},"122",[3304,3982,3983],{},"z",[3259,3985,3986,3989,3992,3995,3997,4000,4003,4006],{},[3304,3987,3988],{},"27",[3304,3990,3991],{},"ESC",[3304,3993,3994],{},"59",[3304,3996,3173],{},[3304,3998,3999],{},"91",[3304,4001,4002],{},"[",[3304,4004,4005],{},"123",[3304,4007,4008],{},"{",[3259,4010,4011,4014,4017,4020,4023,4026,4028,4031],{},[3304,4012,4013],{},"28",[3304,4015,4016],{},"FS",[3304,4018,4019],{},"60",[3304,4021,4022],{},"\u003C",[3304,4024,4025],{},"92",[3304,4027,3696],{},[3304,4029,4030],{},"124",[3304,4032,4033],{},"|",[3259,4035,4036,4039,4042,4045,4047,4050,4053,4056],{},[3304,4037,4038],{},"29",[3304,4040,4041],{},"GS",[3304,4043,4044],{},"61",[3304,4046,2099],{},[3304,4048,4049],{},"93",[3304,4051,4052],{},"]",[3304,4054,4055],{},"125",[3304,4057,4058],{},"}",[3259,4060,4061,4064,4067,4070,4073,4076,4079,4082],{},[3304,4062,4063],{},"30",[3304,4065,4066],{},"RS",[3304,4068,4069],{},"62",[3304,4071,4072],{},">",[3304,4074,4075],{},"94",[3304,4077,4078],{},"^",[3304,4080,4081],{},"126",[3304,4083,218],{},[3259,4085,4086,4089,4092,4095,4098,4101,4104,4107],{},[3304,4087,4088],{},"31",[3304,4090,4091],{},"US",[3304,4093,4094],{},"63",[3304,4096,4097],{},"?",[3304,4099,4100],{},"95",[3304,4102,4103],{},"_",[3304,4105,4106],{},"127",[3304,4108,4109],{},"DEL",[274,4111,4112,4113,4116],{},"ASCII 码大致由以下",[538,4114,4115],{},"两部分组","成：",[4118,4119,4120,4127],"ul",{},[1073,4121,4122,4123,4126],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[538,4124,4125],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[1073,4128,4129,4130,4133],{},"ASCII 打印字符：数字 ",[538,4131,4132],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[30,4135,4137],{"id":4136},"_134转义字符","1.3.4转义字符",[19,4139,4141],{"className":3109,"code":4140,"language":3111,"meta":28,"style":28},"\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",[26,4142,4143,4148,4164,4178,4183,4196,4201],{"__ignoreMap":28},[52,4144,4145],{"class":54,"line":55},[52,4146,4147],{"class":332},"\u002F\u002F换行符\n",[52,4149,4150,4153,4156,4159,4161],{"class":54,"line":69},[52,4151,4152],{"class":622},"cout ",[52,4154,4155],{"class":160},"\u003C\u003C",[52,4157,4158],{"class":62},"\"hello world\u002Fn\"",[52,4160,3173],{"class":622},[52,4162,4163],{"class":332}," \u002F\u002F就等同于如下：\n",[52,4165,4166,4168,4170,4173,4175],{"class":54,"line":82},[52,4167,4152],{"class":622},[52,4169,4155],{"class":160},[52,4171,4172],{"class":62},"\"hello world\"",[52,4174,4155],{"class":160},[52,4176,4177],{"class":622},"endl;\n",[52,4179,4180],{"class":54,"line":97},[52,4181,4182],{"class":332},"\u002F\u002F反斜杠\n",[52,4184,4185,4187,4189,4192,4194],{"class":54,"line":112},[52,4186,4152],{"class":622},[52,4188,4155],{"class":160},[52,4190,4191],{"class":62},"\"\u002F\u002F\"",[52,4193,4155],{"class":160},[52,4195,4177],{"class":622},[52,4197,4198],{"class":54,"line":119},[52,4199,4200],{"class":332},"\u002F\u002F水平制表符\n",[52,4202,4203,4205,4207,4210,4213,4216,4218,4221],{"class":54,"line":130},[52,4204,4152],{"class":622},[52,4206,4155],{"class":160},[52,4208,4209],{"class":62},"\"aaaa",[52,4211,4212],{"class":90},"\\t",[52,4214,4215],{"class":62},"helloworld\"",[52,4217,4155],{"class":160},[52,4219,4220],{"class":622},"endl;",[52,4222,4223],{"class":332}," \u002F\u002F输出窗口时有对齐效果\n",[30,4225,4227],{"id":4226},"_135字符串型","1.3.5字符串型",[274,4229,4230,4231,4233],{},"char 变量名",[52,4232],{},"=\"字符串值\"",[19,4235,4237],{"className":3109,"code":4236,"language":3111,"meta":28,"style":28},"\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",[26,4238,4239,4244,4249,4254,4259,4273,4286,4291,4296,4307],{"__ignoreMap":28},[52,4240,4241],{"class":54,"line":55},[52,4242,4243],{"class":332},"\u002F\u002Fc风格字符串\n",[52,4245,4246],{"class":54,"line":69},[52,4247,4248],{"class":332},"\u002F\u002F注意事项：\n",[52,4250,4251],{"class":54,"line":82},[52,4252,4253],{"class":332},"\u002F\u002F1.char字符串名[]\n",[52,4255,4256],{"class":54,"line":97},[52,4257,4258],{"class":332},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[52,4260,4261,4263,4266,4268,4270],{"class":54,"line":112},[52,4262,3213],{"class":160},[52,4264,4265],{"class":622}," str[]",[52,4267,2099],{"class":160},[52,4269,4172],{"class":62},[52,4271,4272],{"class":622},";\n",[52,4274,4275,4277,4279,4282,4284],{"class":54,"line":119},[52,4276,4152],{"class":622},[52,4278,4155],{"class":160},[52,4280,4281],{"class":622},"str",[52,4283,4155],{"class":160},[52,4285,4177],{"class":622},[52,4287,4288],{"class":54,"line":130},[52,4289,4290],{"class":332},"\u002F\u002Fc++风格字符串\n",[52,4292,4293],{"class":54,"line":136},[52,4294,4295],{"class":332},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[52,4297,4298,4301,4303,4305],{"class":54,"line":141},[52,4299,4300],{"class":622},"string str2",[52,4302,2099],{"class":160},[52,4304,4172],{"class":62},[52,4306,4272],{"class":622},[52,4308,4309,4311,4313,4316,4318],{"class":54,"line":146},[52,4310,4152],{"class":622},[52,4312,4155],{"class":160},[52,4314,4315],{"class":622},"str2",[52,4317,4155],{"class":160},[52,4319,4177],{"class":622},[30,4321,4323],{"id":4322},"_136布尔类型bool","1.3.6布尔类型bool",[19,4325,4327],{"className":3109,"code":4326,"language":3111,"meta":28,"style":28},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[26,4328,4329,4344],{"__ignoreMap":28},[52,4330,4331,4334,4337,4339,4342],{"class":54,"line":55},[52,4332,4333],{"class":160},"bool",[52,4335,4336],{"class":622}," flag",[52,4338,2099],{"class":160},[52,4340,4341],{"class":90},"true",[52,4343,4272],{"class":622},[52,4345,4346,4349,4352,4355,4357,4359],{"class":54,"line":69},[52,4347,4348],{"class":622},"cout",[52,4350,4351],{"class":160},"\u003C\u003Csizeof",[52,4353,4354],{"class":622},"(flag)",[52,4356,4155],{"class":160},[52,4358,4220],{"class":622},[52,4360,4361],{"class":332}," \u002F\u002F查看布尔占内存空间\n",[14,4363,4365],{"id":4364},"_14键盘输入cin","1.4键盘输入cin",[19,4367,4369],{"className":3109,"code":4368,"language":3111,"meta":28,"style":28},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[26,4370,4371,4384,4401,4412],{"__ignoreMap":28},[52,4372,4373,4375,4378,4380,4382],{"class":54,"line":55},[52,4374,3124],{"class":160},[52,4376,4377],{"class":622}," a",[52,4379,2099],{"class":160},[52,4381,3306],{"class":90},[52,4383,4272],{"class":622},[52,4385,4386,4388,4390,4393,4395,4397,4399],{"class":54,"line":69},[52,4387,4348],{"class":622},[52,4389,4155],{"class":160},[52,4391,4392],{"class":62},"\"请给整型变量a赋值\"",[52,4394,4155],{"class":160},[52,4396,300],{"class":622},[52,4398,4155],{"class":160},[52,4400,4177],{"class":622},[52,4402,4403,4406,4409],{"class":54,"line":82},[52,4404,4405],{"class":622},"cin ",[52,4407,4408],{"class":160},">>",[52,4410,4411],{"class":622}," a;\n",[52,4413,4414,4416,4418,4421,4424,4426,4428],{"class":54,"line":97},[52,4415,4152],{"class":622},[52,4417,4155],{"class":160},[52,4419,4420],{"class":62}," \"整型变量a=\"",[52,4422,4423],{"class":160}," \u003C\u003C",[52,4425,300],{"class":622},[52,4427,4155],{"class":160},[52,4429,4177],{"class":622},[14,4431,4433],{"id":4432},"_15运算符","1.5运算符",[30,4435,4437],{"id":4436},"_151算术运算符","1.5.1算术运算符",[274,4439,4440,4443],{},[280,4441],{"alt":28,"src":4442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1070,4445,4446,4449,4452],{},[1073,4447,4448],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[1073,4450,4451],{},"两个小数不可以做取模运算",[1073,4453,4454],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[30,4456,4458],{"id":4457},"_152赋值运算符","1.5.2赋值运算符",[274,4460,4461],{},[280,4462],{"alt":28,"src":4463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[30,4465,4467],{"id":4466},"_153比较运算符","1.5.3比较运算符",[274,4469,4470],{},[280,4471],{"alt":28,"src":4472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[30,4474,4476],{"id":4475},"_154逻辑运算符","1.5.4逻辑运算符",[274,4478,4479],{},[280,4480],{"alt":28,"src":4481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,4483,4485],{"id":4484},"_16程序流程结构","1.6程序流程结构",[30,4487,4489],{"id":4488},"_161选择结构","1.6.1选择结构",[1070,4491,4492],{},[1073,4493,4494],{},"if语句\n单行、多行、多条件if语句",[19,4496,4498],{"className":3109,"code":4497,"language":3111,"meta":28,"style":28},"\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",[26,4499,4500,4505,4520,4525,4539,4544,4549,4558,4571,4575,4588,4592,4597,4601,4614,4618,4623,4643,4647,4660,4664,4692,4696,4712,4716,4720,4725,4739,4744],{"__ignoreMap":28},[52,4501,4502],{"class":54,"line":55},[52,4503,4504],{"class":332},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[52,4506,4507,4510,4513,4515,4518],{"class":54,"line":69},[52,4508,4509],{"class":160},"if",[52,4511,4512],{"class":622},"(score",[52,4514,4072],{"class":160},[52,4516,4517],{"class":90},"600",[52,4519,170],{"class":622},[52,4521,4522],{"class":54,"line":82},[52,4523,4524],{"class":622},"{\n",[52,4526,4527,4530,4532,4535,4537],{"class":54,"line":97},[52,4528,4529],{"class":622},"    cout",[52,4531,4155],{"class":160},[52,4533,4534],{"class":62},"'这是单行if语句'",[52,4536,4155],{"class":160},[52,4538,4177],{"class":622},[52,4540,4541],{"class":54,"line":112},[52,4542,4543],{"class":622},"}\n",[52,4545,4546],{"class":54,"line":119},[52,4547,4548],{"class":332},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[52,4550,4551,4553,4555],{"class":54,"line":130},[52,4552,4405],{"class":622},[52,4554,4408],{"class":160},[52,4556,4557],{"class":622}," score\n",[52,4559,4560,4562,4564,4567,4569],{"class":54,"line":136},[52,4561,4509],{"class":160},[52,4563,4512],{"class":622},[52,4565,4566],{"class":160},"\u003C=",[52,4568,4517],{"class":90},[52,4570,170],{"class":622},[52,4572,4573],{"class":54,"line":141},[52,4574,4524],{"class":622},[52,4576,4577,4579,4581,4584,4586],{"class":54,"line":146},[52,4578,4529],{"class":622},[52,4580,4408],{"class":160},[52,4582,4583],{"class":62},"\"小于等于600\"",[52,4585,4155],{"class":160},[52,4587,4177],{"class":622},[52,4589,4590],{"class":54,"line":152},[52,4591,4543],{"class":622},[52,4593,4594],{"class":54,"line":157},[52,4595,4596],{"class":160},"else\n",[52,4598,4599],{"class":54,"line":173},[52,4600,4524],{"class":622},[52,4602,4603,4605,4607,4610,4612],{"class":54,"line":178},[52,4604,4529],{"class":622},[52,4606,4408],{"class":160},[52,4608,4609],{"class":62},"\"大于600\"",[52,4611,4408],{"class":160},[52,4613,4177],{"class":622},[52,4615,4616],{"class":54,"line":184},[52,4617,4543],{"class":622},[52,4619,4620],{"class":54,"line":189},[52,4621,4622],{"class":332},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[52,4624,4625,4627,4630,4632,4634,4637,4639,4641],{"class":54,"line":201},[52,4626,4509],{"class":160},[52,4628,4629],{"class":622}," (",[52,4631,3306],{"class":90},[52,4633,4022],{"class":160},[52,4635,4636],{"class":622},"num",[52,4638,4022],{"class":160},[52,4640,3424],{"class":90},[52,4642,170],{"class":622},[52,4644,4645],{"class":54,"line":206},[52,4646,4524],{"class":622},[52,4648,4649,4651,4653,4656,4658],{"class":54,"line":224},[52,4650,4529],{"class":622},[52,4652,4155],{"class":160},[52,4654,4655],{"class":62},"\"小于100\"",[52,4657,4155],{"class":160},[52,4659,4177],{"class":622},[52,4661,4662],{"class":54,"line":229},[52,4663,4543],{"class":622},[52,4665,4666,4669,4672,4675,4678,4680,4683,4685,4687,4690],{"class":54,"line":241},[52,4667,4668],{"class":160},"else",[52,4670,4671],{"class":160}," if",[52,4673,4674],{"class":622}," (nmu",[52,4676,4677],{"class":160},">=",[52,4679,3424],{"class":90},[52,4681,4682],{"class":160},"&&",[52,4684,4636],{"class":622},[52,4686,4022],{"class":160},[52,4688,4689],{"class":90},"200",[52,4691,170],{"class":622},[52,4693,4694],{"class":54,"line":246},[52,4695,4524],{"class":622},[52,4697,4698,4700,4702,4705,4707,4709],{"class":54,"line":252},[52,4699,4529],{"class":622},[52,4701,4155],{"class":160},[52,4703,4704],{"class":62},"\"不小于100且小于200\"",[52,4706,4155],{"class":160},[52,4708,4220],{"class":622},[52,4710,4711],{"class":332}," \u002F\u002F可以无限else if,python中是elif：\n",[52,4713,4714],{"class":54,"line":257},[52,4715,4543],{"class":622},[52,4717,4718],{"class":54,"line":266},[52,4719,4596],{"class":160},[52,4721,4723],{"class":54,"line":4722},26,[52,4724,4524],{"class":622},[52,4726,4728,4730,4732,4735,4737],{"class":54,"line":4727},27,[52,4729,4529],{"class":622},[52,4731,4155],{"class":160},[52,4733,4734],{"class":62},"\"不小于200\"",[52,4736,4155],{"class":160},[52,4738,4177],{"class":622},[52,4740,4742],{"class":54,"line":4741},28,[52,4743,4543],{"class":622},[52,4745,4747],{"class":54,"line":4746},29,[52,4748,4749],{"class":332},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1070,4751,4752],{"start":69},[1073,4753,4754],{},"三目运算符",[19,4756,4758],{"className":3109,"code":4757,"language":3111,"meta":28,"style":28},"\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",[26,4759,4760,4765,4770,4796,4818,4835,4840,4863,4878],{"__ignoreMap":28},[52,4761,4762],{"class":54,"line":55},[52,4763,4764],{"class":332},"\u002F\u002F创建三个变量a,b,c\n",[52,4766,4767],{"class":54,"line":69},[52,4768,4769],{"class":332},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[52,4771,4772,4774,4776,4778,4780,4783,4785,4787,4790,4792,4794],{"class":54,"line":82},[52,4773,3124],{"class":160},[52,4775,4377],{"class":622},[52,4777,2099],{"class":160},[52,4779,3812],{"class":90},[52,4781,4782],{"class":622},",b",[52,4784,2099],{"class":160},[52,4786,3559],{"class":90},[52,4788,4789],{"class":622},",c",[52,4791,2099],{"class":160},[52,4793,3306],{"class":90},[52,4795,4272],{"class":622},[52,4797,4798,4800,4802,4805,4807,4809,4811,4813,4815],{"class":54,"line":97},[52,4799,3401],{"class":622},[52,4801,2099],{"class":160},[52,4803,4804],{"class":622},"(a",[52,4806,4072],{"class":160},[52,4808,3376],{"class":622},[52,4810,4097],{"class":160},[52,4812,300],{"class":622},[52,4814,3971],{"class":160},[52,4816,4817],{"class":622},"b)\n",[52,4819,4820,4822,4824,4827,4829,4831,4833],{"class":54,"line":112},[52,4821,4348],{"class":622},[52,4823,4155],{"class":160},[52,4825,4826],{"class":62},"\"c=\"",[52,4828,4155],{"class":160},[52,4830,3401],{"class":622},[52,4832,4155],{"class":160},[52,4834,4177],{"class":622},[52,4836,4837],{"class":54,"line":119},[52,4838,4839],{"class":332},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[52,4841,4842,4844,4846,4848,4850,4852,4854,4857,4859,4861],{"class":54,"line":130},[52,4843,4804],{"class":622},[52,4845,4072],{"class":160},[52,4847,3376],{"class":622},[52,4849,4097],{"class":160},[52,4851,300],{"class":622},[52,4853,3971],{"class":160},[52,4855,4856],{"class":622},"b)",[52,4858,2099],{"class":160},[52,4860,3424],{"class":90},[52,4862,4272],{"class":622},[52,4864,4865,4867,4869,4871,4873,4875],{"class":54,"line":136},[52,4866,4348],{"class":622},[52,4868,4155],{"class":160},[52,4870,300],{"class":622},[52,4872,4155],{"class":160},[52,4874,4220],{"class":622},[52,4876,4877],{"class":332}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[52,4879,4880,4882,4884,4886,4888,4890],{"class":54,"line":141},[52,4881,4348],{"class":622},[52,4883,4155],{"class":160},[52,4885,3376],{"class":622},[52,4887,4155],{"class":160},[52,4889,4220],{"class":622},[52,4891,4892],{"class":332}," \u002F\u002F10   a>b,b还是原值\n",[1070,4894,4895],{"start":82},[1073,4896,4897],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[19,4899,4901],{"className":3109,"code":4900,"language":3111,"meta":28,"style":28},"\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",[26,4902,4903,4908,4916,4929,4939,4943,4957,4970,4980,4988,4993,5018,5039,5061,5082,5104,5125,5145,5150],{"__ignoreMap":28},[52,4904,4905],{"class":54,"line":55},[52,4906,4907],{"class":332},"\u002F\u002F案例-电影打分\n",[52,4909,4910,4913],{"class":54,"line":69},[52,4911,4912],{"class":160},"#include",[52,4914,4915],{"class":62},"\u003Ciostream>\n",[52,4917,4918,4921,4924,4927],{"class":54,"line":82},[52,4919,4920],{"class":160},"using",[52,4922,4923],{"class":160}," namespace",[52,4925,4926],{"class":58}," std",[52,4928,4272],{"class":622},[52,4930,4931,4933,4936],{"class":54,"line":97},[52,4932,3124],{"class":160},[52,4934,4935],{"class":58}," main",[52,4937,4938],{"class":622},"()\n",[52,4940,4941],{"class":54,"line":112},[52,4942,4524],{"class":622},[52,4944,4945,4948,4951,4953,4955],{"class":54,"line":119},[52,4946,4947],{"class":160},"    int",[52,4949,4950],{"class":622}," score",[52,4952,2099],{"class":160},[52,4954,3306],{"class":90},[52,4956,4272],{"class":622},[52,4958,4959,4961,4963,4966,4968],{"class":54,"line":130},[52,4960,4529],{"class":622},[52,4962,4155],{"class":160},[52,4964,4965],{"class":62},"\"电影打分：\"",[52,4967,4155],{"class":160},[52,4969,4177],{"class":622},[52,4971,4972,4975,4977],{"class":54,"line":136},[52,4973,4974],{"class":622},"    cin",[52,4976,4408],{"class":160},[52,4978,4979],{"class":622},"score;\n",[52,4981,4982,4985],{"class":54,"line":141},[52,4983,4984],{"class":160},"    switch",[52,4986,4987],{"class":622},"(score)\n",[52,4989,4990],{"class":54,"line":146},[52,4991,4992],{"class":622},"    {\n",[52,4994,4995,4998,5001,5004,5006,5009,5011,5013,5016],{"class":54,"line":152},[52,4996,4997],{"class":160},"        case",[52,4999,5000],{"class":90}," 10",[52,5002,5003],{"class":622},":cout",[52,5005,4155],{"class":160},[52,5007,5008],{"class":62},"\"经典\"",[52,5010,4155],{"class":160},[52,5012,4220],{"class":622},[52,5014,5015],{"class":160},"break",[52,5017,4272],{"class":622},[52,5019,5020,5022,5025,5027,5029,5031,5033,5035,5037],{"class":54,"line":157},[52,5021,4997],{"class":160},[52,5023,5024],{"class":90}," 9",[52,5026,5003],{"class":622},[52,5028,4155],{"class":160},[52,5030,5008],{"class":62},[52,5032,4155],{"class":160},[52,5034,4220],{"class":622},[52,5036,5015],{"class":160},[52,5038,4272],{"class":622},[52,5040,5041,5043,5046,5048,5050,5053,5055,5057,5059],{"class":54,"line":173},[52,5042,4997],{"class":160},[52,5044,5045],{"class":90}," 8",[52,5047,5003],{"class":622},[52,5049,4155],{"class":160},[52,5051,5052],{"class":62},"\"非常好\"",[52,5054,4155],{"class":160},[52,5056,4220],{"class":622},[52,5058,5015],{"class":160},[52,5060,4272],{"class":622},[52,5062,5063,5065,5068,5070,5072,5074,5076,5078,5080],{"class":54,"line":178},[52,5064,4997],{"class":160},[52,5066,5067],{"class":90}," 7",[52,5069,5003],{"class":622},[52,5071,4155],{"class":160},[52,5073,5052],{"class":62},[52,5075,4155],{"class":160},[52,5077,4220],{"class":622},[52,5079,5015],{"class":160},[52,5081,4272],{"class":622},[52,5083,5084,5086,5089,5091,5093,5096,5098,5100,5102],{"class":54,"line":184},[52,5085,4997],{"class":160},[52,5087,5088],{"class":90}," 6",[52,5090,5003],{"class":622},[52,5092,4155],{"class":160},[52,5094,5095],{"class":62},"\"一般\"",[52,5097,4155],{"class":160},[52,5099,4220],{"class":622},[52,5101,5015],{"class":160},[52,5103,4272],{"class":622},[52,5105,5106,5108,5111,5113,5115,5117,5119,5121,5123],{"class":54,"line":189},[52,5107,4997],{"class":160},[52,5109,5110],{"class":90}," 5",[52,5112,5003],{"class":622},[52,5114,4155],{"class":160},[52,5116,5095],{"class":62},[52,5118,4155],{"class":160},[52,5120,4220],{"class":622},[52,5122,5015],{"class":160},[52,5124,4272],{"class":622},[52,5126,5127,5130,5132,5134,5137,5139,5141,5143],{"class":54,"line":201},[52,5128,5129],{"class":160},"        default",[52,5131,5003],{"class":622},[52,5133,4155],{"class":160},[52,5135,5136],{"class":62},"\"烂片\"",[52,5138,4155],{"class":160},[52,5140,4220],{"class":622},[52,5142,5015],{"class":160},[52,5144,4272],{"class":622},[52,5146,5147],{"class":54,"line":206},[52,5148,5149],{"class":622},"    }\n",[52,5151,5152],{"class":54,"line":224},[52,5153,4543],{"class":622},[274,5155,5156],{},"if和switch区别：",[4118,5158,5159,5162],{},[1073,5160,5161],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[1073,5163,5164],{},"switch优点：结构清晰，执行效率高",[30,5166,5168],{"id":5167},"_162循环结构","1.6.2循环结构",[1070,5170,5171],{},[1073,5172,5173],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[19,5175,5177],{"className":3109,"code":5176,"language":3111,"meta":28,"style":28},"\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",[26,5178,5179,5184,5192,5196,5209,5223,5227,5247,5257,5261,5273],{"__ignoreMap":28},[52,5180,5181],{"class":54,"line":55},[52,5182,5183],{"class":332},"\u002F\u002F打印0-9数字\n",[52,5185,5186,5188,5190],{"class":54,"line":69},[52,5187,3124],{"class":160},[52,5189,4935],{"class":58},[52,5191,4938],{"class":622},[52,5193,5194],{"class":54,"line":82},[52,5195,4524],{"class":622},[52,5197,5198,5200,5203,5205,5207],{"class":54,"line":97},[52,5199,4947],{"class":160},[52,5201,5202],{"class":622}," num",[52,5204,2099],{"class":160},[52,5206,3306],{"class":90},[52,5208,4272],{"class":622},[52,5210,5211,5214,5217,5219,5221],{"class":54,"line":112},[52,5212,5213],{"class":160},"    while",[52,5215,5216],{"class":622},"(num",[52,5218,4022],{"class":160},[52,5220,3559],{"class":90},[52,5222,170],{"class":622},[52,5224,5225],{"class":54,"line":119},[52,5226,4992],{"class":622},[52,5228,5229,5232,5235,5237,5239,5241,5244],{"class":54,"line":130},[52,5230,5231],{"class":58},"       std",[52,5233,5234],{"class":622},"::cout",[52,5236,4155],{"class":160},[52,5238,4636],{"class":622},[52,5240,4155],{"class":160},[52,5242,5243],{"class":58},"std",[52,5245,5246],{"class":622},"::endl;\n",[52,5248,5249,5252,5255],{"class":54,"line":136},[52,5250,5251],{"class":622},"        num",[52,5253,5254],{"class":160},"++",[52,5256,4272],{"class":622},[52,5258,5259],{"class":54,"line":141},[52,5260,5149],{"class":622},[52,5262,5263,5266,5268,5271],{"class":54,"line":146},[52,5264,5265],{"class":58},"    system",[52,5267,3121],{"class":622},[52,5269,5270],{"class":62},"\"pause\"",[52,5272,170],{"class":622},[52,5274,5275],{"class":54,"line":152},[52,5276,4543],{"class":622},[274,5278,5279],{},"注意：写好循环条件，避免死循环情况",[19,5281,5283],{"className":3109,"code":5282,"language":3111,"meta":28,"style":28},"\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",[26,5284,5285,5290,5297,5304,5314,5322,5326,5331,5358,5362,5367,5375,5402,5407,5412,5425,5435,5439,5449,5454,5467,5472,5486,5491,5506,5510,5523,5527,5532,5536,5550,5558,5563,5569,5575,5580],{"__ignoreMap":28},[52,5286,5287],{"class":54,"line":55},[52,5288,5289],{"class":332},"\u002F\u002F循环结构-猜数字\n",[52,5291,5292,5294],{"class":54,"line":69},[52,5293,4912],{"class":160},[52,5295,5296],{"class":62}," \u003Ciostream>\n",[52,5298,5299,5301],{"class":54,"line":82},[52,5300,4912],{"class":160},[52,5302,5303],{"class":62}," \u003Cctime>\n",[52,5305,5306,5308,5310,5312],{"class":54,"line":97},[52,5307,4920],{"class":160},[52,5309,4923],{"class":160},[52,5311,4926],{"class":58},[52,5313,4272],{"class":622},[52,5315,5316,5318,5320],{"class":54,"line":112},[52,5317,3124],{"class":160},[52,5319,4935],{"class":58},[52,5321,4938],{"class":622},[52,5323,5324],{"class":54,"line":119},[52,5325,4524],{"class":622},[52,5327,5328],{"class":54,"line":130},[52,5329,5330],{"class":332},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[52,5332,5333,5336,5339,5342,5345,5347,5350,5352,5355],{"class":54,"line":136},[52,5334,5335],{"class":58},"    srand",[52,5337,5338],{"class":622},"((",[52,5340,5341],{"class":160},"unsigned",[52,5343,5344],{"class":160}," int",[52,5346,3542],{"class":622},[52,5348,5349],{"class":58},"time",[52,5351,3121],{"class":622},[52,5353,5354],{"class":90},"NULL",[52,5356,5357],{"class":622},"));\n",[52,5359,5360],{"class":54,"line":141},[52,5361,116],{"emptyLinePlaceholder":115},[52,5363,5364],{"class":54,"line":146},[52,5365,5366],{"class":332},"    \u002F\u002F1.系统生成随机数\n",[52,5368,5369,5372],{"class":54,"line":152},[52,5370,5371],{"class":332},"    \u002F\u002Frand()%100",[52,5373,5374],{"class":332}," \u002F\u002F生成0-99的随机数\n",[52,5376,5377,5379,5381,5383,5386,5389,5391,5393,5395,5397,5399],{"class":54,"line":157},[52,5378,4947],{"class":160},[52,5380,5202],{"class":622},[52,5382,2099],{"class":160},[52,5384,5385],{"class":58},"rand",[52,5387,5388],{"class":622},"()",[52,5390,3441],{"class":160},[52,5392,3424],{"class":90},[52,5394,3593],{"class":160},[52,5396,3332],{"class":90},[52,5398,3173],{"class":622},[52,5400,5401],{"class":332}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[52,5403,5404],{"class":54,"line":173},[52,5405,5406],{"class":332},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[52,5408,5409],{"class":54,"line":178},[52,5410,5411],{"class":332},"    \u002F\u002F2.玩家猜测\n",[52,5413,5414,5416,5419,5421,5423],{"class":54,"line":184},[52,5415,4947],{"class":160},[52,5417,5418],{"class":622}," val",[52,5420,2099],{"class":160},[52,5422,3306],{"class":90},[52,5424,4272],{"class":622},[52,5426,5427,5429,5431,5433],{"class":54,"line":189},[52,5428,5213],{"class":160},[52,5430,4629],{"class":622},[52,5432,3332],{"class":90},[52,5434,170],{"class":622},[52,5436,5437],{"class":54,"line":201},[52,5438,4992],{"class":622},[52,5440,5441,5444,5446],{"class":54,"line":206},[52,5442,5443],{"class":622},"        cin",[52,5445,4408],{"class":160},[52,5447,5448],{"class":622},"val;\n",[52,5450,5451],{"class":54,"line":224},[52,5452,5453],{"class":332},"        \u002F\u002F3.判断玩家猜测\n",[52,5455,5456,5459,5462,5464],{"class":54,"line":229},[52,5457,5458],{"class":160},"        if",[52,5460,5461],{"class":622},"(val",[52,5463,4022],{"class":160},[52,5465,5466],{"class":622},"num) \n",[52,5468,5469],{"class":54,"line":241},[52,5470,5471],{"class":622},"        {\n",[52,5473,5474,5477,5479,5482,5484],{"class":54,"line":246},[52,5475,5476],{"class":622},"            cout",[52,5478,4155],{"class":160},[52,5480,5481],{"class":62},"\"猜小了！\"",[52,5483,4155],{"class":160},[52,5485,4177],{"class":622},[52,5487,5488],{"class":54,"line":252},[52,5489,5490],{"class":622},"        }\n",[52,5492,5493,5496,5498,5501,5503],{"class":54,"line":257},[52,5494,5495],{"class":160},"        else",[52,5497,4671],{"class":160},[52,5499,5500],{"class":622}," (val",[52,5502,4072],{"class":160},[52,5504,5505],{"class":622},"num)\n",[52,5507,5508],{"class":54,"line":266},[52,5509,5471],{"class":622},[52,5511,5512,5514,5516,5519,5521],{"class":54,"line":4722},[52,5513,5476],{"class":622},[52,5515,4155],{"class":160},[52,5517,5518],{"class":62},"\"猜大了！\"",[52,5520,4155],{"class":160},[52,5522,4177],{"class":622},[52,5524,5525],{"class":54,"line":4727},[52,5526,5490],{"class":622},[52,5528,5529],{"class":54,"line":4741},[52,5530,5531],{"class":160},"        else\n",[52,5533,5534],{"class":54,"line":4746},[52,5535,5471],{"class":622},[52,5537,5539,5541,5543,5546,5548],{"class":54,"line":5538},30,[52,5540,5476],{"class":622},[52,5542,4155],{"class":160},[52,5544,5545],{"class":62},"\"猜对了！\"",[52,5547,4155],{"class":160},[52,5549,4177],{"class":622},[52,5551,5553,5556],{"class":54,"line":5552},31,[52,5554,5555],{"class":160},"            break",[52,5557,4272],{"class":622},[52,5559,5561],{"class":54,"line":5560},32,[52,5562,5490],{"class":622},[52,5564,5566],{"class":54,"line":5565},33,[52,5567,5568],{"class":332},"        \u002F\u002F猜对 退出游戏\n",[52,5570,5572],{"class":54,"line":5571},34,[52,5573,5574],{"class":332},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[52,5576,5578],{"class":54,"line":5577},35,[52,5579,5149],{"class":622},[52,5581,5583],{"class":54,"line":5582},36,[52,5584,4543],{"class":622},[1070,5586,5587],{"start":69},[1073,5588,5589,5590,5593],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[538,5591,5592],{},"do...while会先执行一次循环语句","，在判断循环语句",[19,5595,5597],{"className":3109,"code":5596,"language":3111,"meta":28,"style":28},"\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",[26,5598,5599,5604,5612,5616,5628,5635,5639,5656,5663,5667,5680,5690],{"__ignoreMap":28},[52,5600,5601],{"class":54,"line":55},[52,5602,5603],{"class":332},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[52,5605,5606,5608,5610],{"class":54,"line":69},[52,5607,3124],{"class":160},[52,5609,4935],{"class":58},[52,5611,4938],{"class":622},[52,5613,5614],{"class":54,"line":82},[52,5615,4524],{"class":622},[52,5617,5618,5620,5622,5624,5626],{"class":54,"line":97},[52,5619,4947],{"class":160},[52,5621,5202],{"class":622},[52,5623,2099],{"class":160},[52,5625,3306],{"class":90},[52,5627,4272],{"class":622},[52,5629,5630,5633],{"class":54,"line":112},[52,5631,5632],{"class":160},"    do",[52,5634,623],{"class":622},[52,5636,5637],{"class":54,"line":119},[52,5638,4992],{"class":622},[52,5640,5641,5644,5646,5648,5650,5652,5654],{"class":54,"line":130},[52,5642,5643],{"class":58},"        std",[52,5645,5234],{"class":622},[52,5647,4155],{"class":160},[52,5649,4636],{"class":622},[52,5651,4155],{"class":160},[52,5653,5243],{"class":58},[52,5655,5246],{"class":622},[52,5657,5658,5660],{"class":54,"line":136},[52,5659,5251],{"class":622},[52,5661,5662],{"class":160},"++\n",[52,5664,5665],{"class":54,"line":141},[52,5666,5149],{"class":622},[52,5668,5669,5671,5673,5675,5677],{"class":54,"line":146},[52,5670,5213],{"class":160},[52,5672,5216],{"class":622},[52,5674,4022],{"class":160},[52,5676,3559],{"class":90},[52,5678,5679],{"class":622},");\n",[52,5681,5682,5684,5686,5688],{"class":54,"line":152},[52,5683,5265],{"class":58},[52,5685,3121],{"class":622},[52,5687,5270],{"class":62},[52,5689,5679],{"class":622},[52,5691,5692],{"class":54,"line":157},[52,5693,4543],{"class":622},[274,5695,5696],{},"案例-水仙花数",[274,5698,5699],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[274,5701,5702],{},"例如：1^3+5^3+3^3=153",[274,5704,5705],{},"请用do...while语句，求出所有3位数的水仙花数",[19,5707,5709],{"className":3109,"code":5708,"language":3111,"meta":28,"style":28},"#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",[26,5710,5711,5717,5727,5735,5739,5744,5756,5762,5766,5771,5787,5803,5819,5834,5853,5868,5916,5920,5932,5936,5944,5948,5962],{"__ignoreMap":28},[52,5712,5713,5715],{"class":54,"line":55},[52,5714,4912],{"class":160},[52,5716,5296],{"class":62},[52,5718,5719,5721,5723,5725],{"class":54,"line":69},[52,5720,4920],{"class":160},[52,5722,4923],{"class":160},[52,5724,4926],{"class":58},[52,5726,4272],{"class":622},[52,5728,5729,5731,5733],{"class":54,"line":82},[52,5730,3124],{"class":160},[52,5732,4935],{"class":58},[52,5734,4938],{"class":622},[52,5736,5737],{"class":54,"line":97},[52,5738,4524],{"class":622},[52,5740,5741],{"class":54,"line":112},[52,5742,5743],{"class":332},"    \u002F\u002F1.先打印所有三位数字\n",[52,5745,5746,5748,5750,5752,5754],{"class":54,"line":119},[52,5747,4947],{"class":160},[52,5749,5202],{"class":622},[52,5751,2099],{"class":160},[52,5753,3424],{"class":90},[52,5755,4272],{"class":622},[52,5757,5758,5760],{"class":54,"line":130},[52,5759,5632],{"class":160},[52,5761,623],{"class":622},[52,5763,5764],{"class":54,"line":136},[52,5765,4992],{"class":622},[52,5767,5768],{"class":54,"line":141},[52,5769,5770],{"class":332},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[52,5772,5773,5776,5778,5780,5782,5784],{"class":54,"line":146},[52,5774,5775],{"class":160},"        int",[52,5777,4377],{"class":622},[52,5779,2099],{"class":160},[52,5781,3306],{"class":90},[52,5783,3173],{"class":622},[52,5785,5786],{"class":332}," \u002F\u002F个位\n",[52,5788,5789,5791,5794,5796,5798,5800],{"class":54,"line":152},[52,5790,5775],{"class":160},[52,5792,5793],{"class":622}," b",[52,5795,2099],{"class":160},[52,5797,3306],{"class":90},[52,5799,3173],{"class":622},[52,5801,5802],{"class":332}," \u002F\u002F十位\n",[52,5804,5805,5807,5810,5812,5814,5816],{"class":54,"line":157},[52,5806,5775],{"class":160},[52,5808,5809],{"class":622}," c",[52,5811,2099],{"class":160},[52,5813,3306],{"class":90},[52,5815,3173],{"class":622},[52,5817,5818],{"class":332}," \u002F\u002F百位\n",[52,5820,5821,5824,5826,5828,5830,5832],{"class":54,"line":173},[52,5822,5823],{"class":622},"        a",[52,5825,2099],{"class":160},[52,5827,4636],{"class":622},[52,5829,3441],{"class":160},[52,5831,3559],{"class":90},[52,5833,4272],{"class":622},[52,5835,5836,5839,5841,5843,5845,5847,5849,5851],{"class":54,"line":178},[52,5837,5838],{"class":622},"        b",[52,5840,2099],{"class":160},[52,5842,4636],{"class":622},[52,5844,3696],{"class":160},[52,5846,3559],{"class":90},[52,5848,3441],{"class":160},[52,5850,3559],{"class":90},[52,5852,4272],{"class":622},[52,5854,5855,5858,5860,5862,5864,5866],{"class":54,"line":184},[52,5856,5857],{"class":622},"        c",[52,5859,2099],{"class":160},[52,5861,4636],{"class":622},[52,5863,3696],{"class":160},[52,5865,3424],{"class":90},[52,5867,4272],{"class":622},[52,5869,5870,5872,5874,5876,5878,5880,5882,5884,5886,5888,5890,5892,5894,5896,5898,5900,5902,5904,5907,5910,5913],{"class":54,"line":189},[52,5871,5458],{"class":160},[52,5873,4804],{"class":622},[52,5875,1095],{"class":160},[52,5877,300],{"class":622},[52,5879,1095],{"class":160},[52,5881,300],{"class":622},[52,5883,3593],{"class":160},[52,5885,3376],{"class":622},[52,5887,1095],{"class":160},[52,5889,3376],{"class":622},[52,5891,1095],{"class":160},[52,5893,3376],{"class":622},[52,5895,3593],{"class":160},[52,5897,3401],{"class":622},[52,5899,1095],{"class":160},[52,5901,3401],{"class":622},[52,5903,1095],{"class":160},[52,5905,5906],{"class":622},"c ",[52,5908,5909],{"class":160},"==",[52,5911,5912],{"class":622}," num)",[52,5914,5915],{"class":332}," \u002F\u002F如果是水仙花数，才打印\n",[52,5917,5918],{"class":54,"line":201},[52,5919,5471],{"class":622},[52,5921,5922,5924,5926,5928,5930],{"class":54,"line":206},[52,5923,5476],{"class":622},[52,5925,4155],{"class":160},[52,5927,4636],{"class":622},[52,5929,4155],{"class":160},[52,5931,4177],{"class":622},[52,5933,5934],{"class":54,"line":224},[52,5935,5490],{"class":622},[52,5937,5938,5940,5942],{"class":54,"line":229},[52,5939,5251],{"class":622},[52,5941,5254],{"class":160},[52,5943,4272],{"class":622},[52,5945,5946],{"class":54,"line":241},[52,5947,5149],{"class":622},[52,5949,5950,5952,5955,5957,5960],{"class":54,"line":246},[52,5951,5213],{"class":160},[52,5953,5954],{"class":622}," (num ",[52,5956,4022],{"class":160},[52,5958,5959],{"class":90}," 1000",[52,5961,5679],{"class":622},[52,5963,5964],{"class":54,"line":252},[52,5965,4543],{"class":622},[1070,5967,5968],{"start":82},[1073,5969,5970],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[19,5972,5974],{"className":3109,"code":5973,"language":3111,"meta":28,"style":28},"\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",[26,5975,5976,5981,6010,6014,6026,6030,6035,6045,6052,6056,6070,6074,6081,6085,6097,6106],{"__ignoreMap":28},[52,5977,5978],{"class":54,"line":55},[52,5979,5980],{"class":332},"\u002F\u002F从数字0-9打印\n",[52,5982,5983,5986,5988,5990,5993,5995,5997,6000,6002,6004,6006,6008],{"class":54,"line":69},[52,5984,5985],{"class":160},"for",[52,5987,3121],{"class":622},[52,5989,3124],{"class":160},[52,5991,5992],{"class":622}," i",[52,5994,2099],{"class":160},[52,5996,3306],{"class":90},[52,5998,5999],{"class":622},";i",[52,6001,4022],{"class":160},[52,6003,3559],{"class":90},[52,6005,5999],{"class":622},[52,6007,5254],{"class":160},[52,6009,170],{"class":622},[52,6011,6012],{"class":54,"line":82},[52,6013,4524],{"class":622},[52,6015,6016,6018,6020,6022,6024],{"class":54,"line":97},[52,6017,4529],{"class":622},[52,6019,4155],{"class":160},[52,6021,3554],{"class":622},[52,6023,4155],{"class":160},[52,6025,4177],{"class":622},[52,6027,6028],{"class":54,"line":112},[52,6029,4543],{"class":622},[52,6031,6032],{"class":54,"line":119},[52,6033,6034],{"class":332},"\u002F\u002F上式可以进行拆分\n",[52,6036,6037,6039,6041,6043],{"class":54,"line":130},[52,6038,3124],{"class":160},[52,6040,5992],{"class":622},[52,6042,2099],{"class":160},[52,6044,2719],{"class":90},[52,6046,6047,6049],{"class":54,"line":136},[52,6048,5985],{"class":160},[52,6050,6051],{"class":622},"(;;;)\n",[52,6053,6054],{"class":54,"line":141},[52,6055,4524],{"class":622},[52,6057,6058,6061,6064,6066,6068],{"class":54,"line":146},[52,6059,6060],{"class":160},"    if",[52,6062,6063],{"class":622},"(i",[52,6065,4677],{"class":160},[52,6067,3559],{"class":90},[52,6069,170],{"class":622},[52,6071,6072],{"class":54,"line":152},[52,6073,4992],{"class":622},[52,6075,6076,6079],{"class":54,"line":157},[52,6077,6078],{"class":160},"        break",[52,6080,4272],{"class":622},[52,6082,6083],{"class":54,"line":173},[52,6084,5149],{"class":622},[52,6086,6087,6089,6091,6093,6095],{"class":54,"line":178},[52,6088,4529],{"class":622},[52,6090,4155],{"class":160},[52,6092,3554],{"class":622},[52,6094,4155],{"class":160},[52,6096,4177],{"class":622},[52,6098,6099,6102,6104],{"class":54,"line":184},[52,6100,6101],{"class":622},"    i",[52,6103,5254],{"class":160},[52,6105,4272],{"class":622},[52,6107,6108],{"class":54,"line":189},[52,6109,4543],{"class":622},[274,6111,6112],{},"小练习",[19,6114,6116],{"className":3109,"code":6115,"language":3111,"meta":28,"style":28},"#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",[26,6117,6118,6124,6134,6142,6146,6151,6156,6184,6188,6193,6198,6239,6243,6256,6260,6264,6268,6280,6284,6288],{"__ignoreMap":28},[52,6119,6120,6122],{"class":54,"line":55},[52,6121,4912],{"class":160},[52,6123,4915],{"class":62},[52,6125,6126,6128,6130,6132],{"class":54,"line":69},[52,6127,4920],{"class":160},[52,6129,4923],{"class":160},[52,6131,4926],{"class":58},[52,6133,4272],{"class":622},[52,6135,6136,6138,6140],{"class":54,"line":82},[52,6137,3124],{"class":160},[52,6139,4935],{"class":58},[52,6141,4938],{"class":622},[52,6143,6144],{"class":54,"line":97},[52,6145,4524],{"class":622},[52,6147,6148],{"class":54,"line":112},[52,6149,6150],{"class":332},"    \u002F\u002F敲桌子案例\n",[52,6152,6153],{"class":54,"line":119},[52,6154,6155],{"class":332},"    \u002F\u002F1.先输出1-100的数字\n",[52,6157,6158,6161,6163,6165,6167,6169,6171,6174,6176,6178,6180,6182],{"class":54,"line":130},[52,6159,6160],{"class":160},"    for",[52,6162,3121],{"class":622},[52,6164,3124],{"class":160},[52,6166,5992],{"class":622},[52,6168,2099],{"class":160},[52,6170,3332],{"class":90},[52,6172,6173],{"class":622},"; i",[52,6175,4566],{"class":160},[52,6177,3424],{"class":90},[52,6179,6173],{"class":622},[52,6181,5254],{"class":160},[52,6183,170],{"class":622},[52,6185,6186],{"class":54,"line":136},[52,6187,4992],{"class":622},[52,6189,6190],{"class":54,"line":141},[52,6191,6192],{"class":332},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[52,6194,6195],{"class":54,"line":146},[52,6196,6197],{"class":332},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[52,6199,6200,6202,6204,6206,6208,6210,6212,6215,6217,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237],{"class":54,"line":152},[52,6201,5458],{"class":160},[52,6203,6063],{"class":622},[52,6205,3441],{"class":160},[52,6207,3482],{"class":90},[52,6209,5909],{"class":160},[52,6211,3306],{"class":90},[52,6213,6214],{"class":160}," ||",[52,6216,5992],{"class":622},[52,6218,3441],{"class":160},[52,6220,3559],{"class":90},[52,6222,5909],{"class":160},[52,6224,3482],{"class":90},[52,6226,6214],{"class":160},[52,6228,5992],{"class":622},[52,6230,3696],{"class":160},[52,6232,3559],{"class":90},[52,6234,5909],{"class":160},[52,6236,3482],{"class":90},[52,6238,170],{"class":622},[52,6240,6241],{"class":54,"line":157},[52,6242,5471],{"class":622},[52,6244,6245,6247,6249,6252,6254],{"class":54,"line":173},[52,6246,5476],{"class":622},[52,6248,4155],{"class":160},[52,6250,6251],{"class":62},"\"敲桌子\"",[52,6253,4155],{"class":160},[52,6255,4177],{"class":622},[52,6257,6258],{"class":54,"line":178},[52,6259,5490],{"class":622},[52,6261,6262],{"class":54,"line":184},[52,6263,5531],{"class":160},[52,6265,6266],{"class":54,"line":189},[52,6267,5471],{"class":622},[52,6269,6270,6272,6274,6276,6278],{"class":54,"line":201},[52,6271,5476],{"class":622},[52,6273,4155],{"class":160},[52,6275,3554],{"class":622},[52,6277,4155],{"class":160},[52,6279,4177],{"class":622},[52,6281,6282],{"class":54,"line":206},[52,6283,5490],{"class":622},[52,6285,6286],{"class":54,"line":224},[52,6287,5149],{"class":622},[52,6289,6290],{"class":54,"line":229},[52,6291,4543],{"class":622},[274,6293,6294],{},"嵌套实现星图",[19,6296,6298],{"className":3109,"code":6297,"language":3111,"meta":28,"style":28},"#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",[26,6299,6300,6306,6316,6324,6328,6354,6358,6387,6391,6402,6406,6415,6419],{"__ignoreMap":28},[52,6301,6302,6304],{"class":54,"line":55},[52,6303,4912],{"class":160},[52,6305,4915],{"class":62},[52,6307,6308,6310,6312,6314],{"class":54,"line":69},[52,6309,4920],{"class":160},[52,6311,4923],{"class":160},[52,6313,4926],{"class":58},[52,6315,4272],{"class":622},[52,6317,6318,6320,6322],{"class":54,"line":82},[52,6319,3124],{"class":160},[52,6321,4935],{"class":58},[52,6323,4938],{"class":622},[52,6325,6326],{"class":54,"line":97},[52,6327,4524],{"class":622},[52,6329,6330,6332,6334,6336,6338,6340,6342,6344,6346,6348,6350,6352],{"class":54,"line":112},[52,6331,6160],{"class":160},[52,6333,4629],{"class":622},[52,6335,3124],{"class":160},[52,6337,5992],{"class":622},[52,6339,2099],{"class":160},[52,6341,3306],{"class":90},[52,6343,5999],{"class":622},[52,6345,4022],{"class":160},[52,6347,3559],{"class":90},[52,6349,5999],{"class":622},[52,6351,5254],{"class":160},[52,6353,170],{"class":622},[52,6355,6356],{"class":54,"line":119},[52,6357,4992],{"class":622},[52,6359,6360,6363,6365,6367,6370,6372,6374,6377,6379,6381,6383,6385],{"class":54,"line":130},[52,6361,6362],{"class":160},"        for",[52,6364,4629],{"class":622},[52,6366,3124],{"class":160},[52,6368,6369],{"class":622}," j",[52,6371,2099],{"class":160},[52,6373,3306],{"class":90},[52,6375,6376],{"class":622},";j",[52,6378,4022],{"class":160},[52,6380,3559],{"class":90},[52,6382,6376],{"class":622},[52,6384,5254],{"class":160},[52,6386,170],{"class":622},[52,6388,6389],{"class":54,"line":136},[52,6390,5471],{"class":622},[52,6392,6393,6395,6397,6400],{"class":54,"line":141},[52,6394,5476],{"class":622},[52,6396,4155],{"class":160},[52,6398,6399],{"class":62},"\"*\"",[52,6401,4272],{"class":622},[52,6403,6404],{"class":54,"line":146},[52,6405,5490],{"class":622},[52,6407,6408,6411,6413],{"class":54,"line":152},[52,6409,6410],{"class":622},"        cout",[52,6412,4155],{"class":160},[52,6414,4177],{"class":622},[52,6416,6417],{"class":54,"line":157},[52,6418,5149],{"class":622},[52,6420,6421],{"class":54,"line":173},[52,6422,4543],{"class":622},[274,6424,6425],{},"乘法口诀表",[19,6427,6429],{"className":3109,"code":6428,"language":3111,"meta":28,"style":28},"#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",[26,6430,6431,6437,6447,6455,6459,6485,6489,6514,6518,6558,6562,6570,6574],{"__ignoreMap":28},[52,6432,6433,6435],{"class":54,"line":55},[52,6434,4912],{"class":160},[52,6436,5296],{"class":62},[52,6438,6439,6441,6443,6445],{"class":54,"line":69},[52,6440,4920],{"class":160},[52,6442,4923],{"class":160},[52,6444,4926],{"class":58},[52,6446,4272],{"class":622},[52,6448,6449,6451,6453],{"class":54,"line":82},[52,6450,3124],{"class":160},[52,6452,4935],{"class":58},[52,6454,4938],{"class":622},[52,6456,6457],{"class":54,"line":97},[52,6458,4524],{"class":622},[52,6460,6461,6463,6465,6467,6469,6471,6473,6475,6477,6479,6481,6483],{"class":54,"line":112},[52,6462,6160],{"class":160},[52,6464,3121],{"class":622},[52,6466,3124],{"class":160},[52,6468,5992],{"class":622},[52,6470,2099],{"class":160},[52,6472,3332],{"class":90},[52,6474,5999],{"class":622},[52,6476,4022],{"class":160},[52,6478,3559],{"class":90},[52,6480,5999],{"class":622},[52,6482,5254],{"class":160},[52,6484,170],{"class":622},[52,6486,6487],{"class":54,"line":119},[52,6488,4992],{"class":622},[52,6490,6491,6493,6495,6497,6499,6501,6503,6505,6507,6510,6512],{"class":54,"line":130},[52,6492,6362],{"class":160},[52,6494,3121],{"class":622},[52,6496,3124],{"class":160},[52,6498,6369],{"class":622},[52,6500,2099],{"class":160},[52,6502,3332],{"class":90},[52,6504,6376],{"class":622},[52,6506,4566],{"class":160},[52,6508,6509],{"class":622},"i;j",[52,6511,5254],{"class":160},[52,6513,170],{"class":622},[52,6515,6516],{"class":54,"line":136},[52,6517,5471],{"class":622},[52,6519,6520,6522,6524,6526,6528,6530,6532,6534,6536,6539,6541,6543,6545,6547,6549,6552,6554,6556],{"class":54,"line":141},[52,6521,5476],{"class":622},[52,6523,4155],{"class":160},[52,6525,3579],{"class":622},[52,6527,4155],{"class":160},[52,6529,6399],{"class":62},[52,6531,4155],{"class":160},[52,6533,3554],{"class":622},[52,6535,4155],{"class":160},[52,6537,6538],{"class":62},"\"=\"",[52,6540,4155],{"class":160},[52,6542,3554],{"class":622},[52,6544,1095],{"class":160},[52,6546,3579],{"class":622},[52,6548,4155],{"class":160},[52,6550,6551],{"class":62},"'",[52,6553,4212],{"class":90},[52,6555,6551],{"class":62},[52,6557,4272],{"class":622},[52,6559,6560],{"class":54,"line":146},[52,6561,5490],{"class":622},[52,6563,6564,6566,6568],{"class":54,"line":152},[52,6565,6410],{"class":622},[52,6567,4155],{"class":160},[52,6569,4177],{"class":622},[52,6571,6572],{"class":54,"line":157},[52,6573,5149],{"class":622},[52,6575,6576],{"class":54,"line":173},[52,6577,4543],{"class":622},[30,6579,6581],{"id":6580},"_163跳出语句","1.6.3跳出语句",[1070,6583,6584],{},[1073,6585,6586],{},"break语句\n作用：用于跳出选择结构或者循环结构",[274,6588,6589],{},"break使用时机：",[4118,6591,6592,6595,6598],{},[1073,6593,6594],{},"出现在switch条件语句中，作用是终止case并跳出switch",[1073,6596,6597],{},"出现在循环结构中，作用是跳出当前的循环结构",[1073,6599,6600],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1070,6602,6603,6606],{"start":69},[1073,6604,6605],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[1073,6607,6608],{},"goto语句\n语法：goto 标记;",[274,6610,6611],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[19,6613,6615],{"className":3109,"code":6614,"language":3111,"meta":28,"style":28},"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",[26,6616,6617,6625,6629,6642,6652,6665,6678,6691,6699,6715],{"__ignoreMap":28},[52,6618,6619,6621,6623],{"class":54,"line":55},[52,6620,3124],{"class":160},[52,6622,4935],{"class":58},[52,6624,4938],{"class":622},[52,6626,6627],{"class":54,"line":69},[52,6628,4524],{"class":622},[52,6630,6631,6633,6635,6638,6640],{"class":54,"line":82},[52,6632,4529],{"class":622},[52,6634,4155],{"class":160},[52,6636,6637],{"class":62},"\"1\"",[52,6639,4155],{"class":160},[52,6641,4177],{"class":622},[52,6643,6644,6647,6650],{"class":54,"line":97},[52,6645,6646],{"class":160},"    goto",[52,6648,6649],{"class":58}," FLAG",[52,6651,4272],{"class":622},[52,6653,6654,6656,6658,6661,6663],{"class":54,"line":112},[52,6655,4529],{"class":622},[52,6657,4155],{"class":160},[52,6659,6660],{"class":62},"\"2\"",[52,6662,4155],{"class":160},[52,6664,4177],{"class":622},[52,6666,6667,6669,6671,6674,6676],{"class":54,"line":119},[52,6668,4529],{"class":622},[52,6670,4155],{"class":160},[52,6672,6673],{"class":62},"\"3\"",[52,6675,4155],{"class":160},[52,6677,4177],{"class":622},[52,6679,6680,6682,6684,6687,6689],{"class":54,"line":130},[52,6681,4529],{"class":622},[52,6683,4155],{"class":160},[52,6685,6686],{"class":62},"\"4\"",[52,6688,4155],{"class":160},[52,6690,4177],{"class":622},[52,6692,6693,6696],{"class":54,"line":136},[52,6694,6695],{"class":58},"    FLAG",[52,6697,6698],{"class":622},":\n",[52,6700,6701,6703,6705,6708,6710,6712],{"class":54,"line":141},[52,6702,4529],{"class":622},[52,6704,4155],{"class":160},[52,6706,6707],{"class":62},"\"5\"",[52,6709,4155],{"class":160},[52,6711,4220],{"class":622},[52,6713,6714],{"class":332},"\u002F\u002F跳过了2,3,4,直接到5\n",[52,6716,6717],{"class":54,"line":146},[52,6718,4543],{"class":622},[14,6720,6722],{"id":6721},"_17数组","1.7数组",[30,6724,6726],{"id":6725},"_171一维数组","1.7.1一维数组",[1070,6728,6729],{},[1073,6730,6731],{},"一维数组定义方式",[3253,6733,6734,6744],{},[3256,6735,6736],{},[3259,6737,6738,6741],{},[3262,6739,6740],{},"方式",[3262,6742,6743],{},"注意事项",[3299,6745,6746,6760,6770],{},[3259,6747,6748,6754],{},[3304,6749,6750,6751,3173],{},"数据类型 数组名",[52,6752,6753],{},"数组长度",[3304,6755,6756,6757,6759],{},"这种方式是先定义再arr",[52,6758,3554],{},"赋值",[3259,6761,6762,6767],{},[3304,6763,6750,6764,6766],{},[52,6765,6753],{},"={值1,值2....};",[3304,6768,6769],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[3259,6771,6772,6776],{},[3304,6773,6750,6774,6766],{},[52,6775],{},[3304,6777,6778,6779,6781],{},"int arr",[52,6780],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1070,6783,6784],{"start":69},[1073,6785,6786],{},"一维数组数组名\n用途：",[4118,6788,6789],{},[1073,6790,6791],{},"1.可以统计整个数组在内存中的长度：",[19,6793,6795],{"className":3109,"code":6794,"language":3111,"meta":28,"style":28},"sizeof(arr);\nsizeof(arr[0]);\n",[26,6796,6797,6804],{"__ignoreMap":28},[52,6798,6799,6801],{"class":54,"line":55},[52,6800,3118],{"class":160},[52,6802,6803],{"class":622},"(arr);\n",[52,6805,6806,6808,6811,6813],{"class":54,"line":69},[52,6807,3118],{"class":160},[52,6809,6810],{"class":622},"(arr[",[52,6812,3306],{"class":90},[52,6814,6815],{"class":622},"]);\n",[4118,6817,6818],{},[1073,6819,6820],{},"2.可以获取数组在内存中的首地址:",[19,6822,6824],{"className":3109,"code":6823,"language":3111,"meta":28,"style":28},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[26,6825,6826,6831,6844,6849],{"__ignoreMap":28},[52,6827,6828],{"class":54,"line":55},[52,6829,6830],{"class":332},"\u002F\u002F查看16进制的首地址\n",[52,6832,6833,6835,6837,6840,6842],{"class":54,"line":69},[52,6834,4348],{"class":622},[52,6836,4155],{"class":160},[52,6838,6839],{"class":622},"arr",[52,6841,4155],{"class":160},[52,6843,4177],{"class":622},[52,6845,6846],{"class":54,"line":82},[52,6847,6848],{"class":332},"\u002F\u002F看10进制数\n",[52,6850,6851,6853,6855,6857,6859,6861,6863,6866,6868,6870,6872],{"class":54,"line":97},[52,6852,4348],{"class":622},[52,6854,4155],{"class":160},[52,6856,3121],{"class":622},[52,6858,3124],{"class":160},[52,6860,3542],{"class":622},[52,6862,3466],{"class":160},[52,6864,6865],{"class":622},"arr[",[52,6867,3306],{"class":90},[52,6869,4052],{"class":622},[52,6871,4155],{"class":160},[52,6873,4177],{"class":622},[274,6875,6876],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[4118,6878,6879],{},[1073,6880,6881],{},"1️⃣五只小猪称体重",[19,6883,6885],{"className":3109,"code":6884,"language":3111,"meta":28,"style":28},"#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",[26,6886,6887,6893,6903,6911,6915,6955,6968,6994,6998,7010,7014,7024,7028,7032,7045,7055],{"__ignoreMap":28},[52,6888,6889,6891],{"class":54,"line":55},[52,6890,4912],{"class":160},[52,6892,4915],{"class":62},[52,6894,6895,6897,6899,6901],{"class":54,"line":69},[52,6896,4920],{"class":160},[52,6898,4923],{"class":160},[52,6900,4926],{"class":58},[52,6902,4272],{"class":622},[52,6904,6905,6907,6909],{"class":54,"line":82},[52,6906,3124],{"class":160},[52,6908,4935],{"class":58},[52,6910,4938],{"class":622},[52,6912,6913],{"class":54,"line":97},[52,6914,4524],{"class":622},[52,6916,6917,6919,6922,6924,6926,6928,6930,6933,6935,6938,6940,6942,6944,6947,6949,6952],{"class":54,"line":112},[52,6918,4947],{"class":160},[52,6920,6921],{"class":622}," arr[",[52,6923,3432],{"class":90},[52,6925,4052],{"class":622},[52,6927,2099],{"class":160},[52,6929,4008],{"class":622},[52,6931,6932],{"class":90},"300",[52,6934,3491],{"class":622},[52,6936,6937],{"class":90},"350",[52,6939,3491],{"class":622},[52,6941,4689],{"class":90},[52,6943,3491],{"class":622},[52,6945,6946],{"class":90},"400",[52,6948,3491],{"class":622},[52,6950,6951],{"class":90},"250",[52,6953,6954],{"class":622},"};\n",[52,6956,6957,6959,6962,6964,6966],{"class":54,"line":119},[52,6958,4947],{"class":160},[52,6960,6961],{"class":622}," tmp",[52,6963,2099],{"class":160},[52,6965,3306],{"class":90},[52,6967,4272],{"class":622},[52,6969,6970,6972,6974,6976,6978,6980,6982,6984,6986,6988,6990,6992],{"class":54,"line":130},[52,6971,6160],{"class":160},[52,6973,4629],{"class":622},[52,6975,3124],{"class":160},[52,6977,5992],{"class":622},[52,6979,2099],{"class":160},[52,6981,3306],{"class":90},[52,6983,5999],{"class":622},[52,6985,4022],{"class":160},[52,6987,3432],{"class":90},[52,6989,5999],{"class":622},[52,6991,5254],{"class":160},[52,6993,170],{"class":622},[52,6995,6996],{"class":54,"line":136},[52,6997,4992],{"class":622},[52,6999,7000,7002,7005,7007],{"class":54,"line":141},[52,7001,5458],{"class":160},[52,7003,7004],{"class":622},"(tmp",[52,7006,4022],{"class":160},[52,7008,7009],{"class":622},"arr[i])\n",[52,7011,7012],{"class":54,"line":146},[52,7013,5471],{"class":622},[52,7015,7016,7019,7021],{"class":54,"line":152},[52,7017,7018],{"class":622},"            tmp",[52,7020,2099],{"class":160},[52,7022,7023],{"class":622},"arr[i];\n",[52,7025,7026],{"class":54,"line":157},[52,7027,5490],{"class":622},[52,7029,7030],{"class":54,"line":173},[52,7031,5149],{"class":622},[52,7033,7034,7036,7038,7041,7043],{"class":54,"line":178},[52,7035,4529],{"class":622},[52,7037,4155],{"class":160},[52,7039,7040],{"class":622},"tmp",[52,7042,4155],{"class":160},[52,7044,4177],{"class":622},[52,7046,7047,7050,7053],{"class":54,"line":184},[52,7048,7049],{"class":160},"    return",[52,7051,7052],{"class":90}," 0",[52,7054,4272],{"class":622},[52,7056,7057],{"class":54,"line":189},[52,7058,4543],{"class":622},[4118,7060,7061],{},[1073,7062,7063],{},"2️⃣数组元素逆置",[19,7065,7067],{"className":3109,"code":7066,"language":3111,"meta":28,"style":28},"\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",[26,7068,7069,7074,7080,7090,7098,7102,7137,7153,7185,7198,7203,7208,7220,7230,7240,7245,7254,7264,7269,7274,7301,7305,7321,7325,7336,7345],{"__ignoreMap":28},[52,7070,7071],{"class":54,"line":55},[52,7072,7073],{"class":332},"\u002F\u002F元素逆置\n",[52,7075,7076,7078],{"class":54,"line":69},[52,7077,4912],{"class":160},[52,7079,4915],{"class":62},[52,7081,7082,7084,7086,7088],{"class":54,"line":82},[52,7083,4920],{"class":160},[52,7085,4923],{"class":160},[52,7087,4926],{"class":58},[52,7089,4272],{"class":622},[52,7091,7092,7094,7096],{"class":54,"line":97},[52,7093,3124],{"class":160},[52,7095,4935],{"class":58},[52,7097,4938],{"class":622},[52,7099,7100],{"class":54,"line":112},[52,7101,4524],{"class":622},[52,7103,7104,7107,7109,7111,7113,7115,7117,7119,7121,7123,7125,7127,7129,7131,7133,7135],{"class":54,"line":119},[52,7105,7106],{"class":160},"   int",[52,7108,6921],{"class":622},[52,7110,3432],{"class":90},[52,7112,4052],{"class":622},[52,7114,2099],{"class":160},[52,7116,4008],{"class":622},[52,7118,3332],{"class":90},[52,7120,3491],{"class":622},[52,7122,3194],{"class":90},[52,7124,3491],{"class":622},[52,7126,3188],{"class":90},[52,7128,3491],{"class":622},[52,7130,3406],{"class":90},[52,7132,3491],{"class":622},[52,7134,3432],{"class":90},[52,7136,6954],{"class":622},[52,7138,7139,7141,7144,7146,7148,7150],{"class":54,"line":130},[52,7140,7106],{"class":160},[52,7142,7143],{"class":622}," start",[52,7145,2099],{"class":160},[52,7147,3306],{"class":90},[52,7149,3173],{"class":622},[52,7151,7152],{"class":332},"\u002F\u002F起始下标\n",[52,7154,7155,7157,7160,7163,7166,7169,7171,7173,7176,7178,7180,7182],{"class":54,"line":136},[52,7156,7106],{"class":160},[52,7158,7159],{"class":622}," end",[52,7161,7162],{"class":160},"=sizeof",[52,7164,7165],{"class":622},"(arr)",[52,7167,7168],{"class":160},"\u002Fsizeof",[52,7170,6810],{"class":622},[52,7172,3306],{"class":90},[52,7174,7175],{"class":622},"])",[52,7177,3644],{"class":160},[52,7179,3332],{"class":90},[52,7181,3173],{"class":622},[52,7183,7184],{"class":332},"\u002F\u002F结束下标\n",[52,7186,7187,7190,7193,7195],{"class":54,"line":141},[52,7188,7189],{"class":160},"   while",[52,7191,7192],{"class":622}," (start",[52,7194,4022],{"class":160},[52,7196,7197],{"class":622},"end)\n",[52,7199,7200],{"class":54,"line":146},[52,7201,7202],{"class":622},"   {\n",[52,7204,7205],{"class":54,"line":152},[52,7206,7207],{"class":332},"    \u002F\u002F实现元素互换代码\n",[52,7209,7210,7212,7215,7217],{"class":54,"line":157},[52,7211,4947],{"class":160},[52,7213,7214],{"class":622}," temp",[52,7216,2099],{"class":160},[52,7218,7219],{"class":622},"arr[start];\n",[52,7221,7222,7225,7227],{"class":54,"line":173},[52,7223,7224],{"class":622},"    arr[start]",[52,7226,2099],{"class":160},[52,7228,7229],{"class":622},"arr[end];\n",[52,7231,7232,7235,7237],{"class":54,"line":178},[52,7233,7234],{"class":622},"    arr[end]",[52,7236,2099],{"class":160},[52,7238,7239],{"class":622},"temp;\n",[52,7241,7242],{"class":54,"line":184},[52,7243,7244],{"class":332},"    \u002F\u002F下标更新\n",[52,7246,7247,7250,7252],{"class":54,"line":189},[52,7248,7249],{"class":622},"    start",[52,7251,5254],{"class":160},[52,7253,4272],{"class":622},[52,7255,7256,7259,7262],{"class":54,"line":201},[52,7257,7258],{"class":622},"    end",[52,7260,7261],{"class":160},"--",[52,7263,4272],{"class":622},[52,7265,7266],{"class":54,"line":206},[52,7267,7268],{"class":622},"   }\n",[52,7270,7271],{"class":54,"line":224},[52,7272,7273],{"class":332},"   \u002F\u002F输出逆置后的数组\n",[52,7275,7276,7279,7281,7283,7285,7287,7289,7291,7293,7295,7297,7299],{"class":54,"line":229},[52,7277,7278],{"class":160},"   for",[52,7280,4629],{"class":622},[52,7282,3124],{"class":160},[52,7284,5992],{"class":622},[52,7286,2099],{"class":160},[52,7288,3306],{"class":90},[52,7290,5999],{"class":622},[52,7292,4022],{"class":160},[52,7294,3432],{"class":90},[52,7296,5999],{"class":622},[52,7298,5254],{"class":160},[52,7300,170],{"class":622},[52,7302,7303],{"class":54,"line":241},[52,7304,7202],{"class":622},[52,7306,7307,7309,7311,7314,7316,7319],{"class":54,"line":246},[52,7308,4529],{"class":622},[52,7310,4155],{"class":160},[52,7312,7313],{"class":622},"arr[i]",[52,7315,4155],{"class":160},[52,7317,7318],{"class":62},"\" \"",[52,7320,4272],{"class":622},[52,7322,7323],{"class":54,"line":252},[52,7324,7268],{"class":622},[52,7326,7327,7330,7332,7334],{"class":54,"line":257},[52,7328,7329],{"class":58},"   system",[52,7331,3121],{"class":622},[52,7333,5270],{"class":62},[52,7335,5679],{"class":622},[52,7337,7338,7341,7343],{"class":54,"line":266},[52,7339,7340],{"class":160},"   return",[52,7342,7052],{"class":90},[52,7344,4272],{"class":622},[52,7346,7347],{"class":54,"line":4722},[52,7348,4543],{"class":622},[4118,7350,7351],{},[1073,7352,7353],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[19,7355,7357],{"className":3109,"code":7356,"language":3111,"meta":28,"style":28},"\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",[26,7358,7359,7364,7370,7380,7388,7392,7444,7457,7483,7487,7501,7505,7510,7515,7545,7549,7554,7588,7592,7597,7617,7622,7634,7650,7665,7670,7674,7678,7691,7717,7721,7735,7739,7747],{"__ignoreMap":28},[52,7360,7361],{"class":54,"line":55},[52,7362,7363],{"class":332},"\u002F\u002F冒泡排序,升序\n",[52,7365,7366,7368],{"class":54,"line":69},[52,7367,4912],{"class":160},[52,7369,4915],{"class":62},[52,7371,7372,7374,7376,7378],{"class":54,"line":82},[52,7373,4920],{"class":160},[52,7375,4923],{"class":160},[52,7377,4926],{"class":58},[52,7379,4272],{"class":622},[52,7381,7382,7384,7386],{"class":54,"line":97},[52,7383,3124],{"class":160},[52,7385,4935],{"class":58},[52,7387,4938],{"class":622},[52,7389,7390],{"class":54,"line":112},[52,7391,4524],{"class":622},[52,7393,7394,7396,7398,7400,7403,7405,7408,7410,7412,7414,7416,7418,7420,7422,7424,7426,7428,7430,7432,7434,7436,7438,7440,7442],{"class":54,"line":119},[52,7395,4947],{"class":160},[52,7397,6921],{"class":622},[52,7399,3533],{"class":90},[52,7401,7402],{"class":622},"] ",[52,7404,2099],{"class":160},[52,7406,7407],{"class":622}," {",[52,7409,3406],{"class":90},[52,7411,3491],{"class":622},[52,7413,3194],{"class":90},[52,7415,3491],{"class":622},[52,7417,3508],{"class":90},[52,7419,3491],{"class":622},[52,7421,3306],{"class":90},[52,7423,3491],{"class":622},[52,7425,3432],{"class":90},[52,7427,3491],{"class":622},[52,7429,3482],{"class":90},[52,7431,3491],{"class":622},[52,7433,3332],{"class":90},[52,7435,3491],{"class":622},[52,7437,3188],{"class":90},[52,7439,3491],{"class":622},[52,7441,3533],{"class":90},[52,7443,6954],{"class":622},[52,7445,7446,7448,7450,7453,7455],{"class":54,"line":130},[52,7447,4529],{"class":622},[52,7449,4155],{"class":160},[52,7451,7452],{"class":62},"\"排序前：\"",[52,7454,4155],{"class":160},[52,7456,4177],{"class":622},[52,7458,7459,7461,7463,7465,7467,7469,7471,7473,7475,7477,7479,7481],{"class":54,"line":136},[52,7460,6160],{"class":160},[52,7462,4629],{"class":622},[52,7464,3124],{"class":160},[52,7466,5992],{"class":622},[52,7468,2099],{"class":160},[52,7470,3306],{"class":90},[52,7472,5999],{"class":622},[52,7474,4022],{"class":160},[52,7476,3533],{"class":90},[52,7478,5999],{"class":622},[52,7480,5254],{"class":160},[52,7482,170],{"class":622},[52,7484,7485],{"class":54,"line":141},[52,7486,4992],{"class":622},[52,7488,7489,7491,7493,7495,7497,7499],{"class":54,"line":146},[52,7490,6410],{"class":622},[52,7492,4155],{"class":160},[52,7494,7313],{"class":622},[52,7496,4155],{"class":160},[52,7498,7318],{"class":62},[52,7500,4272],{"class":622},[52,7502,7503],{"class":54,"line":152},[52,7504,5149],{"class":622},[52,7506,7507],{"class":54,"line":157},[52,7508,7509],{"class":332},"    \u002F\u002F开始冒泡排序\n",[52,7511,7512],{"class":54,"line":173},[52,7513,7514],{"class":332},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[52,7516,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543],{"class":54,"line":178},[52,7518,6160],{"class":160},[52,7520,4629],{"class":622},[52,7522,3124],{"class":160},[52,7524,5992],{"class":622},[52,7526,2099],{"class":160},[52,7528,3306],{"class":90},[52,7530,5999],{"class":622},[52,7532,4022],{"class":160},[52,7534,3533],{"class":90},[52,7536,3644],{"class":160},[52,7538,3332],{"class":90},[52,7540,5999],{"class":622},[52,7542,5254],{"class":160},[52,7544,170],{"class":622},[52,7546,7547],{"class":54,"line":184},[52,7548,4992],{"class":622},[52,7550,7551],{"class":54,"line":189},[52,7552,7553],{"class":332},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[52,7555,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578,7580,7582,7584,7586],{"class":54,"line":201},[52,7557,6362],{"class":160},[52,7559,4629],{"class":622},[52,7561,3124],{"class":160},[52,7563,6369],{"class":622},[52,7565,2099],{"class":160},[52,7567,3306],{"class":90},[52,7569,6376],{"class":622},[52,7571,4022],{"class":160},[52,7573,3533],{"class":90},[52,7575,3644],{"class":160},[52,7577,3554],{"class":622},[52,7579,3644],{"class":160},[52,7581,3332],{"class":90},[52,7583,6376],{"class":622},[52,7585,5254],{"class":160},[52,7587,170],{"class":622},[52,7589,7590],{"class":54,"line":206},[52,7591,5471],{"class":622},[52,7593,7594],{"class":54,"line":224},[52,7595,7596],{"class":332},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[52,7598,7599,7602,7605,7607,7610,7612,7614],{"class":54,"line":229},[52,7600,7601],{"class":160},"            if",[52,7603,7604],{"class":622},"(arr[j]",[52,7606,4072],{"class":160},[52,7608,7609],{"class":622},"arr[j",[52,7611,3593],{"class":160},[52,7613,3332],{"class":90},[52,7615,7616],{"class":622},"])\n",[52,7618,7619],{"class":54,"line":241},[52,7620,7621],{"class":622},"            {\n",[52,7623,7624,7627,7629,7631],{"class":54,"line":246},[52,7625,7626],{"class":160},"                int",[52,7628,7214],{"class":622},[52,7630,2099],{"class":160},[52,7632,7633],{"class":622},"arr[j];\n",[52,7635,7636,7639,7641,7643,7645,7647],{"class":54,"line":252},[52,7637,7638],{"class":622},"                arr[j]",[52,7640,2099],{"class":160},[52,7642,7609],{"class":622},[52,7644,3593],{"class":160},[52,7646,3332],{"class":90},[52,7648,7649],{"class":622},"];\n",[52,7651,7652,7655,7657,7659,7661,7663],{"class":54,"line":257},[52,7653,7654],{"class":622},"                arr[j",[52,7656,3593],{"class":160},[52,7658,3332],{"class":90},[52,7660,4052],{"class":622},[52,7662,2099],{"class":160},[52,7664,7239],{"class":622},[52,7666,7667],{"class":54,"line":266},[52,7668,7669],{"class":622},"            }\n",[52,7671,7672],{"class":54,"line":4722},[52,7673,5490],{"class":622},[52,7675,7676],{"class":54,"line":4727},[52,7677,5149],{"class":622},[52,7679,7680,7682,7684,7687,7689],{"class":54,"line":4741},[52,7681,4529],{"class":622},[52,7683,4155],{"class":160},[52,7685,7686],{"class":62},"\"排序后：\"",[52,7688,4155],{"class":160},[52,7690,4177],{"class":622},[52,7692,7693,7695,7697,7699,7701,7703,7705,7707,7709,7711,7713,7715],{"class":54,"line":4746},[52,7694,6160],{"class":160},[52,7696,4629],{"class":622},[52,7698,3124],{"class":160},[52,7700,5992],{"class":622},[52,7702,2099],{"class":160},[52,7704,3306],{"class":90},[52,7706,5999],{"class":622},[52,7708,4022],{"class":160},[52,7710,3533],{"class":90},[52,7712,5999],{"class":622},[52,7714,5254],{"class":160},[52,7716,170],{"class":622},[52,7718,7719],{"class":54,"line":5538},[52,7720,4992],{"class":622},[52,7722,7723,7725,7727,7729,7731,7733],{"class":54,"line":5552},[52,7724,6410],{"class":622},[52,7726,4155],{"class":160},[52,7728,7313],{"class":622},[52,7730,4155],{"class":160},[52,7732,7318],{"class":62},[52,7734,4272],{"class":622},[52,7736,7737],{"class":54,"line":5560},[52,7738,5149],{"class":622},[52,7740,7741,7743,7745],{"class":54,"line":5565},[52,7742,7049],{"class":160},[52,7744,7052],{"class":90},[52,7746,4272],{"class":622},[52,7748,7749],{"class":54,"line":5571},[52,7750,4543],{"class":622},[30,7752,7754],{"id":7753},"_172二维数组","1.7.2二维数组",[1070,7756,7757],{},[1073,7758,7759],{},"二维数组的四种定义方式",[3253,7761,7762,7771],{},[3256,7763,7764],{},[3259,7765,7766,7769],{},[3262,7767,7768],{},"序号",[3262,7770,6740],{},[3299,7772,7773,7783,7792,7801,7810],{},[3259,7774,7775,7777],{},[3304,7776,3332],{},[3304,7778,7779,7780,3173],{},"数据类型 数组名[行数]",[52,7781,7782],{},"列数",[3259,7784,7785,7787],{},[3304,7786,3194],{},[3304,7788,7779,7789,7791],{},[52,7790,7782],{},"={ {数据1,数据2}，{数据3，数据4}... }",[3259,7793,7794,7796],{},[3304,7795,3188],{},[3304,7797,7779,7798,7800],{},[52,7799,7782],{},"={数据1,数据2,数据3...}",[3259,7802,7803,7805],{},[3304,7804,3406],{},[3304,7806,7807,7808,7800],{},"数据类型 数组名[]",[52,7809,7782],{},[3259,7811,7812,7815],{},[3304,7813,7814],{},"注意：不能只省略列数",[3304,7816],{},[1070,7818,7819],{"start":69},[1073,7820,7821],{},"二维数组数组名",[4118,7823,7824,7827],{},[1073,7825,7826],{},"1.查看二维数组所占内存空间",[1073,7828,7829],{},"2.获取二维数组首地址",[274,7831,7832],{},"已知二维数组，求二维数组的行数与列数",[19,7834,7836],{"className":3109,"code":7835,"language":3111,"meta":28,"style":28},"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",[26,7837,7838,7846,7850,7868,7872,7890,7906,7911,7936,7969],{"__ignoreMap":28},[52,7839,7840,7842,7844],{"class":54,"line":55},[52,7841,3124],{"class":160},[52,7843,4935],{"class":58},[52,7845,4938],{"class":622},[52,7847,7848],{"class":54,"line":69},[52,7849,4524],{"class":622},[52,7851,7852,7854,7856,7858,7861,7863,7865],{"class":54,"line":82},[52,7853,4947],{"class":160},[52,7855,6921],{"class":622},[52,7857,3194],{"class":90},[52,7859,7860],{"class":622},"][",[52,7862,3188],{"class":90},[52,7864,4052],{"class":622},[52,7866,7867],{"class":160},"=\n",[52,7869,7870],{"class":54,"line":97},[52,7871,4992],{"class":622},[52,7873,7874,7877,7879,7881,7883,7885,7887],{"class":54,"line":112},[52,7875,7876],{"class":622},"        {",[52,7878,3332],{"class":90},[52,7880,3491],{"class":622},[52,7882,3194],{"class":90},[52,7884,3491],{"class":622},[52,7886,3188],{"class":90},[52,7888,7889],{"class":622},"},\n",[52,7891,7892,7894,7896,7898,7900,7902,7904],{"class":54,"line":119},[52,7893,7876],{"class":622},[52,7895,3406],{"class":90},[52,7897,3491],{"class":622},[52,7899,3432],{"class":90},[52,7901,3491],{"class":622},[52,7903,3457],{"class":90},[52,7905,4543],{"class":622},[52,7907,7908],{"class":54,"line":130},[52,7909,7910],{"class":622},"    };\n",[52,7912,7913,7915,7917,7920,7922,7924,7926,7928,7930,7932,7934],{"class":54,"line":136},[52,7914,4529],{"class":622},[52,7916,4155],{"class":160},[52,7918,7919],{"class":62},"\"二维数组的行数\"",[52,7921,4351],{"class":160},[52,7923,7165],{"class":622},[52,7925,7168],{"class":160},[52,7927,6810],{"class":622},[52,7929,3306],{"class":90},[52,7931,7175],{"class":622},[52,7933,4155],{"class":160},[52,7935,4177],{"class":622},[52,7937,7938,7940,7942,7945,7947,7949,7951,7953,7955,7957,7959,7961,7963,7965,7967],{"class":54,"line":141},[52,7939,4529],{"class":622},[52,7941,4155],{"class":160},[52,7943,7944],{"class":62},"\"二维数组的列数\"",[52,7946,4351],{"class":160},[52,7948,6810],{"class":622},[52,7950,3306],{"class":90},[52,7952,7175],{"class":622},[52,7954,7168],{"class":160},[52,7956,6810],{"class":622},[52,7958,3306],{"class":90},[52,7960,7860],{"class":622},[52,7962,3306],{"class":90},[52,7964,7175],{"class":622},[52,7966,4155],{"class":160},[52,7968,4177],{"class":622},[52,7970,7971],{"class":54,"line":146},[52,7972,4543],{"class":622},[274,7974,7975],{},"查看二维数组首地址",[19,7977,7979],{"className":3109,"code":7978,"language":3111,"meta":28,"style":28},"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",[26,7980,7981,7998,8024,8049],{"__ignoreMap":28},[52,7982,7983,7985,7987,7990,7992,7994,7996],{"class":54,"line":55},[52,7984,4348],{"class":622},[52,7986,4155],{"class":160},[52,7988,7989],{"class":62},"\"二维数组首地址：\"",[52,7991,4155],{"class":160},[52,7993,6839],{"class":622},[52,7995,4155],{"class":160},[52,7997,4177],{"class":622},[52,7999,8000,8002,8004,8007,8009,8011,8013,8016,8018,8020,8022],{"class":54,"line":69},[52,8001,4348],{"class":622},[52,8003,4155],{"class":160},[52,8005,8006],{"class":62},"\"二维数组第一行的首地址：\"",[52,8008,4155],{"class":160},[52,8010,3121],{"class":622},[52,8012,3124],{"class":160},[52,8014,8015],{"class":622},")arr[",[52,8017,3306],{"class":90},[52,8019,4052],{"class":622},[52,8021,4155],{"class":160},[52,8023,4177],{"class":622},[52,8025,8026,8028,8030,8033,8035,8037,8039,8041,8043,8045,8047],{"class":54,"line":82},[52,8027,4348],{"class":622},[52,8029,4155],{"class":160},[52,8031,8032],{"class":62},"\"二维数组第二行的首地址：\"",[52,8034,4155],{"class":160},[52,8036,3121],{"class":622},[52,8038,3124],{"class":160},[52,8040,8015],{"class":622},[52,8042,3332],{"class":90},[52,8044,4052],{"class":622},[52,8046,4155],{"class":160},[52,8048,4177],{"class":622},[52,8050,8051,8053,8055,8058,8060,8062,8064,8066,8068,8070,8072,8074,8076,8078,8080,8082],{"class":54,"line":97},[52,8052,4348],{"class":622},[52,8054,4155],{"class":160},[52,8056,8057],{"class":62},"\"二维数组第一个元素的首地址:\"",[52,8059,4155],{"class":160},[52,8061,3121],{"class":622},[52,8063,3124],{"class":160},[52,8065,3542],{"class":622},[52,8067,3466],{"class":160},[52,8069,6865],{"class":622},[52,8071,3306],{"class":90},[52,8073,7860],{"class":622},[52,8075,3306],{"class":90},[52,8077,4052],{"class":622},[52,8079,4155],{"class":160},[52,8081,4220],{"class":622},[52,8083,8084],{"class":332},"\u002F\u002F对于数，要加取址符\n",[3015,8086,8087],{},"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":28,"searchDepth":69,"depth":69,"links":8089},[8090,8091,8092,8100,8101,8107,8112],{"id":3064,"depth":69,"text":3065},{"id":3071,"depth":69,"text":3072},{"id":3086,"depth":69,"text":3087,"children":8093},[8094,8095,8096,8097,8098,8099],{"id":3090,"depth":82,"text":3091},{"id":3136,"depth":82,"text":3137},{"id":3202,"depth":82,"text":3203},{"id":4136,"depth":82,"text":4137},{"id":4226,"depth":82,"text":4227},{"id":4322,"depth":82,"text":4323},{"id":4364,"depth":69,"text":4365},{"id":4432,"depth":69,"text":4433,"children":8102},[8103,8104,8105,8106],{"id":4436,"depth":82,"text":4437},{"id":4457,"depth":82,"text":4458},{"id":4466,"depth":82,"text":4467},{"id":4475,"depth":82,"text":4476},{"id":4484,"depth":69,"text":4485,"children":8108},[8109,8110,8111],{"id":4488,"depth":82,"text":4489},{"id":5167,"depth":82,"text":5168},{"id":6580,"depth":82,"text":6581},{"id":6721,"depth":69,"text":6722,"children":8113},[8114,8115],{"id":6725,"depth":82,"text":6726},{"id":7753,"depth":82,"text":7754},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":3056,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":8122,"title":8123,"body":8124,"description":28,"extension":3047,"meta":9221,"navigation":115,"path":9222,"seo":9223,"stem":9224,"__hash__":9225},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":8125,"toc":9213},[8126,8129,8133,8141,8147,8150,8215,8219,8222,8298,8302,8305,8308,8311,8524,8528,8533,8597,8602,8669,8674,8765,8768,8873,8877,8880,8886,9030,9034,9037,9051,9054,9099,9102,9210],[10,8127,8123],{"id":8128},"_2函数",[14,8130,8132],{"id":8131},"_21函数概述","2.1函数概述",[1070,8134,8135,8138],{},[1073,8136,8137],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[1073,8139,8140],{},"语法：",[19,8142,8145],{"className":8143,"code":8144,"language":24,"meta":28},[22],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[26,8146,8144],{"__ignoreMap":28},[274,8148,8149],{},"小案例",[19,8151,8153],{"className":3109,"code":8152,"language":3111,"meta":28,"style":28},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[26,8154,8155,8160,8183,8187,8204,8211],{"__ignoreMap":28},[52,8156,8157],{"class":54,"line":55},[52,8158,8159],{"class":332},"\u002F\u002Fnum1,num2形参\n",[52,8161,8162,8164,8166,8168,8170,8174,8176,8178,8181],{"class":54,"line":69},[52,8163,3124],{"class":160},[52,8165,2018],{"class":58},[52,8167,3121],{"class":622},[52,8169,3124],{"class":160},[52,8171,8173],{"class":8172},"s4XuR"," num1",[52,8175,3491],{"class":622},[52,8177,3124],{"class":160},[52,8179,8180],{"class":8172}," num2",[52,8182,170],{"class":622},[52,8184,8185],{"class":54,"line":82},[52,8186,4524],{"class":622},[52,8188,8189,8191,8194,8196,8199,8201],{"class":54,"line":97},[52,8190,4947],{"class":160},[52,8192,8193],{"class":622}," sum",[52,8195,2099],{"class":160},[52,8197,8198],{"class":622},"num1",[52,8200,3593],{"class":160},[52,8202,8203],{"class":622},"num2;\n",[52,8205,8206,8208],{"class":54,"line":112},[52,8207,7049],{"class":160},[52,8209,8210],{"class":622}," sum;\n",[52,8212,8213],{"class":54,"line":119},[52,8214,4543],{"class":622},[14,8216,8218],{"id":8217},"_22函数调用","2.2函数调用",[274,8220,8221],{},"调用刚刚写的求和函数",[19,8223,8225],{"className":3109,"code":8224,"language":3111,"meta":28,"style":28},"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",[26,8226,8227,8235,8239,8244,8256,8268,8277,8282,8294],{"__ignoreMap":28},[52,8228,8229,8231,8233],{"class":54,"line":55},[52,8230,3124],{"class":160},[52,8232,4935],{"class":58},[52,8234,4938],{"class":622},[52,8236,8237],{"class":54,"line":69},[52,8238,4524],{"class":622},[52,8240,8241],{"class":54,"line":82},[52,8242,8243],{"class":332},"    \u002F\u002Fa,b实参\n",[52,8245,8246,8248,8250,8252,8254],{"class":54,"line":97},[52,8247,4947],{"class":160},[52,8249,4377],{"class":622},[52,8251,2099],{"class":160},[52,8253,3306],{"class":90},[52,8255,4272],{"class":622},[52,8257,8258,8260,8262,8264,8266],{"class":54,"line":112},[52,8259,4947],{"class":160},[52,8261,5793],{"class":622},[52,8263,2099],{"class":160},[52,8265,3306],{"class":90},[52,8267,4272],{"class":622},[52,8269,8270,8272,8274],{"class":54,"line":119},[52,8271,4974],{"class":622},[52,8273,4408],{"class":160},[52,8275,8276],{"class":622},"a,b;\n",[52,8278,8279],{"class":54,"line":130},[52,8280,8281],{"class":332},"    \u002F\u002F调用函数时，实参值传给了形参\n",[52,8283,8284,8286,8288,8291],{"class":54,"line":136},[52,8285,4529],{"class":622},[52,8287,4155],{"class":160},[52,8289,8290],{"class":58},"add",[52,8292,8293],{"class":622},"(a,b);\n",[52,8295,8296],{"class":54,"line":141},[52,8297,4543],{"class":622},[14,8299,8301],{"id":8300},"_23值传递","2.3值传递",[274,8303,8304],{},"值传递就是函数调用时实参将数值传给形参",[274,8306,8307],{},"值传递时，如果形参发生任何改变，不会影响实参",[274,8309,8310],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[19,8312,8314],{"className":3109,"code":8313,"language":3111,"meta":28,"style":28},"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",[26,8315,8316,8338,8342,8355,8372,8390,8401,8410,8419,8432,8448,8464,8473,8477,8485,8489,8501,8513,8520],{"__ignoreMap":28},[52,8317,8318,8321,8324,8326,8328,8330,8332,8334,8336],{"class":54,"line":55},[52,8319,8320],{"class":160},"void",[52,8322,8323],{"class":58}," swap",[52,8325,3121],{"class":622},[52,8327,3124],{"class":160},[52,8329,8173],{"class":8172},[52,8331,3491],{"class":622},[52,8333,3124],{"class":160},[52,8335,8180],{"class":8172},[52,8337,170],{"class":622},[52,8339,8340],{"class":54,"line":69},[52,8341,4524],{"class":622},[52,8343,8344,8346,8348,8351,8353],{"class":54,"line":82},[52,8345,4529],{"class":622},[52,8347,4155],{"class":160},[52,8349,8350],{"class":62},"\"交换前：\"",[52,8352,4155],{"class":160},[52,8354,4177],{"class":622},[52,8356,8357,8359,8361,8364,8366,8368,8370],{"class":54,"line":97},[52,8358,4529],{"class":622},[52,8360,4155],{"class":160},[52,8362,8363],{"class":62},"\"num1=\"",[52,8365,4155],{"class":160},[52,8367,8198],{"class":622},[52,8369,4155],{"class":160},[52,8371,4177],{"class":622},[52,8373,8374,8376,8378,8381,8383,8386,8388],{"class":54,"line":112},[52,8375,4529],{"class":622},[52,8377,4155],{"class":160},[52,8379,8380],{"class":62},"\"num2=\"",[52,8382,4155],{"class":160},[52,8384,8385],{"class":622},"num2",[52,8387,4155],{"class":160},[52,8389,4177],{"class":622},[52,8391,8392,8394,8396,8398],{"class":54,"line":119},[52,8393,4947],{"class":160},[52,8395,7214],{"class":622},[52,8397,2099],{"class":160},[52,8399,8400],{"class":622},"num1;\n",[52,8402,8403,8406,8408],{"class":54,"line":130},[52,8404,8405],{"class":622},"    num1",[52,8407,2099],{"class":160},[52,8409,8203],{"class":622},[52,8411,8412,8415,8417],{"class":54,"line":136},[52,8413,8414],{"class":622},"    num2",[52,8416,2099],{"class":160},[52,8418,7239],{"class":622},[52,8420,8421,8423,8425,8428,8430],{"class":54,"line":141},[52,8422,4529],{"class":622},[52,8424,4155],{"class":160},[52,8426,8427],{"class":62},"\"交换后：\"",[52,8429,4155],{"class":160},[52,8431,4177],{"class":622},[52,8433,8434,8436,8438,8440,8442,8444,8446],{"class":54,"line":146},[52,8435,4529],{"class":622},[52,8437,4155],{"class":160},[52,8439,8363],{"class":62},[52,8441,4155],{"class":160},[52,8443,8198],{"class":622},[52,8445,4155],{"class":160},[52,8447,4177],{"class":622},[52,8449,8450,8452,8454,8456,8458,8460,8462],{"class":54,"line":152},[52,8451,4529],{"class":622},[52,8453,4155],{"class":160},[52,8455,8380],{"class":62},[52,8457,4155],{"class":160},[52,8459,8385],{"class":622},[52,8461,4155],{"class":160},[52,8463,4177],{"class":622},[52,8465,8466,8468,8470],{"class":54,"line":157},[52,8467,7049],{"class":160},[52,8469,3173],{"class":622},[52,8471,8472],{"class":332},"\u002F\u002F或者不写\n",[52,8474,8475],{"class":54,"line":173},[52,8476,4543],{"class":622},[52,8478,8479,8481,8483],{"class":54,"line":178},[52,8480,3124],{"class":160},[52,8482,4935],{"class":58},[52,8484,4938],{"class":622},[52,8486,8487],{"class":54,"line":184},[52,8488,4524],{"class":622},[52,8490,8491,8493,8495,8497,8499],{"class":54,"line":189},[52,8492,4947],{"class":160},[52,8494,4377],{"class":622},[52,8496,2099],{"class":160},[52,8498,3559],{"class":90},[52,8500,4272],{"class":622},[52,8502,8503,8505,8507,8509,8511],{"class":54,"line":201},[52,8504,4947],{"class":160},[52,8506,5793],{"class":622},[52,8508,2099],{"class":160},[52,8510,3812],{"class":90},[52,8512,4272],{"class":622},[52,8514,8515,8518],{"class":54,"line":206},[52,8516,8517],{"class":58},"    swap",[52,8519,8293],{"class":622},[52,8521,8522],{"class":54,"line":224},[52,8523,4543],{"class":622},[14,8525,8527],{"id":8526},"_24函数的常见形式","2.4函数的常见形式",[1070,8529,8530],{},[1073,8531,8532],{},"无参无返",[19,8534,8536],{"className":3109,"code":8535,"language":3111,"meta":28,"style":28},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[26,8537,8538,8547,8551,8564,8568,8576,8580,8585,8593],{"__ignoreMap":28},[52,8539,8540,8542,8545],{"class":54,"line":55},[52,8541,8320],{"class":160},[52,8543,8544],{"class":58}," test01",[52,8546,4938],{"class":622},[52,8548,8549],{"class":54,"line":69},[52,8550,4524],{"class":622},[52,8552,8553,8555,8557,8560,8562],{"class":54,"line":82},[52,8554,4529],{"class":622},[52,8556,4155],{"class":160},[52,8558,8559],{"class":62},"\"你好\"",[52,8561,4155],{"class":160},[52,8563,4177],{"class":622},[52,8565,8566],{"class":54,"line":97},[52,8567,4543],{"class":622},[52,8569,8570,8572,8574],{"class":54,"line":112},[52,8571,3124],{"class":160},[52,8573,4935],{"class":58},[52,8575,4938],{"class":622},[52,8577,8578],{"class":54,"line":119},[52,8579,4524],{"class":622},[52,8581,8582],{"class":54,"line":130},[52,8583,8584],{"class":332},"    \u002F\u002F函数调用\n",[52,8586,8587,8590],{"class":54,"line":136},[52,8588,8589],{"class":58},"    test01",[52,8591,8592],{"class":622},"();\n",[52,8594,8595],{"class":54,"line":141},[52,8596,4543],{"class":622},[1070,8598,8599],{"start":69},[1073,8600,8601],{},"有参无返",[19,8603,8605],{"className":3109,"code":8604,"language":3111,"meta":28,"style":28},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[26,8606,8607,8622,8626,8638,8642,8650,8654,8665],{"__ignoreMap":28},[52,8608,8609,8611,8614,8616,8618,8620],{"class":54,"line":55},[52,8610,8320],{"class":160},[52,8612,8613],{"class":58}," test02",[52,8615,3121],{"class":622},[52,8617,3124],{"class":160},[52,8619,4377],{"class":8172},[52,8621,170],{"class":622},[52,8623,8624],{"class":54,"line":69},[52,8625,4524],{"class":622},[52,8627,8628,8630,8632,8634,8636],{"class":54,"line":82},[52,8629,4529],{"class":622},[52,8631,4155],{"class":160},[52,8633,8559],{"class":62},[52,8635,4155],{"class":160},[52,8637,4177],{"class":622},[52,8639,8640],{"class":54,"line":97},[52,8641,4543],{"class":622},[52,8643,8644,8646,8648],{"class":54,"line":112},[52,8645,3124],{"class":160},[52,8647,4935],{"class":58},[52,8649,4938],{"class":622},[52,8651,8652],{"class":54,"line":119},[52,8653,4524],{"class":622},[52,8655,8656,8659,8661,8663],{"class":54,"line":130},[52,8657,8658],{"class":58},"    test02",[52,8660,3121],{"class":622},[52,8662,3424],{"class":90},[52,8664,5679],{"class":622},[52,8666,8667],{"class":54,"line":136},[52,8668,4543],{"class":622},[1070,8670,8671],{"start":82},[1073,8672,8673],{},"无参有返",[19,8675,8677],{"className":3109,"code":8676,"language":3111,"meta":28,"style":28},"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",[26,8678,8679,8688,8692,8704,8713,8717,8725,8729,8742,8761],{"__ignoreMap":28},[52,8680,8681,8683,8686],{"class":54,"line":55},[52,8682,3124],{"class":160},[52,8684,8685],{"class":58}," test03",[52,8687,4938],{"class":622},[52,8689,8690],{"class":54,"line":69},[52,8691,4524],{"class":622},[52,8693,8694,8696,8698,8700,8702],{"class":54,"line":82},[52,8695,4529],{"class":622},[52,8697,4155],{"class":160},[52,8699,8559],{"class":62},[52,8701,4155],{"class":160},[52,8703,4177],{"class":622},[52,8705,8706,8708,8711],{"class":54,"line":97},[52,8707,7049],{"class":160},[52,8709,8710],{"class":90}," 100",[52,8712,4272],{"class":622},[52,8714,8715],{"class":54,"line":112},[52,8716,4543],{"class":622},[52,8718,8719,8721,8723],{"class":54,"line":119},[52,8720,3124],{"class":160},[52,8722,4935],{"class":58},[52,8724,4938],{"class":622},[52,8726,8727],{"class":54,"line":130},[52,8728,4524],{"class":622},[52,8730,8731,8733,8735,8737,8740],{"class":54,"line":136},[52,8732,4947],{"class":160},[52,8734,8173],{"class":622},[52,8736,2099],{"class":160},[52,8738,8739],{"class":58},"test03",[52,8741,8592],{"class":622},[52,8743,8744,8746,8748,8750,8752,8754,8756,8758],{"class":54,"line":141},[52,8745,4529],{"class":622},[52,8747,4155],{"class":160},[52,8749,8363],{"class":62},[52,8751,4155],{"class":160},[52,8753,8198],{"class":622},[52,8755,4155],{"class":160},[52,8757,4220],{"class":622},[52,8759,8760],{"class":332}," \u002F\u002F100\n",[52,8762,8763],{"class":54,"line":146},[52,8764,4543],{"class":622},[274,8766,8767],{},"4.有参有返",[19,8769,8771],{"className":3109,"code":8770,"language":3111,"meta":28,"style":28},"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",[26,8772,8773,8788,8792,8805,8811,8815,8824,8828,8840,8854,8869],{"__ignoreMap":28},[52,8774,8775,8777,8780,8782,8784,8786],{"class":54,"line":55},[52,8776,3124],{"class":160},[52,8778,8779],{"class":58}," test04",[52,8781,3121],{"class":622},[52,8783,3124],{"class":160},[52,8785,4377],{"class":8172},[52,8787,170],{"class":622},[52,8789,8790],{"class":54,"line":69},[52,8791,4524],{"class":622},[52,8793,8794,8796,8798,8801,8803],{"class":54,"line":82},[52,8795,4529],{"class":622},[52,8797,4155],{"class":160},[52,8799,8800],{"class":62},"\"hello\"",[52,8802,4155],{"class":160},[52,8804,4177],{"class":622},[52,8806,8807,8809],{"class":54,"line":97},[52,8808,7049],{"class":160},[52,8810,4411],{"class":622},[52,8812,8813],{"class":54,"line":112},[52,8814,4543],{"class":622},[52,8816,8817,8819,8822],{"class":54,"line":119},[52,8818,3124],{"class":160},[52,8820,8821],{"class":58}," mian",[52,8823,4938],{"class":622},[52,8825,8826],{"class":54,"line":130},[52,8827,4524],{"class":622},[52,8829,8830,8832,8834,8836,8838],{"class":54,"line":136},[52,8831,4947],{"class":160},[52,8833,5793],{"class":622},[52,8835,2099],{"class":160},[52,8837,3332],{"class":90},[52,8839,4272],{"class":622},[52,8841,8842,8844,8846,8848,8851],{"class":54,"line":141},[52,8843,4947],{"class":160},[52,8845,5809],{"class":622},[52,8847,2099],{"class":160},[52,8849,8850],{"class":58},"test04",[52,8852,8853],{"class":622},"(b);\n",[52,8855,8856,8858,8860,8862,8864,8866],{"class":54,"line":146},[52,8857,4529],{"class":622},[52,8859,4155],{"class":160},[52,8861,3401],{"class":622},[52,8863,4155],{"class":160},[52,8865,4220],{"class":622},[52,8867,8868],{"class":332}," \u002F\u002F1\n",[52,8870,8871],{"class":54,"line":152},[52,8872,4543],{"class":622},[14,8874,8876],{"id":8875},"_25函数的声明","2.5函数的声明",[274,8878,8879],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[274,8881,8882,8883],{},"函数的",[538,8884,8885],{},"声明可以多次，但是函数的定义只能有一次",[19,8887,8889],{"className":3109,"code":8888,"language":3111,"meta":28,"style":28},"\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",[26,8890,8891,8896,8901,8926,8935,8939,8951,8963,8979,8983,9003,9007,9026],{"__ignoreMap":28},[52,8892,8893],{"class":54,"line":55},[52,8894,8895],{"class":332},"\u002F\u002F函数声明\n",[52,8897,8898],{"class":54,"line":69},[52,8899,8900],{"class":332},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[52,8902,8903,8905,8908,8910,8912,8914,8916,8918,8920,8923],{"class":54,"line":82},[52,8904,3124],{"class":160},[52,8906,8907],{"class":58}," max",[52,8909,3121],{"class":622},[52,8911,3124],{"class":160},[52,8913,4377],{"class":8172},[52,8915,3491],{"class":622},[52,8917,3124],{"class":160},[52,8919,5793],{"class":8172},[52,8921,8922],{"class":622},");",[52,8924,8925],{"class":332},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[52,8927,8928,8930,8932],{"class":54,"line":97},[52,8929,3124],{"class":160},[52,8931,4935],{"class":58},[52,8933,8934],{"class":622},"() \n",[52,8936,8937],{"class":54,"line":112},[52,8938,4524],{"class":622},[52,8940,8941,8943,8945,8947,8949],{"class":54,"line":119},[52,8942,4947],{"class":160},[52,8944,4377],{"class":622},[52,8946,2099],{"class":160},[52,8948,3559],{"class":90},[52,8950,4272],{"class":622},[52,8952,8953,8955,8957,8959,8961],{"class":54,"line":130},[52,8954,4947],{"class":160},[52,8956,5793],{"class":622},[52,8958,2099],{"class":160},[52,8960,3812],{"class":90},[52,8962,4272],{"class":622},[52,8964,8965,8967,8969,8972,8975,8977],{"class":54,"line":136},[52,8966,4529],{"class":622},[52,8968,4155],{"class":160},[52,8970,8971],{"class":58},"max",[52,8973,8974],{"class":622},"(a,b)",[52,8976,4155],{"class":160},[52,8978,4177],{"class":622},[52,8980,8981],{"class":54,"line":141},[52,8982,4543],{"class":622},[52,8984,8985,8987,8989,8991,8993,8995,8997,8999,9001],{"class":54,"line":146},[52,8986,3124],{"class":160},[52,8988,8907],{"class":58},[52,8990,3121],{"class":622},[52,8992,3124],{"class":160},[52,8994,4377],{"class":8172},[52,8996,3491],{"class":622},[52,8998,3124],{"class":160},[52,9000,5793],{"class":8172},[52,9002,170],{"class":622},[52,9004,9005],{"class":54,"line":152},[52,9006,4524],{"class":622},[52,9008,9009,9011,9013,9015,9017,9019,9021,9023],{"class":54,"line":157},[52,9010,7049],{"class":160},[52,9012,4377],{"class":622},[52,9014,4072],{"class":160},[52,9016,3376],{"class":622},[52,9018,4097],{"class":160},[52,9020,300],{"class":622},[52,9022,3971],{"class":160},[52,9024,9025],{"class":622},"b;\n",[52,9027,9028],{"class":54,"line":173},[52,9029,4543],{"class":622},[14,9031,9033],{"id":9032},"_26函数的分文件编写","2.6函数的分文件编写",[274,9035,9036],{},"4个步骤：",[4118,9038,9039,9042,9045,9048],{},[1073,9040,9041],{},"1.创建后缀名为.h的头文件",[1073,9043,9044],{},"2.创建后缀名为.cpp的源文件",[1073,9046,9047],{},"3.在头文件中写函数的定义",[1073,9049,9050],{},"4.在源文件中写函数的定义\n示例：",[274,9052,9053],{},"头文件：swap.h",[19,9055,9057],{"className":3109,"code":9056,"language":3111,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[26,9058,9059,9065,9075,9079],{"__ignoreMap":28},[52,9060,9061,9063],{"class":54,"line":55},[52,9062,4912],{"class":160},[52,9064,4915],{"class":62},[52,9066,9067,9069,9071,9073],{"class":54,"line":69},[52,9068,4920],{"class":160},[52,9070,4923],{"class":160},[52,9072,4926],{"class":58},[52,9074,4272],{"class":622},[52,9076,9077],{"class":54,"line":82},[52,9078,8895],{"class":332},[52,9080,9081,9083,9085,9087,9089,9091,9093,9095,9097],{"class":54,"line":97},[52,9082,8320],{"class":160},[52,9084,8323],{"class":58},[52,9086,3121],{"class":622},[52,9088,3124],{"class":160},[52,9090,4377],{"class":8172},[52,9092,3491],{"class":622},[52,9094,3124],{"class":160},[52,9096,5793],{"class":8172},[52,9098,5679],{"class":622},[274,9100,9101],{},"源文件：swap.cpp",[19,9103,9105],{"className":3109,"code":9104,"language":3111,"meta":28,"style":28},"#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",[26,9106,9107,9114,9119,9139,9143,9154,9163,9172,9189,9206],{"__ignoreMap":28},[52,9108,9109,9111],{"class":54,"line":55},[52,9110,4912],{"class":160},[52,9112,9113],{"class":62}," \"swap.h\"\n",[52,9115,9116],{"class":54,"line":69},[52,9117,9118],{"class":332},"\u002F\u002F函数的定义\n",[52,9120,9121,9123,9125,9127,9129,9131,9133,9135,9137],{"class":54,"line":82},[52,9122,8320],{"class":160},[52,9124,8323],{"class":58},[52,9126,3121],{"class":622},[52,9128,3124],{"class":160},[52,9130,4377],{"class":8172},[52,9132,3491],{"class":622},[52,9134,3124],{"class":160},[52,9136,5793],{"class":8172},[52,9138,170],{"class":622},[52,9140,9141],{"class":54,"line":97},[52,9142,4524],{"class":622},[52,9144,9145,9147,9149,9151],{"class":54,"line":112},[52,9146,4947],{"class":160},[52,9148,7214],{"class":622},[52,9150,2099],{"class":160},[52,9152,9153],{"class":622},"a;\n",[52,9155,9156,9159,9161],{"class":54,"line":119},[52,9157,9158],{"class":622},"    a",[52,9160,2099],{"class":160},[52,9162,9025],{"class":622},[52,9164,9165,9168,9170],{"class":54,"line":130},[52,9166,9167],{"class":622},"    b",[52,9169,2099],{"class":160},[52,9171,7239],{"class":622},[52,9173,9174,9176,9178,9181,9183,9185,9187],{"class":54,"line":136},[52,9175,4529],{"class":622},[52,9177,4155],{"class":160},[52,9179,9180],{"class":62},"\"a=\"",[52,9182,4155],{"class":160},[52,9184,300],{"class":622},[52,9186,4155],{"class":160},[52,9188,4177],{"class":622},[52,9190,9191,9193,9195,9198,9200,9202,9204],{"class":54,"line":141},[52,9192,4529],{"class":622},[52,9194,4155],{"class":160},[52,9196,9197],{"class":62},"\"b=\"",[52,9199,4155],{"class":160},[52,9201,3376],{"class":622},[52,9203,4155],{"class":160},[52,9205,4177],{"class":622},[52,9207,9208],{"class":54,"line":146},[52,9209,4543],{"class":622},[3015,9211,9212],{},"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":28,"searchDepth":69,"depth":69,"links":9214},[9215,9216,9217,9218,9219,9220],{"id":8131,"depth":69,"text":8132},{"id":8217,"depth":69,"text":8218},{"id":8300,"depth":69,"text":8301},{"id":8526,"depth":69,"text":8527},{"id":8875,"depth":69,"text":8876},{"id":9032,"depth":69,"text":9033},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":8123,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":9227,"title":9228,"body":9229,"description":9236,"extension":3047,"meta":10641,"navigation":115,"path":10642,"seo":10643,"stem":10644,"__hash__":10645},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":9230,"toc":10631},[9231,9234,9237,9241,9403,9407,9410,9413,9416,9419,9559,9563,9566,9569,9572,9637,9641,9646,9713,9716,9720,9723,9734,9739,9759,9762,9767,9786,9789,9793,9812,9815,9819,10054,10058,10061,10064,10067,10229,10232,10236,10239,10245,10628],[10,9232,9228],{"id":9233},"_3指针",[274,9235,9236],{},"通过指针保存一个地址，指针就是个地址",[14,9238,9240],{"id":9239},"_31定义指针","3.1定义指针",[19,9242,9244],{"className":3109,"code":9243,"language":3111,"meta":28,"style":28},"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",[26,9245,9246,9254,9258,9263,9275,9280,9288,9298,9316,9336,9340,9345,9350,9355,9369,9385,9399],{"__ignoreMap":28},[52,9247,9248,9250,9252],{"class":54,"line":55},[52,9249,3124],{"class":160},[52,9251,4935],{"class":58},[52,9253,4938],{"class":622},[52,9255,9256],{"class":54,"line":69},[52,9257,4524],{"class":622},[52,9259,9260],{"class":54,"line":82},[52,9261,9262],{"class":332},"    \u002F\u002F1.定义指针\n",[52,9264,9265,9267,9269,9271,9273],{"class":54,"line":97},[52,9266,4947],{"class":160},[52,9268,4377],{"class":622},[52,9270,2099],{"class":160},[52,9272,3559],{"class":90},[52,9274,4272],{"class":622},[52,9276,9277],{"class":54,"line":112},[52,9278,9279],{"class":332},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[52,9281,9282,9285],{"class":54,"line":119},[52,9283,9284],{"class":160},"    int*",[52,9286,9287],{"class":622},"p;\n",[52,9289,9290,9293,9296],{"class":54,"line":130},[52,9291,9292],{"class":622},"    p",[52,9294,9295],{"class":160},"=&",[52,9297,9153],{"class":622},[52,9299,9300,9302,9304,9307,9310,9312,9314],{"class":54,"line":136},[52,9301,4529],{"class":622},[52,9303,4155],{"class":160},[52,9305,9306],{"class":62},"\"a的地址为：\"",[52,9308,9309],{"class":160},"\u003C\u003C&",[52,9311,300],{"class":622},[52,9313,4155],{"class":160},[52,9315,4177],{"class":622},[52,9317,9318,9320,9322,9325,9327,9329,9331,9333],{"class":54,"line":141},[52,9319,4529],{"class":622},[52,9321,4155],{"class":160},[52,9323,9324],{"class":62},"\"指针p为：\"",[52,9326,4155],{"class":160},[52,9328,274],{"class":622},[52,9330,4155],{"class":160},[52,9332,4220],{"class":622},[52,9334,9335],{"class":332},"\u002F\u002F指针p表示的就是a的地址\n",[52,9337,9338],{"class":54,"line":146},[52,9339,116],{"emptyLinePlaceholder":115},[52,9341,9342],{"class":54,"line":152},[52,9343,9344],{"class":332},"    \u002F\u002F2.使用指针\n",[52,9346,9347],{"class":54,"line":157},[52,9348,9349],{"class":332},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[52,9351,9352],{"class":54,"line":173},[52,9353,9354],{"class":332},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[52,9356,9357,9360,9362,9364,9367],{"class":54,"line":178},[52,9358,9359],{"class":160},"    *",[52,9361,274],{"class":622},[52,9363,2099],{"class":160},[52,9365,9366],{"class":90},"1000",[52,9368,4272],{"class":622},[52,9370,9371,9373,9376,9378,9380,9382],{"class":54,"line":184},[52,9372,4529],{"class":622},[52,9374,9375],{"class":160},"\u003C\u003C*",[52,9377,274],{"class":622},[52,9379,4155],{"class":160},[52,9381,4220],{"class":622},[52,9383,9384],{"class":332},"\u002F\u002F1000\n",[52,9386,9387,9389,9391,9393,9395,9397],{"class":54,"line":189},[52,9388,4529],{"class":622},[52,9390,4155],{"class":160},[52,9392,300],{"class":622},[52,9394,4155],{"class":160},[52,9396,4220],{"class":622},[52,9398,9384],{"class":332},[52,9400,9401],{"class":54,"line":201},[52,9402,4543],{"class":622},[14,9404,9406],{"id":9405},"_32指针所占的内存空间","3.2指针所占的内存空间",[274,9408,9409],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[274,9411,9412],{},"在32位操作系统下：占用4个字节空间",[274,9414,9415],{},"在64位操作系统下：占用8个字节空间",[274,9417,9418],{},"上方是不管啥数据类型的",[19,9420,9422],{"className":3109,"code":9421,"language":3111,"meta":28,"style":28},"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",[26,9423,9424,9432,9436,9441,9453,9458,9463,9468,9481,9503,9529,9555],{"__ignoreMap":28},[52,9425,9426,9428,9430],{"class":54,"line":55},[52,9427,3124],{"class":160},[52,9429,4935],{"class":58},[52,9431,4938],{"class":622},[52,9433,9434],{"class":54,"line":69},[52,9435,4524],{"class":622},[52,9437,9438],{"class":54,"line":82},[52,9439,9440],{"class":332},"    \u002F\u002F指针所占内存空间\n",[52,9442,9443,9445,9447,9449,9451],{"class":54,"line":97},[52,9444,4947],{"class":160},[52,9446,4377],{"class":622},[52,9448,2099],{"class":160},[52,9450,3559],{"class":90},[52,9452,4272],{"class":622},[52,9454,9455],{"class":54,"line":112},[52,9456,9457],{"class":332},"    \u002F\u002Fint *p;\n",[52,9459,9460],{"class":54,"line":119},[52,9461,9462],{"class":332},"    \u002F\u002Fp=&a;\n",[52,9464,9465],{"class":54,"line":130},[52,9466,9467],{"class":332},"    \u002F\u002F上述可以写为以下：\n",[52,9469,9470,9472,9475,9477,9479],{"class":54,"line":136},[52,9471,4947],{"class":160},[52,9473,9474],{"class":160}," *",[52,9476,274],{"class":622},[52,9478,9295],{"class":160},[52,9480,9153],{"class":622},[52,9482,9483,9486,9488,9491,9493,9496,9498,9500],{"class":54,"line":141},[52,9484,9485],{"class":622},"    cout ",[52,9487,4155],{"class":160},[52,9489,9490],{"class":62},"\"sizeof(int *)\"",[52,9492,4351],{"class":160},[52,9494,9495],{"class":622},"(p)",[52,9497,4155],{"class":160},[52,9499,4220],{"class":622},[52,9501,9502],{"class":332},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[52,9504,9505,9507,9509,9511,9513,9515,9517,9519,9521,9523,9526],{"class":54,"line":146},[52,9506,9485],{"class":622},[52,9508,4155],{"class":160},[52,9510,9490],{"class":62},[52,9512,4351],{"class":160},[52,9514,3121],{"class":622},[52,9516,3124],{"class":160},[52,9518,9474],{"class":160},[52,9520,3542],{"class":622},[52,9522,4155],{"class":160},[52,9524,9525],{"class":622},"endl",[52,9527,9528],{"class":332},"  \u002F\u002F4字节(32位的话)\n",[52,9530,9531,9533,9535,9538,9540,9542,9544,9546,9548,9550,9552],{"class":54,"line":152},[52,9532,9485],{"class":622},[52,9534,4155],{"class":160},[52,9536,9537],{"class":62},"\"sizeof(char *)\"",[52,9539,4351],{"class":160},[52,9541,3121],{"class":622},[52,9543,3213],{"class":160},[52,9545,9474],{"class":160},[52,9547,3542],{"class":622},[52,9549,4155],{"class":160},[52,9551,4220],{"class":622},[52,9553,9554],{"class":332}," \u002F\u002F4字节(32位的话)\n",[52,9556,9557],{"class":54,"line":157},[52,9558,4543],{"class":622},[14,9560,9562],{"id":9561},"_33空指针","3.3空指针",[274,9564,9565],{},"空指针：指针变量指向内存中编号为0的空间",[274,9567,9568],{},"用途：初始化指针变量",[274,9570,9571],{},"注意：空指针指向的内存是不可以访问的",[19,9573,9575],{"className":3109,"code":9574,"language":3111,"meta":28,"style":28},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[26,9576,9577,9585,9589,9594,9608,9613,9628,9633],{"__ignoreMap":28},[52,9578,9579,9581,9583],{"class":54,"line":55},[52,9580,3124],{"class":160},[52,9582,4935],{"class":58},[52,9584,4938],{"class":622},[52,9586,9587],{"class":54,"line":69},[52,9588,4524],{"class":622},[52,9590,9591],{"class":54,"line":82},[52,9592,9593],{"class":332},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[52,9595,9596,9598,9600,9602,9604,9606],{"class":54,"line":97},[52,9597,4947],{"class":160},[52,9599,9474],{"class":160},[52,9601,274],{"class":622},[52,9603,2099],{"class":160},[52,9605,5354],{"class":90},[52,9607,4272],{"class":622},[52,9609,9610],{"class":54,"line":112},[52,9611,9612],{"class":332},"    \u002F\u002F2.空指针不能进行访问\n",[52,9614,9615,9617,9619,9621,9623,9625],{"class":54,"line":119},[52,9616,9359],{"class":160},[52,9618,274],{"class":622},[52,9620,2099],{"class":160},[52,9622,3424],{"class":90},[52,9624,3173],{"class":622},[52,9626,9627],{"class":332},"\u002F\u002F直接报错，压根不能访问\n",[52,9629,9630],{"class":54,"line":130},[52,9631,9632],{"class":332},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[52,9634,9635],{"class":54,"line":136},[52,9636,4543],{"class":622},[14,9638,9640],{"id":9639},"_34野指针","3.4野指针",[274,9642,9643],{},[538,9644,9645],{},"指针变量指向非法的内存空间",[19,9647,9649],{"className":3109,"code":9648,"language":3111,"meta":28,"style":28},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[26,9650,9651,9659,9663,9692,9697,9709],{"__ignoreMap":28},[52,9652,9653,9655,9657],{"class":54,"line":55},[52,9654,3124],{"class":160},[52,9656,4935],{"class":58},[52,9658,4938],{"class":622},[52,9660,9661],{"class":54,"line":69},[52,9662,4524],{"class":622},[52,9664,9665,9667,9669,9671,9673,9675,9677,9679,9681,9684,9687,9689],{"class":54,"line":82},[52,9666,4947],{"class":160},[52,9668,9474],{"class":160},[52,9670,274],{"class":622},[52,9672,2099],{"class":160},[52,9674,3121],{"class":622},[52,9676,3124],{"class":160},[52,9678,9474],{"class":160},[52,9680,3542],{"class":622},[52,9682,9683],{"class":160},"0x",[52,9685,9686],{"class":90},"1100",[52,9688,3173],{"class":622},[52,9690,9691],{"class":332}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[52,9693,9694],{"class":54,"line":97},[52,9695,9696],{"class":332},"    \u002F\u002F访问野指针报错\n",[52,9698,9699,9701,9703,9705,9707],{"class":54,"line":112},[52,9700,4529],{"class":622},[52,9702,9375],{"class":160},[52,9704,274],{"class":622},[52,9706,4155],{"class":160},[52,9708,4177],{"class":622},[52,9710,9711],{"class":54,"line":119},[52,9712,4543],{"class":622},[274,9714,9715],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9717,9719],{"id":9718},"_35const修饰指针","3.5const修饰指针",[274,9721,9722],{},"三种情况：",[4118,9724,9725,9728,9731],{},[1073,9726,9727],{},"const修饰指针 常量指针",[1073,9729,9730],{},"const修饰常量 指针常量",[1073,9732,9733],{},"const即修饰指针，又修饰常量",[1070,9735,9736],{},[1073,9737,9738],{},"常量指针",[19,9740,9742],{"className":3109,"code":9741,"language":3111,"meta":28,"style":28},"const int *p=&a;\n",[26,9743,9744],{"__ignoreMap":28},[52,9745,9746,9749,9751,9753,9755,9757],{"class":54,"line":55},[52,9747,9748],{"class":160},"const",[52,9750,5344],{"class":160},[52,9752,9474],{"class":160},[52,9754,274],{"class":622},[52,9756,9295],{"class":160},[52,9758,9153],{"class":622},[274,9760,9761],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1070,9763,9764],{"start":69},[1073,9765,9766],{},"指针常量",[19,9768,9770],{"className":3109,"code":9769,"language":3111,"meta":28,"style":28},"int *const p=&a;\n",[26,9771,9772],{"__ignoreMap":28},[52,9773,9774,9776,9779,9782,9784],{"class":54,"line":55},[52,9775,3124],{"class":160},[52,9777,9778],{"class":160}," *const",[52,9780,9781],{"class":622}," p",[52,9783,9295],{"class":160},[52,9785,9153],{"class":622},[274,9787,9788],{},"指针的指向不可以改，指针指向的值可以改",[1070,9790,9791],{"start":82},[1073,9792,9733],{},[19,9794,9796],{"className":3109,"code":9795,"language":3111,"meta":28,"style":28},"const int *const p=&a;\n",[26,9797,9798],{"__ignoreMap":28},[52,9799,9800,9802,9804,9806,9808,9810],{"class":54,"line":55},[52,9801,9748],{"class":160},[52,9803,5344],{"class":160},[52,9805,9778],{"class":160},[52,9807,9781],{"class":622},[52,9809,9295],{"class":160},[52,9811,9153],{"class":622},[274,9813,9814],{},"指针的指向和指针指向的值都不可以改变",[14,9816,9818],{"id":9817},"_36指针和数组","3.6指针和数组",[19,9820,9822],{"className":3109,"code":9821,"language":3111,"meta":28,"style":28},"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",[26,9823,9824,9832,9836,9841,9895,9916,9932,9948,9959,9976,9981,9995,10021,10025,10037,10046,10050],{"__ignoreMap":28},[52,9825,9826,9828,9830],{"class":54,"line":55},[52,9827,3124],{"class":160},[52,9829,4935],{"class":58},[52,9831,4938],{"class":622},[52,9833,9834],{"class":54,"line":69},[52,9835,4524],{"class":622},[52,9837,9838],{"class":54,"line":82},[52,9839,9840],{"class":332},"    \u002F\u002F利用指针访问数组中的元素\n",[52,9842,9843,9845,9847,9849,9851,9853,9855,9857,9859,9861,9863,9865,9867,9869,9871,9873,9875,9877,9879,9881,9883,9885,9887,9889,9891,9893],{"class":54,"line":97},[52,9844,4947],{"class":160},[52,9846,6921],{"class":622},[52,9848,3559],{"class":90},[52,9850,4052],{"class":622},[52,9852,2099],{"class":160},[52,9854,4008],{"class":622},[52,9856,3332],{"class":90},[52,9858,3491],{"class":622},[52,9860,3194],{"class":90},[52,9862,3491],{"class":622},[52,9864,3188],{"class":90},[52,9866,3491],{"class":622},[52,9868,3406],{"class":90},[52,9870,3491],{"class":622},[52,9872,3432],{"class":90},[52,9874,3491],{"class":622},[52,9876,3457],{"class":90},[52,9878,3491],{"class":622},[52,9880,3482],{"class":90},[52,9882,3491],{"class":622},[52,9884,3508],{"class":90},[52,9886,3491],{"class":622},[52,9888,3533],{"class":90},[52,9890,3491],{"class":622},[52,9892,3559],{"class":90},[52,9894,6954],{"class":622},[52,9896,9897,9899,9901,9904,9906,9908,9910,9912,9914],{"class":54,"line":112},[52,9898,4529],{"class":622},[52,9900,4155],{"class":160},[52,9902,9903],{"class":62},"\"数组的第一个元素为：\"",[52,9905,4155],{"class":160},[52,9907,6865],{"class":622},[52,9909,3306],{"class":90},[52,9911,4052],{"class":622},[52,9913,4155],{"class":160},[52,9915,4177],{"class":622},[52,9917,9918,9920,9922,9924,9926,9929],{"class":54,"line":119},[52,9919,4947],{"class":160},[52,9921,9474],{"class":160},[52,9923,274],{"class":622},[52,9925,2099],{"class":160},[52,9927,9928],{"class":622},"arr;",[52,9930,9931],{"class":332},"\u002F\u002F注意数才要加取地址符号&\n",[52,9933,9934,9936,9938,9940,9942,9944,9946],{"class":54,"line":130},[52,9935,4529],{"class":622},[52,9937,4155],{"class":160},[52,9939,9903],{"class":62},[52,9941,9375],{"class":160},[52,9943,274],{"class":622},[52,9945,4155],{"class":160},[52,9947,4177],{"class":622},[52,9949,9950,9952,9954,9956],{"class":54,"line":136},[52,9951,9292],{"class":622},[52,9953,5254],{"class":160},[52,9955,3173],{"class":622},[52,9957,9958],{"class":332}," \u002F\u002F让指针向后偏移4个字节\n",[52,9960,9961,9963,9965,9968,9970,9972,9974],{"class":54,"line":141},[52,9962,4529],{"class":622},[52,9964,4155],{"class":160},[52,9966,9967],{"class":62},"\"数组的第二个元素为：\"",[52,9969,9375],{"class":160},[52,9971,274],{"class":622},[52,9973,4155],{"class":160},[52,9975,4177],{"class":622},[52,9977,9978],{"class":54,"line":146},[52,9979,9980],{"class":332},"    \u002F\u002F利用指针遍历数组\n",[52,9982,9983,9985,9987,9990,9992],{"class":54,"line":152},[52,9984,4947],{"class":160},[52,9986,9474],{"class":160},[52,9988,9989],{"class":622},"p2",[52,9991,2099],{"class":160},[52,9993,9994],{"class":622},"arr;\n",[52,9996,9997,9999,10001,10003,10005,10007,10009,10011,10013,10015,10017,10019],{"class":54,"line":157},[52,9998,6160],{"class":160},[52,10000,4629],{"class":622},[52,10002,3124],{"class":160},[52,10004,5992],{"class":622},[52,10006,2099],{"class":160},[52,10008,3306],{"class":90},[52,10010,5999],{"class":622},[52,10012,4022],{"class":160},[52,10014,3559],{"class":90},[52,10016,5999],{"class":622},[52,10018,5254],{"class":160},[52,10020,170],{"class":622},[52,10022,10023],{"class":54,"line":173},[52,10024,4992],{"class":622},[52,10026,10027,10029,10031,10033,10035],{"class":54,"line":178},[52,10028,6410],{"class":622},[52,10030,9375],{"class":160},[52,10032,9989],{"class":622},[52,10034,4155],{"class":160},[52,10036,4177],{"class":622},[52,10038,10039,10042,10044],{"class":54,"line":184},[52,10040,10041],{"class":622},"        p2",[52,10043,5254],{"class":160},[52,10045,4272],{"class":622},[52,10047,10048],{"class":54,"line":189},[52,10049,5149],{"class":622},[52,10051,10052],{"class":54,"line":201},[52,10053,4543],{"class":622},[14,10055,10057],{"id":10056},"_37指针和函数","3.7指针和函数",[274,10059,10060],{},"利用指针做函数参数，可以修改实参的值",[274,10062,10063],{},"值传递：只改变形参，不改变实参",[274,10065,10066],{},"地址传递：",[19,10068,10070],{"className":3109,"code":10069,"language":3111,"meta":28,"style":28},"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",[26,10071,10072,10097,10101,10113,10124,10134,10138,10146,10150,10162,10174,10179,10195,10210,10225],{"__ignoreMap":28},[52,10073,10074,10076,10078,10080,10082,10084,10087,10089,10091,10093,10095],{"class":54,"line":55},[52,10075,8320],{"class":160},[52,10077,8323],{"class":58},[52,10079,3121],{"class":622},[52,10081,3124],{"class":160},[52,10083,9474],{"class":160},[52,10085,10086],{"class":8172},"p1",[52,10088,3491],{"class":622},[52,10090,3124],{"class":160},[52,10092,9474],{"class":160},[52,10094,9989],{"class":8172},[52,10096,170],{"class":622},[52,10098,10099],{"class":54,"line":69},[52,10100,4524],{"class":622},[52,10102,10103,10105,10107,10110],{"class":54,"line":82},[52,10104,4947],{"class":160},[52,10106,7214],{"class":622},[52,10108,10109],{"class":160},"=*",[52,10111,10112],{"class":622},"p1;\n",[52,10114,10115,10117,10119,10121],{"class":54,"line":97},[52,10116,9359],{"class":160},[52,10118,10086],{"class":622},[52,10120,10109],{"class":160},[52,10122,10123],{"class":622},"p2;\n",[52,10125,10126,10128,10130,10132],{"class":54,"line":112},[52,10127,9359],{"class":160},[52,10129,9989],{"class":622},[52,10131,2099],{"class":160},[52,10133,7239],{"class":622},[52,10135,10136],{"class":54,"line":119},[52,10137,4543],{"class":622},[52,10139,10140,10142,10144],{"class":54,"line":130},[52,10141,3124],{"class":160},[52,10143,4935],{"class":58},[52,10145,4938],{"class":622},[52,10147,10148],{"class":54,"line":136},[52,10149,4524],{"class":622},[52,10151,10152,10154,10156,10158,10160],{"class":54,"line":141},[52,10153,4947],{"class":160},[52,10155,4377],{"class":622},[52,10157,2099],{"class":160},[52,10159,3559],{"class":90},[52,10161,4272],{"class":622},[52,10163,10164,10166,10168,10170,10172],{"class":54,"line":146},[52,10165,4947],{"class":160},[52,10167,5793],{"class":622},[52,10169,2099],{"class":160},[52,10171,3812],{"class":90},[52,10173,4272],{"class":622},[52,10175,10176],{"class":54,"line":152},[52,10177,10178],{"class":332},"    \u002F\u002F地址传递\n",[52,10180,10181,10183,10185,10187,10190,10192],{"class":54,"line":157},[52,10182,8517],{"class":58},[52,10184,3121],{"class":622},[52,10186,3466],{"class":160},[52,10188,10189],{"class":622},"a,",[52,10191,3466],{"class":160},[52,10193,10194],{"class":622},"b);\n",[52,10196,10197,10199,10201,10203,10205,10207],{"class":54,"line":173},[52,10198,4529],{"class":622},[52,10200,4155],{"class":160},[52,10202,300],{"class":622},[52,10204,4155],{"class":160},[52,10206,4220],{"class":622},[52,10208,10209],{"class":332},"\u002F\u002F20\n",[52,10211,10212,10214,10216,10218,10220,10222],{"class":54,"line":178},[52,10213,4529],{"class":622},[52,10215,4155],{"class":160},[52,10217,3376],{"class":622},[52,10219,4155],{"class":160},[52,10221,4220],{"class":622},[52,10223,10224],{"class":332},"\u002F\u002F10\n",[52,10226,10227],{"class":54,"line":184},[52,10228,4543],{"class":622},[274,10230,10231],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,10233,10235],{"id":10234},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[274,10237,10238],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[274,10240,10241,10242,10244],{},"例如数组：int arr",[52,10243,3559],{},"={4,3,6,9,1,2,10,8,7,5}",[19,10246,10248],{"className":3109,"code":10247,"language":3111,"meta":28,"style":28},"#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",[26,10249,10250,10256,10266,10290,10294,10325,10329,10363,10367,10385,10389,10400,10415,10430,10434,10438,10442,10446,10450,10458,10462,10467,10521,10533,10545,10550,10558,10562,10567,10592,10596,10611,10620,10624],{"__ignoreMap":28},[52,10251,10252,10254],{"class":54,"line":55},[52,10253,4912],{"class":160},[52,10255,4915],{"class":62},[52,10257,10258,10260,10262,10264],{"class":54,"line":69},[52,10259,4920],{"class":160},[52,10261,4923],{"class":160},[52,10263,4926],{"class":58},[52,10265,4272],{"class":622},[52,10267,10268,10270,10273,10275,10277,10279,10281,10283,10285,10288],{"class":54,"line":82},[52,10269,8320],{"class":160},[52,10271,10272],{"class":58}," bubbleSort",[52,10274,3121],{"class":622},[52,10276,3124],{"class":160},[52,10278,9474],{"class":160},[52,10280,274],{"class":8172},[52,10282,3491],{"class":622},[52,10284,3124],{"class":160},[52,10286,10287],{"class":8172}," len",[52,10289,170],{"class":622},[52,10291,10292],{"class":54,"line":97},[52,10293,4524],{"class":622},[52,10295,10296,10298,10300,10302,10304,10306,10308,10310,10312,10315,10317,10319,10321,10323],{"class":54,"line":112},[52,10297,6160],{"class":160},[52,10299,3121],{"class":622},[52,10301,3124],{"class":160},[52,10303,5992],{"class":622},[52,10305,2099],{"class":160},[52,10307,3306],{"class":90},[52,10309,5999],{"class":622},[52,10311,4022],{"class":160},[52,10313,10314],{"class":622},"len",[52,10316,3644],{"class":160},[52,10318,3332],{"class":90},[52,10320,5999],{"class":622},[52,10322,5254],{"class":160},[52,10324,170],{"class":622},[52,10326,10327],{"class":54,"line":119},[52,10328,4992],{"class":622},[52,10330,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359,10361],{"class":54,"line":130},[52,10332,6362],{"class":160},[52,10334,3121],{"class":622},[52,10336,3124],{"class":160},[52,10338,6369],{"class":622},[52,10340,2099],{"class":160},[52,10342,3306],{"class":90},[52,10344,6376],{"class":622},[52,10346,4022],{"class":160},[52,10348,10314],{"class":622},[52,10350,3644],{"class":160},[52,10352,3554],{"class":622},[52,10354,3644],{"class":160},[52,10356,3332],{"class":90},[52,10358,6376],{"class":622},[52,10360,5254],{"class":160},[52,10362,170],{"class":622},[52,10364,10365],{"class":54,"line":136},[52,10366,5471],{"class":622},[52,10368,10369,10371,10374,10376,10379,10381,10383],{"class":54,"line":141},[52,10370,7601],{"class":160},[52,10372,10373],{"class":622},"(p[j]",[52,10375,4072],{"class":160},[52,10377,10378],{"class":622},"p[j",[52,10380,3593],{"class":160},[52,10382,3332],{"class":90},[52,10384,7616],{"class":622},[52,10386,10387],{"class":54,"line":146},[52,10388,7621],{"class":622},[52,10390,10391,10393,10395,10397],{"class":54,"line":152},[52,10392,7626],{"class":160},[52,10394,7214],{"class":622},[52,10396,2099],{"class":160},[52,10398,10399],{"class":622},"p[j];\n",[52,10401,10402,10405,10407,10409,10411,10413],{"class":54,"line":157},[52,10403,10404],{"class":622},"                p[j]",[52,10406,2099],{"class":160},[52,10408,10378],{"class":622},[52,10410,3593],{"class":160},[52,10412,3332],{"class":90},[52,10414,7649],{"class":622},[52,10416,10417,10420,10422,10424,10426,10428],{"class":54,"line":173},[52,10418,10419],{"class":622},"                p[j",[52,10421,3593],{"class":160},[52,10423,3332],{"class":90},[52,10425,4052],{"class":622},[52,10427,2099],{"class":160},[52,10429,7239],{"class":622},[52,10431,10432],{"class":54,"line":178},[52,10433,7669],{"class":622},[52,10435,10436],{"class":54,"line":184},[52,10437,5490],{"class":622},[52,10439,10440],{"class":54,"line":189},[52,10441,5149],{"class":622},[52,10443,10444],{"class":54,"line":201},[52,10445,4543],{"class":622},[52,10447,10448],{"class":54,"line":206},[52,10449,116],{"emptyLinePlaceholder":115},[52,10451,10452,10454,10456],{"class":54,"line":224},[52,10453,3124],{"class":160},[52,10455,4935],{"class":58},[52,10457,4938],{"class":622},[52,10459,10460],{"class":54,"line":229},[52,10461,4524],{"class":622},[52,10463,10464],{"class":54,"line":241},[52,10465,10466],{"class":332},"    \u002F\u002F 1.创建数组\n",[52,10468,10469,10471,10473,10475,10477,10479,10481,10483,10485,10487,10489,10491,10493,10495,10497,10499,10501,10503,10505,10507,10509,10511,10513,10515,10517,10519],{"class":54,"line":246},[52,10470,4947],{"class":160},[52,10472,6921],{"class":622},[52,10474,3559],{"class":90},[52,10476,4052],{"class":622},[52,10478,2099],{"class":160},[52,10480,4008],{"class":622},[52,10482,3406],{"class":90},[52,10484,3491],{"class":622},[52,10486,3188],{"class":90},[52,10488,3491],{"class":622},[52,10490,3457],{"class":90},[52,10492,3491],{"class":622},[52,10494,3533],{"class":90},[52,10496,3491],{"class":622},[52,10498,3332],{"class":90},[52,10500,3491],{"class":622},[52,10502,3194],{"class":90},[52,10504,3491],{"class":622},[52,10506,3559],{"class":90},[52,10508,3491],{"class":622},[52,10510,3508],{"class":90},[52,10512,3491],{"class":622},[52,10514,3482],{"class":90},[52,10516,3491],{"class":622},[52,10518,3432],{"class":90},[52,10520,6954],{"class":622},[52,10522,10523,10525,10527,10529,10531],{"class":54,"line":252},[52,10524,4947],{"class":160},[52,10526,10287],{"class":622},[52,10528,2099],{"class":160},[52,10530,3559],{"class":90},[52,10532,4272],{"class":622},[52,10534,10535,10537,10539,10541,10543],{"class":54,"line":257},[52,10536,4947],{"class":160},[52,10538,9474],{"class":160},[52,10540,274],{"class":622},[52,10542,2099],{"class":160},[52,10544,9994],{"class":622},[52,10546,10547],{"class":54,"line":266},[52,10548,10549],{"class":332},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[52,10551,10552,10555],{"class":54,"line":4722},[52,10553,10554],{"class":58},"    bubbleSort",[52,10556,10557],{"class":622},"(p,len);\n",[52,10559,10560],{"class":54,"line":4727},[52,10561,116],{"emptyLinePlaceholder":115},[52,10563,10564],{"class":54,"line":4741},[52,10565,10566],{"class":332},"    \u002F\u002F 3.打印排序后的数组\n",[52,10568,10569,10571,10573,10575,10577,10579,10581,10583,10585,10588,10590],{"class":54,"line":4746},[52,10570,6160],{"class":160},[52,10572,4629],{"class":622},[52,10574,3124],{"class":160},[52,10576,5992],{"class":622},[52,10578,2099],{"class":160},[52,10580,3306],{"class":90},[52,10582,6173],{"class":622},[52,10584,4022],{"class":160},[52,10586,10587],{"class":622},"len; i",[52,10589,5254],{"class":160},[52,10591,170],{"class":622},[52,10593,10594],{"class":54,"line":5538},[52,10595,4992],{"class":622},[52,10597,10598,10600,10602,10604,10606,10609],{"class":54,"line":5552},[52,10599,6410],{"class":622},[52,10601,9375],{"class":160},[52,10603,274],{"class":622},[52,10605,4155],{"class":160},[52,10607,10608],{"class":62},"\"\"",[52,10610,4272],{"class":622},[52,10612,10613,10616,10618],{"class":54,"line":5560},[52,10614,10615],{"class":622},"        p",[52,10617,5254],{"class":160},[52,10619,4272],{"class":622},[52,10621,10622],{"class":54,"line":5565},[52,10623,5149],{"class":622},[52,10625,10626],{"class":54,"line":5571},[52,10627,4543],{"class":622},[3015,10629,10630],{},"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":28,"searchDepth":69,"depth":69,"links":10632},[10633,10634,10635,10636,10637,10638,10639,10640],{"id":9239,"depth":69,"text":9240},{"id":9405,"depth":69,"text":9406},{"id":9561,"depth":69,"text":9562},{"id":9639,"depth":69,"text":9640},{"id":9718,"depth":69,"text":9719},{"id":9817,"depth":69,"text":9818},{"id":10056,"depth":69,"text":10057},{"id":10234,"depth":69,"text":10235},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":9228,"description":9236},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":10647,"title":10648,"body":10649,"description":10656,"extension":3047,"meta":13630,"navigation":115,"path":13631,"seo":13632,"stem":13633,"__hash__":13634},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":10650,"toc":13621},[10651,10654,10657,10661,10664,10667,10678,11016,11019,11023,11026,11033,11288,11292,11295,11298,11453,11457,11460,11463,11669,11673,11676,11979,11982,11990,11994,11997,12148,12150,12161,12218,12222,12227,12884,12892,12895,12989,12992,13612,13618],[10,10652,10648],{"id":10653},"_4结构体",[274,10655,10656],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,10658,10660],{"id":10659},"_41结构体定义与使用","4.1结构体定义与使用",[274,10662,10663],{},"语法：struct 结构体名 {结构体成员列表}；",[274,10665,10666],{},"通过结构体创建变量的方式：",[4118,10668,10669,10672,10675],{},[1073,10670,10671],{},"struct 结构体名 变量名",[1073,10673,10674],{},"struct 结构体名 变量名={成员1值，成员2值...}",[1073,10676,10677],{},"定义结构体时顺便创建变量",[19,10679,10681],{"className":3109,"code":10680,"language":3111,"meta":28,"style":28},"#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",[26,10682,10683,10689,10699,10706,10711,10719,10723,10728,10732,10737,10742,10747,10754,10759,10766,10770,10777,10781,10785,10789,10793,10797,10801,10807,10811,10817,10825,10833,10837,10842,10847,10858,10863,10875,10886,10897,10902,10926,10931,10937,10964,10969,10975,10987,10999,11011],{"__ignoreMap":28},[52,10684,10685,10687],{"class":54,"line":55},[52,10686,4912],{"class":160},[52,10688,4915],{"class":62},[52,10690,10691,10693,10695,10697],{"class":54,"line":69},[52,10692,4920],{"class":160},[52,10694,4923],{"class":160},[52,10696,4926],{"class":58},[52,10698,4272],{"class":622},[52,10700,10701,10703],{"class":54,"line":82},[52,10702,4912],{"class":160},[52,10704,10705],{"class":62},"\u003Cstring>\n",[52,10707,10708],{"class":54,"line":97},[52,10709,10710],{"class":332},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[52,10712,10713,10716],{"class":54,"line":112},[52,10714,10715],{"class":160},"struct",[52,10717,10718],{"class":58}," Student\n",[52,10720,10721],{"class":54,"line":119},[52,10722,4524],{"class":622},[52,10724,10725],{"class":54,"line":130},[52,10726,10727],{"class":332},"    \u002F\u002F成员列表\n",[52,10729,10730],{"class":54,"line":136},[52,10731,116],{"emptyLinePlaceholder":115},[52,10733,10734],{"class":54,"line":141},[52,10735,10736],{"class":332},"    \u002F\u002F姓名\n",[52,10738,10739],{"class":54,"line":146},[52,10740,10741],{"class":622},"    string name;\n",[52,10743,10744],{"class":54,"line":152},[52,10745,10746],{"class":332},"    \u002F\u002F年龄\n",[52,10748,10749,10751],{"class":54,"line":157},[52,10750,4947],{"class":160},[52,10752,10753],{"class":622}," age;\n",[52,10755,10756],{"class":54,"line":173},[52,10757,10758],{"class":332},"    \u002F\u002F分数\n",[52,10760,10761,10763],{"class":54,"line":178},[52,10762,4947],{"class":160},[52,10764,10765],{"class":622}," score;\n",[52,10767,10768],{"class":54,"line":184},[52,10769,6954],{"class":622},[52,10771,10772,10774],{"class":54,"line":189},[52,10773,10715],{"class":160},[52,10775,10776],{"class":58}," School\n",[52,10778,10779],{"class":54,"line":201},[52,10780,4524],{"class":622},[52,10782,10783],{"class":54,"line":206},[52,10784,10727],{"class":332},[52,10786,10787],{"class":54,"line":224},[52,10788,116],{"emptyLinePlaceholder":115},[52,10790,10791],{"class":54,"line":229},[52,10792,10736],{"class":332},[52,10794,10795],{"class":54,"line":241},[52,10796,10741],{"class":622},[52,10798,10799],{"class":54,"line":246},[52,10800,10746],{"class":332},[52,10802,10803,10805],{"class":54,"line":252},[52,10804,4947],{"class":160},[52,10806,10753],{"class":622},[52,10808,10809],{"class":54,"line":257},[52,10810,10758],{"class":332},[52,10812,10813,10815],{"class":54,"line":266},[52,10814,4947],{"class":160},[52,10816,10765],{"class":622},[52,10818,10819,10822],{"class":54,"line":4722},[52,10820,10821],{"class":622},"} s3;",[52,10823,10824],{"class":332}," \u002F\u002F创建结构体时就创建了变量\n",[52,10826,10827,10829,10831],{"class":54,"line":4727},[52,10828,3124],{"class":160},[52,10830,4935],{"class":58},[52,10832,4938],{"class":622},[52,10834,10835],{"class":54,"line":4741},[52,10836,4524],{"class":622},[52,10838,10839],{"class":54,"line":4746},[52,10840,10841],{"class":332},"    \u002F\u002F2.通过学生类型创建具体学生\n",[52,10843,10844],{"class":54,"line":5538},[52,10845,10846],{"class":332},"    \u002F\u002F2.1 struct Student s1;\n",[52,10848,10849,10852,10855],{"class":54,"line":5552},[52,10850,10851],{"class":160},"    struct",[52,10853,10854],{"class":58}," Student",[52,10856,10857],{"class":622}," s1;\n",[52,10859,10860],{"class":54,"line":5560},[52,10861,10862],{"class":332},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[52,10864,10865,10868,10870,10873],{"class":54,"line":5565},[52,10866,10867],{"class":622},"    s1.name",[52,10869,2099],{"class":160},[52,10871,10872],{"class":62},"\"张三\"",[52,10874,4272],{"class":622},[52,10876,10877,10880,10882,10884],{"class":54,"line":5571},[52,10878,10879],{"class":622},"    s1.age",[52,10881,2099],{"class":160},[52,10883,3762],{"class":90},[52,10885,4272],{"class":622},[52,10887,10888,10891,10893,10895],{"class":54,"line":5577},[52,10889,10890],{"class":622},"    s1.score",[52,10892,2099],{"class":160},[52,10894,3367],{"class":90},[52,10896,4272],{"class":622},[52,10898,10899],{"class":54,"line":5582},[52,10900,10901],{"class":332},"    \u002F\u002F输出结果\n",[52,10903,10905,10907,10909,10912,10914,10917,10919,10922,10924],{"class":54,"line":10904},37,[52,10906,4529],{"class":622},[52,10908,4155],{"class":160},[52,10910,10911],{"class":622},"s1.name",[52,10913,4155],{"class":160},[52,10915,10916],{"class":622},"s1.age",[52,10918,4155],{"class":160},[52,10920,10921],{"class":622},"s1.score",[52,10923,4155],{"class":160},[52,10925,4177],{"class":622},[52,10927,10929],{"class":54,"line":10928},38,[52,10930,116],{"emptyLinePlaceholder":115},[52,10932,10934],{"class":54,"line":10933},39,[52,10935,10936],{"class":332},"    \u002F\u002F2.2 struct Student s2={...}\n",[52,10938,10940,10942,10944,10947,10949,10951,10954,10956,10958,10960,10962],{"class":54,"line":10939},40,[52,10941,10851],{"class":160},[52,10943,10854],{"class":58},[52,10945,10946],{"class":622}," s2",[52,10948,2099],{"class":160},[52,10950,4008],{"class":622},[52,10952,10953],{"class":62},"\"王五\"",[52,10955,3491],{"class":622},[52,10957,3762],{"class":90},[52,10959,3491],{"class":622},[52,10961,3367],{"class":90},[52,10963,6954],{"class":622},[52,10965,10967],{"class":54,"line":10966},41,[52,10968,116],{"emptyLinePlaceholder":115},[52,10970,10972],{"class":54,"line":10971},42,[52,10973,10974],{"class":332},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[52,10976,10978,10981,10983,10985],{"class":54,"line":10977},43,[52,10979,10980],{"class":622},"    s3.name",[52,10982,2099],{"class":160},[52,10984,6637],{"class":62},[52,10986,4272],{"class":622},[52,10988,10990,10993,10995,10997],{"class":54,"line":10989},44,[52,10991,10992],{"class":622},"    s3.age",[52,10994,2099],{"class":160},[52,10996,3762],{"class":90},[52,10998,4272],{"class":622},[52,11000,11002,11005,11007,11009],{"class":54,"line":11001},45,[52,11003,11004],{"class":622},"    s3.score",[52,11006,2099],{"class":160},[52,11008,3812],{"class":90},[52,11010,4272],{"class":622},[52,11012,11014],{"class":54,"line":11013},46,[52,11015,4543],{"class":622},[274,11017,11018],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,11020,11022],{"id":11021},"_42结构体数组","4.2结构体数组",[274,11024,11025],{},"将自定义的结构体放入到数组中方便维护",[274,11027,11028,11029,11032],{},"语法：struct 结构体名 数组名",[52,11030,11031],{},"元素个数","={ {}，{},...{} };",[19,11034,11036],{"className":3109,"code":11035,"language":3111,"meta":28,"style":28},"#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",[26,11037,11038,11044,11054,11060,11065,11071,11075,11079,11085,11091,11095,11099,11107,11111,11116,11131,11135,11151,11167,11171,11176,11192,11207,11222,11227,11253,11257,11280,11284],{"__ignoreMap":28},[52,11039,11040,11042],{"class":54,"line":55},[52,11041,4912],{"class":160},[52,11043,4915],{"class":62},[52,11045,11046,11048,11050,11052],{"class":54,"line":69},[52,11047,4920],{"class":160},[52,11049,4923],{"class":160},[52,11051,4926],{"class":58},[52,11053,4272],{"class":622},[52,11055,11056,11058],{"class":54,"line":82},[52,11057,4912],{"class":160},[52,11059,10705],{"class":62},[52,11061,11062],{"class":54,"line":97},[52,11063,11064],{"class":332},"\u002F\u002F1.定义结构体\n",[52,11066,11067,11069],{"class":54,"line":112},[52,11068,10715],{"class":160},[52,11070,10718],{"class":58},[52,11072,11073],{"class":54,"line":119},[52,11074,4524],{"class":622},[52,11076,11077],{"class":54,"line":130},[52,11078,10741],{"class":622},[52,11080,11081,11083],{"class":54,"line":136},[52,11082,4947],{"class":160},[52,11084,10753],{"class":622},[52,11086,11087,11089],{"class":54,"line":141},[52,11088,4947],{"class":160},[52,11090,10765],{"class":622},[52,11092,11093],{"class":54,"line":146},[52,11094,116],{"emptyLinePlaceholder":115},[52,11096,11097],{"class":54,"line":152},[52,11098,6954],{"class":622},[52,11100,11101,11103,11105],{"class":54,"line":157},[52,11102,3124],{"class":160},[52,11104,4935],{"class":58},[52,11106,4938],{"class":622},[52,11108,11109],{"class":54,"line":173},[52,11110,4524],{"class":622},[52,11112,11113],{"class":54,"line":178},[52,11114,11115],{"class":332},"    \u002F\u002F2.创建结构体数组\n",[52,11117,11118,11120,11122,11125,11127,11129],{"class":54,"line":184},[52,11119,10851],{"class":160},[52,11121,10854],{"class":58},[52,11123,11124],{"class":622}," stuArray[",[52,11126,3194],{"class":90},[52,11128,4052],{"class":622},[52,11130,7867],{"class":160},[52,11132,11133],{"class":54,"line":189},[52,11134,4992],{"class":622},[52,11136,11137,11139,11141,11143,11145,11147,11149],{"class":54,"line":201},[52,11138,7876],{"class":622},[52,11140,10872],{"class":62},[52,11142,3491],{"class":622},[52,11144,3762],{"class":90},[52,11146,3491],{"class":622},[52,11148,3424],{"class":90},[52,11150,7889],{"class":622},[52,11152,11153,11155,11157,11159,11161,11163,11165],{"class":54,"line":206},[52,11154,7876],{"class":622},[52,11156,6637],{"class":62},[52,11158,3491],{"class":622},[52,11160,3687],{"class":90},[52,11162,3491],{"class":622},[52,11164,3687],{"class":90},[52,11166,4543],{"class":622},[52,11168,11169],{"class":54,"line":224},[52,11170,5149],{"class":622},[52,11172,11173],{"class":54,"line":229},[52,11174,11175],{"class":332},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[52,11177,11178,11181,11183,11186,11188,11190],{"class":54,"line":241},[52,11179,11180],{"class":622},"    stuArray[",[52,11182,3332],{"class":90},[52,11184,11185],{"class":622},"].name",[52,11187,2099],{"class":160},[52,11189,6660],{"class":62},[52,11191,4272],{"class":622},[52,11193,11194,11196,11198,11201,11203,11205],{"class":54,"line":246},[52,11195,11180],{"class":622},[52,11197,3332],{"class":90},[52,11199,11200],{"class":622},"].age",[52,11202,2099],{"class":160},[52,11204,3194],{"class":90},[52,11206,4272],{"class":622},[52,11208,11209,11211,11213,11216,11218,11220],{"class":54,"line":252},[52,11210,11180],{"class":622},[52,11212,3332],{"class":90},[52,11214,11215],{"class":622},"].score",[52,11217,2099],{"class":160},[52,11219,3194],{"class":90},[52,11221,4272],{"class":622},[52,11223,11224],{"class":54,"line":257},[52,11225,11226],{"class":332},"    \u002F\u002F4.遍历结构体数组\n",[52,11228,11229,11231,11233,11235,11237,11239,11241,11243,11245,11247,11249,11251],{"class":54,"line":266},[52,11230,6160],{"class":160},[52,11232,4629],{"class":622},[52,11234,3124],{"class":160},[52,11236,5992],{"class":622},[52,11238,2099],{"class":160},[52,11240,3306],{"class":90},[52,11242,5999],{"class":622},[52,11244,4022],{"class":160},[52,11246,3194],{"class":90},[52,11248,5999],{"class":622},[52,11250,5254],{"class":160},[52,11252,170],{"class":622},[52,11254,11255],{"class":54,"line":4722},[52,11256,4992],{"class":622},[52,11258,11259,11261,11263,11266,11268,11271,11273,11276,11278],{"class":54,"line":4727},[52,11260,6410],{"class":622},[52,11262,4155],{"class":160},[52,11264,11265],{"class":622},"stuArray[i].name",[52,11267,4155],{"class":160},[52,11269,11270],{"class":622},"stuArray[i].age",[52,11272,4155],{"class":160},[52,11274,11275],{"class":622},"stuArray[i].score",[52,11277,4155],{"class":160},[52,11279,4177],{"class":622},[52,11281,11282],{"class":54,"line":4741},[52,11283,5149],{"class":622},[52,11285,11286],{"class":54,"line":4746},[52,11287,4543],{"class":622},[14,11289,11291],{"id":11290},"_43结构体指针","4.3结构体指针",[274,11293,11294],{},"作用：通过指针访问结构体中的成员",[274,11296,11297],{},"利用操作符->可以通过结构体指针访问结构体属性",[19,11299,11301],{"className":3109,"code":11300,"language":3111,"meta":28,"style":28},"#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",[26,11302,11303,11309,11319,11325,11329,11335,11339,11343,11349,11355,11359,11367,11371,11376,11401,11406,11421,11426,11449],{"__ignoreMap":28},[52,11304,11305,11307],{"class":54,"line":55},[52,11306,4912],{"class":160},[52,11308,4915],{"class":62},[52,11310,11311,11313,11315,11317],{"class":54,"line":69},[52,11312,4920],{"class":160},[52,11314,4923],{"class":160},[52,11316,4926],{"class":58},[52,11318,4272],{"class":622},[52,11320,11321,11323],{"class":54,"line":82},[52,11322,4912],{"class":160},[52,11324,10705],{"class":62},[52,11326,11327],{"class":54,"line":97},[52,11328,11064],{"class":332},[52,11330,11331,11333],{"class":54,"line":112},[52,11332,10715],{"class":160},[52,11334,10718],{"class":58},[52,11336,11337],{"class":54,"line":119},[52,11338,4524],{"class":622},[52,11340,11341],{"class":54,"line":130},[52,11342,10741],{"class":622},[52,11344,11345,11347],{"class":54,"line":136},[52,11346,4947],{"class":160},[52,11348,10753],{"class":622},[52,11350,11351,11353],{"class":54,"line":141},[52,11352,4947],{"class":160},[52,11354,10765],{"class":622},[52,11356,11357],{"class":54,"line":146},[52,11358,6954],{"class":622},[52,11360,11361,11363,11365],{"class":54,"line":152},[52,11362,3124],{"class":160},[52,11364,4935],{"class":58},[52,11366,4938],{"class":622},[52,11368,11369],{"class":54,"line":157},[52,11370,4524],{"class":622},[52,11372,11373],{"class":54,"line":173},[52,11374,11375],{"class":332},"    \u002F\u002F创建学生结构体变量\n",[52,11377,11378,11380,11382,11385,11387,11389,11391,11393,11395,11397,11399],{"class":54,"line":178},[52,11379,10851],{"class":160},[52,11381,10854],{"class":58},[52,11383,11384],{"class":622}," s",[52,11386,2099],{"class":160},[52,11388,4008],{"class":622},[52,11390,10872],{"class":62},[52,11392,3491],{"class":622},[52,11394,3762],{"class":90},[52,11396,3491],{"class":622},[52,11398,4689],{"class":90},[52,11400,6954],{"class":622},[52,11402,11403],{"class":54,"line":184},[52,11404,11405],{"class":332},"    \u002F\u002F通过指针指向结构体变量\n",[52,11407,11408,11410,11412,11414,11416,11418],{"class":54,"line":189},[52,11409,10851],{"class":160},[52,11411,10854],{"class":58},[52,11413,9474],{"class":160},[52,11415,274],{"class":622},[52,11417,9295],{"class":160},[52,11419,11420],{"class":622},"s\n",[52,11422,11423],{"class":54,"line":201},[52,11424,11425],{"class":332},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[52,11427,11428,11430,11432,11435,11437,11440,11442,11445,11447],{"class":54,"line":206},[52,11429,4529],{"class":622},[52,11431,4155],{"class":160},[52,11433,11434],{"class":622},"p->name",[52,11436,4155],{"class":160},[52,11438,11439],{"class":622},"p->age",[52,11441,4155],{"class":160},[52,11443,11444],{"class":622},"p->score",[52,11446,4155],{"class":160},[52,11448,4177],{"class":622},[52,11450,11451],{"class":54,"line":224},[52,11452,4543],{"class":622},[14,11454,11456],{"id":11455},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[274,11458,11459],{},"作用：结构体中的成员可以是另一个结构体",[274,11461,11462],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[19,11464,11466],{"className":3109,"code":11465,"language":3111,"meta":28,"style":28},"#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",[26,11467,11468,11474,11484,11490,11495,11503,11507,11511,11517,11523,11527,11532,11539,11543,11550,11554,11560,11565,11569,11577,11581,11586,11591,11596,11607,11619,11630,11643,11654,11665],{"__ignoreMap":28},[52,11469,11470,11472],{"class":54,"line":55},[52,11471,4912],{"class":160},[52,11473,4915],{"class":62},[52,11475,11476,11478,11480,11482],{"class":54,"line":69},[52,11477,4920],{"class":160},[52,11479,4923],{"class":160},[52,11481,4926],{"class":58},[52,11483,4272],{"class":622},[52,11485,11486,11488],{"class":54,"line":82},[52,11487,4912],{"class":160},[52,11489,10705],{"class":62},[52,11491,11492],{"class":54,"line":97},[52,11493,11494],{"class":332},"\u002F\u002F定义学生结构体\n",[52,11496,11497,11499,11501],{"class":54,"line":112},[52,11498,10715],{"class":160},[52,11500,10854],{"class":58},[52,11502,623],{"class":622},[52,11504,11505],{"class":54,"line":119},[52,11506,4524],{"class":622},[52,11508,11509],{"class":54,"line":130},[52,11510,10741],{"class":622},[52,11512,11513,11515],{"class":54,"line":136},[52,11514,4947],{"class":160},[52,11516,10753],{"class":622},[52,11518,11519,11521],{"class":54,"line":141},[52,11520,4947],{"class":160},[52,11522,10765],{"class":622},[52,11524,11525],{"class":54,"line":146},[52,11526,4543],{"class":622},[52,11528,11529],{"class":54,"line":152},[52,11530,11531],{"class":332},"\u002F\u002F定义老师结构体\n",[52,11533,11534,11536],{"class":54,"line":157},[52,11535,10715],{"class":160},[52,11537,11538],{"class":58}," Teacher\n",[52,11540,11541],{"class":54,"line":173},[52,11542,4524],{"class":622},[52,11544,11545,11547],{"class":54,"line":178},[52,11546,4947],{"class":160},[52,11548,11549],{"class":622}," id;\n",[52,11551,11552],{"class":54,"line":184},[52,11553,10741],{"class":622},[52,11555,11556,11558],{"class":54,"line":189},[52,11557,4947],{"class":160},[52,11559,10753],{"class":622},[52,11561,11562],{"class":54,"line":201},[52,11563,11564],{"class":622},"    Student stu;\n",[52,11566,11567],{"class":54,"line":206},[52,11568,4543],{"class":622},[52,11570,11571,11573,11575],{"class":54,"line":224},[52,11572,3124],{"class":160},[52,11574,4935],{"class":58},[52,11576,8934],{"class":622},[52,11578,11579],{"class":54,"line":229},[52,11580,4524],{"class":622},[52,11582,11583],{"class":54,"line":241},[52,11584,11585],{"class":332},"    \u002F\u002F结构体嵌套结构体\n",[52,11587,11588],{"class":54,"line":246},[52,11589,11590],{"class":332},"    \u002F\u002F创建老师\n",[52,11592,11593],{"class":54,"line":252},[52,11594,11595],{"class":622},"    Teacher t;\n",[52,11597,11598,11601,11603,11605],{"class":54,"line":257},[52,11599,11600],{"class":622},"    t.id",[52,11602,2099],{"class":160},[52,11604,3424],{"class":90},[52,11606,4272],{"class":622},[52,11608,11609,11612,11614,11617],{"class":54,"line":266},[52,11610,11611],{"class":622},"    t.name",[52,11613,2099],{"class":160},[52,11615,11616],{"class":62},"\"老王\"",[52,11618,4272],{"class":622},[52,11620,11621,11624,11626,11628],{"class":54,"line":4722},[52,11622,11623],{"class":622},"    t.age",[52,11625,2099],{"class":160},[52,11627,3762],{"class":90},[52,11629,4272],{"class":622},[52,11631,11632,11635,11637,11640],{"class":54,"line":4727},[52,11633,11634],{"class":622},"    t.stu.name",[52,11636,2099],{"class":160},[52,11638,11639],{"class":62},"\"小王\"",[52,11641,11642],{"class":622},"；\n",[52,11644,11645,11648,11650,11652],{"class":54,"line":4741},[52,11646,11647],{"class":622},"    t.stu.age",[52,11649,2099],{"class":160},[52,11651,3812],{"class":90},[52,11653,4272],{"class":622},[52,11655,11656,11659,11661,11663],{"class":54,"line":4746},[52,11657,11658],{"class":622},"    t.stu.score",[52,11660,2099],{"class":160},[52,11662,3457],{"class":90},[52,11664,4272],{"class":622},[52,11666,11667],{"class":54,"line":5538},[52,11668,4543],{"class":622},[14,11670,11672],{"id":11671},"_45结构体做函数参数","4.5结构体做函数参数",[274,11674,11675],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[19,11677,11679],{"className":3109,"code":11678,"language":3111,"meta":28,"style":28},"#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",[26,11680,11681,11687,11697,11703,11709,11713,11717,11723,11729,11733,11738,11743,11760,11764,11797,11801,11806,11825,11829,11860,11864,11872,11876,11885,11897,11909,11921,11934,11942,11955,11967,11975],{"__ignoreMap":28},[52,11682,11683,11685],{"class":54,"line":55},[52,11684,4912],{"class":160},[52,11686,4915],{"class":62},[52,11688,11689,11691,11693,11695],{"class":54,"line":69},[52,11690,4920],{"class":160},[52,11692,4923],{"class":160},[52,11694,4926],{"class":58},[52,11696,4272],{"class":622},[52,11698,11699,11701],{"class":54,"line":82},[52,11700,4912],{"class":160},[52,11702,10705],{"class":62},[52,11704,11705,11707],{"class":54,"line":97},[52,11706,10715],{"class":160},[52,11708,10718],{"class":58},[52,11710,11711],{"class":54,"line":112},[52,11712,4524],{"class":622},[52,11714,11715],{"class":54,"line":119},[52,11716,10741],{"class":622},[52,11718,11719,11721],{"class":54,"line":130},[52,11720,4947],{"class":160},[52,11722,10753],{"class":622},[52,11724,11725,11727],{"class":54,"line":136},[52,11726,4947],{"class":160},[52,11728,10765],{"class":622},[52,11730,11731],{"class":54,"line":141},[52,11732,6954],{"class":622},[52,11734,11735],{"class":54,"line":146},[52,11736,11737],{"class":332},"\u002F\u002F打印学生信息的函数\n",[52,11739,11740],{"class":54,"line":152},[52,11741,11742],{"class":332},"\u002F\u002F值传递\n",[52,11744,11745,11747,11750,11752,11754,11756,11758],{"class":54,"line":157},[52,11746,8320],{"class":160},[52,11748,11749],{"class":58}," printStudent1",[52,11751,3121],{"class":622},[52,11753,10715],{"class":160},[52,11755,10854],{"class":58},[52,11757,11384],{"class":8172},[52,11759,170],{"class":622},[52,11761,11762],{"class":54,"line":173},[52,11763,4524],{"class":622},[52,11765,11766,11768,11770,11773,11775,11778,11780,11783,11785,11787,11789,11792,11794],{"class":54,"line":178},[52,11767,9485],{"class":622},[52,11769,4155],{"class":160},[52,11771,11772],{"class":622}," s.name ",[52,11774,4155],{"class":160},[52,11776,11777],{"class":62}," \" \"",[52,11779,4423],{"class":160},[52,11781,11782],{"class":622}," s.age ",[52,11784,4155],{"class":160},[52,11786,11777],{"class":62},[52,11788,4423],{"class":160},[52,11790,11791],{"class":622}," s.score ",[52,11793,4155],{"class":160},[52,11795,11796],{"class":622}," endl;\n",[52,11798,11799],{"class":54,"line":184},[52,11800,4543],{"class":622},[52,11802,11803],{"class":54,"line":189},[52,11804,11805],{"class":332},"\u002F\u002F地址传递\n",[52,11807,11808,11810,11813,11815,11817,11819,11821,11823],{"class":54,"line":201},[52,11809,8320],{"class":160},[52,11811,11812],{"class":58}," printStudent2",[52,11814,3121],{"class":622},[52,11816,10715],{"class":160},[52,11818,10854],{"class":58},[52,11820,9474],{"class":160},[52,11822,3807],{"class":8172},[52,11824,170],{"class":622},[52,11826,11827],{"class":54,"line":206},[52,11828,4524],{"class":622},[52,11830,11831,11833,11835,11838,11840,11842,11844,11847,11849,11851,11853,11856,11858],{"class":54,"line":224},[52,11832,9485],{"class":622},[52,11834,4155],{"class":160},[52,11836,11837],{"class":622}," s->name ",[52,11839,4155],{"class":160},[52,11841,11777],{"class":62},[52,11843,4423],{"class":160},[52,11845,11846],{"class":622}," s->age ",[52,11848,4155],{"class":160},[52,11850,11777],{"class":62},[52,11852,4423],{"class":160},[52,11854,11855],{"class":622}," s->score ",[52,11857,4155],{"class":160},[52,11859,11796],{"class":622},[52,11861,11862],{"class":54,"line":229},[52,11863,4543],{"class":622},[52,11865,11866,11868,11870],{"class":54,"line":241},[52,11867,3124],{"class":160},[52,11869,4935],{"class":58},[52,11871,4938],{"class":622},[52,11873,11874],{"class":54,"line":246},[52,11875,4524],{"class":622},[52,11877,11878,11880,11882],{"class":54,"line":252},[52,11879,10851],{"class":160},[52,11881,10854],{"class":58},[52,11883,11884],{"class":622}," s;\n",[52,11886,11887,11890,11892,11895],{"class":54,"line":257},[52,11888,11889],{"class":622},"    s.name ",[52,11891,2099],{"class":160},[52,11893,11894],{"class":62}," \"张三\"",[52,11896,4272],{"class":622},[52,11898,11899,11902,11904,11907],{"class":54,"line":266},[52,11900,11901],{"class":622},"    s.age ",[52,11903,2099],{"class":160},[52,11905,11906],{"class":90}," 20",[52,11908,4272],{"class":622},[52,11910,11911,11914,11916,11919],{"class":54,"line":4722},[52,11912,11913],{"class":622},"    s.score ",[52,11915,2099],{"class":160},[52,11917,11918],{"class":90}," 85",[52,11920,4272],{"class":622},[52,11922,11923,11925,11927,11930,11932],{"class":54,"line":4727},[52,11924,4529],{"class":622},[52,11926,4155],{"class":160},[52,11928,11929],{"class":62},"\"值传递:\"",[52,11931,4155],{"class":160},[52,11933,4177],{"class":622},[52,11935,11936,11939],{"class":54,"line":4741},[52,11937,11938],{"class":58},"    printStudent1",[52,11940,11941],{"class":622},"(s);\n",[52,11943,11944,11946,11948,11951,11953],{"class":54,"line":4746},[52,11945,4529],{"class":622},[52,11947,4155],{"class":160},[52,11949,11950],{"class":62},"\"地址传递:\"",[52,11952,4155],{"class":160},[52,11954,4177],{"class":622},[52,11956,11957,11960,11962,11964],{"class":54,"line":5538},[52,11958,11959],{"class":58},"    printStudent2",[52,11961,3121],{"class":622},[52,11963,3466],{"class":160},[52,11965,11966],{"class":622},"s); \n",[52,11968,11969,11971,11973],{"class":54,"line":5552},[52,11970,7049],{"class":160},[52,11972,7052],{"class":90},[52,11974,4272],{"class":622},[52,11976,11977],{"class":54,"line":5560},[52,11978,4543],{"class":622},[274,11980,11981],{},"注意：",[4118,11983,11984,11987],{},[1073,11985,11986],{},"1.先定义结构体，不要在函数中写结构体的定义",[1073,11988,11989],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11991,11993],{"id":11992},"_46结构体中const使用场景","4.6结构体中const使用场景",[274,11995,11996],{},"用const防止误操作",[19,11998,12000],{"className":3109,"code":11999,"language":3111,"meta":28,"style":28},"#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",[26,12001,12002,12008,12018,12024,12029,12033,12037,12043,12049,12053,12069,12073,12096,12100,12108,12112,12133,12140,12144],{"__ignoreMap":28},[52,12003,12004,12006],{"class":54,"line":55},[52,12005,4912],{"class":160},[52,12007,4915],{"class":62},[52,12009,12010,12012,12014,12016],{"class":54,"line":69},[52,12011,4920],{"class":160},[52,12013,4923],{"class":160},[52,12015,4926],{"class":58},[52,12017,4272],{"class":622},[52,12019,12020,12022],{"class":54,"line":82},[52,12021,4912],{"class":160},[52,12023,10705],{"class":62},[52,12025,12026],{"class":54,"line":97},[52,12027,12028],{"class":622},"sctuct Student\n",[52,12030,12031],{"class":54,"line":112},[52,12032,4524],{"class":622},[52,12034,12035],{"class":54,"line":119},[52,12036,10741],{"class":622},[52,12038,12039,12041],{"class":54,"line":130},[52,12040,4947],{"class":160},[52,12042,10753],{"class":622},[52,12044,12045,12047],{"class":54,"line":136},[52,12046,4947],{"class":160},[52,12048,10765],{"class":622},[52,12050,12051],{"class":54,"line":141},[52,12052,6954],{"class":622},[52,12054,12055,12057,12060,12062,12065,12067],{"class":54,"line":146},[52,12056,8320],{"class":160},[52,12058,12059],{"class":58}," printStudents",[52,12061,3121],{"class":622},[52,12063,12064],{"class":58},"student",[52,12066,11384],{"class":8172},[52,12068,170],{"class":622},[52,12070,12071],{"class":54,"line":152},[52,12072,4524],{"class":622},[52,12074,12075,12077,12079,12082,12084,12087,12089,12092,12094],{"class":54,"line":157},[52,12076,4529],{"class":622},[52,12078,4155],{"class":160},[52,12080,12081],{"class":622},"s.name",[52,12083,4155],{"class":160},[52,12085,12086],{"class":622},"s.age",[52,12088,4155],{"class":160},[52,12090,12091],{"class":622},"s.score",[52,12093,4155],{"class":160},[52,12095,4177],{"class":622},[52,12097,12098],{"class":54,"line":173},[52,12099,4543],{"class":622},[52,12101,12102,12104,12106],{"class":54,"line":178},[52,12103,3124],{"class":160},[52,12105,4935],{"class":58},[52,12107,8934],{"class":622},[52,12109,12110],{"class":54,"line":184},[52,12111,4524],{"class":622},[52,12113,12114,12117,12119,12121,12123,12125,12127,12129,12131],{"class":54,"line":189},[52,12115,12116],{"class":622},"    Student s",[52,12118,2099],{"class":160},[52,12120,4008],{"class":622},[52,12122,10872],{"class":62},[52,12124,3491],{"class":622},[52,12126,3762],{"class":90},[52,12128,3491],{"class":622},[52,12130,3762],{"class":90},[52,12132,6954],{"class":622},[52,12134,12135,12138],{"class":54,"line":201},[52,12136,12137],{"class":58},"    printStudent",[52,12139,11941],{"class":622},[52,12141,12142],{"class":54,"line":206},[52,12143,116],{"emptyLinePlaceholder":115},[52,12145,12146],{"class":54,"line":224},[52,12147,4543],{"class":622},[274,12149,11981],{},[4118,12151,12152,12155,12158],{},[1073,12153,12154],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[1073,12156,12157],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[1073,12159,12160],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[19,12162,12164],{"className":3109,"code":12163,"language":3111,"meta":28,"style":28},"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",[26,12165,12166,12185,12189,12194,12214],{"__ignoreMap":28},[52,12167,12168,12170,12172,12174,12176,12179,12181,12183],{"class":54,"line":55},[52,12169,8320],{"class":160},[52,12171,12059],{"class":58},[52,12173,3121],{"class":622},[52,12175,9748],{"class":160},[52,12177,12178],{"class":58}," student",[52,12180,9474],{"class":160},[52,12182,3807],{"class":8172},[52,12184,170],{"class":622},[52,12186,12187],{"class":54,"line":69},[52,12188,4524],{"class":622},[52,12190,12191],{"class":54,"line":82},[52,12192,12193],{"class":332},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[52,12195,12196,12198,12200,12202,12204,12206,12208,12210,12212],{"class":54,"line":97},[52,12197,4529],{"class":622},[52,12199,4155],{"class":160},[52,12201,12081],{"class":622},[52,12203,4155],{"class":160},[52,12205,12086],{"class":622},[52,12207,4155],{"class":160},[52,12209,12091],{"class":622},[52,12211,4155],{"class":160},[52,12213,4177],{"class":622},[52,12215,12216],{"class":54,"line":112},[52,12217,4543],{"class":622},[14,12219,12221],{"id":12220},"_47案例","4.7案例",[1070,12223,12224],{},[1073,12225,12226],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[19,12228,12230],{"className":3109,"code":12229,"language":3111,"meta":28,"style":28},"#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",[26,12231,12232,12238,12248,12254,12261,12265,12271,12275,12280,12286,12292,12296,12300,12306,12310,12315,12320,12333,12337,12342,12368,12372,12384,12411,12415,12427,12437,12441,12446,12475,12479,12491,12500,12527,12538,12548,12552,12556,12560,12565,12589,12593,12617,12621,12640,12666,12670,12695,12718,12742,12747,12752,12757,12766,12771,12777,12798,12804,12818,12824,12851,12860,12866,12874,12879],{"__ignoreMap":28},[52,12233,12234,12236],{"class":54,"line":55},[52,12235,4912],{"class":160},[52,12237,4915],{"class":62},[52,12239,12240,12242,12244,12246],{"class":54,"line":69},[52,12241,4920],{"class":160},[52,12243,4923],{"class":160},[52,12245,4926],{"class":58},[52,12247,4272],{"class":622},[52,12249,12250,12252],{"class":54,"line":82},[52,12251,4912],{"class":160},[52,12253,10705],{"class":62},[52,12255,12256,12258],{"class":54,"line":97},[52,12257,4912],{"class":160},[52,12259,12260],{"class":62},"\u003Cctime>\n",[52,12262,12263],{"class":54,"line":112},[52,12264,11494],{"class":332},[52,12266,12267,12269],{"class":54,"line":119},[52,12268,10715],{"class":160},[52,12270,10718],{"class":58},[52,12272,12273],{"class":54,"line":130},[52,12274,4524],{"class":622},[52,12276,12277],{"class":54,"line":136},[52,12278,12279],{"class":622},"    string sName;\n",[52,12281,12282,12284],{"class":54,"line":141},[52,12283,4947],{"class":160},[52,12285,10753],{"class":622},[52,12287,12288,12290],{"class":54,"line":146},[52,12289,4947],{"class":160},[52,12291,10765],{"class":622},[52,12293,12294],{"class":54,"line":152},[52,12295,6954],{"class":622},[52,12297,12298],{"class":54,"line":157},[52,12299,11531],{"class":332},[52,12301,12302,12304],{"class":54,"line":173},[52,12303,10715],{"class":160},[52,12305,11538],{"class":58},[52,12307,12308],{"class":54,"line":178},[52,12309,4524],{"class":622},[52,12311,12312],{"class":54,"line":184},[52,12313,12314],{"class":622},"    string tName;\n",[52,12316,12317],{"class":54,"line":189},[52,12318,12319],{"class":332},"    \u002F\u002F学生数组\n",[52,12321,12322,12324,12326,12329,12331],{"class":54,"line":201},[52,12323,10851],{"class":160},[52,12325,10854],{"class":58},[52,12327,12328],{"class":622}," sArray[",[52,12330,3432],{"class":90},[52,12332,7649],{"class":622},[52,12334,12335],{"class":54,"line":206},[52,12336,6954],{"class":622},[52,12338,12339],{"class":54,"line":224},[52,12340,12341],{"class":332},"\u002F\u002F给老师和学生赋值的函数\n",[52,12343,12344,12346,12349,12351,12353,12356,12359,12362,12364,12366],{"class":54,"line":229},[52,12345,8320],{"class":160},[52,12347,12348],{"class":58}," allocateSpace",[52,12350,3121],{"class":622},[52,12352,10715],{"class":160},[52,12354,12355],{"class":58}," Teacher",[52,12357,12358],{"class":8172}," tArray",[52,12360,12361],{"class":622},"[],",[52,12363,3124],{"class":160},[52,12365,10287],{"class":8172},[52,12367,170],{"class":622},[52,12369,12370],{"class":54,"line":241},[52,12371,4524],{"class":622},[52,12373,12374,12377,12379,12382],{"class":54,"line":246},[52,12375,12376],{"class":622},"    string nameSeed",[52,12378,2099],{"class":160},[52,12380,12381],{"class":62},"\"ABCDE\"",[52,12383,4272],{"class":622},[52,12385,12386,12388,12390,12392,12395,12397,12399,12402,12404,12407,12409],{"class":54,"line":252},[52,12387,6160],{"class":160},[52,12389,4629],{"class":622},[52,12391,3124],{"class":160},[52,12393,12394],{"class":622}," i ",[52,12396,2099],{"class":160},[52,12398,7052],{"class":90},[52,12400,12401],{"class":622},"; i ",[52,12403,4022],{"class":160},[52,12405,12406],{"class":622}," len; i",[52,12408,5254],{"class":160},[52,12410,170],{"class":622},[52,12412,12413],{"class":54,"line":257},[52,12414,4992],{"class":622},[52,12416,12417,12420,12422,12425],{"class":54,"line":266},[52,12418,12419],{"class":622},"        tArray[i].tName ",[52,12421,2099],{"class":160},[52,12423,12424],{"class":62}," \"Teacher_\"",[52,12426,4272],{"class":622},[52,12428,12429,12431,12434],{"class":54,"line":4722},[52,12430,12419],{"class":622},[52,12432,12433],{"class":160},"+=",[52,12435,12436],{"class":622},"nameSeed[i];\n",[52,12438,12439],{"class":54,"line":4727},[52,12440,116],{"emptyLinePlaceholder":115},[52,12442,12443],{"class":54,"line":4741},[52,12444,12445],{"class":332},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[52,12447,12448,12450,12452,12454,12457,12459,12461,12464,12466,12468,12471,12473],{"class":54,"line":4746},[52,12449,6362],{"class":160},[52,12451,4629],{"class":622},[52,12453,3124],{"class":160},[52,12455,12456],{"class":622}," j ",[52,12458,2099],{"class":160},[52,12460,7052],{"class":90},[52,12462,12463],{"class":622},"; j ",[52,12465,4022],{"class":160},[52,12467,5110],{"class":90},[52,12469,12470],{"class":622},"; j",[52,12472,5254],{"class":160},[52,12474,170],{"class":622},[52,12476,12477],{"class":54,"line":5538},[52,12478,5471],{"class":622},[52,12480,12481,12484,12486,12489],{"class":54,"line":5552},[52,12482,12483],{"class":622},"            tArray[i].sArray[j].sName ",[52,12485,2099],{"class":160},[52,12487,12488],{"class":62}," \"Student_\"",[52,12490,4272],{"class":622},[52,12492,12493,12495,12497],{"class":54,"line":5560},[52,12494,12483],{"class":622},[52,12496,12433],{"class":160},[52,12498,12499],{"class":622}," nameSeed[j];\n",[52,12501,12502,12505,12508,12510,12512,12514,12516,12518,12520,12522,12524],{"class":54,"line":5565},[52,12503,12504],{"class":160},"            int",[52,12506,12507],{"class":622}," random",[52,12509,2099],{"class":160},[52,12511,5385],{"class":58},[52,12513,5388],{"class":622},[52,12515,3441],{"class":160},[52,12517,4019],{"class":90},[52,12519,3593],{"class":160},[52,12521,3514],{"class":90},[52,12523,3173],{"class":622},[52,12525,12526],{"class":332},"\u002F\u002F40~99\n",[52,12528,12529,12532,12534,12536],{"class":54,"line":5571},[52,12530,12531],{"class":622},"            tArray[i].sArray[j].age ",[52,12533,2099],{"class":160},[52,12535,11906],{"class":90},[52,12537,4272],{"class":622},[52,12539,12540,12543,12545],{"class":54,"line":5577},[52,12541,12542],{"class":622},"            tArray[i].sArray[j].score ",[52,12544,2099],{"class":160},[52,12546,12547],{"class":622}," random;\n",[52,12549,12550],{"class":54,"line":5582},[52,12551,5490],{"class":622},[52,12553,12554],{"class":54,"line":10904},[52,12555,5149],{"class":622},[52,12557,12558],{"class":54,"line":10928},[52,12559,4543],{"class":622},[52,12561,12562],{"class":54,"line":10933},[52,12563,12564],{"class":332},"\u002F\u002F打印所有信息的函数\n",[52,12566,12567,12569,12572,12574,12576,12578,12580,12583,12585,12587],{"class":54,"line":10939},[52,12568,8320],{"class":160},[52,12570,12571],{"class":58}," printInfo",[52,12573,3121],{"class":622},[52,12575,10715],{"class":160},[52,12577,12355],{"class":58},[52,12579,12358],{"class":8172},[52,12581,12582],{"class":622},"[], ",[52,12584,3124],{"class":160},[52,12586,10287],{"class":8172},[52,12588,170],{"class":622},[52,12590,12591],{"class":54,"line":10966},[52,12592,4524],{"class":622},[52,12594,12595,12597,12599,12601,12603,12605,12607,12609,12611,12613,12615],{"class":54,"line":10971},[52,12596,6160],{"class":160},[52,12598,4629],{"class":622},[52,12600,3124],{"class":160},[52,12602,12394],{"class":622},[52,12604,2099],{"class":160},[52,12606,7052],{"class":90},[52,12608,12401],{"class":622},[52,12610,4022],{"class":160},[52,12612,12406],{"class":622},[52,12614,5254],{"class":160},[52,12616,170],{"class":622},[52,12618,12619],{"class":54,"line":10977},[52,12620,4992],{"class":622},[52,12622,12623,12626,12628,12631,12633,12636,12638],{"class":54,"line":10989},[52,12624,12625],{"class":622},"        cout ",[52,12627,4155],{"class":160},[52,12629,12630],{"class":62}," \"Teacher: \"",[52,12632,4423],{"class":160},[52,12634,12635],{"class":622}," tArray[i].tName ",[52,12637,4155],{"class":160},[52,12639,11796],{"class":622},[52,12641,12642,12644,12646,12648,12650,12652,12654,12656,12658,12660,12662,12664],{"class":54,"line":11001},[52,12643,6362],{"class":160},[52,12645,4629],{"class":622},[52,12647,3124],{"class":160},[52,12649,12456],{"class":622},[52,12651,2099],{"class":160},[52,12653,7052],{"class":90},[52,12655,12463],{"class":622},[52,12657,4022],{"class":160},[52,12659,5110],{"class":90},[52,12661,12470],{"class":622},[52,12663,5254],{"class":160},[52,12665,170],{"class":622},[52,12667,12668],{"class":54,"line":11013},[52,12669,5471],{"class":622},[52,12671,12673,12676,12678,12681,12683,12686,12688,12691,12693],{"class":54,"line":12672},47,[52,12674,12675],{"class":622},"            cout ",[52,12677,4155],{"class":160},[52,12679,12680],{"class":62}," \"",[52,12682,4212],{"class":90},[52,12684,12685],{"class":62},"Student: \"",[52,12687,4423],{"class":160},[52,12689,12690],{"class":622}," tArray[i].sArray[j].sName",[52,12692,4155],{"class":160},[52,12694,4177],{"class":622},[52,12696,12698,12700,12702,12704,12706,12709,12711,12714,12716],{"class":54,"line":12697},48,[52,12699,12675],{"class":622},[52,12701,4155],{"class":160},[52,12703,12680],{"class":62},[52,12705,4212],{"class":90},[52,12707,12708],{"class":62},"Age: \"",[52,12710,4423],{"class":160},[52,12712,12713],{"class":622}," tArray[i].sArray[j].age ",[52,12715,4155],{"class":160},[52,12717,11796],{"class":622},[52,12719,12721,12723,12725,12727,12729,12732,12734,12737,12739],{"class":54,"line":12720},49,[52,12722,12675],{"class":622},[52,12724,4155],{"class":160},[52,12726,12680],{"class":62},[52,12728,4212],{"class":90},[52,12730,12731],{"class":62},"Score: \"",[52,12733,4423],{"class":160},[52,12735,12736],{"class":622}," tArray[i].sArray[j].score ",[52,12738,4155],{"class":160},[52,12740,12741],{"class":622}," endl;   \n",[52,12743,12745],{"class":54,"line":12744},50,[52,12746,5490],{"class":622},[52,12748,12750],{"class":54,"line":12749},51,[52,12751,5149],{"class":622},[52,12753,12755],{"class":54,"line":12754},52,[52,12756,4543],{"class":622},[52,12758,12760,12762,12764],{"class":54,"line":12759},53,[52,12761,3124],{"class":160},[52,12763,4935],{"class":58},[52,12765,4938],{"class":622},[52,12767,12769],{"class":54,"line":12768},54,[52,12770,4524],{"class":622},[52,12772,12774],{"class":54,"line":12773},55,[52,12775,12776],{"class":332},"    \u002F\u002F随机数种子\n",[52,12778,12780,12782,12784,12786,12788,12790,12792,12794,12796],{"class":54,"line":12779},56,[52,12781,5335],{"class":58},[52,12783,5338],{"class":622},[52,12785,5341],{"class":160},[52,12787,5344],{"class":160},[52,12789,3542],{"class":622},[52,12791,5349],{"class":58},[52,12793,3121],{"class":622},[52,12795,5354],{"class":90},[52,12797,5357],{"class":622},[52,12799,12801],{"class":54,"line":12800},57,[52,12802,12803],{"class":332},"    \u002F\u002F1.创建3名老师的数组\n",[52,12805,12807,12809,12811,12814,12816],{"class":54,"line":12806},58,[52,12808,10851],{"class":160},[52,12810,12355],{"class":58},[52,12812,12813],{"class":622}," tArray[",[52,12815,3188],{"class":90},[52,12817,7649],{"class":622},[52,12819,12821],{"class":54,"line":12820},59,[52,12822,12823],{"class":332},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[52,12825,12827,12829,12832,12834,12837,12840,12842,12844,12847,12849],{"class":54,"line":12826},60,[52,12828,4947],{"class":160},[52,12830,12831],{"class":622}," len ",[52,12833,2099],{"class":160},[52,12835,12836],{"class":160}," sizeof",[52,12838,12839],{"class":622},"(tArray) ",[52,12841,3696],{"class":160},[52,12843,12836],{"class":160},[52,12845,12846],{"class":622},"(tArray[",[52,12848,3306],{"class":90},[52,12850,6815],{"class":622},[52,12852,12854,12857],{"class":54,"line":12853},61,[52,12855,12856],{"class":58},"    allocateSpace",[52,12858,12859],{"class":622},"(tArray, len);\n",[52,12861,12863],{"class":54,"line":12862},62,[52,12864,12865],{"class":332},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[52,12867,12869,12872],{"class":54,"line":12868},63,[52,12870,12871],{"class":58},"    printInfo",[52,12873,12859],{"class":622},[52,12875,12877],{"class":54,"line":12876},64,[52,12878,116],{"emptyLinePlaceholder":115},[52,12880,12882],{"class":54,"line":12881},65,[52,12883,4543],{"class":622},[1070,12885,12886],{"start":69},[1073,12887,12888,12891],{},[538,12889,12890],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[274,12893,12894],{},"五名英雄信息如下：",[19,12896,12900],{"className":12897,"code":12898,"language":12899,"meta":28,"style":28},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[26,12901,12902,12920,12937,12954,12971],{"__ignoreMap":28},[52,12903,12904,12906,12909,12911,12913,12915,12918],{"class":54,"line":55},[52,12905,7876],{"class":622},[52,12907,12908],{"class":62},"\"刘备\"",[52,12910,3491],{"class":622},[52,12912,3887],{"class":90},[52,12914,3491],{"class":622},[52,12916,12917],{"class":62},"\"男\"",[52,12919,7889],{"class":622},[52,12921,12922,12924,12927,12929,12931,12933,12935],{"class":54,"line":69},[52,12923,7876],{"class":622},[52,12925,12926],{"class":62},"\"关羽\"",[52,12928,3491],{"class":622},[52,12930,3862],{"class":90},[52,12932,3491],{"class":622},[52,12934,12917],{"class":62},[52,12936,7889],{"class":622},[52,12938,12939,12941,12944,12946,12948,12950,12952],{"class":54,"line":82},[52,12940,7876],{"class":622},[52,12942,12943],{"class":62},"\"张飞\"",[52,12945,3491],{"class":622},[52,12947,3812],{"class":90},[52,12949,3491],{"class":622},[52,12951,12917],{"class":62},[52,12953,7889],{"class":622},[52,12955,12956,12958,12961,12963,12965,12967,12969],{"class":54,"line":97},[52,12957,7876],{"class":622},[52,12959,12960],{"class":62},"\"赵云\"",[52,12962,3491],{"class":622},[52,12964,3837],{"class":90},[52,12966,3491],{"class":622},[52,12968,12917],{"class":62},[52,12970,7889],{"class":622},[52,12972,12973,12975,12978,12980,12982,12984,12987],{"class":54,"line":112},[52,12974,7876],{"class":622},[52,12976,12977],{"class":62},"\"貂蝉\"",[52,12979,3491],{"class":622},[52,12981,3787],{"class":90},[52,12983,3491],{"class":622},[52,12985,12986],{"class":62},"\"女\"",[52,12988,7889],{"class":622},[274,12990,12991],{},"代码：",[19,12993,12995],{"className":3109,"code":12994,"language":3111,"meta":28,"style":28},"#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",[26,12996,12997,13003,13013,13019,13026,13030,13034,13040,13045,13049,13054,13077,13081,13106,13110,13143,13148,13177,13182,13197,13223,13243,13248,13253,13257,13261,13266,13288,13292,13316,13320,13382,13386,13390,13398,13402,13407,13418,13422,13438,13454,13470,13486,13502,13506,13526,13548,13553,13566,13573,13578,13584,13589,13602,13608],{"__ignoreMap":28},[52,12998,12999,13001],{"class":54,"line":55},[52,13000,4912],{"class":160},[52,13002,4915],{"class":62},[52,13004,13005,13007,13009,13011],{"class":54,"line":69},[52,13006,4920],{"class":160},[52,13008,4923],{"class":160},[52,13010,4926],{"class":58},[52,13012,4272],{"class":622},[52,13014,13015,13017],{"class":54,"line":82},[52,13016,4912],{"class":160},[52,13018,10705],{"class":62},[52,13020,13021,13023],{"class":54,"line":97},[52,13022,10715],{"class":160},[52,13024,13025],{"class":58}," Sanguo\n",[52,13027,13028],{"class":54,"line":112},[52,13029,4524],{"class":622},[52,13031,13032],{"class":54,"line":119},[52,13033,10741],{"class":622},[52,13035,13036,13038],{"class":54,"line":130},[52,13037,4947],{"class":160},[52,13039,10753],{"class":622},[52,13041,13042],{"class":54,"line":136},[52,13043,13044],{"class":622},"    string gender;\n",[52,13046,13047],{"class":54,"line":141},[52,13048,6954],{"class":622},[52,13050,13051],{"class":54,"line":146},[52,13052,13053],{"class":332},"\u002F\u002F定义排序函数\n",[52,13055,13056,13058,13060,13062,13065,13067,13069,13071,13073,13075],{"class":54,"line":152},[52,13057,8320],{"class":160},[52,13059,10272],{"class":58},[52,13061,3121],{"class":622},[52,13063,13064],{"class":58},"Sanguo",[52,13066,9474],{"class":160},[52,13068,3807],{"class":8172},[52,13070,3491],{"class":622},[52,13072,3124],{"class":160},[52,13074,10287],{"class":8172},[52,13076,170],{"class":622},[52,13078,13079],{"class":54,"line":157},[52,13080,4524],{"class":622},[52,13082,13083,13085,13087,13089,13091,13093,13095,13097,13099,13102,13104],{"class":54,"line":173},[52,13084,6160],{"class":160},[52,13086,3121],{"class":622},[52,13088,3124],{"class":160},[52,13090,5992],{"class":622},[52,13092,2099],{"class":160},[52,13094,3306],{"class":90},[52,13096,5999],{"class":622},[52,13098,4022],{"class":160},[52,13100,13101],{"class":622},"len;i",[52,13103,5254],{"class":160},[52,13105,170],{"class":622},[52,13107,13108],{"class":54,"line":178},[52,13109,4992],{"class":622},[52,13111,13112,13115,13117,13119,13121,13123,13125,13127,13129,13131,13133,13135,13137,13139,13141],{"class":54,"line":184},[52,13113,13114],{"class":160},"     for",[52,13116,4629],{"class":622},[52,13118,3124],{"class":160},[52,13120,6369],{"class":622},[52,13122,2099],{"class":160},[52,13124,3306],{"class":90},[52,13126,6376],{"class":622},[52,13128,4022],{"class":160},[52,13130,10314],{"class":622},[52,13132,3644],{"class":160},[52,13134,3332],{"class":90},[52,13136,3644],{"class":160},[52,13138,6509],{"class":622},[52,13140,5254],{"class":160},[52,13142,170],{"class":622},[52,13144,13145],{"class":54,"line":189},[52,13146,13147],{"class":622},"     {\n",[52,13149,13150,13153,13156,13158,13161,13163,13166,13168,13170,13172,13174],{"class":54,"line":201},[52,13151,13152],{"class":160},"         if",[52,13154,13155],{"class":622}," ((s",[52,13157,3593],{"class":160},[52,13159,13160],{"class":622},"j)->age ",[52,13162,4072],{"class":160},[52,13164,13165],{"class":622}," (s",[52,13167,3593],{"class":160},[52,13169,3579],{"class":622},[52,13171,3593],{"class":160},[52,13173,3332],{"class":90},[52,13175,13176],{"class":622},")->age)\n",[52,13178,13179],{"class":54,"line":206},[52,13180,13181],{"class":622},"         {\n",[52,13183,13184,13187,13189,13192,13194],{"class":54,"line":224},[52,13185,13186],{"class":622},"             Sanguo temp",[52,13188,10109],{"class":160},[52,13190,13191],{"class":622},"(s",[52,13193,3593],{"class":160},[52,13195,13196],{"class":622},"j);\n",[52,13198,13199,13202,13204,13206,13209,13211,13213,13215,13217,13219,13221],{"class":54,"line":229},[52,13200,13201],{"class":160},"             *",[52,13203,13191],{"class":622},[52,13205,3593],{"class":160},[52,13207,13208],{"class":622},"j)",[52,13210,10109],{"class":160},[52,13212,13191],{"class":622},[52,13214,3593],{"class":160},[52,13216,3579],{"class":622},[52,13218,3593],{"class":160},[52,13220,3332],{"class":90},[52,13222,5679],{"class":622},[52,13224,13225,13227,13229,13231,13233,13235,13237,13239,13241],{"class":54,"line":241},[52,13226,13201],{"class":160},[52,13228,13191],{"class":622},[52,13230,3593],{"class":160},[52,13232,3579],{"class":622},[52,13234,3593],{"class":160},[52,13236,3332],{"class":90},[52,13238,3542],{"class":622},[52,13240,2099],{"class":160},[52,13242,7239],{"class":622},[52,13244,13245],{"class":54,"line":246},[52,13246,13247],{"class":622},"         }\n",[52,13249,13250],{"class":54,"line":252},[52,13251,13252],{"class":622},"     }\n",[52,13254,13255],{"class":54,"line":257},[52,13256,5149],{"class":622},[52,13258,13259],{"class":54,"line":266},[52,13260,4543],{"class":622},[52,13262,13263],{"class":54,"line":4722},[52,13264,13265],{"class":332},"\u002F\u002F定义打印函数\n",[52,13267,13268,13270,13272,13274,13276,13278,13280,13282,13284,13286],{"class":54,"line":4727},[52,13269,8320],{"class":160},[52,13271,12571],{"class":58},[52,13273,3121],{"class":622},[52,13275,13064],{"class":58},[52,13277,9474],{"class":160},[52,13279,3807],{"class":8172},[52,13281,3491],{"class":622},[52,13283,3124],{"class":160},[52,13285,10287],{"class":8172},[52,13287,170],{"class":622},[52,13289,13290],{"class":54,"line":4741},[52,13291,4524],{"class":622},[52,13293,13294,13296,13298,13300,13302,13304,13306,13308,13310,13312,13314],{"class":54,"line":4746},[52,13295,6160],{"class":160},[52,13297,4629],{"class":622},[52,13299,3124],{"class":160},[52,13301,5992],{"class":622},[52,13303,2099],{"class":160},[52,13305,3306],{"class":90},[52,13307,5999],{"class":622},[52,13309,4022],{"class":160},[52,13311,13101],{"class":622},[52,13313,5254],{"class":160},[52,13315,170],{"class":622},[52,13317,13318],{"class":54,"line":5538},[52,13319,4992],{"class":622},[52,13321,13322,13324,13326,13328,13330,13333,13335,13337,13339,13342,13344,13346,13348,13351,13353,13355,13357,13360,13362,13364,13366,13369,13371,13373,13375,13378,13380],{"class":54,"line":5552},[52,13323,6410],{"class":622},[52,13325,4155],{"class":160},[52,13327,3364],{"class":62},[52,13329,4212],{"class":90},[52,13331,13332],{"class":62},"姓名：\"",[52,13334,4155],{"class":160},[52,13336,13191],{"class":622},[52,13338,3593],{"class":160},[52,13340,13341],{"class":622},"i)->name",[52,13343,4155],{"class":160},[52,13345,3364],{"class":62},[52,13347,4212],{"class":90},[52,13349,13350],{"class":62},"年龄：\"",[52,13352,4155],{"class":160},[52,13354,13191],{"class":622},[52,13356,3593],{"class":160},[52,13358,13359],{"class":622},"i)->age",[52,13361,4155],{"class":160},[52,13363,3364],{"class":62},[52,13365,4212],{"class":90},[52,13367,13368],{"class":62},"性别：\"",[52,13370,4155],{"class":160},[52,13372,13191],{"class":622},[52,13374,3593],{"class":160},[52,13376,13377],{"class":622},"i)->gender",[52,13379,4155],{"class":160},[52,13381,4177],{"class":622},[52,13383,13384],{"class":54,"line":5560},[52,13385,5149],{"class":622},[52,13387,13388],{"class":54,"line":5565},[52,13389,4543],{"class":622},[52,13391,13392,13394,13396],{"class":54,"line":5571},[52,13393,3124],{"class":160},[52,13395,4935],{"class":58},[52,13397,4938],{"class":622},[52,13399,13400],{"class":54,"line":5577},[52,13401,4524],{"class":622},[52,13403,13404],{"class":54,"line":5582},[52,13405,13406],{"class":332},"    \u002F\u002F定义结构体变量\n",[52,13408,13409,13412,13414,13416],{"class":54,"line":10904},[52,13410,13411],{"class":622},"    Sanguo s1[",[52,13413,3432],{"class":90},[52,13415,4052],{"class":622},[52,13417,7867],{"class":160},[52,13419,13420],{"class":54,"line":10928},[52,13421,4992],{"class":622},[52,13423,13424,13426,13428,13430,13432,13434,13436],{"class":54,"line":10933},[52,13425,7876],{"class":622},[52,13427,12908],{"class":62},[52,13429,3491],{"class":622},[52,13431,3887],{"class":90},[52,13433,3491],{"class":622},[52,13435,12917],{"class":62},[52,13437,7889],{"class":622},[52,13439,13440,13442,13444,13446,13448,13450,13452],{"class":54,"line":10939},[52,13441,7876],{"class":622},[52,13443,12926],{"class":62},[52,13445,3491],{"class":622},[52,13447,3862],{"class":90},[52,13449,3491],{"class":622},[52,13451,12917],{"class":62},[52,13453,7889],{"class":622},[52,13455,13456,13458,13460,13462,13464,13466,13468],{"class":54,"line":10966},[52,13457,7876],{"class":622},[52,13459,12943],{"class":62},[52,13461,3491],{"class":622},[52,13463,3812],{"class":90},[52,13465,3491],{"class":622},[52,13467,12917],{"class":62},[52,13469,7889],{"class":622},[52,13471,13472,13474,13476,13478,13480,13482,13484],{"class":54,"line":10971},[52,13473,7876],{"class":622},[52,13475,12960],{"class":62},[52,13477,3491],{"class":622},[52,13479,3837],{"class":90},[52,13481,3491],{"class":622},[52,13483,12917],{"class":62},[52,13485,7889],{"class":622},[52,13487,13488,13490,13492,13494,13496,13498,13500],{"class":54,"line":10977},[52,13489,7876],{"class":622},[52,13491,12977],{"class":62},[52,13493,3491],{"class":622},[52,13495,3787],{"class":90},[52,13497,3491],{"class":622},[52,13499,12986],{"class":62},[52,13501,7889],{"class":622},[52,13503,13504],{"class":54,"line":10989},[52,13505,7910],{"class":622},[52,13507,13508,13510,13512,13514,13517,13519,13522,13524],{"class":54,"line":11001},[52,13509,4947],{"class":160},[52,13511,10287],{"class":622},[52,13513,7162],{"class":160},[52,13515,13516],{"class":622},"(s1)",[52,13518,7168],{"class":160},[52,13520,13521],{"class":622},"(s1[",[52,13523,3306],{"class":90},[52,13525,6815],{"class":622},[52,13527,13528,13531,13533,13536,13538,13541,13544,13546],{"class":54,"line":11013},[52,13529,13530],{"class":622},"    Sanguo ",[52,13532,1095],{"class":160},[52,13534,13535],{"class":622},"s ",[52,13537,2099],{"class":160},[52,13539,13540],{"class":160}," &",[52,13542,13543],{"class":622},"s1[",[52,13545,3306],{"class":90},[52,13547,7649],{"class":622},[52,13549,13550],{"class":54,"line":12672},[52,13551,13552],{"class":332},"    \u002F\u002F排序前：\n",[52,13554,13555,13557,13559,13562,13564],{"class":54,"line":12697},[52,13556,9485],{"class":622},[52,13558,4155],{"class":160},[52,13560,13561],{"class":62}," \"排序前：\"",[52,13563,4423],{"class":160},[52,13565,11796],{"class":622},[52,13567,13568,13570],{"class":54,"line":12720},[52,13569,12871],{"class":58},[52,13571,13572],{"class":622},"(s,len);\n",[52,13574,13575],{"class":54,"line":12744},[52,13576,13577],{"class":332},"    \u002F\u002F调用排序函数\n",[52,13579,13580,13582],{"class":54,"line":12749},[52,13581,10554],{"class":58},[52,13583,13572],{"class":622},[52,13585,13586],{"class":54,"line":12754},[52,13587,13588],{"class":332},"    \u002F\u002F排序后\n",[52,13590,13591,13593,13595,13598,13600],{"class":54,"line":12759},[52,13592,9485],{"class":622},[52,13594,4155],{"class":160},[52,13596,13597],{"class":62}," \"排序后：\"",[52,13599,4423],{"class":160},[52,13601,11796],{"class":622},[52,13603,13604,13606],{"class":54,"line":12768},[52,13605,12871],{"class":58},[52,13607,13572],{"class":622},[52,13609,13610],{"class":54,"line":12773},[52,13611,4543],{"class":622},[274,13613,13614,13615,13617],{},"注意：使用指针时直接用传首地址**&s",[52,13616,3306],{},"**",[3015,13619,13620],{},"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":28,"searchDepth":69,"depth":69,"links":13622},[13623,13624,13625,13626,13627,13628,13629],{"id":10659,"depth":69,"text":10660},{"id":11021,"depth":69,"text":11022},{"id":11290,"depth":69,"text":11291},{"id":11455,"depth":69,"text":11456},{"id":11671,"depth":69,"text":11672},{"id":11992,"depth":69,"text":11993},{"id":12220,"depth":69,"text":12221},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":10648,"description":10656},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":13636,"title":13637,"body":13638,"description":28,"extension":3047,"meta":14981,"navigation":115,"path":14982,"seo":14983,"stem":14984,"__hash__":14985},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":13639,"toc":14975},[13640,13643,13647,13653,13667,13672,13675,13679,13686,13692,13695,13702,13708,13713,13716,13719,13722,14286,14289,14303,14307,14312,14328,14468,14471,14477,14480,14485,14493,14601,14604,14609,14612,14617,14620,14626,14629,14972],[10,13641,13637],{"id":13642},"_5程序内存模型",[14,13644,13646],{"id":13645},"_51内存分区模型","5.1内存分区模型",[274,13648,13649,13650],{},"C++程序在执行时，将内存大方向划分为",[538,13651,13652],{},"4个区域",[4118,13654,13655,13658,13661,13664],{},[1073,13656,13657],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[1073,13659,13660],{},"全局区：存放全局变量和静态变量以及常量",[1073,13662,13663],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[1073,13665,13666],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[274,13668,13669],{},[538,13670,13671],{},"内存四区意义：",[274,13673,13674],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[30,13676,13678],{"id":13677},"_511程序运行前","5.1.1程序运行前",[274,13680,13681,13682,13685],{},"​\t在程序编译后，生成了exe可执行程序，",[538,13683,13684],{},"未执行该程序前","分为两个区域",[274,13687,13688,13689],{},"​\t",[538,13690,13691],{},"代码区：",[274,13693,13694],{},"​\t\t存放 CPU 执行的机器指令",[274,13696,13697,13698,13701],{},"​\t\t代码区是",[538,13699,13700],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[274,13703,13697,13704,13707],{},[538,13705,13706],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[274,13709,13688,13710],{},[538,13711,13712],{},"全局区：",[274,13714,13715],{},"​\t\t全局变量和静态变量存放在此.",[274,13717,13718],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[274,13720,13721],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[19,13723,13725],{"className":3109,"code":13724,"language":3111,"meta":28,"style":28},"\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",[26,13726,13727,13732,13745,13758,13762,13767,13782,13797,13801,13810,13814,13819,13832,13845,13849,13854,13880,13906,13910,13937,13963,13967,13972,13988,14003,14007,14033,14059,14063,14088,14113,14117,14143,14169,14173,14189,14204,14230,14256,14260,14270,14274,14282],{"__ignoreMap":28},[52,13728,13729],{"class":54,"line":55},[52,13730,13731],{"class":332},"\u002F\u002F全局变量\n",[52,13733,13734,13736,13739,13741,13743],{"class":54,"line":69},[52,13735,3124],{"class":160},[52,13737,13738],{"class":622}," g_a ",[52,13740,2099],{"class":160},[52,13742,5000],{"class":90},[52,13744,4272],{"class":622},[52,13746,13747,13749,13752,13754,13756],{"class":54,"line":82},[52,13748,3124],{"class":160},[52,13750,13751],{"class":622}," g_b ",[52,13753,2099],{"class":160},[52,13755,5000],{"class":90},[52,13757,4272],{"class":622},[52,13759,13760],{"class":54,"line":97},[52,13761,116],{"emptyLinePlaceholder":115},[52,13763,13764],{"class":54,"line":112},[52,13765,13766],{"class":332},"\u002F\u002F全局常量\n",[52,13768,13769,13771,13773,13776,13778,13780],{"class":54,"line":119},[52,13770,9748],{"class":160},[52,13772,5344],{"class":160},[52,13774,13775],{"class":622}," c_g_a ",[52,13777,2099],{"class":160},[52,13779,5000],{"class":90},[52,13781,4272],{"class":622},[52,13783,13784,13786,13788,13791,13793,13795],{"class":54,"line":130},[52,13785,9748],{"class":160},[52,13787,5344],{"class":160},[52,13789,13790],{"class":622}," c_g_b ",[52,13792,2099],{"class":160},[52,13794,5000],{"class":90},[52,13796,4272],{"class":622},[52,13798,13799],{"class":54,"line":136},[52,13800,116],{"emptyLinePlaceholder":115},[52,13802,13803,13805,13807],{"class":54,"line":141},[52,13804,3124],{"class":160},[52,13806,4935],{"class":58},[52,13808,13809],{"class":622},"() {\n",[52,13811,13812],{"class":54,"line":146},[52,13813,116],{"emptyLinePlaceholder":115},[52,13815,13816],{"class":54,"line":152},[52,13817,13818],{"class":332},"    \u002F\u002F局部变量\n",[52,13820,13821,13823,13826,13828,13830],{"class":54,"line":157},[52,13822,4947],{"class":160},[52,13824,13825],{"class":622}," a ",[52,13827,2099],{"class":160},[52,13829,5000],{"class":90},[52,13831,4272],{"class":622},[52,13833,13834,13836,13839,13841,13843],{"class":54,"line":173},[52,13835,4947],{"class":160},[52,13837,13838],{"class":622}," b ",[52,13840,2099],{"class":160},[52,13842,5000],{"class":90},[52,13844,4272],{"class":622},[52,13846,13847],{"class":54,"line":178},[52,13848,116],{"emptyLinePlaceholder":115},[52,13850,13851],{"class":54,"line":184},[52,13852,13853],{"class":332},"    \u002F\u002F打印地址\n",[52,13855,13856,13858,13860,13863,13865,13867,13869,13871,13873,13876,13878],{"class":54,"line":189},[52,13857,9485],{"class":622},[52,13859,4155],{"class":160},[52,13861,13862],{"class":62}," \"局部变量a地址为： \"",[52,13864,4423],{"class":160},[52,13866,4629],{"class":622},[52,13868,3124],{"class":160},[52,13870,3542],{"class":622},[52,13872,3466],{"class":160},[52,13874,13875],{"class":622},"a ",[52,13877,4155],{"class":160},[52,13879,11796],{"class":622},[52,13881,13882,13884,13886,13889,13891,13893,13895,13897,13899,13902,13904],{"class":54,"line":201},[52,13883,9485],{"class":622},[52,13885,4155],{"class":160},[52,13887,13888],{"class":62}," \"局部变量b地址为： \"",[52,13890,4423],{"class":160},[52,13892,4629],{"class":622},[52,13894,3124],{"class":160},[52,13896,3542],{"class":622},[52,13898,3466],{"class":160},[52,13900,13901],{"class":622},"b ",[52,13903,4155],{"class":160},[52,13905,11796],{"class":622},[52,13907,13908],{"class":54,"line":206},[52,13909,116],{"emptyLinePlaceholder":115},[52,13911,13912,13914,13916,13919,13921,13924,13926,13928,13930,13933,13935],{"class":54,"line":224},[52,13913,9485],{"class":622},[52,13915,4155],{"class":160},[52,13917,13918],{"class":62}," \"全局变量g_a地址为： \"",[52,13920,4423],{"class":160},[52,13922,13923],{"class":622},"  (",[52,13925,3124],{"class":160},[52,13927,3542],{"class":622},[52,13929,3466],{"class":160},[52,13931,13932],{"class":622},"g_a ",[52,13934,4155],{"class":160},[52,13936,11796],{"class":622},[52,13938,13939,13941,13943,13946,13948,13950,13952,13954,13956,13959,13961],{"class":54,"line":229},[52,13940,9485],{"class":622},[52,13942,4155],{"class":160},[52,13944,13945],{"class":62}," \"全局变量g_b地址为： \"",[52,13947,4423],{"class":160},[52,13949,13923],{"class":622},[52,13951,3124],{"class":160},[52,13953,3542],{"class":622},[52,13955,3466],{"class":160},[52,13957,13958],{"class":622},"g_b ",[52,13960,4155],{"class":160},[52,13962,11796],{"class":622},[52,13964,13965],{"class":54,"line":241},[52,13966,116],{"emptyLinePlaceholder":115},[52,13968,13969],{"class":54,"line":246},[52,13970,13971],{"class":332},"    \u002F\u002F静态变量\n",[52,13973,13974,13977,13979,13982,13984,13986],{"class":54,"line":252},[52,13975,13976],{"class":160},"    static",[52,13978,5344],{"class":160},[52,13980,13981],{"class":622}," s_a ",[52,13983,2099],{"class":160},[52,13985,5000],{"class":90},[52,13987,4272],{"class":622},[52,13989,13990,13992,13994,13997,13999,14001],{"class":54,"line":257},[52,13991,13976],{"class":160},[52,13993,5344],{"class":160},[52,13995,13996],{"class":622}," s_b ",[52,13998,2099],{"class":160},[52,14000,5000],{"class":90},[52,14002,4272],{"class":622},[52,14004,14005],{"class":54,"line":266},[52,14006,116],{"emptyLinePlaceholder":115},[52,14008,14009,14011,14013,14016,14018,14020,14022,14024,14026,14029,14031],{"class":54,"line":4722},[52,14010,9485],{"class":622},[52,14012,4155],{"class":160},[52,14014,14015],{"class":62}," \"静态变量s_a地址为： \"",[52,14017,4423],{"class":160},[52,14019,4629],{"class":622},[52,14021,3124],{"class":160},[52,14023,3542],{"class":622},[52,14025,3466],{"class":160},[52,14027,14028],{"class":622},"s_a ",[52,14030,4155],{"class":160},[52,14032,11796],{"class":622},[52,14034,14035,14037,14039,14042,14044,14046,14048,14050,14052,14055,14057],{"class":54,"line":4727},[52,14036,9485],{"class":622},[52,14038,4155],{"class":160},[52,14040,14041],{"class":62}," \"静态变量s_b地址为： \"",[52,14043,4423],{"class":160},[52,14045,4629],{"class":622},[52,14047,3124],{"class":160},[52,14049,3542],{"class":622},[52,14051,3466],{"class":160},[52,14053,14054],{"class":622},"s_b ",[52,14056,4155],{"class":160},[52,14058,11796],{"class":622},[52,14060,14061],{"class":54,"line":4741},[52,14062,116],{"emptyLinePlaceholder":115},[52,14064,14065,14067,14069,14072,14074,14076,14078,14080,14082,14084,14086],{"class":54,"line":4746},[52,14066,9485],{"class":622},[52,14068,4155],{"class":160},[52,14070,14071],{"class":62}," \"字符串常量地址为： \"",[52,14073,4423],{"class":160},[52,14075,4629],{"class":622},[52,14077,3124],{"class":160},[52,14079,3542],{"class":622},[52,14081,3466],{"class":160},[52,14083,4172],{"class":62},[52,14085,4423],{"class":160},[52,14087,11796],{"class":622},[52,14089,14090,14092,14094,14096,14098,14100,14102,14104,14106,14109,14111],{"class":54,"line":5538},[52,14091,9485],{"class":622},[52,14093,4155],{"class":160},[52,14095,14071],{"class":62},[52,14097,4423],{"class":160},[52,14099,4629],{"class":622},[52,14101,3124],{"class":160},[52,14103,3542],{"class":622},[52,14105,3466],{"class":160},[52,14107,14108],{"class":62},"\"hello world1\"",[52,14110,4423],{"class":160},[52,14112,11796],{"class":622},[52,14114,14115],{"class":54,"line":5552},[52,14116,116],{"emptyLinePlaceholder":115},[52,14118,14119,14121,14123,14126,14128,14130,14132,14134,14136,14139,14141],{"class":54,"line":5560},[52,14120,9485],{"class":622},[52,14122,4155],{"class":160},[52,14124,14125],{"class":62}," \"全局常量c_g_a地址为： \"",[52,14127,4423],{"class":160},[52,14129,4629],{"class":622},[52,14131,3124],{"class":160},[52,14133,3542],{"class":622},[52,14135,3466],{"class":160},[52,14137,14138],{"class":622},"c_g_a ",[52,14140,4155],{"class":160},[52,14142,11796],{"class":622},[52,14144,14145,14147,14149,14152,14154,14156,14158,14160,14162,14165,14167],{"class":54,"line":5565},[52,14146,9485],{"class":622},[52,14148,4155],{"class":160},[52,14150,14151],{"class":62}," \"全局常量c_g_b地址为： \"",[52,14153,4423],{"class":160},[52,14155,4629],{"class":622},[52,14157,3124],{"class":160},[52,14159,3542],{"class":622},[52,14161,3466],{"class":160},[52,14163,14164],{"class":622},"c_g_b ",[52,14166,4155],{"class":160},[52,14168,11796],{"class":622},[52,14170,14171],{"class":54,"line":5571},[52,14172,116],{"emptyLinePlaceholder":115},[52,14174,14175,14178,14180,14183,14185,14187],{"class":54,"line":5577},[52,14176,14177],{"class":160},"    const",[52,14179,5344],{"class":160},[52,14181,14182],{"class":622}," c_l_a ",[52,14184,2099],{"class":160},[52,14186,5000],{"class":90},[52,14188,4272],{"class":622},[52,14190,14191,14193,14195,14198,14200,14202],{"class":54,"line":5582},[52,14192,14177],{"class":160},[52,14194,5344],{"class":160},[52,14196,14197],{"class":622}," c_l_b ",[52,14199,2099],{"class":160},[52,14201,5000],{"class":90},[52,14203,4272],{"class":622},[52,14205,14206,14208,14210,14213,14215,14217,14219,14221,14223,14226,14228],{"class":54,"line":10904},[52,14207,9485],{"class":622},[52,14209,4155],{"class":160},[52,14211,14212],{"class":62}," \"局部常量c_l_a地址为： \"",[52,14214,4423],{"class":160},[52,14216,4629],{"class":622},[52,14218,3124],{"class":160},[52,14220,3542],{"class":622},[52,14222,3466],{"class":160},[52,14224,14225],{"class":622},"c_l_a ",[52,14227,4155],{"class":160},[52,14229,11796],{"class":622},[52,14231,14232,14234,14236,14239,14241,14243,14245,14247,14249,14252,14254],{"class":54,"line":10928},[52,14233,9485],{"class":622},[52,14235,4155],{"class":160},[52,14237,14238],{"class":62}," \"局部常量c_l_b地址为： \"",[52,14240,4423],{"class":160},[52,14242,4629],{"class":622},[52,14244,3124],{"class":160},[52,14246,3542],{"class":622},[52,14248,3466],{"class":160},[52,14250,14251],{"class":622},"c_l_b ",[52,14253,4155],{"class":160},[52,14255,11796],{"class":622},[52,14257,14258],{"class":54,"line":10933},[52,14259,116],{"emptyLinePlaceholder":115},[52,14261,14262,14264,14266,14268],{"class":54,"line":10939},[52,14263,5265],{"class":58},[52,14265,3121],{"class":622},[52,14267,5270],{"class":62},[52,14269,5679],{"class":622},[52,14271,14272],{"class":54,"line":10966},[52,14273,116],{"emptyLinePlaceholder":115},[52,14275,14276,14278,14280],{"class":54,"line":10971},[52,14277,7049],{"class":160},[52,14279,7052],{"class":90},[52,14281,4272],{"class":622},[52,14283,14284],{"class":54,"line":10977},[52,14285,4543],{"class":622},[274,14287,14288],{},"总结：",[4118,14290,14291,14294,14297,14300],{},[1073,14292,14293],{},"c++中程序运行前分为全局区和代码区",[1073,14295,14296],{},"代码区特点是共享和只读",[1073,14298,14299],{},"全局区中存放全局变量、静态变量、常量",[1073,14301,14302],{},"常量区中存放const修饰的全局常量和字符串常量",[30,14304,14306],{"id":14305},"_512程序运行后","5.1.2程序运行后",[1070,14308,14309],{},[1073,14310,14311],{},"栈区：",[4118,14313,14314,14321],{},[1073,14315,14316,14317,14320],{},"由编译器自动分配释放, 存放",[538,14318,14319],{},"函数的参数值,局部变量","等",[1073,14322,14323,14324,14327],{},"注意事项：",[538,14325,14326],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[19,14329,14331],{"className":3109,"code":14330,"language":3111,"meta":28,"style":28},"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",[26,14332,14333,14344,14348,14363,14375,14379,14383,14391,14396,14411,14429,14446,14456,14464],{"__ignoreMap":28},[52,14334,14335,14337,14339,14342],{"class":54,"line":55},[52,14336,3124],{"class":160},[52,14338,9474],{"class":160},[52,14340,14341],{"class":58}," func",[52,14343,4938],{"class":622},[52,14345,14346],{"class":54,"line":69},[52,14347,4524],{"class":622},[52,14349,14350,14352,14354,14356,14358,14360],{"class":54,"line":82},[52,14351,4947],{"class":160},[52,14353,13825],{"class":622},[52,14355,2099],{"class":160},[52,14357,5000],{"class":90},[52,14359,3173],{"class":622},[52,14361,14362],{"class":332}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[52,14364,14365,14367,14369,14372],{"class":54,"line":97},[52,14366,7049],{"class":160},[52,14368,13540],{"class":160},[52,14370,14371],{"class":622},"a;",[52,14373,14374],{"class":332}," \u002F\u002F放回局部变量的地址\n",[52,14376,14377],{"class":54,"line":112},[52,14378,4543],{"class":622},[52,14380,14381],{"class":54,"line":119},[52,14382,116],{"emptyLinePlaceholder":115},[52,14384,14385,14387,14389],{"class":54,"line":130},[52,14386,3124],{"class":160},[52,14388,4935],{"class":58},[52,14390,13809],{"class":622},[52,14392,14393],{"class":54,"line":136},[52,14394,14395],{"class":332},"    \u002F\u002F接受func的返回值\n",[52,14397,14398,14400,14402,14405,14407,14409],{"class":54,"line":141},[52,14399,4947],{"class":160},[52,14401,9474],{"class":160},[52,14403,14404],{"class":622},"p ",[52,14406,2099],{"class":160},[52,14408,14341],{"class":58},[52,14410,8592],{"class":622},[52,14412,14413,14415,14417,14419,14421,14423,14426],{"class":54,"line":146},[52,14414,9485],{"class":622},[52,14416,4155],{"class":160},[52,14418,9474],{"class":160},[52,14420,14404],{"class":622},[52,14422,4155],{"class":160},[52,14424,14425],{"class":622}," endl;",[52,14427,14428],{"class":332}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[52,14430,14431,14433,14435,14437,14439,14441,14443],{"class":54,"line":152},[52,14432,9485],{"class":622},[52,14434,4155],{"class":160},[52,14436,9474],{"class":160},[52,14438,14404],{"class":622},[52,14440,4155],{"class":160},[52,14442,14425],{"class":622},[52,14444,14445],{"class":332}," \u002F\u002F第二次这个数据不再保留\n",[52,14447,14448,14450,14452,14454],{"class":54,"line":157},[52,14449,5265],{"class":58},[52,14451,3121],{"class":622},[52,14453,5270],{"class":62},[52,14455,5679],{"class":622},[52,14457,14458,14460,14462],{"class":54,"line":173},[52,14459,7049],{"class":160},[52,14461,7052],{"class":90},[52,14463,4272],{"class":622},[52,14465,14466],{"class":54,"line":178},[52,14467,4543],{"class":622},[274,14469,14470],{},"输出结果：",[274,14472,14473],{},[280,14474],{"alt":14475,"src":14476},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[274,14478,14479],{},"总结：不要返回局部变量的地址",[1070,14481,14482],{"start":69},[1073,14483,14484],{},"堆区",[4118,14486,14487,14490],{},[1073,14488,14489],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[1073,14491,14492],{},"在c++中主要利用new在堆区开辟内存",[19,14494,14496],{"className":3109,"code":14495,"language":3111,"meta":28,"style":28},"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",[26,14497,14498,14513,14517,14522,14543,14550,14554,14562,14566,14571,14585,14597],{"__ignoreMap":28},[52,14499,14500,14502,14505,14508,14510],{"class":54,"line":55},[52,14501,3124],{"class":160},[52,14503,14504],{"class":160},"  *",[52,14506,14507],{"class":58},"func",[52,14509,5388],{"class":622},[52,14511,14512],{"class":332},"  \u002F\u002F函数返回指针\n",[52,14514,14515],{"class":54,"line":69},[52,14516,4524],{"class":622},[52,14518,14519],{"class":54,"line":82},[52,14520,14521],{"class":332},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[52,14523,14524,14526,14528,14530,14532,14535,14537,14539,14541],{"class":54,"line":97},[52,14525,7106],{"class":160},[52,14527,9474],{"class":160},[52,14529,274],{"class":622},[52,14531,2099],{"class":160},[52,14533,14534],{"class":160}," new",[52,14536,5344],{"class":160},[52,14538,3121],{"class":622},[52,14540,3559],{"class":90},[52,14542,5679],{"class":622},[52,14544,14545,14547],{"class":54,"line":112},[52,14546,7340],{"class":160},[52,14548,14549],{"class":622}," p;\n",[52,14551,14552],{"class":54,"line":119},[52,14553,4543],{"class":622},[52,14555,14556,14558,14560],{"class":54,"line":130},[52,14557,3124],{"class":160},[52,14559,4935],{"class":58},[52,14561,4938],{"class":622},[52,14563,14564],{"class":54,"line":136},[52,14565,4524],{"class":622},[52,14567,14568],{"class":54,"line":141},[52,14569,14570],{"class":332},"    \u002F\u002F在堆区开辟数据\n",[52,14572,14573,14575,14577,14579,14581,14583],{"class":54,"line":146},[52,14574,4947],{"class":160},[52,14576,9474],{"class":160},[52,14578,274],{"class":622},[52,14580,2099],{"class":160},[52,14582,14507],{"class":58},[52,14584,8592],{"class":622},[52,14586,14587,14589,14591,14593,14595],{"class":54,"line":152},[52,14588,4529],{"class":622},[52,14590,9375],{"class":160},[52,14592,274],{"class":622},[52,14594,4155],{"class":160},[52,14596,4177],{"class":622},[52,14598,14599],{"class":54,"line":157},[52,14600,4543],{"class":622},[274,14602,14603],{},"图片展示：",[274,14605,14606],{},[280,14607],{"alt":14475,"src":14608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[274,14610,14611],{},"堆区内存由程序员管生死！！！",[1070,14613,14614],{"start":82},[1073,14615,14616],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[274,14618,14619],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[274,14621,14622,14623],{},"​语法：",[26,14624,14625],{}," new 数据类型",[274,14627,14628],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[19,14630,14632],{"className":3109,"code":14631,"language":3111,"meta":28,"style":28},"\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",[26,14633,14634,14639,14649,14653,14658,14663,14685,14689,14697,14701,14715,14727,14739,14751,14756,14761,14772,14776,14781,14789,14793,14798,14820,14846,14850,14868,14872,14898,14902,14914,14918,14923,14928,14936,14940,14944,14952,14956,14962,14968],{"__ignoreMap":28},[52,14635,14636],{"class":54,"line":55},[52,14637,14638],{"class":332},"\u002F\u002F1.new的基本语法\n",[52,14640,14641,14643,14645,14647],{"class":54,"line":69},[52,14642,3124],{"class":160},[52,14644,9474],{"class":160},[52,14646,14507],{"class":58},[52,14648,4938],{"class":622},[52,14650,14651],{"class":54,"line":82},[52,14652,4524],{"class":622},[52,14654,14655],{"class":54,"line":97},[52,14656,14657],{"class":332},"    \u002F\u002F在堆区创建整型数据\n",[52,14659,14660],{"class":54,"line":112},[52,14661,14662],{"class":332},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[52,14664,14665,14667,14669,14671,14674,14676,14678,14680,14682],{"class":54,"line":119},[52,14666,4947],{"class":160},[52,14668,9474],{"class":160},[52,14670,274],{"class":622},[52,14672,14673],{"class":160},"=new",[52,14675,5344],{"class":160},[52,14677,3121],{"class":622},[52,14679,3559],{"class":90},[52,14681,8922],{"class":622},[52,14683,14684],{"class":332},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[52,14686,14687],{"class":54,"line":130},[52,14688,4543],{"class":622},[52,14690,14691,14693,14695],{"class":54,"line":136},[52,14692,8320],{"class":160},[52,14694,8544],{"class":58},[52,14696,4938],{"class":622},[52,14698,14699],{"class":54,"line":141},[52,14700,4524],{"class":622},[52,14702,14703,14705,14707,14709,14711,14713],{"class":54,"line":146},[52,14704,4947],{"class":160},[52,14706,9474],{"class":160},[52,14708,274],{"class":622},[52,14710,2099],{"class":160},[52,14712,14507],{"class":58},[52,14714,8592],{"class":622},[52,14716,14717,14719,14721,14723,14725],{"class":54,"line":152},[52,14718,4529],{"class":622},[52,14720,9375],{"class":160},[52,14722,274],{"class":622},[52,14724,4155],{"class":160},[52,14726,4177],{"class":622},[52,14728,14729,14731,14733,14735,14737],{"class":54,"line":157},[52,14730,4529],{"class":622},[52,14732,9375],{"class":160},[52,14734,274],{"class":622},[52,14736,4155],{"class":160},[52,14738,4177],{"class":622},[52,14740,14741,14743,14745,14747,14749],{"class":54,"line":173},[52,14742,4529],{"class":622},[52,14744,9375],{"class":160},[52,14746,274],{"class":622},[52,14748,4155],{"class":160},[52,14750,4177],{"class":622},[52,14752,14753],{"class":54,"line":178},[52,14754,14755],{"class":332},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[52,14757,14758],{"class":54,"line":184},[52,14759,14760],{"class":332},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[52,14762,14763,14766,14769],{"class":54,"line":189},[52,14764,14765],{"class":160},"    delete",[52,14767,14768],{"class":622}," p;",[52,14770,14771],{"class":332},"\u002F\u002F删除这块地址\n",[52,14773,14774],{"class":54,"line":201},[52,14775,4543],{"class":622},[52,14777,14778],{"class":54,"line":206},[52,14779,14780],{"class":332},"\u002F\u002F2.在堆区利用new开辟数组\n",[52,14782,14783,14785,14787],{"class":54,"line":224},[52,14784,8320],{"class":160},[52,14786,8613],{"class":58},[52,14788,4938],{"class":622},[52,14790,14791],{"class":54,"line":229},[52,14792,4524],{"class":622},[52,14794,14795],{"class":54,"line":241},[52,14796,14797],{"class":332},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[52,14799,14800,14802,14804,14806,14808,14810,14812,14814,14817],{"class":54,"line":246},[52,14801,4947],{"class":160},[52,14803,9474],{"class":160},[52,14805,6839],{"class":622},[52,14807,14673],{"class":160},[52,14809,5344],{"class":160},[52,14811,4002],{"class":622},[52,14813,3559],{"class":90},[52,14815,14816],{"class":622},"];",[52,14818,14819],{"class":332},"\u002F\u002F10代表数组有10个元素\n",[52,14821,14822,14824,14826,14828,14830,14832,14834,14836,14838,14840,14842,14844],{"class":54,"line":252},[52,14823,6160],{"class":160},[52,14825,4629],{"class":622},[52,14827,3124],{"class":160},[52,14829,5992],{"class":622},[52,14831,2099],{"class":160},[52,14833,3306],{"class":90},[52,14835,5999],{"class":622},[52,14837,4022],{"class":160},[52,14839,3559],{"class":90},[52,14841,5999],{"class":622},[52,14843,5254],{"class":160},[52,14845,170],{"class":622},[52,14847,14848],{"class":54,"line":257},[52,14849,4992],{"class":622},[52,14851,14852,14855,14857,14859,14861,14863,14865],{"class":54,"line":266},[52,14853,14854],{"class":622},"        arr[i]",[52,14856,2099],{"class":160},[52,14858,3554],{"class":622},[52,14860,3593],{"class":160},[52,14862,3424],{"class":90},[52,14864,3173],{"class":622},[52,14866,14867],{"class":332},"\u002F\u002F给10个元素赋值100～109\n",[52,14869,14870],{"class":54,"line":4722},[52,14871,5149],{"class":622},[52,14873,14874,14876,14878,14880,14882,14884,14886,14888,14890,14892,14894,14896],{"class":54,"line":4727},[52,14875,6160],{"class":160},[52,14877,4629],{"class":622},[52,14879,3124],{"class":160},[52,14881,5992],{"class":622},[52,14883,2099],{"class":160},[52,14885,3306],{"class":90},[52,14887,5999],{"class":622},[52,14889,4022],{"class":160},[52,14891,3559],{"class":90},[52,14893,5999],{"class":622},[52,14895,5254],{"class":160},[52,14897,170],{"class":622},[52,14899,14900],{"class":54,"line":4741},[52,14901,4992],{"class":622},[52,14903,14904,14906,14908,14910,14912],{"class":54,"line":4746},[52,14905,6410],{"class":622},[52,14907,4155],{"class":160},[52,14909,7313],{"class":622},[52,14911,4155],{"class":160},[52,14913,4177],{"class":622},[52,14915,14916],{"class":54,"line":5538},[52,14917,5149],{"class":622},[52,14919,14920],{"class":54,"line":5552},[52,14921,14922],{"class":332},"    \u002F\u002F释放堆区数组\n",[52,14924,14925],{"class":54,"line":5560},[52,14926,14927],{"class":332},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[52,14929,14930,14933],{"class":54,"line":5565},[52,14931,14932],{"class":160},"    delete[]",[52,14934,14935],{"class":622}," arr;\n",[52,14937,14938],{"class":54,"line":5571},[52,14939,4543],{"class":622},[52,14941,14942],{"class":54,"line":5577},[52,14943,116],{"emptyLinePlaceholder":115},[52,14945,14946,14948,14950],{"class":54,"line":5582},[52,14947,3124],{"class":160},[52,14949,4935],{"class":58},[52,14951,4938],{"class":622},[52,14953,14954],{"class":54,"line":10904},[52,14955,4524],{"class":622},[52,14957,14958,14960],{"class":54,"line":10928},[52,14959,8589],{"class":58},[52,14961,8592],{"class":622},[52,14963,14964,14966],{"class":54,"line":10933},[52,14965,8658],{"class":58},[52,14967,8592],{"class":622},[52,14969,14970],{"class":54,"line":10939},[52,14971,4543],{"class":622},[3015,14973,14974],{},"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":28,"searchDepth":69,"depth":69,"links":14976},[14977],{"id":13645,"depth":69,"text":13646,"children":14978},[14979,14980],{"id":13677,"depth":82,"text":13678},{"id":14305,"depth":82,"text":14306},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":13637,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14987,"title":14988,"body":14989,"description":28,"extension":3047,"meta":16470,"navigation":115,"path":16471,"seo":16472,"stem":16473,"__hash__":16474},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14990,"toc":16462},[14991,14994,14998,15001,15004,15173,15177,15182,15199,15204,15356,15360,15363,15366,15760,15764,15767,15772,15775,16087,16091,16097,16257,16259,16267,16271,16274,16281,16459],[10,14992,14988],{"id":14993},"_6引用",[14,14995,14997],{"id":14996},"_61引用基本用法","6.1引用基本用法",[274,14999,15000],{},"引用的本质：给变量起别名",[274,15002,15003],{},"语法：数据类型 &别名=原名",[19,15005,15007],{"className":3109,"code":15006,"language":3111,"meta":28,"style":28},"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",[26,15008,15009,15017,15021,15033,15045,15049,15068,15087,15091,15102,15106,15125,15143,15147,15157,15161,15169],{"__ignoreMap":28},[52,15010,15011,15013,15015],{"class":54,"line":55},[52,15012,3124],{"class":160},[52,15014,4935],{"class":58},[52,15016,13809],{"class":622},[52,15018,15019],{"class":54,"line":69},[52,15020,116],{"emptyLinePlaceholder":115},[52,15022,15023,15025,15027,15029,15031],{"class":54,"line":82},[52,15024,4947],{"class":160},[52,15026,13825],{"class":622},[52,15028,2099],{"class":160},[52,15030,5000],{"class":90},[52,15032,4272],{"class":622},[52,15034,15035,15037,15039,15041,15043],{"class":54,"line":97},[52,15036,4947],{"class":160},[52,15038,13540],{"class":160},[52,15040,13901],{"class":622},[52,15042,2099],{"class":160},[52,15044,4411],{"class":622},[52,15046,15047],{"class":54,"line":112},[52,15048,116],{"emptyLinePlaceholder":115},[52,15050,15051,15053,15055,15058,15060,15062,15064,15066],{"class":54,"line":119},[52,15052,9485],{"class":622},[52,15054,4155],{"class":160},[52,15056,15057],{"class":62}," \"a = \"",[52,15059,4423],{"class":160},[52,15061,13825],{"class":622},[52,15063,4155],{"class":160},[52,15065,14425],{"class":622},[52,15067,10224],{"class":332},[52,15069,15070,15072,15074,15077,15079,15081,15083,15085],{"class":54,"line":130},[52,15071,9485],{"class":622},[52,15073,4155],{"class":160},[52,15075,15076],{"class":62}," \"b = \"",[52,15078,4423],{"class":160},[52,15080,13838],{"class":622},[52,15082,4155],{"class":160},[52,15084,14425],{"class":622},[52,15086,10224],{"class":332},[52,15088,15089],{"class":54,"line":136},[52,15090,116],{"emptyLinePlaceholder":115},[52,15092,15093,15096,15098,15100],{"class":54,"line":141},[52,15094,15095],{"class":622},"    b ",[52,15097,2099],{"class":160},[52,15099,8710],{"class":90},[52,15101,4272],{"class":622},[52,15103,15104],{"class":54,"line":146},[52,15105,116],{"emptyLinePlaceholder":115},[52,15107,15108,15110,15112,15114,15116,15118,15120,15122],{"class":54,"line":152},[52,15109,9485],{"class":622},[52,15111,4155],{"class":160},[52,15113,15057],{"class":62},[52,15115,4423],{"class":160},[52,15117,13825],{"class":622},[52,15119,4155],{"class":160},[52,15121,14425],{"class":622},[52,15123,15124],{"class":332},"\u002F\u002F100\n",[52,15126,15127,15129,15131,15133,15135,15137,15139,15141],{"class":54,"line":157},[52,15128,9485],{"class":622},[52,15130,4155],{"class":160},[52,15132,15076],{"class":62},[52,15134,4423],{"class":160},[52,15136,13838],{"class":622},[52,15138,4155],{"class":160},[52,15140,14425],{"class":622},[52,15142,15124],{"class":332},[52,15144,15145],{"class":54,"line":173},[52,15146,116],{"emptyLinePlaceholder":115},[52,15148,15149,15151,15153,15155],{"class":54,"line":178},[52,15150,5265],{"class":58},[52,15152,3121],{"class":622},[52,15154,5270],{"class":62},[52,15156,5679],{"class":622},[52,15158,15159],{"class":54,"line":184},[52,15160,116],{"emptyLinePlaceholder":115},[52,15162,15163,15165,15167],{"class":54,"line":189},[52,15164,7049],{"class":160},[52,15166,7052],{"class":90},[52,15168,4272],{"class":622},[52,15170,15171],{"class":54,"line":201},[52,15172,4543],{"class":622},[14,15174,15176],{"id":15175},"_62引用的注意事项","6.2引用的注意事项",[1070,15178,15179],{},[1073,15180,15181],{},"引用必须要初始化",[19,15183,15185],{"className":3109,"code":15184,"language":3111,"meta":28,"style":28},"int &b;\u002F\u002F非常错误！\n",[26,15186,15187],{"__ignoreMap":28},[52,15188,15189,15191,15193,15196],{"class":54,"line":55},[52,15190,3124],{"class":160},[52,15192,13540],{"class":160},[52,15194,15195],{"class":622},"b;",[52,15197,15198],{"class":332},"\u002F\u002F非常错误！\n",[1070,15200,15201],{"start":69},[1073,15202,15203],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[19,15205,15207],{"className":3109,"code":15206,"language":3111,"meta":28,"style":28},"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",[26,15208,15209,15217,15229,15241,15249,15265,15278,15296,15314,15334,15344,15352],{"__ignoreMap":28},[52,15210,15211,15213,15215],{"class":54,"line":55},[52,15212,3124],{"class":160},[52,15214,4935],{"class":58},[52,15216,13809],{"class":622},[52,15218,15219,15221,15223,15225,15227],{"class":54,"line":69},[52,15220,4947],{"class":160},[52,15222,13825],{"class":622},[52,15224,2099],{"class":160},[52,15226,5000],{"class":90},[52,15228,4272],{"class":622},[52,15230,15231,15233,15235,15237,15239],{"class":54,"line":82},[52,15232,4947],{"class":160},[52,15234,13838],{"class":622},[52,15236,2099],{"class":160},[52,15238,11906],{"class":90},[52,15240,4272],{"class":622},[52,15242,15243,15246],{"class":54,"line":97},[52,15244,15245],{"class":332},"    \u002F\u002Fint &c;",[52,15247,15248],{"class":332}," \u002F\u002F错误，引用必须初始化\n",[52,15250,15251,15253,15255,15257,15259,15262],{"class":54,"line":112},[52,15252,4947],{"class":160},[52,15254,13540],{"class":160},[52,15256,5906],{"class":622},[52,15258,2099],{"class":160},[52,15260,15261],{"class":622}," a;",[52,15263,15264],{"class":332}," \u002F\u002F一旦初始化后，就不可以更改\n",[52,15266,15267,15270,15272,15275],{"class":54,"line":119},[52,15268,15269],{"class":622},"    c ",[52,15271,2099],{"class":160},[52,15273,15274],{"class":622}," b;",[52,15276,15277],{"class":332}," \u002F\u002F这是赋值操作，不是更改引用\n",[52,15279,15280,15282,15284,15286,15288,15290,15292,15294],{"class":54,"line":130},[52,15281,9485],{"class":622},[52,15283,4155],{"class":160},[52,15285,15057],{"class":62},[52,15287,4423],{"class":160},[52,15289,13825],{"class":622},[52,15291,4155],{"class":160},[52,15293,14425],{"class":622},[52,15295,10209],{"class":332},[52,15297,15298,15300,15302,15304,15306,15308,15310,15312],{"class":54,"line":136},[52,15299,9485],{"class":622},[52,15301,4155],{"class":160},[52,15303,15076],{"class":62},[52,15305,4423],{"class":160},[52,15307,13838],{"class":622},[52,15309,4155],{"class":160},[52,15311,14425],{"class":622},[52,15313,10209],{"class":332},[52,15315,15316,15318,15320,15323,15325,15328,15330,15332],{"class":54,"line":141},[52,15317,9485],{"class":622},[52,15319,4155],{"class":160},[52,15321,15322],{"class":62}," \"c = \"",[52,15324,4423],{"class":160},[52,15326,15327],{"class":622}," c ",[52,15329,4155],{"class":160},[52,15331,14425],{"class":622},[52,15333,10209],{"class":332},[52,15335,15336,15338,15340,15342],{"class":54,"line":146},[52,15337,5265],{"class":58},[52,15339,3121],{"class":622},[52,15341,5270],{"class":62},[52,15343,5679],{"class":622},[52,15345,15346,15348,15350],{"class":54,"line":152},[52,15347,7049],{"class":160},[52,15349,7052],{"class":90},[52,15351,4272],{"class":622},[52,15353,15354],{"class":54,"line":157},[52,15355,4543],{"class":622},[14,15357,15359],{"id":15358},"_63引用做函数参数","6.3引用做函数参数",[274,15361,15362],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[274,15364,15365],{},"优点：可以简化指针修改实参",[19,15367,15369],{"className":3109,"code":15368,"language":3111,"meta":28,"style":28},"\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",[26,15370,15371,15376,15399,15410,15420,15429,15433,15437,15442,15464,15476,15488,15498,15502,15506,15511,15533,15543,15551,15559,15563,15567,15575,15579,15591,15603,15607,15618,15644,15648,15668,15692,15696,15706,15730,15734,15744,15748,15756],{"__ignoreMap":28},[52,15372,15373],{"class":54,"line":55},[52,15374,15375],{"class":332},"\u002F\u002F1. 值传递\n",[52,15377,15378,15380,15383,15385,15387,15389,15392,15394,15396],{"class":54,"line":69},[52,15379,8320],{"class":160},[52,15381,15382],{"class":58}," mySwap01",[52,15384,3121],{"class":622},[52,15386,3124],{"class":160},[52,15388,4377],{"class":8172},[52,15390,15391],{"class":622},", ",[52,15393,3124],{"class":160},[52,15395,5793],{"class":8172},[52,15397,15398],{"class":622},") {\n",[52,15400,15401,15403,15406,15408],{"class":54,"line":82},[52,15402,4947],{"class":160},[52,15404,15405],{"class":622}," temp ",[52,15407,2099],{"class":160},[52,15409,4411],{"class":622},[52,15411,15412,15415,15417],{"class":54,"line":97},[52,15413,15414],{"class":622},"    a ",[52,15416,2099],{"class":160},[52,15418,15419],{"class":622}," b;\n",[52,15421,15422,15424,15426],{"class":54,"line":112},[52,15423,15095],{"class":622},[52,15425,2099],{"class":160},[52,15427,15428],{"class":622}," temp;\n",[52,15430,15431],{"class":54,"line":119},[52,15432,4543],{"class":622},[52,15434,15435],{"class":54,"line":130},[52,15436,116],{"emptyLinePlaceholder":115},[52,15438,15439],{"class":54,"line":136},[52,15440,15441],{"class":332},"\u002F\u002F2. 地址传递\n",[52,15443,15444,15446,15449,15451,15454,15456,15458,15460,15462],{"class":54,"line":141},[52,15445,8320],{"class":160},[52,15447,15448],{"class":58}," mySwap02",[52,15450,3121],{"class":622},[52,15452,15453],{"class":160},"int*",[52,15455,4377],{"class":8172},[52,15457,15391],{"class":622},[52,15459,15453],{"class":160},[52,15461,5793],{"class":8172},[52,15463,15398],{"class":622},[52,15465,15466,15468,15470,15472,15474],{"class":54,"line":146},[52,15467,4947],{"class":160},[52,15469,15405],{"class":622},[52,15471,2099],{"class":160},[52,15473,9474],{"class":160},[52,15475,9153],{"class":622},[52,15477,15478,15480,15482,15484,15486],{"class":54,"line":152},[52,15479,9359],{"class":160},[52,15481,13875],{"class":622},[52,15483,2099],{"class":160},[52,15485,9474],{"class":160},[52,15487,9025],{"class":622},[52,15489,15490,15492,15494,15496],{"class":54,"line":157},[52,15491,9359],{"class":160},[52,15493,13901],{"class":622},[52,15495,2099],{"class":160},[52,15497,15428],{"class":622},[52,15499,15500],{"class":54,"line":173},[52,15501,4543],{"class":622},[52,15503,15504],{"class":54,"line":178},[52,15505,116],{"emptyLinePlaceholder":115},[52,15507,15508],{"class":54,"line":184},[52,15509,15510],{"class":332},"\u002F\u002F3. 引用传递\n",[52,15512,15513,15515,15518,15520,15523,15525,15527,15529,15531],{"class":54,"line":189},[52,15514,8320],{"class":160},[52,15516,15517],{"class":58}," mySwap03",[52,15519,3121],{"class":622},[52,15521,15522],{"class":160},"int&",[52,15524,4377],{"class":8172},[52,15526,15391],{"class":622},[52,15528,15522],{"class":160},[52,15530,5793],{"class":8172},[52,15532,15398],{"class":622},[52,15534,15535,15537,15539,15541],{"class":54,"line":201},[52,15536,4947],{"class":160},[52,15538,15405],{"class":622},[52,15540,2099],{"class":160},[52,15542,4411],{"class":622},[52,15544,15545,15547,15549],{"class":54,"line":206},[52,15546,15414],{"class":622},[52,15548,2099],{"class":160},[52,15550,15419],{"class":622},[52,15552,15553,15555,15557],{"class":54,"line":224},[52,15554,15095],{"class":622},[52,15556,2099],{"class":160},[52,15558,15428],{"class":622},[52,15560,15561],{"class":54,"line":229},[52,15562,4543],{"class":622},[52,15564,15565],{"class":54,"line":241},[52,15566,116],{"emptyLinePlaceholder":115},[52,15568,15569,15571,15573],{"class":54,"line":246},[52,15570,3124],{"class":160},[52,15572,4935],{"class":58},[52,15574,13809],{"class":622},[52,15576,15577],{"class":54,"line":252},[52,15578,116],{"emptyLinePlaceholder":115},[52,15580,15581,15583,15585,15587,15589],{"class":54,"line":257},[52,15582,4947],{"class":160},[52,15584,13825],{"class":622},[52,15586,2099],{"class":160},[52,15588,5000],{"class":90},[52,15590,4272],{"class":622},[52,15592,15593,15595,15597,15599,15601],{"class":54,"line":266},[52,15594,4947],{"class":160},[52,15596,13838],{"class":622},[52,15598,2099],{"class":160},[52,15600,11906],{"class":90},[52,15602,4272],{"class":622},[52,15604,15605],{"class":54,"line":4722},[52,15606,116],{"emptyLinePlaceholder":115},[52,15608,15609,15612,15615],{"class":54,"line":4727},[52,15610,15611],{"class":58},"    mySwap01",[52,15613,15614],{"class":622},"(a, b);",[52,15616,15617],{"class":332},"\u002F\u002F值传递，形参不会修饰实参\n",[52,15619,15620,15622,15624,15627,15629,15631,15633,15636,15638,15640,15642],{"class":54,"line":4741},[52,15621,9485],{"class":622},[52,15623,4155],{"class":160},[52,15625,15626],{"class":62}," \"a:\"",[52,15628,4423],{"class":160},[52,15630,13825],{"class":622},[52,15632,4155],{"class":160},[52,15634,15635],{"class":62}," \" b:\"",[52,15637,4423],{"class":160},[52,15639,13838],{"class":622},[52,15641,4155],{"class":160},[52,15643,11796],{"class":622},[52,15645,15646],{"class":54,"line":4746},[52,15647,116],{"emptyLinePlaceholder":115},[52,15649,15650,15653,15655,15657,15660,15662,15665],{"class":54,"line":5538},[52,15651,15652],{"class":58},"    mySwap02",[52,15654,3121],{"class":622},[52,15656,3466],{"class":160},[52,15658,15659],{"class":622},"a, ",[52,15661,3466],{"class":160},[52,15663,15664],{"class":622},"b);",[52,15666,15667],{"class":332},"\u002F\u002F地址传递，形参会修饰实参\n",[52,15669,15670,15672,15674,15676,15678,15680,15682,15684,15686,15688,15690],{"class":54,"line":5552},[52,15671,9485],{"class":622},[52,15673,4155],{"class":160},[52,15675,15626],{"class":62},[52,15677,4423],{"class":160},[52,15679,13825],{"class":622},[52,15681,4155],{"class":160},[52,15683,15635],{"class":62},[52,15685,4423],{"class":160},[52,15687,13838],{"class":622},[52,15689,4155],{"class":160},[52,15691,11796],{"class":622},[52,15693,15694],{"class":54,"line":5560},[52,15695,116],{"emptyLinePlaceholder":115},[52,15697,15698,15701,15703],{"class":54,"line":5565},[52,15699,15700],{"class":58},"    mySwap03",[52,15702,15614],{"class":622},[52,15704,15705],{"class":332},"\u002F\u002F引用传递，形参会修饰实参\n",[52,15707,15708,15710,15712,15714,15716,15718,15720,15722,15724,15726,15728],{"class":54,"line":5571},[52,15709,9485],{"class":622},[52,15711,4155],{"class":160},[52,15713,15626],{"class":62},[52,15715,4423],{"class":160},[52,15717,13825],{"class":622},[52,15719,4155],{"class":160},[52,15721,15635],{"class":62},[52,15723,4423],{"class":160},[52,15725,13838],{"class":622},[52,15727,4155],{"class":160},[52,15729,11796],{"class":622},[52,15731,15732],{"class":54,"line":5577},[52,15733,116],{"emptyLinePlaceholder":115},[52,15735,15736,15738,15740,15742],{"class":54,"line":5582},[52,15737,5265],{"class":58},[52,15739,3121],{"class":622},[52,15741,5270],{"class":62},[52,15743,5679],{"class":622},[52,15745,15746],{"class":54,"line":10904},[52,15747,116],{"emptyLinePlaceholder":115},[52,15749,15750,15752,15754],{"class":54,"line":10928},[52,15751,7049],{"class":160},[52,15753,7052],{"class":90},[52,15755,4272],{"class":622},[52,15757,15758],{"class":54,"line":10933},[52,15759,4543],{"class":622},[14,15761,15763],{"id":15762},"_64引用做函数的返回值","6.4引用做函数的返回值",[274,15765,15766],{},"作用：引用是可以作为函数的返回值存在的",[274,15768,11981,15769],{},[538,15770,15771],{},"不要返回局部变量引用",[274,15773,15774],{},"用法：函数调用作为左值",[19,15776,15778],{"className":12897,"code":15777,"language":12899,"meta":28,"style":28},"\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",[26,15779,15780,15785,15793,15808,15814,15818,15822,15827,15835,15852,15858,15862,15866,15874,15878,15883,15897,15917,15936,15940,15945,15958,15978,15996,16000,16016,16020,16039,16057,16061,16071,16075,16083],{"__ignoreMap":28},[52,15781,15782],{"class":54,"line":55},[52,15783,15784],{"class":332},"\u002F\u002F返回局部变量引用\n",[52,15786,15787,15789,15791],{"class":54,"line":69},[52,15788,15522],{"class":160},[52,15790,8544],{"class":58},[52,15792,13809],{"class":622},[52,15794,15795,15797,15799,15801,15803,15805],{"class":54,"line":82},[52,15796,4947],{"class":160},[52,15798,13825],{"class":622},[52,15800,2099],{"class":160},[52,15802,5000],{"class":90},[52,15804,3173],{"class":622},[52,15806,15807],{"class":332}," \u002F\u002F局部变量\n",[52,15809,15810,15812],{"class":54,"line":97},[52,15811,7049],{"class":160},[52,15813,4411],{"class":622},[52,15815,15816],{"class":54,"line":112},[52,15817,4543],{"class":622},[52,15819,15820],{"class":54,"line":119},[52,15821,116],{"emptyLinePlaceholder":115},[52,15823,15824],{"class":54,"line":130},[52,15825,15826],{"class":332},"\u002F\u002F返回静态变量引用\n",[52,15828,15829,15831,15833],{"class":54,"line":136},[52,15830,15522],{"class":160},[52,15832,8613],{"class":58},[52,15834,13809],{"class":622},[52,15836,15837,15839,15841,15843,15845,15847,15849],{"class":54,"line":141},[52,15838,13976],{"class":160},[52,15840,5344],{"class":160},[52,15842,13825],{"class":622},[52,15844,2099],{"class":160},[52,15846,11906],{"class":90},[52,15848,3173],{"class":622},[52,15850,15851],{"class":332},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[52,15853,15854,15856],{"class":54,"line":146},[52,15855,7049],{"class":160},[52,15857,4411],{"class":622},[52,15859,15860],{"class":54,"line":152},[52,15861,4543],{"class":622},[52,15863,15864],{"class":54,"line":157},[52,15865,116],{"emptyLinePlaceholder":115},[52,15867,15868,15870,15872],{"class":54,"line":173},[52,15869,3124],{"class":160},[52,15871,4935],{"class":58},[52,15873,13809],{"class":622},[52,15875,15876],{"class":54,"line":178},[52,15877,116],{"emptyLinePlaceholder":115},[52,15879,15880],{"class":54,"line":184},[52,15881,15882],{"class":332},"    \u002F\u002F不能返回局部变量的引用\n",[52,15884,15885,15888,15891,15893,15895],{"class":54,"line":189},[52,15886,15887],{"class":160},"    int&",[52,15889,15890],{"class":622}," ref ",[52,15892,2099],{"class":160},[52,15894,8544],{"class":58},[52,15896,8592],{"class":622},[52,15898,15899,15901,15903,15906,15908,15910,15912,15914],{"class":54,"line":201},[52,15900,9485],{"class":622},[52,15902,4155],{"class":160},[52,15904,15905],{"class":62}," \"ref = \"",[52,15907,4423],{"class":160},[52,15909,15890],{"class":622},[52,15911,4155],{"class":160},[52,15913,14425],{"class":622},[52,15915,15916],{"class":332},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[52,15918,15919,15921,15923,15925,15927,15929,15931,15933],{"class":54,"line":206},[52,15920,9485],{"class":622},[52,15922,4155],{"class":160},[52,15924,15905],{"class":62},[52,15926,4423],{"class":160},[52,15928,15890],{"class":622},[52,15930,4155],{"class":160},[52,15932,14425],{"class":622},[52,15934,15935],{"class":332},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[52,15937,15938],{"class":54,"line":224},[52,15939,116],{"emptyLinePlaceholder":115},[52,15941,15942],{"class":54,"line":229},[52,15943,15944],{"class":332},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[52,15946,15947,15949,15952,15954,15956],{"class":54,"line":241},[52,15948,15887],{"class":160},[52,15950,15951],{"class":622}," ref2 ",[52,15953,2099],{"class":160},[52,15955,8613],{"class":58},[52,15957,8592],{"class":622},[52,15959,15960,15962,15964,15967,15969,15971,15973,15975],{"class":54,"line":246},[52,15961,9485],{"class":622},[52,15963,4155],{"class":160},[52,15965,15966],{"class":62}," \"ref2 = \"",[52,15968,4423],{"class":160},[52,15970,15951],{"class":622},[52,15972,4155],{"class":160},[52,15974,14425],{"class":622},[52,15976,15977],{"class":332}," \u002F\u002F20\n",[52,15979,15980,15982,15984,15986,15988,15990,15992,15994],{"class":54,"line":252},[52,15981,9485],{"class":622},[52,15983,4155],{"class":160},[52,15985,15966],{"class":62},[52,15987,4423],{"class":160},[52,15989,15951],{"class":622},[52,15991,4155],{"class":160},[52,15993,14425],{"class":622},[52,15995,15977],{"class":332},[52,15997,15998],{"class":54,"line":257},[52,15999,116],{"emptyLinePlaceholder":115},[52,16001,16002,16004,16007,16009,16011,16013],{"class":54,"line":266},[52,16003,8658],{"class":58},[52,16005,16006],{"class":622},"() ",[52,16008,2099],{"class":160},[52,16010,5959],{"class":90},[52,16012,3173],{"class":622},[52,16014,16015],{"class":332},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[52,16017,16018],{"class":54,"line":4722},[52,16019,116],{"emptyLinePlaceholder":115},[52,16021,16022,16024,16026,16028,16030,16032,16034,16036],{"class":54,"line":4727},[52,16023,9485],{"class":622},[52,16025,4155],{"class":160},[52,16027,15966],{"class":62},[52,16029,4423],{"class":160},[52,16031,15951],{"class":622},[52,16033,4155],{"class":160},[52,16035,14425],{"class":622},[52,16037,16038],{"class":332}," \u002F\u002F1000\n",[52,16040,16041,16043,16045,16047,16049,16051,16053,16055],{"class":54,"line":4741},[52,16042,9485],{"class":622},[52,16044,4155],{"class":160},[52,16046,15966],{"class":62},[52,16048,4423],{"class":160},[52,16050,15951],{"class":622},[52,16052,4155],{"class":160},[52,16054,14425],{"class":622},[52,16056,16038],{"class":332},[52,16058,16059],{"class":54,"line":4746},[52,16060,116],{"emptyLinePlaceholder":115},[52,16062,16063,16065,16067,16069],{"class":54,"line":5538},[52,16064,5265],{"class":58},[52,16066,3121],{"class":622},[52,16068,5270],{"class":62},[52,16070,5679],{"class":622},[52,16072,16073],{"class":54,"line":5552},[52,16074,116],{"emptyLinePlaceholder":115},[52,16076,16077,16079,16081],{"class":54,"line":5560},[52,16078,7049],{"class":160},[52,16080,7052],{"class":90},[52,16082,4272],{"class":622},[52,16084,16085],{"class":54,"line":5565},[52,16086,4543],{"class":622},[14,16088,16090],{"id":16089},"_65引用的本质","6.5引用的本质",[274,16092,16093,16094],{},"本质：",[538,16095,16096],{},"引用的本质在c++内部实现是一个指针常量.",[19,16098,16100],{"className":3109,"code":16099,"language":3111,"meta":28,"style":28},"\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",[26,16101,16102,16107,16123,16137,16141,16150,16162,16167,16172,16183,16196,16200,16216,16233,16237,16245,16253],{"__ignoreMap":28},[52,16103,16104],{"class":54,"line":55},[52,16105,16106],{"class":332},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[52,16108,16109,16111,16113,16115,16117,16120],{"class":54,"line":69},[52,16110,8320],{"class":160},[52,16112,14341],{"class":58},[52,16114,3121],{"class":622},[52,16116,15522],{"class":160},[52,16118,16119],{"class":8172}," ref",[52,16121,16122],{"class":622},"){\n",[52,16124,16125,16128,16130,16132,16134],{"class":54,"line":82},[52,16126,16127],{"class":622},"    ref ",[52,16129,2099],{"class":160},[52,16131,8710],{"class":90},[52,16133,3173],{"class":622},[52,16135,16136],{"class":332}," \u002F\u002F ref是引用，转换为*ref = 100\n",[52,16138,16139],{"class":54,"line":97},[52,16140,4543],{"class":622},[52,16142,16143,16145,16147],{"class":54,"line":112},[52,16144,3124],{"class":160},[52,16146,4935],{"class":58},[52,16148,16149],{"class":622},"(){\n",[52,16151,16152,16154,16156,16158,16160],{"class":54,"line":119},[52,16153,4947],{"class":160},[52,16155,13825],{"class":622},[52,16157,2099],{"class":160},[52,16159,5000],{"class":90},[52,16161,4272],{"class":622},[52,16163,16164],{"class":54,"line":130},[52,16165,16166],{"class":622},"    \n",[52,16168,16169],{"class":54,"line":136},[52,16170,16171],{"class":332},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[52,16173,16174,16176,16178,16180],{"class":54,"line":141},[52,16175,15887],{"class":160},[52,16177,15890],{"class":622},[52,16179,2099],{"class":160},[52,16181,16182],{"class":622}," a; \n",[52,16184,16185,16187,16189,16191,16193],{"class":54,"line":146},[52,16186,16127],{"class":622},[52,16188,2099],{"class":160},[52,16190,11906],{"class":90},[52,16192,3173],{"class":622},[52,16194,16195],{"class":332}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[52,16197,16198],{"class":54,"line":152},[52,16199,16166],{"class":622},[52,16201,16202,16204,16206,16208,16210,16212,16214],{"class":54,"line":157},[52,16203,9485],{"class":622},[52,16205,4155],{"class":160},[52,16207,15626],{"class":62},[52,16209,4423],{"class":160},[52,16211,13825],{"class":622},[52,16213,4155],{"class":160},[52,16215,11796],{"class":622},[52,16217,16218,16220,16222,16225,16227,16229,16231],{"class":54,"line":173},[52,16219,9485],{"class":622},[52,16221,4155],{"class":160},[52,16223,16224],{"class":62}," \"ref:\"",[52,16226,4423],{"class":160},[52,16228,15890],{"class":622},[52,16230,4155],{"class":160},[52,16232,11796],{"class":622},[52,16234,16235],{"class":54,"line":178},[52,16236,16166],{"class":622},[52,16238,16239,16242],{"class":54,"line":184},[52,16240,16241],{"class":58},"    func",[52,16243,16244],{"class":622},"(a);\n",[52,16246,16247,16249,16251],{"class":54,"line":189},[52,16248,7049],{"class":160},[52,16250,7052],{"class":90},[52,16252,4272],{"class":622},[52,16254,16255],{"class":54,"line":201},[52,16256,4543],{"class":622},[274,16258,14288],{},[1070,16260,16261,16264],{},[1073,16262,16263],{},"引用的本质，就是一个指针常量",[1073,16265,16266],{},"引用一旦初始化，就不可以发生改变",[14,16268,16270],{"id":16269},"_66常量引用","6.6常量引用",[274,16272,16273],{},"作用：常量引用主要用来修饰形参",[274,16275,16276,16277,16280],{},"在函数形参列表中，可以加",[538,16278,16279],{},"const修饰形参","，防止形参改变实参",[19,16282,16284],{"className":3109,"code":16283,"language":3111,"meta":28,"style":28},"\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",[26,16285,16286,16291,16296,16315,16320,16333,16337,16341,16349,16353,16358,16363,16377,16381,16389,16401,16405,16410,16422,16429,16433,16443,16447,16455],{"__ignoreMap":28},[52,16287,16288],{"class":54,"line":55},[52,16289,16290],{"class":332},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[52,16292,16293],{"class":54,"line":69},[52,16294,16295],{"class":332},"\u002F\u002F加上const就不能修改实参的\n",[52,16297,16298,16300,16303,16305,16307,16310,16313],{"class":54,"line":82},[52,16299,8320],{"class":160},[52,16301,16302],{"class":58}," showValue",[52,16304,3121],{"class":622},[52,16306,9748],{"class":160},[52,16308,16309],{"class":160}," int&",[52,16311,16312],{"class":8172}," v",[52,16314,15398],{"class":622},[52,16316,16317],{"class":54,"line":97},[52,16318,16319],{"class":332},"    \u002F\u002Fv += 100;\n",[52,16321,16322,16324,16326,16329,16331],{"class":54,"line":112},[52,16323,9485],{"class":622},[52,16325,4155],{"class":160},[52,16327,16328],{"class":622}," v ",[52,16330,4155],{"class":160},[52,16332,11796],{"class":622},[52,16334,16335],{"class":54,"line":119},[52,16336,4543],{"class":622},[52,16338,16339],{"class":54,"line":130},[52,16340,116],{"emptyLinePlaceholder":115},[52,16342,16343,16345,16347],{"class":54,"line":136},[52,16344,3124],{"class":160},[52,16346,4935],{"class":58},[52,16348,13809],{"class":622},[52,16350,16351],{"class":54,"line":141},[52,16352,116],{"emptyLinePlaceholder":115},[52,16354,16355],{"class":54,"line":146},[52,16356,16357],{"class":332},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[52,16359,16360],{"class":54,"line":152},[52,16361,16362],{"class":332},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[52,16364,16365,16367,16369,16371,16373,16375],{"class":54,"line":157},[52,16366,14177],{"class":160},[52,16368,16309],{"class":160},[52,16370,15890],{"class":622},[52,16372,2099],{"class":160},[52,16374,5000],{"class":90},[52,16376,4272],{"class":622},[52,16378,16379],{"class":54,"line":173},[52,16380,116],{"emptyLinePlaceholder":115},[52,16382,16383,16386],{"class":54,"line":178},[52,16384,16385],{"class":332},"    \u002F\u002Fref = 100;",[52,16387,16388],{"class":332},"  \u002F\u002F加入const后不可以修改变量\n",[52,16390,16391,16393,16395,16397,16399],{"class":54,"line":184},[52,16392,9485],{"class":622},[52,16394,4155],{"class":160},[52,16396,15890],{"class":622},[52,16398,4155],{"class":160},[52,16400,11796],{"class":622},[52,16402,16403],{"class":54,"line":189},[52,16404,116],{"emptyLinePlaceholder":115},[52,16406,16407],{"class":54,"line":201},[52,16408,16409],{"class":332},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[52,16411,16412,16414,16416,16418,16420],{"class":54,"line":206},[52,16413,4947],{"class":160},[52,16415,13825],{"class":622},[52,16417,2099],{"class":160},[52,16419,5000],{"class":90},[52,16421,4272],{"class":622},[52,16423,16424,16427],{"class":54,"line":224},[52,16425,16426],{"class":58},"    showValue",[52,16428,16244],{"class":622},[52,16430,16431],{"class":54,"line":229},[52,16432,116],{"emptyLinePlaceholder":115},[52,16434,16435,16437,16439,16441],{"class":54,"line":241},[52,16436,5265],{"class":58},[52,16438,3121],{"class":622},[52,16440,5270],{"class":62},[52,16442,5679],{"class":622},[52,16444,16445],{"class":54,"line":246},[52,16446,116],{"emptyLinePlaceholder":115},[52,16448,16449,16451,16453],{"class":54,"line":252},[52,16450,7049],{"class":160},[52,16452,7052],{"class":90},[52,16454,4272],{"class":622},[52,16456,16457],{"class":54,"line":257},[52,16458,4543],{"class":622},[3015,16460,16461],{},"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":28,"searchDepth":69,"depth":69,"links":16463},[16464,16465,16466,16467,16468,16469],{"id":14996,"depth":69,"text":14997},{"id":15175,"depth":69,"text":15176},{"id":15358,"depth":69,"text":15359},{"id":15762,"depth":69,"text":15763},{"id":16089,"depth":69,"text":16090},{"id":16269,"depth":69,"text":16270},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14988,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":16476,"title":16477,"body":16478,"description":28,"extension":3047,"meta":17559,"navigation":115,"path":17560,"seo":17561,"stem":17562,"__hash__":17563},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":16479,"toc":17551},[16480,16483,16487,16490,16495,16727,16729,16740,16744,16747,16755,16859,16862,16866,16869,16873,16876,16881,16903,16909,17236,17239,17243,17251,17548],[10,16481,16477],{"id":16482},"_7函数高级部分",[14,16484,16486],{"id":16485},"_71函数默认参数","7.1函数默认参数",[274,16488,16489],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[274,16491,8140,16492],{},[26,16493,16494],{}," 返回值类型  函数名 （参数= 默认值）{}",[19,16496,16498],{"className":3109,"code":16497,"language":3111,"meta":28,"style":28},"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",[26,16499,16500,16535,16550,16554,16558,16563,16568,16597,16617,16627,16631,16635,16643,16647,16675,16697,16701,16711,16715,16723],{"__ignoreMap":28},[52,16501,16502,16504,16506,16508,16510,16512,16514,16516,16518,16521,16523,16525,16527,16529,16531,16533],{"class":54,"line":55},[52,16503,3124],{"class":160},[52,16505,14341],{"class":58},[52,16507,3121],{"class":622},[52,16509,3124],{"class":160},[52,16511,4377],{"class":8172},[52,16513,15391],{"class":622},[52,16515,3124],{"class":160},[52,16517,5793],{"class":8172},[52,16519,16520],{"class":160}," =",[52,16522,5000],{"class":90},[52,16524,15391],{"class":622},[52,16526,3124],{"class":160},[52,16528,5809],{"class":8172},[52,16530,16520],{"class":160},[52,16532,5000],{"class":90},[52,16534,15398],{"class":622},[52,16536,16537,16539,16541,16543,16545,16547],{"class":54,"line":69},[52,16538,7049],{"class":160},[52,16540,13825],{"class":622},[52,16542,3593],{"class":160},[52,16544,13838],{"class":622},[52,16546,3593],{"class":160},[52,16548,16549],{"class":622}," c;\n",[52,16551,16552],{"class":54,"line":82},[52,16553,4543],{"class":622},[52,16555,16556],{"class":54,"line":97},[52,16557,116],{"emptyLinePlaceholder":115},[52,16559,16560],{"class":54,"line":112},[52,16561,16562],{"class":332},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[52,16564,16565],{"class":54,"line":119},[52,16566,16567],{"class":332},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[52,16569,16570,16572,16575,16577,16579,16581,16583,16585,16587,16589,16591,16593,16595],{"class":54,"line":130},[52,16571,3124],{"class":160},[52,16573,16574],{"class":58}," func2",[52,16576,3121],{"class":622},[52,16578,3124],{"class":160},[52,16580,4377],{"class":8172},[52,16582,16520],{"class":160},[52,16584,5000],{"class":90},[52,16586,15391],{"class":622},[52,16588,3124],{"class":160},[52,16590,5793],{"class":8172},[52,16592,16520],{"class":160},[52,16594,5000],{"class":90},[52,16596,5679],{"class":622},[52,16598,16599,16601,16603,16605,16607,16609,16611,16613,16615],{"class":54,"line":136},[52,16600,3124],{"class":160},[52,16602,16574],{"class":58},[52,16604,3121],{"class":622},[52,16606,3124],{"class":160},[52,16608,4377],{"class":8172},[52,16610,15391],{"class":622},[52,16612,3124],{"class":160},[52,16614,5793],{"class":8172},[52,16616,15398],{"class":622},[52,16618,16619,16621,16623,16625],{"class":54,"line":141},[52,16620,7049],{"class":160},[52,16622,13825],{"class":622},[52,16624,3593],{"class":160},[52,16626,15419],{"class":622},[52,16628,16629],{"class":54,"line":146},[52,16630,4543],{"class":622},[52,16632,16633],{"class":54,"line":152},[52,16634,116],{"emptyLinePlaceholder":115},[52,16636,16637,16639,16641],{"class":54,"line":157},[52,16638,3124],{"class":160},[52,16640,4935],{"class":58},[52,16642,13809],{"class":622},[52,16644,16645],{"class":54,"line":173},[52,16646,116],{"emptyLinePlaceholder":115},[52,16648,16649,16651,16653,16656,16658,16660,16662,16664,16666,16668,16671,16673],{"class":54,"line":178},[52,16650,9485],{"class":622},[52,16652,4155],{"class":160},[52,16654,16655],{"class":62}," \"ret = \"",[52,16657,4423],{"class":160},[52,16659,14341],{"class":58},[52,16661,3121],{"class":622},[52,16663,3812],{"class":90},[52,16665,15391],{"class":622},[52,16667,3812],{"class":90},[52,16669,16670],{"class":622},") ",[52,16672,4155],{"class":160},[52,16674,11796],{"class":622},[52,16676,16677,16679,16681,16683,16685,16687,16689,16691,16693,16695],{"class":54,"line":184},[52,16678,9485],{"class":622},[52,16680,4155],{"class":160},[52,16682,16655],{"class":62},[52,16684,4423],{"class":160},[52,16686,14341],{"class":58},[52,16688,3121],{"class":622},[52,16690,3424],{"class":90},[52,16692,16670],{"class":622},[52,16694,4155],{"class":160},[52,16696,11796],{"class":622},[52,16698,16699],{"class":54,"line":189},[52,16700,116],{"emptyLinePlaceholder":115},[52,16702,16703,16705,16707,16709],{"class":54,"line":201},[52,16704,5265],{"class":58},[52,16706,3121],{"class":622},[52,16708,5270],{"class":62},[52,16710,5679],{"class":622},[52,16712,16713],{"class":54,"line":206},[52,16714,116],{"emptyLinePlaceholder":115},[52,16716,16717,16719,16721],{"class":54,"line":224},[52,16718,7049],{"class":160},[52,16720,7052],{"class":90},[52,16722,4272],{"class":622},[52,16724,16725],{"class":54,"line":229},[52,16726,4543],{"class":622},[274,16728,14288],{},[1070,16730,16731,16734,16737],{},[1073,16732,16733],{},"我传就用我；没传就用你",[1073,16735,16736],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[1073,16738,16739],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16741,16743],{"id":16742},"_72函数的占位参数","7.2函数的占位参数",[274,16745,16746],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[274,16748,16749,16751,16752],{},[538,16750,8140],{}," ",[26,16753,16754],{},"返回值类型 函数名 (数据类型){}",[19,16756,16758],{"className":3109,"code":16757,"language":3111,"meta":28,"style":28},"\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",[26,16759,16760,16765,16783,16796,16800,16808,16812,16829,16833,16843,16847,16855],{"__ignoreMap":28},[52,16761,16762],{"class":54,"line":55},[52,16763,16764],{"class":332},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[52,16766,16767,16769,16771,16773,16775,16777,16779,16781],{"class":54,"line":69},[52,16768,8320],{"class":160},[52,16770,14341],{"class":58},[52,16772,3121],{"class":622},[52,16774,3124],{"class":160},[52,16776,4377],{"class":8172},[52,16778,15391],{"class":622},[52,16780,3124],{"class":160},[52,16782,15398],{"class":622},[52,16784,16785,16787,16789,16792,16794],{"class":54,"line":82},[52,16786,9485],{"class":622},[52,16788,4155],{"class":160},[52,16790,16791],{"class":62}," \"this is func\"",[52,16793,4423],{"class":160},[52,16795,11796],{"class":622},[52,16797,16798],{"class":54,"line":97},[52,16799,4543],{"class":622},[52,16801,16802,16804,16806],{"class":54,"line":112},[52,16803,3124],{"class":160},[52,16805,4935],{"class":58},[52,16807,13809],{"class":622},[52,16809,16810],{"class":54,"line":119},[52,16811,116],{"emptyLinePlaceholder":115},[52,16813,16814,16816,16818,16820,16822,16824,16826],{"class":54,"line":130},[52,16815,16241],{"class":58},[52,16817,3121],{"class":622},[52,16819,3559],{"class":90},[52,16821,3491],{"class":622},[52,16823,3559],{"class":90},[52,16825,8922],{"class":622},[52,16827,16828],{"class":332}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[52,16830,16831],{"class":54,"line":136},[52,16832,116],{"emptyLinePlaceholder":115},[52,16834,16835,16837,16839,16841],{"class":54,"line":141},[52,16836,5265],{"class":58},[52,16838,3121],{"class":622},[52,16840,5270],{"class":62},[52,16842,5679],{"class":622},[52,16844,16845],{"class":54,"line":146},[52,16846,116],{"emptyLinePlaceholder":115},[52,16848,16849,16851,16853],{"class":54,"line":152},[52,16850,7049],{"class":160},[52,16852,7052],{"class":90},[52,16854,4272],{"class":622},[52,16856,16857],{"class":54,"line":157},[52,16858,4543],{"class":622},[274,16860,16861],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16863,16865],{"id":16864},"_73函数重载","7.3函数重载",[274,16867,16868],{},"意思是函数名是可以相同的",[30,16870,16872],{"id":16871},"_731基本语法","7.3.1基本语法",[274,16874,16875],{},"作用：函数名可以相同，提高复用性",[274,16877,16878],{},[538,16879,16880],{},"函数重载满足条件：",[4118,16882,16883,16886,16889],{},[1073,16884,16885],{},"同一个作用域下",[1073,16887,16888],{},"函数名称相同",[1073,16890,16891,16892,16895,16896,16899,16900],{},"函数参数",[538,16893,16894],{},"类型不同","  或者 ",[538,16897,16898],{},"个数不同"," 或者 ",[538,16901,16902],{},"顺序不同",[274,16904,16905,16908],{},[538,16906,16907],{},"注意:","  函数的返回值不可以作为函数重载的条件",[19,16910,16912],{"className":12897,"code":16911,"language":12899,"meta":28,"style":28},"\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",[26,16913,16914,16919,16927,16931,16944,16948,16962,16966,16979,16983,16998,17002,17015,17019,17040,17044,17057,17061,17081,17085,17098,17102,17106,17111,17116,17121,17126,17131,17135,17139,17147,17151,17157,17167,17177,17191,17206,17210,17220,17224,17232],{"__ignoreMap":28},[52,16915,16916],{"class":54,"line":55},[52,16917,16918],{"class":332},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[52,16920,16921,16923,16925],{"class":54,"line":69},[52,16922,8320],{"class":160},[52,16924,14341],{"class":58},[52,16926,4938],{"class":622},[52,16928,16929],{"class":54,"line":82},[52,16930,4524],{"class":622},[52,16932,16933,16935,16937,16940,16942],{"class":54,"line":97},[52,16934,9485],{"class":622},[52,16936,4155],{"class":160},[52,16938,16939],{"class":62}," \"func 的调用！\"",[52,16941,4423],{"class":160},[52,16943,11796],{"class":622},[52,16945,16946],{"class":54,"line":112},[52,16947,4543],{"class":622},[52,16949,16950,16952,16954,16956,16958,16960],{"class":54,"line":119},[52,16951,8320],{"class":160},[52,16953,14341],{"class":58},[52,16955,3121],{"class":622},[52,16957,3124],{"class":160},[52,16959,4377],{"class":8172},[52,16961,170],{"class":622},[52,16963,16964],{"class":54,"line":130},[52,16965,4524],{"class":622},[52,16967,16968,16970,16972,16975,16977],{"class":54,"line":136},[52,16969,9485],{"class":622},[52,16971,4155],{"class":160},[52,16973,16974],{"class":62}," \"func (int a) 的调用！\"",[52,16976,4423],{"class":160},[52,16978,11796],{"class":622},[52,16980,16981],{"class":54,"line":141},[52,16982,4543],{"class":622},[52,16984,16985,16987,16989,16991,16994,16996],{"class":54,"line":146},[52,16986,8320],{"class":160},[52,16988,14341],{"class":58},[52,16990,3121],{"class":622},[52,16992,16993],{"class":160},"double",[52,16995,4377],{"class":8172},[52,16997,170],{"class":622},[52,16999,17000],{"class":54,"line":152},[52,17001,4524],{"class":622},[52,17003,17004,17006,17008,17011,17013],{"class":54,"line":157},[52,17005,9485],{"class":622},[52,17007,4155],{"class":160},[52,17009,17010],{"class":62}," \"func (double a)的调用！\"",[52,17012,4423],{"class":160},[52,17014,11796],{"class":622},[52,17016,17017],{"class":54,"line":173},[52,17018,4543],{"class":622},[52,17020,17021,17023,17025,17027,17029,17031,17034,17036,17038],{"class":54,"line":178},[52,17022,8320],{"class":160},[52,17024,14341],{"class":58},[52,17026,3121],{"class":622},[52,17028,3124],{"class":160},[52,17030,4377],{"class":8172},[52,17032,17033],{"class":622}," ,",[52,17035,16993],{"class":160},[52,17037,5793],{"class":8172},[52,17039,170],{"class":622},[52,17041,17042],{"class":54,"line":184},[52,17043,4524],{"class":622},[52,17045,17046,17048,17050,17053,17055],{"class":54,"line":189},[52,17047,9485],{"class":622},[52,17049,4155],{"class":160},[52,17051,17052],{"class":62}," \"func (int a ,double b) 的调用！\"",[52,17054,4423],{"class":160},[52,17056,11796],{"class":622},[52,17058,17059],{"class":54,"line":201},[52,17060,4543],{"class":622},[52,17062,17063,17065,17067,17069,17071,17073,17075,17077,17079],{"class":54,"line":206},[52,17064,8320],{"class":160},[52,17066,14341],{"class":58},[52,17068,3121],{"class":622},[52,17070,16993],{"class":160},[52,17072,4377],{"class":8172},[52,17074,17033],{"class":622},[52,17076,3124],{"class":160},[52,17078,5793],{"class":8172},[52,17080,170],{"class":622},[52,17082,17083],{"class":54,"line":224},[52,17084,4524],{"class":622},[52,17086,17087,17089,17091,17094,17096],{"class":54,"line":229},[52,17088,9485],{"class":622},[52,17090,4155],{"class":160},[52,17092,17093],{"class":62}," \"func (double a ,int b)的调用！\"",[52,17095,4423],{"class":160},[52,17097,11796],{"class":622},[52,17099,17100],{"class":54,"line":241},[52,17101,4543],{"class":622},[52,17103,17104],{"class":54,"line":246},[52,17105,116],{"emptyLinePlaceholder":115},[52,17107,17108],{"class":54,"line":252},[52,17109,17110],{"class":332},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[52,17112,17113],{"class":54,"line":257},[52,17114,17115],{"class":332},"\u002F\u002Fint func(double a, int b)\n",[52,17117,17118],{"class":54,"line":266},[52,17119,17120],{"class":332},"\u002F\u002F{\n",[52,17122,17123],{"class":54,"line":4722},[52,17124,17125],{"class":332},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[52,17127,17128],{"class":54,"line":4727},[52,17129,17130],{"class":332},"\u002F\u002F}\n",[52,17132,17133],{"class":54,"line":4741},[52,17134,116],{"emptyLinePlaceholder":115},[52,17136,17137],{"class":54,"line":4746},[52,17138,116],{"emptyLinePlaceholder":115},[52,17140,17141,17143,17145],{"class":54,"line":5538},[52,17142,3124],{"class":160},[52,17144,4935],{"class":58},[52,17146,13809],{"class":622},[52,17148,17149],{"class":54,"line":5552},[52,17150,116],{"emptyLinePlaceholder":115},[52,17152,17153,17155],{"class":54,"line":5560},[52,17154,16241],{"class":58},[52,17156,8592],{"class":622},[52,17158,17159,17161,17163,17165],{"class":54,"line":5565},[52,17160,16241],{"class":58},[52,17162,3121],{"class":622},[52,17164,3559],{"class":90},[52,17166,5679],{"class":622},[52,17168,17169,17171,17173,17175],{"class":54,"line":5571},[52,17170,16241],{"class":58},[52,17172,3121],{"class":622},[52,17174,3167],{"class":90},[52,17176,5679],{"class":622},[52,17178,17179,17181,17183,17185,17187,17189],{"class":54,"line":5577},[52,17180,16241],{"class":58},[52,17182,3121],{"class":622},[52,17184,3559],{"class":90},[52,17186,3491],{"class":622},[52,17188,3167],{"class":90},[52,17190,5679],{"class":622},[52,17192,17193,17195,17197,17199,17202,17204],{"class":54,"line":5582},[52,17194,16241],{"class":58},[52,17196,3121],{"class":622},[52,17198,3167],{"class":90},[52,17200,17201],{"class":622}," , ",[52,17203,3559],{"class":90},[52,17205,5679],{"class":622},[52,17207,17208],{"class":54,"line":10904},[52,17209,16166],{"class":622},[52,17211,17212,17214,17216,17218],{"class":54,"line":10928},[52,17213,5265],{"class":58},[52,17215,3121],{"class":622},[52,17217,5270],{"class":62},[52,17219,5679],{"class":622},[52,17221,17222],{"class":54,"line":10933},[52,17223,116],{"emptyLinePlaceholder":115},[52,17225,17226,17228,17230],{"class":54,"line":10939},[52,17227,7049],{"class":160},[52,17229,7052],{"class":90},[52,17231,4272],{"class":622},[52,17233,17234],{"class":54,"line":10966},[52,17235,4543],{"class":622},[274,17237,17238],{},"重点：函数返回值不可以作为函数重载条件！",[30,17240,17242],{"id":17241},"_732注意事项","7.3.2注意事项",[4118,17244,17245,17248],{},[1073,17246,17247],{},"引用作为重载条件!!!",[1073,17249,17250],{},"函数重载碰到函数默认参数",[19,17252,17254],{"className":3109,"code":17253,"language":3111,"meta":28,"style":28},"\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",[26,17255,17256,17261,17266,17270,17286,17290,17303,17307,17311,17329,17333,17346,17350,17354,17358,17363,17367,17391,17395,17408,17412,17416,17430,17434,17447,17451,17455,17463,17467,17479,17489,17502,17506,17510,17518,17522,17532,17536,17544],{"__ignoreMap":28},[52,17257,17258],{"class":54,"line":55},[52,17259,17260],{"class":332},"\u002F\u002F函数重载注意事项\n",[52,17262,17263],{"class":54,"line":69},[52,17264,17265],{"class":332},"\u002F\u002F1、引用作为重载条件\n",[52,17267,17268],{"class":54,"line":82},[52,17269,116],{"emptyLinePlaceholder":115},[52,17271,17272,17274,17276,17278,17280,17282,17284],{"class":54,"line":97},[52,17273,8320],{"class":160},[52,17275,14341],{"class":58},[52,17277,3121],{"class":622},[52,17279,3124],{"class":160},[52,17281,13540],{"class":160},[52,17283,300],{"class":8172},[52,17285,170],{"class":622},[52,17287,17288],{"class":54,"line":112},[52,17289,4524],{"class":622},[52,17291,17292,17294,17296,17299,17301],{"class":54,"line":119},[52,17293,9485],{"class":622},[52,17295,4155],{"class":160},[52,17297,17298],{"class":62}," \"func (int &a) 调用 \"",[52,17300,4423],{"class":160},[52,17302,11796],{"class":622},[52,17304,17305],{"class":54,"line":130},[52,17306,4543],{"class":622},[52,17308,17309],{"class":54,"line":136},[52,17310,116],{"emptyLinePlaceholder":115},[52,17312,17313,17315,17317,17319,17321,17323,17325,17327],{"class":54,"line":141},[52,17314,8320],{"class":160},[52,17316,14341],{"class":58},[52,17318,3121],{"class":622},[52,17320,9748],{"class":160},[52,17322,5344],{"class":160},[52,17324,13540],{"class":160},[52,17326,300],{"class":8172},[52,17328,170],{"class":622},[52,17330,17331],{"class":54,"line":146},[52,17332,4524],{"class":622},[52,17334,17335,17337,17339,17342,17344],{"class":54,"line":152},[52,17336,9485],{"class":622},[52,17338,4155],{"class":160},[52,17340,17341],{"class":62}," \"func (const int &a) 调用 \"",[52,17343,4423],{"class":160},[52,17345,11796],{"class":622},[52,17347,17348],{"class":54,"line":157},[52,17349,4543],{"class":622},[52,17351,17352],{"class":54,"line":173},[52,17353,116],{"emptyLinePlaceholder":115},[52,17355,17356],{"class":54,"line":178},[52,17357,116],{"emptyLinePlaceholder":115},[52,17359,17360],{"class":54,"line":184},[52,17361,17362],{"class":332},"\u002F\u002F2、函数重载碰到函数默认参数\n",[52,17364,17365],{"class":54,"line":189},[52,17366,116],{"emptyLinePlaceholder":115},[52,17368,17369,17371,17373,17375,17377,17379,17381,17383,17385,17387,17389],{"class":54,"line":201},[52,17370,8320],{"class":160},[52,17372,16574],{"class":58},[52,17374,3121],{"class":622},[52,17376,3124],{"class":160},[52,17378,4377],{"class":8172},[52,17380,15391],{"class":622},[52,17382,3124],{"class":160},[52,17384,5793],{"class":8172},[52,17386,16520],{"class":160},[52,17388,5000],{"class":90},[52,17390,170],{"class":622},[52,17392,17393],{"class":54,"line":206},[52,17394,4524],{"class":622},[52,17396,17397,17399,17401,17404,17406],{"class":54,"line":224},[52,17398,9485],{"class":622},[52,17400,4155],{"class":160},[52,17402,17403],{"class":62}," \"func2(int a, int b = 10) 调用\"",[52,17405,4423],{"class":160},[52,17407,11796],{"class":622},[52,17409,17410],{"class":54,"line":229},[52,17411,4543],{"class":622},[52,17413,17414],{"class":54,"line":241},[52,17415,116],{"emptyLinePlaceholder":115},[52,17417,17418,17420,17422,17424,17426,17428],{"class":54,"line":246},[52,17419,8320],{"class":160},[52,17421,16574],{"class":58},[52,17423,3121],{"class":622},[52,17425,3124],{"class":160},[52,17427,4377],{"class":8172},[52,17429,170],{"class":622},[52,17431,17432],{"class":54,"line":252},[52,17433,4524],{"class":622},[52,17435,17436,17438,17440,17443,17445],{"class":54,"line":257},[52,17437,9485],{"class":622},[52,17439,4155],{"class":160},[52,17441,17442],{"class":62}," \"func2(int a) 调用\"",[52,17444,4423],{"class":160},[52,17446,11796],{"class":622},[52,17448,17449],{"class":54,"line":266},[52,17450,4543],{"class":622},[52,17452,17453],{"class":54,"line":4722},[52,17454,116],{"emptyLinePlaceholder":115},[52,17456,17457,17459,17461],{"class":54,"line":4727},[52,17458,3124],{"class":160},[52,17460,4935],{"class":58},[52,17462,13809],{"class":622},[52,17464,17465],{"class":54,"line":4741},[52,17466,16166],{"class":622},[52,17468,17469,17471,17473,17475,17477],{"class":54,"line":4746},[52,17470,4947],{"class":160},[52,17472,13825],{"class":622},[52,17474,2099],{"class":160},[52,17476,5000],{"class":90},[52,17478,4272],{"class":622},[52,17480,17481,17483,17486],{"class":54,"line":5538},[52,17482,16241],{"class":58},[52,17484,17485],{"class":622},"(a);",[52,17487,17488],{"class":332}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[52,17490,17491,17493,17495,17497,17499],{"class":54,"line":5552},[52,17492,16241],{"class":58},[52,17494,3121],{"class":622},[52,17496,3559],{"class":90},[52,17498,8922],{"class":622},[52,17500,17501],{"class":332},"\u002F\u002F调用有const   10是个常量\n",[52,17503,17504],{"class":54,"line":5560},[52,17505,116],{"emptyLinePlaceholder":115},[52,17507,17508],{"class":54,"line":5565},[52,17509,116],{"emptyLinePlaceholder":115},[52,17511,17512,17515],{"class":54,"line":5571},[52,17513,17514],{"class":332},"    \u002F\u002Ffunc2(10);",[52,17516,17517],{"class":332}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[52,17519,17520],{"class":54,"line":5577},[52,17521,116],{"emptyLinePlaceholder":115},[52,17523,17524,17526,17528,17530],{"class":54,"line":5582},[52,17525,5265],{"class":58},[52,17527,3121],{"class":622},[52,17529,5270],{"class":62},[52,17531,5679],{"class":622},[52,17533,17534],{"class":54,"line":10904},[52,17535,116],{"emptyLinePlaceholder":115},[52,17537,17538,17540,17542],{"class":54,"line":10928},[52,17539,7049],{"class":160},[52,17541,7052],{"class":90},[52,17543,4272],{"class":622},[52,17545,17546],{"class":54,"line":10933},[52,17547,4543],{"class":622},[3015,17549,17550],{},"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":28,"searchDepth":69,"depth":69,"links":17552},[17553,17554,17555],{"id":16485,"depth":69,"text":16486},{"id":16742,"depth":69,"text":16743},{"id":16864,"depth":69,"text":16865,"children":17556},[17557,17558],{"id":16871,"depth":82,"text":16872},{"id":17241,"depth":82,"text":17242},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":16477,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":17565,"title":17566,"body":17567,"description":26318,"extension":3047,"meta":26319,"navigation":115,"path":26320,"seo":26321,"stem":26322,"__hash__":26323},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":17568,"toc":26299},[17569,17572,17578,17585,17590,17593,17596,17599,17603,17607,17610,17613,17621,17626,17629,17636,17641,17800,17803,18056,18059,18062,18065,18070,18073,18076,18087,18092,18328,18332,18342,18345,18353,18500,18504,18507,18510,18514,18959,18963,18971,18979,19891,19898,19903,20531,20534,20537,20540,20659,20662,20749,20752,20878,20881,20975,20978,21331,21335,21343,21347,21354,21357,21360,21370,21376,21381,21393,21401,21421,21429,21446,21632,21635,21639,21642,21645,21648,21651,21654,21657,21660,22120,22126,22130,22133,22144,22731,22734,23223,23227,23230,23233,23236,23239,23242,23250,23646,23650,23653,23656,24103,24106,24109,24114,24117,24122,24125,24129,24132,24134,24140,24143,24449,24459,24500,24504,24507,24509,24542,24545,24852,24854,24869,24872,24895,24904,24910,24913,24917,24920,24923,24928,24939,24944,24952,24956,25086,25089,25092,25267,25272,25484,25488,25491,25605,25610,25849,25853,25857,25860,25863,25867,25972,25975,25978,25981,25985,26096,26099,26102,26107,26159,26162,26165,26170,26216,26219,26224,26292,26294,26297],[10,17570,17566],{"id":17571},"_8类和对象",[274,17573,17574,17575],{},"C++面向对象的三大特性为",[538,17576,17577],{},"封装、继承、多态",[274,17579,17580,17581,17584],{},"C++认为",[538,17582,17583],{},"万事万物都皆为对象","，对象上有其属性和行为",[274,17586,17587],{},[538,17588,17589],{},"例如：",[274,17591,17592],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[274,17594,17595],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[274,17597,17598],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,17600,17602],{"id":17601},"_81封装","8.1封装",[30,17604,17606],{"id":17605},"_811封装的意义","8.1.1封装的意义",[274,17608,17609],{},"封装是C++面向对象三大特性之一",[274,17611,17612],{},"封装的意义：",[4118,17614,17615,17618],{},[1073,17616,17617],{},"将属性和行为作为一个整体，表现生活中的事物",[1073,17619,17620],{},"将属性和行为加以权限控制",[274,17622,17623],{},[538,17624,17625],{},"封装意义一：",[274,17627,17628],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[274,17630,17631,16751,17633],{},[538,17632,8140],{},[26,17634,17635],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1070,17637,17638],{},[1073,17639,17640],{},"**示例1：**设计一个圆类，求圆的周长",[19,17642,17644],{"className":3109,"code":17643,"language":3111,"meta":28,"style":28},"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",[26,17645,17646,17654,17658,17663,17668,17673,17678,17685,17690,17700,17704,17722,17726,17730,17738,17742,17747,17752,17757,17762,17773,17796],{"__ignoreMap":28},[52,17647,17648,17651],{"class":54,"line":55},[52,17649,17650],{"class":160},"class",[52,17652,17653],{"class":58}," Circle\n",[52,17655,17656],{"class":54,"line":69},[52,17657,4524],{"class":622},[52,17659,17660],{"class":54,"line":82},[52,17661,17662],{"class":332},"    \u002F\u002F访问权限\n",[52,17664,17665],{"class":54,"line":97},[52,17666,17667],{"class":332},"    \u002F\u002F公共权限\n",[52,17669,17670],{"class":54,"line":112},[52,17671,17672],{"class":160},"public:\n",[52,17674,17675],{"class":54,"line":119},[52,17676,17677],{"class":332},"    \u002F\u002F属性\n",[52,17679,17680,17682],{"class":54,"line":130},[52,17681,4947],{"class":160},[52,17683,17684],{"class":622}," m_r;\n",[52,17686,17687],{"class":54,"line":136},[52,17688,17689],{"class":332},"    \u002F\u002F行为\n",[52,17691,17692,17695,17698],{"class":54,"line":141},[52,17693,17694],{"class":160},"    double",[52,17696,17697],{"class":58}," calculateZC",[52,17699,4938],{"class":622},[52,17701,17702],{"class":54,"line":146},[52,17703,4992],{"class":622},[52,17705,17706,17709,17712,17714,17717,17719],{"class":54,"line":152},[52,17707,17708],{"class":160},"        return",[52,17710,17711],{"class":90}," 2",[52,17713,1095],{"class":160},[52,17715,17716],{"class":622},"PI",[52,17718,1095],{"class":160},[52,17720,17721],{"class":622},"m_r;\n",[52,17723,17724],{"class":54,"line":157},[52,17725,5149],{"class":622},[52,17727,17728],{"class":54,"line":173},[52,17729,6954],{"class":622},[52,17731,17732,17734,17736],{"class":54,"line":178},[52,17733,3124],{"class":160},[52,17735,4935],{"class":58},[52,17737,4938],{"class":622},[52,17739,17740],{"class":54,"line":184},[52,17741,4524],{"class":622},[52,17743,17744],{"class":54,"line":189},[52,17745,17746],{"class":332},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[52,17748,17749],{"class":54,"line":201},[52,17750,17751],{"class":332},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[52,17753,17754],{"class":54,"line":206},[52,17755,17756],{"class":622},"    Circle c1;\n",[52,17758,17759],{"class":54,"line":224},[52,17760,17761],{"class":332},"    \u002F\u002F给圆对象 的属性进行赋值\n",[52,17763,17764,17767,17769,17771],{"class":54,"line":229},[52,17765,17766],{"class":622},"    c1.m_r",[52,17768,2099],{"class":160},[52,17770,3559],{"class":90},[52,17772,4272],{"class":622},[52,17774,17775,17777,17779,17782,17784,17787,17790,17792,17794],{"class":54,"line":241},[52,17776,4529],{"class":622},[52,17778,4155],{"class":160},[52,17780,17781],{"class":62},"\"圆的周长\"",[52,17783,4155],{"class":160},[52,17785,17786],{"class":622},"c1.",[52,17788,17789],{"class":58},"calculateZC",[52,17791,5388],{"class":622},[52,17793,4155],{"class":160},[52,17795,4177],{"class":622},[52,17797,17798],{"class":54,"line":246},[52,17799,4543],{"class":622},[274,17801,17802],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[19,17804,17806],{"className":3109,"code":17805,"language":3111,"meta":28,"style":28},"#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",[26,17807,17808,17814,17824,17830,17836,17840,17844,17849,17856,17861,17879,17883,17893,17897,17902,17918,17922,17932,17936,17941,17949,17953,17985,17989,17993,18001,18005,18010,18015,18029,18043,18052],{"__ignoreMap":28},[52,17809,17810,17812],{"class":54,"line":55},[52,17811,4912],{"class":160},[52,17813,4915],{"class":62},[52,17815,17816,17818,17820,17822],{"class":54,"line":69},[52,17817,4920],{"class":160},[52,17819,4923],{"class":160},[52,17821,4926],{"class":58},[52,17823,4272],{"class":622},[52,17825,17826,17828],{"class":54,"line":82},[52,17827,4912],{"class":160},[52,17829,10705],{"class":62},[52,17831,17832,17834],{"class":54,"line":97},[52,17833,17650],{"class":160},[52,17835,10718],{"class":58},[52,17837,17838],{"class":54,"line":112},[52,17839,4524],{"class":622},[52,17841,17842],{"class":54,"line":119},[52,17843,17672],{"class":160},[52,17845,17846],{"class":54,"line":130},[52,17847,17848],{"class":622},"    string m_name;\n",[52,17850,17851,17853],{"class":54,"line":136},[52,17852,4947],{"class":160},[52,17854,17855],{"class":622}," m_id;\n",[52,17857,17858],{"class":54,"line":141},[52,17859,17860],{"class":332},"    \u002F\u002F赋值姓名\n",[52,17862,17863,17866,17869,17871,17874,17877],{"class":54,"line":146},[52,17864,17865],{"class":160},"    void",[52,17867,17868],{"class":58}," setName",[52,17870,3121],{"class":622},[52,17872,17873],{"class":58},"string",[52,17875,17876],{"class":8172}," name",[52,17878,170],{"class":622},[52,17880,17881],{"class":54,"line":152},[52,17882,4992],{"class":622},[52,17884,17885,17888,17890],{"class":54,"line":157},[52,17886,17887],{"class":622},"        m_name",[52,17889,2099],{"class":160},[52,17891,17892],{"class":622},"name;\n",[52,17894,17895],{"class":54,"line":173},[52,17896,5149],{"class":622},[52,17898,17899],{"class":54,"line":178},[52,17900,17901],{"class":332},"    \u002F\u002F赋值学号\n",[52,17903,17904,17906,17909,17911,17913,17916],{"class":54,"line":184},[52,17905,17865],{"class":160},[52,17907,17908],{"class":58}," setId",[52,17910,3121],{"class":622},[52,17912,3124],{"class":160},[52,17914,17915],{"class":8172}," id",[52,17917,170],{"class":622},[52,17919,17920],{"class":54,"line":189},[52,17921,4992],{"class":622},[52,17923,17924,17927,17929],{"class":54,"line":201},[52,17925,17926],{"class":622},"        m_id",[52,17928,2099],{"class":160},[52,17930,17931],{"class":622},"id;\n",[52,17933,17934],{"class":54,"line":206},[52,17935,5149],{"class":622},[52,17937,17938],{"class":54,"line":224},[52,17939,17940],{"class":332},"    \u002F\u002F打印学生信息\n",[52,17942,17943,17945,17947],{"class":54,"line":229},[52,17944,17865],{"class":160},[52,17946,12571],{"class":58},[52,17948,4938],{"class":622},[52,17950,17951],{"class":54,"line":241},[52,17952,4992],{"class":622},[52,17954,17955,17957,17959,17962,17964,17967,17969,17971,17973,17976,17978,17981,17983],{"class":54,"line":246},[52,17956,6410],{"class":622},[52,17958,4155],{"class":160},[52,17960,17961],{"class":62},"\"姓名：\"",[52,17963,4155],{"class":160},[52,17965,17966],{"class":622},"m_name",[52,17968,4155],{"class":160},[52,17970,7318],{"class":62},[52,17972,4155],{"class":160},[52,17974,17975],{"class":62},"\"学号：\"",[52,17977,4155],{"class":160},[52,17979,17980],{"class":622},"m_id",[52,17982,4155],{"class":160},[52,17984,4177],{"class":622},[52,17986,17987],{"class":54,"line":252},[52,17988,5149],{"class":622},[52,17990,17991],{"class":54,"line":257},[52,17992,6954],{"class":622},[52,17994,17995,17997,17999],{"class":54,"line":266},[52,17996,3124],{"class":160},[52,17998,4935],{"class":58},[52,18000,4938],{"class":622},[52,18002,18003],{"class":54,"line":4722},[52,18004,4524],{"class":622},[52,18006,18007],{"class":54,"line":4727},[52,18008,18009],{"class":332},"    \u002F\u002F实例化\n",[52,18011,18012],{"class":54,"line":4741},[52,18013,18014],{"class":622},"    Student s1;\n",[52,18016,18017,18020,18023,18025,18027],{"class":54,"line":4746},[52,18018,18019],{"class":622},"    s1.",[52,18021,18022],{"class":58},"setName",[52,18024,3121],{"class":622},[52,18026,10872],{"class":62},[52,18028,5679],{"class":622},[52,18030,18031,18033,18036,18038,18041],{"class":54,"line":5538},[52,18032,18019],{"class":622},[52,18034,18035],{"class":58},"setId",[52,18037,3121],{"class":622},[52,18039,18040],{"class":90},"123456",[52,18042,5679],{"class":622},[52,18044,18045,18047,18050],{"class":54,"line":5552},[52,18046,18019],{"class":622},[52,18048,18049],{"class":58},"printInfo",[52,18051,8592],{"class":622},[52,18053,18054],{"class":54,"line":5560},[52,18055,4543],{"class":622},[274,18057,18058],{},"类中的属性和行为统称为成员",[274,18060,18061],{},"属性：成员属性(成员变量)",[274,18063,18064],{},"方法：成员函数(成员方法)",[274,18066,18067],{},[538,18068,18069],{},"封装意义二：",[274,18071,18072],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[274,18074,18075],{},"访问权限有三种：",[1070,18077,18078,18081,18084],{},[1073,18079,18080],{},"public        公共权限",[1073,18082,18083],{},"protected 保护权限",[1073,18085,18086],{},"private      私有权限",[274,18088,18089],{},[538,18090,18091],{},"示例：",[19,18093,18095],{"className":12897,"code":18094,"language":12899,"meta":28,"style":28},"\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",[26,18096,18097,18102,18107,18112,18117,18121,18128,18132,18137,18141,18146,18150,18155,18160,18165,18169,18174,18179,18186,18190,18194,18202,18206,18217,18229,18241,18245,18249,18253,18261,18265,18270,18282,18290,18298,18302,18312,18316,18324],{"__ignoreMap":28},[52,18098,18099],{"class":54,"line":55},[52,18100,18101],{"class":332},"\u002F\u002F三种权限\n",[52,18103,18104],{"class":54,"line":69},[52,18105,18106],{"class":332},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[52,18108,18109],{"class":54,"line":82},[52,18110,18111],{"class":332},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[52,18113,18114],{"class":54,"line":97},[52,18115,18116],{"class":332},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[52,18118,18119],{"class":54,"line":112},[52,18120,116],{"emptyLinePlaceholder":115},[52,18122,18123,18125],{"class":54,"line":119},[52,18124,17650],{"class":160},[52,18126,18127],{"class":58}," Person\n",[52,18129,18130],{"class":54,"line":130},[52,18131,4524],{"class":622},[52,18133,18134],{"class":54,"line":136},[52,18135,18136],{"class":332},"    \u002F\u002F姓名  公共权限\n",[52,18138,18139],{"class":54,"line":141},[52,18140,17672],{"class":160},[52,18142,18143],{"class":54,"line":146},[52,18144,18145],{"class":622},"    string m_Name;\n",[52,18147,18148],{"class":54,"line":152},[52,18149,116],{"emptyLinePlaceholder":115},[52,18151,18152],{"class":54,"line":157},[52,18153,18154],{"class":332},"    \u002F\u002F汽车  保护权限\n",[52,18156,18157],{"class":54,"line":173},[52,18158,18159],{"class":160},"protected:\n",[52,18161,18162],{"class":54,"line":178},[52,18163,18164],{"class":622},"    string m_Car;\n",[52,18166,18167],{"class":54,"line":184},[52,18168,116],{"emptyLinePlaceholder":115},[52,18170,18171],{"class":54,"line":189},[52,18172,18173],{"class":332},"    \u002F\u002F银行卡密码  私有权限\n",[52,18175,18176],{"class":54,"line":201},[52,18177,18178],{"class":160},"private:\n",[52,18180,18181,18183],{"class":54,"line":206},[52,18182,4947],{"class":160},[52,18184,18185],{"class":622}," m_Password;\n",[52,18187,18188],{"class":54,"line":224},[52,18189,116],{"emptyLinePlaceholder":115},[52,18191,18192],{"class":54,"line":229},[52,18193,17672],{"class":160},[52,18195,18196,18198,18200],{"class":54,"line":241},[52,18197,17865],{"class":160},[52,18199,14341],{"class":58},[52,18201,4938],{"class":622},[52,18203,18204],{"class":54,"line":246},[52,18205,4992],{"class":622},[52,18207,18208,18211,18213,18215],{"class":54,"line":252},[52,18209,18210],{"class":622},"        m_Name ",[52,18212,2099],{"class":160},[52,18214,11894],{"class":62},[52,18216,4272],{"class":622},[52,18218,18219,18222,18224,18227],{"class":54,"line":257},[52,18220,18221],{"class":622},"        m_Car ",[52,18223,2099],{"class":160},[52,18225,18226],{"class":62}," \"拖拉机\"",[52,18228,4272],{"class":622},[52,18230,18231,18234,18236,18239],{"class":54,"line":266},[52,18232,18233],{"class":622},"        m_Password ",[52,18235,2099],{"class":160},[52,18237,18238],{"class":90}," 123456",[52,18240,4272],{"class":622},[52,18242,18243],{"class":54,"line":4722},[52,18244,5149],{"class":622},[52,18246,18247],{"class":54,"line":4727},[52,18248,6954],{"class":622},[52,18250,18251],{"class":54,"line":4741},[52,18252,116],{"emptyLinePlaceholder":115},[52,18254,18255,18257,18259],{"class":54,"line":4746},[52,18256,3124],{"class":160},[52,18258,4935],{"class":58},[52,18260,13809],{"class":622},[52,18262,18263],{"class":54,"line":5538},[52,18264,116],{"emptyLinePlaceholder":115},[52,18266,18267],{"class":54,"line":5552},[52,18268,18269],{"class":622},"    Person p;\n",[52,18271,18272,18275,18277,18280],{"class":54,"line":5560},[52,18273,18274],{"class":622},"    p.m_Name ",[52,18276,2099],{"class":160},[52,18278,18279],{"class":62}," \"李四\"",[52,18281,4272],{"class":622},[52,18283,18284,18287],{"class":54,"line":5565},[52,18285,18286],{"class":332},"    \u002F\u002Fp.m_Car = \"奔驰\";",[52,18288,18289],{"class":332},"  \u002F\u002F保护权限类外访问不到\n",[52,18291,18292,18295],{"class":54,"line":5571},[52,18293,18294],{"class":332},"    \u002F\u002Fp.m_Password = 123;",[52,18296,18297],{"class":332}," \u002F\u002F私有权限类外访问不到\n",[52,18299,18300],{"class":54,"line":5577},[52,18301,116],{"emptyLinePlaceholder":115},[52,18303,18304,18306,18308,18310],{"class":54,"line":5582},[52,18305,5265],{"class":58},[52,18307,3121],{"class":622},[52,18309,5270],{"class":62},[52,18311,5679],{"class":622},[52,18313,18314],{"class":54,"line":10904},[52,18315,116],{"emptyLinePlaceholder":115},[52,18317,18318,18320,18322],{"class":54,"line":10928},[52,18319,7049],{"class":160},[52,18321,7052],{"class":90},[52,18323,4272],{"class":622},[52,18325,18326],{"class":54,"line":10933},[52,18327,4543],{"class":622},[30,18329,18331],{"id":18330},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[274,18333,18334,18335,18338,18339],{},"在C++中 struct和class唯一的",[538,18336,18337],{},"区别","就在于 ",[538,18340,18341],{},"默认的访问权限不同",[274,18343,18344],{},"区别：",[4118,18346,18347,18350],{},[1073,18348,18349],{},"struct 默认权限为公共",[1073,18351,18352],{},"class   默认权限为私有",[19,18354,18356],{"className":12897,"code":18355,"language":12899,"meta":28,"style":28},"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",[26,18357,18358,18365,18369,18379,18383,18387,18394,18398,18408,18412,18416,18424,18428,18433,18447,18451,18456,18470,18474,18484,18488,18496],{"__ignoreMap":28},[52,18359,18360,18362],{"class":54,"line":55},[52,18361,17650],{"class":160},[52,18363,18364],{"class":58}," C1\n",[52,18366,18367],{"class":54,"line":69},[52,18368,4524],{"class":622},[52,18370,18371,18373,18376],{"class":54,"line":82},[52,18372,4947],{"class":160},[52,18374,18375],{"class":622},"  m_A;",[52,18377,18378],{"class":332}," \u002F\u002F默认是私有权限\n",[52,18380,18381],{"class":54,"line":97},[52,18382,6954],{"class":622},[52,18384,18385],{"class":54,"line":112},[52,18386,116],{"emptyLinePlaceholder":115},[52,18388,18389,18391],{"class":54,"line":119},[52,18390,10715],{"class":160},[52,18392,18393],{"class":58}," C2\n",[52,18395,18396],{"class":54,"line":130},[52,18397,4524],{"class":622},[52,18399,18400,18402,18405],{"class":54,"line":136},[52,18401,4947],{"class":160},[52,18403,18404],{"class":622}," m_A;",[52,18406,18407],{"class":332},"  \u002F\u002F默认是公共权限\n",[52,18409,18410],{"class":54,"line":141},[52,18411,6954],{"class":622},[52,18413,18414],{"class":54,"line":146},[52,18415,116],{"emptyLinePlaceholder":115},[52,18417,18418,18420,18422],{"class":54,"line":152},[52,18419,3124],{"class":160},[52,18421,4935],{"class":58},[52,18423,13809],{"class":622},[52,18425,18426],{"class":54,"line":157},[52,18427,116],{"emptyLinePlaceholder":115},[52,18429,18430],{"class":54,"line":173},[52,18431,18432],{"class":622},"    C1 c1;\n",[52,18434,18435,18438,18440,18442,18444],{"class":54,"line":178},[52,18436,18437],{"class":622},"    c1.m_A ",[52,18439,2099],{"class":160},[52,18441,5000],{"class":90},[52,18443,3173],{"class":622},[52,18445,18446],{"class":332}," \u002F\u002F错误，访问权限是私有\n",[52,18448,18449],{"class":54,"line":184},[52,18450,116],{"emptyLinePlaceholder":115},[52,18452,18453],{"class":54,"line":189},[52,18454,18455],{"class":622},"    C2 c2;\n",[52,18457,18458,18461,18463,18465,18467],{"class":54,"line":201},[52,18459,18460],{"class":622},"    c2.m_A ",[52,18462,2099],{"class":160},[52,18464,5000],{"class":90},[52,18466,3173],{"class":622},[52,18468,18469],{"class":332}," \u002F\u002F正确，访问权限是公共\n",[52,18471,18472],{"class":54,"line":206},[52,18473,116],{"emptyLinePlaceholder":115},[52,18475,18476,18478,18480,18482],{"class":54,"line":224},[52,18477,5265],{"class":58},[52,18479,3121],{"class":622},[52,18481,5270],{"class":62},[52,18483,5679],{"class":622},[52,18485,18486],{"class":54,"line":229},[52,18487,116],{"emptyLinePlaceholder":115},[52,18489,18490,18492,18494],{"class":54,"line":241},[52,18491,7049],{"class":160},[52,18493,7052],{"class":90},[52,18495,4272],{"class":622},[52,18497,18498],{"class":54,"line":246},[52,18499,4543],{"class":622},[30,18501,18503],{"id":18502},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[274,18505,18506],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[274,18508,18509],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[274,18511,18512],{},[538,18513,18091],{},[19,18515,18517],{"className":12897,"code":18516,"language":12899,"meta":28,"style":28},"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",[26,18518,18519,18529,18533,18537,18542,18556,18565,18569,18579,18583,18590,18594,18598,18602,18607,18616,18623,18627,18632,18648,18671,18684,18691,18695,18704,18708,18712,18717,18733,18743,18747,18751,18755,18763,18767,18777,18781,18789,18793,18797,18805,18809,18813,18818,18831,18854,18858,18863,18876,18898,18902,18907,18921,18929,18933,18943,18947,18955],{"__ignoreMap":28},[52,18520,18521,18523,18526],{"class":54,"line":55},[52,18522,17650],{"class":160},[52,18524,18525],{"class":58}," Person",[52,18527,18528],{"class":622}," {\n",[52,18530,18531],{"class":54,"line":69},[52,18532,17672],{"class":160},[52,18534,18535],{"class":54,"line":82},[52,18536,116],{"emptyLinePlaceholder":115},[52,18538,18539],{"class":54,"line":97},[52,18540,18541],{"class":332},"    \u002F\u002F姓名设置可读可写\n",[52,18543,18544,18546,18548,18550,18552,18554],{"class":54,"line":112},[52,18545,17865],{"class":160},[52,18547,17868],{"class":58},[52,18549,3121],{"class":622},[52,18551,17873],{"class":58},[52,18553,17876],{"class":8172},[52,18555,15398],{"class":622},[52,18557,18558,18560,18562],{"class":54,"line":119},[52,18559,18210],{"class":622},[52,18561,2099],{"class":160},[52,18563,18564],{"class":622}," name;\n",[52,18566,18567],{"class":54,"line":130},[52,18568,5149],{"class":622},[52,18570,18571,18574,18577],{"class":54,"line":136},[52,18572,18573],{"class":58},"    string",[52,18575,18576],{"class":58}," getName",[52,18578,4938],{"class":622},[52,18580,18581],{"class":54,"line":141},[52,18582,4992],{"class":622},[52,18584,18585,18587],{"class":54,"line":146},[52,18586,17708],{"class":160},[52,18588,18589],{"class":622}," m_Name;\n",[52,18591,18592],{"class":54,"line":152},[52,18593,5149],{"class":622},[52,18595,18596],{"class":54,"line":157},[52,18597,116],{"emptyLinePlaceholder":115},[52,18599,18600],{"class":54,"line":173},[52,18601,116],{"emptyLinePlaceholder":115},[52,18603,18604],{"class":54,"line":178},[52,18605,18606],{"class":332},"    \u002F\u002F获取年龄 \n",[52,18608,18609,18611,18614],{"class":54,"line":184},[52,18610,4947],{"class":160},[52,18612,18613],{"class":58}," getAge",[52,18615,13809],{"class":622},[52,18617,18618,18620],{"class":54,"line":189},[52,18619,17708],{"class":160},[52,18621,18622],{"class":622}," m_Age;\n",[52,18624,18625],{"class":54,"line":201},[52,18626,5149],{"class":622},[52,18628,18629],{"class":54,"line":206},[52,18630,18631],{"class":332},"    \u002F\u002F设置年龄\n",[52,18633,18634,18636,18639,18641,18643,18646],{"class":54,"line":224},[52,18635,17865],{"class":160},[52,18637,18638],{"class":58}," setAge",[52,18640,3121],{"class":622},[52,18642,3124],{"class":160},[52,18644,18645],{"class":8172}," age",[52,18647,15398],{"class":622},[52,18649,18650,18652,18655,18657,18659,18661,18664,18666,18669],{"class":54,"line":229},[52,18651,5458],{"class":160},[52,18653,18654],{"class":622}," (age ",[52,18656,4022],{"class":160},[52,18658,7052],{"class":90},[52,18660,6214],{"class":160},[52,18662,18663],{"class":622}," age ",[52,18665,4072],{"class":160},[52,18667,18668],{"class":90}," 150",[52,18670,15398],{"class":622},[52,18672,18673,18675,18677,18680,18682],{"class":54,"line":241},[52,18674,12675],{"class":622},[52,18676,4155],{"class":160},[52,18678,18679],{"class":62}," \"你个老妖精!\"",[52,18681,4423],{"class":160},[52,18683,11796],{"class":622},[52,18685,18686,18689],{"class":54,"line":246},[52,18687,18688],{"class":160},"            return",[52,18690,4272],{"class":622},[52,18692,18693],{"class":54,"line":252},[52,18694,5490],{"class":622},[52,18696,18697,18700,18702],{"class":54,"line":257},[52,18698,18699],{"class":622},"        m_Age ",[52,18701,2099],{"class":160},[52,18703,10753],{"class":622},[52,18705,18706],{"class":54,"line":266},[52,18707,5149],{"class":622},[52,18709,18710],{"class":54,"line":4722},[52,18711,116],{"emptyLinePlaceholder":115},[52,18713,18714],{"class":54,"line":4727},[52,18715,18716],{"class":332},"    \u002F\u002F情人设置为只写\n",[52,18718,18719,18721,18724,18726,18728,18731],{"class":54,"line":4741},[52,18720,17865],{"class":160},[52,18722,18723],{"class":58}," setLover",[52,18725,3121],{"class":622},[52,18727,17873],{"class":58},[52,18729,18730],{"class":8172}," lover",[52,18732,15398],{"class":622},[52,18734,18735,18738,18740],{"class":54,"line":4746},[52,18736,18737],{"class":622},"        m_Lover ",[52,18739,2099],{"class":160},[52,18741,18742],{"class":622}," lover;\n",[52,18744,18745],{"class":54,"line":5538},[52,18746,5149],{"class":622},[52,18748,18749],{"class":54,"line":5552},[52,18750,116],{"emptyLinePlaceholder":115},[52,18752,18753],{"class":54,"line":5560},[52,18754,18178],{"class":160},[52,18756,18757,18760],{"class":54,"line":5565},[52,18758,18759],{"class":622},"    string m_Name;",[52,18761,18762],{"class":332}," \u002F\u002F可读可写  姓名\n",[52,18764,18765],{"class":54,"line":5571},[52,18766,16166],{"class":622},[52,18768,18769,18771,18774],{"class":54,"line":5577},[52,18770,4947],{"class":160},[52,18772,18773],{"class":622}," m_Age;",[52,18775,18776],{"class":332}," \u002F\u002F只读  年龄\n",[52,18778,18779],{"class":54,"line":5582},[52,18780,116],{"emptyLinePlaceholder":115},[52,18782,18783,18786],{"class":54,"line":10904},[52,18784,18785],{"class":622},"    string m_Lover;",[52,18787,18788],{"class":332}," \u002F\u002F只写  情人\n",[52,18790,18791],{"class":54,"line":10928},[52,18792,6954],{"class":622},[52,18794,18795],{"class":54,"line":10933},[52,18796,116],{"emptyLinePlaceholder":115},[52,18798,18799,18801,18803],{"class":54,"line":10939},[52,18800,3124],{"class":160},[52,18802,4935],{"class":58},[52,18804,13809],{"class":622},[52,18806,18807],{"class":54,"line":10966},[52,18808,116],{"emptyLinePlaceholder":115},[52,18810,18811],{"class":54,"line":10971},[52,18812,18269],{"class":622},[52,18814,18815],{"class":54,"line":10977},[52,18816,18817],{"class":332},"    \u002F\u002F姓名设置\n",[52,18819,18820,18823,18825,18827,18829],{"class":54,"line":10989},[52,18821,18822],{"class":622},"    p.",[52,18824,18022],{"class":58},[52,18826,3121],{"class":622},[52,18828,10872],{"class":62},[52,18830,5679],{"class":622},[52,18832,18833,18835,18837,18840,18842,18845,18848,18850,18852],{"class":54,"line":11001},[52,18834,9485],{"class":622},[52,18836,4155],{"class":160},[52,18838,18839],{"class":62}," \"姓名： \"",[52,18841,4423],{"class":160},[52,18843,18844],{"class":622}," p.",[52,18846,18847],{"class":58},"getName",[52,18849,16006],{"class":622},[52,18851,4155],{"class":160},[52,18853,11796],{"class":622},[52,18855,18856],{"class":54,"line":11013},[52,18857,116],{"emptyLinePlaceholder":115},[52,18859,18860],{"class":54,"line":12672},[52,18861,18862],{"class":332},"    \u002F\u002F年龄设置\n",[52,18864,18865,18867,18870,18872,18874],{"class":54,"line":12697},[52,18866,18822],{"class":622},[52,18868,18869],{"class":58},"setAge",[52,18871,3121],{"class":622},[52,18873,3768],{"class":90},[52,18875,5679],{"class":622},[52,18877,18878,18880,18882,18885,18887,18889,18892,18894,18896],{"class":54,"line":12720},[52,18879,9485],{"class":622},[52,18881,4155],{"class":160},[52,18883,18884],{"class":62}," \"年龄： \"",[52,18886,4423],{"class":160},[52,18888,18844],{"class":622},[52,18890,18891],{"class":58},"getAge",[52,18893,16006],{"class":622},[52,18895,4155],{"class":160},[52,18897,11796],{"class":622},[52,18899,18900],{"class":54,"line":12744},[52,18901,116],{"emptyLinePlaceholder":115},[52,18903,18904],{"class":54,"line":12749},[52,18905,18906],{"class":332},"    \u002F\u002F情人设置\n",[52,18908,18909,18911,18914,18916,18919],{"class":54,"line":12754},[52,18910,18822],{"class":622},[52,18912,18913],{"class":58},"setLover",[52,18915,3121],{"class":622},[52,18917,18918],{"class":62},"\"苍井\"",[52,18920,5679],{"class":622},[52,18922,18923,18926],{"class":54,"line":12759},[52,18924,18925],{"class":332},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[52,18927,18928],{"class":332},"  \u002F\u002F只写属性，不可以读取\n",[52,18930,18931],{"class":54,"line":12768},[52,18932,116],{"emptyLinePlaceholder":115},[52,18934,18935,18937,18939,18941],{"class":54,"line":12773},[52,18936,5265],{"class":58},[52,18938,3121],{"class":622},[52,18940,5270],{"class":62},[52,18942,5679],{"class":622},[52,18944,18945],{"class":54,"line":12779},[52,18946,116],{"emptyLinePlaceholder":115},[52,18948,18949,18951,18953],{"class":54,"line":12800},[52,18950,7049],{"class":160},[52,18952,7052],{"class":90},[52,18954,4272],{"class":622},[52,18956,18957],{"class":54,"line":12806},[52,18958,4543],{"class":622},[30,18960,18962],{"id":18961},"_814封装案例","8.1.4封装案例",[1070,18964,18965],{},[1073,18966,18967,18970],{},[538,18968,18969],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[4118,18972,18973,18976],{},[1073,18974,18975],{},"求出立方体的面积和体积",[1073,18977,18978],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[19,18980,18982],{"className":3109,"code":18981,"language":3111,"meta":28,"style":28},"#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",[26,18983,18984,18990,19000,19007,19011,19015,19020,19050,19054,19064,19074,19084,19088,19097,19101,19137,19141,19150,19154,19170,19174,19179,19188,19192,19199,19203,19212,19216,19223,19227,19236,19240,19247,19251,19256,19273,19277,19323,19327,19336,19340,19344,19348,19357,19361,19365,19370,19374,19380,19386,19392,19396,19400,19405,19427,19431,19485,19489,19497,19501,19506,19511,19524,19531,19547,19558,19564,19587,19593,19616,19630,19650,19656,19667,19690,19712,19717,19723,19737,19750,19755,19769,19774,19780,19785,19799,19804,19809,19823,19835,19840,19853,19858,19863,19868,19881,19886],{"__ignoreMap":28},[52,18985,18986,18988],{"class":54,"line":55},[52,18987,4912],{"class":160},[52,18989,4915],{"class":62},[52,18991,18992,18994,18996,18998],{"class":54,"line":69},[52,18993,4920],{"class":160},[52,18995,4923],{"class":160},[52,18997,4926],{"class":58},[52,18999,4272],{"class":622},[52,19001,19002,19004],{"class":54,"line":82},[52,19003,17650],{"class":160},[52,19005,19006],{"class":58}," Cube\n",[52,19008,19009],{"class":54,"line":97},[52,19010,4524],{"class":622},[52,19012,19013],{"class":54,"line":112},[52,19014,17672],{"class":160},[52,19016,19017],{"class":54,"line":119},[52,19018,19019],{"class":332},"    \u002F\u002F输入长宽高\n",[52,19021,19022,19024,19027,19029,19031,19034,19036,19038,19041,19043,19045,19048],{"class":54,"line":130},[52,19023,17865],{"class":160},[52,19025,19026],{"class":58}," setLwh",[52,19028,3121],{"class":622},[52,19030,3124],{"class":160},[52,19032,19033],{"class":8172}," l",[52,19035,3491],{"class":622},[52,19037,3124],{"class":160},[52,19039,19040],{"class":8172}," w",[52,19042,3491],{"class":622},[52,19044,3124],{"class":160},[52,19046,19047],{"class":8172}," h",[52,19049,170],{"class":622},[52,19051,19052],{"class":54,"line":136},[52,19053,4992],{"class":622},[52,19055,19056,19059,19061],{"class":54,"line":141},[52,19057,19058],{"class":622},"        m_L",[52,19060,2099],{"class":160},[52,19062,19063],{"class":622},"l;\n",[52,19065,19066,19069,19071],{"class":54,"line":146},[52,19067,19068],{"class":622},"        m_W",[52,19070,2099],{"class":160},[52,19072,19073],{"class":622},"w;\n",[52,19075,19076,19079,19081],{"class":54,"line":152},[52,19077,19078],{"class":622},"        m_H",[52,19080,2099],{"class":160},[52,19082,19083],{"class":622},"h;\n",[52,19085,19086],{"class":54,"line":157},[52,19087,5149],{"class":622},[52,19089,19090,19092,19095],{"class":54,"line":173},[52,19091,4947],{"class":160},[52,19093,19094],{"class":58}," mianji",[52,19096,4938],{"class":622},[52,19098,19099],{"class":54,"line":178},[52,19100,4992],{"class":622},[52,19102,19103,19105,19107,19109,19112,19114,19117,19119,19122,19124,19127,19129,19132,19134],{"class":54,"line":184},[52,19104,17708],{"class":160},[52,19106,17711],{"class":90},[52,19108,1095],{"class":160},[52,19110,19111],{"class":622},"(m_L",[52,19113,1095],{"class":160},[52,19115,19116],{"class":622},"m_W ",[52,19118,3593],{"class":160},[52,19120,19121],{"class":622}," m_L",[52,19123,1095],{"class":160},[52,19125,19126],{"class":622},"m_H ",[52,19128,3593],{"class":160},[52,19130,19131],{"class":622}," m_W",[52,19133,1095],{"class":160},[52,19135,19136],{"class":622},"m_H);\n",[52,19138,19139],{"class":54,"line":189},[52,19140,5149],{"class":622},[52,19142,19143,19145,19148],{"class":54,"line":201},[52,19144,4947],{"class":160},[52,19146,19147],{"class":58}," tiji",[52,19149,4938],{"class":622},[52,19151,19152],{"class":54,"line":206},[52,19153,4992],{"class":622},[52,19155,19156,19158,19160,19162,19165,19167],{"class":54,"line":224},[52,19157,17708],{"class":160},[52,19159,19121],{"class":622},[52,19161,1095],{"class":160},[52,19163,19164],{"class":622},"m_W",[52,19166,1095],{"class":160},[52,19168,19169],{"class":622},"m_H;\n",[52,19171,19172],{"class":54,"line":229},[52,19173,5149],{"class":622},[52,19175,19176],{"class":54,"line":241},[52,19177,19178],{"class":332},"    \u002F\u002F获取长宽高\n",[52,19180,19181,19183,19186],{"class":54,"line":246},[52,19182,4947],{"class":160},[52,19184,19185],{"class":58}," getLength",[52,19187,4938],{"class":622},[52,19189,19190],{"class":54,"line":252},[52,19191,4992],{"class":622},[52,19193,19194,19196],{"class":54,"line":257},[52,19195,17708],{"class":160},[52,19197,19198],{"class":622}," m_L;\n",[52,19200,19201],{"class":54,"line":266},[52,19202,5149],{"class":622},[52,19204,19205,19207,19210],{"class":54,"line":4722},[52,19206,4947],{"class":160},[52,19208,19209],{"class":58}," getWidth",[52,19211,4938],{"class":622},[52,19213,19214],{"class":54,"line":4727},[52,19215,4992],{"class":622},[52,19217,19218,19220],{"class":54,"line":4741},[52,19219,17708],{"class":160},[52,19221,19222],{"class":622}," m_W;\n",[52,19224,19225],{"class":54,"line":4746},[52,19226,5149],{"class":622},[52,19228,19229,19231,19234],{"class":54,"line":5538},[52,19230,4947],{"class":160},[52,19232,19233],{"class":58}," getHeight",[52,19235,4938],{"class":622},[52,19237,19238],{"class":54,"line":5552},[52,19239,4992],{"class":622},[52,19241,19242,19244],{"class":54,"line":5560},[52,19243,17708],{"class":160},[52,19245,19246],{"class":622}," m_H;\n",[52,19248,19249],{"class":54,"line":5565},[52,19250,5149],{"class":622},[52,19252,19253],{"class":54,"line":5571},[52,19254,19255],{"class":332},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[52,19257,19258,19261,19264,19266,19269,19271],{"class":54,"line":5577},[52,19259,19260],{"class":160},"    bool",[52,19262,19263],{"class":58}," isEqual",[52,19265,3121],{"class":622},[52,19267,19268],{"class":58},"Cube",[52,19270,5809],{"class":8172},[52,19272,170],{"class":622},[52,19274,19275],{"class":54,"line":5582},[52,19276,4992],{"class":622},[52,19278,19279,19281,19284,19287,19289,19291,19294,19296,19299,19302,19304,19306,19309,19311,19313,19316,19318,19320],{"class":54,"line":10904},[52,19280,5458],{"class":160},[52,19282,19283],{"class":622}," (c.",[52,19285,19286],{"class":58},"getLength",[52,19288,16006],{"class":622},[52,19290,5909],{"class":160},[52,19292,19293],{"class":622}," m_L ",[52,19295,4682],{"class":160},[52,19297,19298],{"class":622}," c.",[52,19300,19301],{"class":58},"getWidth",[52,19303,16006],{"class":622},[52,19305,5909],{"class":160},[52,19307,19308],{"class":622}," m_W ",[52,19310,4682],{"class":160},[52,19312,19298],{"class":622},[52,19314,19315],{"class":58},"getHeight",[52,19317,16006],{"class":622},[52,19319,5909],{"class":160},[52,19321,19322],{"class":622}," m_H)\n",[52,19324,19325],{"class":54,"line":10928},[52,19326,5471],{"class":622},[52,19328,19329,19331,19334],{"class":54,"line":10933},[52,19330,18688],{"class":160},[52,19332,19333],{"class":90}," true",[52,19335,4272],{"class":622},[52,19337,19338],{"class":54,"line":10939},[52,19339,5490],{"class":622},[52,19341,19342],{"class":54,"line":10966},[52,19343,5531],{"class":160},[52,19345,19346],{"class":54,"line":10971},[52,19347,5471],{"class":622},[52,19349,19350,19352,19355],{"class":54,"line":10977},[52,19351,18688],{"class":160},[52,19353,19354],{"class":90}," false",[52,19356,4272],{"class":622},[52,19358,19359],{"class":54,"line":10989},[52,19360,5490],{"class":622},[52,19362,19363],{"class":54,"line":11001},[52,19364,5149],{"class":622},[52,19366,19367],{"class":54,"line":11013},[52,19368,19369],{"class":332},"    \u002F\u002F私有属性\n",[52,19371,19372],{"class":54,"line":12672},[52,19373,18178],{"class":160},[52,19375,19376,19378],{"class":54,"line":12697},[52,19377,4947],{"class":160},[52,19379,19198],{"class":622},[52,19381,19382,19384],{"class":54,"line":12720},[52,19383,4947],{"class":160},[52,19385,19222],{"class":622},[52,19387,19388,19390],{"class":54,"line":12744},[52,19389,4947],{"class":160},[52,19391,19246],{"class":622},[52,19393,19394],{"class":54,"line":12749},[52,19395,116],{"emptyLinePlaceholder":115},[52,19397,19398],{"class":54,"line":12754},[52,19399,6954],{"class":622},[52,19401,19402],{"class":54,"line":12759},[52,19403,19404],{"class":332},"\u002F\u002F全局函数判断两个立方体是否相等\n",[52,19406,19407,19409,19411,19413,19415,19418,19420,19422,19425],{"class":54,"line":12768},[52,19408,4333],{"class":160},[52,19410,19263],{"class":58},[52,19412,3121],{"class":622},[52,19414,19268],{"class":58},[52,19416,19417],{"class":8172}," c1",[52,19419,3491],{"class":622},[52,19421,19268],{"class":58},[52,19423,19424],{"class":8172}," c2",[52,19426,170],{"class":622},[52,19428,19429],{"class":54,"line":12773},[52,19430,4524],{"class":622},[52,19432,19433,19435,19438,19440,19442,19444,19447,19449,19452,19454,19456,19458,19460,19462,19464,19466,19468,19470,19472,19474,19476,19478,19480,19482],{"class":54,"line":12779},[52,19434,7049],{"class":160},[52,19436,19437],{"class":622}," (c1.",[52,19439,19286],{"class":58},[52,19441,16006],{"class":622},[52,19443,5909],{"class":160},[52,19445,19446],{"class":622}," c2.",[52,19448,19286],{"class":58},[52,19450,19451],{"class":622},"()) ",[52,19453,4682],{"class":160},[52,19455,19437],{"class":622},[52,19457,19301],{"class":58},[52,19459,16006],{"class":622},[52,19461,5909],{"class":160},[52,19463,19446],{"class":622},[52,19465,19301],{"class":58},[52,19467,19451],{"class":622},[52,19469,4682],{"class":160},[52,19471,19437],{"class":622},[52,19473,19315],{"class":58},[52,19475,16006],{"class":622},[52,19477,5909],{"class":160},[52,19479,19446],{"class":622},[52,19481,19315],{"class":58},[52,19483,19484],{"class":622},"());\n",[52,19486,19487],{"class":54,"line":12800},[52,19488,4543],{"class":622},[52,19490,19491,19493,19495],{"class":54,"line":12806},[52,19492,3124],{"class":160},[52,19494,4935],{"class":58},[52,19496,4938],{"class":622},[52,19498,19499],{"class":54,"line":12820},[52,19500,4524],{"class":622},[52,19502,19503],{"class":54,"line":12826},[52,19504,19505],{"class":622},"    Cube c1;\n",[52,19507,19508],{"class":54,"line":12853},[52,19509,19510],{"class":332},"    \u002F\u002F输入立方体的长宽高\n",[52,19512,19513,19515,19517,19520,19522],{"class":54,"line":12862},[52,19514,4529],{"class":622},[52,19516,4155],{"class":160},[52,19518,19519],{"class":62},"\"请输入第一个立方体的长、宽、高：\"",[52,19521,4155],{"class":160},[52,19523,4177],{"class":622},[52,19525,19526,19528],{"class":54,"line":12868},[52,19527,4947],{"class":160},[52,19529,19530],{"class":622}," l,w,h,l1,w1,h1;\n",[52,19532,19533,19535,19537,19539,19541,19543,19545],{"class":54,"line":12876},[52,19534,4974],{"class":622},[52,19536,4408],{"class":160},[52,19538,3630],{"class":622},[52,19540,4408],{"class":160},[52,19542,3907],{"class":622},[52,19544,4408],{"class":160},[52,19546,19083],{"class":622},[52,19548,19549,19552,19555],{"class":54,"line":12881},[52,19550,19551],{"class":622},"    c1.",[52,19553,19554],{"class":58},"setLwh",[52,19556,19557],{"class":622},"(l,w,h);\n",[52,19559,19561],{"class":54,"line":19560},66,[52,19562,19563],{"class":332},"    \u002F\u002F面积\n",[52,19565,19567,19569,19571,19574,19576,19578,19581,19583,19585],{"class":54,"line":19566},67,[52,19568,4529],{"class":622},[52,19570,4155],{"class":160},[52,19572,19573],{"class":62},"\"立方体的表面积为：\"",[52,19575,4155],{"class":160},[52,19577,17786],{"class":622},[52,19579,19580],{"class":58},"mianji",[52,19582,5388],{"class":622},[52,19584,4155],{"class":160},[52,19586,4177],{"class":622},[52,19588,19590],{"class":54,"line":19589},68,[52,19591,19592],{"class":332},"    \u002F\u002F体积\n",[52,19594,19596,19598,19600,19603,19605,19607,19610,19612,19614],{"class":54,"line":19595},69,[52,19597,4529],{"class":622},[52,19599,4155],{"class":160},[52,19601,19602],{"class":62},"\"立方体的体积为：\"",[52,19604,4155],{"class":160},[52,19606,17786],{"class":622},[52,19608,19609],{"class":58},"tiji",[52,19611,5388],{"class":622},[52,19613,4155],{"class":160},[52,19615,4177],{"class":622},[52,19617,19619,19621,19623,19626,19628],{"class":54,"line":19618},70,[52,19620,4529],{"class":622},[52,19622,4155],{"class":160},[52,19624,19625],{"class":62},"\"请输入第二个立方体的长、宽、高：\"",[52,19627,4155],{"class":160},[52,19629,4177],{"class":622},[52,19631,19633,19635,19637,19640,19642,19645,19647],{"class":54,"line":19632},71,[52,19634,4974],{"class":622},[52,19636,4408],{"class":160},[52,19638,19639],{"class":622},"l1",[52,19641,4408],{"class":160},[52,19643,19644],{"class":622},"w1",[52,19646,4408],{"class":160},[52,19648,19649],{"class":622},"h1;\n",[52,19651,19653],{"class":54,"line":19652},72,[52,19654,19655],{"class":622},"    Cube c2;\n",[52,19657,19659,19662,19664],{"class":54,"line":19658},73,[52,19660,19661],{"class":622},"    c2.",[52,19663,19554],{"class":58},[52,19665,19666],{"class":622},"(l1,w1,h1);\n",[52,19668,19670,19672,19674,19677,19679,19682,19684,19686,19688],{"class":54,"line":19669},74,[52,19671,4529],{"class":622},[52,19673,4155],{"class":160},[52,19675,19676],{"class":62},"\"第二个立方体的表面积为：\"",[52,19678,4155],{"class":160},[52,19680,19681],{"class":622},"c2.",[52,19683,19580],{"class":58},[52,19685,5388],{"class":622},[52,19687,4155],{"class":160},[52,19689,4177],{"class":622},[52,19691,19693,19695,19697,19700,19702,19704,19706,19708,19710],{"class":54,"line":19692},75,[52,19694,4529],{"class":622},[52,19696,4155],{"class":160},[52,19698,19699],{"class":62},"\"第二个立方体的体积为：\"",[52,19701,4155],{"class":160},[52,19703,19681],{"class":622},[52,19705,19609],{"class":58},[52,19707,5388],{"class":622},[52,19709,4155],{"class":160},[52,19711,4177],{"class":622},[52,19713,19715],{"class":54,"line":19714},76,[52,19716,116],{"emptyLinePlaceholder":115},[52,19718,19720],{"class":54,"line":19719},77,[52,19721,19722],{"class":332},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[52,19724,19726,19728,19730,19733,19735],{"class":54,"line":19725},78,[52,19727,4529],{"class":622},[52,19729,4155],{"class":160},[52,19731,19732],{"class":62},"\"内部函数判断结果：\"",[52,19734,4155],{"class":160},[52,19736,4177],{"class":622},[52,19738,19740,19742,19744,19747],{"class":54,"line":19739},79,[52,19741,6060],{"class":160},[52,19743,19437],{"class":622},[52,19745,19746],{"class":58},"isEqual",[52,19748,19749],{"class":622},"(c2))\n",[52,19751,19753],{"class":54,"line":19752},80,[52,19754,4992],{"class":622},[52,19756,19758,19760,19762,19765,19767],{"class":54,"line":19757},81,[52,19759,6410],{"class":622},[52,19761,4155],{"class":160},[52,19763,19764],{"class":62},"\"两个立方体相等\"",[52,19766,4155],{"class":160},[52,19768,4177],{"class":622},[52,19770,19772],{"class":54,"line":19771},82,[52,19773,5149],{"class":622},[52,19775,19777],{"class":54,"line":19776},83,[52,19778,19779],{"class":160},"    else\n",[52,19781,19783],{"class":54,"line":19782},84,[52,19784,4992],{"class":622},[52,19786,19788,19790,19792,19795,19797],{"class":54,"line":19787},85,[52,19789,6410],{"class":622},[52,19791,4155],{"class":160},[52,19793,19794],{"class":62},"\"两个立方体不相等\"",[52,19796,4155],{"class":160},[52,19798,4177],{"class":622},[52,19800,19802],{"class":54,"line":19801},86,[52,19803,5149],{"class":622},[52,19805,19807],{"class":54,"line":19806},87,[52,19808,116],{"emptyLinePlaceholder":115},[52,19810,19812,19814,19816,19819,19821],{"class":54,"line":19811},88,[52,19813,4529],{"class":622},[52,19815,4155],{"class":160},[52,19817,19818],{"class":62},"\"全局函数判断结果：\"",[52,19820,4155],{"class":160},[52,19822,4177],{"class":622},[52,19824,19826,19828,19830,19832],{"class":54,"line":19825},89,[52,19827,6060],{"class":160},[52,19829,4629],{"class":622},[52,19831,19746],{"class":58},[52,19833,19834],{"class":622},"(c1, c2))\n",[52,19836,19838],{"class":54,"line":19837},90,[52,19839,4992],{"class":622},[52,19841,19843,19845,19847,19849,19851],{"class":54,"line":19842},91,[52,19844,6410],{"class":622},[52,19846,4155],{"class":160},[52,19848,19764],{"class":62},[52,19850,4155],{"class":160},[52,19852,4177],{"class":622},[52,19854,19856],{"class":54,"line":19855},92,[52,19857,5149],{"class":622},[52,19859,19861],{"class":54,"line":19860},93,[52,19862,19779],{"class":160},[52,19864,19866],{"class":54,"line":19865},94,[52,19867,4992],{"class":622},[52,19869,19871,19873,19875,19877,19879],{"class":54,"line":19870},95,[52,19872,6410],{"class":622},[52,19874,4155],{"class":160},[52,19876,19794],{"class":62},[52,19878,4155],{"class":160},[52,19880,4177],{"class":622},[52,19882,19884],{"class":54,"line":19883},96,[52,19885,5149],{"class":622},[52,19887,19889],{"class":54,"line":19888},97,[52,19890,4543],{"class":622},[1070,19892,19893],{"start":69},[1073,19894,19895],{},[538,19896,19897],{},"练习案例2：点和圆的关系",[4118,19899,19900],{},[1073,19901,19902],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[19,19904,19906],{"className":3109,"code":19905,"language":3111,"meta":28,"style":28},"#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",[26,19907,19908,19914,19924,19931,19938,19942,19946,19951,19985,19990,20006,20020,20024,20028,20035,20042,20046,20052,20056,20060,20064,20086,20109,20114,20128,20143,20147,20151,20157,20162,20167,20171,20197,20201,20231,20259,20287,20304,20308,20321,20325,20329,20333,20346,20350,20354,20362,20366,20370,20374,20379,20383,20394,20401,20410,20420,20431,20438,20451,20462,20472,20483,20490,20504,20509,20519,20527],{"__ignoreMap":28},[52,19909,19910,19912],{"class":54,"line":55},[52,19911,4912],{"class":160},[52,19913,4915],{"class":62},[52,19915,19916,19918,19920,19922],{"class":54,"line":69},[52,19917,4920],{"class":160},[52,19919,4923],{"class":160},[52,19921,4926],{"class":58},[52,19923,4272],{"class":622},[52,19925,19926,19928],{"class":54,"line":82},[52,19927,4912],{"class":160},[52,19929,19930],{"class":62},"\u003Ccmath>\n",[52,19932,19933,19935],{"class":54,"line":97},[52,19934,17650],{"class":160},[52,19936,19937],{"class":58}," Point\n",[52,19939,19940],{"class":54,"line":112},[52,19941,4524],{"class":622},[52,19943,19944],{"class":54,"line":119},[52,19945,17672],{"class":160},[52,19947,19948],{"class":54,"line":130},[52,19949,19950],{"class":332},"    \u002F\u002F赋值\n",[52,19952,19953,19955,19958,19960,19962,19965,19967,19969,19972,19975,19977,19980,19982],{"class":54,"line":136},[52,19954,17865],{"class":160},[52,19956,19957],{"class":58}," setPoint",[52,19959,3121],{"class":622},[52,19961,16993],{"class":160},[52,19963,19964],{"class":8172}," x",[52,19966,15391],{"class":622},[52,19968,16993],{"class":160},[52,19970,19971],{"class":8172}," y",[52,19973,19974],{"class":622},") { m_x ",[52,19976,2099],{"class":160},[52,19978,19979],{"class":622}," x; m_y ",[52,19981,2099],{"class":160},[52,19983,19984],{"class":622}," y; }\n",[52,19986,19987],{"class":54,"line":141},[52,19988,19989],{"class":332},"    \u002F\u002F获取坐标\n",[52,19991,19992,19994,19997,20000,20003],{"class":54,"line":146},[52,19993,17694],{"class":160},[52,19995,19996],{"class":58}," getX",[52,19998,19999],{"class":622},"() { ",[52,20001,20002],{"class":160},"return",[52,20004,20005],{"class":622}," m_x; }\n",[52,20007,20008,20010,20013,20015,20017],{"class":54,"line":152},[52,20009,17694],{"class":160},[52,20011,20012],{"class":58}," getY",[52,20014,19999],{"class":622},[52,20016,20002],{"class":160},[52,20018,20019],{"class":622}," m_y; }\n",[52,20021,20022],{"class":54,"line":157},[52,20023,116],{"emptyLinePlaceholder":115},[52,20025,20026],{"class":54,"line":173},[52,20027,18178],{"class":160},[52,20029,20030,20032],{"class":54,"line":178},[52,20031,17694],{"class":160},[52,20033,20034],{"class":622}," m_x;\n",[52,20036,20037,20039],{"class":54,"line":184},[52,20038,17694],{"class":160},[52,20040,20041],{"class":622}," m_y;\n",[52,20043,20044],{"class":54,"line":189},[52,20045,6954],{"class":622},[52,20047,20048,20050],{"class":54,"line":201},[52,20049,17650],{"class":160},[52,20051,17653],{"class":58},[52,20053,20054],{"class":54,"line":206},[52,20055,4524],{"class":622},[52,20057,20058],{"class":54,"line":224},[52,20059,17672],{"class":160},[52,20061,20062],{"class":54,"line":229},[52,20063,19950],{"class":332},[52,20065,20066,20068,20071,20073,20075,20078,20081,20083],{"class":54,"line":241},[52,20067,17865],{"class":160},[52,20069,20070],{"class":58}," setRadius",[52,20072,3121],{"class":622},[52,20074,16993],{"class":160},[52,20076,20077],{"class":8172}," r",[52,20079,20080],{"class":622},") { m_r ",[52,20082,2099],{"class":160},[52,20084,20085],{"class":622}," r; }\n",[52,20087,20088,20090,20093,20095,20098,20101,20104,20106],{"class":54,"line":246},[52,20089,17865],{"class":160},[52,20091,20092],{"class":58}," setCenter",[52,20094,3121],{"class":622},[52,20096,20097],{"class":58},"Point",[52,20099,20100],{"class":8172}," center",[52,20102,20103],{"class":622},") { m_center ",[52,20105,2099],{"class":160},[52,20107,20108],{"class":622}," center; }\n",[52,20110,20111],{"class":54,"line":252},[52,20112,20113],{"class":332},"    \u002F\u002F获取属性\n",[52,20115,20116,20118,20121,20123,20125],{"class":54,"line":257},[52,20117,17694],{"class":160},[52,20119,20120],{"class":58}," getRadius",[52,20122,19999],{"class":622},[52,20124,20002],{"class":160},[52,20126,20127],{"class":622}," m_r; }\n",[52,20129,20130,20133,20136,20138,20140],{"class":54,"line":266},[52,20131,20132],{"class":58},"    Point",[52,20134,20135],{"class":58}," getCenter",[52,20137,19999],{"class":622},[52,20139,20002],{"class":160},[52,20141,20142],{"class":622}," m_center; }\n",[52,20144,20145],{"class":54,"line":4722},[52,20146,116],{"emptyLinePlaceholder":115},[52,20148,20149],{"class":54,"line":4727},[52,20150,18178],{"class":160},[52,20152,20153,20155],{"class":54,"line":4741},[52,20154,17694],{"class":160},[52,20156,17684],{"class":622},[52,20158,20159],{"class":54,"line":4746},[52,20160,20161],{"class":332},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[52,20163,20164],{"class":54,"line":5538},[52,20165,20166],{"class":622},"    Point m_center;\n",[52,20168,20169],{"class":54,"line":5552},[52,20170,6954],{"class":622},[52,20172,20173,20175,20178,20180,20183,20185,20187,20189,20191,20193,20195],{"class":54,"line":5560},[52,20174,8320],{"class":160},[52,20176,20177],{"class":58}," isInCircle",[52,20179,3121],{"class":622},[52,20181,20182],{"class":58},"Circle",[52,20184,13540],{"class":160},[52,20186,3401],{"class":8172},[52,20188,3491],{"class":622},[52,20190,20097],{"class":58},[52,20192,13540],{"class":160},[52,20194,274],{"class":8172},[52,20196,170],{"class":622},[52,20198,20199],{"class":54,"line":5565},[52,20200,4524],{"class":622},[52,20202,20203,20205,20208,20210,20212,20215,20218,20221,20223,20225,20227,20229],{"class":54,"line":5571},[52,20204,17694],{"class":160},[52,20206,20207],{"class":622}," dx ",[52,20209,2099],{"class":160},[52,20211,19298],{"class":622},[52,20213,20214],{"class":58},"getCenter",[52,20216,20217],{"class":622},"().",[52,20219,20220],{"class":58},"getX",[52,20222,16006],{"class":622},[52,20224,3644],{"class":160},[52,20226,18844],{"class":622},[52,20228,20220],{"class":58},[52,20230,8592],{"class":622},[52,20232,20233,20235,20238,20240,20242,20244,20246,20249,20251,20253,20255,20257],{"class":54,"line":5577},[52,20234,17694],{"class":160},[52,20236,20237],{"class":622}," dy ",[52,20239,2099],{"class":160},[52,20241,19298],{"class":622},[52,20243,20214],{"class":58},[52,20245,20217],{"class":622},[52,20247,20248],{"class":58},"getY",[52,20250,16006],{"class":622},[52,20252,3644],{"class":160},[52,20254,18844],{"class":622},[52,20256,20248],{"class":58},[52,20258,8592],{"class":622},[52,20260,20261,20263,20266,20268,20271,20274,20276,20278,20280,20282,20284],{"class":54,"line":5582},[52,20262,17694],{"class":160},[52,20264,20265],{"class":622}," distance ",[52,20267,2099],{"class":160},[52,20269,20270],{"class":58}," sqrt",[52,20272,20273],{"class":622},"(dx ",[52,20275,1095],{"class":160},[52,20277,20207],{"class":622},[52,20279,3593],{"class":160},[52,20281,20237],{"class":622},[52,20283,1095],{"class":160},[52,20285,20286],{"class":622}," dy);\n",[52,20288,20289,20291,20294,20296,20298,20301],{"class":54,"line":10904},[52,20290,6060],{"class":160},[52,20292,20293],{"class":622}," (distance ",[52,20295,4022],{"class":160},[52,20297,19298],{"class":622},[52,20299,20300],{"class":58},"getRadius",[52,20302,20303],{"class":622},"())\n",[52,20305,20306],{"class":54,"line":10928},[52,20307,4992],{"class":622},[52,20309,20310,20312,20314,20317,20319],{"class":54,"line":10933},[52,20311,12625],{"class":622},[52,20313,4155],{"class":160},[52,20315,20316],{"class":62}," \"点在圆内\"",[52,20318,4423],{"class":160},[52,20320,11796],{"class":622},[52,20322,20323],{"class":54,"line":10939},[52,20324,5149],{"class":622},[52,20326,20327],{"class":54,"line":10966},[52,20328,19779],{"class":160},[52,20330,20331],{"class":54,"line":10971},[52,20332,4992],{"class":622},[52,20334,20335,20337,20339,20342,20344],{"class":54,"line":10977},[52,20336,12625],{"class":622},[52,20338,4155],{"class":160},[52,20340,20341],{"class":62}," \"点在圆外\"",[52,20343,4423],{"class":160},[52,20345,11796],{"class":622},[52,20347,20348],{"class":54,"line":10989},[52,20349,5149],{"class":622},[52,20351,20352],{"class":54,"line":11001},[52,20353,4543],{"class":622},[52,20355,20356,20358,20360],{"class":54,"line":11013},[52,20357,3124],{"class":160},[52,20359,4935],{"class":58},[52,20361,4938],{"class":622},[52,20363,20364],{"class":54,"line":12672},[52,20365,4524],{"class":622},[52,20367,20368],{"class":54,"line":12697},[52,20369,18009],{"class":332},[52,20371,20372],{"class":54,"line":12720},[52,20373,17756],{"class":622},[52,20375,20376],{"class":54,"line":12744},[52,20377,20378],{"class":622},"    Point p1;\n",[52,20380,20381],{"class":54,"line":12749},[52,20382,19950],{"class":332},[52,20384,20385,20387,20389,20392],{"class":54,"line":12754},[52,20386,4529],{"class":622},[52,20388,4155],{"class":160},[52,20390,20391],{"class":62},"\"请输入圆的半径：\"",[52,20393,4272],{"class":622},[52,20395,20396,20398],{"class":54,"line":12759},[52,20397,17694],{"class":160},[52,20399,20400],{"class":622}," r;\n",[52,20402,20403,20405,20407],{"class":54,"line":12768},[52,20404,4974],{"class":622},[52,20406,4408],{"class":160},[52,20408,20409],{"class":622},"r;\n",[52,20411,20412,20414,20417],{"class":54,"line":12773},[52,20413,19551],{"class":622},[52,20415,20416],{"class":58},"setRadius",[52,20418,20419],{"class":622},"(r);\n",[52,20421,20422,20424,20426,20429],{"class":54,"line":12779},[52,20423,4529],{"class":622},[52,20425,4155],{"class":160},[52,20427,20428],{"class":62},"\"请输入圆心坐标：\"",[52,20430,4272],{"class":622},[52,20432,20433,20435],{"class":54,"line":12800},[52,20434,17694],{"class":160},[52,20436,20437],{"class":622}," x, y;\n",[52,20439,20440,20442,20444,20446,20448],{"class":54,"line":12806},[52,20441,4974],{"class":622},[52,20443,4408],{"class":160},[52,20445,3932],{"class":622},[52,20447,4408],{"class":160},[52,20449,20450],{"class":622},"y;\n",[52,20452,20453,20456,20459],{"class":54,"line":12820},[52,20454,20455],{"class":622},"    p1.",[52,20457,20458],{"class":58},"setPoint",[52,20460,20461],{"class":622},"(x, y);\n",[52,20463,20464,20466,20469],{"class":54,"line":12826},[52,20465,19551],{"class":622},[52,20467,20468],{"class":58},"setCenter",[52,20470,20471],{"class":622},"(p1);\n",[52,20473,20474,20476,20478,20481],{"class":54,"line":12853},[52,20475,4529],{"class":622},[52,20477,4155],{"class":160},[52,20479,20480],{"class":62},"\"请输入测试点坐标：\"",[52,20482,4272],{"class":622},[52,20484,20485,20487],{"class":54,"line":12862},[52,20486,17694],{"class":160},[52,20488,20489],{"class":622}," x1, y1;\n",[52,20491,20492,20494,20496,20499,20501],{"class":54,"line":12868},[52,20493,4974],{"class":622},[52,20495,4408],{"class":160},[52,20497,20498],{"class":622},"x1",[52,20500,4408],{"class":160},[52,20502,20503],{"class":622},"y1;\n",[52,20505,20506],{"class":54,"line":12876},[52,20507,20508],{"class":622},"    Point p2;\n",[52,20510,20511,20514,20516],{"class":54,"line":12881},[52,20512,20513],{"class":622},"    p2.",[52,20515,20458],{"class":58},[52,20517,20518],{"class":622},"(x1, y1);\n",[52,20520,20521,20524],{"class":54,"line":19560},[52,20522,20523],{"class":58},"    isInCircle",[52,20525,20526],{"class":622},"(c1, p2);\n",[52,20528,20529],{"class":54,"line":19566},[52,20530,4543],{"class":622},[274,20532,20533],{},"在类中可以让另一个类作为本来的成员",[274,20535,20536],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[274,20538,20539],{},"创建point.h",[19,20541,20543],{"className":3109,"code":20542,"language":3111,"meta":28,"style":28},"#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",[26,20544,20545,20556,20562,20572,20578,20582,20587,20591,20595,20615,20619,20627,20635,20639,20643,20649,20655],{"__ignoreMap":28},[52,20546,20547,20550,20553],{"class":54,"line":55},[52,20548,20549],{"class":160},"#pragma",[52,20551,20552],{"class":58}," once",[52,20554,20555],{"class":332}," \u002F\u002F防止头文件重复包含\n",[52,20557,20558,20560],{"class":54,"line":69},[52,20559,4912],{"class":160},[52,20561,4915],{"class":62},[52,20563,20564,20566,20568,20570],{"class":54,"line":82},[52,20565,4920],{"class":160},[52,20567,4923],{"class":160},[52,20569,4926],{"class":58},[52,20571,4272],{"class":622},[52,20573,20574,20576],{"class":54,"line":97},[52,20575,17650],{"class":160},[52,20577,19937],{"class":58},[52,20579,20580],{"class":54,"line":112},[52,20581,4524],{"class":622},[52,20583,20584],{"class":54,"line":119},[52,20585,20586],{"class":332},"\u002F\u002F做好声明与变量定义就可以\n",[52,20588,20589],{"class":54,"line":130},[52,20590,17672],{"class":160},[52,20592,20593],{"class":54,"line":136},[52,20594,19950],{"class":332},[52,20596,20597,20599,20601,20603,20605,20607,20609,20611,20613],{"class":54,"line":141},[52,20598,17865],{"class":160},[52,20600,19957],{"class":58},[52,20602,3121],{"class":622},[52,20604,16993],{"class":160},[52,20606,19964],{"class":8172},[52,20608,15391],{"class":622},[52,20610,16993],{"class":160},[52,20612,19971],{"class":8172},[52,20614,5679],{"class":622},[52,20616,20617],{"class":54,"line":146},[52,20618,19989],{"class":332},[52,20620,20621,20623,20625],{"class":54,"line":152},[52,20622,17694],{"class":160},[52,20624,19996],{"class":58},[52,20626,8592],{"class":622},[52,20628,20629,20631,20633],{"class":54,"line":157},[52,20630,17694],{"class":160},[52,20632,20012],{"class":58},[52,20634,8592],{"class":622},[52,20636,20637],{"class":54,"line":173},[52,20638,116],{"emptyLinePlaceholder":115},[52,20640,20641],{"class":54,"line":178},[52,20642,18178],{"class":160},[52,20644,20645,20647],{"class":54,"line":184},[52,20646,17694],{"class":160},[52,20648,20034],{"class":622},[52,20650,20651,20653],{"class":54,"line":189},[52,20652,17694],{"class":160},[52,20654,20041],{"class":622},[52,20656,20657],{"class":54,"line":201},[52,20658,6954],{"class":622},[274,20660,20661],{},"创建point.cpp",[19,20663,20665],{"className":3109,"code":20664,"language":3111,"meta":28,"style":28},"#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",[26,20666,20667,20674,20679,20713,20717,20733],{"__ignoreMap":28},[52,20668,20669,20671],{"class":54,"line":55},[52,20670,4912],{"class":160},[52,20672,20673],{"class":62},"\u003Cpoint.h>\n",[52,20675,20676],{"class":54,"line":69},[52,20677,20678],{"class":332},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[52,20680,20681,20683,20686,20689,20691,20693,20695,20697,20699,20701,20703,20705,20707,20709,20711],{"class":54,"line":82},[52,20682,17865],{"class":160},[52,20684,20685],{"class":58}," Point",[52,20687,20688],{"class":622},"::",[52,20690,20458],{"class":58},[52,20692,3121],{"class":622},[52,20694,16993],{"class":160},[52,20696,19964],{"class":8172},[52,20698,15391],{"class":622},[52,20700,16993],{"class":160},[52,20702,19971],{"class":8172},[52,20704,19974],{"class":622},[52,20706,2099],{"class":160},[52,20708,19979],{"class":622},[52,20710,2099],{"class":160},[52,20712,19984],{"class":622},[52,20714,20715],{"class":54,"line":97},[52,20716,19989],{"class":332},[52,20718,20719,20721,20723,20725,20727,20729,20731],{"class":54,"line":112},[52,20720,17694],{"class":160},[52,20722,20685],{"class":58},[52,20724,20688],{"class":622},[52,20726,20220],{"class":58},[52,20728,19999],{"class":622},[52,20730,20002],{"class":160},[52,20732,20005],{"class":622},[52,20734,20735,20737,20739,20741,20743,20745,20747],{"class":54,"line":119},[52,20736,17694],{"class":160},[52,20738,20685],{"class":58},[52,20740,20688],{"class":622},[52,20742,20248],{"class":58},[52,20744,19999],{"class":622},[52,20746,20002],{"class":160},[52,20748,20019],{"class":622},[274,20750,20751],{},"创建circle.h",[19,20753,20755],{"className":3109,"code":20754,"language":3111,"meta":28,"style":28},"#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",[26,20756,20757,20764,20770,20780,20786,20792,20796,20800,20804,20818,20832,20836,20844,20852,20856,20860,20866,20870,20874],{"__ignoreMap":28},[52,20758,20759,20761],{"class":54,"line":55},[52,20760,20549],{"class":160},[52,20762,20763],{"class":58}," once\n",[52,20765,20766,20768],{"class":54,"line":69},[52,20767,4912],{"class":160},[52,20769,4915],{"class":62},[52,20771,20772,20774,20776,20778],{"class":54,"line":82},[52,20773,4920],{"class":160},[52,20775,4923],{"class":160},[52,20777,4926],{"class":58},[52,20779,4272],{"class":622},[52,20781,20782,20784],{"class":54,"line":97},[52,20783,4912],{"class":160},[52,20785,20673],{"class":62},[52,20787,20788,20790],{"class":54,"line":112},[52,20789,17650],{"class":160},[52,20791,17653],{"class":58},[52,20793,20794],{"class":54,"line":119},[52,20795,4524],{"class":622},[52,20797,20798],{"class":54,"line":130},[52,20799,17672],{"class":160},[52,20801,20802],{"class":54,"line":136},[52,20803,19950],{"class":332},[52,20805,20806,20808,20810,20812,20814,20816],{"class":54,"line":141},[52,20807,17865],{"class":160},[52,20809,20070],{"class":58},[52,20811,3121],{"class":622},[52,20813,16993],{"class":160},[52,20815,20077],{"class":8172},[52,20817,5679],{"class":622},[52,20819,20820,20822,20824,20826,20828,20830],{"class":54,"line":146},[52,20821,17865],{"class":160},[52,20823,20092],{"class":58},[52,20825,3121],{"class":622},[52,20827,20097],{"class":58},[52,20829,20100],{"class":8172},[52,20831,5679],{"class":622},[52,20833,20834],{"class":54,"line":152},[52,20835,20113],{"class":332},[52,20837,20838,20840,20842],{"class":54,"line":157},[52,20839,17694],{"class":160},[52,20841,20120],{"class":58},[52,20843,8592],{"class":622},[52,20845,20846,20848,20850],{"class":54,"line":173},[52,20847,20132],{"class":58},[52,20849,20135],{"class":58},[52,20851,8592],{"class":622},[52,20853,20854],{"class":54,"line":178},[52,20855,116],{"emptyLinePlaceholder":115},[52,20857,20858],{"class":54,"line":184},[52,20859,18178],{"class":160},[52,20861,20862,20864],{"class":54,"line":189},[52,20863,17694],{"class":160},[52,20865,17684],{"class":622},[52,20867,20868],{"class":54,"line":201},[52,20869,20161],{"class":332},[52,20871,20872],{"class":54,"line":206},[52,20873,20166],{"class":622},[52,20875,20876],{"class":54,"line":224},[52,20877,6954],{"class":622},[274,20879,20880],{},"创建circle.cpp",[19,20882,20884],{"className":3109,"code":20883,"language":3111,"meta":28,"style":28},"#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",[26,20885,20886,20893,20916,20938,20943,20959],{"__ignoreMap":28},[52,20887,20888,20890],{"class":54,"line":55},[52,20889,4912],{"class":160},[52,20891,20892],{"class":62},"\u003Ccircle.h>\n",[52,20894,20895,20897,20900,20902,20904,20906,20908,20910,20912,20914],{"class":54,"line":69},[52,20896,8320],{"class":160},[52,20898,20899],{"class":58}," Circle",[52,20901,20688],{"class":622},[52,20903,20416],{"class":58},[52,20905,3121],{"class":622},[52,20907,16993],{"class":160},[52,20909,20077],{"class":8172},[52,20911,20080],{"class":622},[52,20913,2099],{"class":160},[52,20915,20085],{"class":622},[52,20917,20918,20920,20922,20924,20926,20928,20930,20932,20934,20936],{"class":54,"line":82},[52,20919,8320],{"class":160},[52,20921,20899],{"class":58},[52,20923,20688],{"class":622},[52,20925,20468],{"class":58},[52,20927,3121],{"class":622},[52,20929,20097],{"class":58},[52,20931,20100],{"class":8172},[52,20933,20103],{"class":622},[52,20935,2099],{"class":160},[52,20937,20108],{"class":622},[52,20939,20940],{"class":54,"line":97},[52,20941,20942],{"class":332},"\u002F\u002F获取属性\n",[52,20944,20945,20947,20949,20951,20953,20955,20957],{"class":54,"line":112},[52,20946,16993],{"class":160},[52,20948,20899],{"class":58},[52,20950,20688],{"class":622},[52,20952,20300],{"class":58},[52,20954,19999],{"class":622},[52,20956,20002],{"class":160},[52,20958,20127],{"class":622},[52,20960,20961,20963,20965,20967,20969,20971,20973],{"class":54,"line":119},[52,20962,20097],{"class":58},[52,20964,20899],{"class":58},[52,20966,20688],{"class":622},[52,20968,20214],{"class":58},[52,20970,19999],{"class":622},[52,20972,20002],{"class":160},[52,20974,20142],{"class":622},[274,20976,20977],{},"使用封装的类",[19,20979,20981],{"className":3109,"code":20980,"language":3111,"meta":28,"style":28},"#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",[26,20982,20983,20989,20999,21005,21011,21035,21039,21065,21091,21115,21129,21133,21145,21149,21153,21157,21169,21173,21177,21185,21189,21193,21197,21201,21205,21215,21221,21229,21237,21247,21253,21265,21273,21281,21291,21297,21309,21313,21321,21327],{"__ignoreMap":28},[52,20984,20985,20987],{"class":54,"line":55},[52,20986,4912],{"class":160},[52,20988,4915],{"class":62},[52,20990,20991,20993,20995,20997],{"class":54,"line":69},[52,20992,4920],{"class":160},[52,20994,4923],{"class":160},[52,20996,4926],{"class":58},[52,20998,4272],{"class":622},[52,21000,21001,21003],{"class":54,"line":82},[52,21002,4912],{"class":160},[52,21004,20892],{"class":62},[52,21006,21007,21009],{"class":54,"line":97},[52,21008,4912],{"class":160},[52,21010,20673],{"class":62},[52,21012,21013,21015,21017,21019,21021,21023,21025,21027,21029,21031,21033],{"class":54,"line":112},[52,21014,8320],{"class":160},[52,21016,20177],{"class":58},[52,21018,3121],{"class":622},[52,21020,20182],{"class":58},[52,21022,13540],{"class":160},[52,21024,3401],{"class":8172},[52,21026,3491],{"class":622},[52,21028,20097],{"class":58},[52,21030,13540],{"class":160},[52,21032,274],{"class":8172},[52,21034,170],{"class":622},[52,21036,21037],{"class":54,"line":119},[52,21038,4524],{"class":622},[52,21040,21041,21043,21045,21047,21049,21051,21053,21055,21057,21059,21061,21063],{"class":54,"line":130},[52,21042,17694],{"class":160},[52,21044,20207],{"class":622},[52,21046,2099],{"class":160},[52,21048,19298],{"class":622},[52,21050,20214],{"class":58},[52,21052,20217],{"class":622},[52,21054,20220],{"class":58},[52,21056,16006],{"class":622},[52,21058,3644],{"class":160},[52,21060,18844],{"class":622},[52,21062,20220],{"class":58},[52,21064,8592],{"class":622},[52,21066,21067,21069,21071,21073,21075,21077,21079,21081,21083,21085,21087,21089],{"class":54,"line":136},[52,21068,17694],{"class":160},[52,21070,20237],{"class":622},[52,21072,2099],{"class":160},[52,21074,19298],{"class":622},[52,21076,20214],{"class":58},[52,21078,20217],{"class":622},[52,21080,20248],{"class":58},[52,21082,16006],{"class":622},[52,21084,3644],{"class":160},[52,21086,18844],{"class":622},[52,21088,20248],{"class":58},[52,21090,8592],{"class":622},[52,21092,21093,21095,21097,21099,21101,21103,21105,21107,21109,21111,21113],{"class":54,"line":141},[52,21094,17694],{"class":160},[52,21096,20265],{"class":622},[52,21098,2099],{"class":160},[52,21100,20270],{"class":58},[52,21102,20273],{"class":622},[52,21104,1095],{"class":160},[52,21106,20207],{"class":622},[52,21108,3593],{"class":160},[52,21110,20237],{"class":622},[52,21112,1095],{"class":160},[52,21114,20286],{"class":622},[52,21116,21117,21119,21121,21123,21125,21127],{"class":54,"line":146},[52,21118,6060],{"class":160},[52,21120,20293],{"class":622},[52,21122,4022],{"class":160},[52,21124,19298],{"class":622},[52,21126,20300],{"class":58},[52,21128,20303],{"class":622},[52,21130,21131],{"class":54,"line":152},[52,21132,4992],{"class":622},[52,21134,21135,21137,21139,21141,21143],{"class":54,"line":157},[52,21136,12625],{"class":622},[52,21138,4155],{"class":160},[52,21140,20316],{"class":62},[52,21142,4423],{"class":160},[52,21144,11796],{"class":622},[52,21146,21147],{"class":54,"line":173},[52,21148,5149],{"class":622},[52,21150,21151],{"class":54,"line":178},[52,21152,19779],{"class":160},[52,21154,21155],{"class":54,"line":184},[52,21156,4992],{"class":622},[52,21158,21159,21161,21163,21165,21167],{"class":54,"line":189},[52,21160,12625],{"class":622},[52,21162,4155],{"class":160},[52,21164,20341],{"class":62},[52,21166,4423],{"class":160},[52,21168,11796],{"class":622},[52,21170,21171],{"class":54,"line":201},[52,21172,5149],{"class":622},[52,21174,21175],{"class":54,"line":206},[52,21176,4543],{"class":622},[52,21178,21179,21181,21183],{"class":54,"line":224},[52,21180,3124],{"class":160},[52,21182,4935],{"class":58},[52,21184,4938],{"class":622},[52,21186,21187],{"class":54,"line":229},[52,21188,4524],{"class":622},[52,21190,21191],{"class":54,"line":241},[52,21192,18009],{"class":332},[52,21194,21195],{"class":54,"line":246},[52,21196,17756],{"class":622},[52,21198,21199],{"class":54,"line":252},[52,21200,20378],{"class":622},[52,21202,21203],{"class":54,"line":257},[52,21204,19950],{"class":332},[52,21206,21207,21209,21211,21213],{"class":54,"line":266},[52,21208,4529],{"class":622},[52,21210,4155],{"class":160},[52,21212,20391],{"class":62},[52,21214,4272],{"class":622},[52,21216,21217,21219],{"class":54,"line":4722},[52,21218,17694],{"class":160},[52,21220,20400],{"class":622},[52,21222,21223,21225,21227],{"class":54,"line":4727},[52,21224,4974],{"class":622},[52,21226,4408],{"class":160},[52,21228,20409],{"class":622},[52,21230,21231,21233,21235],{"class":54,"line":4741},[52,21232,19551],{"class":622},[52,21234,20416],{"class":58},[52,21236,20419],{"class":622},[52,21238,21239,21241,21243,21245],{"class":54,"line":4746},[52,21240,4529],{"class":622},[52,21242,4155],{"class":160},[52,21244,20428],{"class":62},[52,21246,4272],{"class":622},[52,21248,21249,21251],{"class":54,"line":5538},[52,21250,17694],{"class":160},[52,21252,20437],{"class":622},[52,21254,21255,21257,21259,21261,21263],{"class":54,"line":5552},[52,21256,4974],{"class":622},[52,21258,4408],{"class":160},[52,21260,3932],{"class":622},[52,21262,4408],{"class":160},[52,21264,20450],{"class":622},[52,21266,21267,21269,21271],{"class":54,"line":5560},[52,21268,20455],{"class":622},[52,21270,20458],{"class":58},[52,21272,20461],{"class":622},[52,21274,21275,21277,21279],{"class":54,"line":5565},[52,21276,19551],{"class":622},[52,21278,20468],{"class":58},[52,21280,20471],{"class":622},[52,21282,21283,21285,21287,21289],{"class":54,"line":5571},[52,21284,4529],{"class":622},[52,21286,4155],{"class":160},[52,21288,20480],{"class":62},[52,21290,4272],{"class":622},[52,21292,21293,21295],{"class":54,"line":5577},[52,21294,17694],{"class":160},[52,21296,20489],{"class":622},[52,21298,21299,21301,21303,21305,21307],{"class":54,"line":5582},[52,21300,4974],{"class":622},[52,21302,4408],{"class":160},[52,21304,20498],{"class":622},[52,21306,4408],{"class":160},[52,21308,20503],{"class":622},[52,21310,21311],{"class":54,"line":10904},[52,21312,20508],{"class":622},[52,21314,21315,21317,21319],{"class":54,"line":10928},[52,21316,20513],{"class":622},[52,21318,20458],{"class":58},[52,21320,20518],{"class":622},[52,21322,21323,21325],{"class":54,"line":10933},[52,21324,20523],{"class":58},[52,21326,20526],{"class":622},[52,21328,21329],{"class":54,"line":10939},[52,21330,4543],{"class":622},[14,21332,21334],{"id":21333},"_82对象的初始化清理","8.2对象的初始化清理",[4118,21336,21337,21340],{},[1073,21338,21339],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[1073,21341,21342],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[30,21344,21346],{"id":21345},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[274,21348,21349,21350,21353],{},"对象的",[538,21351,21352],{},"初始化和清理","也是两个非常重要的安全问题",[274,21355,21356],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[274,21358,21359],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[274,21361,21362,21363,2509,21366,21369],{},"c++利用了",[538,21364,21365],{},"构造函数",[538,21367,21368],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[274,21371,21372,21373],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[538,21374,21375],{},"我们不提供构造和析构，编译器会提供",[274,21377,21378],{},[538,21379,21380],{},"编译器提供的构造函数和析构函数是空实现。",[4118,21382,21383,21386],{},[1073,21384,21385],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[1073,21387,21388,21389,21392],{},"析构函数：主要作用在于对象",[538,21390,21391],{},"销毁前","系统自动调用，执行一些清理工作。",[274,21394,21395,21398],{},[538,21396,21397],{},"构造函数语法：",[26,21399,21400],{},"类名(){}",[1070,21402,21403,21406,21409,21412,21415],{},[1073,21404,21405],{},"构造函数，没有返回值也不写void",[1073,21407,21408],{},"函数名称与类名相同",[1073,21410,21411],{},"构造函数可以有参数，因此可以发生重载",[1073,21413,21414],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[1073,21416,21417,21418,3542],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[26,21419,21420],{},"Person(){}",[274,21422,21423,16751,21426],{},[538,21424,21425],{},"析构函数语法：",[26,21427,21428],{},"~类名(){}",[1070,21430,21431,21434,21437,21443],{},[1073,21432,21433],{},"析构函数，没有返回值也不写void",[1073,21435,21436],{},"函数名称与类名相同,在名称前加上符号  ~",[1073,21438,21439,21440],{},"析构函数不可以有参数，因此",[538,21441,21442],{},"不可以发生重载",[1073,21444,21445],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[19,21447,21449],{"className":3109,"code":21448,"language":3111,"meta":28,"style":28},"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",[26,21450,21451,21457,21461,21465,21470,21477,21481,21494,21498,21503,21510,21514,21527,21531,21535,21539,21543,21551,21555,21563,21567,21571,21579,21583,21588,21592,21599,21603,21616,21620,21628],{"__ignoreMap":28},[52,21452,21453,21455],{"class":54,"line":55},[52,21454,17650],{"class":160},[52,21456,18127],{"class":58},[52,21458,21459],{"class":54,"line":69},[52,21460,4524],{"class":622},[52,21462,21463],{"class":54,"line":82},[52,21464,17672],{"class":160},[52,21466,21467],{"class":54,"line":97},[52,21468,21469],{"class":332},"    \u002F\u002F构造函数\n",[52,21471,21472,21475],{"class":54,"line":112},[52,21473,21474],{"class":58},"    Person",[52,21476,4938],{"class":622},[52,21478,21479],{"class":54,"line":119},[52,21480,4992],{"class":622},[52,21482,21483,21485,21487,21490,21492],{"class":54,"line":130},[52,21484,12625],{"class":622},[52,21486,4155],{"class":160},[52,21488,21489],{"class":62}," \"Person的构造函数调用\"",[52,21491,4423],{"class":160},[52,21493,11796],{"class":622},[52,21495,21496],{"class":54,"line":136},[52,21497,5149],{"class":622},[52,21499,21500],{"class":54,"line":141},[52,21501,21502],{"class":332},"    \u002F\u002F析构函数\n",[52,21504,21505,21508],{"class":54,"line":146},[52,21506,21507],{"class":58},"    ~Person",[52,21509,4938],{"class":622},[52,21511,21512],{"class":54,"line":152},[52,21513,4992],{"class":622},[52,21515,21516,21518,21520,21523,21525],{"class":54,"line":157},[52,21517,12625],{"class":622},[52,21519,4155],{"class":160},[52,21521,21522],{"class":62}," \"Person的析构函数调用\"",[52,21524,4423],{"class":160},[52,21526,11796],{"class":622},[52,21528,21529],{"class":54,"line":173},[52,21530,5149],{"class":622},[52,21532,21533],{"class":54,"line":178},[52,21534,116],{"emptyLinePlaceholder":115},[52,21536,21537],{"class":54,"line":184},[52,21538,6954],{"class":622},[52,21540,21541],{"class":54,"line":189},[52,21542,116],{"emptyLinePlaceholder":115},[52,21544,21545,21547,21549],{"class":54,"line":201},[52,21546,8320],{"class":160},[52,21548,8544],{"class":58},[52,21550,4938],{"class":622},[52,21552,21553],{"class":54,"line":206},[52,21554,4524],{"class":622},[52,21556,21557,21560],{"class":54,"line":224},[52,21558,21559],{"class":622},"    Person p;",[52,21561,21562],{"class":332},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[52,21564,21565],{"class":54,"line":229},[52,21566,4543],{"class":622},[52,21568,21569],{"class":54,"line":241},[52,21570,116],{"emptyLinePlaceholder":115},[52,21572,21573,21575,21577],{"class":54,"line":246},[52,21574,3124],{"class":160},[52,21576,4935],{"class":58},[52,21578,13809],{"class":622},[52,21580,21581],{"class":54,"line":252},[52,21582,16166],{"class":622},[52,21584,21585],{"class":54,"line":257},[52,21586,21587],{"class":332},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[52,21589,21590],{"class":54,"line":266},[52,21591,116],{"emptyLinePlaceholder":115},[52,21593,21594,21596],{"class":54,"line":4722},[52,21595,21559],{"class":622},[52,21597,21598],{"class":332},"\u002F\u002F只有构造函数\n",[52,21600,21601],{"class":54,"line":4727},[52,21602,116],{"emptyLinePlaceholder":115},[52,21604,21605,21607,21609,21611,21613],{"class":54,"line":4741},[52,21606,5265],{"class":58},[52,21608,3121],{"class":622},[52,21610,5270],{"class":62},[52,21612,8922],{"class":622},[52,21614,21615],{"class":332},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[52,21617,21618],{"class":54,"line":4746},[52,21619,116],{"emptyLinePlaceholder":115},[52,21621,21622,21624,21626],{"class":54,"line":5538},[52,21623,7049],{"class":160},[52,21625,7052],{"class":90},[52,21627,4272],{"class":622},[52,21629,21630],{"class":54,"line":5552},[52,21631,4543],{"class":622},[274,21633,21634],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[30,21636,21638],{"id":21637},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[274,21640,21641],{},"两种分类方式：",[274,21643,21644],{},"​\t按参数分为： 有参构造和无参构造",[274,21646,21647],{},"​\t按类型分为： 普通构造和拷贝构造",[274,21649,21650],{},"三种调用方式：",[274,21652,21653],{},"​\t括号法",[274,21655,21656],{},"​\t显示法",[274,21658,21659],{},"​\t隐式转换法",[19,21661,21663],{"className":3109,"code":21662,"language":3111,"meta":28,"style":28},"#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",[26,21664,21665,21671,21681,21686,21691,21696,21701,21705,21713,21717,21721,21725,21731,21735,21748,21752,21764,21768,21777,21790,21794,21798,21804,21808,21821,21825,21830,21846,21850,21855,21864,21877,21881,21887,21891,21896,21904,21908,21913,21917,21925,21929,21934,21939,21944,21949,21954,21958,21963,21968,21973,21978,21982,21987,21992,22008,22020,22025,22029,22034,22039,22044,22048,22053,22067,22080,22084,22092,22096,22102,22108,22116],{"__ignoreMap":28},[52,21666,21667,21669],{"class":54,"line":55},[52,21668,4912],{"class":160},[52,21670,4915],{"class":62},[52,21672,21673,21675,21677,21679],{"class":54,"line":69},[52,21674,4920],{"class":160},[52,21676,4923],{"class":160},[52,21678,4926],{"class":58},[52,21680,4272],{"class":622},[52,21682,21683],{"class":54,"line":82},[52,21684,21685],{"class":332},"\u002F\u002F1.构造函数的分类及调用\n",[52,21687,21688],{"class":54,"line":97},[52,21689,21690],{"class":332},"\u002F\u002F分类\n",[52,21692,21693],{"class":54,"line":112},[52,21694,21695],{"class":332},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[52,21697,21698],{"class":54,"line":119},[52,21699,21700],{"class":332},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[52,21702,21703],{"class":54,"line":130},[52,21704,116],{"emptyLinePlaceholder":115},[52,21706,21707,21709,21711],{"class":54,"line":136},[52,21708,17650],{"class":160},[52,21710,18525],{"class":58},[52,21712,623],{"class":622},[52,21714,21715],{"class":54,"line":141},[52,21716,4524],{"class":622},[52,21718,21719],{"class":54,"line":146},[52,21720,17672],{"class":160},[52,21722,21723],{"class":54,"line":152},[52,21724,21469],{"class":332},[52,21726,21727,21729],{"class":54,"line":157},[52,21728,21474],{"class":58},[52,21730,4938],{"class":622},[52,21732,21733],{"class":54,"line":173},[52,21734,4992],{"class":622},[52,21736,21737,21739,21741,21744,21746],{"class":54,"line":178},[52,21738,6410],{"class":622},[52,21740,4155],{"class":160},[52,21742,21743],{"class":62},"\"Person构造函数无参构造\"",[52,21745,4155],{"class":160},[52,21747,4177],{"class":622},[52,21749,21750],{"class":54,"line":184},[52,21751,5149],{"class":622},[52,21753,21754,21756,21758,21760,21762],{"class":54,"line":189},[52,21755,21474],{"class":58},[52,21757,3121],{"class":622},[52,21759,3124],{"class":160},[52,21761,4377],{"class":8172},[52,21763,170],{"class":622},[52,21765,21766],{"class":54,"line":201},[52,21767,4992],{"class":622},[52,21769,21770,21773,21775],{"class":54,"line":206},[52,21771,21772],{"class":622},"        age",[52,21774,2099],{"class":160},[52,21776,9153],{"class":622},[52,21778,21779,21781,21783,21786,21788],{"class":54,"line":224},[52,21780,6410],{"class":622},[52,21782,4155],{"class":160},[52,21784,21785],{"class":62},"\"Person构造函数有参构造\"",[52,21787,4155],{"class":160},[52,21789,4177],{"class":622},[52,21791,21792],{"class":54,"line":229},[52,21793,5149],{"class":622},[52,21795,21796],{"class":54,"line":241},[52,21797,21502],{"class":332},[52,21799,21800,21802],{"class":54,"line":246},[52,21801,21507],{"class":58},[52,21803,4938],{"class":622},[52,21805,21806],{"class":54,"line":252},[52,21807,4992],{"class":622},[52,21809,21810,21812,21814,21817,21819],{"class":54,"line":257},[52,21811,6410],{"class":622},[52,21813,4155],{"class":160},[52,21815,21816],{"class":62},"\"Person析构函数被调用\"",[52,21818,4155],{"class":160},[52,21820,4177],{"class":622},[52,21822,21823],{"class":54,"line":266},[52,21824,5149],{"class":622},[52,21826,21827],{"class":54,"line":4722},[52,21828,21829],{"class":332},"    \u002F\u002F拷贝构造函数\n",[52,21831,21832,21834,21836,21838,21840,21842,21844],{"class":54,"line":4727},[52,21833,21474],{"class":58},[52,21835,3121],{"class":622},[52,21837,9748],{"class":160},[52,21839,18525],{"class":58},[52,21841,13540],{"class":160},[52,21843,274],{"class":8172},[52,21845,170],{"class":622},[52,21847,21848],{"class":54,"line":4741},[52,21849,4992],{"class":622},[52,21851,21852],{"class":54,"line":4746},[52,21853,21854],{"class":332},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[52,21856,21857,21859,21861],{"class":54,"line":5538},[52,21858,21772],{"class":622},[52,21860,2099],{"class":160},[52,21862,21863],{"class":622},"p.age;\n",[52,21865,21866,21868,21870,21873,21875],{"class":54,"line":5552},[52,21867,6410],{"class":622},[52,21869,4155],{"class":160},[52,21871,21872],{"class":62},"\"Person拷贝构造函数被调用\"",[52,21874,4155],{"class":160},[52,21876,4177],{"class":622},[52,21878,21879],{"class":54,"line":5560},[52,21880,5149],{"class":622},[52,21882,21883,21885],{"class":54,"line":5565},[52,21884,4947],{"class":160},[52,21886,10753],{"class":622},[52,21888,21889],{"class":54,"line":5571},[52,21890,6954],{"class":622},[52,21892,21893],{"class":54,"line":5577},[52,21894,21895],{"class":332},"\u002F\u002F调用\n",[52,21897,21898,21900,21902],{"class":54,"line":5582},[52,21899,8320],{"class":160},[52,21901,8544],{"class":58},[52,21903,4938],{"class":622},[52,21905,21906],{"class":54,"line":10904},[52,21907,4524],{"class":622},[52,21909,21910],{"class":54,"line":10928},[52,21911,21912],{"class":332},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[52,21914,21915],{"class":54,"line":10933},[52,21916,4543],{"class":622},[52,21918,21919,21921,21923],{"class":54,"line":10939},[52,21920,8320],{"class":160},[52,21922,8613],{"class":58},[52,21924,4938],{"class":622},[52,21926,21927],{"class":54,"line":10966},[52,21928,4524],{"class":622},[52,21930,21931],{"class":54,"line":10971},[52,21932,21933],{"class":332},"    \u002F\u002F1.括号法\n",[52,21935,21936],{"class":54,"line":10977},[52,21937,21938],{"class":332},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[52,21940,21941],{"class":54,"line":10989},[52,21942,21943],{"class":332},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[52,21945,21946],{"class":54,"line":11001},[52,21947,21948],{"class":332},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[52,21950,21951],{"class":54,"line":11013},[52,21952,21953],{"class":332},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[52,21955,21956],{"class":54,"line":12672},[52,21957,116],{"emptyLinePlaceholder":115},[52,21959,21960],{"class":54,"line":12697},[52,21961,21962],{"class":332},"    \u002F\u002F注意事项\n",[52,21964,21965],{"class":54,"line":12720},[52,21966,21967],{"class":332},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[52,21969,21970],{"class":54,"line":12744},[52,21971,21972],{"class":332},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[52,21974,21975],{"class":54,"line":12749},[52,21976,21977],{"class":332},"    \u002F\u002F Person p4();\n",[52,21979,21980],{"class":54,"line":12754},[52,21981,116],{"emptyLinePlaceholder":115},[52,21983,21984],{"class":54,"line":12759},[52,21985,21986],{"class":332},"    \u002F\u002F2.显示法\n",[52,21988,21989],{"class":54,"line":12768},[52,21990,21991],{"class":622},"    Person p1;\n",[52,21993,21994,21997,21999,22002,22004,22006],{"class":54,"line":12773},[52,21995,21996],{"class":622},"    Person p2",[52,21998,2099],{"class":160},[52,22000,22001],{"class":58},"Person",[52,22003,3121],{"class":622},[52,22005,3559],{"class":90},[52,22007,5679],{"class":622},[52,22009,22010,22013,22015,22017],{"class":54,"line":12779},[52,22011,22012],{"class":622},"    Person p3",[52,22014,2099],{"class":160},[52,22016,22001],{"class":58},[52,22018,22019],{"class":622},"(p2);\n",[52,22021,22022],{"class":54,"line":12800},[52,22023,22024],{"class":332},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[52,22026,22027],{"class":54,"line":12806},[52,22028,116],{"emptyLinePlaceholder":115},[52,22030,22031],{"class":54,"line":12820},[52,22032,22033],{"class":332},"    \u002F\u002F 注意事项2\n",[52,22035,22036],{"class":54,"line":12826},[52,22037,22038],{"class":332},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[52,22040,22041],{"class":54,"line":12853},[52,22042,22043],{"class":332},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[52,22045,22046],{"class":54,"line":12862},[52,22047,116],{"emptyLinePlaceholder":115},[52,22049,22050],{"class":54,"line":12868},[52,22051,22052],{"class":332},"    \u002F\u002F3.隐士转换法\n",[52,22054,22055,22058,22060,22062,22064],{"class":54,"line":12876},[52,22056,22057],{"class":622},"    Person p4",[52,22059,2099],{"class":160},[52,22061,3559],{"class":90},[52,22063,3173],{"class":622},[52,22065,22066],{"class":332},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[52,22068,22069,22072,22074,22077],{"class":54,"line":12881},[52,22070,22071],{"class":622},"    Person p5",[52,22073,2099],{"class":160},[52,22075,22076],{"class":622},"p4;",[52,22078,22079],{"class":332}," \u002F\u002F 这里会调用拷贝构造函数\n",[52,22081,22082],{"class":54,"line":19560},[52,22083,4543],{"class":622},[52,22085,22086,22088,22090],{"class":54,"line":19566},[52,22087,3124],{"class":160},[52,22089,4935],{"class":58},[52,22091,4938],{"class":622},[52,22093,22094],{"class":54,"line":19589},[52,22095,4524],{"class":622},[52,22097,22098,22100],{"class":54,"line":19595},[52,22099,8589],{"class":58},[52,22101,8592],{"class":622},[52,22103,22104,22106],{"class":54,"line":19618},[52,22105,8658],{"class":58},[52,22107,8592],{"class":622},[52,22109,22110,22112,22114],{"class":54,"line":19632},[52,22111,7049],{"class":160},[52,22113,7052],{"class":90},[52,22115,4272],{"class":622},[52,22117,22118],{"class":54,"line":19652},[52,22119,4543],{"class":622},[274,22121,22122,22125],{},[538,22123,22124],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[30,22127,22129],{"id":22128},"_823拷贝构造函数","8.2.3拷贝构造函数",[274,22131,22132],{},"C++中拷贝构造函数调用时机通常有三种情况",[4118,22134,22135,22138,22141],{},[1073,22136,22137],{},"使用一个已经创建完毕的对象来初始化一个新对象",[1073,22139,22140],{},"值传递的方式给函数参数传值",[1073,22142,22143],{},"以值方式返回局部对象",[19,22145,22147],{"className":3109,"code":22146,"language":3111,"meta":28,"style":28},"#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",[26,22148,22149,22155,22165,22169,22174,22178,22183,22188,22193,22199,22203,22207,22213,22217,22230,22234,22239,22251,22255,22263,22276,22280,22284,22300,22304,22313,22326,22330,22336,22340,22352,22356,22362,22366,22370,22378,22382,22395,22403,22421,22425,22430,22435,22450,22454,22467,22471,22479,22483,22487,22495,22499,22504,22513,22517,22521,22546,22556,22560,22568,22572,22583,22608,22612,22616,22620,22628,22632,22637,22642,22649,22654,22659,22664,22669,22673,22678,22682,22687,22691,22696,22701,22705,22709,22714,22719,22727],{"__ignoreMap":28},[52,22150,22151,22153],{"class":54,"line":55},[52,22152,4912],{"class":160},[52,22154,4915],{"class":62},[52,22156,22157,22159,22161,22163],{"class":54,"line":69},[52,22158,4920],{"class":160},[52,22160,4923],{"class":160},[52,22162,4926],{"class":58},[52,22164,4272],{"class":622},[52,22166,22167],{"class":54,"line":82},[52,22168,116],{"emptyLinePlaceholder":115},[52,22170,22171],{"class":54,"line":97},[52,22172,22173],{"class":332},"\u002F\u002F拷贝构造函数调用时机\n",[52,22175,22176],{"class":54,"line":112},[52,22177,116],{"emptyLinePlaceholder":115},[52,22179,22180],{"class":54,"line":119},[52,22181,22182],{"class":332},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[52,22184,22185],{"class":54,"line":130},[52,22186,22187],{"class":332},"\u002F\u002F2.值传递的方式给函数参数传值\n",[52,22189,22190],{"class":54,"line":136},[52,22191,22192],{"class":332},"\u002F\u002F3.以值方式返回局部对象\n",[52,22194,22195,22197],{"class":54,"line":141},[52,22196,17650],{"class":160},[52,22198,18127],{"class":58},[52,22200,22201],{"class":54,"line":146},[52,22202,4524],{"class":622},[52,22204,22205],{"class":54,"line":152},[52,22206,17672],{"class":160},[52,22208,22209,22211],{"class":54,"line":157},[52,22210,21474],{"class":58},[52,22212,4938],{"class":622},[52,22214,22215],{"class":54,"line":173},[52,22216,4992],{"class":622},[52,22218,22219,22221,22223,22226,22228],{"class":54,"line":178},[52,22220,12625],{"class":622},[52,22222,4155],{"class":160},[52,22224,22225],{"class":62}," \"Person的默认构造函数调用\"",[52,22227,4423],{"class":160},[52,22229,11796],{"class":622},[52,22231,22232],{"class":54,"line":184},[52,22233,5149],{"class":622},[52,22235,22236],{"class":54,"line":189},[52,22237,22238],{"class":332},"    \u002F\u002F有参构造\n",[52,22240,22241,22243,22245,22247,22249],{"class":54,"line":201},[52,22242,21474],{"class":58},[52,22244,3121],{"class":622},[52,22246,3124],{"class":160},[52,22248,18645],{"class":8172},[52,22250,170],{"class":622},[52,22252,22253],{"class":54,"line":206},[52,22254,4992],{"class":622},[52,22256,22257,22259,22261],{"class":54,"line":224},[52,22258,18699],{"class":622},[52,22260,2099],{"class":160},[52,22262,10753],{"class":622},[52,22264,22265,22267,22269,22272,22274],{"class":54,"line":229},[52,22266,12625],{"class":622},[52,22268,4155],{"class":160},[52,22270,22271],{"class":62}," \"Person的有参构造函数调用\"",[52,22273,4423],{"class":160},[52,22275,11796],{"class":622},[52,22277,22278],{"class":54,"line":241},[52,22279,5149],{"class":622},[52,22281,22282],{"class":54,"line":246},[52,22283,21829],{"class":332},[52,22285,22286,22288,22290,22292,22294,22296,22298],{"class":54,"line":252},[52,22287,21474],{"class":58},[52,22289,3121],{"class":622},[52,22291,9748],{"class":160},[52,22293,18525],{"class":58},[52,22295,13540],{"class":160},[52,22297,274],{"class":8172},[52,22299,170],{"class":622},[52,22301,22302],{"class":54,"line":257},[52,22303,4992],{"class":622},[52,22305,22306,22308,22310],{"class":54,"line":266},[52,22307,18699],{"class":622},[52,22309,2099],{"class":160},[52,22311,22312],{"class":622}," p.m_Age;\n",[52,22314,22315,22317,22319,22322,22324],{"class":54,"line":4722},[52,22316,12625],{"class":622},[52,22318,4155],{"class":160},[52,22320,22321],{"class":62}," \"Person的拷贝构造函数调用\"",[52,22323,4423],{"class":160},[52,22325,11796],{"class":622},[52,22327,22328],{"class":54,"line":4727},[52,22329,5149],{"class":622},[52,22331,22332,22334],{"class":54,"line":4741},[52,22333,21507],{"class":58},[52,22335,4938],{"class":622},[52,22337,22338],{"class":54,"line":4746},[52,22339,4992],{"class":622},[52,22341,22342,22344,22346,22348,22350],{"class":54,"line":5538},[52,22343,12625],{"class":622},[52,22345,4155],{"class":160},[52,22347,21522],{"class":62},[52,22349,4423],{"class":160},[52,22351,11796],{"class":622},[52,22353,22354],{"class":54,"line":5552},[52,22355,5149],{"class":622},[52,22357,22358,22360],{"class":54,"line":5560},[52,22359,4947],{"class":160},[52,22361,18622],{"class":622},[52,22363,22364],{"class":54,"line":5565},[52,22365,6954],{"class":622},[52,22367,22368],{"class":54,"line":5571},[52,22369,22182],{"class":332},[52,22371,22372,22374,22376],{"class":54,"line":5577},[52,22373,8320],{"class":160},[52,22375,8544],{"class":58},[52,22377,4938],{"class":622},[52,22379,22380],{"class":54,"line":5582},[52,22381,4524],{"class":622},[52,22383,22384,22387,22389,22391,22393],{"class":54,"line":10904},[52,22385,22386],{"class":622},"    Person ",[52,22388,10086],{"class":58},[52,22390,3121],{"class":622},[52,22392,3812],{"class":90},[52,22394,5679],{"class":622},[52,22396,22397,22399,22401],{"class":54,"line":10928},[52,22398,22386],{"class":622},[52,22400,9989],{"class":58},[52,22402,20471],{"class":622},[52,22404,22405,22407,22409,22412,22414,22417,22419],{"class":54,"line":10933},[52,22406,4529],{"class":622},[52,22408,4155],{"class":160},[52,22410,22411],{"class":62},"\"P2的年龄为：\"",[52,22413,4155],{"class":160},[52,22415,22416],{"class":622},"p2.m_Age",[52,22418,4155],{"class":160},[52,22420,4177],{"class":622},[52,22422,22423],{"class":54,"line":10939},[52,22424,4543],{"class":622},[52,22426,22427],{"class":54,"line":10966},[52,22428,22429],{"class":332},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[52,22431,22432],{"class":54,"line":10971},[52,22433,22434],{"class":332},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[52,22436,22437,22439,22442,22444,22446,22448],{"class":54,"line":10977},[52,22438,8320],{"class":160},[52,22440,22441],{"class":58}," doWork",[52,22443,3121],{"class":622},[52,22445,22001],{"class":58},[52,22447,9781],{"class":8172},[52,22449,170],{"class":622},[52,22451,22452],{"class":54,"line":10989},[52,22453,4524],{"class":622},[52,22455,22456,22458,22460,22463,22465],{"class":54,"line":11001},[52,22457,9485],{"class":622},[52,22459,4155],{"class":160},[52,22461,22462],{"class":62}," \"doWork函数调用\"",[52,22464,4423],{"class":160},[52,22466,11796],{"class":622},[52,22468,22469],{"class":54,"line":11013},[52,22470,4543],{"class":622},[52,22472,22473,22475,22477],{"class":54,"line":12672},[52,22474,8320],{"class":160},[52,22476,8613],{"class":58},[52,22478,4938],{"class":622},[52,22480,22481],{"class":54,"line":12697},[52,22482,4524],{"class":622},[52,22484,22485],{"class":54,"line":12720},[52,22486,18269],{"class":622},[52,22488,22489,22492],{"class":54,"line":12744},[52,22490,22491],{"class":58},"    doWork",[52,22493,22494],{"class":622},"(p);\n",[52,22496,22497],{"class":54,"line":12749},[52,22498,4543],{"class":622},[52,22500,22501],{"class":54,"line":12754},[52,22502,22503],{"class":332},"\u002F\u002F 3.以值方式返回局部对象\n",[52,22505,22506,22508,22511],{"class":54,"line":12759},[52,22507,22001],{"class":58},[52,22509,22510],{"class":58}," doWork2",[52,22512,4938],{"class":622},[52,22514,22515],{"class":54,"line":12768},[52,22516,4524],{"class":622},[52,22518,22519],{"class":54,"line":12773},[52,22520,21991],{"class":622},[52,22522,22523,22525,22527,22529,22531,22533,22535,22537,22539,22541,22543],{"class":54,"line":12779},[52,22524,4529],{"class":622},[52,22526,4155],{"class":160},[52,22528,3121],{"class":622},[52,22530,3124],{"class":160},[52,22532,9474],{"class":160},[52,22534,3542],{"class":622},[52,22536,3466],{"class":160},[52,22538,10086],{"class":622},[52,22540,4155],{"class":160},[52,22542,4220],{"class":622},[52,22544,22545],{"class":332},"\u002F\u002F打印p1的地址\n",[52,22547,22548,22550,22553],{"class":54,"line":12800},[52,22549,7049],{"class":160},[52,22551,22552],{"class":622}," p1;",[52,22554,22555],{"class":332},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[52,22557,22558],{"class":54,"line":12806},[52,22559,4543],{"class":622},[52,22561,22562,22564,22566],{"class":54,"line":12820},[52,22563,8320],{"class":160},[52,22565,8685],{"class":58},[52,22567,4938],{"class":622},[52,22569,22570],{"class":54,"line":12826},[52,22571,4524],{"class":622},[52,22573,22574,22577,22579,22581],{"class":54,"line":12853},[52,22575,22576],{"class":622},"    Person p ",[52,22578,2099],{"class":160},[52,22580,22510],{"class":58},[52,22582,8592],{"class":622},[52,22584,22585,22587,22589,22591,22593,22595,22597,22599,22601,22603,22605],{"class":54,"line":12862},[52,22586,4529],{"class":622},[52,22588,4155],{"class":160},[52,22590,3121],{"class":622},[52,22592,3124],{"class":160},[52,22594,9474],{"class":160},[52,22596,3542],{"class":622},[52,22598,3466],{"class":160},[52,22600,274],{"class":622},[52,22602,4155],{"class":160},[52,22604,4220],{"class":622},[52,22606,22607],{"class":332},"\u002F\u002F打印p的地址\n",[52,22609,22610],{"class":54,"line":12868},[52,22611,4543],{"class":622},[52,22613,22614],{"class":54,"line":12876},[52,22615,116],{"emptyLinePlaceholder":115},[52,22617,22618],{"class":54,"line":12881},[52,22619,116],{"emptyLinePlaceholder":115},[52,22621,22622,22624,22626],{"class":54,"line":19560},[52,22623,3124],{"class":160},[52,22625,4935],{"class":58},[52,22627,4938],{"class":622},[52,22629,22630],{"class":54,"line":19566},[52,22631,4524],{"class":622},[52,22633,22634],{"class":54,"line":19589},[52,22635,22636],{"class":332},"    \u002F\u002F test01();\n",[52,22638,22639],{"class":54,"line":19595},[52,22640,22641],{"class":332},"    \u002F\u002F test02();\n",[52,22643,22644,22647],{"class":54,"line":19618},[52,22645,22646],{"class":58},"    test03",[52,22648,8592],{"class":622},[52,22650,22651],{"class":54,"line":19632},[52,22652,22653],{"class":332},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[52,22655,22656],{"class":54,"line":19652},[52,22657,22658],{"class":332},"\u002F\u002F 输出结果如下：\n",[52,22660,22661],{"class":54,"line":19658},[52,22662,22663],{"class":332},"\u002F\u002F Person的默认构造函数调用\n",[52,22665,22666],{"class":54,"line":19669},[52,22667,22668],{"class":332},"\u002F\u002F 0x7fffffffceec\n",[52,22670,22671],{"class":54,"line":19692},[52,22672,22668],{"class":332},[52,22674,22675],{"class":54,"line":19714},[52,22676,22677],{"class":332},"\u002F\u002F Person的析构函数调用\n",[52,22679,22680],{"class":54,"line":19719},[52,22681,116],{"emptyLinePlaceholder":115},[52,22683,22684],{"class":54,"line":19725},[52,22685,22686],{"class":332},"\u002F\u002F 之前的输出结果如下：\n",[52,22688,22689],{"class":54,"line":19739},[52,22690,22663],{"class":332},[52,22692,22693],{"class":54,"line":19752},[52,22694,22695],{"class":332},"\u002F\u002F 地址\n",[52,22697,22698],{"class":54,"line":19757},[52,22699,22700],{"class":332},"\u002F\u002F Person的拷贝构造函数调用\n",[52,22702,22703],{"class":54,"line":19771},[52,22704,22677],{"class":332},[52,22706,22707],{"class":54,"line":19776},[52,22708,22695],{"class":332},[52,22710,22711],{"class":54,"line":19782},[52,22712,22713],{"class":332},"\u002F\u002F (这两次输出的地址也是不同的) \n",[52,22715,22716],{"class":54,"line":19787},[52,22717,22718],{"class":332},"\u002F\u002F Person的析构函数调用     \n",[52,22720,22721,22723,22725],{"class":54,"line":19801},[52,22722,7049],{"class":160},[52,22724,7052],{"class":90},[52,22726,4272],{"class":622},[52,22728,22729],{"class":54,"line":19806},[52,22730,4543],{"class":622},[274,22732,22733],{},"简化版理解",[19,22735,22737],{"className":3109,"code":22736,"language":3111,"meta":28,"style":28},"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",[26,22738,22739,22747,22751,22757,22770,22781,22785,22797,22810,22818,22822,22838,22851,22860,22864,22869,22875,22888,22892,22896,22903,22907,22911,22916,22924,22928,22944,22957,22970,22974,22979,22987,22991,22995,23000,23005,23021,23029,23036,23042,23046,23050,23055,23063,23067,23071,23094,23101,23105,23109,23117,23121,23131,23153,23157,23161,23165,23173,23177,23182,23187,23193,23197,23207,23211,23219],{"__ignoreMap":28},[52,22740,22741,22743,22745],{"class":54,"line":55},[52,22742,17650],{"class":160},[52,22744,18525],{"class":58},[52,22746,18528],{"class":622},[52,22748,22749],{"class":54,"line":69},[52,22750,17672],{"class":160},[52,22752,22753,22755],{"class":54,"line":82},[52,22754,21474],{"class":58},[52,22756,13809],{"class":622},[52,22758,22759,22761,22763,22766,22768],{"class":54,"line":97},[52,22760,12625],{"class":622},[52,22762,4155],{"class":160},[52,22764,22765],{"class":62}," \"无参构造函数!\"",[52,22767,4423],{"class":160},[52,22769,11796],{"class":622},[52,22771,22772,22775,22777,22779],{"class":54,"line":112},[52,22773,22774],{"class":622},"        mAge ",[52,22776,2099],{"class":160},[52,22778,7052],{"class":90},[52,22780,4272],{"class":622},[52,22782,22783],{"class":54,"line":119},[52,22784,5149],{"class":622},[52,22786,22787,22789,22791,22793,22795],{"class":54,"line":130},[52,22788,21474],{"class":58},[52,22790,3121],{"class":622},[52,22792,3124],{"class":160},[52,22794,18645],{"class":8172},[52,22796,15398],{"class":622},[52,22798,22799,22801,22803,22806,22808],{"class":54,"line":136},[52,22800,12625],{"class":622},[52,22802,4155],{"class":160},[52,22804,22805],{"class":62}," \"有参构造函数!\"",[52,22807,4423],{"class":160},[52,22809,11796],{"class":622},[52,22811,22812,22814,22816],{"class":54,"line":141},[52,22813,22774],{"class":622},[52,22815,2099],{"class":160},[52,22817,10753],{"class":622},[52,22819,22820],{"class":54,"line":146},[52,22821,5149],{"class":622},[52,22823,22824,22826,22828,22830,22832,22834,22836],{"class":54,"line":152},[52,22825,21474],{"class":58},[52,22827,3121],{"class":622},[52,22829,9748],{"class":160},[52,22831,18525],{"class":58},[52,22833,3466],{"class":160},[52,22835,9781],{"class":8172},[52,22837,15398],{"class":622},[52,22839,22840,22842,22844,22847,22849],{"class":54,"line":157},[52,22841,12625],{"class":622},[52,22843,4155],{"class":160},[52,22845,22846],{"class":62}," \"拷贝构造函数!\"",[52,22848,4423],{"class":160},[52,22850,11796],{"class":622},[52,22852,22853,22855,22857],{"class":54,"line":173},[52,22854,22774],{"class":622},[52,22856,2099],{"class":160},[52,22858,22859],{"class":622}," p.mAge;\n",[52,22861,22862],{"class":54,"line":178},[52,22863,5149],{"class":622},[52,22865,22866],{"class":54,"line":184},[52,22867,22868],{"class":332},"    \u002F\u002F析构函数在释放内存之前调用\n",[52,22870,22871,22873],{"class":54,"line":189},[52,22872,21507],{"class":58},[52,22874,13809],{"class":622},[52,22876,22877,22879,22881,22884,22886],{"class":54,"line":201},[52,22878,12625],{"class":622},[52,22880,4155],{"class":160},[52,22882,22883],{"class":62}," \"析构函数!\"",[52,22885,4423],{"class":160},[52,22887,11796],{"class":622},[52,22889,22890],{"class":54,"line":206},[52,22891,5149],{"class":622},[52,22893,22894],{"class":54,"line":224},[52,22895,17672],{"class":160},[52,22897,22898,22900],{"class":54,"line":229},[52,22899,4947],{"class":160},[52,22901,22902],{"class":622}," mAge;\n",[52,22904,22905],{"class":54,"line":241},[52,22906,6954],{"class":622},[52,22908,22909],{"class":54,"line":246},[52,22910,116],{"emptyLinePlaceholder":115},[52,22912,22913],{"class":54,"line":252},[52,22914,22915],{"class":332},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[52,22917,22918,22920,22922],{"class":54,"line":257},[52,22919,8320],{"class":160},[52,22921,8544],{"class":58},[52,22923,13809],{"class":622},[52,22925,22926],{"class":54,"line":266},[52,22927,116],{"emptyLinePlaceholder":115},[52,22929,22930,22932,22935,22937,22939,22941],{"class":54,"line":4722},[52,22931,22386],{"class":622},[52,22933,22934],{"class":58},"man",[52,22936,3121],{"class":622},[52,22938,3424],{"class":90},[52,22940,8922],{"class":622},[52,22942,22943],{"class":332}," \u002F\u002Fp对象已经创建完毕\n",[52,22945,22946,22948,22951,22954],{"class":54,"line":4727},[52,22947,22386],{"class":622},[52,22949,22950],{"class":58},"newman",[52,22952,22953],{"class":622},"(man);",[52,22955,22956],{"class":332}," \u002F\u002F调用拷贝构造函数\n",[52,22958,22959,22962,22964,22967],{"class":54,"line":4741},[52,22960,22961],{"class":622},"    Person newman2 ",[52,22963,2099],{"class":160},[52,22965,22966],{"class":622}," man;",[52,22968,22969],{"class":332}," \u002F\u002F拷贝构造\n",[52,22971,22972],{"class":54,"line":4746},[52,22973,116],{"emptyLinePlaceholder":115},[52,22975,22976],{"class":54,"line":5538},[52,22977,22978],{"class":332},"    \u002F\u002FPerson newman3;\n",[52,22980,22981,22984],{"class":54,"line":5552},[52,22982,22983],{"class":332},"    \u002F\u002Fnewman3 = man;",[52,22985,22986],{"class":332}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[52,22988,22989],{"class":54,"line":5560},[52,22990,4543],{"class":622},[52,22992,22993],{"class":54,"line":5565},[52,22994,116],{"emptyLinePlaceholder":115},[52,22996,22997],{"class":54,"line":5571},[52,22998,22999],{"class":332},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[52,23001,23002],{"class":54,"line":5577},[52,23003,23004],{"class":332},"\u002F\u002F相当于Person p1 = p;\n",[52,23006,23007,23009,23011,23013,23015,23018],{"class":54,"line":5582},[52,23008,8320],{"class":160},[52,23010,22441],{"class":58},[52,23012,3121],{"class":622},[52,23014,22001],{"class":58},[52,23016,23017],{"class":8172}," p1",[52,23019,23020],{"class":622},") {}\n",[52,23022,23023,23025,23027],{"class":54,"line":10904},[52,23024,8320],{"class":160},[52,23026,8613],{"class":58},[52,23028,13809],{"class":622},[52,23030,23031,23033],{"class":54,"line":10928},[52,23032,21559],{"class":622},[52,23034,23035],{"class":332}," \u002F\u002F无参构造函数\n",[52,23037,23038,23040],{"class":54,"line":10933},[52,23039,22491],{"class":58},[52,23041,22494],{"class":622},[52,23043,23044],{"class":54,"line":10939},[52,23045,4543],{"class":622},[52,23047,23048],{"class":54,"line":10966},[52,23049,116],{"emptyLinePlaceholder":115},[52,23051,23052],{"class":54,"line":10971},[52,23053,23054],{"class":332},"\u002F\u002F3. 以值方式返回局部对象\n",[52,23056,23057,23059,23061],{"class":54,"line":10977},[52,23058,22001],{"class":58},[52,23060,22510],{"class":58},[52,23062,4938],{"class":622},[52,23064,23065],{"class":54,"line":10989},[52,23066,4524],{"class":622},[52,23068,23069],{"class":54,"line":11001},[52,23070,21991],{"class":622},[52,23072,23073,23075,23077,23079,23081,23083,23085,23087,23090,23092],{"class":54,"line":11013},[52,23074,9485],{"class":622},[52,23076,4155],{"class":160},[52,23078,4629],{"class":622},[52,23080,3124],{"class":160},[52,23082,9474],{"class":160},[52,23084,3542],{"class":622},[52,23086,3466],{"class":160},[52,23088,23089],{"class":622},"p1 ",[52,23091,4155],{"class":160},[52,23093,11796],{"class":622},[52,23095,23096,23098],{"class":54,"line":12672},[52,23097,7049],{"class":160},[52,23099,23100],{"class":622}," p1;\n",[52,23102,23103],{"class":54,"line":12697},[52,23104,4543],{"class":622},[52,23106,23107],{"class":54,"line":12720},[52,23108,116],{"emptyLinePlaceholder":115},[52,23110,23111,23113,23115],{"class":54,"line":12744},[52,23112,8320],{"class":160},[52,23114,8685],{"class":58},[52,23116,4938],{"class":622},[52,23118,23119],{"class":54,"line":12749},[52,23120,4524],{"class":622},[52,23122,23123,23125,23127,23129],{"class":54,"line":12754},[52,23124,22576],{"class":622},[52,23126,2099],{"class":160},[52,23128,22510],{"class":58},[52,23130,8592],{"class":622},[52,23132,23133,23135,23137,23139,23141,23143,23145,23147,23149,23151],{"class":54,"line":12759},[52,23134,9485],{"class":622},[52,23136,4155],{"class":160},[52,23138,4629],{"class":622},[52,23140,3124],{"class":160},[52,23142,9474],{"class":160},[52,23144,3542],{"class":622},[52,23146,3466],{"class":160},[52,23148,14404],{"class":622},[52,23150,4155],{"class":160},[52,23152,11796],{"class":622},[52,23154,23155],{"class":54,"line":12768},[52,23156,4543],{"class":622},[52,23158,23159],{"class":54,"line":12773},[52,23160,116],{"emptyLinePlaceholder":115},[52,23162,23163],{"class":54,"line":12779},[52,23164,116],{"emptyLinePlaceholder":115},[52,23166,23167,23169,23171],{"class":54,"line":12800},[52,23168,3124],{"class":160},[52,23170,4935],{"class":58},[52,23172,13809],{"class":622},[52,23174,23175],{"class":54,"line":12806},[52,23176,116],{"emptyLinePlaceholder":115},[52,23178,23179],{"class":54,"line":12820},[52,23180,23181],{"class":332},"    \u002F\u002Ftest01();\n",[52,23183,23184],{"class":54,"line":12826},[52,23185,23186],{"class":332},"    \u002F\u002Ftest02();\n",[52,23188,23189,23191],{"class":54,"line":12853},[52,23190,22646],{"class":58},[52,23192,8592],{"class":622},[52,23194,23195],{"class":54,"line":12862},[52,23196,116],{"emptyLinePlaceholder":115},[52,23198,23199,23201,23203,23205],{"class":54,"line":12868},[52,23200,5265],{"class":58},[52,23202,3121],{"class":622},[52,23204,5270],{"class":62},[52,23206,5679],{"class":622},[52,23208,23209],{"class":54,"line":12876},[52,23210,116],{"emptyLinePlaceholder":115},[52,23212,23213,23215,23217],{"class":54,"line":12881},[52,23214,7049],{"class":160},[52,23216,7052],{"class":90},[52,23218,4272],{"class":622},[52,23220,23221],{"class":54,"line":19560},[52,23222,4543],{"class":622},[30,23224,23226],{"id":23225},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[274,23228,23229],{},"默认情况下，c++编译器至少给一个类添加3个函数",[274,23231,23232],{},"1．默认构造函数(无参，函数体为空)",[274,23234,23235],{},"2．默认析构函数(无参，函数体为空)",[274,23237,23238],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[274,23240,23241],{},"构造函数调用规则如下：",[4118,23243,23244,23247],{},[1073,23245,23246],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[1073,23248,23249],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[19,23251,23253],{"className":3109,"code":23252,"language":3111,"meta":28,"style":28},"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",[26,23254,23255,23263,23267,23272,23278,23290,23294,23299,23311,23320,23332,23336,23340,23356,23365,23377,23381,23385,23391,23403,23407,23411,23417,23421,23425,23433,23437,23449,23454,23462,23466,23484,23488,23492,23500,23504,23509,23517,23532,23545,23549,23554,23561,23577,23590,23594,23598,23606,23610,23616,23620,23630,23634,23642],{"__ignoreMap":28},[52,23256,23257,23259,23261],{"class":54,"line":55},[52,23258,17650],{"class":160},[52,23260,18525],{"class":58},[52,23262,18528],{"class":622},[52,23264,23265],{"class":54,"line":69},[52,23266,17672],{"class":160},[52,23268,23269],{"class":54,"line":82},[52,23270,23271],{"class":332},"    \u002F\u002F无参（默认）构造函数\n",[52,23273,23274,23276],{"class":54,"line":97},[52,23275,21474],{"class":58},[52,23277,13809],{"class":622},[52,23279,23280,23282,23284,23286,23288],{"class":54,"line":112},[52,23281,12625],{"class":622},[52,23283,4155],{"class":160},[52,23285,22765],{"class":62},[52,23287,4423],{"class":160},[52,23289,11796],{"class":622},[52,23291,23292],{"class":54,"line":119},[52,23293,5149],{"class":622},[52,23295,23296],{"class":54,"line":130},[52,23297,23298],{"class":332},"    \u002F\u002F有参构造函数\n",[52,23300,23301,23303,23305,23307,23309],{"class":54,"line":136},[52,23302,21474],{"class":58},[52,23304,3121],{"class":622},[52,23306,3124],{"class":160},[52,23308,4377],{"class":8172},[52,23310,15398],{"class":622},[52,23312,23313,23316,23318],{"class":54,"line":141},[52,23314,23315],{"class":622},"        age ",[52,23317,2099],{"class":160},[52,23319,4411],{"class":622},[52,23321,23322,23324,23326,23328,23330],{"class":54,"line":146},[52,23323,12625],{"class":622},[52,23325,4155],{"class":160},[52,23327,22805],{"class":62},[52,23329,4423],{"class":160},[52,23331,11796],{"class":622},[52,23333,23334],{"class":54,"line":152},[52,23335,5149],{"class":622},[52,23337,23338],{"class":54,"line":157},[52,23339,21829],{"class":332},[52,23341,23342,23344,23346,23348,23350,23352,23354],{"class":54,"line":173},[52,23343,21474],{"class":58},[52,23345,3121],{"class":622},[52,23347,9748],{"class":160},[52,23349,18525],{"class":58},[52,23351,3466],{"class":160},[52,23353,9781],{"class":8172},[52,23355,15398],{"class":622},[52,23357,23358,23360,23362],{"class":54,"line":178},[52,23359,23315],{"class":622},[52,23361,2099],{"class":160},[52,23363,23364],{"class":622}," p.age;\n",[52,23366,23367,23369,23371,23373,23375],{"class":54,"line":184},[52,23368,12625],{"class":622},[52,23370,4155],{"class":160},[52,23372,22846],{"class":62},[52,23374,4423],{"class":160},[52,23376,11796],{"class":622},[52,23378,23379],{"class":54,"line":189},[52,23380,5149],{"class":622},[52,23382,23383],{"class":54,"line":201},[52,23384,21502],{"class":332},[52,23386,23387,23389],{"class":54,"line":206},[52,23388,21507],{"class":58},[52,23390,13809],{"class":622},[52,23392,23393,23395,23397,23399,23401],{"class":54,"line":224},[52,23394,12625],{"class":622},[52,23396,4155],{"class":160},[52,23398,22883],{"class":62},[52,23400,4423],{"class":160},[52,23402,11796],{"class":622},[52,23404,23405],{"class":54,"line":229},[52,23406,5149],{"class":622},[52,23408,23409],{"class":54,"line":241},[52,23410,17672],{"class":160},[52,23412,23413,23415],{"class":54,"line":246},[52,23414,4947],{"class":160},[52,23416,10753],{"class":622},[52,23418,23419],{"class":54,"line":252},[52,23420,6954],{"class":622},[52,23422,23423],{"class":54,"line":257},[52,23424,116],{"emptyLinePlaceholder":115},[52,23426,23427,23429,23431],{"class":54,"line":266},[52,23428,8320],{"class":160},[52,23430,8544],{"class":58},[52,23432,4938],{"class":622},[52,23434,23435],{"class":54,"line":4722},[52,23436,4524],{"class":622},[52,23438,23439,23441,23443,23445,23447],{"class":54,"line":4727},[52,23440,22386],{"class":622},[52,23442,10086],{"class":58},[52,23444,3121],{"class":622},[52,23446,3762],{"class":90},[52,23448,5679],{"class":622},[52,23450,23451],{"class":54,"line":4741},[52,23452,23453],{"class":332},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[52,23455,23456,23458,23460],{"class":54,"line":4746},[52,23457,22386],{"class":622},[52,23459,9989],{"class":58},[52,23461,20471],{"class":622},[52,23463,23464],{"class":54,"line":5538},[52,23465,116],{"emptyLinePlaceholder":115},[52,23467,23468,23470,23472,23475,23477,23480,23482],{"class":54,"line":5552},[52,23469,9485],{"class":622},[52,23471,4155],{"class":160},[52,23473,23474],{"class":62}," \"p2的年龄为： \"",[52,23476,4423],{"class":160},[52,23478,23479],{"class":622}," p2.age ",[52,23481,4155],{"class":160},[52,23483,11796],{"class":622},[52,23485,23486],{"class":54,"line":5560},[52,23487,4543],{"class":622},[52,23489,23490],{"class":54,"line":5565},[52,23491,116],{"emptyLinePlaceholder":115},[52,23493,23494,23496,23498],{"class":54,"line":5571},[52,23495,8320],{"class":160},[52,23497,8613],{"class":58},[52,23499,4938],{"class":622},[52,23501,23502],{"class":54,"line":5577},[52,23503,4524],{"class":622},[52,23505,23506],{"class":54,"line":5582},[52,23507,23508],{"class":332},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[52,23510,23511,23514],{"class":54,"line":10904},[52,23512,23513],{"class":622},"    Person p1;",[52,23515,23516],{"class":332}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[52,23518,23519,23521,23523,23525,23527,23529],{"class":54,"line":10928},[52,23520,22386],{"class":622},[52,23522,9989],{"class":58},[52,23524,3121],{"class":622},[52,23526,3559],{"class":90},[52,23528,8922],{"class":622},[52,23530,23531],{"class":332}," \u002F\u002F用户提供的有参\n",[52,23533,23534,23536,23539,23542],{"class":54,"line":10933},[52,23535,22386],{"class":622},[52,23537,23538],{"class":58},"p3",[52,23540,23541],{"class":622},"(p2);",[52,23543,23544],{"class":332}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[52,23546,23547],{"class":54,"line":10939},[52,23548,116],{"emptyLinePlaceholder":115},[52,23550,23551],{"class":54,"line":10966},[52,23552,23553],{"class":332},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[52,23555,23556,23559],{"class":54,"line":10971},[52,23557,23558],{"class":622},"    Person p4;",[52,23560,23516],{"class":332},[52,23562,23563,23565,23568,23570,23572,23574],{"class":54,"line":10977},[52,23564,22386],{"class":622},[52,23566,23567],{"class":58},"p5",[52,23569,3121],{"class":622},[52,23571,3559],{"class":90},[52,23573,8922],{"class":622},[52,23575,23576],{"class":332}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[52,23578,23579,23581,23584,23587],{"class":54,"line":10989},[52,23580,22386],{"class":622},[52,23582,23583],{"class":58},"p6",[52,23585,23586],{"class":622},"(p5);",[52,23588,23589],{"class":332}," \u002F\u002F用户自己提供拷贝构造\n",[52,23591,23592],{"class":54,"line":11001},[52,23593,4543],{"class":622},[52,23595,23596],{"class":54,"line":11013},[52,23597,116],{"emptyLinePlaceholder":115},[52,23599,23600,23602,23604],{"class":54,"line":12672},[52,23601,3124],{"class":160},[52,23603,4935],{"class":58},[52,23605,13809],{"class":622},[52,23607,23608],{"class":54,"line":12697},[52,23609,116],{"emptyLinePlaceholder":115},[52,23611,23612,23614],{"class":54,"line":12720},[52,23613,8589],{"class":58},[52,23615,8592],{"class":622},[52,23617,23618],{"class":54,"line":12744},[52,23619,116],{"emptyLinePlaceholder":115},[52,23621,23622,23624,23626,23628],{"class":54,"line":12749},[52,23623,5265],{"class":58},[52,23625,3121],{"class":622},[52,23627,5270],{"class":62},[52,23629,5679],{"class":622},[52,23631,23632],{"class":54,"line":12754},[52,23633,116],{"emptyLinePlaceholder":115},[52,23635,23636,23638,23640],{"class":54,"line":12759},[52,23637,7049],{"class":160},[52,23639,7052],{"class":90},[52,23641,4272],{"class":622},[52,23643,23644],{"class":54,"line":12768},[52,23645,4543],{"class":622},[30,23647,23649],{"id":23648},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[274,23651,23652],{},"浅拷贝：简单的赋值拷贝操作",[274,23654,23655],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[19,23657,23659],{"className":3109,"code":23658,"language":3111,"meta":28,"style":28},"#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",[26,23660,23661,23667,23677,23683,23687,23691,23696,23702,23706,23719,23723,23727,23734,23738,23748,23763,23776,23780,23785,23790,23806,23810,23823,23828,23833,23838,23847,23852,23867,23871,23875,23879,23885,23889,23894,23909,23913,23924,23938,23942,23951,23955,23961,23973,23977,23985,23989,24006,24037,24045,24073,24077,24081,24089,24093,24099],{"__ignoreMap":28},[52,23662,23663,23665],{"class":54,"line":55},[52,23664,4912],{"class":160},[52,23666,4915],{"class":62},[52,23668,23669,23671,23673,23675],{"class":54,"line":69},[52,23670,4920],{"class":160},[52,23672,4923],{"class":160},[52,23674,4926],{"class":58},[52,23676,4272],{"class":622},[52,23678,23679,23681],{"class":54,"line":82},[52,23680,17650],{"class":160},[52,23682,18127],{"class":58},[52,23684,23685],{"class":54,"line":97},[52,23686,4524],{"class":622},[52,23688,23689],{"class":54,"line":112},[52,23690,17672],{"class":160},[52,23692,23693],{"class":54,"line":119},[52,23694,23695],{"class":332},"    \u002F\u002F默认构造函数\n",[52,23697,23698,23700],{"class":54,"line":130},[52,23699,21474],{"class":58},[52,23701,4938],{"class":622},[52,23703,23704],{"class":54,"line":136},[52,23705,4992],{"class":622},[52,23707,23708,23710,23712,23715,23717],{"class":54,"line":141},[52,23709,6410],{"class":622},[52,23711,4155],{"class":160},[52,23713,23714],{"class":62},"\"默认构造函数\"",[52,23716,4155],{"class":160},[52,23718,4177],{"class":622},[52,23720,23721],{"class":54,"line":146},[52,23722,5149],{"class":622},[52,23724,23725],{"class":54,"line":152},[52,23726,23298],{"class":332},[52,23728,23729,23731],{"class":54,"line":157},[52,23730,21507],{"class":58},[52,23732,23733],{"class":622},"(int age,int height)\n",[52,23735,23736],{"class":54,"line":173},[52,23737,4992],{"class":622},[52,23739,23740,23743,23745],{"class":54,"line":178},[52,23741,23742],{"class":622},"        m_Age",[52,23744,2099],{"class":160},[52,23746,23747],{"class":622},"age;\n",[52,23749,23750,23753,23755,23757,23760],{"class":54,"line":184},[52,23751,23752],{"class":622},"        m_Height",[52,23754,14673],{"class":160},[52,23756,5344],{"class":160},[52,23758,23759],{"class":622},"(height);",[52,23761,23762],{"class":332},"\u002F\u002F放到堆区\n",[52,23764,23765,23767,23769,23772,23774],{"class":54,"line":189},[52,23766,6410],{"class":622},[52,23768,4155],{"class":160},[52,23770,23771],{"class":62},"\"有参构造函数\"",[52,23773,4155],{"class":160},[52,23775,4177],{"class":622},[52,23777,23778],{"class":54,"line":201},[52,23779,5149],{"class":622},[52,23781,23782],{"class":54,"line":206},[52,23783,23784],{"class":332},"    \u002F\u002F深拷贝解决上述问题\n",[52,23786,23787],{"class":54,"line":224},[52,23788,23789],{"class":332},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[52,23791,23792,23794,23796,23798,23800,23802,23804],{"class":54,"line":229},[52,23793,21474],{"class":58},[52,23795,3121],{"class":622},[52,23797,9748],{"class":160},[52,23799,18525],{"class":58},[52,23801,13540],{"class":160},[52,23803,274],{"class":8172},[52,23805,170],{"class":622},[52,23807,23808],{"class":54,"line":241},[52,23809,4992],{"class":622},[52,23811,23812,23814,23816,23819,23821],{"class":54,"line":246},[52,23813,6410],{"class":622},[52,23815,4155],{"class":160},[52,23817,23818],{"class":62},"\"拷贝构造函数\"",[52,23820,4155],{"class":160},[52,23822,4177],{"class":622},[52,23824,23825],{"class":54,"line":252},[52,23826,23827],{"class":332},"        \u002F\u002F编译器默认的写如下注释部分\n",[52,23829,23830],{"class":54,"line":257},[52,23831,23832],{"class":332},"        \u002F\u002Fm_Age=p.m_Age;\n",[52,23834,23835],{"class":54,"line":266},[52,23836,23837],{"class":332},"        \u002F\u002Fm_Height=p.m_Height;\n",[52,23839,23840,23842,23844],{"class":54,"line":4722},[52,23841,23742],{"class":622},[52,23843,2099],{"class":160},[52,23845,23846],{"class":622},"p.m_Age;\n",[52,23848,23849],{"class":54,"line":4727},[52,23850,23851],{"class":332},"        \u002F\u002F深拷贝操作\n",[52,23853,23854,23856,23858,23860,23862,23864],{"class":54,"line":4741},[52,23855,23752],{"class":622},[52,23857,14673],{"class":160},[52,23859,5344],{"class":160},[52,23861,3121],{"class":622},[52,23863,1095],{"class":160},[52,23865,23866],{"class":622},"p.m_Height);\n",[52,23868,23869],{"class":54,"line":4746},[52,23870,5149],{"class":622},[52,23872,23873],{"class":54,"line":5538},[52,23874,116],{"emptyLinePlaceholder":115},[52,23876,23877],{"class":54,"line":5552},[52,23878,21502],{"class":332},[52,23880,23881,23883],{"class":54,"line":5560},[52,23882,21507],{"class":58},[52,23884,4938],{"class":622},[52,23886,23887],{"class":54,"line":5565},[52,23888,4992],{"class":622},[52,23890,23891],{"class":54,"line":5571},[52,23892,23893],{"class":332},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[52,23895,23896,23898,23901,23904,23907],{"class":54,"line":5577},[52,23897,5458],{"class":160},[52,23899,23900],{"class":622},"(m_Height ",[52,23902,23903],{"class":160},"!=",[52,23905,23906],{"class":90}," NULL",[52,23908,170],{"class":622},[52,23910,23911],{"class":54,"line":5582},[52,23912,5471],{"class":622},[52,23914,23915,23918,23921],{"class":54,"line":10904},[52,23916,23917],{"class":160},"            delete",[52,23919,23920],{"class":622}," m_Height;",[52,23922,23923],{"class":332}," \u002F\u002F释放堆区内存\n",[52,23925,23926,23929,23931,23933,23935],{"class":54,"line":10928},[52,23927,23928],{"class":622},"            m_Height",[52,23930,2099],{"class":160},[52,23932,5354],{"class":90},[52,23934,3173],{"class":622},[52,23936,23937],{"class":332}," \u002F\u002F防止野指针\n",[52,23939,23940],{"class":54,"line":10933},[52,23941,5490],{"class":622},[52,23943,23944,23946,23948],{"class":54,"line":10939},[52,23945,6410],{"class":622},[52,23947,4155],{"class":160},[52,23949,23950],{"class":62},"\"Person的析构函数调用\"\n",[52,23952,23953],{"class":54,"line":10966},[52,23954,5149],{"class":622},[52,23956,23957,23959],{"class":54,"line":10971},[52,23958,4947],{"class":160},[52,23960,18622],{"class":622},[52,23962,23963,23965,23967,23970],{"class":54,"line":10977},[52,23964,4947],{"class":160},[52,23966,9474],{"class":160},[52,23968,23969],{"class":622},"m_Height;",[52,23971,23972],{"class":332}," \u002F\u002F定义一个指针，指向身高\n",[52,23974,23975],{"class":54,"line":10989},[52,23976,6954],{"class":622},[52,23978,23979,23981,23983],{"class":54,"line":11001},[52,23980,8320],{"class":160},[52,23982,8544],{"class":58},[52,23984,4938],{"class":622},[52,23986,23987],{"class":54,"line":11013},[52,23988,4524],{"class":622},[52,23990,23991,23993,23995,23997,23999,24001,24004],{"class":54,"line":12672},[52,23992,22386],{"class":622},[52,23994,10086],{"class":58},[52,23996,3121],{"class":622},[52,23998,3762],{"class":90},[52,24000,3491],{"class":622},[52,24002,24003],{"class":90},"160",[52,24005,5679],{"class":622},[52,24007,24008,24010,24012,24015,24017,24020,24022,24025,24027,24030,24032,24034],{"class":54,"line":12697},[52,24009,4529],{"class":622},[52,24011,4155],{"class":160},[52,24013,24014],{"class":62},"\"p1的年龄为:\"",[52,24016,4155],{"class":160},[52,24018,24019],{"class":622},"p1.m_Age",[52,24021,4155],{"class":160},[52,24023,24024],{"class":62},"\"身高为：\"",[52,24026,9375],{"class":160},[52,24028,24029],{"class":622},"p1.m_Height",[52,24031,4155],{"class":160},[52,24033,4220],{"class":622},[52,24035,24036],{"class":332},"  \u002F\u002F18\n",[52,24038,24039,24041,24043],{"class":54,"line":12720},[52,24040,22386],{"class":622},[52,24042,9989],{"class":58},[52,24044,20471],{"class":622},[52,24046,24047,24049,24051,24054,24056,24058,24060,24062,24064,24067,24069,24071],{"class":54,"line":12744},[52,24048,4529],{"class":622},[52,24050,4155],{"class":160},[52,24052,24053],{"class":62},"\"p2的年龄为：\"",[52,24055,4155],{"class":160},[52,24057,22416],{"class":622},[52,24059,4155],{"class":160},[52,24061,24024],{"class":62},[52,24063,9375],{"class":160},[52,24065,24066],{"class":622},"p2.m_Height",[52,24068,4155],{"class":160},[52,24070,4220],{"class":622},[52,24072,24036],{"class":332},[52,24074,24075],{"class":54,"line":12749},[52,24076,16166],{"class":622},[52,24078,24079],{"class":54,"line":12754},[52,24080,4543],{"class":622},[52,24082,24083,24085,24087],{"class":54,"line":12759},[52,24084,3124],{"class":160},[52,24086,4935],{"class":58},[52,24088,4938],{"class":622},[52,24090,24091],{"class":54,"line":12768},[52,24092,4524],{"class":622},[52,24094,24095,24097],{"class":54,"line":12773},[52,24096,8589],{"class":58},[52,24098,8592],{"class":622},[52,24100,24101],{"class":54,"line":12779},[52,24102,4543],{"class":622},[274,24104,24105],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[274,24107,24108],{},"浅拷贝带来的问题是堆区的内存重复释放",[274,24110,24111],{},[280,24112],{"alt":28,"src":24113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[274,24115,24116],{},"浅拷贝问题要使用深拷贝来解决",[274,24118,24119],{},[280,24120],{"alt":28,"src":24121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[274,24123,24124],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[30,24126,24128],{"id":24127},"_826初始化列表","8.2.6初始化列表",[274,24130,24131],{},"作用：初始化属性",[274,24133,8140],{},[19,24135,24138],{"className":24136,"code":24137,"language":24},[22],"构造函数():属性1(值1),属性2(值2).....{}\n",[26,24139,24137],{"__ignoreMap":28},[274,24141,24142],{},"例子",[19,24144,24146],{"className":3109,"code":24145,"language":3111,"meta":28,"style":28},"#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",[26,24147,24148,24154,24164,24170,24174,24179,24183,24188,24193,24198,24203,24208,24213,24217,24222,24227,24270,24279,24297,24315,24333,24337,24341,24348,24355,24362,24366,24370,24378,24382,24386,24406,24415,24419,24423,24433,24437,24445],{"__ignoreMap":28},[52,24149,24150,24152],{"class":54,"line":55},[52,24151,4912],{"class":160},[52,24153,4915],{"class":62},[52,24155,24156,24158,24160,24162],{"class":54,"line":69},[52,24157,4920],{"class":160},[52,24159,4923],{"class":160},[52,24161,4926],{"class":58},[52,24163,4272],{"class":622},[52,24165,24166,24168],{"class":54,"line":82},[52,24167,17650],{"class":160},[52,24169,18127],{"class":58},[52,24171,24172],{"class":54,"line":97},[52,24173,4524],{"class":622},[52,24175,24176],{"class":54,"line":112},[52,24177,24178],{"class":160},"    public:\n",[52,24180,24181],{"class":54,"line":119},[52,24182,116],{"emptyLinePlaceholder":115},[52,24184,24185],{"class":54,"line":130},[52,24186,24187],{"class":332},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[52,24189,24190],{"class":54,"line":136},[52,24191,24192],{"class":332},"    \u002F\u002FPerson(int a, int b, int c) {\n",[52,24194,24195],{"class":54,"line":141},[52,24196,24197],{"class":332},"    \u002F\u002F  m_A = a;\n",[52,24199,24200],{"class":54,"line":146},[52,24201,24202],{"class":332},"    \u002F\u002F  m_B = b;\n",[52,24204,24205],{"class":54,"line":152},[52,24206,24207],{"class":332},"    \u002F\u002F  m_C = c;\n",[52,24209,24210],{"class":54,"line":157},[52,24211,24212],{"class":332},"    \u002F\u002F}\n",[52,24214,24215],{"class":54,"line":173},[52,24216,116],{"emptyLinePlaceholder":115},[52,24218,24219],{"class":54,"line":178},[52,24220,24221],{"class":332},"    \u002F\u002F初始化列表方式初始化\n",[52,24223,24224],{"class":54,"line":184},[52,24225,24226],{"class":332},"    \u002F\u002F使用有参构造函数\n",[52,24228,24229,24231,24233,24235,24237,24239,24241,24243,24245,24247,24249,24252,24255,24258,24261,24264,24267],{"class":54,"line":189},[52,24230,21474],{"class":58},[52,24232,3121],{"class":622},[52,24234,3124],{"class":160},[52,24236,4377],{"class":8172},[52,24238,15391],{"class":622},[52,24240,3124],{"class":160},[52,24242,5793],{"class":8172},[52,24244,15391],{"class":622},[52,24246,3124],{"class":160},[52,24248,5809],{"class":8172},[52,24250,24251],{"class":622},") :",[52,24253,24254],{"class":58},"m_A",[52,24256,24257],{"class":622},"(a), ",[52,24259,24260],{"class":58},"m_B",[52,24262,24263],{"class":622},"(b), ",[52,24265,24266],{"class":58},"m_C",[52,24268,24269],{"class":622},"(c) {}\n",[52,24271,24272,24274,24277],{"class":54,"line":201},[52,24273,17865],{"class":160},[52,24275,24276],{"class":58}," PrintPerson",[52,24278,13809],{"class":622},[52,24280,24281,24283,24285,24288,24290,24293,24295],{"class":54,"line":206},[52,24282,12625],{"class":622},[52,24284,4155],{"class":160},[52,24286,24287],{"class":62}," \"mA:\"",[52,24289,4423],{"class":160},[52,24291,24292],{"class":622}," m_A ",[52,24294,4155],{"class":160},[52,24296,11796],{"class":622},[52,24298,24299,24301,24303,24306,24308,24311,24313],{"class":54,"line":224},[52,24300,12625],{"class":622},[52,24302,4155],{"class":160},[52,24304,24305],{"class":62}," \"mB:\"",[52,24307,4423],{"class":160},[52,24309,24310],{"class":622}," m_B ",[52,24312,4155],{"class":160},[52,24314,11796],{"class":622},[52,24316,24317,24319,24321,24324,24326,24329,24331],{"class":54,"line":229},[52,24318,12625],{"class":622},[52,24320,4155],{"class":160},[52,24322,24323],{"class":62}," \"mC:\"",[52,24325,4423],{"class":160},[52,24327,24328],{"class":622}," m_C ",[52,24330,4155],{"class":160},[52,24332,11796],{"class":622},[52,24334,24335],{"class":54,"line":241},[52,24336,5149],{"class":622},[52,24338,24339],{"class":54,"line":246},[52,24340,18178],{"class":160},[52,24342,24343,24345],{"class":54,"line":252},[52,24344,4947],{"class":160},[52,24346,24347],{"class":622}," m_A;\n",[52,24349,24350,24352],{"class":54,"line":257},[52,24351,4947],{"class":160},[52,24353,24354],{"class":622}," m_B;\n",[52,24356,24357,24359],{"class":54,"line":266},[52,24358,4947],{"class":160},[52,24360,24361],{"class":622}," m_C;\n",[52,24363,24364],{"class":54,"line":4722},[52,24365,6954],{"class":622},[52,24367,24368],{"class":54,"line":4727},[52,24369,116],{"emptyLinePlaceholder":115},[52,24371,24372,24374,24376],{"class":54,"line":4741},[52,24373,3124],{"class":160},[52,24375,4935],{"class":58},[52,24377,8934],{"class":622},[52,24379,24380],{"class":54,"line":4746},[52,24381,4524],{"class":622},[52,24383,24384],{"class":54,"line":5538},[52,24385,116],{"emptyLinePlaceholder":115},[52,24387,24388,24390,24392,24394,24396,24398,24400,24402,24404],{"class":54,"line":5552},[52,24389,22386],{"class":622},[52,24391,274],{"class":58},[52,24393,3121],{"class":622},[52,24395,3332],{"class":90},[52,24397,15391],{"class":622},[52,24399,3194],{"class":90},[52,24401,15391],{"class":622},[52,24403,3188],{"class":90},[52,24405,5679],{"class":622},[52,24407,24408,24410,24413],{"class":54,"line":5560},[52,24409,18822],{"class":622},[52,24411,24412],{"class":58},"PrintPerson",[52,24414,8592],{"class":622},[52,24416,24417],{"class":54,"line":5565},[52,24418,116],{"emptyLinePlaceholder":115},[52,24420,24421],{"class":54,"line":5571},[52,24422,116],{"emptyLinePlaceholder":115},[52,24424,24425,24427,24429,24431],{"class":54,"line":5577},[52,24426,5265],{"class":58},[52,24428,3121],{"class":622},[52,24430,5270],{"class":62},[52,24432,5679],{"class":622},[52,24434,24435],{"class":54,"line":5582},[52,24436,116],{"emptyLinePlaceholder":115},[52,24438,24439,24441,24443],{"class":54,"line":10904},[52,24440,7049],{"class":160},[52,24442,7052],{"class":90},[52,24444,4272],{"class":622},[52,24446,24447],{"class":54,"line":10928},[52,24448,4543],{"class":622},[274,24450,24451,24452,24455,24456],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[538,24453,24454],{},"参数名就是定义的对象属性","，",[538,24457,24458],{},"属性后面的值为有参构造函数的形参",[19,24460,24462],{"className":3109,"code":24461,"language":3111,"meta":28,"style":28},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[26,24463,24464],{"__ignoreMap":28},[52,24465,24466,24468,24470,24472,24475,24477,24480,24482,24485,24487,24490,24492,24495,24497],{"class":54,"line":55},[52,24467,22001],{"class":58},[52,24469,3121],{"class":622},[52,24471,3124],{"class":160},[52,24473,24474],{"class":622}," a.",[52,24476,3124],{"class":160},[52,24478,24479],{"class":622}," b,",[52,24481,3124],{"class":160},[52,24483,24484],{"class":622}," b):",[52,24486,24254],{"class":58},[52,24488,24489],{"class":622},"(a),",[52,24491,24260],{"class":58},[52,24493,24494],{"class":622},"(c),",[52,24496,24266],{"class":58},[52,24498,24499],{"class":622},"(b) {}\n",[30,24501,24503],{"id":24502},"_827类对象作为类成员","8.2.7类对象作为类成员",[274,24505,24506],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[274,24508,17589],{},[19,24510,24512],{"className":3109,"code":24511,"language":3111,"meta":28,"style":28},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[26,24513,24514,24519,24524,24528,24533,24537],{"__ignoreMap":28},[52,24515,24516],{"class":54,"line":55},[52,24517,24518],{"class":622},"A{};\n",[52,24520,24521],{"class":54,"line":69},[52,24522,24523],{"class":622},"B\n",[52,24525,24526],{"class":54,"line":82},[52,24527,4524],{"class":622},[52,24529,24530],{"class":54,"line":97},[52,24531,24532],{"class":622},"    A a;\n",[52,24534,24535],{"class":54,"line":112},[52,24536,4543],{"class":622},[52,24538,24539],{"class":54,"line":119},[52,24540,24541],{"class":332},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[274,24543,24544],{},"案例",[19,24546,24548],{"className":3109,"code":24547,"language":3111,"meta":28,"style":28},"\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",[26,24549,24550,24555,24562,24566,24571,24576,24590,24594,24604,24615,24619,24626,24630,24643,24647,24652,24657,24661,24667,24671,24675,24679,24710,24714,24725,24729,24735,24739,24752,24756,24760,24764,24769,24774,24778,24786,24790,24807,24826,24830,24838,24842,24848],{"__ignoreMap":28},[52,24551,24552],{"class":54,"line":55},[52,24553,24554],{"class":332},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[52,24556,24557,24559],{"class":54,"line":69},[52,24558,17650],{"class":160},[52,24560,24561],{"class":58}," Phone\n",[52,24563,24564],{"class":54,"line":82},[52,24565,4524],{"class":622},[52,24567,24568],{"class":54,"line":97},[52,24569,24570],{"class":622},"public：\n",[52,24572,24573],{"class":54,"line":112},[52,24574,24575],{"class":332},"    \u002F\u002F 赋值(构造函数)\n",[52,24577,24578,24581,24583,24585,24588],{"class":54,"line":119},[52,24579,24580],{"class":58},"    Phone",[52,24582,3121],{"class":622},[52,24584,17873],{"class":58},[52,24586,24587],{"class":8172}," pName",[52,24589,170],{"class":622},[52,24591,24592],{"class":54,"line":130},[52,24593,4992],{"class":622},[52,24595,24596,24599,24601],{"class":54,"line":136},[52,24597,24598],{"class":622},"        m_pName",[52,24600,2099],{"class":160},[52,24602,24603],{"class":622},"pName;\n",[52,24605,24606,24608,24610,24613],{"class":54,"line":141},[52,24607,6410],{"class":622},[52,24609,4155],{"class":160},[52,24611,24612],{"class":62},"\"Phone的构造函数调用\"",[52,24614,4272],{"class":622},[52,24616,24617],{"class":54,"line":146},[52,24618,5149],{"class":622},[52,24620,24621,24624],{"class":54,"line":152},[52,24622,24623],{"class":58},"    ~Phone",[52,24625,4938],{"class":622},[52,24627,24628],{"class":54,"line":157},[52,24629,4992],{"class":622},[52,24631,24632,24634,24636,24639,24641],{"class":54,"line":173},[52,24633,6410],{"class":622},[52,24635,4155],{"class":160},[52,24637,24638],{"class":62},"\"Phone析构函数调用\"",[52,24640,4155],{"class":160},[52,24642,4177],{"class":622},[52,24644,24645],{"class":54,"line":178},[52,24646,5149],{"class":622},[52,24648,24649],{"class":54,"line":184},[52,24650,24651],{"class":332},"    \u002F\u002F\n",[52,24653,24654],{"class":54,"line":189},[52,24655,24656],{"class":622},"    string m_PName;\n",[52,24658,24659],{"class":54,"line":201},[52,24660,6954],{"class":622},[52,24662,24663,24665],{"class":54,"line":206},[52,24664,17650],{"class":160},[52,24666,18127],{"class":58},[52,24668,24669],{"class":54,"line":224},[52,24670,4524],{"class":622},[52,24672,24673],{"class":54,"line":229},[52,24674,17672],{"class":160},[52,24676,24677],{"class":54,"line":241},[52,24678,19950],{"class":332},[52,24680,24681,24683,24685,24687,24689,24691,24693,24696,24699,24701,24704,24707],{"class":54,"line":246},[52,24682,21474],{"class":58},[52,24684,3121],{"class":622},[52,24686,17873],{"class":58},[52,24688,17876],{"class":8172},[52,24690,3491],{"class":622},[52,24692,17873],{"class":58},[52,24694,24695],{"class":8172}," pname",[52,24697,24698],{"class":622},"):",[52,24700,17966],{"class":58},[52,24702,24703],{"class":622},"(name),m_phone.",[52,24705,24706],{"class":58},"m_PName",[52,24708,24709],{"class":622},"(pname) \n",[52,24711,24712],{"class":54,"line":252},[52,24713,4992],{"class":622},[52,24715,24716,24718,24720,24723],{"class":54,"line":257},[52,24717,6410],{"class":622},[52,24719,4155],{"class":160},[52,24721,24722],{"class":62},"\"Person的构造函数调用\"",[52,24724,4272],{"class":622},[52,24726,24727],{"class":54,"line":266},[52,24728,5149],{"class":622},[52,24730,24731,24733],{"class":54,"line":4722},[52,24732,21507],{"class":58},[52,24734,4938],{"class":622},[52,24736,24737],{"class":54,"line":4727},[52,24738,4992],{"class":622},[52,24740,24741,24743,24745,24748,24750],{"class":54,"line":4741},[52,24742,6410],{"class":622},[52,24744,4155],{"class":160},[52,24746,24747],{"class":62},"\"Person析构函数调用\"",[52,24749,4155],{"class":160},[52,24751,4177],{"class":622},[52,24753,24754],{"class":54,"line":4746},[52,24755,5149],{"class":622},[52,24757,24758],{"class":54,"line":5538},[52,24759,10736],{"class":332},[52,24761,24762],{"class":54,"line":5552},[52,24763,17848],{"class":622},[52,24765,24766],{"class":54,"line":5560},[52,24767,24768],{"class":332},"    \u002F\u002F手机\n",[52,24770,24771],{"class":54,"line":5565},[52,24772,24773],{"class":622},"    Phone m_Phone;\n",[52,24775,24776],{"class":54,"line":5571},[52,24777,6954],{"class":622},[52,24779,24780,24782,24784],{"class":54,"line":5577},[52,24781,8320],{"class":160},[52,24783,8544],{"class":58},[52,24785,4938],{"class":622},[52,24787,24788],{"class":54,"line":5582},[52,24789,4524],{"class":622},[52,24791,24792,24794,24796,24798,24800,24802,24805],{"class":54,"line":10904},[52,24793,22386],{"class":622},[52,24795,274],{"class":58},[52,24797,3121],{"class":622},[52,24799,10872],{"class":62},[52,24801,3491],{"class":622},[52,24803,24804],{"class":62},"\"安卓\"",[52,24806,5679],{"class":622},[52,24808,24809,24811,24813,24816,24818,24821,24823],{"class":54,"line":10928},[52,24810,4529],{"class":622},[52,24812,4155],{"class":160},[52,24814,24815],{"class":622},"p.Name",[52,24817,4155],{"class":160},[52,24819,24820],{"class":62},"\"拿着：\"",[52,24822,4155],{"class":160},[52,24824,24825],{"class":622},"p.m_phone.m_PName;\n",[52,24827,24828],{"class":54,"line":10933},[52,24829,4543],{"class":622},[52,24831,24832,24834,24836],{"class":54,"line":10939},[52,24833,3124],{"class":160},[52,24835,4935],{"class":58},[52,24837,4938],{"class":622},[52,24839,24840],{"class":54,"line":10966},[52,24841,4524],{"class":622},[52,24843,24844,24846],{"class":54,"line":10971},[52,24845,8589],{"class":58},[52,24847,8592],{"class":622},[52,24849,24850],{"class":54,"line":10977},[52,24851,4543],{"class":622},[274,24853,11981],{},[19,24855,24857],{"className":3109,"code":24856,"language":3111,"meta":28,"style":28},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[26,24858,24859,24864],{"__ignoreMap":28},[52,24860,24861],{"class":54,"line":55},[52,24862,24863],{"class":332},"    \u002F\u002F不需要写这个：\n",[52,24865,24866],{"class":54,"line":69},[52,24867,24868],{"class":332},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[274,24870,24871],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[19,24873,24875],{"className":3109,"code":24874,"language":3111,"meta":28,"style":28},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[26,24876,24877],{"__ignoreMap":28},[52,24878,24879,24881,24884,24886,24889,24892],{"class":54,"line":55},[52,24880,22001],{"class":58},[52,24882,24883],{"class":622},"(string name.string pname):",[52,24885,17966],{"class":58},[52,24887,24888],{"class":622},"(name),",[52,24890,24891],{"class":58},"m_phone",[52,24893,24894],{"class":622},"(pname) {}\n",[274,24896,24897,24898,2099,24901],{},"采用的是隐式转换法，实际为如下：\n",[26,24899,24900],{},"m_phone(pname)",[26,24902,24903],{},"Phone m_phone=pname",[274,24905,24906,24909],{},[538,24907,24908],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[274,24911,24912],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[30,24914,24916],{"id":24915},"_828静态对象","8.2.8静态对象",[274,24918,24919],{},"静态对象在成员对象前static，称为静态对象",[274,24921,24922],{},"静态对象分为两类：",[1070,24924,24925],{},[1073,24926,24927],{},"静态成员变量",[4118,24929,24930,24933,24936],{},[1073,24931,24932],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[1073,24934,24935],{},"②在编译阶段分配内存",[1073,24937,24938],{},"③类内声明，类外初始化",[1070,24940,24941],{"start":69},[1073,24942,24943],{},"静态成员函数",[4118,24945,24946,24949],{},[1073,24947,24948],{},"①所有对象共享同一个函数",[1073,24950,24951],{},"②静态成员函数只能访问静态成员变量",[1486,24953,24955],{"id":24954},"_8281静态成员变量","8.2.8.1静态成员变量",[19,24957,24959],{"className":3109,"code":24958,"language":3111,"meta":28,"style":28},"#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",[26,24960,24961,24967,24977,24983,24987,24991,24996,25001,25006,25014,25018,25022,25026,25034,25038,25042,25047,25060,25064,25072,25076,25082],{"__ignoreMap":28},[52,24962,24963,24965],{"class":54,"line":55},[52,24964,4912],{"class":160},[52,24966,4915],{"class":62},[52,24968,24969,24971,24973,24975],{"class":54,"line":69},[52,24970,4920],{"class":160},[52,24972,4923],{"class":160},[52,24974,4926],{"class":58},[52,24976,4272],{"class":622},[52,24978,24979,24981],{"class":54,"line":82},[52,24980,17650],{"class":160},[52,24982,18127],{"class":58},[52,24984,24985],{"class":54,"line":97},[52,24986,4524],{"class":622},[52,24988,24989],{"class":54,"line":112},[52,24990,17672],{"class":160},[52,24992,24993],{"class":54,"line":119},[52,24994,24995],{"class":332},"    \u002F\u002F非静态成员变量\n",[52,24997,24998],{"class":54,"line":130},[52,24999,25000],{"class":332},"    \u002F\u002F int m_A;\n",[52,25002,25003],{"class":54,"line":136},[52,25004,25005],{"class":332},"    \u002F\u002F定义静态成员变量\n",[52,25007,25008,25010,25012],{"class":54,"line":141},[52,25009,13976],{"class":160},[52,25011,5344],{"class":160},[52,25013,24347],{"class":622},[52,25015,25016],{"class":54,"line":146},[52,25017,116],{"emptyLinePlaceholder":115},[52,25019,25020],{"class":54,"line":152},[52,25021,116],{"emptyLinePlaceholder":115},[52,25023,25024],{"class":54,"line":157},[52,25025,6954],{"class":622},[52,25027,25028,25030,25032],{"class":54,"line":173},[52,25029,8320],{"class":160},[52,25031,8544],{"class":58},[52,25033,4938],{"class":622},[52,25035,25036],{"class":54,"line":178},[52,25037,4524],{"class":622},[52,25039,25040],{"class":54,"line":184},[52,25041,18269],{"class":622},[52,25043,25044],{"class":54,"line":189},[52,25045,25046],{"class":332},"    \u002F\u002F输出类成员变量这块内存\n",[52,25048,25049,25051,25053,25056,25058],{"class":54,"line":201},[52,25050,4529],{"class":622},[52,25052,4155],{"class":160},[52,25054,25055],{"class":622},"p.m_A",[52,25057,4155],{"class":160},[52,25059,4177],{"class":622},[52,25061,25062],{"class":54,"line":206},[52,25063,4543],{"class":622},[52,25065,25066,25068,25070],{"class":54,"line":224},[52,25067,3124],{"class":160},[52,25069,4935],{"class":58},[52,25071,4938],{"class":622},[52,25073,25074],{"class":54,"line":229},[52,25075,4524],{"class":622},[52,25077,25078,25080],{"class":54,"line":241},[52,25079,8589],{"class":58},[52,25081,4938],{"class":622},[52,25083,25084],{"class":54,"line":246},[52,25085,4543],{"class":622},[274,25087,25088],{},"此时输出是报错的：无法解析外部命令",[274,25090,25091],{},"解决这一问题：必须用到类内声明，类外初始化操作",[19,25093,25095],{"className":3109,"code":25094,"language":3111,"meta":28,"style":28},"#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",[26,25096,25097,25103,25113,25119,25123,25127,25132,25140,25144,25149,25164,25172,25176,25180,25185,25190,25202,25207,25218,25223,25228,25241,25245,25253,25257,25263],{"__ignoreMap":28},[52,25098,25099,25101],{"class":54,"line":55},[52,25100,4912],{"class":160},[52,25102,4915],{"class":62},[52,25104,25105,25107,25109,25111],{"class":54,"line":69},[52,25106,4920],{"class":160},[52,25108,4923],{"class":160},[52,25110,4926],{"class":58},[52,25112,4272],{"class":622},[52,25114,25115,25117],{"class":54,"line":82},[52,25116,17650],{"class":160},[52,25118,18127],{"class":58},[52,25120,25121],{"class":54,"line":97},[52,25122,4524],{"class":622},[52,25124,25125],{"class":54,"line":112},[52,25126,17672],{"class":160},[52,25128,25129],{"class":54,"line":119},[52,25130,25131],{"class":332},"    \u002F\u002F类内声明\n",[52,25133,25134,25136,25138],{"class":54,"line":130},[52,25135,13976],{"class":160},[52,25137,5344],{"class":160},[52,25139,24347],{"class":622},[52,25141,25142],{"class":54,"line":136},[52,25143,6954],{"class":622},[52,25145,25146],{"class":54,"line":141},[52,25147,25148],{"class":332},"\u002F\u002F类外初始化\n",[52,25150,25151,25153,25155,25158,25160,25162],{"class":54,"line":146},[52,25152,3124],{"class":160},[52,25154,18525],{"class":58},[52,25156,25157],{"class":622},"::m_A",[52,25159,2099],{"class":160},[52,25161,3559],{"class":90},[52,25163,4272],{"class":622},[52,25165,25166,25168,25170],{"class":54,"line":152},[52,25167,8320],{"class":160},[52,25169,8544],{"class":58},[52,25171,4938],{"class":622},[52,25173,25174],{"class":54,"line":157},[52,25175,4524],{"class":622},[52,25177,25178],{"class":54,"line":173},[52,25179,18269],{"class":622},[52,25181,25182],{"class":54,"line":178},[52,25183,25184],{"class":332},"    \u002F\u002F访问变量的原内存空间\n",[52,25186,25187],{"class":54,"line":184},[52,25188,25189],{"class":332},"    \u002F\u002F100\n",[52,25191,25192,25194,25196,25198,25200],{"class":54,"line":189},[52,25193,4529],{"class":622},[52,25195,4155],{"class":160},[52,25197,25055],{"class":622},[52,25199,4155],{"class":160},[52,25201,4177],{"class":622},[52,25203,25204],{"class":54,"line":201},[52,25205,25206],{"class":622},"    Person p2;\n",[52,25208,25209,25212,25214,25216],{"class":54,"line":206},[52,25210,25211],{"class":622},"    p2.m_A",[52,25213,2099],{"class":160},[52,25215,4689],{"class":90},[52,25217,4272],{"class":622},[52,25219,25220],{"class":54,"line":224},[52,25221,25222],{"class":332},"    \u002F\u002F继续访问这片空间\n",[52,25224,25225],{"class":54,"line":229},[52,25226,25227],{"class":332},"    \u002F\u002F200\n",[52,25229,25230,25232,25234,25237,25239],{"class":54,"line":241},[52,25231,4529],{"class":622},[52,25233,4155],{"class":160},[52,25235,25236],{"class":622},"p2.m_A",[52,25238,4155],{"class":160},[52,25240,4177],{"class":622},[52,25242,25243],{"class":54,"line":246},[52,25244,4543],{"class":622},[52,25246,25247,25249,25251],{"class":54,"line":252},[52,25248,3124],{"class":160},[52,25250,4935],{"class":58},[52,25252,4938],{"class":622},[52,25254,25255],{"class":54,"line":257},[52,25256,4524],{"class":622},[52,25258,25259,25261],{"class":54,"line":266},[52,25260,8589],{"class":58},[52,25262,8592],{"class":622},[52,25264,25265],{"class":54,"line":4722},[52,25266,4543],{"class":622},[274,25268,25269],{},[538,25270,25271],{},"静态变量的访问",[19,25273,25275],{"className":3109,"code":25274,"language":3111,"meta":28,"style":28},"#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",[26,25276,25277,25283,25293,25299,25303,25307,25311,25319,25323,25328,25336,25340,25344,25358,25373,25381,25385,25390,25395,25400,25405,25417,25422,25427,25441,25458,25462,25470,25474,25480],{"__ignoreMap":28},[52,25278,25279,25281],{"class":54,"line":55},[52,25280,4912],{"class":160},[52,25282,4915],{"class":62},[52,25284,25285,25287,25289,25291],{"class":54,"line":69},[52,25286,4920],{"class":160},[52,25288,4923],{"class":160},[52,25290,4926],{"class":58},[52,25292,4272],{"class":622},[52,25294,25295,25297],{"class":54,"line":82},[52,25296,17650],{"class":160},[52,25298,18127],{"class":58},[52,25300,25301],{"class":54,"line":97},[52,25302,4524],{"class":622},[52,25304,25305],{"class":54,"line":112},[52,25306,17672],{"class":160},[52,25308,25309],{"class":54,"line":119},[52,25310,25131],{"class":332},[52,25312,25313,25315,25317],{"class":54,"line":130},[52,25314,13976],{"class":160},[52,25316,5344],{"class":160},[52,25318,24347],{"class":622},[52,25320,25321],{"class":54,"line":136},[52,25322,18178],{"class":160},[52,25324,25325],{"class":54,"line":141},[52,25326,25327],{"class":332},"    \u002F\u002F静态成员变量也是有访问权限的\n",[52,25329,25330,25332,25334],{"class":54,"line":146},[52,25331,13976],{"class":160},[52,25333,5344],{"class":160},[52,25335,24354],{"class":622},[52,25337,25338],{"class":54,"line":152},[52,25339,6954],{"class":622},[52,25341,25342],{"class":54,"line":157},[52,25343,25148],{"class":332},[52,25345,25346,25348,25350,25352,25354,25356],{"class":54,"line":173},[52,25347,3124],{"class":160},[52,25349,18525],{"class":58},[52,25351,25157],{"class":622},[52,25353,2099],{"class":160},[52,25355,3559],{"class":90},[52,25357,4272],{"class":622},[52,25359,25360,25362,25364,25367,25369,25371],{"class":54,"line":178},[52,25361,3124],{"class":160},[52,25363,18525],{"class":58},[52,25365,25366],{"class":622},"::m_B",[52,25368,2099],{"class":160},[52,25370,3812],{"class":90},[52,25372,4272],{"class":622},[52,25374,25375,25377,25379],{"class":54,"line":184},[52,25376,8320],{"class":160},[52,25378,8613],{"class":58},[52,25380,4938],{"class":622},[52,25382,25383],{"class":54,"line":189},[52,25384,4524],{"class":622},[52,25386,25387],{"class":54,"line":201},[52,25388,25389],{"class":332},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[52,25391,25392],{"class":54,"line":206},[52,25393,25394],{"class":332},"    \u002F\u002F静态成员变量有两种访问方式：\n",[52,25396,25397],{"class":54,"line":224},[52,25398,25399],{"class":332},"    \u002F\u002F1.通过对象进行访问\n",[52,25401,25402],{"class":54,"line":229},[52,25403,25404],{"class":622},"    Person p;  \n",[52,25406,25407,25409,25411,25413,25415],{"class":54,"line":241},[52,25408,4529],{"class":622},[52,25410,4155],{"class":160},[52,25412,25055],{"class":622},[52,25414,4155],{"class":160},[52,25416,4177],{"class":622},[52,25418,25419],{"class":54,"line":246},[52,25420,25421],{"class":332},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[52,25423,25424],{"class":54,"line":252},[52,25425,25426],{"class":332},"    \u002F\u002F2.通过类名进行访问\n",[52,25428,25429,25431,25433,25435,25437,25439],{"class":54,"line":257},[52,25430,4529],{"class":622},[52,25432,4155],{"class":160},[52,25434,22001],{"class":58},[52,25436,25157],{"class":622},[52,25438,4155],{"class":160},[52,25440,4177],{"class":622},[52,25442,25443,25445,25447,25449,25451,25453,25455],{"class":54,"line":266},[52,25444,4529],{"class":622},[52,25446,4155],{"class":160},[52,25448,22001],{"class":58},[52,25450,25366],{"class":622},[52,25452,4155],{"class":160},[52,25454,4220],{"class":622},[52,25456,25457],{"class":332}," \u002F\u002F没有访问权限，报错\n",[52,25459,25460],{"class":54,"line":4722},[52,25461,4543],{"class":622},[52,25463,25464,25466,25468],{"class":54,"line":4727},[52,25465,3124],{"class":160},[52,25467,4935],{"class":58},[52,25469,4938],{"class":622},[52,25471,25472],{"class":54,"line":4741},[52,25473,4524],{"class":622},[52,25475,25476,25478],{"class":54,"line":4746},[52,25477,8658],{"class":58},[52,25479,8592],{"class":622},[52,25481,25482],{"class":54,"line":5538},[52,25483,4543],{"class":622},[1486,25485,25487],{"id":25486},"_8282静态成员函数","8.2.8.2静态成员函数",[274,25489,25490],{},"1.静态成员函数定义与访问",[19,25492,25494],{"className":3109,"code":25493,"language":3111,"meta":28,"style":28},"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",[26,25495,25496,25502,25506,25510,25515,25526,25530,25544,25548,25552,25560,25564,25569,25574,25578,25586,25591,25601],{"__ignoreMap":28},[52,25497,25498,25500],{"class":54,"line":55},[52,25499,17650],{"class":160},[52,25501,18127],{"class":58},[52,25503,25504],{"class":54,"line":69},[52,25505,4524],{"class":622},[52,25507,25508],{"class":54,"line":82},[52,25509,17672],{"class":160},[52,25511,25512],{"class":54,"line":97},[52,25513,25514],{"class":332},"    \u002F\u002F在公共权限下定义静态成员函数\n",[52,25516,25517,25519,25522,25524],{"class":54,"line":112},[52,25518,13976],{"class":160},[52,25520,25521],{"class":160}," void",[52,25523,14341],{"class":58},[52,25525,4938],{"class":622},[52,25527,25528],{"class":54,"line":119},[52,25529,4992],{"class":622},[52,25531,25532,25535,25537,25540,25542],{"class":54,"line":130},[52,25533,25534],{"class":622},"        coout",[52,25536,4155],{"class":160},[52,25538,25539],{"class":62},"\"静态成员函数的调用\"",[52,25541,4155],{"class":160},[52,25543,4177],{"class":622},[52,25545,25546],{"class":54,"line":136},[52,25547,5149],{"class":622},[52,25549,25550],{"class":54,"line":141},[52,25551,6954],{"class":622},[52,25553,25554,25556,25558],{"class":54,"line":146},[52,25555,8320],{"class":160},[52,25557,8544],{"class":58},[52,25559,4938],{"class":622},[52,25561,25562],{"class":54,"line":152},[52,25563,4524],{"class":622},[52,25565,25566],{"class":54,"line":157},[52,25567,25568],{"class":332},"    \u002F\u002F静态成员函数的调用方式:\n",[52,25570,25571],{"class":54,"line":173},[52,25572,25573],{"class":332},"    \u002F\u002F1.通过对象访问\n",[52,25575,25576],{"class":54,"line":178},[52,25577,18269],{"class":622},[52,25579,25580,25582,25584],{"class":54,"line":184},[52,25581,18822],{"class":622},[52,25583,14507],{"class":58},[52,25585,8592],{"class":622},[52,25587,25588],{"class":54,"line":189},[52,25589,25590],{"class":332},"    \u002F\u002F2.通过类名访问\n",[52,25592,25593,25595,25597,25599],{"class":54,"line":201},[52,25594,21474],{"class":58},[52,25596,20688],{"class":622},[52,25598,14507],{"class":58},[52,25600,8592],{"class":622},[52,25602,25603],{"class":54,"line":206},[52,25604,4543],{"class":622},[1070,25606,25607],{"start":69},[1073,25608,25609],{},"静态成员函数只能访问静态成员变量",[19,25611,25613],{"className":3109,"code":25612,"language":3111,"meta":28,"style":28},"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",[26,25614,25615,25621,25625,25629,25633,25643,25647,25661,25666,25678,25682,25693,25703,25707,25711,25715,25725,25729,25742,25746,25750,25754,25758,25772,25780,25784,25788,25792,25796,25804,25808,25818,25823,25827,25835,25839,25845],{"__ignoreMap":28},[52,25616,25617,25619],{"class":54,"line":55},[52,25618,17650],{"class":160},[52,25620,18127],{"class":58},[52,25622,25623],{"class":54,"line":69},[52,25624,4524],{"class":622},[52,25626,25627],{"class":54,"line":82},[52,25628,17672],{"class":160},[52,25630,25631],{"class":54,"line":97},[52,25632,25514],{"class":332},[52,25634,25635,25637,25639,25641],{"class":54,"line":112},[52,25636,13976],{"class":160},[52,25638,25521],{"class":160},[52,25640,14341],{"class":58},[52,25642,4938],{"class":622},[52,25644,25645],{"class":54,"line":119},[52,25646,4992],{"class":622},[52,25648,25649,25652,25654,25656,25658],{"class":54,"line":130},[52,25650,25651],{"class":622},"        m_A",[52,25653,2099],{"class":160},[52,25655,3424],{"class":90},[52,25657,3173],{"class":622},[52,25659,25660],{"class":332}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[52,25662,25663],{"class":54,"line":136},[52,25664,25665],{"class":332},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[52,25667,25668,25670,25672,25674,25676],{"class":54,"line":141},[52,25669,25534],{"class":622},[52,25671,4155],{"class":160},[52,25673,25539],{"class":62},[52,25675,4155],{"class":160},[52,25677,4177],{"class":622},[52,25679,25680],{"class":54,"line":146},[52,25681,5149],{"class":622},[52,25683,25684,25686,25688,25690],{"class":54,"line":152},[52,25685,13976],{"class":160},[52,25687,5344],{"class":160},[52,25689,18404],{"class":622},[52,25691,25692],{"class":332}," \u002F\u002F静态成员变量\n",[52,25694,25695,25697,25700],{"class":54,"line":157},[52,25696,4947],{"class":160},[52,25698,25699],{"class":622}," m_B;",[52,25701,25702],{"class":332}," \u002F\u002F非静态成员变量\n",[52,25704,25705],{"class":54,"line":173},[52,25706,116],{"emptyLinePlaceholder":115},[52,25708,25709],{"class":54,"line":178},[52,25710,18178],{"class":160},[52,25712,25713],{"class":54,"line":184},[52,25714,25327],{"class":332},[52,25716,25717,25719,25721,25723],{"class":54,"line":189},[52,25718,13976],{"class":160},[52,25720,25521],{"class":160},[52,25722,16574],{"class":58},[52,25724,4938],{"class":622},[52,25726,25727],{"class":54,"line":201},[52,25728,4992],{"class":622},[52,25730,25731,25733,25735,25738,25740],{"class":54,"line":206},[52,25732,6410],{"class":622},[52,25734,4155],{"class":160},[52,25736,25737],{"class":62},"\"这是私有权限下的静态函数调用\"",[52,25739,4155],{"class":160},[52,25741,4177],{"class":622},[52,25743,25744],{"class":54,"line":224},[52,25745,5149],{"class":622},[52,25747,25748],{"class":54,"line":229},[52,25749,116],{"emptyLinePlaceholder":115},[52,25751,25752],{"class":54,"line":241},[52,25753,116],{"emptyLinePlaceholder":115},[52,25755,25756],{"class":54,"line":246},[52,25757,6954],{"class":622},[52,25759,25760,25762,25764,25766,25768,25770],{"class":54,"line":252},[52,25761,3124],{"class":160},[52,25763,18525],{"class":58},[52,25765,25157],{"class":622},[52,25767,2099],{"class":160},[52,25769,3306],{"class":90},[52,25771,4272],{"class":622},[52,25773,25774,25776,25778],{"class":54,"line":257},[52,25775,8320],{"class":160},[52,25777,8544],{"class":58},[52,25779,4938],{"class":622},[52,25781,25782],{"class":54,"line":266},[52,25783,4524],{"class":622},[52,25785,25786],{"class":54,"line":4722},[52,25787,25568],{"class":332},[52,25789,25790],{"class":54,"line":4727},[52,25791,25573],{"class":332},[52,25793,25794],{"class":54,"line":4741},[52,25795,18269],{"class":622},[52,25797,25798,25800,25802],{"class":54,"line":4746},[52,25799,18822],{"class":622},[52,25801,14507],{"class":58},[52,25803,8592],{"class":622},[52,25805,25806],{"class":54,"line":5538},[52,25807,25590],{"class":332},[52,25809,25810,25812,25814,25816],{"class":54,"line":5552},[52,25811,21474],{"class":58},[52,25813,20688],{"class":622},[52,25815,14507],{"class":58},[52,25817,8592],{"class":622},[52,25819,25820],{"class":54,"line":5560},[52,25821,25822],{"class":332},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[52,25824,25825],{"class":54,"line":5565},[52,25826,4543],{"class":622},[52,25828,25829,25831,25833],{"class":54,"line":5571},[52,25830,3124],{"class":160},[52,25832,4935],{"class":58},[52,25834,4938],{"class":622},[52,25836,25837],{"class":54,"line":5577},[52,25838,4524],{"class":622},[52,25840,25841,25843],{"class":54,"line":5582},[52,25842,8589],{"class":58},[52,25844,8592],{"class":622},[52,25846,25847],{"class":54,"line":10904},[52,25848,4543],{"class":622},[30,25850,25852],{"id":25851},"_83c对象模型和this指针","8.3C++对象模型和this指针",[1486,25854,25856],{"id":25855},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[274,25858,25859],{},"在c++中，类内的成员变量和成员函数分开存储",[274,25861,25862],{},"只有非静态成员变量才属于类的对象上",[1491,25864,25866],{"id":25865},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[19,25868,25870],{"className":3109,"code":25869,"language":3111,"meta":28,"style":28},"#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",[26,25871,25872,25879,25889,25895,25899,25903,25907,25915,25919,25923,25946,25950,25958,25962,25968],{"__ignoreMap":28},[52,25873,25874,25876],{"class":54,"line":55},[52,25875,4912],{"class":160},[52,25877,25878],{"class":62},"\u003Ciostraem>\n",[52,25880,25881,25883,25885,25887],{"class":54,"line":69},[52,25882,4920],{"class":160},[52,25884,4923],{"class":160},[52,25886,4926],{"class":58},[52,25888,4272],{"class":622},[52,25890,25891,25893],{"class":54,"line":82},[52,25892,17650],{"class":160},[52,25894,18127],{"class":58},[52,25896,25897],{"class":54,"line":97},[52,25898,4524],{"class":622},[52,25900,25901],{"class":54,"line":112},[52,25902,116],{"emptyLinePlaceholder":115},[52,25904,25905],{"class":54,"line":119},[52,25906,6954],{"class":622},[52,25908,25909,25911,25913],{"class":54,"line":130},[52,25910,8320],{"class":160},[52,25912,8544],{"class":58},[52,25914,4938],{"class":622},[52,25916,25917],{"class":54,"line":136},[52,25918,4524],{"class":622},[52,25920,25921],{"class":54,"line":141},[52,25922,18269],{"class":622},[52,25924,25925,25927,25929,25932,25934,25937,25939,25941,25943],{"class":54,"line":146},[52,25926,4529],{"class":622},[52,25928,4155],{"class":160},[52,25930,25931],{"class":62},"\"size of p=\"",[52,25933,4155],{"class":160},[52,25935,25936],{"class":58},"sizeoif",[52,25938,9495],{"class":622},[52,25940,4155],{"class":160},[52,25942,4220],{"class":622},[52,25944,25945],{"class":332}," \u002F\u002F查看这个空类的占用的内存空间\n",[52,25947,25948],{"class":54,"line":152},[52,25949,4543],{"class":622},[52,25951,25952,25954,25956],{"class":54,"line":157},[52,25953,3124],{"class":160},[52,25955,4935],{"class":58},[52,25957,4938],{"class":622},[52,25959,25960],{"class":54,"line":173},[52,25961,4524],{"class":622},[52,25963,25964,25966],{"class":54,"line":178},[52,25965,8589],{"class":58},[52,25967,8592],{"class":622},[52,25969,25970],{"class":54,"line":184},[52,25971,4543],{"class":622},[274,25973,25974],{},"输出结果为：size of p=1",[274,25976,25977],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[274,25979,25980],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[1491,25982,25984],{"id":25983},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[19,25986,25988],{"className":3109,"code":25987,"language":3111,"meta":28,"style":28},"#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",[26,25989,25990,25996,26006,26014,26018,26027,26031,26039,26043,26047,26066,26070,26074,26082,26086,26092],{"__ignoreMap":28},[52,25991,25992,25994],{"class":54,"line":55},[52,25993,4912],{"class":160},[52,25995,4915],{"class":62},[52,25997,25998,26000,26002,26004],{"class":54,"line":69},[52,25999,4920],{"class":160},[52,26001,4923],{"class":160},[52,26003,4926],{"class":58},[52,26005,4272],{"class":622},[52,26007,26008,26010,26012],{"class":54,"line":82},[52,26009,17650],{"class":160},[52,26011,18525],{"class":58},[52,26013,623],{"class":622},[52,26015,26016],{"class":54,"line":97},[52,26017,4524],{"class":622},[52,26019,26020,26022,26024],{"class":54,"line":112},[52,26021,4947],{"class":160},[52,26023,18404],{"class":622},[52,26025,26026],{"class":332},"\u002F\u002F非静态成员变量\n",[52,26028,26029],{"class":54,"line":119},[52,26030,6954],{"class":622},[52,26032,26033,26035,26037],{"class":54,"line":130},[52,26034,8320],{"class":160},[52,26036,8544],{"class":58},[52,26038,4938],{"class":622},[52,26040,26041],{"class":54,"line":136},[52,26042,4524],{"class":622},[52,26044,26045],{"class":54,"line":141},[52,26046,18269],{"class":622},[52,26048,26049,26051,26053,26055,26057,26059,26061,26063],{"class":54,"line":146},[52,26050,4529],{"class":622},[52,26052,4155],{"class":160},[52,26054,25931],{"class":62},[52,26056,4351],{"class":160},[52,26058,9495],{"class":622},[52,26060,4155],{"class":160},[52,26062,4220],{"class":622},[52,26064,26065],{"class":332}," \u002F\u002F查看不是空对象时占用多少内存\n",[52,26067,26068],{"class":54,"line":152},[52,26069,116],{"emptyLinePlaceholder":115},[52,26071,26072],{"class":54,"line":157},[52,26073,4543],{"class":622},[52,26075,26076,26078,26080],{"class":54,"line":173},[52,26077,3124],{"class":160},[52,26079,4935],{"class":58},[52,26081,4938],{"class":622},[52,26083,26084],{"class":54,"line":178},[52,26085,4524],{"class":622},[52,26087,26088,26090],{"class":54,"line":184},[52,26089,8589],{"class":58},[52,26091,8592],{"class":622},[52,26093,26094],{"class":54,"line":189},[52,26095,4543],{"class":622},[274,26097,26098],{},"输出结果：size of p=4",[274,26100,26101],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1070,26103,26104],{},[1073,26105,26106],{},"如果加上非静态成员变量，Person类修改如下",[19,26108,26110],{"className":3109,"code":26109,"language":3111,"meta":28,"style":28},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[26,26111,26112,26118,26122,26128,26136,26140,26145],{"__ignoreMap":28},[52,26113,26114,26116],{"class":54,"line":55},[52,26115,17650],{"class":160},[52,26117,18127],{"class":58},[52,26119,26120],{"class":54,"line":69},[52,26121,4524],{"class":622},[52,26123,26124,26126],{"class":54,"line":82},[52,26125,4947],{"class":160},[52,26127,24347],{"class":622},[52,26129,26130,26132,26134],{"class":54,"line":97},[52,26131,13976],{"class":160},[52,26133,5344],{"class":160},[52,26135,24354],{"class":622},[52,26137,26138],{"class":54,"line":112},[52,26139,6954],{"class":622},[52,26141,26142],{"class":54,"line":119},[52,26143,26144],{"class":332},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[52,26146,26147,26149,26151,26153,26155,26157],{"class":54,"line":130},[52,26148,3124],{"class":160},[52,26150,18525],{"class":58},[52,26152,25366],{"class":622},[52,26154,2099],{"class":160},[52,26156,3306],{"class":90},[52,26158,4272],{"class":622},[274,26160,26161],{},"输出结果：4",[274,26163,26164],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1070,26166,26167],{"start":69},[1073,26168,26169],{},"加上非静态成员函数",[19,26171,26173],{"className":3109,"code":26172,"language":3111,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[26,26174,26175,26182,26186,26192,26200,26204,26208,26212],{"__ignoreMap":28},[52,26176,26177,26179],{"class":54,"line":55},[52,26178,17650],{"class":160},[52,26180,26181],{"class":58},"  Person\n",[52,26183,26184],{"class":54,"line":69},[52,26185,4524],{"class":622},[52,26187,26188,26190],{"class":54,"line":82},[52,26189,4947],{"class":160},[52,26191,24347],{"class":622},[52,26193,26194,26196,26198],{"class":54,"line":97},[52,26195,17865],{"class":160},[52,26197,14341],{"class":58},[52,26199,4938],{"class":622},[52,26201,26202],{"class":54,"line":112},[52,26203,4992],{"class":622},[52,26205,26206],{"class":54,"line":119},[52,26207,116],{"emptyLinePlaceholder":115},[52,26209,26210],{"class":54,"line":130},[52,26211,5149],{"class":622},[52,26213,26214],{"class":54,"line":136},[52,26215,6954],{"class":622},[274,26217,26218],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1070,26220,26221],{"start":82},[1073,26222,26223],{},"加上静态成员函数",[19,26225,26227],{"className":3109,"code":26226,"language":3111,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[26,26228,26229,26235,26239,26245,26253,26257,26261,26265,26276,26280,26284,26288],{"__ignoreMap":28},[52,26230,26231,26233],{"class":54,"line":55},[52,26232,17650],{"class":160},[52,26234,26181],{"class":58},[52,26236,26237],{"class":54,"line":69},[52,26238,4524],{"class":622},[52,26240,26241,26243],{"class":54,"line":82},[52,26242,4947],{"class":160},[52,26244,24347],{"class":622},[52,26246,26247,26249,26251],{"class":54,"line":97},[52,26248,17865],{"class":160},[52,26250,14341],{"class":58},[52,26252,4938],{"class":622},[52,26254,26255],{"class":54,"line":112},[52,26256,4992],{"class":622},[52,26258,26259],{"class":54,"line":119},[52,26260,116],{"emptyLinePlaceholder":115},[52,26262,26263],{"class":54,"line":130},[52,26264,5149],{"class":622},[52,26266,26267,26269,26271,26274],{"class":54,"line":136},[52,26268,13976],{"class":160},[52,26270,25521],{"class":160},[52,26272,26273],{"class":58}," func1",[52,26275,4938],{"class":622},[52,26277,26278],{"class":54,"line":141},[52,26279,4992],{"class":622},[52,26281,26282],{"class":54,"line":146},[52,26283,116],{"emptyLinePlaceholder":115},[52,26285,26286],{"class":54,"line":152},[52,26287,5149],{"class":622},[52,26289,26290],{"class":54,"line":157},[52,26291,6954],{"class":622},[274,26293,26161],{},[274,26295,26296],{},"解释：静态成员函数也不属于类上",[3015,26298,10630],{},{"title":28,"searchDepth":69,"depth":69,"links":26300},[26301,26307],{"id":17601,"depth":69,"text":17602,"children":26302},[26303,26304,26305,26306],{"id":17605,"depth":82,"text":17606},{"id":18330,"depth":82,"text":18331},{"id":18502,"depth":82,"text":18503},{"id":18961,"depth":82,"text":18962},{"id":21333,"depth":69,"text":21334,"children":26308},[26309,26310,26311,26312,26313,26314,26315,26316,26317],{"id":21345,"depth":82,"text":21346},{"id":21637,"depth":82,"text":21638},{"id":22128,"depth":82,"text":22129},{"id":23225,"depth":82,"text":23226},{"id":23648,"depth":82,"text":23649},{"id":24127,"depth":82,"text":24128},{"id":24502,"depth":82,"text":24503},{"id":24915,"depth":82,"text":24916},{"id":25851,"depth":82,"text":25852},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":17566,"description":26318},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":26325,"title":3111,"body":26326,"description":3046,"extension":3047,"meta":26330,"navigation":115,"path":26332,"seo":26333,"stem":26334,"__hash__":26335},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":26327,"toc":26328},[],{"title":28,"searchDepth":69,"depth":69,"links":26329},[],{"category":26331},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":3111,"description":3046},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":26337,"title":26338,"body":26339,"description":28,"extension":3047,"meta":26927,"navigation":115,"path":26928,"seo":26929,"stem":26930,"__hash__":26931},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":26340,"toc":26909},[26341,26344,26348,26351,26354,26357,26375,26380,26383,26386,26389,26392,26397,26400,26405,26408,26411,26415,26418,26421,26427,26430,26448,26452,26456,26459,26464,26467,26471,26474,26487,26490,26494,26497,26500,26503,26527,26530,26539,26550,26565,26597,26601,26608,26616,26620,26623,26626,26631,26635,26638,26641,26646,26649,26653,26656,26659,26664,26667,26671,26676,26680,26747,26751,26754,26757,26760,26763,26766,26772,26792,26795,26809,26817,26821,26824,26827,26832,26835,26840,26845,26848,26851,26856,26861,26864,26869,26874,26877,26882,26887,26890,26893,26898,26901,26906],[10,26342,26338],{"id":26343},"_1强化学习基本认识",[14,26345,26347],{"id":26346},"_11什么是强化学习","1.1.什么是强化学习",[274,26349,26350],{},"强化学习有两部分组成：智能体和环境；",[274,26352,26353],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[274,26355,26356],{},"强化学习与监督学习的区别:",[1070,26358,26359,26362,26365,26368],{},[1073,26360,26361],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[1073,26363,26364],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[1073,26366,26367],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[1073,26369,26370,26371,26374],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[538,26372,26373],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[274,26376,26377],{},[280,26378],{"alt":28,"src":26379},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[274,26381,26382],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[274,26384,26385],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[274,26387,26388],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[274,26390,26391],{},"获取奖励",[274,26393,26394],{},[280,26395],{"alt":28,"src":26396},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[274,26398,26399],{},"强化学习可以分成标准强化学习和深度强化学习",[274,26401,26402],{},[280,26403],{"alt":28,"src":26404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[274,26406,26407],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[274,26409,26410],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,26412,26414],{"id":26413},"_12强化学习应用场景","1.2.强化学习应用场景",[274,26416,26417],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[274,26419,26420],{},"具身智能中的应用",[274,26422,26423,26426],{},[538,26424,26425],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[274,26428,26429],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[274,26431,26432,26433,26436,26437,26440,26441,26444,26445],{},"机器人是",[538,26434,26435],{},"躯体","，深度学习是",[538,26438,26439],{},"神经元****网络","，VLA是",[538,26442,26443],{},"通用的行为逻辑","，而强化学习是",[538,26446,26447],{},"教练",[14,26449,26451],{"id":26450},"_13序列决策","1.3.序列决策",[30,26453,26455],{"id":26454},"_131智能体与环境","1.3.1.智能体与环境",[274,26457,26458],{},"强化学习研究的问题是智能体agent与环境交互的问题",[274,26460,26461],{},[280,26462],{"alt":28,"src":26463},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[274,26465,26466],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[30,26468,26470],{"id":26469},"_132奖励","1.3.2.奖励",[274,26472,26473],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[274,26475,26476,26477,26486],{},"取某个策略的表现如何。强化学习的目的就是",[538,26478,26479,26480,26485],{},"最大化",[538,26481,26482],{},[538,26483,26484],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[274,26488,26489],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[30,26491,26493],{"id":26492},"_133序列决策","1.3.3.序列决策",[274,26495,26496],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[274,26498,26499],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[274,26501,26502],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[274,26504,26505,26508,26509,26511,26512,26514,26515,26517,26518,16751,26521,16751,26524],{},[1605,26506,26507],{},"Ht"," = ",[1605,26510,3708],{},"1*, a",[1605,26513,3332],{},", r",[1605,26516,3332],{},", . . . ,* ",[1605,26519,26520],{},"ot",[1605,26522,26523],{},", at ,",[1605,26525,26526],{},"rt",[274,26528,26529],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[274,26531,26532,26508,26535,4629,26537,3542],{},[1605,26533,26534],{},"st",[1605,26536,3170],{},[1605,26538,26507],{},[274,26540,26541,26542,26545,26546,26549],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[538,26543,26544],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[538,26547,26548],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[274,26551,26552,26553,26556,26557,26560,26561,26564],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[538,26554,26555],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[538,26558,26559],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[1605,26562,26563],{},"S, A, T, R, Ω, O, γ",")。",[274,26566,26567,26568,26570,26571,26573,26574,3121,26576,26579,26580,26582,26583,3121,26586,26589,26590,26592,26593,26596],{},"其中 ",[1605,26569,3801],{}," 表示状态空间，为隐变量，",[1605,26572,3346],{}," 为动作空间，",[1605,26575,3826],{},[1605,26577,26578],{},"s ′ |s, a",") 为状态转移概率，",[1605,26581,3776],{}," 为奖励函数，",[1605,26584,26585],{},"Ω",[1605,26587,26588],{},"o|s, a",") 为观测概率，",[1605,26591,3702],{}," 为观测空间，",[1605,26594,26595],{},"γ"," 为折扣因子。",[14,26598,26600],{"id":26599},"_14动作空间","1.4.动作空间",[274,26602,26603,26604,26607],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[538,26605,26606],{},"动作空间"," ，动作空间分为:",[1070,26609,26610,26613],{},[1073,26611,26612],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[1073,26614,26615],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,26617,26619],{"id":26618},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[274,26621,26622],{},"由策略、价值函数、模型三部分组成",[274,26624,26625],{},"这三者组成马尔可夫决策过程",[274,26627,26628],{},[280,26629],{"alt":28,"src":26630},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[30,26632,26634],{"id":26633},"_151策略","1.5.1.策略",[274,26636,26637],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[274,26639,26640],{},"策略可分为两种：",[274,26642,26643],{},[280,26644],{"alt":28,"src":26645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[274,26647,26648],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[30,26650,26652],{"id":26651},"_152价值函数","1.5.2.价值函数",[274,26654,26655],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[274,26657,26658],{},"价值函数中有一个折扣因子，类似于存款利息",[274,26660,26661],{},[280,26662],{"alt":28,"src":26663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[274,26665,26666],{},"进入某个状态采取的最优动作可以通过Q函数得到",[30,26668,26670],{"id":26669},"_153模型","1.5.3.模型",[274,26672,26673],{},[280,26674],{"alt":28,"src":26675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,26677,26679],{"id":26678},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[3253,26681,26682,26693],{},[3256,26683,26684],{},[3259,26685,26686,26690],{},[3262,26687,26689],{"align":26688},"left","类型",[3262,26691,26692],{"align":26688},"特点",[3299,26694,26695,26705,26715,26725,26737],{},[3259,26696,26697,26702],{},[3304,26698,26699],{"align":26688},[538,26700,26701],{},"基于价值的智能体",[3304,26703,26704],{"align":26688},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[3259,26706,26707,26712],{},[3304,26708,26709],{"align":26688},[538,26710,26711],{},"基于策略的智能体",[3304,26713,26714],{"align":26688},"直接学习策略，没有学习价值函数",[3259,26716,26717,26722],{},[3304,26718,26719],{"align":26688},[538,26720,26721],{},"演员-评论员智能体",[3304,26723,26724],{"align":26688},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[3259,26726,26727,26732],{},[3304,26728,26729],{"align":26688},[538,26730,26731],{},"有模型强化学习智能体",[3304,26733,26734],{"align":26688},[280,26735],{"alt":28,"src":26736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[3259,26738,26739,26744],{},[3304,26740,26741],{"align":26688},[538,26742,26743],{},"免模型强化学习智能体",[3304,26745,26746],{"align":26688},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26748,26750],{"id":26749},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[274,26752,26753],{},"学习和规划是序列决策的两个基本问题",[274,26755,26756],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[274,26758,26759],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[274,26761,26762],{},"强化学习用到的库：Gym",[274,26764,26765],{},"Gym可以检验强化学习算法的优劣",[274,26767,26768,26771],{},[538,26769,26770],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[19,26773,26777],{"className":26774,"code":26775,"language":26776,"meta":28,"style":28},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[26,26778,26779],{"__ignoreMap":28},[52,26780,26781,26784,26786,26789],{"class":54,"line":55},[52,26782,26783],{"class":58},"pip",[52,26785,76],{"class":62},[52,26787,26788],{"class":62}," gym==",[52,26790,26791],{"class":90},"0.25.2\n",[274,26793,26794],{},"显示图形界面需要",[19,26796,26798],{"className":26774,"code":26797,"language":26776,"meta":28,"style":28},"pip install pygame\n",[26,26799,26800],{"__ignoreMap":28},[52,26801,26802,26804,26806],{"class":54,"line":55},[52,26803,26783],{"class":58},[52,26805,76],{"class":62},[52,26807,26808],{"class":62}," pygame\n",[274,26810,26811,26812],{},"有关Gym库的相关文档介绍：",[300,26813,26816],{"href":26814,"rel":26815},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[304],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26818,26820],{"id":26819},"_18一些补充基础概念","1.8.一些补充基础概念",[274,26822,26823],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[274,26825,26826],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[274,26828,26829],{},[280,26830],{"alt":28,"src":26831},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[274,26833,26834],{},"折扣率需要自己来设定",[274,26836,26837],{},[280,26838],{"alt":28,"src":26839},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1070,26841,26842],{},[1073,26843,26844],{},"状态转移函数：",[274,26846,26847],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[274,26849,26850],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[274,26852,26853],{},[280,26854],{"alt":28,"src":26855},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1070,26857,26858],{"start":69},[1073,26859,26860],{},"动作价值函数：",[274,26862,26863],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[274,26865,26866],{},[280,26867],{"alt":28,"src":26868},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1070,26870,26871],{"start":82},[1073,26872,26873],{},"最优动作价值函数：",[274,26875,26876],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[274,26878,26879],{},[280,26880],{"alt":28,"src":26881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1070,26883,26884],{"start":97},[1073,26885,26886],{},"状态价值函数:",[274,26888,26889],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[274,26891,26892],{},"它衡量的是“一个具体动作”的长期价值",[274,26894,26895],{},[280,26896],{"alt":28,"src":26897},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[274,26899,26900],{},"几个价值函数之间的比较：",[274,26902,26903],{},[280,26904],{"alt":28,"src":26905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[3015,26907,26908],{},"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":28,"searchDepth":69,"depth":69,"links":26910},[26911,26912,26913,26918,26919,26924,26925,26926],{"id":26346,"depth":69,"text":26347},{"id":26413,"depth":69,"text":26414},{"id":26450,"depth":69,"text":26451,"children":26914},[26915,26916,26917],{"id":26454,"depth":82,"text":26455},{"id":26469,"depth":82,"text":26470},{"id":26492,"depth":82,"text":26493},{"id":26599,"depth":69,"text":26600},{"id":26618,"depth":69,"text":26619,"children":26920},[26921,26922,26923],{"id":26633,"depth":82,"text":26634},{"id":26651,"depth":82,"text":26652},{"id":26669,"depth":82,"text":26670},{"id":26678,"depth":69,"text":26679},{"id":26749,"depth":69,"text":26750},{"id":26819,"depth":69,"text":26820},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":26338,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26933,"title":26934,"body":26935,"description":26942,"extension":3047,"meta":26953,"navigation":115,"path":26954,"seo":26955,"stem":26956,"__hash__":26957},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26936,"toc":26951},[26937,26940,26943,26948],[10,26938,26934],{"id":26939},"_2马尔可夫决策过程",[274,26941,26942],{},"这是强化学习的基本框架",[274,26944,26945],{},[280,26946],{"alt":28,"src":26947},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[274,26949,26950],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":28,"searchDepth":69,"depth":69,"links":26952},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26934,"description":26942},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26959,"title":26960,"body":26961,"description":28,"extension":3047,"meta":27077,"navigation":115,"path":27078,"seo":27079,"stem":27080,"__hash__":27081},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26962,"toc":27072},[26963,26966,26970,26973,26978,26983,26986,26991,26994,26999,27002,27006,27011,27014,27019,27024,27029,27032,27036,27041,27044,27049,27054,27059,27064,27067],[10,26964,26960],{"id":26965},"_3动作价值函数",[14,26967,26969],{"id":26968},"_31dqn","3.1.DQN",[274,26971,26972],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[274,26974,26975],{},[280,26976],{"alt":28,"src":26977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[274,26979,26980],{},[280,26981],{"alt":28,"src":26982},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[274,26984,26985],{},"DQN算法的描述：",[274,26987,26988],{},[280,26989],{"alt":28,"src":26990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[274,26992,26993],{},"这里的Dense指的是全连接层",[274,26995,26996],{},[280,26997],{"alt":28,"src":26998},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[274,27000,27001],{},"当前观测的状态为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,27003,27005],{"id":27004},"_32dqn的举例","3.2.DQN的举例",[274,27007,27008],{},[280,27009],{"alt":28,"src":27010},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[274,27012,27013],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[274,27015,27016],{},[280,27017],{"alt":28,"src":27018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[274,27020,27021],{},[280,27022],{"alt":28,"src":27023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[274,27025,27026],{},[280,27027],{"alt":28,"src":27028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[274,27030,27031],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,27033,27035],{"id":27034},"_33td算法","3.3.TD算法",[274,27037,27038],{},[280,27039],{"alt":28,"src":27040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[274,27042,27043],{},"强化学习TD算法公式的粗略解释：",[274,27045,27046],{},[280,27047],{"alt":28,"src":27048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[274,27050,27051],{},[280,27052],{"alt":28,"src":27053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[274,27055,27056],{},[280,27057],{"alt":28,"src":27058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[274,27060,27061],{},[280,27062],{"alt":28,"src":27063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[274,27065,27066],{},"TD算法总结：",[274,27068,27069],{},[280,27070],{"alt":28,"src":27071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":28,"searchDepth":69,"depth":69,"links":27073},[27074,27075,27076],{"id":26968,"depth":69,"text":26969},{"id":27004,"depth":69,"text":27005},{"id":27034,"depth":69,"text":27035},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26960,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":27083,"title":27084,"body":27085,"description":28,"extension":3047,"meta":27318,"navigation":115,"path":27319,"seo":27320,"stem":27321,"__hash__":27322},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":27086,"toc":27314},[27087,27090,27094,27097,27100,27105,27110,27113,27118,27123,27126,27131,27134,27139,27142,27147,27150,27155,27158,27163,27168,27171,27176,27179,27182,27187,27190,27195,27200,27204,27207,27210,27215,27220,27223,27228,27233,27236,27241,27244,27247,27252,27255,27260,27263,27268,27273,27276,27281,27286,27289,27294,27297,27302,27305],[10,27088,27084],{"id":27089},"_4策略学习",[14,27091,27093],{"id":27092},"_41概念描述","4.1.概念描述",[274,27095,27096],{},"用神经网络（策略网络）近似策略函数",[274,27098,27099],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[274,27101,27102],{},[280,27103],{"alt":28,"src":27104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[274,27106,27107],{},[280,27108],{"alt":28,"src":27109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[274,27111,27112],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[274,27114,27115],{},[280,27116],{"alt":28,"src":27117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[274,27119,27120],{},[280,27121],{"alt":28,"src":27122},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[274,27124,27125],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[274,27127,27128],{},[280,27129],{"alt":28,"src":27130},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[274,27132,27133],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[274,27135,27136],{},[280,27137],{"alt":28,"src":27138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[274,27140,27141],{},"改进theta要用到策略梯度算法",[274,27143,27144],{},[280,27145],{"alt":28,"src":27146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[274,27148,27149],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[274,27151,27152],{},[280,27153],{"alt":28,"src":27154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[274,27156,27157],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[274,27159,27160],{},[280,27161],{"alt":28,"src":27162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[274,27164,27165],{},[280,27166],{"alt":28,"src":27167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[274,27169,27170],{},"梯度公式总结：",[274,27172,27173],{},[280,27174],{"alt":28,"src":27175},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[274,27177,27178],{},"两个公式的分别应用场景：",[274,27180,27181],{},"对于离散的动作：",[274,27183,27184],{},[280,27185],{"alt":28,"src":27186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[274,27188,27189],{},"对于连续的动作：",[274,27191,27192],{},[280,27193],{"alt":28,"src":27194},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[274,27196,27197],{},[280,27198],{"alt":28,"src":27199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,27201,27203],{"id":27202},"_42概率梯度算法总结","4.2.概率梯度算法总结",[274,27205,27206],{},"使用蒙特卡洛来近似计算策略梯度",[274,27208,27209],{},"蒙特卡洛法的解释如下：",[274,27211,27212],{},[280,27213],{"alt":28,"src":27214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[274,27216,27217],{},[280,27218],{"alt":28,"src":27219},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[274,27221,27222],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1070,27224,27225],{},[1073,27226,27227],{},"方法一：reinforce算法",[274,27229,27230],{},[280,27231],{"alt":28,"src":27232},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[274,27234,27235],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1070,27237,27238],{"start":69},[1073,27239,27240],{},"方法二：actor-critic算法",[274,27242,27243],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[274,27245,27246],{},"两个网络的构建：",[274,27248,27249],{},[280,27250],{"alt":28,"src":27251},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[274,27253,27254],{},"actor网路：",[274,27256,27257],{},[280,27258],{"alt":28,"src":27259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[274,27261,27262],{},"critic网络",[274,27264,27265],{},[280,27266],{"alt":28,"src":27267},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1070,27269,27270],{"start":82},[1073,27271,27272],{},"网络的训练",[274,27274,27275],{},"网络描述",[274,27277,27278],{},[280,27279],{"alt":28,"src":27280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[274,27282,27283],{},[280,27284],{"alt":28,"src":27285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[274,27287,27288],{},"TD算法更新梯度：",[274,27290,27291],{},[280,27292],{"alt":28,"src":27293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[274,27295,27296],{},"策略网络更新梯度：",[274,27298,27299],{},[280,27300],{"alt":28,"src":27301},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[274,27303,27304],{},"训练整个流程的具体描述：",[274,27306,27307,27310,27311],{},[280,27308],{"alt":28,"src":27309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[280,27312],{"alt":28,"src":27313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":28,"searchDepth":69,"depth":69,"links":27315},[27316,27317],{"id":27092,"depth":69,"text":27093},{"id":27202,"depth":69,"text":27203},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":27084,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":27324,"title":27325,"body":27326,"description":27333,"extension":3047,"meta":27383,"navigation":115,"path":27384,"seo":27385,"stem":27386,"__hash__":27387},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":27327,"toc":27379},[27328,27331,27334,27338,27341,27346,27350,27353,27358,27361,27366,27371,27374],[10,27329,27325],{"id":27330},"_5alphago算法",[274,27332,27333],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,27335,27337],{"id":27336},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[274,27339,27340],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[274,27342,27343],{},[280,27344],{"alt":28,"src":27345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,27347,27349],{"id":27348},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[274,27351,27352],{},"采用强化学习的方式训练策略网络",[274,27354,27355],{},[280,27356],{"alt":28,"src":27357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[274,27359,27360],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[274,27362,27363],{},[280,27364],{"alt":28,"src":27365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[274,27367,27368],{},[280,27369],{"alt":28,"src":27370},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[274,27372,27373],{},"强化学习训练策略网络的总结：",[274,27375,27376],{},[280,27377],{"alt":28,"src":27378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":28,"searchDepth":69,"depth":69,"links":27380},[27381,27382],{"id":27336,"depth":69,"text":27337},{"id":27348,"depth":69,"text":27349},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":27325,"description":27333},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":27389,"title":27390,"body":27391,"description":27398,"extension":3047,"meta":27401,"navigation":115,"path":27402,"seo":27403,"stem":27404,"__hash__":27405},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":27392,"toc":27399},[27393,27396],[10,27394,27390],{"id":27395},"_6价值网络",[274,27397,27398],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":28,"searchDepth":69,"depth":69,"links":27400},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":27390,"description":27398},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":27407,"title":27408,"body":27409,"description":27413,"extension":3047,"meta":27414,"navigation":115,"path":27415,"seo":27416,"stem":27417,"__hash__":27418},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":27410,"toc":27411},[],{"title":28,"searchDepth":69,"depth":69,"links":27412},[],"记录自己的强化学习笔记。",{"category":26331},"\u002Fwiki\u002F2025-12-04",{"title":27408,"description":27413},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":27420,"title":27421,"body":27422,"description":3046,"extension":3047,"meta":27461,"navigation":115,"path":27462,"seo":27463,"stem":27464,"__hash__":27465},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":27423,"toc":27459},[27424,27427,27430,27436,27439,27445,27448,27453,27456],[10,27425,27421],{"id":27426},"_1-项目概览与官方资源",[274,27428,27429],{},"官方文档：",[274,27431,27432],{},[300,27433,27434],{"href":27434,"rel":27435},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[304],[274,27437,27438],{},"官方代码仓库：",[274,27440,27441],{},[300,27442,27443],{"href":27443,"rel":27444},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[304],[274,27446,27447],{},"复现大体流程：",[274,27449,27450],{},[280,27451],{"alt":28,"src":27452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[274,27454,27455],{},"本教程的目标是打通这条链路：",[274,27457,27458],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":28,"searchDepth":69,"depth":69,"links":27460},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":27421,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":27467,"title":27468,"body":27469,"description":3046,"extension":3047,"meta":27583,"navigation":115,"path":27584,"seo":27585,"stem":27586,"__hash__":27587},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":27470,"toc":27578},[27471,27474,27478,27481,27488,27492,27495,27504,27514,27518,27546,27549,27575],[10,27472,27468],{"id":27473},"_2-环境准备与设备连接",[14,27475,27477],{"id":27476},"_21-系统与环境","2.1 系统与环境",[274,27479,27480],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[274,27482,27483,27484,27487],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[26,27485,27486],{},"lerobot"," 依赖。",[14,27489,27491],{"id":27490},"_22-机械臂串口识别","2.2 机械臂串口识别",[274,27493,27494],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[19,27496,27498],{"className":26774,"code":27497,"language":26776,"meta":28,"style":28},"lerobot-find-out\n",[26,27499,27500],{"__ignoreMap":28},[52,27501,27502],{"class":54,"line":55},[52,27503,27497],{"class":58},[274,27505,27506,27507,3327,27510,27513],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[26,27508,27509],{},"\u002Fdev\u002FttyACM0",[26,27511,27512],{},"\u002Fdev\u002FttyACM1","）。",[14,27515,27517],{"id":27516},"_23-串口授权","2.3 串口授权",[19,27519,27521],{"className":26774,"code":27520,"language":26776,"meta":28,"style":28},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[26,27522,27523,27535],{"__ignoreMap":28},[52,27524,27525,27527,27529,27532],{"class":54,"line":55},[52,27526,59],{"class":58},[52,27528,1712],{"class":62},[52,27530,27531],{"class":90}," 666",[52,27533,27534],{"class":62}," \u002Fdev\u002FttyACM0\n",[52,27536,27537,27539,27541,27543],{"class":54,"line":69},[52,27538,59],{"class":58},[52,27540,1712],{"class":62},[52,27542,27531],{"class":90},[52,27544,27545],{"class":62}," \u002Fdev\u002FttyACM1\n",[274,27547,27548],{},"说明：",[4118,27550,27551,27556,27562,27572],{},[1073,27552,27553,27555],{},[26,27554,59],{},"：以 root 权限执行命令。",[1073,27557,27558,27561],{},[26,27559,27560],{},"chmod","：修改设备节点权限。",[1073,27563,27564,27567,27568,27571],{},[26,27565,27566],{},"666","：",[26,27569,27570],{},"rw-rw-rw-","，所有用户可读写。",[1073,27573,27574],{},"串口号必须替换为你机器上的真实端口。",[3015,27576,27577],{},"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":28,"searchDepth":69,"depth":69,"links":27579},[27580,27581,27582],{"id":27476,"depth":69,"text":27477},{"id":27490,"depth":69,"text":27491},{"id":27516,"depth":69,"text":27517},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":27468,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":27589,"title":27590,"body":27591,"description":3046,"extension":3047,"meta":27752,"navigation":115,"path":27753,"seo":27754,"stem":27755,"__hash__":27756},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":27592,"toc":27748},[27593,27597,27601,27607,27610,27667,27670,27674,27677,27745],[10,27594,27596],{"id":27595},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,27598,27600],{"id":27599},"_31-配置电机-id","3.1 配置电机 ID",[274,27602,27603,27604,27606],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[26,27605,3332],{},"，需要改成机械臂链路里不冲突的编号。",[274,27608,27609],{},"方式一：用 LeRobot 命令逐步写入。",[19,27611,27613],{"className":26774,"code":27612,"language":26776,"meta":28,"style":28},"# 主臂舵机配置 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",[26,27614,27615,27620,27628,27635,27640,27644,27649,27655,27662],{"__ignoreMap":28},[52,27616,27617],{"class":54,"line":55},[52,27618,27619],{"class":332},"# 主臂舵机配置 ID\n",[52,27621,27622,27625],{"class":54,"line":69},[52,27623,27624],{"class":58},"lerobot-setup-motors",[52,27626,27627],{"class":90}," \\\n",[52,27629,27630,27633],{"class":54,"line":82},[52,27631,27632],{"class":90},"  --teleop.type=so101_leader",[52,27634,27627],{"class":90},[52,27636,27637],{"class":54,"line":97},[52,27638,27639],{"class":90},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[52,27641,27642],{"class":54,"line":112},[52,27643,116],{"emptyLinePlaceholder":115},[52,27645,27646],{"class":54,"line":119},[52,27647,27648],{"class":332},"# 从臂舵机配置 ID\n",[52,27650,27651,27653],{"class":54,"line":130},[52,27652,27624],{"class":58},[52,27654,27627],{"class":90},[52,27656,27657,27660],{"class":54,"line":136},[52,27658,27659],{"class":90},"  --robot.type=so101_follower",[52,27661,27627],{"class":90},[52,27663,27664],{"class":54,"line":141},[52,27665,27666],{"class":90},"  --robot.port=\u002Fdev\u002FttyACM1\n",[274,27668,27669],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,27671,27673],{"id":27672},"_32-机械臂校准","3.2 机械臂校准",[274,27675,27676],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[19,27678,27680],{"className":26774,"code":27679,"language":26776,"meta":28,"style":28},"# 主臂校准\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",[26,27681,27682,27687,27694,27700,27707,27712,27716,27721,27727,27733,27740],{"__ignoreMap":28},[52,27683,27684],{"class":54,"line":55},[52,27685,27686],{"class":332},"# 主臂校准\n",[52,27688,27689,27692],{"class":54,"line":69},[52,27690,27691],{"class":58},"lerobot-calibrate",[52,27693,27627],{"class":90},[52,27695,27696,27698],{"class":54,"line":82},[52,27697,27632],{"class":90},[52,27699,27627],{"class":90},[52,27701,27702,27705],{"class":54,"line":97},[52,27703,27704],{"class":90},"  --teleop.port=\u002Fdev\u002FttyACM0",[52,27706,27627],{"class":90},[52,27708,27709],{"class":54,"line":112},[52,27710,27711],{"class":90},"  --teleop.id=my_awesome_leader_arm\n",[52,27713,27714],{"class":54,"line":119},[52,27715,116],{"emptyLinePlaceholder":115},[52,27717,27718],{"class":54,"line":130},[52,27719,27720],{"class":332},"# 从臂校准\n",[52,27722,27723,27725],{"class":54,"line":136},[52,27724,27691],{"class":58},[52,27726,27627],{"class":90},[52,27728,27729,27731],{"class":54,"line":141},[52,27730,27659],{"class":90},[52,27732,27627],{"class":90},[52,27734,27735,27738],{"class":54,"line":146},[52,27736,27737],{"class":90},"  --robot.port=\u002Fdev\u002FttyACM1",[52,27739,27627],{"class":90},[52,27741,27742],{"class":54,"line":152},[52,27743,27744],{"class":90},"  --robot.id=my_awesome_follower_arm\n",[3015,27746,27747],{},"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":28,"searchDepth":69,"depth":69,"links":27749},[27750,27751],{"id":27599,"depth":69,"text":27600},{"id":27672,"depth":69,"text":27673},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":27590,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27758,"title":27759,"body":27760,"description":3046,"extension":3047,"meta":27951,"navigation":115,"path":27952,"seo":27953,"stem":27954,"__hash__":27955},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27761,"toc":27947},[27762,27765,27769,27816,27820,27833,27896,27899,27944],[10,27763,27759],{"id":27764},"_4-遥操与相机接入",[14,27766,27768],{"id":27767},"_41-不带相机遥操","4.1 不带相机遥操",[19,27770,27772],{"className":26774,"code":27771,"language":26776,"meta":28,"style":28},"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",[26,27773,27774,27781,27787,27793,27800,27806,27812],{"__ignoreMap":28},[52,27775,27776,27779],{"class":54,"line":55},[52,27777,27778],{"class":58},"lerobot-teleoperate",[52,27780,27627],{"class":90},[52,27782,27783,27785],{"class":54,"line":69},[52,27784,27659],{"class":90},[52,27786,27627],{"class":90},[52,27788,27789,27791],{"class":54,"line":82},[52,27790,27737],{"class":90},[52,27792,27627],{"class":90},[52,27794,27795,27798],{"class":54,"line":97},[52,27796,27797],{"class":90},"  --robot.id=my_awesome_follower_arm",[52,27799,27627],{"class":90},[52,27801,27802,27804],{"class":54,"line":112},[52,27803,27632],{"class":90},[52,27805,27627],{"class":90},[52,27807,27808,27810],{"class":54,"line":119},[52,27809,27704],{"class":90},[52,27811,27627],{"class":90},[52,27813,27814],{"class":54,"line":130},[52,27815,27711],{"class":90},[14,27817,27819],{"id":27818},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[19,27821,27823],{"className":26774,"code":27822,"language":26776,"meta":28,"style":28},"lerobot-find-cameras opencv\n",[26,27824,27825],{"__ignoreMap":28},[52,27826,27827,27830],{"class":54,"line":55},[52,27828,27829],{"class":58},"lerobot-find-cameras",[52,27831,27832],{"class":62}," opencv\n",[19,27834,27836],{"className":26774,"code":27835,"language":26776,"meta":28,"style":28},"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",[26,27837,27838,27844,27850,27856,27862,27872,27878,27884,27891],{"__ignoreMap":28},[52,27839,27840,27842],{"class":54,"line":55},[52,27841,27778],{"class":58},[52,27843,27627],{"class":90},[52,27845,27846,27848],{"class":54,"line":69},[52,27847,27659],{"class":90},[52,27849,27627],{"class":90},[52,27851,27852,27854],{"class":54,"line":82},[52,27853,27737],{"class":90},[52,27855,27627],{"class":90},[52,27857,27858,27860],{"class":54,"line":97},[52,27859,27797],{"class":90},[52,27861,27627],{"class":90},[52,27863,27864,27867,27870],{"class":54,"line":112},[52,27865,27866],{"class":90},"  --robot.cameras=",[52,27868,27869],{"class":62},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[52,27871,27627],{"class":90},[52,27873,27874,27876],{"class":54,"line":119},[52,27875,27632],{"class":90},[52,27877,27627],{"class":90},[52,27879,27880,27882],{"class":54,"line":130},[52,27881,27704],{"class":90},[52,27883,27627],{"class":90},[52,27885,27886,27889],{"class":54,"line":136},[52,27887,27888],{"class":90},"  --teleop.id=my_awesome_leader_arm",[52,27890,27627],{"class":90},[52,27892,27893],{"class":54,"line":141},[52,27894,27895],{"class":90},"  --display_data=true\n",[274,27897,27898],{},"相机参数说明：",[4118,27900,27901,27907,27913,27922,27932,27938],{},[1073,27902,27903,27906],{},[26,27904,27905],{},"front","：相机名称。",[1073,27908,27909,27912],{},[26,27910,27911],{},"type: opencv","：相机驱动类型。",[1073,27914,27915,27918,27919,27513],{},[26,27916,27917],{},"index_or_path","：设备编号或设备路径（如 ",[26,27920,27921],{},"\u002Fdev\u002Fvideo4",[1073,27923,27924,27927,27928,27931],{},[26,27925,27926],{},"width"," \u002F ",[26,27929,27930],{},"height","：图像分辨率。",[1073,27933,27934,27937],{},[26,27935,27936],{},"fps","：采样帧率。",[1073,27939,27940,27943],{},[26,27941,27942],{},"--display_data=true","：启用实时可视化。",[3015,27945,27946],{},"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":28,"searchDepth":69,"depth":69,"links":27948},[27949,27950],{"id":27767,"depth":69,"text":27768},{"id":27818,"depth":69,"text":27819},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27759,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27957,"title":27958,"body":27959,"description":3046,"extension":3047,"meta":28128,"navigation":115,"path":28129,"seo":28130,"stem":28131,"__hash__":28132},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27960,"toc":28123},[27961,27965,27969,27974,27979,27982,28023,28029,28033,28080,28085,28089,28092,28100,28105,28110,28115,28120],[10,27962,27964],{"id":27963},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27966,27968],{"id":27967},"_51-生成访问令牌","5.1 生成访问令牌",[274,27970,27971],{},[280,27972],{"alt":28,"src":27973},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[274,27975,27976],{},[280,27977],{"alt":28,"src":27978},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[274,27980,27981],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[19,27983,27985],{"className":26774,"code":27984,"language":26776,"meta":28,"style":28},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[26,27986,27987,27999],{"__ignoreMap":28},[52,27988,27989,27991,27994,27996],{"class":54,"line":55},[52,27990,2093],{"class":160},[52,27992,27993],{"class":622}," HF_TOKEN",[52,27995,2099],{"class":160},[52,27997,27998],{"class":62},"\"your_huggingface_token\"\n",[52,28000,28001,28004,28007,28010,28013,28015,28018,28020],{"class":54,"line":69},[52,28002,28003],{"class":58},"hf",[52,28005,28006],{"class":62}," auth",[52,28008,28009],{"class":62}," login",[52,28011,28012],{"class":90}," --token",[52,28014,12680],{"class":62},[52,28016,28017],{"class":622},"$HF_TOKEN",[52,28019,3364],{"class":62},[52,28021,28022],{"class":90}," --add-to-git-credential\n",[274,28024,28025,28028],{},[26,28026,28027],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,28030,28032],{"id":28031},"_52-验证登录","5.2 验证登录",[19,28034,28036],{"className":26774,"code":28035,"language":26776,"meta":28,"style":28},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[26,28037,28038,28067],{"__ignoreMap":28},[52,28039,28040,28043,28045,28047,28049,28051,28054,28056,28059,28062,28065],{"class":54,"line":55},[52,28041,28042],{"class":622},"HF_USER",[52,28044,2099],{"class":160},[52,28046,2946],{"class":622},[52,28048,28003],{"class":58},[52,28050,28006],{"class":62},[52,28052,28053],{"class":62}," whoami",[52,28055,2379],{"class":160},[52,28057,28058],{"class":58}," head",[52,28060,28061],{"class":90}," -n",[52,28063,28064],{"class":90}," 1",[52,28066,170],{"class":622},[52,28068,28069,28072,28074,28077],{"class":54,"line":69},[52,28070,28071],{"class":90},"echo",[52,28073,12680],{"class":62},[52,28075,28076],{"class":622},"$HF_USER",[52,28078,28079],{"class":62},"\"\n",[274,28081,28082],{},[280,28083],{"alt":28,"src":28084},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,28086,28088],{"id":28087},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[274,28090,28091],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[4118,28093,28094,28097],{},[1073,28095,28096],{},"Dataset Repo（用于上传演示数据）",[1073,28098,28099],{},"Model Repo（用于上传训练后的 ACT 权重）",[274,28101,28102],{},[280,28103],{"alt":28,"src":28104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[274,28106,28107],{},[280,28108],{"alt":28,"src":28109},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[274,28111,28112],{},[280,28113],{"alt":28,"src":28114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[274,28116,28117],{},[280,28118],{"alt":28,"src":28119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[3015,28121,28122],{},"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":28,"searchDepth":69,"depth":69,"links":28124},[28125,28126,28127],{"id":27967,"depth":69,"text":27968},{"id":28031,"depth":69,"text":28032},{"id":28087,"depth":69,"text":28088},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27958,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":28134,"title":28135,"body":28136,"description":3046,"extension":3047,"meta":28332,"navigation":115,"path":28333,"seo":28334,"stem":28335,"__hash__":28336},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":28137,"toc":28327},[28138,28142,28146,28242,28250,28255,28259,28274,28277,28281,28324],[10,28139,28141],{"id":28140},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,28143,28145],{"id":28144},"_61-录制示教数据","6.1 录制示教数据",[19,28147,28149],{"className":26774,"code":28148,"language":26776,"meta":28,"style":28},"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",[26,28150,28151,28158,28164,28170,28176,28185,28191,28197,28203,28210,28220,28227,28237],{"__ignoreMap":28},[52,28152,28153,28156],{"class":54,"line":55},[52,28154,28155],{"class":58},"lerobot-record",[52,28157,27627],{"class":90},[52,28159,28160,28162],{"class":54,"line":69},[52,28161,27659],{"class":90},[52,28163,27627],{"class":90},[52,28165,28166,28168],{"class":54,"line":82},[52,28167,27737],{"class":90},[52,28169,27627],{"class":90},[52,28171,28172,28174],{"class":54,"line":97},[52,28173,27797],{"class":90},[52,28175,27627],{"class":90},[52,28177,28178,28180,28183],{"class":54,"line":112},[52,28179,27866],{"class":90},[52,28181,28182],{"class":62},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[52,28184,27627],{"class":90},[52,28186,28187,28189],{"class":54,"line":119},[52,28188,27632],{"class":90},[52,28190,27627],{"class":90},[52,28192,28193,28195],{"class":54,"line":130},[52,28194,27704],{"class":90},[52,28196,27627],{"class":90},[52,28198,28199,28201],{"class":54,"line":136},[52,28200,27888],{"class":90},[52,28202,27627],{"class":90},[52,28204,28205,28208],{"class":54,"line":141},[52,28206,28207],{"class":90},"  --display_data=true",[52,28209,27627],{"class":90},[52,28211,28212,28215,28218],{"class":54,"line":146},[52,28213,28214],{"class":90},"  --dataset.repo_id=",[52,28216,28217],{"class":62},"\"Embodied-AI-6\u002Fso101_test\"",[52,28219,27627],{"class":90},[52,28221,28222,28225],{"class":54,"line":152},[52,28223,28224],{"class":90},"  --dataset.num_episodes=10",[52,28226,27627],{"class":90},[52,28228,28229,28232,28235],{"class":54,"line":157},[52,28230,28231],{"class":90},"  --dataset.single_task=",[52,28233,28234],{"class":62},"\"Grab the green cube\"",[52,28236,27627],{"class":90},[52,28238,28239],{"class":54,"line":173},[52,28240,28241],{"class":90},"  --resume=true\n",[4118,28243,28244],{},[1073,28245,28246,28249],{},[26,28247,28248],{},"--resume=true","：已有同一数据集时继续追加 episode。",[274,28251,28252],{},[280,28253],{"alt":28,"src":28254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,28256,28258],{"id":28257},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[19,28260,28262],{"className":26774,"code":28261,"language":26776,"meta":28,"style":28},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[26,28263,28264],{"__ignoreMap":28},[52,28265,28266,28269,28271],{"class":54,"line":55},[52,28267,28268],{"class":58},"rm",[52,28270,91],{"class":90},[52,28272,28273],{"class":62}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[274,28275,28276],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,28278,28280],{"id":28279},"_63-回放指定-episode","6.3 回放指定 episode",[19,28282,28284],{"className":26774,"code":28283,"language":26776,"meta":28,"style":28},"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",[26,28285,28286,28293,28299,28305,28311,28319],{"__ignoreMap":28},[52,28287,28288,28291],{"class":54,"line":55},[52,28289,28290],{"class":58},"lerobot-replay",[52,28292,27627],{"class":90},[52,28294,28295,28297],{"class":54,"line":69},[52,28296,27659],{"class":90},[52,28298,27627],{"class":90},[52,28300,28301,28303],{"class":54,"line":82},[52,28302,27737],{"class":90},[52,28304,27627],{"class":90},[52,28306,28307,28309],{"class":54,"line":97},[52,28308,27797],{"class":90},[52,28310,27627],{"class":90},[52,28312,28313,28315,28317],{"class":54,"line":112},[52,28314,28214],{"class":90},[52,28316,28217],{"class":62},[52,28318,27627],{"class":90},[52,28320,28321],{"class":54,"line":119},[52,28322,28323],{"class":90},"  --dataset.episode=0\n",[3015,28325,28326],{},"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":28,"searchDepth":69,"depth":69,"links":28328},[28329,28330,28331],{"id":28144,"depth":69,"text":28145},{"id":28257,"depth":69,"text":28258},{"id":28279,"depth":69,"text":28280},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":28135,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":28338,"title":28339,"body":28340,"description":3046,"extension":3047,"meta":28468,"navigation":115,"path":28469,"seo":28470,"stem":28471,"__hash__":28472},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":28341,"toc":28466},[28342,28346,28409,28412,28459,28464],[10,28343,28345],{"id":28344},"_7-act-模型训练","7. ACT 模型训练",[19,28347,28349],{"className":26774,"code":28348,"language":26776,"meta":28,"style":28},"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",[26,28350,28351,28358,28366,28373,28380,28387,28394,28401],{"__ignoreMap":28},[52,28352,28353,28356],{"class":54,"line":55},[52,28354,28355],{"class":58},"lerobot-train",[52,28357,27627],{"class":90},[52,28359,28360,28362,28364],{"class":54,"line":69},[52,28361,28214],{"class":90},[52,28363,28217],{"class":62},[52,28365,27627],{"class":90},[52,28367,28368,28371],{"class":54,"line":82},[52,28369,28370],{"class":90},"  --policy.type=act",[52,28372,27627],{"class":90},[52,28374,28375,28378],{"class":54,"line":97},[52,28376,28377],{"class":90},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[52,28379,27627],{"class":90},[52,28381,28382,28385],{"class":54,"line":112},[52,28383,28384],{"class":90},"  --job_name=act_so101_test",[52,28386,27627],{"class":90},[52,28388,28389,28392],{"class":54,"line":119},[52,28390,28391],{"class":90},"  --policy.device=cuda",[52,28393,27627],{"class":90},[52,28395,28396,28399],{"class":54,"line":130},[52,28397,28398],{"class":90},"  --wandb.enable=false",[52,28400,27627],{"class":90},[52,28402,28403,28406],{"class":54,"line":136},[52,28404,28405],{"class":90},"  --policy.repo_id=",[52,28407,28408],{"class":62},"\"Embodied-AI-6\u002Flerobot_new\"\n",[274,28410,28411],{},"参数说明：",[4118,28413,28414,28420,28426,28432,28438,28447,28453],{},[1073,28415,28416,28419],{},[26,28417,28418],{},"--dataset.repo_id","：训练数据集仓库。",[1073,28421,28422,28425],{},[26,28423,28424],{},"--policy.type=act","：策略模型类型为 ACT。",[1073,28427,28428,28431],{},[26,28429,28430],{},"--output_dir","：本地训练输出目录。",[1073,28433,28434,28437],{},[26,28435,28436],{},"--job_name","：训练任务名称。",[1073,28439,28440,28443,28444,27513],{},[26,28441,28442],{},"--policy.device","：训练设备（如 ",[26,28445,28446],{},"cuda",[1073,28448,28449,28452],{},[26,28450,28451],{},"--wandb.enable","：是否启用 WandB 可视化。",[1073,28454,28455,28458],{},[26,28456,28457],{},"--policy.repo_id","：训练后模型推送目标仓库。",[274,28460,28461],{},[280,28462],{"alt":28,"src":28463},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[3015,28465,28326],{},{"title":28,"searchDepth":69,"depth":69,"links":28467},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":28339,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":28474,"title":28475,"body":28476,"description":3046,"extension":3047,"meta":28563,"navigation":115,"path":28564,"seo":28565,"stem":28566,"__hash__":28567},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":28477,"toc":28561},[28478,28481,28484,28551,28559],[10,28479,28475],{"id":28480},"_8-策略部署与自动采集",[274,28482,28483],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[19,28485,28487],{"className":26774,"code":28486,"language":26776,"meta":28,"style":28},"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",[26,28488,28489,28495,28501,28507,28515,28521,28528,28536,28544],{"__ignoreMap":28},[52,28490,28491,28493],{"class":54,"line":55},[52,28492,28155],{"class":58},[52,28494,27627],{"class":90},[52,28496,28497,28499],{"class":54,"line":69},[52,28498,27659],{"class":90},[52,28500,27627],{"class":90},[52,28502,28503,28505],{"class":54,"line":82},[52,28504,27737],{"class":90},[52,28506,27627],{"class":90},[52,28508,28509,28511,28513],{"class":54,"line":97},[52,28510,27866],{"class":90},[52,28512,28182],{"class":62},[52,28514,27627],{"class":90},[52,28516,28517,28519],{"class":54,"line":112},[52,28518,27797],{"class":90},[52,28520,27627],{"class":90},[52,28522,28523,28526],{"class":54,"line":119},[52,28524,28525],{"class":90},"  --display_data=false",[52,28527,27627],{"class":90},[52,28529,28530,28532,28534],{"class":54,"line":130},[52,28531,28214],{"class":90},[52,28533,28217],{"class":62},[52,28535,27627],{"class":90},[52,28537,28538,28540,28542],{"class":54,"line":136},[52,28539,28231],{"class":90},[52,28541,28234],{"class":62},[52,28543,27627],{"class":90},[52,28545,28546,28549],{"class":54,"line":141},[52,28547,28548],{"class":90},"  --policy.path=",[52,28550,28408],{"class":62},[4118,28552,28553],{},[1073,28554,28555,28558],{},[26,28556,28557],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[3015,28560,28326],{},{"title":28,"searchDepth":69,"depth":69,"links":28562},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":28475,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":28569,"title":28570,"body":28571,"description":3046,"extension":3047,"meta":28600,"navigation":115,"path":28601,"seo":28602,"stem":28603,"__hash__":28604},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":28572,"toc":28598},[28573,28577,28580,28586,28589,28595],[10,28574,28576],{"id":28575},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[274,28578,28579],{},"项目地址：",[274,28581,28582],{},[300,28583,28584],{"href":28584,"rel":28585},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[304],[274,28587,28588],{},"参考教程：",[274,28590,28591],{},[300,28592,28593],{"href":28593,"rel":28594},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[304],[274,28596,28597],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":28,"searchDepth":69,"depth":69,"links":28599},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":28570,"description":3046},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":28606,"title":28607,"body":28608,"description":28612,"extension":3047,"meta":28613,"navigation":115,"path":28614,"seo":28615,"stem":28616,"__hash__":28617},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":28609,"toc":28610},[],{"title":28,"searchDepth":69,"depth":69,"links":28611},[],"act复现",{"category":26331},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":28607,"description":28612},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":28619,"title":28620,"body":28621,"description":28,"extension":3047,"meta":28923,"navigation":115,"path":28924,"seo":28925,"stem":28926,"__hash__":28927},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":28622,"toc":28915},[28623,28626,28630,28640,28647,28654,28657,28664,28667,28670,28674,28686,28690,28736,28739,28742,28745,28748,28751,28755,28793,28799,28803,28857,28862,28865,28868,28873,28876,28881,28884,28887,28891,28894,28897,28901],[10,28624,28620],{"id":28625},"_1简介",[30,28627,28629],{"id":28628},"_11什么是-docker","1.1什么是 Docker？",[274,28631,28632,28633,28636,28637],{},"Docker 是一个开源的 ",[538,28634,28635],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[538,28638,28639],{},"一次构建，到处运行。",[274,28641,28642,28643,28646],{},"“ ",[538,28644,28645],{},"一次构建，到处运行"," ”也就是说：",[1070,28648,28649],{},[1073,28650,28651],{},[538,28652,28653],{},"之前：",[274,28655,28656],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1070,28658,28659],{},[1073,28660,28661],{},[538,28662,28663],{},"使用docker后：",[274,28665,28666],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[274,28668,28669],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[30,28671,28673],{"id":28672},"_12它是怎么工作的","1.2.它是怎么工作的？",[4118,28675,28676,28679],{},[1073,28677,28678],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[1073,28680,28681,28682,28685],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[538,28683,28684],{},"无论在哪运行都一样稳定"," 。",[30,28687,28689],{"id":28688},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[3253,28691,28692,28702],{},[3256,28693,28694],{},[3259,28695,28696,28699],{},[3262,28697,28698],{"align":26688},"概念",[3262,28700,28701],{"align":26688},"解释",[3299,28703,28704,28712,28720,28728],{},[3259,28705,28706,28709],{},[3304,28707,28708],{"align":26688},"镜像",[3304,28710,28711],{"align":26688},"Image，运行容器的模板，像是一个应用快照",[3259,28713,28714,28717],{},[3304,28715,28716],{"align":26688},"容器",[3304,28718,28719],{"align":26688},"Container，运行中的镜像实例，有自己的文件系统、网络等",[3259,28721,28722,28725],{},[3304,28723,28724],{"align":26688},"Dockerfile",[3304,28726,28727],{"align":26688},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[3259,28729,28730,28733],{},[3304,28731,28732],{"align":26688},"仓库",[3304,28734,28735],{"align":26688},"Registry，存放镜像的地方，比如 Docker Hub",[274,28737,28738],{},"抽象化理解:",[274,28740,28741],{},"Docker镜像≈C++类",[274,28743,28744],{},"Docker容器≈C++类实例(即对象)",[274,28746,28747],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[274,28749,28750],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[30,28752,28754],{"id":28753},"_14类比理解","1.4.类比理解",[3253,28756,28757,28767],{},[3256,28758,28759],{},[3259,28760,28761,28764],{},[3262,28762,28763],{"align":26688},"传统部署",[3262,28765,28766],{"align":26688},"Docker部署",[3299,28768,28769,28777,28785],{},[3259,28770,28771,28774],{},[3304,28772,28773],{"align":26688},"手动安装依赖、调试版本不一致问题",[3304,28775,28776],{"align":26688},"一次打包环境和代码",[3259,28778,28779,28782],{},[3304,28780,28781],{"align":26688},"程序“裸奔”跑在系统上",[3304,28783,28784],{"align":26688},"程序“穿着容器”隔离运行",[3259,28786,28787,28790],{},[3304,28788,28789],{"align":26688},"容易“在我电脑上能跑”",[3304,28791,28792],{"align":26688},"保证“无论在哪都能跑”",[274,28794,28795,28796],{},"就像快递包裹： ",[538,28797,28798],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[30,28800,28802],{"id":28801},"_15docker-的核心优势","1.5.Docker 的核心优势",[3253,28804,28805,28815],{},[3256,28806,28807],{},[3259,28808,28809,28812],{},[3262,28810,28811],{"align":26688},"优势",[3262,28813,28814],{"align":26688},"说明",[3299,28816,28817,28825,28833,28841,28849],{},[3259,28818,28819,28822],{},[3304,28820,28821],{"align":26688},"轻量级",[3304,28823,28824],{"align":26688},"基于系统内核共享，启动速度快，占资源少",[3259,28826,28827,28830],{},[3304,28828,28829],{"align":26688},"跨平台",[3304,28831,28832],{"align":26688},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[3259,28834,28835,28838],{},[3304,28836,28837],{"align":26688},"易于迁移部署",[3304,28839,28840],{"align":26688},"应用和环境一起封装，不怕依赖不一致",[3259,28842,28843,28846],{},[3304,28844,28845],{"align":26688},"易于版本控制",[3304,28847,28848],{"align":26688},"镜像版本可控，支持回滚",[3259,28850,28851,28854],{},[3304,28852,28853],{"align":26688},"生态丰富",[3304,28855,28856],{"align":26688},"Docker Hub 上有成千上万的现成镜像可用",[1070,28858,28859],{},[1073,28860,28861],{},"在Linux上可以几乎实现无性能损失。",[274,28863,28864],{},"docker里的发行版和本机共用Linux内核。",[274,28866,28867],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1070,28869,28870],{},[1073,28871,28872],{},"可以快速部署在绝大多数Linux发行版",[274,28874,28875],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1070,28877,28878],{},[1073,28879,28880],{},"配置环境简单",[274,28882,28883],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[274,28885,28886],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1070,28888,28889],{},[1073,28890,28853],{},[274,28892,28893],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[274,28895,28896],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[30,28898,28900],{"id":28899},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[4118,28902,28903,28906,28909,28912],{},[1073,28904,28905],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[1073,28907,28908],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[1073,28910,28911],{},"微服务架构：每个服务一个容器，灵活组合",[1073,28913,28914],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":28,"searchDepth":69,"depth":69,"links":28916},[28917,28918,28919,28920,28921,28922],{"id":28628,"depth":82,"text":28629},{"id":28672,"depth":82,"text":28673},{"id":28688,"depth":82,"text":28689},{"id":28753,"depth":82,"text":28754},{"id":28801,"depth":82,"text":28802},{"id":28899,"depth":82,"text":28900},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":28620,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28929,"title":28930,"body":28931,"description":28,"extension":3047,"meta":29656,"navigation":115,"path":29657,"seo":29658,"stem":29659,"__hash__":29660},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28932,"toc":29651},[28933,28936,28940,28943,28946,28952,28958,28962,28971,28974,29029,29032,29083,29086,29169,29172,29208,29212,29223,29235,29242,29245,29324,29327,29376,29379,29402,29406,29413,29416,29432,29438,29441,29456,29462,29465,29481,29495,29501,29521,29527,29530,29542,29548,29551,29565,29571,29574,29593,29598,29601,29604,29608,29611,29614,29617,29624,29627,29630,29633,29638,29643,29648],[10,28934,28930],{"id":28935},"_2安装docker",[30,28937,28939],{"id":28938},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[274,28941,28942],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[274,28944,28945],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[274,28947,28948],{},[300,28949,28950],{"href":28950,"rel":28951},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[304],[274,28953,28954],{},[300,28955,28956],{"href":28956,"rel":28957},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[304],[1486,28959,28961],{"id":28960},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[274,28963,28964,28965,28970],{},"以下内容根据 ",[300,28966,28969],{"href":28967,"rel":28968},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[304],"官方文档"," 修改而来。",[274,28972,28973],{},"如果你过去安装过 docker，先删掉：",[19,28975,28977],{"className":26774,"code":28976,"language":26776,"meta":28,"style":28},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[26,28978,28979],{"__ignoreMap":28},[52,28980,28981,28983,28986,28989,28992,28995,28998,29001,29004,29007,29010,29013,29016,29019,29021,29023,29026],{"class":54,"line":55},[52,28982,5985],{"class":160},[52,28984,28985],{"class":622}," pkg ",[52,28987,28988],{"class":160},"in",[52,28990,28991],{"class":62}," docker.io",[52,28993,28994],{"class":62}," docker-doc",[52,28996,28997],{"class":62}," docker-compose",[52,28999,29000],{"class":62}," docker-compose-v2",[52,29002,29003],{"class":62}," podman-docker",[52,29005,29006],{"class":62}," containerd",[52,29008,29009],{"class":62}," runc",[52,29011,29012],{"class":622},"; ",[52,29014,29015],{"class":160},"do",[52,29017,29018],{"class":58}," sudo",[52,29020,1344],{"class":62},[52,29022,561],{"class":62},[52,29024,29025],{"class":622}," $pkg; ",[52,29027,29028],{"class":160},"done\n",[274,29030,29031],{},"首先安装依赖和GPG：",[19,29033,29037],{"className":29034,"code":29035,"language":29036,"meta":28,"style":28},"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",[26,29038,29039,29044,29049,29054,29059,29064,29069,29073,29078],{"__ignoreMap":28},[52,29040,29041],{"class":54,"line":55},[52,29042,29043],{},"# Add Docker's official GPG key:\n",[52,29045,29046],{"class":54,"line":69},[52,29047,29048],{},"sudo apt-get update\n",[52,29050,29051],{"class":54,"line":82},[52,29052,29053],{},"sudo apt-get install ca-certificates curl\n",[52,29055,29056],{"class":54,"line":97},[52,29057,29058],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[52,29060,29061],{"class":54,"line":112},[52,29062,29063],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[52,29065,29066],{"class":54,"line":119},[52,29067,29068],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[52,29070,29071],{"class":54,"line":130},[52,29072,116],{"emptyLinePlaceholder":115},[52,29074,29075],{"class":54,"line":136},[52,29076,29077],{},"# 如果上面这行报错就弄下面这行\n",[52,29079,29080],{"class":54,"line":141},[52,29081,29082],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[274,29084,29085],{},"信任 Docker 的 GPG 公钥并添加仓库：",[19,29087,29089],{"className":26774,"code":29088,"language":26776,"meta":28,"style":28},"# 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",[26,29090,29091,29096,29102,29119,29152],{"__ignoreMap":28},[52,29092,29093],{"class":54,"line":55},[52,29094,29095],{"class":332},"# Add the repository to Apt sources:\n",[52,29097,29098,29100],{"class":54,"line":69},[52,29099,28071],{"class":90},[52,29101,27627],{"class":90},[52,29103,29104,29107,29110,29113,29116],{"class":54,"line":82},[52,29105,29106],{"class":62},"  \"deb [arch=$(",[52,29108,29109],{"class":58},"dpkg",[52,29111,29112],{"class":90}," --print-architecture",[52,29114,29115],{"class":62},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[52,29117,29118],{"class":90},"\\\n",[52,29120,29121,29124,29126,29128,29131,29134,29136,29138,29141,29143,29145,29148,29150],{"class":54,"line":97},[52,29122,29123],{"class":62},"  \"",[52,29125,2946],{"class":622},[52,29127,3670],{"class":90},[52,29129,29130],{"class":62}," \u002Fetc\u002Fos-release",[52,29132,29133],{"class":622}," && ",[52,29135,28071],{"class":90},[52,29137,12680],{"class":62},[52,29139,29140],{"class":622},"$VERSION_CODENAME",[52,29142,3364],{"class":62},[52,29144,3542],{"class":622},[52,29146,29147],{"class":62},"\" stable\"",[52,29149,2379],{"class":160},[52,29151,27627],{"class":90},[52,29153,29154,29157,29160,29163,29166],{"class":54,"line":112},[52,29155,29156],{"class":58},"  sudo",[52,29158,29159],{"class":62}," tee",[52,29161,29162],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[52,29164,29165],{"class":160}," >",[52,29167,29168],{"class":62}," \u002Fdev\u002Fnull\n",[274,29170,29171],{},"最后安装",[19,29173,29175],{"className":26774,"code":29174,"language":26776,"meta":28,"style":28},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,29176,29177,29185],{"__ignoreMap":28},[52,29178,29179,29181,29183],{"class":54,"line":55},[52,29180,59],{"class":58},[52,29182,1344],{"class":62},[52,29184,66],{"class":62},[52,29186,29187,29189,29191,29193,29196,29199,29202,29205],{"class":54,"line":69},[52,29188,59],{"class":58},[52,29190,1344],{"class":62},[52,29192,76],{"class":62},[52,29194,29195],{"class":62}," docker-ce",[52,29197,29198],{"class":62}," docker-ce-cli",[52,29200,29201],{"class":62}," containerd.io",[52,29203,29204],{"class":62}," docker-buildx-plugin",[52,29206,29207],{"class":62}," docker-compose-plugin\n",[1486,29209,29211],{"id":29210},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[274,29213,29214,29215,29218,29219,29222],{},"查看自己自己包管理工具版本（dnf是 ",[538,29216,29217],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[538,29220,29221],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[19,29224,29226],{"className":26774,"code":29225,"language":26776,"meta":28,"style":28},"dnf --version\n",[26,29227,29228],{"__ignoreMap":28},[52,29229,29230,29233],{"class":54,"line":55},[52,29231,29232],{"class":58},"dnf",[52,29234,1285],{"class":90},[274,29236,28964,29237,29241],{},[300,29238,28969],{"href":29239,"rel":29240},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[304]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[274,29243,29244],{},"如果你之前安装过 docker，请先删掉",[19,29246,29248],{"className":26774,"code":29247,"language":26776,"meta":28,"style":28},"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",[26,29249,29250,29263,29270,29277,29284,29291,29298,29305,29312,29319],{"__ignoreMap":28},[52,29251,29252,29254,29256,29258,29261],{"class":54,"line":55},[52,29253,59],{"class":58},[52,29255,2938],{"class":62},[52,29257,561],{"class":62},[52,29259,29260],{"class":62}," docker",[52,29262,27627],{"class":90},[52,29264,29265,29268],{"class":54,"line":69},[52,29266,29267],{"class":62},"                  docker-client",[52,29269,27627],{"class":90},[52,29271,29272,29275],{"class":54,"line":82},[52,29273,29274],{"class":62},"                  docker-client-latest",[52,29276,27627],{"class":90},[52,29278,29279,29282],{"class":54,"line":97},[52,29280,29281],{"class":62},"                  docker-common",[52,29283,27627],{"class":90},[52,29285,29286,29289],{"class":54,"line":112},[52,29287,29288],{"class":62},"                  docker-latest",[52,29290,27627],{"class":90},[52,29292,29293,29296],{"class":54,"line":119},[52,29294,29295],{"class":62},"                  docker-latest-logrotate",[52,29297,27627],{"class":90},[52,29299,29300,29303],{"class":54,"line":130},[52,29301,29302],{"class":62},"                  docker-logrotate",[52,29304,27627],{"class":90},[52,29306,29307,29310],{"class":54,"line":136},[52,29308,29309],{"class":62},"                  docker-selinux",[52,29311,27627],{"class":90},[52,29313,29314,29317],{"class":54,"line":141},[52,29315,29316],{"class":62},"                  docker-engine-selinux",[52,29318,27627],{"class":90},[52,29320,29321],{"class":54,"line":146},[52,29322,29323],{"class":62},"                  docker-engine\n",[274,29325,29326],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[19,29328,29330],{"className":26774,"code":29329,"language":26776,"meta":28,"style":28},"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",[26,29331,29332,29346,29361],{"__ignoreMap":28},[52,29333,29334,29336,29338,29341,29343],{"class":54,"line":55},[52,29335,59],{"class":58},[52,29337,2938],{"class":62},[52,29339,29340],{"class":90}," -y",[52,29342,76],{"class":62},[52,29344,29345],{"class":62}," dnf-plugins-core\n",[52,29347,29348,29350,29352,29355,29358],{"class":54,"line":69},[52,29349,59],{"class":58},[52,29351,2938],{"class":62},[52,29353,29354],{"class":62}," config-manager",[52,29356,29357],{"class":62}," addrepo",[52,29359,29360],{"class":90}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[52,29362,29363,29365,29368,29370,29373],{"class":54,"line":82},[52,29364,59],{"class":58},[52,29366,29367],{"class":62}," sed",[52,29369,1374],{"class":90},[52,29371,29372],{"class":62}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[52,29374,29375],{"class":62}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[274,29377,29378],{},"最后安装：",[19,29380,29382],{"className":26774,"code":29381,"language":26776,"meta":28,"style":28},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[26,29383,29384],{"__ignoreMap":28},[52,29385,29386,29388,29390,29392,29394,29396,29398,29400],{"class":54,"line":55},[52,29387,59],{"class":58},[52,29389,2938],{"class":62},[52,29391,76],{"class":62},[52,29393,29195],{"class":62},[52,29395,29198],{"class":62},[52,29397,29201],{"class":62},[52,29399,29204],{"class":62},[52,29401,29207],{"class":62},[30,29403,29405],{"id":29404},"_22配置环境","2.2.配置环境",[1486,29407,29409,29412],{"id":29408},"_221检查-docker-服务状态",[538,29410,29411],{},"2.2.1.检查 Docker 服务状态"," ：",[274,29414,29415],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[19,29417,29419],{"className":26774,"code":29418,"language":26776,"meta":28,"style":28},"systemctl status docker\n",[26,29420,29421],{"__ignoreMap":28},[52,29422,29423,29426,29429],{"class":54,"line":55},[52,29424,29425],{"class":58},"systemctl",[52,29427,29428],{"class":62}," status",[52,29430,29431],{"class":62}," docker\n",[1486,29433,29435,29412],{"id":29434},"_222启动-docker-服务",[538,29436,29437],{},"2.2.2.启动 Docker 服务",[274,29439,29440],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[19,29442,29444],{"className":26774,"code":29443,"language":26776,"meta":28,"style":28},"sudo systemctl start docker\n",[26,29445,29446],{"__ignoreMap":28},[52,29447,29448,29450,29452,29454],{"class":54,"line":55},[52,29449,59],{"class":58},[52,29451,470],{"class":62},[52,29453,7143],{"class":62},[52,29455,29431],{"class":62},[1486,29457,29459,29412],{"id":29458},"_223设置-docker-开机自启",[538,29460,29461],{},"2.2.3.设置 Docker 开机自启",[274,29463,29464],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[19,29466,29468],{"className":26774,"code":29467,"language":26776,"meta":28,"style":28},"sudo systemctl enable docker\n",[26,29469,29470],{"__ignoreMap":28},[52,29471,29472,29474,29476,29479],{"class":54,"line":55},[52,29473,59],{"class":58},[52,29475,470],{"class":62},[52,29477,29478],{"class":62}," enable",[52,29480,29431],{"class":62},[1486,29482,29484,16751,29487,16751,29492,29412],{"id":29483},"_224将用户添加到-docker-组",[538,29485,29486],{},"2.2.4.将用户添加到",[538,29488,29489],{},[26,29490,29491],{},"docker",[538,29493,29494],{},"组",[274,29496,29497,29498,29500],{},"使用以下命令将当前用户添加到 ",[26,29499,29491],{}," 组：",[19,29502,29504],{"className":26774,"code":29503,"language":26776,"meta":28,"style":28},"sudo usermod -aG docker $USER\n",[26,29505,29506],{"__ignoreMap":28},[52,29507,29508,29510,29513,29516,29518],{"class":54,"line":55},[52,29509,59],{"class":58},[52,29511,29512],{"class":62}," usermod",[52,29514,29515],{"class":90}," -aG",[52,29517,29260],{"class":62},[52,29519,29520],{"class":622}," $USER\n",[1486,29522,29524,29412],{"id":29523},"_225退出并重新登录",[538,29525,29526],{},"2.2.5.退出并重新登录",[274,29528,29529],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[19,29531,29533],{"className":26774,"code":29532,"language":26776,"meta":28,"style":28},"newgrp docker\n",[26,29534,29535],{"__ignoreMap":28},[52,29536,29537,29540],{"class":54,"line":55},[52,29538,29539],{"class":58},"newgrp",[52,29541,29431],{"class":62},[1486,29543,29545,29412],{"id":29544},"_226重新启动-docker-服务如果需要",[538,29546,29547],{},"2.2.6.重新启动 Docker 服务（如果需要）",[274,29549,29550],{},"确保 Docker 服务正在运行，可以使用以下命令：",[19,29552,29553],{"className":26774,"code":29443,"language":26776,"meta":28,"style":28},[26,29554,29555],{"__ignoreMap":28},[52,29556,29557,29559,29561,29563],{"class":54,"line":55},[52,29558,59],{"class":58},[52,29560,470],{"class":62},[52,29562,7143],{"class":62},[52,29564,29431],{"class":62},[1486,29566,29568,29412],{"id":29567},"_227重启电脑后检查-docker-服务状态",[538,29569,29570],{},"2.2.7.重启电脑后检查 Docker 服务状态",[274,29572,29573],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[19,29575,29577],{"className":26774,"code":29576,"language":26776,"meta":28,"style":28},"sudo reboot\nsystemctl status docker\n",[26,29578,29579,29585],{"__ignoreMap":28},[52,29580,29581,29583],{"class":54,"line":55},[52,29582,59],{"class":58},[52,29584,1764],{"class":62},[52,29586,29587,29589,29591],{"class":54,"line":69},[52,29588,29425],{"class":58},[52,29590,29428],{"class":62},[52,29592,29431],{"class":62},[274,29594,29595],{},[280,29596],{"alt":28,"src":29597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[274,29599,29600],{},"第三行显示enabled说明开机自启动成功",[274,29602,29603],{},"按q退出",[30,29605,29607],{"id":29606},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[274,29609,29610],{},"优先使用linux来使用docker是比较好的",[274,29612,29613],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[274,29615,29616],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[274,29618,29619,29620],{},"官方下载安装:",[300,29621,29622],{"href":29622,"rel":29623},"https:\u002F\u002Fwww.docker.com\u002F",[304],[274,29625,29626],{},"Windows的Docker显卡直通与USB直通:",[274,29628,29629],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[274,29631,29632],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[274,29634,29635],{},[280,29636],{"alt":28,"src":29637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[274,29639,29640],{},[280,29641],{"alt":28,"src":29642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[274,29644,29645],{},[280,29646],{"alt":28,"src":29647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[3015,29649,29650],{},"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":28,"searchDepth":69,"depth":69,"links":29652},[29653,29654,29655],{"id":28938,"depth":82,"text":28939},{"id":29404,"depth":82,"text":29405},{"id":29606,"depth":82,"text":29607},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28930,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":29662,"title":29663,"body":29664,"description":29671,"extension":3047,"meta":30362,"navigation":115,"path":30363,"seo":30364,"stem":30365,"__hash__":30366},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":29665,"toc":30356},[29666,29669,29672,29676,29681,29686,29689,29716,29721,29730,29733,29738,29742,29749,29754,29760,29764,29767,29771,29776,29868,29873,29891,29896,29917,29922,29938,29942,29947,29976,29981,30027,30032,30076,30084,30101,30106,30122,30127,30141,30144,30147,30150,30153,30181,30184,30189,30193,30196,30199,30205,30208,30211,30214,30276,30283,30288,30291,30309,30313,30316,30333,30336,30339,30353],[10,29667,29663],{"id":29668},"_3docker直通",[274,29670,29671],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[30,29673,29675],{"id":29674},"_31usb直通","3.1.USB直通",[274,29677,29678],{},[280,29679],{"alt":28,"src":29680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1070,29682,29683],{},[1073,29684,29685],{},"方法一(不是很推荐新手)：",[274,29687,29688],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[19,29690,29692],{"className":26774,"code":29691,"language":26776,"meta":28,"style":28},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[26,29693,29694,29701,29706],{"__ignoreMap":28},[52,29695,29696,29698],{"class":54,"line":55},[52,29697,2305],{"class":58},[52,29699,29700],{"class":62}," \u002Fdev\n",[52,29702,29703],{"class":54,"line":69},[52,29704,29705],{"class":332},"#例如\n",[52,29707,29708,29711,29713],{"class":54,"line":82},[52,29709,29710],{"class":622},"--device",[52,29712,2099],{"class":160},[52,29714,29715],{"class":62},"\u002Fdev\u002Ftty_USB0\n",[1070,29717,29718],{"start":69},[1073,29719,29720],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[19,29722,29724],{"className":26774,"code":29723,"language":26776,"meta":28,"style":28},"--privileged\n",[26,29725,29726],{"__ignoreMap":28},[52,29727,29728],{"class":54,"line":55},[52,29729,29723],{"class":58},[274,29731,29732],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[274,29734,29735],{},[280,29736],{"alt":28,"src":29737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[30,29739,29741],{"id":29740},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[274,29743,29744,29745,29748],{},"NVIDIA Container Toolkit使用户 ",[538,29746,29747],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[274,29750,29751],{},[280,29752],{"alt":28,"src":29753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[274,29755,29756],{},[300,29757,29758],{"href":29758,"rel":29759},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[304],[1486,29761,29763],{"id":29762},"_321安装","3.2.1.安装",[274,29765,29766],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[1491,29768,29770],{"id":29769},"_3211ubuntu","3.2.1.1.Ubuntu",[1070,29772,29773],{},[1073,29774,29775],{},"配置存储库 并更新",[19,29777,29779],{"className":26774,"code":29778,"language":26776,"meta":28,"style":28},"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",[26,29780,29781,29810,29830,29842,29854,29860],{"__ignoreMap":28},[52,29782,29783,29786,29789,29792,29794,29796,29799,29802,29805,29808],{"class":54,"line":55},[52,29784,29785],{"class":58},"curl",[52,29787,29788],{"class":90}," -fsSL",[52,29790,29791],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[52,29793,2379],{"class":160},[52,29795,29018],{"class":58},[52,29797,29798],{"class":62}," gpg",[52,29800,29801],{"class":90}," --dearmor",[52,29803,29804],{"class":90}," -o",[52,29806,29807],{"class":62}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[52,29809,27627],{"class":90},[52,29811,29812,29815,29817,29820,29823,29826,29828],{"class":54,"line":69},[52,29813,29814],{"class":622},"  && ",[52,29816,29785],{"class":58},[52,29818,29819],{"class":90}," -s",[52,29821,29822],{"class":90}," -L",[52,29824,29825],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[52,29827,2379],{"class":160},[52,29829,27627],{"class":90},[52,29831,29832,29835,29838,29840],{"class":54,"line":82},[52,29833,29834],{"class":58},"    sed",[52,29836,29837],{"class":62}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[52,29839,2379],{"class":160},[52,29841,27627],{"class":90},[52,29843,29844,29847,29849,29852],{"class":54,"line":97},[52,29845,29846],{"class":58},"    sudo",[52,29848,29159],{"class":62},[52,29850,29851],{"class":62}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[52,29853,27627],{"class":90},[52,29855,29856,29858],{"class":54,"line":112},[52,29857,29814],{"class":622},[52,29859,29118],{"class":90},[52,29861,29862,29864,29866],{"class":54,"line":119},[52,29863,29846],{"class":58},[52,29865,1344],{"class":62},[52,29867,66],{"class":62},[1070,29869,29870],{"start":69},[1073,29871,29872],{},"安装nvidia-docker2",[19,29874,29876],{"className":26774,"code":29875,"language":26776,"meta":28,"style":28},"sudo apt-get install -y nvidia-docker2\n",[26,29877,29878],{"__ignoreMap":28},[52,29879,29880,29882,29884,29886,29888],{"class":54,"line":55},[52,29881,59],{"class":58},[52,29883,1344],{"class":62},[52,29885,76],{"class":62},[52,29887,29340],{"class":90},[52,29889,29890],{"class":62}," nvidia-docker2\n",[1070,29892,29893],{"start":82},[1073,29894,29895],{},"使用nvidia-ctk命令配置container runtime",[19,29897,29899],{"className":26774,"code":29898,"language":26776,"meta":28,"style":28},"sudo nvidia-ctk runtime configure --runtime=docker\n",[26,29900,29901],{"__ignoreMap":28},[52,29902,29903,29905,29908,29911,29914],{"class":54,"line":55},[52,29904,59],{"class":58},[52,29906,29907],{"class":62}," nvidia-ctk",[52,29909,29910],{"class":62}," runtime",[52,29912,29913],{"class":62}," configure",[52,29915,29916],{"class":90}," --runtime=docker\n",[1070,29918,29919],{"start":97},[1073,29920,29921],{},"重启docker服务:",[19,29923,29925],{"className":26774,"code":29924,"language":26776,"meta":28,"style":28},"sudo systemctl restart docker\n",[26,29926,29927],{"__ignoreMap":28},[52,29928,29929,29931,29933,29936],{"class":54,"line":55},[52,29930,59],{"class":58},[52,29932,470],{"class":62},[52,29934,29935],{"class":62}," restart",[52,29937,29431],{"class":62},[1491,29939,29941],{"id":29940},"_3212fedora","3.2.1.2.Fedora",[1070,29943,29944],{},[1073,29945,29946],{},"配置存储库",[19,29948,29950],{"className":26774,"code":29949,"language":26776,"meta":28,"style":28},"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",[26,29951,29952,29967],{"__ignoreMap":28},[52,29953,29954,29956,29958,29960,29963,29965],{"class":54,"line":55},[52,29955,29785],{"class":58},[52,29957,29819],{"class":90},[52,29959,29822],{"class":90},[52,29961,29962],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[52,29964,2379],{"class":160},[52,29966,27627],{"class":90},[52,29968,29969,29971,29973],{"class":54,"line":69},[52,29970,59],{"class":58},[52,29972,29159],{"class":62},[52,29974,29975],{"class":62}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1070,29977,29978],{"start":69},[1073,29979,29980],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[19,29982,29984],{"className":26774,"code":29983,"language":26776,"meta":28,"style":28},"# 如果是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",[26,29985,29986,29991,30005,30009,30014],{"__ignoreMap":28},[52,29987,29988],{"class":54,"line":55},[52,29989,29990],{"class":332},"# 如果是RHEL或者Rocky（DNF4）\n",[52,29992,29993,29995,29997,29999,30002],{"class":54,"line":69},[52,29994,59],{"class":58},[52,29996,2938],{"class":62},[52,29998,29354],{"class":62},[52,30000,30001],{"class":90}," --add-repo",[52,30003,30004],{"class":62}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[52,30006,30007],{"class":54,"line":82},[52,30008,116],{"emptyLinePlaceholder":115},[52,30010,30011],{"class":54,"line":97},[52,30012,30013],{"class":332},"# 如果是Feodra41+（DNF5）\n",[52,30015,30016,30018,30020,30022,30024],{"class":54,"line":112},[52,30017,59],{"class":58},[52,30019,2938],{"class":62},[52,30021,29354],{"class":62},[52,30023,29357],{"class":62},[52,30025,30026],{"class":90}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1070,30028,30029],{"start":82},[1073,30030,30031],{},"安装NVIDIA Container Toolki包",[19,30033,30035],{"className":26774,"code":30034,"language":26776,"meta":28,"style":28},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[26,30036,30037,30042,30055,30059,30064],{"__ignoreMap":28},[52,30038,30039],{"class":54,"line":55},[52,30040,30041],{"class":332},"# 如果是RHEL或者Rocky\n",[52,30043,30044,30046,30048,30050,30052],{"class":54,"line":69},[52,30045,59],{"class":58},[52,30047,2938],{"class":62},[52,30049,76],{"class":62},[52,30051,29340],{"class":90},[52,30053,30054],{"class":62}," nvidia-container-toolkit\n",[52,30056,30057],{"class":54,"line":82},[52,30058,116],{"emptyLinePlaceholder":115},[52,30060,30061],{"class":54,"line":97},[52,30062,30063],{"class":332},"# 如果是Fedora\n",[52,30065,30066,30068,30070,30072,30074],{"class":54,"line":112},[52,30067,59],{"class":58},[52,30069,2938],{"class":62},[52,30071,76],{"class":62},[52,30073,29340],{"class":90},[52,30075,30054],{"class":62},[1070,30077,30078],{"start":97},[1073,30079,30080,30081,30083],{},"安装nvidia-docker2 ： 在Fedora上使用",[26,30082,29232],{},"进行安装",[19,30085,30087],{"className":26774,"code":30086,"language":26776,"meta":28,"style":28},"sudo dnf install -y nvidia-docker2\n",[26,30088,30089],{"__ignoreMap":28},[52,30090,30091,30093,30095,30097,30099],{"class":54,"line":55},[52,30092,59],{"class":58},[52,30094,2938],{"class":62},[52,30096,76],{"class":62},[52,30098,29340],{"class":90},[52,30100,29890],{"class":62},[1070,30102,30103],{"start":112},[1073,30104,30105],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[19,30107,30108],{"className":26774,"code":29898,"language":26776,"meta":28,"style":28},[26,30109,30110],{"__ignoreMap":28},[52,30111,30112,30114,30116,30118,30120],{"class":54,"line":55},[52,30113,59],{"class":58},[52,30115,29907],{"class":62},[52,30117,29910],{"class":62},[52,30119,29913],{"class":62},[52,30121,29916],{"class":90},[1070,30123,30124],{"start":119},[1073,30125,30126],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[19,30128,30129],{"className":26774,"code":29924,"language":26776,"meta":28,"style":28},[26,30130,30131],{"__ignoreMap":28},[52,30132,30133,30135,30137,30139],{"class":54,"line":55},[52,30134,59],{"class":58},[52,30136,470],{"class":62},[52,30138,29935],{"class":62},[52,30140,29431],{"class":62},[274,30142,30143],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[274,30145,30146],{},"方法：",[274,30148,30149],{},"1️⃣nvidia-smi",[274,30151,30152],{},"2️⃣运行nvidia cuda 容器进行测试",[19,30154,30156],{"className":26774,"code":30155,"language":26776,"meta":28,"style":28},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[26,30157,30158],{"__ignoreMap":28},[52,30159,30160,30162,30164,30166,30169,30172,30175,30178],{"class":54,"line":55},[52,30161,59],{"class":58},[52,30163,29260],{"class":62},[52,30165,2033],{"class":62},[52,30167,30168],{"class":90}," --rm",[52,30170,30171],{"class":90}," --gpus",[52,30173,30174],{"class":62}," all",[52,30176,30177],{"class":62}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[52,30179,30180],{"class":62}," nvidia-smi\n",[274,30182,30183],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[274,30185,30186],{},[280,30187],{"alt":28,"src":30188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[30,30190,30192],{"id":30191},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[274,30194,30195],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[274,30197,30198],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[274,30200,30201],{},[300,30202,30203],{"href":30203,"rel":30204},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[304],[274,30206,30207],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[274,30209,30210],{},"我们只需要找到对应的Docker镜像当底包即可。",[274,30212,30213],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[3253,30215,30216,30232],{},[3256,30217,30218],{},[3259,30219,30220,30223,30226,30229],{},[3262,30221,30222],{"align":26688},"镜像类型",[3262,30224,30225],{"align":26688},"适用场景",[3262,30227,30228],{"align":26688},"示例标签",[3262,30230,30231],{"align":26688},"大小",[3299,30233,30234,30248,30262],{},[3259,30235,30236,30239,30242,30245],{},[3304,30237,30238],{"align":26688},"base",[3304,30240,30241],{"align":26688},"仅需 CUDA 运行时库",[3304,30243,30244],{"align":26688},"12.4.0-base-ubuntu22.04",[3304,30246,30247],{"align":26688},"~240MB",[3259,30249,30250,30253,30256,30259],{},[3304,30251,30252],{"align":26688},"runtime",[3304,30254,30255],{"align":26688},"部署编译后的应用（含数学库）",[3304,30257,30258],{"align":26688},"12.4.0-runtime-ubuntu22.04",[3304,30260,30261],{"align":26688},"~2GB",[3259,30263,30264,30267,30270,30273],{},[3304,30265,30266],{"align":26688},"devel",[3304,30268,30269],{"align":26688},"开发环境（含编译工具）",[3304,30271,30272],{"align":26688},"12.4.0-devel-ubuntu22.04",[3304,30274,30275],{"align":26688},"~3GB",[274,30277,30278,30279,30282],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[26,30280,30281],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[274,30284,30285],{},[280,30286],{"alt":28,"src":30287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[274,30289,30290],{},"在dockerfile里就可以开头这么写：",[19,30292,30294],{"className":26774,"code":30293,"language":26776,"meta":28,"style":28},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[26,30295,30296,30301],{"__ignoreMap":28},[52,30297,30298],{"class":54,"line":55},[52,30299,30300],{"class":332},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[52,30302,30303,30306],{"class":54,"line":69},[52,30304,30305],{"class":58},"FROM",[52,30307,30308],{"class":62}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[30,30310,30312],{"id":30311},"_34配置以太网","3.4.配置以太网",[274,30314,30315],{},"指定网络模式",[19,30317,30319],{"className":26774,"code":30318,"language":26776,"meta":28,"style":28},"--net=host \\\n",[26,30320,30321],{"__ignoreMap":28},[52,30322,30323,30326,30328,30331],{"class":54,"line":55},[52,30324,30325],{"class":622},"--net",[52,30327,2099],{"class":160},[52,30329,30330],{"class":62},"host",[52,30332,27627],{"class":58},[274,30334,30335],{},"启动参数里加上这行即可。具体在下方",[274,30337,30338],{},"--net选项：指定网络模式，该选项有以下参数可选：",[4118,30340,30341,30344,30347,30350],{},[1073,30342,30343],{},"--net=bridge:默认选项，表示连接到默认的网桥",[1073,30345,30346],{},"--net=host:容器使用宿主机的网络",[1073,30348,30349],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[1073,30351,30352],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[3015,30354,30355],{},"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":28,"searchDepth":69,"depth":69,"links":30357},[30358,30359,30360,30361],{"id":29674,"depth":82,"text":29675},{"id":29740,"depth":82,"text":29741},{"id":30191,"depth":82,"text":30192},{"id":30311,"depth":82,"text":30312},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":29663,"description":29671},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":30368,"title":30369,"body":30370,"description":30377,"extension":3047,"meta":30383,"navigation":115,"path":30384,"seo":30385,"stem":30386,"__hash__":30387},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":30371,"toc":30381},[30372,30375,30378],[10,30373,30369],{"id":30374},"_4dockerhub换源",[274,30376,30377],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[274,30379,30380],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":28,"searchDepth":69,"depth":69,"links":30382},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":30369,"description":30377},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":30389,"title":30390,"body":30391,"description":28,"extension":3047,"meta":31402,"navigation":115,"path":31403,"seo":31404,"stem":31405,"__hash__":31406},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":30392,"toc":31397},[30393,30396,30400,30406,30410,30413,30753,30756,30759,30762,30767,30772,30775,30778,30781,30784,30802,30805,30816,30822,31004,31014,31030,31293,31295,31320,31335,31344,31394],[10,30394,30390],{"id":30395},"_5docker命令学习",[30,30397,30399],{"id":30398},"_51参考文档","5.1.参考文档",[274,30401,30402],{},[300,30403,30404],{"href":30404,"rel":30405},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[304],[30,30407,30409],{"id":30408},"_52常用命令","5.2.常用命令",[274,30411,30412],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[3253,30414,30415,30428],{},[3256,30416,30417],{},[3259,30418,30419,30422,30425],{},[3262,30420,30421],{"align":26688},"命令",[3262,30423,30424],{"align":26688},"描述",[3262,30426,30427],{"align":26688},"示例",[3299,30429,30430,30441,30452,30463,30474,30485,30496,30507,30517,30528,30539,30550,30560,30571,30582,30593,30603,30613,30623,30633,30644,30655,30666,30677,30688,30699,30709,30720,30731,30742],{},[3259,30431,30432,30435,30438],{},[3304,30433,30434],{"align":26688},"docker run",[3304,30436,30437],{"align":26688},"创建并启动一个新的容器。",[3304,30439,30440],{"align":26688},"docker run -it ubuntu bash",[3259,30442,30443,30446,30449],{},[3304,30444,30445],{"align":26688},"docker build",[3304,30447,30448],{"align":26688},"通过指定的 Dockerfile 创建一个新的镜像。",[3304,30450,30451],{"align":26688},"docker build -t myimage .",[3259,30453,30454,30457,30460],{},[3304,30455,30456],{"align":26688},"docker pull",[3304,30458,30459],{"align":26688},"从 Docker 仓库拉取镜像。",[3304,30461,30462],{"align":26688},"docker pull ubuntu",[3259,30464,30465,30468,30471],{},[3304,30466,30467],{"align":26688},"docker push",[3304,30469,30470],{"align":26688},"将本地镜像推送到 Docker 仓库。",[3304,30472,30473],{"align":26688},"docker push myimage",[3259,30475,30476,30479,30482],{},[3304,30477,30478],{"align":26688},"docker stop",[3304,30480,30481],{"align":26688},"停止一个正在运行的容器。",[3304,30483,30484],{"align":26688},"docker stop container_id",[3259,30486,30487,30490,30493],{},[3304,30488,30489],{"align":26688},"docker start",[3304,30491,30492],{"align":26688},"启动一个已经存在的容器。",[3304,30494,30495],{"align":26688},"docker start container_id",[3259,30497,30498,30501,30504],{},[3304,30499,30500],{"align":26688},"docker restart",[3304,30502,30503],{"align":26688},"重新启动容器。",[3304,30505,30506],{"align":26688},"docker restart container_id",[3259,30508,30509,30512,30515],{},[3304,30510,30511],{"align":26688},"docker ps",[3304,30513,30514],{"align":26688},"列出当前正在运行的容器。",[3304,30516,30511],{"align":26688},[3259,30518,30519,30522,30525],{},[3304,30520,30521],{"align":26688},"docker rm",[3304,30523,30524],{"align":26688},"删除一个或多个停止的容器。",[3304,30526,30527],{"align":26688},"docker rm container_id",[3259,30529,30530,30533,30536],{},[3304,30531,30532],{"align":26688},"docker exec",[3304,30534,30535],{"align":26688},"在一个正在运行的容器中执行命令。",[3304,30537,30538],{"align":26688},"docker exec -it container_id bash",[3259,30540,30541,30544,30547],{},[3304,30542,30543],{"align":26688},"docker logs",[3304,30545,30546],{"align":26688},"查看容器的日志输出。",[3304,30548,30549],{"align":26688},"docker logs container_id",[3259,30551,30552,30555,30558],{},[3304,30553,30554],{"align":26688},"docker images",[3304,30556,30557],{"align":26688},"列出本地所有镜像。",[3304,30559,30554],{"align":26688},[3259,30561,30562,30565,30568],{},[3304,30563,30564],{"align":26688},"docker rmi",[3304,30566,30567],{"align":26688},"删除一个或多个镜像。",[3304,30569,30570],{"align":26688},"docker rmi myimage",[3259,30572,30573,30576,30579],{},[3304,30574,30575],{"align":26688},"docker network",[3304,30577,30578],{"align":26688},"管理 Docker 网络。",[3304,30580,30581],{"align":26688},"docker network ls",[3259,30583,30584,30587,30590],{},[3304,30585,30586],{"align":26688},"docker volume",[3304,30588,30589],{"align":26688},"管理 Docker 数据卷。",[3304,30591,30592],{"align":26688},"docker volume ls",[3259,30594,30595,30598,30601],{},[3304,30596,30597],{"align":26688},"docker-compose up",[3304,30599,30600],{"align":26688},"启动 docker-compose.yml 中定义的所有服务。",[3304,30602,30597],{"align":26688},[3259,30604,30605,30608,30611],{},[3304,30606,30607],{"align":26688},"docker-compose down",[3304,30609,30610],{"align":26688},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[3304,30612,30607],{"align":26688},[3259,30614,30615,30618,30621],{},[3304,30616,30617],{"align":26688},"docker info",[3304,30619,30620],{"align":26688},"显示 Docker 系统的详细信息。",[3304,30622,30617],{"align":26688},[3259,30624,30625,30628,30631],{},[3304,30626,30627],{"align":26688},"docker stats",[3304,30629,30630],{"align":26688},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[3304,30632,30627],{"align":26688},[3259,30634,30635,30638,30641],{},[3304,30636,30637],{"align":26688},"docker inspect",[3304,30639,30640],{"align":26688},"查看容器或镜像的详细信息（JSON 格式）。",[3304,30642,30643],{"align":26688},"docker inspect container_id",[3259,30645,30646,30649,30652],{},[3304,30647,30648],{"align":26688},"docker save",[3304,30650,30651],{"align":26688},"将一个镜像保存为 tar 文件。",[3304,30653,30654],{"align":26688},"docker save -o myimage.tar myimage",[3259,30656,30657,30660,30663],{},[3304,30658,30659],{"align":26688},"docker load",[3304,30661,30662],{"align":26688},"从 tar 文件中加载镜像。",[3304,30664,30665],{"align":26688},"docker load -i myimage.tar",[3259,30667,30668,30671,30674],{},[3304,30669,30670],{"align":26688},"docker tag",[3304,30672,30673],{"align":26688},"为镜像添加标签（tag）。",[3304,30675,30676],{"align":26688},"docker tag myimage myimage:v1",[3259,30678,30679,30682,30685],{},[3304,30680,30681],{"align":26688},"docker buildx build",[3304,30683,30684],{"align":26688},"使用 Buildx 构建多架构镜像。",[3304,30686,30687],{"align":26688},"docker buildx build -t myimage .",[3259,30689,30690,30693,30696],{},[3304,30691,30692],{"align":26688},"docker buildx create",[3304,30694,30695],{"align":26688},"创建一个新的 Buildx 构建实例。",[3304,30697,30698],{"align":26688},"docker buildx create –use",[3259,30700,30701,30704,30707],{},[3304,30702,30703],{"align":26688},"docker buildx ls",[3304,30705,30706],{"align":26688},"列出所有可用的 Buildx 构建实例。",[3304,30708,30703],{"align":26688},[3259,30710,30711,30714,30717],{},[3304,30712,30713],{"align":26688},"docker buildx use",[3304,30715,30716],{"align":26688},"设置当前的 Buildx 构建实例。",[3304,30718,30719],{"align":26688},"docker buildx use mybuilder",[3259,30721,30722,30725,30728],{},[3304,30723,30724],{"align":26688},"docker buildx bake",[3304,30726,30727],{"align":26688},"使用 Bake 文件批量构建镜像。",[3304,30729,30730],{"align":26688},"docker buildx bake -f bake.hcl",[3259,30732,30733,30736,30739],{},[3304,30734,30735],{"align":26688},"docker buildx build –push",[3304,30737,30738],{"align":26688},"构建镜像并推送到镜像仓库。",[3304,30740,30741],{"align":26688},"docker buildx build –push -t myimage .",[3259,30743,30744,30747,30750],{},[3304,30745,30746],{"align":26688},"docker buildx build –platform",[3304,30748,30749],{"align":26688},"构建镜像并为多个平台生成支持。",[3304,30751,30752],{"align":26688},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[274,30754,30755],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[274,30757,30758],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[274,30760,30761],{},"docker images 可以查看已经下载的镜像",[274,30763,30764],{},[280,30765],{"alt":28,"src":30766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[274,30768,30769],{},[538,30770,30771],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[274,30773,30774],{},"docker rmi $(docker images -q) 删除所有的镜像",[274,30776,30777],{},"docker container logs 查看容器日志",[274,30779,30780],{},"docker top 查看容器里的进程",[274,30782,30783],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[19,30785,30787],{"className":26774,"code":30786,"language":26776,"meta":28,"style":28},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[26,30788,30789],{"__ignoreMap":28},[52,30790,30791,30794,30796,30799],{"class":54,"line":55},[52,30792,30793],{"class":58},"如：docker",[52,30795,2271],{"class":62},[52,30797,30798],{"class":62}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[52,30800,30801],{"class":62}," \u002Fmydata\u002Fnginx\n",[274,30803,30804],{},"docker run时在启动容器的时候会有几个常用的选项：",[4118,30806,30807,30810,30813],{},[1073,30808,30809],{},"-d选项：表示后台运行",[1073,30811,30812],{},"-P选项：随机端口映射",[1073,30814,30815],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[30,30817,30819],{"id":30818},"_53run命令的参数非常重要",[538,30820,30821],{},"5.3.run命令的参数（非常重要）",[3253,30823,30824,30837],{},[3256,30825,30826],{},[3259,30827,30828,30831,30834],{},[3262,30829,30830],{"align":26688},"参数\u002F配置",[3262,30832,30833],{"align":26688},"功能说明",[3262,30835,30836],{"align":26688},"重要性与参考依据",[3299,30838,30839,30850,30861,30872,30883,30894,30905,30916,30927,30938,30949,30960,30971,30982,30993],{},[3259,30840,30841,30844,30847],{},[3304,30842,30843],{"align":26688},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[3304,30845,30846],{"align":26688},"指定容器名称，便于后续管理",[3304,30848,30849],{"align":26688},"替代随机生成的容器名。",[3259,30851,30852,30855,30858],{},[3304,30853,30854],{"align":26688},"–gpus all",[3304,30856,30857],{"align":26688},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[3304,30859,30860],{"align":26688},"用于CUDA加速等GPU依赖任务。",[3259,30862,30863,30866,30869],{},[3304,30864,30865],{"align":26688},"-e NVIDIA_DRIVER_CAPABILITIES=all",[3304,30867,30868],{"align":26688},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[3304,30870,30871],{"align":26688},"确保容器内GPU功能完整67。",[3259,30873,30874,30877,30880],{},[3304,30875,30876],{"align":26688},"-dit",[3304,30878,30879],{"align":26688},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[3304,30881,30882],{"align":26688},"允许容器在后台运行并支持交互操作。",[3259,30884,30885,30888,30891],{},[3304,30886,30887],{"align":26688},"–privileged",[3304,30889,30890],{"align":26688},"赋予容器完全主机权限（可访问设备、内核模块等）",[3304,30892,30893],{"align":26688},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[3259,30895,30896,30899,30902],{},[3304,30897,30898],{"align":26688},"–net=host",[3304,30900,30901],{"align":26688},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[3304,30903,30904],{"align":26688},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[3259,30906,30907,30910,30913],{},[3304,30908,30909],{"align":26688},"–group-add audio–group-add video–group-add dialout",[3304,30911,30912],{"align":26688},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[3304,30914,30915],{"align":26688},"避免权限问题（如避免无法调用摄像头、麦克风）。",[3259,30917,30918,30921,30924],{},[3304,30919,30920],{"align":26688},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[3304,30922,30923],{"align":26688},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[3304,30925,30926],{"align":26688},"支持容器内运行图形界面应用（如OpenCV可视化）。",[3259,30928,30929,30932,30935],{},[3304,30930,30931],{"align":26688},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[3304,30933,30934],{"align":26688},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[3304,30936,30937],{"align":26688},"实现容器内图形显示。",[3259,30939,30940,30943,30946],{},[3304,30941,30942],{"align":26688},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[3304,30944,30945],{"align":26688},"挂载X11认证文件（只读）",[3304,30947,30948],{"align":26688},"确保容器有权连接宿主机显示服务。",[3259,30950,30951,30954,30957],{},[3304,30952,30953],{"align":26688},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[3304,30955,30956],{"align":26688},"挂载Wayland显示协议相关目录",[3304,30958,30959],{"align":26688},"支持Wayland协议的图形显示。",[3259,30961,30962,30965,30968],{},[3304,30963,30964],{"align":26688},"–ulimit nofile=1024:524288",[3304,30966,30967],{"align":26688},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[3304,30969,30970],{"align":26688},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[3259,30972,30973,30976,30979],{},[3304,30974,30975],{"align":26688},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[3304,30977,30978],{"align":26688},"挂载宿主机用户目录到容器内同名路径",[3304,30980,30981],{"align":26688},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[3259,30983,30984,30987,30990],{},[3304,30985,30986],{"align":26688},"-w \u002Fhome\u002Ftungchiahui",[3304,30988,30989],{"align":26688},"设置容器启动后的默认工作目录",[3304,30991,30992],{"align":26688},"直接进入项目路径，方便执行命令2324。",[3259,30994,30995,30998,31001],{},[3304,30996,30997],{"align":26688},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[3304,30999,31000],{"align":26688},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[3304,31002,31003],{"align":26688},"提供预配置的深度学习与机器人开发环境。",[274,31005,31006,31007,31009,31010,31013],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[26,31008,59],{},"加不加",[26,31011,31012],{},"sudo -E","都无所谓。",[274,31015,31016,31017,31019,31020,31022,31023,31026,31027,31029],{},"用户已经被加到docker组了，不用",[26,31018,59],{},"也行跑，其次，",[26,31021,59],{},"运行的话，你的",[26,31024,31025],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[26,31028,31025],{},"更不可能变了。",[19,31031,31033],{"className":26774,"code":31032,"language":26776,"meta":28,"style":28},"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",[26,31034,31035,31048,31058,31068,31080,31087,31094,31101,31111,31120,31129,31143,31155,31167,31176,31186,31195,31210,31243,31270,31281,31288],{"__ignoreMap":28},[52,31036,31037,31039,31041,31043,31046],{"class":54,"line":55},[52,31038,59],{"class":58},[52,31040,29260],{"class":62},[52,31042,2033],{"class":62},[52,31044,31045],{"class":90}," --name=ros_opencv_cuda",[52,31047,27627],{"class":90},[52,31049,31050,31053,31056],{"class":54,"line":69},[52,31051,31052],{"class":622},"--gpus ",[52,31054,31055],{"class":62},"all",[52,31057,27627],{"class":90},[52,31059,31060,31063,31066],{"class":54,"line":82},[52,31061,31062],{"class":622},"-e ",[52,31064,31065],{"class":62},"NVIDIA_DRIVER_CAPABILITIES=all",[52,31067,27627],{"class":90},[52,31069,31070,31072,31075,31078],{"class":54,"line":97},[52,31071,31062],{"class":622},[52,31073,31074],{"class":62},"DISPLAY=",[52,31076,31077],{"class":622},"$DISPLAY ",[52,31079,29118],{"class":90},[52,31081,31082,31085],{"class":54,"line":112},[52,31083,31084],{"class":622},"-dit ",[52,31086,29118],{"class":90},[52,31088,31089,31092],{"class":54,"line":119},[52,31090,31091],{"class":622},"--privileged ",[52,31093,29118],{"class":90},[52,31095,31096,31099],{"class":54,"line":130},[52,31097,31098],{"class":622},"--net=host ",[52,31100,29118],{"class":90},[52,31102,31103,31106,31109],{"class":54,"line":136},[52,31104,31105],{"class":622},"--group-add ",[52,31107,31108],{"class":62},"audio",[52,31110,27627],{"class":90},[52,31112,31113,31115,31118],{"class":54,"line":141},[52,31114,31105],{"class":622},[52,31116,31117],{"class":62},"video",[52,31119,27627],{"class":90},[52,31121,31122,31124,31127],{"class":54,"line":146},[52,31123,31105],{"class":622},[52,31125,31126],{"class":62},"dialout",[52,31128,27627],{"class":90},[52,31130,31131,31133,31136,31138,31141],{"class":54,"line":152},[52,31132,31062],{"class":622},[52,31134,31135],{"class":62},"XAUTHORITY=",[52,31137,31025],{"class":622},[52,31139,31140],{"class":62},"\u002F.Xauthority",[52,31142,27627],{"class":90},[52,31144,31145,31147,31150,31153],{"class":54,"line":157},[52,31146,31062],{"class":622},[52,31148,31149],{"class":62},"WAYLAND_DISPLAY=",[52,31151,31152],{"class":622},"$WAYLAND_DISPLAY ",[52,31154,29118],{"class":90},[52,31156,31157,31159,31162,31165],{"class":54,"line":173},[52,31158,31062],{"class":622},[52,31160,31161],{"class":62},"XDG_RUNTIME_DIR=",[52,31163,31164],{"class":622},"$XDG_RUNTIME_DIR ",[52,31166,29118],{"class":90},[52,31168,31169,31171,31174],{"class":54,"line":178},[52,31170,31062],{"class":622},[52,31172,31173],{"class":62},"QT_QPA_PLATFORM=xcb",[52,31175,27627],{"class":90},[52,31177,31178,31181,31184],{"class":54,"line":184},[52,31179,31180],{"class":622},"-v ",[52,31182,31183],{"class":62},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[52,31185,27627],{"class":90},[52,31187,31188,31190,31193],{"class":54,"line":189},[52,31189,31180],{"class":622},[52,31191,31192],{"class":62},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[52,31194,27627],{"class":90},[52,31196,31197,31200,31203,31205,31208],{"class":54,"line":201},[52,31198,31199],{"class":622},"-v $HOME",[52,31201,31202],{"class":62},"\u002F.Xauthority:",[52,31204,31025],{"class":622},[52,31206,31207],{"class":62},"\u002F.Xauthority:ro",[52,31209,27627],{"class":90},[52,31211,31212,31214,31217,31219,31222,31225,31227,31230,31232,31234,31236,31238,31241],{"class":54,"line":206},[52,31213,31180],{"class":622},[52,31215,31216],{"class":62},"\u002Frun\u002Fuser\u002F",[52,31218,2946],{"class":622},[52,31220,31221],{"class":58},"id",[52,31223,31224],{"class":90}," -u",[52,31226,3542],{"class":622},[52,31228,31229],{"class":62},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[52,31231,2946],{"class":622},[52,31233,31221],{"class":58},[52,31235,31224],{"class":90},[52,31237,3542],{"class":622},[52,31239,31240],{"class":62},"\u002Fwayland-0",[52,31242,27627],{"class":90},[52,31244,31245,31247,31249,31251,31253,31255,31257,31260,31262,31264,31266,31268],{"class":54,"line":224},[52,31246,31180],{"class":622},[52,31248,31216],{"class":62},[52,31250,2946],{"class":622},[52,31252,31221],{"class":58},[52,31254,31224],{"class":90},[52,31256,3542],{"class":622},[52,31258,31259],{"class":62},":\u002Frun\u002Fuser\u002F",[52,31261,2946],{"class":622},[52,31263,31221],{"class":58},[52,31265,31224],{"class":90},[52,31267,16670],{"class":622},[52,31269,29118],{"class":90},[52,31271,31272,31274,31276,31279],{"class":54,"line":229},[52,31273,31199],{"class":622},[52,31275,3971],{"class":62},[52,31277,31278],{"class":622},"$HOME ",[52,31280,29118],{"class":90},[52,31282,31283,31286],{"class":54,"line":241},[52,31284,31285],{"class":622},"-w $HOME ",[52,31287,29118],{"class":90},[52,31289,31290],{"class":54,"line":246},[52,31291,31292],{"class":622},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[274,31294,11981],{},[1070,31296,31297,31305,31308,31311],{},[1073,31298,31299,16751,31301,31304],{},[26,31300,31065],{},[26,31302,31303],{},"--gpus all","没有英伟达显卡请注释。",[1073,31306,31307],{},"--name后面请自己为容器起名。",[1073,31309,31310],{},"最后一行仓库名称请你自己找对应的镜像填上。",[1073,31312,31313,31314,31319],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[1605,31315,31316],{},[538,31317,31318],{},"请不要加","。",[19,31321,31323],{"className":26774,"code":31322,"language":26776,"meta":28,"style":28},"--ulimit nofile=1024:524288 \\\n",[26,31324,31325],{"__ignoreMap":28},[52,31326,31327,31330,31333],{"class":54,"line":55},[52,31328,31329],{"class":58},"--ulimit",[52,31331,31332],{"class":62}," nofile=1024:524288",[52,31334,27627],{"class":90},[274,31336,31337,31338,31343],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[1605,31339,31340],{},[538,31341,31342],{},"不建议","**.**",[19,31345,31347],{"className":26774,"code":31346,"language":26776,"meta":28,"style":28},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[26,31348,31349,31376,31385],{"__ignoreMap":28},[52,31350,31351,31354,31357,31359,31361,31363,31365,31367,31369,31372,31374],{"class":54,"line":55},[52,31352,31353],{"class":58},"--user",[52,31355,31356],{"class":622}," $(",[52,31358,31221],{"class":58},[52,31360,31224],{"class":90},[52,31362,3542],{"class":622},[52,31364,3971],{"class":62},[52,31366,2946],{"class":622},[52,31368,31221],{"class":58},[52,31370,31371],{"class":90}," -g",[52,31373,16670],{"class":622},[52,31375,29118],{"class":90},[52,31377,31378,31380,31383],{"class":54,"line":69},[52,31379,31180],{"class":622},[52,31381,31382],{"class":62},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[52,31384,27627],{"class":90},[52,31386,31387,31389,31392],{"class":54,"line":82},[52,31388,31180],{"class":622},[52,31390,31391],{"class":62},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[52,31393,27627],{"class":90},[3015,31395,31396],{},"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":28,"searchDepth":69,"depth":69,"links":31398},[31399,31400,31401],{"id":30398,"depth":82,"text":30399},{"id":30408,"depth":82,"text":30409},{"id":30818,"depth":82,"text":30821},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":30390,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":31408,"title":31409,"body":31410,"description":28,"extension":3047,"meta":33032,"navigation":115,"path":33033,"seo":33034,"stem":33035,"__hash__":33036},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":31411,"toc":33027},[31412,31415,31419,31422,31644,31648,31652,31655,31761,31766,31769,31774,31777,31782,31785,31790,31793,31805,31808,31813,31820,31848,31855,31931,31936,31939,31962,31964,32039,32044,32047,32051,32059,32064,32069,32073,32084,32090,32093,32096,32120,32123,32126,32153,32156,32159,32624,32627,32632,32637,32641,32664,32669,32673,32677,32680,32683,32686,32713,32716,32719,32737,32740,32743,32765,32773,32778,32783,32787,32790,32793,32796,32799,32844,32847,32865,32868,32873,32876,32897,32900,32956,32959,32964,32968,32971,32978,32981,32984,32989,32992,33008,33011,33024],[10,31413,31409],{"id":31414},"_6手动创建docker镜像",[30,31416,31418],{"id":31417},"_61dockerfile","6.1.DockerFile",[274,31420,31421],{},"常用命令：",[3253,31423,31424,31435],{},[3256,31425,31426],{},[3259,31427,31428,31431,31433],{},[3262,31429,31430],{"align":26688},"指令",[3262,31432,28814],{"align":26688},[3262,31434,30427],{"align":26688},[3299,31436,31437,31447,31463,31474,31485,31496,31507,31518,31529,31543,31557,31568,31582,31593,31604,31618,31633],{},[3259,31438,31439,31441,31444],{},[3304,31440,30305],{"align":26688},[3304,31442,31443],{"align":26688},"指定基础镜像，是 Dockerfile 的起点",[3304,31445,31446],{"align":26688},"FROM ubuntu:22.04",[3259,31448,31449,31452,31455],{},[3304,31450,31451],{"align":26688},"LABEL",[3304,31453,31454],{"align":26688},"添加元数据（如作者、版本等）",[3304,31456,31457,31458,31462],{"align":26688},"LABEL maintainer=”",[300,31459,31461],{"href":31460},"mailto:you@example.com","you@example.com","”",[3259,31464,31465,31468,31471],{},[3304,31466,31467],{"align":26688},"ENV",[3304,31469,31470],{"align":26688},"设置环境变量",[3304,31472,31473],{"align":26688},"ENV PORT=8080",[3259,31475,31476,31479,31482],{},[3304,31477,31478],{"align":26688},"ARG",[3304,31480,31481],{"align":26688},"构建参数，只在构建期间可用",[3304,31483,31484],{"align":26688},"ARG VERSION=1.0",[3259,31486,31487,31490,31493],{},[3304,31488,31489],{"align":26688},"RUN",[3304,31491,31492],{"align":26688},"构建镜像时运行命令",[3304,31494,31495],{"align":26688},"RUN apt-get update && apt-get install -y curl",[3259,31497,31498,31501,31504],{},[3304,31499,31500],{"align":26688},"COPY",[3304,31502,31503],{"align":26688},"复制文件到镜像中",[3304,31505,31506],{"align":26688},"COPY . \u002Fapp",[3259,31508,31509,31512,31515],{},[3304,31510,31511],{"align":26688},"ADD",[3304,31513,31514],{"align":26688},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[3304,31516,31517],{"align":26688},"ADD archive.tar.gz \u002Fdata\u002F",[3259,31519,31520,31523,31526],{},[3304,31521,31522],{"align":26688},"WORKDIR",[3304,31524,31525],{"align":26688},"设置工作目录",[3304,31527,31528],{"align":26688},"WORKDIR \u002Fopt",[3259,31530,31531,31534,31537],{},[3304,31532,31533],{"align":26688},"CMD",[3304,31535,31536],{"align":26688},"设置容器启动时默认命令（可被 docker run 覆盖）",[3304,31538,31539,31540],{"align":26688},"CMD ",[52,31541,31542],{},"“node”, “index.js”",[3259,31544,31545,31548,31551],{},[3304,31546,31547],{"align":26688},"ENTRYPOINT",[3304,31549,31550],{"align":26688},"设置容器启动时固定命令（通常用于 CLI 工具等）",[3304,31552,31553,31554],{"align":26688},"ENTRYPOINT ",[52,31555,31556],{},"“python3”",[3259,31558,31559,31562,31565],{},[3304,31560,31561],{"align":26688},"EXPOSE",[3304,31563,31564],{"align":26688},"声明镜像内服务监听的端口（不会自动映射）",[3304,31566,31567],{"align":26688},"EXPOSE 80",[3259,31569,31570,31573,31576],{},[3304,31571,31572],{"align":26688},"VOLUME",[3304,31574,31575],{"align":26688},"声明数据卷挂载点",[3304,31577,31578,31579],{"align":26688},"VOLUME ",[52,31580,31581],{},"“\u002Fdata”",[3259,31583,31584,31587,31590],{},[3304,31585,31586],{"align":26688},"USER",[3304,31588,31589],{"align":26688},"设置后续命令执行的用户",[3304,31591,31592],{"align":26688},"USER appuser",[3259,31594,31595,31598,31601],{},[3304,31596,31597],{"align":26688},"ONBUILD",[3304,31599,31600],{"align":26688},"当镜像作为其他镜像基础镜像时触发的构建指令",[3304,31602,31603],{"align":26688},"ONBUILD COPY . \u002Fsrc",[3259,31605,31606,31609,31612],{},[3304,31607,31608],{"align":26688},"SHELL",[3304,31610,31611],{"align":26688},"更改默认 shell，比如将 sh -c 改为 bash -c",[3304,31613,31614,31615],{"align":26688},"SHELL ",[52,31616,31617],{},"“\u002Fbin\u002Fbash”, “-c”",[3259,31619,31620,31623,31626],{},[3304,31621,31622],{"align":26688},"HEALTHCHECK",[3304,31624,31625],{"align":26688},"定义容器运行时的健康检查命令",[3304,31627,31628,31629],{"align":26688},"`HEALTHCHECK CMD curl –fail ",[300,31630,31631],{"href":31631,"rel":31632},"http:\u002F\u002Flocalhost:8080",[304],[3259,31634,31635,31638,31641],{},[3304,31636,31637],{"align":26688},"STOPSIGNAL",[3304,31639,31640],{"align":26688},"容器停止时发送的信号",[3304,31642,31643],{"align":26688},"STOPSIGNAL SIGKILL",[30,31645,31647],{"id":31646},"_62自己创建容器","6.2.自己创建容器",[1486,31649,31651],{"id":31650},"_621手动创建","6.2.1.手动创建",[274,31653,31654],{},"在x86电脑上编译x86的：",[19,31656,31658],{"className":26774,"code":31657,"language":26776,"meta":28,"style":28},"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",[26,31659,31660,31676,31680,31693,31697,31710,31714,31727,31731,31744,31748],{"__ignoreMap":28},[52,31661,31662,31664,31667,31670,31673],{"class":54,"line":55},[52,31663,29491],{"class":58},[52,31665,31666],{"class":62}," build",[52,31668,31669],{"class":90}," -t",[52,31671,31672],{"class":62}," ros-melodic-cuda118-cudnn8-bionic:latest",[52,31674,31675],{"class":62}," .\n",[52,31677,31678],{"class":54,"line":69},[52,31679,116],{"emptyLinePlaceholder":115},[52,31681,31682,31684,31686,31688,31691],{"class":54,"line":82},[52,31683,29491],{"class":58},[52,31685,31666],{"class":62},[52,31687,31669],{"class":90},[52,31689,31690],{"class":62}," ros-noetic-focal:latest",[52,31692,31675],{"class":62},[52,31694,31695],{"class":54,"line":97},[52,31696,116],{"emptyLinePlaceholder":115},[52,31698,31699,31701,31703,31705,31708],{"class":54,"line":112},[52,31700,29491],{"class":58},[52,31702,31666],{"class":62},[52,31704,31669],{"class":90},[52,31706,31707],{"class":62}," ros-humble-jammy:latest",[52,31709,31675],{"class":62},[52,31711,31712],{"class":54,"line":119},[52,31713,116],{"emptyLinePlaceholder":115},[52,31715,31716,31718,31720,31722,31725],{"class":54,"line":130},[52,31717,29491],{"class":58},[52,31719,31666],{"class":62},[52,31721,31669],{"class":90},[52,31723,31724],{"class":62}," ros-jazzy-noble:latest",[52,31726,31675],{"class":62},[52,31728,31729],{"class":54,"line":136},[52,31730,116],{"emptyLinePlaceholder":115},[52,31732,31733,31735,31737,31739,31742],{"class":54,"line":141},[52,31734,29491],{"class":58},[52,31736,31666],{"class":62},[52,31738,31669],{"class":90},[52,31740,31741],{"class":62}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[52,31743,31675],{"class":62},[52,31745,31746],{"class":54,"line":146},[52,31747,116],{"emptyLinePlaceholder":115},[52,31749,31750,31752,31754,31756,31759],{"class":54,"line":152},[52,31751,29491],{"class":58},[52,31753,31666],{"class":62},[52,31755,31669],{"class":90},[52,31757,31758],{"class":62}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[52,31760,31675],{"class":62},[274,31762,31763],{},[280,31764],{"alt":28,"src":31765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[274,31767,31768],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[274,31770,31771],{},[280,31772],{"alt":28,"src":31773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[274,31775,31776],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1070,31778,31779],{},[1073,31780,31781],{},"创建 Docker Hub 账户",[274,31783,31784],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1070,31786,31787],{"start":69},[1073,31788,31789],{},"登录 Docker Hub",[274,31791,31792],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[19,31794,31796],{"className":26774,"code":31795,"language":26776,"meta":28,"style":28},"docker login\n",[26,31797,31798],{"__ignoreMap":28},[52,31799,31800,31802],{"class":54,"line":55},[52,31801,29491],{"class":58},[52,31803,31804],{"class":62}," login\n",[274,31806,31807],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1070,31809,31810],{},[1073,31811,31812],{},"为你的镜像打标签",[274,31814,31815,31816,31819],{},"Docker Hub 使用 ",[26,31817,31818],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[19,31821,31823],{"className":26774,"code":31822,"language":26776,"meta":28,"style":28},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[26,31824,31825],{"__ignoreMap":28},[52,31826,31827,31829,31832,31834,31837,31840,31843,31845],{"class":54,"line":55},[52,31828,29491],{"class":58},[52,31830,31831],{"class":62}," tag",[52,31833,31724],{"class":62},[52,31835,31836],{"class":160}," \u003C",[52,31838,31839],{"class":62},"你的用户",[52,31841,31842],{"class":622},"名",[52,31844,4072],{"class":160},[52,31846,31847],{"class":62},"\u002Fros-jazzy-noble:latest\n",[274,31849,31850,31851,31854],{},"例如，如果你的 Docker Hub 用户名是 ",[26,31852,31853],{},"tungchiahui","，你应该执行：",[19,31856,31858],{"className":26774,"code":31857,"language":26776,"meta":28,"style":28},"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",[26,31859,31860,31871,31875,31886,31890,31901,31905,31916,31920],{"__ignoreMap":28},[52,31861,31862,31864,31866,31868],{"class":54,"line":55},[52,31863,29491],{"class":58},[52,31865,31831],{"class":62},[52,31867,31690],{"class":62},[52,31869,31870],{"class":62}," tungchiahui\u002Fros-noetic-focal:latest\n",[52,31872,31873],{"class":54,"line":69},[52,31874,116],{"emptyLinePlaceholder":115},[52,31876,31877,31879,31881,31883],{"class":54,"line":82},[52,31878,29491],{"class":58},[52,31880,31831],{"class":62},[52,31882,31707],{"class":62},[52,31884,31885],{"class":62}," tungchiahui\u002Fros-humble-jammy:latest\n",[52,31887,31888],{"class":54,"line":97},[52,31889,116],{"emptyLinePlaceholder":115},[52,31891,31892,31894,31896,31898],{"class":54,"line":112},[52,31893,29491],{"class":58},[52,31895,31831],{"class":62},[52,31897,31724],{"class":62},[52,31899,31900],{"class":62}," tungchiahui\u002Fros-jazzy-noble:latest\n",[52,31902,31903],{"class":54,"line":119},[52,31904,116],{"emptyLinePlaceholder":115},[52,31906,31907,31909,31911,31913],{"class":54,"line":130},[52,31908,29491],{"class":58},[52,31910,31831],{"class":62},[52,31912,31741],{"class":62},[52,31914,31915],{"class":62}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[52,31917,31918],{"class":54,"line":136},[52,31919,116],{"emptyLinePlaceholder":115},[52,31921,31922,31924,31926,31928],{"class":54,"line":141},[52,31923,29491],{"class":58},[52,31925,31831],{"class":62},[52,31927,31758],{"class":62},[52,31929,31930],{"class":62}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1070,31932,31933],{"start":69},[1073,31934,31935],{},"推送镜像到 Docker Hub",[274,31937,31938],{},"使用以下命令将镜像推送到 Docker Hub：",[19,31940,31942],{"className":26774,"code":31941,"language":26776,"meta":28,"style":28},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[26,31943,31944],{"__ignoreMap":28},[52,31945,31946,31948,31951,31953,31955,31957,31959],{"class":54,"line":55},[52,31947,29491],{"class":58},[52,31949,31950],{"class":62}," push",[52,31952,31836],{"class":160},[52,31954,31839],{"class":62},[52,31956,31842],{"class":622},[52,31958,4072],{"class":160},[52,31960,31961],{"class":62},"\u002Fros-noetic-jazzy-noble:latest\n",[274,31963,17589],{},[19,31965,31967],{"className":26774,"code":31966,"language":26776,"meta":28,"style":28},"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",[26,31968,31969,31977,31981,31989,31993,32001,32005,32014,32018,32026,32030],{"__ignoreMap":28},[52,31970,31971,31973,31975],{"class":54,"line":55},[52,31972,29491],{"class":58},[52,31974,31950],{"class":62},[52,31976,31870],{"class":62},[52,31978,31979],{"class":54,"line":69},[52,31980,116],{"emptyLinePlaceholder":115},[52,31982,31983,31985,31987],{"class":54,"line":82},[52,31984,29491],{"class":58},[52,31986,31950],{"class":62},[52,31988,31885],{"class":62},[52,31990,31991],{"class":54,"line":97},[52,31992,116],{"emptyLinePlaceholder":115},[52,31994,31995,31997,31999],{"class":54,"line":112},[52,31996,29491],{"class":58},[52,31998,31950],{"class":62},[52,32000,31900],{"class":62},[52,32002,32003],{"class":54,"line":119},[52,32004,116],{"emptyLinePlaceholder":115},[52,32006,32007,32009,32011],{"class":54,"line":130},[52,32008,29491],{"class":58},[52,32010,31950],{"class":62},[52,32012,32013],{"class":62}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[52,32015,32016],{"class":54,"line":136},[52,32017,116],{"emptyLinePlaceholder":115},[52,32019,32020,32022,32024],{"class":54,"line":141},[52,32021,29491],{"class":58},[52,32023,31950],{"class":62},[52,32025,31930],{"class":62},[52,32027,32028],{"class":54,"line":146},[52,32029,116],{"emptyLinePlaceholder":115},[52,32031,32032,32034,32036],{"class":54,"line":152},[52,32033,29491],{"class":58},[52,32035,31950],{"class":62},[52,32037,32038],{"class":62}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1070,32040,32041],{"start":82},[1073,32042,32043],{},"验证推送成功",[274,32045,32046],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[274,32048,32049],{},[538,32050,6743],{},[4118,32052,32053,32056],{},[1073,32054,32055],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[1073,32057,32058],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[274,32060,32061],{},[280,32062],{"alt":28,"src":32063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[274,32065,32066],{},[280,32067],{"alt":28,"src":32068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[1486,32070,32072],{"id":32071},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[274,32074,32075,32076,32079,32080,32083],{},"如果您想在 ",[538,32077,32078],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[538,32081,32082],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[274,32085,32086,32087],{},"1. ",[538,32088,32089],{},"启用 Docker 跨平台构建",[274,32091,32092],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[274,32094,32095],{},"第一步：启用 buildx（只需执行一次）",[19,32097,32099],{"className":26774,"code":32098,"language":26776,"meta":28,"style":28},"docker buildx create --name multiarch_builder --use\n",[26,32100,32101],{"__ignoreMap":28},[52,32102,32103,32105,32108,32111,32114,32117],{"class":54,"line":55},[52,32104,29491],{"class":58},[52,32106,32107],{"class":62}," buildx",[52,32109,32110],{"class":62}," create",[52,32112,32113],{"class":90}," --name",[52,32115,32116],{"class":62}," multiarch_builder",[52,32118,32119],{"class":90}," --use\n",[274,32121,32122],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[274,32124,32125],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[19,32127,32129],{"className":26774,"code":32128,"language":26776,"meta":28,"style":28},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[26,32130,32131],{"__ignoreMap":28},[52,32132,32133,32135,32137,32139,32142,32145,32148,32150],{"class":54,"line":55},[52,32134,29491],{"class":58},[52,32136,2033],{"class":62},[52,32138,30168],{"class":90},[52,32140,32141],{"class":90}," --privileged",[52,32143,32144],{"class":62}," multiarch\u002Fqemu-user-static",[52,32146,32147],{"class":90}," --reset",[52,32149,1863],{"class":90},[52,32151,32152],{"class":62}," yes\n",[274,32154,32155],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[274,32157,32158],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[19,32160,32162],{"className":26774,"code":32161,"language":26776,"meta":28,"style":28},"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",[26,32163,32164,32206,32210,32215,32225,32235,32244,32250,32254,32258,32268,32276,32285,32291,32295,32299,32309,32317,32326,32332,32336,32340,32350,32358,32367,32373,32377,32381,32391,32399,32408,32414,32418,32422,32432,32440,32449,32455,32459,32463,32473,32481,32490,32496,32500,32504,32514,32522,32531,32537,32541,32545,32555,32563,32572,32578,32582,32586,32597,32605,32614,32620],{"__ignoreMap":28},[52,32165,32166,32168,32170,32172,32175,32178,32180,32182,32185,32187,32189,32191,32193,32196,32199,32201,32204],{"class":54,"line":55},[52,32167,29491],{"class":58},[52,32169,32107],{"class":62},[52,32171,31666],{"class":62},[52,32173,32174],{"class":90}," --platform",[52,32176,32177],{"class":62}," linux\u002Famd64,linux\u002Farm64",[52,32179,31669],{"class":90},[52,32181,31836],{"class":160},[52,32183,32184],{"class":62},"你的镜像",[52,32186,31842],{"class":622},[52,32188,4072],{"class":160},[52,32190,3971],{"class":62},[52,32192,4022],{"class":160},[52,32194,32195],{"class":62},"标",[52,32197,32198],{"class":622},"签",[52,32200,4072],{"class":160},[52,32202,32203],{"class":90}," --push",[52,32205,31675],{"class":62},[52,32207,32208],{"class":54,"line":69},[52,32209,116],{"emptyLinePlaceholder":115},[52,32211,32212],{"class":54,"line":82},[52,32213,32214],{"class":332},"# 例子：\n",[52,32216,32217,32219,32221,32223],{"class":54,"line":97},[52,32218,29491],{"class":58},[52,32220,32107],{"class":62},[52,32222,31666],{"class":62},[52,32224,27627],{"class":90},[52,32226,32227,32230,32233],{"class":54,"line":112},[52,32228,32229],{"class":622},"--platform ",[52,32231,32232],{"class":62},"linux\u002Famd64,linux\u002Farm64",[52,32234,27627],{"class":90},[52,32236,32237,32239,32242],{"class":54,"line":119},[52,32238,31669],{"class":90},[52,32240,32241],{"class":62}," tungchiahui\u002Fros:noetic-focal",[52,32243,27627],{"class":90},[52,32245,32246,32248],{"class":54,"line":130},[52,32247,32203],{"class":90},[52,32249,27627],{"class":90},[52,32251,32252],{"class":54,"line":136},[52,32253,31675],{"class":62},[52,32255,32256],{"class":54,"line":141},[52,32257,116],{"emptyLinePlaceholder":115},[52,32259,32260,32262,32264,32266],{"class":54,"line":146},[52,32261,29491],{"class":58},[52,32263,32107],{"class":62},[52,32265,31666],{"class":62},[52,32267,27627],{"class":90},[52,32269,32270,32272,32274],{"class":54,"line":152},[52,32271,32229],{"class":622},[52,32273,32232],{"class":62},[52,32275,27627],{"class":90},[52,32277,32278,32280,32283],{"class":54,"line":157},[52,32279,31669],{"class":90},[52,32281,32282],{"class":62}," tungchiahui\u002Fros:humble-jammy",[52,32284,27627],{"class":90},[52,32286,32287,32289],{"class":54,"line":173},[52,32288,32203],{"class":90},[52,32290,27627],{"class":90},[52,32292,32293],{"class":54,"line":178},[52,32294,31675],{"class":62},[52,32296,32297],{"class":54,"line":184},[52,32298,116],{"emptyLinePlaceholder":115},[52,32300,32301,32303,32305,32307],{"class":54,"line":189},[52,32302,29491],{"class":58},[52,32304,32107],{"class":62},[52,32306,31666],{"class":62},[52,32308,27627],{"class":90},[52,32310,32311,32313,32315],{"class":54,"line":201},[52,32312,32229],{"class":622},[52,32314,32232],{"class":62},[52,32316,27627],{"class":90},[52,32318,32319,32321,32324],{"class":54,"line":206},[52,32320,31669],{"class":90},[52,32322,32323],{"class":62}," tungchiahui\u002Fros:jazzy-noble",[52,32325,27627],{"class":90},[52,32327,32328,32330],{"class":54,"line":224},[52,32329,32203],{"class":90},[52,32331,27627],{"class":90},[52,32333,32334],{"class":54,"line":229},[52,32335,31675],{"class":62},[52,32337,32338],{"class":54,"line":241},[52,32339,116],{"emptyLinePlaceholder":115},[52,32341,32342,32344,32346,32348],{"class":54,"line":246},[52,32343,29260],{"class":58},[52,32345,32107],{"class":62},[52,32347,31666],{"class":62},[52,32349,27627],{"class":90},[52,32351,32352,32354,32356],{"class":54,"line":252},[52,32353,32229],{"class":622},[52,32355,32232],{"class":62},[52,32357,27627],{"class":90},[52,32359,32360,32362,32365],{"class":54,"line":257},[52,32361,31669],{"class":90},[52,32363,32364],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[52,32366,27627],{"class":90},[52,32368,32369,32371],{"class":54,"line":266},[52,32370,32203],{"class":90},[52,32372,27627],{"class":90},[52,32374,32375],{"class":54,"line":4722},[52,32376,31675],{"class":62},[52,32378,32379],{"class":54,"line":4727},[52,32380,116],{"emptyLinePlaceholder":115},[52,32382,32383,32385,32387,32389],{"class":54,"line":4741},[52,32384,29491],{"class":58},[52,32386,32107],{"class":62},[52,32388,31666],{"class":62},[52,32390,27627],{"class":90},[52,32392,32393,32395,32397],{"class":54,"line":4746},[52,32394,32229],{"class":622},[52,32396,32232],{"class":62},[52,32398,27627],{"class":90},[52,32400,32401,32403,32406],{"class":54,"line":5538},[52,32402,31669],{"class":90},[52,32404,32405],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[52,32407,27627],{"class":90},[52,32409,32410,32412],{"class":54,"line":5552},[52,32411,32203],{"class":90},[52,32413,27627],{"class":90},[52,32415,32416],{"class":54,"line":5560},[52,32417,31675],{"class":62},[52,32419,32420],{"class":54,"line":5565},[52,32421,116],{"emptyLinePlaceholder":115},[52,32423,32424,32426,32428,32430],{"class":54,"line":5571},[52,32425,29260],{"class":58},[52,32427,32107],{"class":62},[52,32429,31666],{"class":62},[52,32431,27627],{"class":90},[52,32433,32434,32436,32438],{"class":54,"line":5577},[52,32435,32229],{"class":622},[52,32437,32232],{"class":62},[52,32439,27627],{"class":90},[52,32441,32442,32444,32447],{"class":54,"line":5582},[52,32443,31669],{"class":90},[52,32445,32446],{"class":62}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[52,32448,27627],{"class":90},[52,32450,32451,32453],{"class":54,"line":10904},[52,32452,32203],{"class":90},[52,32454,27627],{"class":90},[52,32456,32457],{"class":54,"line":10928},[52,32458,31675],{"class":62},[52,32460,32461],{"class":54,"line":10933},[52,32462,116],{"emptyLinePlaceholder":115},[52,32464,32465,32467,32469,32471],{"class":54,"line":10939},[52,32466,29491],{"class":58},[52,32468,32107],{"class":62},[52,32470,31666],{"class":62},[52,32472,27627],{"class":90},[52,32474,32475,32477,32479],{"class":54,"line":10966},[52,32476,32229],{"class":622},[52,32478,32232],{"class":62},[52,32480,27627],{"class":90},[52,32482,32483,32485,32488],{"class":54,"line":10971},[52,32484,31669],{"class":90},[52,32486,32487],{"class":62}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[52,32489,27627],{"class":90},[52,32491,32492,32494],{"class":54,"line":10977},[52,32493,32203],{"class":90},[52,32495,27627],{"class":90},[52,32497,32498],{"class":54,"line":10989},[52,32499,31675],{"class":62},[52,32501,32502],{"class":54,"line":11001},[52,32503,116],{"emptyLinePlaceholder":115},[52,32505,32506,32508,32510,32512],{"class":54,"line":11013},[52,32507,29491],{"class":58},[52,32509,32107],{"class":62},[52,32511,31666],{"class":62},[52,32513,27627],{"class":90},[52,32515,32516,32518,32520],{"class":54,"line":12672},[52,32517,32229],{"class":622},[52,32519,32232],{"class":62},[52,32521,27627],{"class":90},[52,32523,32524,32526,32529],{"class":54,"line":12697},[52,32525,31669],{"class":90},[52,32527,32528],{"class":62}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[52,32530,27627],{"class":90},[52,32532,32533,32535],{"class":54,"line":12720},[52,32534,32203],{"class":90},[52,32536,27627],{"class":90},[52,32538,32539],{"class":54,"line":12744},[52,32540,31675],{"class":62},[52,32542,32543],{"class":54,"line":12749},[52,32544,116],{"emptyLinePlaceholder":115},[52,32546,32547,32549,32551,32553],{"class":54,"line":12754},[52,32548,29260],{"class":58},[52,32550,32107],{"class":62},[52,32552,31666],{"class":62},[52,32554,27627],{"class":90},[52,32556,32557,32559,32561],{"class":54,"line":12759},[52,32558,32229],{"class":622},[52,32560,32232],{"class":62},[52,32562,27627],{"class":90},[52,32564,32565,32567,32570],{"class":54,"line":12768},[52,32566,31669],{"class":90},[52,32568,32569],{"class":62}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[52,32571,27627],{"class":90},[52,32573,32574,32576],{"class":54,"line":12773},[52,32575,32203],{"class":90},[52,32577,27627],{"class":90},[52,32579,32580],{"class":54,"line":12779},[52,32581,31675],{"class":62},[52,32583,32584],{"class":54,"line":12800},[52,32585,116],{"emptyLinePlaceholder":115},[52,32587,32588,32591,32593,32595],{"class":54,"line":12806},[52,32589,32590],{"class":58},"  docker",[52,32592,32107],{"class":62},[52,32594,31666],{"class":62},[52,32596,27627],{"class":90},[52,32598,32599,32601,32603],{"class":54,"line":12820},[52,32600,32229],{"class":622},[52,32602,32232],{"class":62},[52,32604,27627],{"class":90},[52,32606,32607,32609,32612],{"class":54,"line":12826},[52,32608,31669],{"class":90},[52,32610,32611],{"class":62}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[52,32613,27627],{"class":90},[52,32615,32616,32618],{"class":54,"line":12853},[52,32617,32203],{"class":90},[52,32619,27627],{"class":90},[52,32621,32622],{"class":54,"line":12862},[52,32623,31675],{"class":62},[274,32625,32626],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[274,32628,32629],{},[280,32630],{"alt":28,"src":32631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[274,32633,32634],{},[280,32635],{"alt":28,"src":32636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[1486,32638,32640],{"id":32639},"_623清除构建缓存","6.2.3.清除构建缓存",[19,32642,32644],{"className":26774,"code":32643,"language":26776,"meta":28,"style":28},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[26,32645,32646,32651],{"__ignoreMap":28},[52,32647,32648],{"class":54,"line":55},[52,32649,32650],{"class":332},"# 清理BuildKit构建缓存\n",[52,32652,32653,32655,32658,32661],{"class":54,"line":69},[52,32654,29491],{"class":58},[52,32656,32657],{"class":62}," builder",[52,32659,32660],{"class":62}," prune",[52,32662,32663],{"class":90}," -f\n",[274,32665,32666],{},[280,32667],{"alt":28,"src":32668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[30,32670,32672],{"id":32671},"_63补充","6.3.补充",[1486,32674,32676],{"id":32675},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[274,32678,32679],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[274,32681,32682],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[274,32684,32685],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[19,32687,32689],{"className":26774,"code":32688,"language":26776,"meta":28,"style":28},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[26,32690,32691,32698],{"__ignoreMap":28},[52,32692,32693,32695],{"class":54,"line":55},[52,32694,30305],{"class":58},[52,32696,32697],{"class":62}," nginx\n",[52,32699,32700,32702,32705,32708,32710],{"class":54,"line":69},[52,32701,31489],{"class":58},[52,32703,32704],{"class":62}," echo",[52,32706,32707],{"class":62}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[52,32709,29165],{"class":160},[52,32711,32712],{"class":62}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[274,32714,32715],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[274,32717,32718],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[19,32720,32722],{"className":26774,"code":32721,"language":26776,"meta":28,"style":28},"docker build -t nginx:tuling .\n",[26,32723,32724],{"__ignoreMap":28},[52,32725,32726,32728,32730,32732,32735],{"class":54,"line":55},[52,32727,29491],{"class":58},[52,32729,31666],{"class":62},[52,32731,31669],{"class":90},[52,32733,32734],{"class":62}," nginx:tuling",[52,32736,31675],{"class":62},[274,32738,32739],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[274,32741,32742],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[19,32744,32746],{"className":26774,"code":32745,"language":26776,"meta":28,"style":28},"docker run -d -p 92:80 nginx:tuling\n",[26,32747,32748],{"__ignoreMap":28},[52,32749,32750,32752,32754,32757,32759,32762],{"class":54,"line":55},[52,32751,29491],{"class":58},[52,32753,2033],{"class":62},[52,32755,32756],{"class":90}," -d",[52,32758,1863],{"class":90},[52,32760,32761],{"class":62}," 92:80",[52,32763,32764],{"class":62}," nginx:tuling\n",[274,32766,32767,32768],{},"4、访问 ",[300,32769,32772],{"href":32770,"rel":32771},"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",[304],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[274,32774,32775],{},[280,32776],{"alt":28,"src":32777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[274,32779,32780],{},[280,32781],{"alt":28,"src":32782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[1486,32784,32786],{"id":32785},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[274,32788,32789],{},"只需要知道大体流程即可",[274,32791,32792],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[274,32794,32795],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[274,32797,32798],{},"2、在Dockerfile中添加以下内容",[19,32800,32802],{"className":29034,"code":32801,"language":29036,"meta":28,"style":28},"# 基于哪个镜像\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",[26,32803,32804,32809,32814,32819,32824,32829,32834,32839],{"__ignoreMap":28},[52,32805,32806],{"class":54,"line":55},[52,32807,32808],{},"# 基于哪个镜像\n",[52,32810,32811],{"class":54,"line":69},[52,32812,32813],{},"From java:8\n",[52,32815,32816],{"class":54,"line":82},[52,32817,32818],{},"# 复制文件到容器\n",[52,32820,32821],{"class":54,"line":97},[52,32822,32823],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[52,32825,32826],{"class":54,"line":112},[52,32827,32828],{},"# 声明需要暴露的端口\n",[52,32830,32831],{"class":54,"line":119},[52,32832,32833],{},"EXPOSE 8877\n",[52,32835,32836],{"class":54,"line":130},[52,32837,32838],{},"# 配置容器启动后执行的命令\n",[52,32840,32841],{"class":54,"line":136},[52,32842,32843],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[274,32845,32846],{},"3、使用docker build命令构建镜像",[19,32848,32850],{"className":26774,"code":32849,"language":26776,"meta":28,"style":28},"docker build -t tulingmall-member:0.0.5 .\n",[26,32851,32852],{"__ignoreMap":28},[52,32853,32854,32856,32858,32860,32863],{"class":54,"line":55},[52,32855,29491],{"class":58},[52,32857,31666],{"class":62},[52,32859,31669],{"class":90},[52,32861,32862],{"class":62}," tulingmall-member:0.0.5",[52,32864,31675],{"class":62},[274,32866,32867],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[274,32869,32870],{},[280,32871],{"alt":28,"src":32872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[274,32874,32875],{},"4、启动镜像，加-d可在后台启动",[19,32877,32879],{"className":26774,"code":32878,"language":26776,"meta":28,"style":28},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[26,32880,32881],{"__ignoreMap":28},[52,32882,32883,32885,32887,32889,32891,32894],{"class":54,"line":55},[52,32884,29491],{"class":58},[52,32886,2033],{"class":62},[52,32888,32756],{"class":90},[52,32890,1863],{"class":90},[52,32892,32893],{"class":62}," 8877:8877",[52,32895,32896],{"class":62}," tulingmall-member:0.0.5\n",[274,32898,32899],{},"加上JVM参数：",[19,32901,32903],{"className":26774,"code":32902,"language":26776,"meta":28,"style":28},"# --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",[26,32904,32905,32910,32925,32935,32944,32951],{"__ignoreMap":28},[52,32906,32907],{"class":54,"line":55},[52,32908,32909],{"class":332},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[52,32911,32912,32914,32916,32919,32921,32923],{"class":54,"line":69},[52,32913,29491],{"class":58},[52,32915,2033],{"class":62},[52,32917,32918],{"class":90},"  -d",[52,32920,1863],{"class":90},[52,32922,32893],{"class":62},[52,32924,27627],{"class":90},[52,32926,32927,32929,32932],{"class":54,"line":82},[52,32928,31062],{"class":622},[52,32930,32931],{"class":62},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[52,32933,32934],{"class":90},"  \\\n",[52,32936,32937,32939,32942],{"class":54,"line":97},[52,32938,31062],{"class":622},[52,32940,32941],{"class":62},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[52,32943,32934],{"class":90},[52,32945,32946,32949],{"class":54,"line":112},[52,32947,32948],{"class":622},"--cap-add=SYS_PTRACE  ",[52,32950,29118],{"class":90},[52,32952,32953],{"class":54,"line":119},[52,32954,32955],{"class":622},"tulingmall-member:0.0.5\n",[274,32957,32958],{},"5、访问会员服务接口",[274,32960,32961],{},[280,32962],{"alt":28,"src":32963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[1486,32965,32967],{"id":32966},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[274,32969,32970],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[274,32972,32973,32974],{},"阿里云docker镜像仓库：",[300,32975,32976],{"href":32976,"rel":32977},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[304],[274,32979,32980],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[274,32982,32983],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[274,32985,32986],{},[280,32987],{"alt":28,"src":32988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[274,32990,32991],{},"要把镜像推送到镜像仓库",[19,32993,32995],{"className":26774,"code":32994,"language":26776,"meta":28,"style":28},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,32996,32997],{"__ignoreMap":28},[52,32998,32999,33001,33003,33005],{"class":54,"line":55},[52,33000,29491],{"class":58},[52,33002,31831],{"class":62},[52,33004,32862],{"class":62},[52,33006,33007],{"class":62}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[274,33009,33010],{},"最后将镜像推送到远程仓库",[19,33012,33014],{"className":26774,"code":33013,"language":26776,"meta":28,"style":28},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[26,33015,33016],{"__ignoreMap":28},[52,33017,33018,33020,33022],{"class":54,"line":55},[52,33019,29491],{"class":58},[52,33021,31950],{"class":62},[52,33023,33007],{"class":62},[3015,33025,33026],{},"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":28,"searchDepth":69,"depth":69,"links":33028},[33029,33030,33031],{"id":31417,"depth":82,"text":31418},{"id":31646,"depth":82,"text":31647},{"id":32671,"depth":82,"text":32672},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":31409,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":33038,"title":33039,"body":33040,"description":28,"extension":3047,"meta":33182,"navigation":115,"path":33183,"seo":33184,"stem":33185,"__hash__":33186},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":33041,"toc":33180},[33042,33045,33050,33055,33058,33063,33068,33071,33076,33081,33084,33089,33092,33095,33098,33101,33104,33107,33127,33149,33152,33155,33174,33177],[10,33043,33039],{"id":33044},"_7vscode远程开发",[1070,33046,33047],{},[1073,33048,33049],{},"插件1：微软Docker工具",[274,33051,33052],{},[280,33053],{"alt":28,"src":33054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[274,33056,33057],{},"docker扩展插件已经进化为container tools了，请安装container tools",[274,33059,33060],{},[280,33061],{"alt":28,"src":33062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1070,33064,33065],{"start":69},[1073,33066,33067],{},"插件2：微软Docker远程开发工具",[274,33069,33070],{},"下面这是远程开发的插件。",[274,33072,33073],{},[280,33074],{"alt":28,"src":33075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[274,33077,33078],{},[280,33079],{"alt":28,"src":33080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[274,33082,33083],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[274,33085,33086],{},[280,33087],{"alt":28,"src":33088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[274,33090,33091],{},"安装完拓展之后，vscode进行链接：",[274,33093,33094],{},"1.按ctrl+shift+p",[274,33096,33097],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[274,33099,33100],{},"3.选择目前运行的容器",[274,33102,33103],{},"4.VS Code 会在新窗口中打开并连接到容器",[274,33105,33106],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[19,33108,33110],{"className":26774,"code":33109,"language":26776,"meta":28,"style":28},"docker run -v 主机目录:容器目录 image-name\n",[26,33111,33112],{"__ignoreMap":28},[52,33113,33114,33116,33118,33121,33124],{"class":54,"line":55},[52,33115,29491],{"class":58},[52,33117,2033],{"class":62},[52,33119,33120],{"class":90}," -v",[52,33122,33123],{"class":62}," 主机目录:容器目录",[52,33125,33126],{"class":62}," image-name\n",[19,33128,33130],{"className":26774,"code":33129,"language":26776,"meta":28,"style":28},"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",[26,33131,33132],{"__ignoreMap":28},[52,33133,33134,33136,33138,33141,33143,33146],{"class":54,"line":55},[52,33135,29491],{"class":58},[52,33137,2033],{"class":62},[52,33139,33140],{"class":90}," -it",[52,33142,33120],{"class":90},[52,33144,33145],{"class":62}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[52,33147,33148],{"class":62}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[274,33150,33151],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[274,33153,33154],{},"查看挂载情况：",[19,33156,33158],{"className":26774,"code":33157,"language":26776,"meta":28,"style":28},"mount | grep -i project\n",[26,33159,33160],{"__ignoreMap":28},[52,33161,33162,33165,33167,33169,33171],{"class":54,"line":55},[52,33163,33164],{"class":58},"mount",[52,33166,2379],{"class":160},[52,33168,2382],{"class":58},[52,33170,1374],{"class":90},[52,33172,33173],{"class":62}," project\n",[274,33175,33176],{},"也可以通过ls来进行查看",[3015,33178,33179],{},"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":28,"searchDepth":69,"depth":69,"links":33181},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":33039,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":33188,"title":33189,"body":33190,"description":3046,"extension":3047,"meta":33194,"navigation":115,"path":33196,"seo":33197,"stem":33198,"__hash__":33199},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":33191,"toc":33192},[],{"title":28,"searchDepth":69,"depth":69,"links":33193},[],{"category":33195},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":33189,"description":3046},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":33201,"title":33202,"body":33203,"description":3046,"extension":3047,"meta":33207,"navigation":115,"path":33208,"seo":33209,"stem":33210,"__hash__":33211},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":33204,"toc":33205},[],{"title":28,"searchDepth":69,"depth":69,"links":33206},[],{"category":33195},"\u002Fwiki\u002F2025-11-10-k8s",{"title":33202,"description":3046},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":33213,"title":33214,"body":33215,"description":3046,"extension":3047,"meta":33508,"navigation":115,"path":33509,"seo":33510,"stem":33511,"__hash__":33512},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":33216,"toc":33506},[33217,33220,33228,33243,33248,33299,33302,33308,33495,33500,33503],[10,33218,33214],{"id":33219},"_1验证深度学习环境",[274,33221,33222,33223],{},"关于环境的安装，看",[300,33224,33227],{"href":33225,"rel":33226},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[304],"Pytorch-->深度学习",[274,33229,33230,33231,33234,33235,33238,33239,33242],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[26,33232,33233],{},"pytorch-cuda=12.4"," 是一个“ ",[538,33236,33237],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[538,33240,33241],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[274,33244,33245],{},[280,33246],{"alt":28,"src":33247},"\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",[19,33249,33251],{"className":26774,"code":33250,"language":26776,"meta":28,"style":28},"# 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",[26,33252,33253,33258],{"__ignoreMap":28},[52,33254,33255],{"class":54,"line":55},[52,33256,33257],{"class":332},"# CUDA 12.4\n",[52,33259,33260,33263,33265,33268,33271,33274,33277,33280,33282,33285,33288,33291,33294,33296],{"class":54,"line":69},[52,33261,33262],{"class":58},"conda",[52,33264,76],{"class":62},[52,33266,33267],{"class":62}," pytorch==",[52,33269,33270],{"class":90},"2.5.1",[52,33272,33273],{"class":62}," torchvision==",[52,33275,33276],{"class":90},"0.20.1",[52,33278,33279],{"class":62}," torchaudio==",[52,33281,33270],{"class":90},[52,33283,33284],{"class":62}," pytorch-cuda=",[52,33286,33287],{"class":90},"12.4",[52,33289,33290],{"class":90}," -c",[52,33292,33293],{"class":62}," pytorch",[52,33295,33290],{"class":90},[52,33297,33298],{"class":62}," nvidia\n",[274,33300,33301],{},"）：",[274,33303,33304],{},[300,33305,33306],{"href":33306,"rel":33307},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[304],[19,33309,33313],{"className":33310,"code":33311,"language":33312,"meta":28,"style":28},"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",[26,33314,33315,33320,33328,33333,33343,33359,33364,33374,33411,33418,33430,33446,33451,33461,33473,33483],{"__ignoreMap":28},[52,33316,33317],{"class":54,"line":55},[52,33318,33319],{"class":332},"# 对深度学习环境进行测试\n",[52,33321,33322,33325],{"class":54,"line":69},[52,33323,33324],{"class":160},"import",[52,33326,33327],{"class":622}," torch\n",[52,33329,33330],{"class":54,"line":82},[52,33331,33332],{"class":332},"# 查看cuda是否被激活\n",[52,33334,33335,33338,33340],{"class":54,"line":97},[52,33336,33337],{"class":622},"flag",[52,33339,2099],{"class":160},[52,33341,33342],{"class":622},"torch.cuda.is_available()\n",[52,33344,33345,33348,33350,33353,33356],{"class":54,"line":112},[52,33346,33347],{"class":90},"print",[52,33349,3121],{"class":622},[52,33351,33352],{"class":62},"\"cuda:\"",[52,33354,33355],{"class":622},", flag)   ",[52,33357,33358],{"class":332},"#返回true的话说明被激活\n",[52,33360,33361],{"class":54,"line":119},[52,33362,33363],{"class":332},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[52,33365,33366,33369,33371],{"class":54,"line":130},[52,33367,33368],{"class":622},"ngpu",[52,33370,2099],{"class":160},[52,33372,33373],{"class":90},"1\n",[52,33375,33376,33379,33381,33384,33387,33389,33392,33395,33398,33400,33402,33404,33406,33409],{"class":54,"line":136},[52,33377,33378],{"class":622},"device",[52,33380,2099],{"class":160},[52,33382,33383],{"class":622},"torch.device(",[52,33385,33386],{"class":62},"\"cuda:0\"",[52,33388,4671],{"class":160},[52,33390,33391],{"class":622},"(torch.cuda.is_available() ",[52,33393,33394],{"class":160},"and",[52,33396,33397],{"class":622}," ngpu",[52,33399,4072],{"class":160},[52,33401,3306],{"class":90},[52,33403,16670],{"class":622},[52,33405,4668],{"class":160},[52,33407,33408],{"class":62}," \"cpu\"",[52,33410,170],{"class":622},[52,33412,33413,33415],{"class":54,"line":141},[52,33414,33347],{"class":90},[52,33416,33417],{"class":622},"(device)\n",[52,33419,33420,33422,33425,33427],{"class":54,"line":146},[52,33421,33347],{"class":90},[52,33423,33424],{"class":622},"(torch.cuda.get_device_name(",[52,33426,3306],{"class":90},[52,33428,33429],{"class":622},"))\n",[52,33431,33432,33434,33437,33439,33441,33443],{"class":54,"line":152},[52,33433,33347],{"class":90},[52,33435,33436],{"class":622},"(torch.rand(",[52,33438,3188],{"class":90},[52,33440,3491],{"class":622},[52,33442,3188],{"class":90},[52,33444,33445],{"class":622},").cuda())\n",[52,33447,33448],{"class":54,"line":157},[52,33449,33450],{"class":332},"# 查看cuda和cudnn的版本\n",[52,33452,33453,33456,33458],{"class":54,"line":173},[52,33454,33455],{"class":622},"cuda_version",[52,33457,2099],{"class":160},[52,33459,33460],{"class":622},"torch.version.cuda\n",[52,33462,33463,33465,33467,33470],{"class":54,"line":178},[52,33464,33347],{"class":90},[52,33466,3121],{"class":622},[52,33468,33469],{"class":62},"\"cuda version\"",[52,33471,33472],{"class":622},",cuda_version)\n",[52,33474,33475,33478,33480],{"class":54,"line":184},[52,33476,33477],{"class":622},"cudnn_version",[52,33479,2099],{"class":160},[52,33481,33482],{"class":622},"torch.backends.cudnn.version()\n",[52,33484,33485,33487,33489,33492],{"class":54,"line":189},[52,33486,33347],{"class":90},[52,33488,3121],{"class":622},[52,33490,33491],{"class":62},"\"cudnn version\"",[52,33493,33494],{"class":622},",cudnn_version)\n",[274,33496,33497],{},[280,33498],{"alt":28,"src":33499},"\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",[274,33501,33502],{},"cuda:0 指的是一块显卡",[3015,33504,33505],{},"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":28,"searchDepth":69,"depth":69,"links":33507},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":33214,"description":3046},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":33514,"title":33515,"body":33516,"description":3046,"extension":3047,"meta":53319,"navigation":115,"path":53320,"seo":53321,"stem":53322,"__hash__":53323},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":33517,"toc":53313},[33518,33521,33525,33529,33532,33537,33542,33545,33550,33555,33560,33563,33567,33572,33576,33581,33584,33589,33592,33595,33598,33601,33606,33609,33614,33619,33624,33629,33632,33636,33639,33644,34248,34253,34256,34261,34264,34267,34731,34734,34737,34740,34743,36794,36797,36802,36807,37602,37605,37610,38388,38392,40051,40055,40769,40773,40777,40782,40787,40792,40795,40800,40805,40810,40815,40820,40824,40829,42111,42116,42119,42122,42125,42280,42283,42286,43502,43507,44202,44206,44210,44215,44220,44223,44228,44233,44238,44243,44248,44253,44258,44263,44268,44273,44278,44283,44288,44293,44298,44303,44308,44313,44318,44323,44328,44333,44338,44343,44348,44353,44358,44363,44368,44373,44377,44381,44384,45862,45866,47513,47517,48211,48215,48218,48221,48765,48768,48772,48775,50172,50176,50179,50756,52543,52547,52550,53310],[10,33519,33515],{"id":33520},"_2经典神经网络",[30,33522,33524],{"id":33523},"_21lenet与alexnet","2.1.LeNet与AlexNet",[1486,33526,33528],{"id":33527},"_211原理介绍","2.1.1.原理介绍",[274,33530,33531],{},"LeNet-5",[1070,33533,33534],{},[1073,33535,33536],{},"原理",[274,33538,33539],{},[280,33540],{"alt":28,"src":33541},"\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",[274,33543,33544],{},"B是batch批次；C是channel通道",[1070,33546,33547],{"start":69},[1073,33548,33549],{},"网络参数详细",[274,33551,33552],{},[280,33553],{"alt":28,"src":33554},"\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",[274,33556,33557],{},[280,33558],{"alt":28,"src":33559},"\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",[274,33561,33562],{},"AlexNet",[1070,33564,33565],{},[1073,33566,33536],{},[274,33568,33569],{},[280,33570],{"alt":28,"src":33571},"\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",[1070,33573,33574],{"start":69},[1073,33575,33549],{},[274,33577,33578],{},[280,33579],{"alt":28,"src":33580},"\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",[274,33582,33583],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[274,33585,33586],{},[280,33587],{"alt":28,"src":33588},"\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",[274,33590,33591],{},"数据处理中的图像增强操作:",[274,33593,33594],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[274,33596,33597],{},"①增加数据量，保证训练数据充足；②防止过拟合",[274,33599,33600],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[274,33602,33603],{},[280,33604],{"alt":28,"src":33605},"\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",[274,33607,33608],{},"提升网络精确度的方法：LRN正则化",[274,33610,33611],{},[280,33612],{"alt":28,"src":33613},"\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",[274,33615,33616],{},[280,33617],{"alt":28,"src":33618},"\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",[1070,33620,33621],{"start":82},[1073,33622,33623],{},"AlexNet的总结",[274,33625,33626],{},[280,33627],{"alt":28,"src":33628},"\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",[274,33630,33631],{},"比LeNet模型要深一丢丢",[1486,33633,33635],{"id":33634},"_212代码实现","2.1.2.代码实现",[274,33637,33638],{},"（1）LeNet",[1070,33640,33641],{},[1073,33642,33643],{},"模型搭建",[19,33645,33647],{"className":33310,"code":33646,"language":33312,"meta":28,"style":28},"# 导入库\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",[26,33648,33649,33654,33660,33665,33678,33683,33695,33699,33719,33724,33729,33740,33745,33764,33768,33773,33822,33834,33839,33868,33903,33930,33935,33947,33952,33972,33991,34010,34014,34019,34029,34046,34057,34072,34083,34094,34109,34124,34135,34142,34146,34160,34165,34188,34193,34198,34203,34207,34212,34217,34227],{"__ignoreMap":28},[52,33650,33651],{"class":54,"line":55},[52,33652,33653],{"class":332},"# 导入库\n",[52,33655,33656,33658],{"class":54,"line":69},[52,33657,33324],{"class":160},[52,33659,33327],{"class":622},[52,33661,33662],{"class":54,"line":82},[52,33663,33664],{"class":332},"# 导入神经网络层\n",[52,33666,33667,33670,33673,33675],{"class":54,"line":97},[52,33668,33669],{"class":160},"from",[52,33671,33672],{"class":622}," torch ",[52,33674,33324],{"class":160},[52,33676,33677],{"class":622}," nn\n",[52,33679,33680],{"class":54,"line":112},[52,33681,33682],{"class":332},"# 导入展示神经网络参数的包\n",[52,33684,33685,33687,33690,33692],{"class":54,"line":119},[52,33686,33669],{"class":160},[52,33688,33689],{"class":622}," torchsummary ",[52,33691,33324],{"class":160},[52,33693,33694],{"class":622}," summary\n",[52,33696,33697],{"class":54,"line":130},[52,33698,116],{"emptyLinePlaceholder":115},[52,33700,33701,33703,33706,33708,33711,33713,33716],{"class":54,"line":136},[52,33702,17650],{"class":160},[52,33704,33705],{"class":58}," LeNet",[52,33707,3121],{"class":622},[52,33709,33710],{"class":58},"nn",[52,33712,3670],{"class":622},[52,33714,33715],{"class":58},"Module",[52,33717,33718],{"class":622},"):\n",[52,33720,33721],{"class":54,"line":141},[52,33722,33723],{"class":332},"    # 模型初始化:\n",[52,33725,33726],{"class":54,"line":146},[52,33727,33728],{"class":332},"    # 定义一些网络层和激活函数\n",[52,33730,33731,33734,33737],{"class":54,"line":152},[52,33732,33733],{"class":160},"    def",[52,33735,33736],{"class":90}," __init__",[52,33738,33739],{"class":622},"(self):\n",[52,33741,33742],{"class":54,"line":157},[52,33743,33744],{"class":332},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[52,33746,33747,33750,33753,33756,33759,33762],{"class":54,"line":173},[52,33748,33749],{"class":90},"        super",[52,33751,33752],{"class":622},"(LeNet,",[52,33754,33755],{"class":90},"self",[52,33757,33758],{"class":622},").",[52,33760,33761],{"class":90},"__init__",[52,33763,4938],{"class":622},[52,33765,33766],{"class":54,"line":178},[52,33767,116],{"emptyLinePlaceholder":115},[52,33769,33770],{"class":54,"line":184},[52,33771,33772],{"class":332},"        # 定义网络层\n",[52,33774,33775,33778,33781,33783,33786,33789,33791,33793,33795,33798,33800,33802,33804,33807,33809,33811,33813,33816,33818,33820],{"class":54,"line":189},[52,33776,33777],{"class":90},"        self",[52,33779,33780],{"class":622},".c1",[52,33782,2099],{"class":160},[52,33784,33785],{"class":622},"nn.Conv2d(",[52,33787,33788],{"class":8172},"in_channels",[52,33790,2099],{"class":160},[52,33792,3332],{"class":90},[52,33794,3491],{"class":622},[52,33796,33797],{"class":8172},"out_channels",[52,33799,2099],{"class":160},[52,33801,3457],{"class":90},[52,33803,3491],{"class":622},[52,33805,33806],{"class":8172},"kernel_size",[52,33808,2099],{"class":160},[52,33810,3432],{"class":90},[52,33812,3491],{"class":622},[52,33814,33815],{"class":8172},"padding",[52,33817,2099],{"class":160},[52,33819,3194],{"class":90},[52,33821,170],{"class":622},[52,33823,33824,33826,33829,33831],{"class":54,"line":201},[52,33825,33777],{"class":90},[52,33827,33828],{"class":622},".sig",[52,33830,2099],{"class":160},[52,33832,33833],{"class":622},"nn.Sigmoid()\n",[52,33835,33836],{"class":54,"line":206},[52,33837,33838],{"class":332},"        # 定义池化\n",[52,33840,33841,33843,33846,33848,33851,33853,33855,33857,33859,33862,33864,33866],{"class":54,"line":224},[52,33842,33777],{"class":90},[52,33844,33845],{"class":622},".s2",[52,33847,2099],{"class":160},[52,33849,33850],{"class":622},"nn.AvgPool2d(",[52,33852,33806],{"class":8172},[52,33854,2099],{"class":160},[52,33856,3194],{"class":90},[52,33858,3491],{"class":622},[52,33860,33861],{"class":8172},"stride",[52,33863,2099],{"class":160},[52,33865,3194],{"class":90},[52,33867,170],{"class":622},[52,33869,33870,33872,33875,33877,33879,33881,33883,33885,33887,33889,33891,33893,33895,33897,33899,33901],{"class":54,"line":229},[52,33871,33777],{"class":90},[52,33873,33874],{"class":622},".c3",[52,33876,2099],{"class":160},[52,33878,33785],{"class":622},[52,33880,33788],{"class":8172},[52,33882,2099],{"class":160},[52,33884,3457],{"class":90},[52,33886,3491],{"class":622},[52,33888,33797],{"class":8172},[52,33890,2099],{"class":160},[52,33892,3713],{"class":90},[52,33894,3491],{"class":622},[52,33896,33806],{"class":8172},[52,33898,2099],{"class":160},[52,33900,3432],{"class":90},[52,33902,170],{"class":622},[52,33904,33905,33907,33910,33912,33914,33916,33918,33920,33922,33924,33926,33928],{"class":54,"line":241},[52,33906,33777],{"class":90},[52,33908,33909],{"class":622},".s4",[52,33911,2099],{"class":160},[52,33913,33850],{"class":622},[52,33915,33806],{"class":8172},[52,33917,2099],{"class":160},[52,33919,3194],{"class":90},[52,33921,3491],{"class":622},[52,33923,33861],{"class":8172},[52,33925,2099],{"class":160},[52,33927,3194],{"class":90},[52,33929,170],{"class":622},[52,33931,33932],{"class":54,"line":246},[52,33933,33934],{"class":332},"        # 定义平展层\n",[52,33936,33937,33939,33942,33944],{"class":54,"line":252},[52,33938,33777],{"class":90},[52,33940,33941],{"class":622},".flatten",[52,33943,2099],{"class":160},[52,33945,33946],{"class":622},"nn.Flatten()\n",[52,33948,33949],{"class":54,"line":257},[52,33950,33951],{"class":332},"        # 定义全连接层\n",[52,33953,33954,33956,33959,33961,33964,33966,33968,33970],{"class":54,"line":266},[52,33955,33777],{"class":90},[52,33957,33958],{"class":622},".f5",[52,33960,2099],{"class":160},[52,33962,33963],{"class":622},"nn.Linear(",[52,33965,6946],{"class":90},[52,33967,3491],{"class":622},[52,33969,3929],{"class":90},[52,33971,170],{"class":622},[52,33973,33974,33976,33979,33981,33983,33985,33987,33989],{"class":54,"line":4722},[52,33975,33777],{"class":90},[52,33977,33978],{"class":622},".f6",[52,33980,2099],{"class":160},[52,33982,33963],{"class":622},[52,33984,3929],{"class":90},[52,33986,3491],{"class":622},[52,33988,3823],{"class":90},[52,33990,170],{"class":622},[52,33992,33993,33995,33998,34000,34002,34004,34006,34008],{"class":54,"line":4727},[52,33994,33777],{"class":90},[52,33996,33997],{"class":622},".f7",[52,33999,2099],{"class":160},[52,34001,33963],{"class":622},[52,34003,3823],{"class":90},[52,34005,3491],{"class":622},[52,34007,3559],{"class":90},[52,34009,170],{"class":622},[52,34011,34012],{"class":54,"line":4741},[52,34013,116],{"emptyLinePlaceholder":115},[52,34015,34016],{"class":54,"line":4746},[52,34017,34018],{"class":332},"    # 写工具->写前向传播\n",[52,34020,34021,34023,34026],{"class":54,"line":5538},[52,34022,33733],{"class":160},[52,34024,34025],{"class":58}," forward",[52,34027,34028],{"class":622},"(self,x):\n",[52,34030,34031,34034,34036,34038,34041,34043],{"class":54,"line":5552},[52,34032,34033],{"class":622},"        x",[52,34035,2099],{"class":160},[52,34037,33755],{"class":90},[52,34039,34040],{"class":622},".sig(",[52,34042,33755],{"class":90},[52,34044,34045],{"class":622},".c1(x))\n",[52,34047,34048,34050,34052,34054],{"class":54,"line":5560},[52,34049,34033],{"class":622},[52,34051,2099],{"class":160},[52,34053,33755],{"class":90},[52,34055,34056],{"class":622},".s2(x)\n",[52,34058,34059,34061,34063,34065,34067,34069],{"class":54,"line":5565},[52,34060,34033],{"class":622},[52,34062,2099],{"class":160},[52,34064,33755],{"class":90},[52,34066,34040],{"class":622},[52,34068,33755],{"class":90},[52,34070,34071],{"class":622},".c3(x))\n",[52,34073,34074,34076,34078,34080],{"class":54,"line":5571},[52,34075,34033],{"class":622},[52,34077,2099],{"class":160},[52,34079,33755],{"class":90},[52,34081,34082],{"class":622},".s4(x)\n",[52,34084,34085,34087,34089,34091],{"class":54,"line":5577},[52,34086,34033],{"class":622},[52,34088,2099],{"class":160},[52,34090,33755],{"class":90},[52,34092,34093],{"class":622},".flatten(x)\n",[52,34095,34096,34098,34100,34102,34104,34106],{"class":54,"line":5582},[52,34097,34033],{"class":622},[52,34099,2099],{"class":160},[52,34101,33755],{"class":90},[52,34103,34040],{"class":622},[52,34105,33755],{"class":90},[52,34107,34108],{"class":622},".f5(x))\n",[52,34110,34111,34113,34115,34117,34119,34121],{"class":54,"line":10904},[52,34112,34033],{"class":622},[52,34114,2099],{"class":160},[52,34116,33755],{"class":90},[52,34118,34040],{"class":622},[52,34120,33755],{"class":90},[52,34122,34123],{"class":622},".f6(x))\n",[52,34125,34126,34128,34130,34132],{"class":54,"line":10928},[52,34127,34033],{"class":622},[52,34129,2099],{"class":160},[52,34131,33755],{"class":90},[52,34133,34134],{"class":622},".f7(x)\n",[52,34136,34137,34139],{"class":54,"line":10933},[52,34138,17708],{"class":160},[52,34140,34141],{"class":622}," x\n",[52,34143,34144],{"class":54,"line":10939},[52,34145,116],{"emptyLinePlaceholder":115},[52,34147,34148,34150,34153,34155,34158],{"class":54,"line":10966},[52,34149,4509],{"class":160},[52,34151,34152],{"class":90}," __name__",[52,34154,5909],{"class":160},[52,34156,34157],{"class":62},"\"__main__\"",[52,34159,6698],{"class":622},[52,34161,34162],{"class":54,"line":10971},[52,34163,34164],{"class":332},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[52,34166,34167,34170,34172,34174,34177,34179,34182,34184,34186],{"class":54,"line":10977},[52,34168,34169],{"class":622},"    device",[52,34171,2099],{"class":160},[52,34173,33383],{"class":622},[52,34175,34176],{"class":62},"\"cuda\"",[52,34178,4671],{"class":160},[52,34180,34181],{"class":622}," torch.cuda.is_available() ",[52,34183,4668],{"class":160},[52,34185,33408],{"class":62},[52,34187,170],{"class":622},[52,34189,34190],{"class":54,"line":10989},[52,34191,34192],{"class":332},"    # 如果就是想指定用cpu用下方代码:\n",[52,34194,34195],{"class":54,"line":11001},[52,34196,34197],{"class":332},"    # device=\"cpu\"\n",[52,34199,34200],{"class":54,"line":11013},[52,34201,34202],{"class":332},"    # print(device)\n",[52,34204,34205],{"class":54,"line":12672},[52,34206,116],{"emptyLinePlaceholder":115},[52,34208,34209],{"class":54,"line":12697},[52,34210,34211],{"class":332},"    # 实例化模型\n",[52,34213,34214],{"class":54,"line":12720},[52,34215,34216],{"class":332},"    # 将模型放到设备中去运行\n",[52,34218,34219,34222,34224],{"class":54,"line":12744},[52,34220,34221],{"class":622},"    model",[52,34223,2099],{"class":160},[52,34225,34226],{"class":622},"LeNet().to(device)\n",[52,34228,34229,34232,34235,34237,34239,34241,34243,34245],{"class":54,"line":12749},[52,34230,34231],{"class":90},"    print",[52,34233,34234],{"class":622},"(summary(model,(",[52,34236,3332],{"class":90},[52,34238,3491],{"class":622},[52,34240,4013],{"class":90},[52,34242,3491],{"class":622},[52,34244,4013],{"class":90},[52,34246,34247],{"class":622},")))\n",[274,34249,34250],{},[280,34251],{"alt":28,"src":34252},"\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",[274,34254,34255],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1070,34257,34258],{"start":69},[1073,34259,34260],{},"训练",[274,34262,34263],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[274,34265,34266],{},"在训练之前可以将数据展示看一下",[19,34268,34270],{"className":33310,"code":34269,"language":33312,"meta":28,"style":28},"# 建立画图的函数，用于展示数据\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",[26,34271,34272,34277,34282,34294,34306,34319,34324,34336,34341,34353,34358,34370,34374,34378,34399,34411,34416,34437,34448,34452,34457,34475,34486,34491,34502,34507,34518,34522,34527,34542,34555,34560,34565,34578,34591,34604,34609,34613,34618,34638,34655,34675,34688,34701,34711,34726],{"__ignoreMap":28},[52,34273,34274],{"class":54,"line":55},[52,34275,34276],{"class":332},"# 建立画图的函数，用于展示数据\n",[52,34278,34279],{"class":54,"line":69},[52,34280,34281],{"class":332},"# torchvision中包含很多内置的数据集\n",[52,34283,34284,34286,34289,34291],{"class":54,"line":82},[52,34285,33669],{"class":160},[52,34287,34288],{"class":622}," sklearn.externals.array_api_compat.torch ",[52,34290,33324],{"class":160},[52,34292,34293],{"class":622}," squeeze\n",[52,34295,34296,34298,34301,34303],{"class":54,"line":97},[52,34297,33669],{"class":160},[52,34299,34300],{"class":622}," torchvision.datasets ",[52,34302,33324],{"class":160},[52,34304,34305],{"class":622}," FashionMNIST\n",[52,34307,34308,34310,34313,34316],{"class":54,"line":112},[52,34309,33324],{"class":160},[52,34311,34312],{"class":622}," numpy ",[52,34314,34315],{"class":160},"as",[52,34317,34318],{"class":622}," np\n",[52,34320,34321],{"class":54,"line":119},[52,34322,34323],{"class":332},"# 引入处理数据集的包\n",[52,34325,34326,34328,34331,34333],{"class":54,"line":130},[52,34327,33669],{"class":160},[52,34329,34330],{"class":622}," torchvision ",[52,34332,33324],{"class":160},[52,34334,34335],{"class":622}," transforms\n",[52,34337,34338],{"class":54,"line":136},[52,34339,34340],{"class":332},"# 从torch库中引入数据处理的包\n",[52,34342,34343,34345,34348,34350],{"class":54,"line":141},[52,34344,33324],{"class":160},[52,34346,34347],{"class":622}," torch.utils.data ",[52,34349,34315],{"class":160},[52,34351,34352],{"class":622}," Data\n",[52,34354,34355],{"class":54,"line":146},[52,34356,34357],{"class":332},"# 导入画图的库\n",[52,34359,34360,34362,34365,34367],{"class":54,"line":152},[52,34361,33324],{"class":160},[52,34363,34364],{"class":622}," matplotlib.pyplot ",[52,34366,34315],{"class":160},[52,34368,34369],{"class":622}," plt\n",[52,34371,34372],{"class":54,"line":157},[52,34373,116],{"emptyLinePlaceholder":115},[52,34375,34376],{"class":54,"line":173},[52,34377,116],{"emptyLinePlaceholder":115},[52,34379,34380,34383,34385,34388,34391,34393,34396],{"class":54,"line":178},[52,34381,34382],{"class":622},"train_data",[52,34384,2099],{"class":160},[52,34386,34387],{"class":622},"FashionMNIST(",[52,34389,34390],{"class":8172},"root",[52,34392,2099],{"class":160},[52,34394,34395],{"class":62},"'.\u002Fdata'",[52,34397,34398],{"class":622},",\n",[52,34400,34401,34404,34406,34409],{"class":54,"line":184},[52,34402,34403],{"class":8172},"                        train",[52,34405,2099],{"class":160},[52,34407,34408],{"class":90},"True",[52,34410,34398],{"class":622},[52,34412,34413],{"class":54,"line":189},[52,34414,34415],{"class":332},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[52,34417,34418,34421,34423,34426,34429,34431,34434],{"class":54,"line":201},[52,34419,34420],{"class":8172},"                        transform",[52,34422,2099],{"class":160},[52,34424,34425],{"class":622},"transforms.Compose([transforms.Resize(",[52,34427,34428],{"class":8172},"size",[52,34430,2099],{"class":160},[52,34432,34433],{"class":90},"224",[52,34435,34436],{"class":622},"),transforms.ToTensor()]),\n",[52,34438,34439,34442,34444,34446],{"class":54,"line":206},[52,34440,34441],{"class":8172},"                        download",[52,34443,2099],{"class":160},[52,34445,34408],{"class":90},[52,34447,170],{"class":622},[52,34449,34450],{"class":54,"line":224},[52,34451,116],{"emptyLinePlaceholder":115},[52,34453,34454],{"class":54,"line":229},[52,34455,34456],{"class":332},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[52,34458,34459,34462,34464,34467,34470,34472],{"class":54,"line":241},[52,34460,34461],{"class":622},"train_loader",[52,34463,2099],{"class":160},[52,34465,34466],{"class":622},"Data.DataLoader(",[52,34468,34469],{"class":8172},"dataset",[52,34471,2099],{"class":160},[52,34473,34474],{"class":622},"train_data,\n",[52,34476,34477,34480,34482,34484],{"class":54,"line":246},[52,34478,34479],{"class":8172},"                             batch_size",[52,34481,2099],{"class":160},[52,34483,3318],{"class":90},[52,34485,34398],{"class":622},[52,34487,34488],{"class":54,"line":252},[52,34489,34490],{"class":332},"                             # 数据是否打乱\n",[52,34492,34493,34496,34498,34500],{"class":54,"line":257},[52,34494,34495],{"class":8172},"                             shuffle",[52,34497,2099],{"class":160},[52,34499,34408],{"class":90},[52,34501,34398],{"class":622},[52,34503,34504],{"class":54,"line":266},[52,34505,34506],{"class":332},"                             # 规定加载数据的进程\n",[52,34508,34509,34512,34514,34516],{"class":54,"line":4722},[52,34510,34511],{"class":8172},"                             num_workers",[52,34513,2099],{"class":160},[52,34515,3306],{"class":90},[52,34517,170],{"class":622},[52,34519,34520],{"class":54,"line":4727},[52,34521,116],{"emptyLinePlaceholder":115},[52,34523,34524],{"class":54,"line":4741},[52,34525,34526],{"class":332},"# 获得一个batch的数据\n",[52,34528,34529,34531,34534,34536,34539],{"class":54,"line":4746},[52,34530,5985],{"class":160},[52,34532,34533],{"class":622}," step,(b_x,b_y) ",[52,34535,28988],{"class":160},[52,34537,34538],{"class":90}," enumerate",[52,34540,34541],{"class":622},"(train_loader):\n",[52,34543,34544,34546,34549,34551,34553],{"class":54,"line":5538},[52,34545,6060],{"class":160},[52,34547,34548],{"class":622}," step ",[52,34550,4072],{"class":160},[52,34552,7052],{"class":90},[52,34554,6698],{"class":622},[52,34556,34557],{"class":54,"line":5552},[52,34558,34559],{"class":160},"        break\n",[52,34561,34562],{"class":54,"line":5560},[52,34563,34564],{"class":332},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[52,34566,34567,34570,34572,34575],{"class":54,"line":5565},[52,34568,34569],{"class":622},"batch_x",[52,34571,2099],{"class":160},[52,34573,34574],{"class":622},"b_x.squeeze().numpy()  ",[52,34576,34577],{"class":332},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[52,34579,34580,34583,34585,34588],{"class":54,"line":5571},[52,34581,34582],{"class":622},"batch_y",[52,34584,2099],{"class":160},[52,34586,34587],{"class":622},"b_y.numpy()   ",[52,34589,34590],{"class":332},"#将张量转换成功numpy数组\n",[52,34592,34593,34596,34598,34601],{"class":54,"line":5577},[52,34594,34595],{"class":622},"class_label",[52,34597,2099],{"class":160},[52,34599,34600],{"class":622},"train_data.classes  ",[52,34602,34603],{"class":332},"#训练集标签\n",[52,34605,34606],{"class":54,"line":5582},[52,34607,34608],{"class":332},"# print(class_label)\n",[52,34610,34611],{"class":54,"line":10904},[52,34612,116],{"emptyLinePlaceholder":115},[52,34614,34615],{"class":54,"line":10928},[52,34616,34617],{"class":332},"# 可视化一个batch的图像\n",[52,34619,34620,34623,34626,34628,34630,34632,34634,34636],{"class":54,"line":10933},[52,34621,34622],{"class":622},"plt.figure(",[52,34624,34625],{"class":8172},"figsize",[52,34627,2099],{"class":160},[52,34629,3121],{"class":622},[52,34631,3610],{"class":90},[52,34633,3491],{"class":622},[52,34635,3432],{"class":90},[52,34637,33429],{"class":622},[52,34639,34640,34642,34645,34647,34650,34652],{"class":54,"line":10939},[52,34641,5985],{"class":160},[52,34643,34644],{"class":622}," ii ",[52,34646,28988],{"class":160},[52,34648,34649],{"class":622}," np.arange(",[52,34651,10314],{"class":90},[52,34653,34654],{"class":622},"(batch_y)):\n",[52,34656,34657,34660,34662,34664,34666,34669,34671,34673],{"class":54,"line":10966},[52,34658,34659],{"class":622},"    plt.subplot(",[52,34661,3406],{"class":90},[52,34663,3491],{"class":622},[52,34665,3713],{"class":90},[52,34667,34668],{"class":622},",ii ",[52,34670,3593],{"class":160},[52,34672,28064],{"class":90},[52,34674,170],{"class":622},[52,34676,34677,34680,34683,34685],{"class":54,"line":10971},[52,34678,34679],{"class":622},"    plt.imshow(batch_x[ii,:,:],",[52,34681,34682],{"class":8172},"cmap",[52,34684,2099],{"class":160},[52,34686,34687],{"class":622},"plt.cm.gray)\n",[52,34689,34690,34693,34695,34697,34699],{"class":54,"line":10977},[52,34691,34692],{"class":622},"    plt.title(class_label[batch_y[ii]],",[52,34694,34428],{"class":8172},[52,34696,2099],{"class":160},[52,34698,3559],{"class":90},[52,34700,170],{"class":622},[52,34702,34703,34706,34709],{"class":54,"line":10989},[52,34704,34705],{"class":622},"    plt.axis(",[52,34707,34708],{"class":62},"\"off\"",[52,34710,170],{"class":622},[52,34712,34713,34716,34719,34721,34724],{"class":54,"line":11001},[52,34714,34715],{"class":622},"    plt.subplots_adjust(",[52,34717,34718],{"class":8172},"wspace",[52,34720,2099],{"class":160},[52,34722,34723],{"class":90},"0.05",[52,34725,170],{"class":622},[52,34727,34728],{"class":54,"line":11013},[52,34729,34730],{"class":622},"plt.show()\n",[274,34732,34733],{},"用matplotlib进行展示的过程可以后续再补",[274,34735,34736],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[274,34738,34739],{},"训练次数就是按照批次过整个训练集数据的次数",[274,34741,34742],{},"模型训练：",[19,34744,34746],{"className":33310,"code":34745,"language":33312,"meta":28,"style":28},"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",[26,34747,34748,34755,34762,34766,34778,34784,34795,34805,34815,34825,34835,34840,34852,34862,34866,34870,34875,34886,34899,34910,34927,34938,34977,34993,35005,35016,35021,35032,35048,35059,35070,35081,35088,35092,35097,35102,35106,35111,35121,35142,35146,35150,35155,35160,35165,35185,35189,35194,35204,35208,35213,35222,35227,35232,35237,35247,35251,35255,35260,35265,35275,35280,35290,35295,35304,35309,35318,35323,35332,35336,35341,35351,35355,35359,35364,35379,35407,35422,35426,35431,35436,35445,35450,35459,35464,35473,35478,35487,35492,35501,35506,35515,35520,35533,35538,35548,35553,35563,35569,35575,35581,35587,35598,35604,35624,35630,35641,35647,35653,35659,35665,35671,35677,35683,35703,35709,35725,35731,35745,35751,35766,35772,35781,35787,35796,35802,35808,35817,35823,35834,35840,35859,35865,35876,35882,35902,35918,35924,35938,35944,35950,35961,35967,35973,35983,35989,36000,36006,36016,36021,36027,36076,36123,36128,36134,36153,36159,36179,36185,36191,36201,36206,36212,36228,36273,36279,36285,36291,36302,36308,36314,36320,36338,36352,36361,36370,36379,36388,36394,36400,36408,36413,36419,36430,36436,36456,36462,36468,36474,36491,36497,36503,36509,36515,36521,36548,36572,36578,36584,36590,36601,36612,36618,36635,36658,36681,36687,36692,36701,36711,36717,36722,36728,36741,36747,36758,36769,36788],{"__ignoreMap":28},[52,34749,34750,34752],{"class":54,"line":55},[52,34751,33324],{"class":160},[52,34753,34754],{"class":622}," copy\n",[52,34756,34757,34759],{"class":54,"line":69},[52,34758,33324],{"class":160},[52,34760,34761],{"class":622}," time\n",[52,34763,34764],{"class":54,"line":82},[52,34765,116],{"emptyLinePlaceholder":115},[52,34767,34768,34770,34773,34775],{"class":54,"line":97},[52,34769,33324],{"class":160},[52,34771,34772],{"class":622}," pandas ",[52,34774,34315],{"class":160},[52,34776,34777],{"class":622}," pd\n",[52,34779,34780,34782],{"class":54,"line":112},[52,34781,33324],{"class":160},[52,34783,33327],{"class":622},[52,34785,34786,34788,34790,34792],{"class":54,"line":119},[52,34787,33669],{"class":160},[52,34789,34347],{"class":622},[52,34791,33324],{"class":160},[52,34793,34794],{"class":622}," Dataset\n",[52,34796,34797,34799,34801,34803],{"class":54,"line":130},[52,34798,33669],{"class":160},[52,34800,34300],{"class":622},[52,34802,33324],{"class":160},[52,34804,34305],{"class":622},[52,34806,34807,34809,34811,34813],{"class":54,"line":136},[52,34808,33669],{"class":160},[52,34810,34330],{"class":622},[52,34812,33324],{"class":160},[52,34814,34335],{"class":622},[52,34816,34817,34819,34821,34823],{"class":54,"line":141},[52,34818,33324],{"class":160},[52,34820,34347],{"class":622},[52,34822,34315],{"class":160},[52,34824,34352],{"class":622},[52,34826,34827,34829,34831,34833],{"class":54,"line":146},[52,34828,33324],{"class":160},[52,34830,34364],{"class":622},[52,34832,34315],{"class":160},[52,34834,34369],{"class":622},[52,34836,34837],{"class":54,"line":152},[52,34838,34839],{"class":332},"# 导入模型\n",[52,34841,34842,34844,34847,34849],{"class":54,"line":157},[52,34843,33669],{"class":160},[52,34845,34846],{"class":622}," model ",[52,34848,33324],{"class":160},[52,34850,34851],{"class":622}," LeNet\n",[52,34853,34854,34856,34858,34860],{"class":54,"line":173},[52,34855,33669],{"class":160},[52,34857,33672],{"class":622},[52,34859,33324],{"class":160},[52,34861,33677],{"class":622},[52,34863,34864],{"class":54,"line":178},[52,34865,116],{"emptyLinePlaceholder":115},[52,34867,34868],{"class":54,"line":184},[52,34869,116],{"emptyLinePlaceholder":115},[52,34871,34872],{"class":54,"line":189},[52,34873,34874],{"class":332},"# 处理训练集与验证集函数--->划分数据集\n",[52,34876,34877,34880,34883],{"class":54,"line":201},[52,34878,34879],{"class":160},"def",[52,34881,34882],{"class":58}," train_val_data_process",[52,34884,34885],{"class":622},"():\n",[52,34887,34888,34891,34893,34895,34897],{"class":54,"line":206},[52,34889,34890],{"class":622},"    train_data",[52,34892,2099],{"class":160},[52,34894,34387],{"class":622},[52,34896,34395],{"class":62},[52,34898,34398],{"class":622},[52,34900,34901,34904,34906,34908],{"class":54,"line":224},[52,34902,34903],{"class":8172},"                            train",[52,34905,2099],{"class":160},[52,34907,34408],{"class":90},[52,34909,34398],{"class":622},[52,34911,34912,34915,34917,34919,34921,34923,34925],{"class":54,"line":229},[52,34913,34914],{"class":8172},"                            transform",[52,34916,2099],{"class":160},[52,34918,34425],{"class":622},[52,34920,34428],{"class":8172},[52,34922,2099],{"class":160},[52,34924,4013],{"class":90},[52,34926,34436],{"class":622},[52,34928,34929,34932,34934,34936],{"class":54,"line":241},[52,34930,34931],{"class":8172},"                            download",[52,34933,2099],{"class":160},[52,34935,34408],{"class":90},[52,34937,170],{"class":622},[52,34939,34940,34943,34945,34948,34951,34953,34956,34958,34960,34963,34965,34967,34970,34972,34974],{"class":54,"line":246},[52,34941,34942],{"class":622},"    train_data,val_data",[52,34944,2099],{"class":160},[52,34946,34947],{"class":622},"Data.random_split(train_data,[",[52,34949,34950],{"class":90},"round",[52,34952,3121],{"class":622},[52,34954,34955],{"class":90},"0.8",[52,34957,1095],{"class":160},[52,34959,10314],{"class":90},[52,34961,34962],{"class":622},"(train_data)),",[52,34964,34950],{"class":90},[52,34966,3121],{"class":622},[52,34968,34969],{"class":90},"0.2",[52,34971,1095],{"class":160},[52,34973,10314],{"class":90},[52,34975,34976],{"class":622},"(train_data))])\n",[52,34978,34979,34982,34984,34987,34989,34991],{"class":54,"line":252},[52,34980,34981],{"class":622},"    train_dataloader ",[52,34983,2099],{"class":160},[52,34985,34986],{"class":622}," Data.DataLoader(",[52,34988,34469],{"class":8172},[52,34990,2099],{"class":160},[52,34992,34474],{"class":622},[52,34994,34995,34998,35000,35003],{"class":54,"line":257},[52,34996,34997],{"class":8172},"                                       batch_size",[52,34999,2099],{"class":160},[52,35001,35002],{"class":90},"128",[52,35004,34398],{"class":622},[52,35006,35007,35010,35012,35014],{"class":54,"line":266},[52,35008,35009],{"class":8172},"                                       shuffle",[52,35011,2099],{"class":160},[52,35013,34408],{"class":90},[52,35015,34398],{"class":622},[52,35017,35018],{"class":54,"line":4722},[52,35019,35020],{"class":332},"                                       # 规定8个进程\n",[52,35022,35023,35026,35028,35030],{"class":54,"line":4727},[52,35024,35025],{"class":8172},"                                       num_workers",[52,35027,2099],{"class":160},[52,35029,3508],{"class":90},[52,35031,170],{"class":622},[52,35033,35034,35037,35039,35041,35043,35045],{"class":54,"line":4741},[52,35035,35036],{"class":622},"    val_dataloader",[52,35038,2099],{"class":160},[52,35040,34466],{"class":622},[52,35042,34469],{"class":8172},[52,35044,2099],{"class":160},[52,35046,35047],{"class":622},"val_data,\n",[52,35049,35050,35053,35055,35057],{"class":54,"line":4746},[52,35051,35052],{"class":8172},"                                   batch_size",[52,35054,2099],{"class":160},[52,35056,35002],{"class":90},[52,35058,34398],{"class":622},[52,35060,35061,35064,35066,35068],{"class":54,"line":5538},[52,35062,35063],{"class":8172},"                                   shuffle",[52,35065,2099],{"class":160},[52,35067,34408],{"class":90},[52,35069,34398],{"class":622},[52,35071,35072,35075,35077,35079],{"class":54,"line":5552},[52,35073,35074],{"class":8172},"                                   num_workers",[52,35076,2099],{"class":160},[52,35078,3508],{"class":90},[52,35080,170],{"class":622},[52,35082,35083,35085],{"class":54,"line":5560},[52,35084,7049],{"class":160},[52,35086,35087],{"class":622}," train_dataloader,val_dataloader\n",[52,35089,35090],{"class":54,"line":5565},[52,35091,116],{"emptyLinePlaceholder":115},[52,35093,35094],{"class":54,"line":5571},[52,35095,35096],{"class":332},"# 验证是否出错\n",[52,35098,35099],{"class":54,"line":5577},[52,35100,35101],{"class":332},"# train_val_data_process()\n",[52,35103,35104],{"class":54,"line":5582},[52,35105,116],{"emptyLinePlaceholder":115},[52,35107,35108],{"class":54,"line":10904},[52,35109,35110],{"class":332},"# 定义模型训练函数\n",[52,35112,35113,35115,35118],{"class":54,"line":10928},[52,35114,34879],{"class":160},[52,35116,35117],{"class":58}," train_model_process",[52,35119,35120],{"class":622},"(model,train_dataloader,val_dataloader,num_epochs):\n",[52,35122,35123,35125,35127,35129,35131,35133,35135,35137,35140],{"class":54,"line":10933},[52,35124,34169],{"class":622},[52,35126,2099],{"class":160},[52,35128,33383],{"class":622},[52,35130,34176],{"class":62},[52,35132,4671],{"class":160},[52,35134,34181],{"class":622},[52,35136,4668],{"class":160},[52,35138,35139],{"class":62}," 'cpu'",[52,35141,170],{"class":622},[52,35143,35144],{"class":54,"line":10939},[52,35145,116],{"emptyLinePlaceholder":115},[52,35147,35148],{"class":54,"line":10966},[52,35149,116],{"emptyLinePlaceholder":115},[52,35151,35152],{"class":54,"line":10971},[52,35153,35154],{"class":332},"    # 定义优化器\n",[52,35156,35157],{"class":54,"line":10977},[52,35158,35159],{"class":332},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[52,35161,35162],{"class":54,"line":10989},[52,35163,35164],{"class":332},"    # lr为学习率\n",[52,35166,35167,35170,35172,35175,35178,35180,35183],{"class":54,"line":11001},[52,35168,35169],{"class":622},"    optimizer",[52,35171,2099],{"class":160},[52,35173,35174],{"class":622},"torch.optim.Adam(model.parameters(),",[52,35176,35177],{"class":8172},"lr",[52,35179,2099],{"class":160},[52,35181,35182],{"class":90},"0.001",[52,35184,170],{"class":622},[52,35186,35187],{"class":54,"line":11013},[52,35188,116],{"emptyLinePlaceholder":115},[52,35190,35191],{"class":54,"line":12672},[52,35192,35193],{"class":332},"    # 定义损失函数使用交叉熵损失函数\n",[52,35195,35196,35199,35201],{"class":54,"line":12697},[52,35197,35198],{"class":622},"    criterion",[52,35200,2099],{"class":160},[52,35202,35203],{"class":622},"nn.CrossEntropyLoss()\n",[52,35205,35206],{"class":54,"line":12720},[52,35207,116],{"emptyLinePlaceholder":115},[52,35209,35210],{"class":54,"line":12744},[52,35211,35212],{"class":332},"    # 将模型放到GPU中进行训练\n",[52,35214,35215,35217,35219],{"class":54,"line":12749},[52,35216,34221],{"class":622},[52,35218,2099],{"class":160},[52,35220,35221],{"class":622},"model.to(device)\n",[52,35223,35224],{"class":54,"line":12754},[52,35225,35226],{"class":332},"    # 复制当前模型的参数\n",[52,35228,35229],{"class":54,"line":12759},[52,35230,35231],{"class":332},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[52,35233,35234],{"class":54,"line":12768},[52,35235,35236],{"class":332},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[52,35238,35239,35242,35244],{"class":54,"line":12773},[52,35240,35241],{"class":622},"    best_model_wts",[52,35243,2099],{"class":160},[52,35245,35246],{"class":622},"copy.deepcopy(model.state_dict())\n",[52,35248,35249],{"class":54,"line":12779},[52,35250,116],{"emptyLinePlaceholder":115},[52,35252,35253],{"class":54,"line":12800},[52,35254,116],{"emptyLinePlaceholder":115},[52,35256,35257],{"class":54,"line":12806},[52,35258,35259],{"class":332},"    # 初始化参数\n",[52,35261,35262],{"class":54,"line":12820},[52,35263,35264],{"class":332},"    # 最高准确度\n",[52,35266,35267,35270,35272],{"class":54,"line":12826},[52,35268,35269],{"class":622},"    best_acc",[52,35271,2099],{"class":160},[52,35273,35274],{"class":90},"0.0\n",[52,35276,35277],{"class":54,"line":12853},[52,35278,35279],{"class":332},"    # 训练集损失列表\n",[52,35281,35282,35285,35287],{"class":54,"line":12862},[52,35283,35284],{"class":622},"    train_loss_all",[52,35286,2099],{"class":160},[52,35288,35289],{"class":622},"[]\n",[52,35291,35292],{"class":54,"line":12868},[52,35293,35294],{"class":332},"    # 验证集函数列表\n",[52,35296,35297,35300,35302],{"class":54,"line":12876},[52,35298,35299],{"class":622},"    val_loss_all",[52,35301,2099],{"class":160},[52,35303,35289],{"class":622},[52,35305,35306],{"class":54,"line":12881},[52,35307,35308],{"class":332},"    # 训练集准确度列表\n",[52,35310,35311,35314,35316],{"class":54,"line":19560},[52,35312,35313],{"class":622},"    train_acc_all",[52,35315,2099],{"class":160},[52,35317,35289],{"class":622},[52,35319,35320],{"class":54,"line":19566},[52,35321,35322],{"class":332},"    # 验证集准确度列表\n",[52,35324,35325,35328,35330],{"class":54,"line":19589},[52,35326,35327],{"class":622},"    val_acc_all",[52,35329,2099],{"class":160},[52,35331,35289],{"class":622},[52,35333,35334],{"class":54,"line":19595},[52,35335,116],{"emptyLinePlaceholder":115},[52,35337,35338],{"class":54,"line":19618},[52,35339,35340],{"class":332},"    # 保存当前时间--->方便看每轮训练的时间\n",[52,35342,35343,35346,35348],{"class":54,"line":19632},[52,35344,35345],{"class":622},"    since",[52,35347,2099],{"class":160},[52,35349,35350],{"class":622},"time.time()\n",[52,35352,35353],{"class":54,"line":19652},[52,35354,116],{"emptyLinePlaceholder":115},[52,35356,35357],{"class":54,"line":19658},[52,35358,116],{"emptyLinePlaceholder":115},[52,35360,35361],{"class":54,"line":19669},[52,35362,35363],{"class":332},"    # 准备工作完成--->开始训练模型\n",[52,35365,35366,35368,35371,35373,35376],{"class":54,"line":19692},[52,35367,6160],{"class":160},[52,35369,35370],{"class":622}," epoch ",[52,35372,28988],{"class":160},[52,35374,35375],{"class":90}," range",[52,35377,35378],{"class":622},"(num_epochs):\n",[52,35380,35381,35384,35386,35389,35392,35394,35396,35398,35401,35403,35405],{"class":54,"line":19714},[52,35382,35383],{"class":90},"        print",[52,35385,3121],{"class":622},[52,35387,35388],{"class":62},"\"Epoch ",[52,35390,35391],{"class":90},"{}",[52,35393,3696],{"class":62},[52,35395,35391],{"class":90},[52,35397,3364],{"class":62},[52,35399,35400],{"class":622},".format(epoch,num_epochs",[52,35402,3644],{"class":160},[52,35404,3332],{"class":90},[52,35406,33429],{"class":622},[52,35408,35409,35411,35413,35416,35418,35420],{"class":54,"line":19719},[52,35410,35383],{"class":90},[52,35412,3121],{"class":622},[52,35414,35415],{"class":62},"\"-\"",[52,35417,1095],{"class":160},[52,35419,3559],{"class":90},[52,35421,170],{"class":622},[52,35423,35424],{"class":54,"line":19725},[52,35425,116],{"emptyLinePlaceholder":115},[52,35427,35428],{"class":54,"line":19739},[52,35429,35430],{"class":332},"        # 初始化参数\n",[52,35432,35433],{"class":54,"line":19752},[52,35434,35435],{"class":332},"        # 训练集损失函数\n",[52,35437,35438,35441,35443],{"class":54,"line":19757},[52,35439,35440],{"class":622},"        train_loss",[52,35442,2099],{"class":160},[52,35444,35274],{"class":90},[52,35446,35447],{"class":54,"line":19771},[52,35448,35449],{"class":332},"        # 训练集准确度\n",[52,35451,35452,35455,35457],{"class":54,"line":19776},[52,35453,35454],{"class":622},"        train_corrects",[52,35456,2099],{"class":160},[52,35458,2719],{"class":90},[52,35460,35461],{"class":54,"line":19782},[52,35462,35463],{"class":332},"        # 验证集损失函数\n",[52,35465,35466,35469,35471],{"class":54,"line":19787},[52,35467,35468],{"class":622},"        val_loss",[52,35470,2099],{"class":160},[52,35472,35274],{"class":90},[52,35474,35475],{"class":54,"line":19801},[52,35476,35477],{"class":332},"        # 验证集准确度\n",[52,35479,35480,35483,35485],{"class":54,"line":19806},[52,35481,35482],{"class":622},"        val_corrects",[52,35484,2099],{"class":160},[52,35486,2719],{"class":90},[52,35488,35489],{"class":54,"line":19811},[52,35490,35491],{"class":332},"        # 训练集样本数量\n",[52,35493,35494,35497,35499],{"class":54,"line":19825},[52,35495,35496],{"class":622},"        train_num",[52,35498,2099],{"class":160},[52,35500,2719],{"class":90},[52,35502,35503],{"class":54,"line":19837},[52,35504,35505],{"class":332},"        # 验证集样本数量\n",[52,35507,35508,35511,35513],{"class":54,"line":19842},[52,35509,35510],{"class":622},"        val_num",[52,35512,2099],{"class":160},[52,35514,2719],{"class":90},[52,35516,35517],{"class":54,"line":19855},[52,35518,35519],{"class":332},"        # 将数据放到设备,并开始训练\n",[52,35521,35522,35524,35526,35528,35530],{"class":54,"line":19860},[52,35523,6362],{"class":160},[52,35525,34533],{"class":622},[52,35527,28988],{"class":160},[52,35529,34538],{"class":90},[52,35531,35532],{"class":622},"(train_dataloader):\n",[52,35534,35535],{"class":54,"line":19865},[52,35536,35537],{"class":332},"            # 将特征放入到训练设备\n",[52,35539,35540,35543,35545],{"class":54,"line":19870},[52,35541,35542],{"class":622},"            b_x",[52,35544,2099],{"class":160},[52,35546,35547],{"class":622},"b_x.to(device)\n",[52,35549,35550],{"class":54,"line":19883},[52,35551,35552],{"class":332},"            # 将标签放入到训练设备当中\n",[52,35554,35555,35558,35560],{"class":54,"line":19888},[52,35556,35557],{"class":622},"            b_y",[52,35559,2099],{"class":160},[52,35561,35562],{"class":622},"b_y.to(device)\n",[52,35564,35566],{"class":54,"line":35565},98,[52,35567,35568],{"class":332},"            # 设置模型为训练模式\n",[52,35570,35572],{"class":54,"line":35571},99,[52,35573,35574],{"class":622},"            model.train()\n",[52,35576,35578],{"class":54,"line":35577},100,[52,35579,35580],{"class":332},"            # 将数据放到模型当中,开始前向传播\n",[52,35582,35584],{"class":54,"line":35583},101,[52,35585,35586],{"class":332},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[52,35588,35590,35593,35595],{"class":54,"line":35589},102,[52,35591,35592],{"class":622},"            output",[52,35594,2099],{"class":160},[52,35596,35597],{"class":622},"model(b_x)\n",[52,35599,35601],{"class":54,"line":35600},103,[52,35602,35603],{"class":332},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[52,35605,35607,35610,35612,35615,35618,35620,35622],{"class":54,"line":35606},104,[52,35608,35609],{"class":622},"            pre_lab",[52,35611,2099],{"class":160},[52,35613,35614],{"class":622},"torch.argmax(output,",[52,35616,35617],{"class":8172},"dim",[52,35619,2099],{"class":160},[52,35621,3332],{"class":90},[52,35623,170],{"class":622},[52,35625,35627],{"class":54,"line":35626},105,[52,35628,35629],{"class":332},"            # 计算每一个batch的损失函数\n",[52,35631,35633,35636,35638],{"class":54,"line":35632},106,[52,35634,35635],{"class":622},"            loss",[52,35637,2099],{"class":160},[52,35639,35640],{"class":622},"criterion(output,b_y)\n",[52,35642,35644],{"class":54,"line":35643},107,[52,35645,35646],{"class":332},"            # 将梯度初始化为0\n",[52,35648,35650],{"class":54,"line":35649},108,[52,35651,35652],{"class":622},"            optimizer.zero_grad()\n",[52,35654,35656],{"class":54,"line":35655},109,[52,35657,35658],{"class":332},"            # 梯度置为0后再进行反向传播\n",[52,35660,35662],{"class":54,"line":35661},110,[52,35663,35664],{"class":622},"            loss.backward()\n",[52,35666,35668],{"class":54,"line":35667},111,[52,35669,35670],{"class":332},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[52,35672,35674],{"class":54,"line":35673},112,[52,35675,35676],{"class":622},"            optimizer.step()\n",[52,35678,35680],{"class":54,"line":35679},113,[52,35681,35682],{"class":332},"            # loss.item()指的是batch的平均损失\n",[52,35684,35686,35689,35691,35694,35696,35699,35701],{"class":54,"line":35685},114,[52,35687,35688],{"class":622},"            train_loss",[52,35690,12433],{"class":160},[52,35692,35693],{"class":622},"loss.item()",[52,35695,1095],{"class":160},[52,35697,35698],{"class":622},"b_x.size(",[52,35700,3306],{"class":90},[52,35702,170],{"class":622},[52,35704,35706],{"class":54,"line":35705},115,[52,35707,35708],{"class":332},"            # 计算每个批次中正确预测的数量\n",[52,35710,35712,35715,35717,35720,35722],{"class":54,"line":35711},116,[52,35713,35714],{"class":622},"            train_corrects",[52,35716,12433],{"class":160},[52,35718,35719],{"class":622},"torch.sum(pre_lab",[52,35721,5909],{"class":160},[52,35723,35724],{"class":622},"b_y.data)\n",[52,35726,35728],{"class":54,"line":35727},117,[52,35729,35730],{"class":332},"            # 计算目前为止一共处理了多少样本\n",[52,35732,35734,35737,35739,35741,35743],{"class":54,"line":35733},118,[52,35735,35736],{"class":622},"            train_num",[52,35738,12433],{"class":160},[52,35740,35698],{"class":622},[52,35742,3306],{"class":90},[52,35744,170],{"class":622},[52,35746,35748],{"class":54,"line":35747},119,[52,35749,35750],{"class":332},"        # 验证数据\n",[52,35752,35754,35756,35759,35761,35763],{"class":54,"line":35753},120,[52,35755,6362],{"class":160},[52,35757,35758],{"class":622}," step ,(b_x,b_y) ",[52,35760,28988],{"class":160},[52,35762,34538],{"class":90},[52,35764,35765],{"class":622},"(val_dataloader):\n",[52,35767,35769],{"class":54,"line":35768},121,[52,35770,35771],{"class":332},"            # 将特征放到验证设备当中\n",[52,35773,35775,35777,35779],{"class":54,"line":35774},122,[52,35776,35542],{"class":622},[52,35778,2099],{"class":160},[52,35780,35547],{"class":622},[52,35782,35784],{"class":54,"line":35783},123,[52,35785,35786],{"class":332},"            # 将标签放到放到训练设备当中\n",[52,35788,35790,35792,35794],{"class":54,"line":35789},124,[52,35791,35557],{"class":622},[52,35793,2099],{"class":160},[52,35795,35562],{"class":622},[52,35797,35799],{"class":54,"line":35798},125,[52,35800,35801],{"class":332},"            # 开启验证模式，设置模型为评估模式\n",[52,35803,35805],{"class":54,"line":35804},126,[52,35806,35807],{"class":622},"            model.eval()\n",[52,35809,35811,35814],{"class":54,"line":35810},127,[52,35812,35813],{"class":160},"            with",[52,35815,35816],{"class":622}," torch.no_grad():\n",[52,35818,35820],{"class":54,"line":35819},128,[52,35821,35822],{"class":332},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[52,35824,35826,35829,35831],{"class":54,"line":35825},129,[52,35827,35828],{"class":622},"                output ",[52,35830,2099],{"class":160},[52,35832,35833],{"class":622}," model(b_x)\n",[52,35835,35837],{"class":54,"line":35836},130,[52,35838,35839],{"class":332},"                # 查找每一行中最大值对应的下标\n",[52,35841,35843,35846,35848,35851,35853,35855,35857],{"class":54,"line":35842},131,[52,35844,35845],{"class":622},"                pre_lab ",[52,35847,2099],{"class":160},[52,35849,35850],{"class":622}," torch.argmax(output, ",[52,35852,35617],{"class":8172},[52,35854,2099],{"class":160},[52,35856,3332],{"class":90},[52,35858,170],{"class":622},[52,35860,35862],{"class":54,"line":35861},132,[52,35863,35864],{"class":332},"                # 计算验证集上的当前 batch 损失\n",[52,35866,35868,35871,35873],{"class":54,"line":35867},133,[52,35869,35870],{"class":622},"                val_batch_loss ",[52,35872,2099],{"class":160},[52,35874,35875],{"class":622}," criterion(output, b_y)\n",[52,35877,35879],{"class":54,"line":35878},134,[52,35880,35881],{"class":332},"                # 对损失函数进行累加（按样本数加权）\n",[52,35883,35885,35888,35890,35893,35895,35898,35900],{"class":54,"line":35884},135,[52,35886,35887],{"class":622},"                val_loss ",[52,35889,12433],{"class":160},[52,35891,35892],{"class":622}," val_batch_loss.item() ",[52,35894,1095],{"class":160},[52,35896,35897],{"class":622}," b_x.size(",[52,35899,3306],{"class":90},[52,35901,170],{"class":622},[52,35903,35905,35908,35910,35913,35915],{"class":54,"line":35904},136,[52,35906,35907],{"class":622},"                val_corrects ",[52,35909,12433],{"class":160},[52,35911,35912],{"class":622}," torch.sum(pre_lab ",[52,35914,5909],{"class":160},[52,35916,35917],{"class":622}," b_y.data)\n",[52,35919,35921],{"class":54,"line":35920},137,[52,35922,35923],{"class":332},"                # 当前用于验证的样本数量\n",[52,35925,35927,35930,35932,35934,35936],{"class":54,"line":35926},138,[52,35928,35929],{"class":622},"            val_num ",[52,35931,12433],{"class":160},[52,35933,35897],{"class":622},[52,35935,3306],{"class":90},[52,35937,170],{"class":622},[52,35939,35941],{"class":54,"line":35940},139,[52,35942,35943],{"class":332},"        # 计算并保存每一次迭代的loss值和准确率\n",[52,35945,35947],{"class":54,"line":35946},140,[52,35948,35949],{"class":332},"        # 计算并保存训练集的loss值\n",[52,35951,35953,35956,35958],{"class":54,"line":35952},141,[52,35954,35955],{"class":622},"        train_loss_all.append(train_loss",[52,35957,3696],{"class":160},[52,35959,35960],{"class":622},"train_num)\n",[52,35962,35964],{"class":54,"line":35963},142,[52,35965,35966],{"class":332},"        # 取双精度\n",[52,35968,35970],{"class":54,"line":35969},143,[52,35971,35972],{"class":332},"        # 计算并保存训练集的准确率\n",[52,35974,35976,35979,35981],{"class":54,"line":35975},144,[52,35977,35978],{"class":622},"        train_acc_all.append(train_corrects.double().item()",[52,35980,3696],{"class":160},[52,35982,35960],{"class":622},[52,35984,35986],{"class":54,"line":35985},145,[52,35987,35988],{"class":332},"        # 计算并保存验证集的loss值\n",[52,35990,35992,35995,35997],{"class":54,"line":35991},146,[52,35993,35994],{"class":622},"        val_loss_all.append(val_loss",[52,35996,3696],{"class":160},[52,35998,35999],{"class":622},"val_num)\n",[52,36001,36003],{"class":54,"line":36002},147,[52,36004,36005],{"class":332},"        # 计算并保存验证集的准确率\n",[52,36007,36009,36012,36014],{"class":54,"line":36008},148,[52,36010,36011],{"class":622},"        val_acc_all.append(val_corrects.double().item()",[52,36013,3696],{"class":160},[52,36015,35999],{"class":622},[52,36017,36019],{"class":54,"line":36018},149,[52,36020,116],{"emptyLinePlaceholder":115},[52,36022,36024],{"class":54,"line":36023},150,[52,36025,36026],{"class":332},"        # 打印训练一轮的loss值和准确率\n",[52,36028,36030,36032,36034,36036,36038,36041,36043,36046,36048,36051,36053,36055,36057,36059,36062,36064,36066,36069,36071,36073],{"class":54,"line":36029},151,[52,36031,35383],{"class":90},[52,36033,3121],{"class":622},[52,36035,6551],{"class":62},[52,36037,35391],{"class":90},[52,36039,36040],{"class":62},"train loss:",[52,36042,4008],{"class":90},[52,36044,36045],{"class":160},":.4f",[52,36047,4058],{"class":90},[52,36049,36050],{"class":62}," train acc:",[52,36052,4008],{"class":90},[52,36054,36045],{"class":160},[52,36056,4058],{"class":90},[52,36058,6551],{"class":62},[52,36060,36061],{"class":622},".format(epoch,train_loss_all[",[52,36063,3644],{"class":160},[52,36065,3332],{"class":90},[52,36067,36068],{"class":622},"],train_acc_all[",[52,36070,3644],{"class":160},[52,36072,3332],{"class":90},[52,36074,36075],{"class":622},"]))\n",[52,36077,36079,36081,36083,36085,36087,36090,36092,36094,36096,36099,36101,36103,36105,36107,36110,36112,36114,36117,36119,36121],{"class":54,"line":36078},152,[52,36080,35383],{"class":90},[52,36082,3121],{"class":622},[52,36084,6551],{"class":62},[52,36086,35391],{"class":90},[52,36088,36089],{"class":62},"val loss:",[52,36091,4008],{"class":90},[52,36093,36045],{"class":160},[52,36095,4058],{"class":90},[52,36097,36098],{"class":62}," val acc:",[52,36100,4008],{"class":90},[52,36102,36045],{"class":160},[52,36104,4058],{"class":90},[52,36106,6551],{"class":62},[52,36108,36109],{"class":622},".format(epoch,val_loss_all[",[52,36111,3644],{"class":160},[52,36113,3332],{"class":90},[52,36115,36116],{"class":622},"],val_acc_all[",[52,36118,3644],{"class":160},[52,36120,3332],{"class":90},[52,36122,36075],{"class":622},[52,36124,36126],{"class":54,"line":36125},153,[52,36127,116],{"emptyLinePlaceholder":115},[52,36129,36131],{"class":54,"line":36130},154,[52,36132,36133],{"class":332},"        # 判断准确度--->保存最优模型\n",[52,36135,36137,36139,36142,36144,36146,36148,36150],{"class":54,"line":36136},155,[52,36138,5458],{"class":160},[52,36140,36141],{"class":622}," val_acc_all[",[52,36143,3644],{"class":160},[52,36145,3332],{"class":90},[52,36147,4052],{"class":622},[52,36149,4072],{"class":160},[52,36151,36152],{"class":622},"best_acc:\n",[52,36154,36156],{"class":54,"line":36155},156,[52,36157,36158],{"class":332},"            # 保存当前模型准确度\n",[52,36160,36162,36165,36167,36169,36172,36174,36176],{"class":54,"line":36161},157,[52,36163,36164],{"class":622},"            best_acc:",[52,36166,3159],{"class":90},[52,36168,2099],{"class":160},[52,36170,36171],{"class":622},"val_acc_all[",[52,36173,3644],{"class":160},[52,36175,3332],{"class":90},[52,36177,36178],{"class":622},"]\n",[52,36180,36182],{"class":54,"line":36181},158,[52,36183,36184],{"class":332},"            # 保存当前的准确度\n",[52,36186,36188],{"class":54,"line":36187},159,[52,36189,36190],{"class":332},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[52,36192,36194,36197,36199],{"class":54,"line":36193},160,[52,36195,36196],{"class":622},"            best_model_wts",[52,36198,2099],{"class":160},[52,36200,35246],{"class":622},[52,36202,36204],{"class":54,"line":36203},161,[52,36205,116],{"emptyLinePlaceholder":115},[52,36207,36209],{"class":54,"line":36208},162,[52,36210,36211],{"class":332},"        # 计算耗时\n",[52,36213,36215,36218,36220,36223,36225],{"class":54,"line":36214},163,[52,36216,36217],{"class":622},"        time_use",[52,36219,2099],{"class":160},[52,36221,36222],{"class":622},"time.time()",[52,36224,3644],{"class":160},[52,36226,36227],{"class":622},"since\n",[52,36229,36231,36233,36235,36238,36240,36243,36245,36247,36249,36251,36253,36256,36259,36262,36264,36267,36269,36271],{"class":54,"line":36230},164,[52,36232,35383],{"class":90},[52,36234,3121],{"class":622},[52,36236,36237],{"class":62},"'训练和验证耗费的时间",[52,36239,4008],{"class":90},[52,36241,36242],{"class":160},":.0f",[52,36244,4058],{"class":90},[52,36246,3656],{"class":62},[52,36248,4008],{"class":90},[52,36250,36242],{"class":160},[52,36252,4058],{"class":90},[52,36254,36255],{"class":62},"s'",[52,36257,36258],{"class":622},".format(time_use",[52,36260,36261],{"class":160},"\u002F\u002F",[52,36263,4019],{"class":90},[52,36265,36266],{"class":622},",time_use",[52,36268,3441],{"class":160},[52,36270,4019],{"class":90},[52,36272,33429],{"class":622},[52,36274,36276],{"class":54,"line":36275},165,[52,36277,36278],{"class":332},"    # 选择最优参数\n",[52,36280,36282],{"class":54,"line":36281},166,[52,36283,36284],{"class":332},"    # 加载最高准确率下的模型参数\n",[52,36286,36288],{"class":54,"line":36287},167,[52,36289,36290],{"class":332},"    # model.load_state_dict(best_model_wts)\n",[52,36292,36294,36297,36300],{"class":54,"line":36293},168,[52,36295,36296],{"class":622},"    torch.save(model.state_dict(best_model_wts), ",[52,36298,36299],{"class":62},"'.\u002Fbest_model.pth'",[52,36301,170],{"class":622},[52,36303,36305],{"class":54,"line":36304},169,[52,36306,36307],{"class":332},"    # 或者写成\n",[52,36309,36311],{"class":54,"line":36310},170,[52,36312,36313],{"class":332},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[52,36315,36317],{"class":54,"line":36316},171,[52,36318,36319],{"class":332},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[52,36321,36323,36326,36328,36331,36334,36336],{"class":54,"line":36322},172,[52,36324,36325],{"class":622},"    train_process",[52,36327,2099],{"class":160},[52,36329,36330],{"class":622},"pd.DataFrame(",[52,36332,36333],{"class":8172},"data",[52,36335,2099],{"class":160},[52,36337,4524],{"class":622},[52,36339,36341,36344,36346,36349],{"class":54,"line":36340},173,[52,36342,36343],{"class":62},"        \"epoch\"",[52,36345,3971],{"class":622},[52,36347,36348],{"class":90},"range",[52,36350,36351],{"class":622},"(num_epochs),\n",[52,36353,36355,36358],{"class":54,"line":36354},174,[52,36356,36357],{"class":62},"        \"train_loss_all\"",[52,36359,36360],{"class":622},":train_loss_all,\n",[52,36362,36364,36367],{"class":54,"line":36363},175,[52,36365,36366],{"class":62},"        \"val_loss_all\"",[52,36368,36369],{"class":622},":val_loss_all,\n",[52,36371,36373,36376],{"class":54,"line":36372},176,[52,36374,36375],{"class":62},"        \"train_acc_all\"",[52,36377,36378],{"class":622},":train_acc_all,\n",[52,36380,36382,36385],{"class":54,"line":36381},177,[52,36383,36384],{"class":62},"        \"val_acc_all\"",[52,36386,36387],{"class":622},":val_acc_all\n",[52,36389,36391],{"class":54,"line":36390},178,[52,36392,36393],{"class":622},"    })\n",[52,36395,36397],{"class":54,"line":36396},179,[52,36398,36399],{"class":332},"    # 返回训练保存的过程\n",[52,36401,36403,36405],{"class":54,"line":36402},180,[52,36404,7049],{"class":160},[52,36406,36407],{"class":622}," train_process\n",[52,36409,36411],{"class":54,"line":36410},181,[52,36412,116],{"emptyLinePlaceholder":115},[52,36414,36416],{"class":54,"line":36415},182,[52,36417,36418],{"class":332},"# 将loss值和精度按照图片的形式展示出来\n",[52,36420,36422,36424,36427],{"class":54,"line":36421},183,[52,36423,34879],{"class":160},[52,36425,36426],{"class":58}," matplot_acc_loss",[52,36428,36429],{"class":622},"(train_process):\n",[52,36431,36433],{"class":54,"line":36432},184,[52,36434,36435],{"class":332},"    # 设置图的大小\n",[52,36437,36439,36442,36444,36446,36448,36450,36452,36454],{"class":54,"line":36438},185,[52,36440,36441],{"class":622},"    plt.figure(",[52,36443,34625],{"class":8172},[52,36445,2099],{"class":160},[52,36447,3121],{"class":622},[52,36449,3610],{"class":90},[52,36451,3491],{"class":622},[52,36453,3406],{"class":90},[52,36455,33429],{"class":622},[52,36457,36459],{"class":54,"line":36458},186,[52,36460,36461],{"class":332},"    # 设置图中有几张图\n",[52,36463,36465],{"class":54,"line":36464},187,[52,36466,36467],{"class":332},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[52,36469,36471],{"class":54,"line":36470},188,[52,36472,36473],{"class":332},"    # ①loss图\n",[52,36475,36477,36479,36481,36483,36485,36487,36489],{"class":54,"line":36476},189,[52,36478,34659],{"class":622},[52,36480,3332],{"class":90},[52,36482,3491],{"class":622},[52,36484,3194],{"class":90},[52,36486,3491],{"class":622},[52,36488,3332],{"class":90},[52,36490,170],{"class":622},[52,36492,36494],{"class":54,"line":36493},190,[52,36495,36496],{"class":332},"    # 补充:\n",[52,36498,36500],{"class":54,"line":36499},191,[52,36501,36502],{"class":332},"    # plt.subplot(nrows, ncols, index)\n",[52,36504,36506],{"class":54,"line":36505},192,[52,36507,36508],{"class":332},"    # nrows：行数\n",[52,36510,36512],{"class":54,"line":36511},193,[52,36513,36514],{"class":332},"    # ncols：列数\n",[52,36516,36518],{"class":54,"line":36517},194,[52,36519,36520],{"class":332},"    # index：目前选中第几个子图（从1开始）\n",[52,36522,36524,36527,36530,36533,36536,36538,36541,36543,36546],{"class":54,"line":36523},195,[52,36525,36526],{"class":622},"    plt.plot(train_process[",[52,36528,36529],{"class":62},"\"epoch\"",[52,36531,36532],{"class":622},"],train_process.train_loss_all,",[52,36534,36535],{"class":62},"'ro-'",[52,36537,3491],{"class":622},[52,36539,36540],{"class":8172},"label",[52,36542,2099],{"class":160},[52,36544,36545],{"class":62},"'train loss'",[52,36547,170],{"class":622},[52,36549,36551,36553,36555,36558,36561,36563,36565,36567,36570],{"class":54,"line":36550},196,[52,36552,36526],{"class":622},[52,36554,36529],{"class":62},[52,36556,36557],{"class":622},"],train_process.val_loss_all,",[52,36559,36560],{"class":62},"'bs--'",[52,36562,3491],{"class":622},[52,36564,36540],{"class":8172},[52,36566,2099],{"class":160},[52,36568,36569],{"class":62},"'val loss'",[52,36571,170],{"class":622},[52,36573,36575],{"class":54,"line":36574},197,[52,36576,36577],{"class":332},"    # 添加一个图例\n",[52,36579,36581],{"class":54,"line":36580},198,[52,36582,36583],{"class":622},"    plt.legend()\n",[52,36585,36587],{"class":54,"line":36586},199,[52,36588,36589],{"class":332},"    # 给轴添加标签\n",[52,36591,36593,36596,36599],{"class":54,"line":36592},200,[52,36594,36595],{"class":622},"    plt.xlabel(",[52,36597,36598],{"class":62},"'epoch'",[52,36600,170],{"class":622},[52,36602,36604,36607,36610],{"class":54,"line":36603},201,[52,36605,36606],{"class":622},"    plt.ylabel(",[52,36608,36609],{"class":62},"'loss'",[52,36611,170],{"class":622},[52,36613,36615],{"class":54,"line":36614},202,[52,36616,36617],{"class":332},"    # ②准确度图\n",[52,36619,36621,36623,36625,36627,36629,36631,36633],{"class":54,"line":36620},203,[52,36622,34659],{"class":622},[52,36624,3332],{"class":90},[52,36626,3491],{"class":622},[52,36628,3194],{"class":90},[52,36630,3491],{"class":622},[52,36632,3194],{"class":90},[52,36634,170],{"class":622},[52,36636,36638,36640,36642,36645,36647,36649,36651,36653,36656],{"class":54,"line":36637},204,[52,36639,36526],{"class":622},[52,36641,36529],{"class":62},[52,36643,36644],{"class":622},"],train_process.train_acc_all,",[52,36646,36535],{"class":62},[52,36648,3491],{"class":622},[52,36650,36540],{"class":8172},[52,36652,2099],{"class":160},[52,36654,36655],{"class":62},"'train acc'",[52,36657,170],{"class":622},[52,36659,36661,36663,36665,36668,36670,36672,36674,36676,36679],{"class":54,"line":36660},205,[52,36662,36526],{"class":622},[52,36664,36529],{"class":62},[52,36666,36667],{"class":622},"],train_process.val_acc_all,",[52,36669,36560],{"class":62},[52,36671,3491],{"class":622},[52,36673,36540],{"class":8172},[52,36675,2099],{"class":160},[52,36677,36678],{"class":62},"'val acc'",[52,36680,170],{"class":622},[52,36682,36684],{"class":54,"line":36683},206,[52,36685,36686],{"class":332},"    # 添加图例\n",[52,36688,36690],{"class":54,"line":36689},207,[52,36691,36583],{"class":622},[52,36693,36695,36697,36699],{"class":54,"line":36694},208,[52,36696,36595],{"class":622},[52,36698,36529],{"class":62},[52,36700,170],{"class":622},[52,36702,36704,36706,36709],{"class":54,"line":36703},209,[52,36705,36606],{"class":622},[52,36707,36708],{"class":62},"\"acc\"",[52,36710,170],{"class":622},[52,36712,36714],{"class":54,"line":36713},210,[52,36715,36716],{"class":622},"    plt.show()\n",[52,36718,36720],{"class":54,"line":36719},211,[52,36721,116],{"emptyLinePlaceholder":115},[52,36723,36725],{"class":54,"line":36724},212,[52,36726,36727],{"class":332},"# 正式开始训练:\n",[52,36729,36731,36733,36735,36737,36739],{"class":54,"line":36730},213,[52,36732,4509],{"class":160},[52,36734,34152],{"class":90},[52,36736,5909],{"class":160},[52,36738,34157],{"class":62},[52,36740,6698],{"class":622},[52,36742,36744],{"class":54,"line":36743},214,[52,36745,36746],{"class":332},"    # 将模型实例化\n",[52,36748,36750,36753,36755],{"class":54,"line":36749},215,[52,36751,36752],{"class":622},"    LeNet",[52,36754,2099],{"class":160},[52,36756,36757],{"class":622},"LeNet()\n",[52,36759,36761,36764,36766],{"class":54,"line":36760},216,[52,36762,36763],{"class":622},"    train_dataloader,val_dataloader",[52,36765,2099],{"class":160},[52,36767,36768],{"class":622},"train_val_data_process()\n",[52,36770,36772,36774,36776,36779,36782,36784,36786],{"class":54,"line":36771},217,[52,36773,36325],{"class":622},[52,36775,2099],{"class":160},[52,36777,36778],{"class":622},"train_model_process(LeNet,train_dataloader,val_dataloader,",[52,36780,36781],{"class":8172},"num_epochs",[52,36783,2099],{"class":160},[52,36785,3812],{"class":90},[52,36787,170],{"class":622},[52,36789,36791],{"class":54,"line":36790},218,[52,36792,36793],{"class":622},"    matplot_acc_loss(train_process)\n",[274,36795,36796],{},"画图的补充点学习：",[274,36798,36799],{},[280,36800],{"alt":28,"src":36801},"\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",[1070,36803,36804],{"start":82},[1073,36805,36806],{},"测试",[19,36808,36810],{"className":33310,"code":36809,"language":33312,"meta":28,"style":28},"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",[26,36811,36812,36818,36828,36840,36850,36855,36865,36875,36879,36884,36893,36910,36922,36939,36950,36966,36971,36982,36993,37004,37011,37015,37020,37030,37035,37052,37060,37064,37069,37078,37087,37091,37096,37101,37106,37113,37118,37130,37140,37150,37155,37159,37164,37173,37178,37194,37199,37204,37209,37223,37228,37242,37246,37251,37266,37271,37283,37287,37292,37304,37309,37317,37322,37327,37337,37342,37351,37356,37361,37365,37370,37375,37391,37399,37404,37409,37468,37474,37479,37490,37498,37506,37510,37515,37519,37524,37532,37537,37553,37558,37568,37578],{"__ignoreMap":28},[52,36813,36814,36816],{"class":54,"line":55},[52,36815,33324],{"class":160},[52,36817,33327],{"class":622},[52,36819,36820,36822,36824,36826],{"class":54,"line":69},[52,36821,33324],{"class":160},[52,36823,34347],{"class":622},[52,36825,34315],{"class":160},[52,36827,34352],{"class":622},[52,36829,36830,36832,36835,36837],{"class":54,"line":82},[52,36831,33669],{"class":160},[52,36833,36834],{"class":622}," jupyter_client.consoleapp ",[52,36836,33324],{"class":160},[52,36838,36839],{"class":622}," classes\n",[52,36841,36842,36844,36846,36848],{"class":54,"line":97},[52,36843,33669],{"class":160},[52,36845,34330],{"class":622},[52,36847,33324],{"class":160},[52,36849,34335],{"class":622},[52,36851,36852],{"class":54,"line":112},[52,36853,36854],{"class":332},"# 导入数据集\n",[52,36856,36857,36859,36861,36863],{"class":54,"line":119},[52,36858,33669],{"class":160},[52,36860,34300],{"class":622},[52,36862,33324],{"class":160},[52,36864,34305],{"class":622},[52,36866,36867,36869,36871,36873],{"class":54,"line":130},[52,36868,33669],{"class":160},[52,36870,34846],{"class":622},[52,36872,33324],{"class":160},[52,36874,34851],{"class":622},[52,36876,36877],{"class":54,"line":136},[52,36878,116],{"emptyLinePlaceholder":115},[52,36880,36881],{"class":54,"line":141},[52,36882,36883],{"class":332},"# 测试数据处理\n",[52,36885,36886,36888,36891],{"class":54,"line":146},[52,36887,34879],{"class":160},[52,36889,36890],{"class":58}," test_data_process",[52,36892,34885],{"class":622},[52,36894,36895,36898,36900,36902,36904,36906,36908],{"class":54,"line":152},[52,36896,36897],{"class":622},"    test_data",[52,36899,2099],{"class":160},[52,36901,34387],{"class":622},[52,36903,34390],{"class":8172},[52,36905,2099],{"class":160},[52,36907,34395],{"class":62},[52,36909,34398],{"class":622},[52,36911,36912,36915,36917,36920],{"class":54,"line":157},[52,36913,36914],{"class":8172},"                           train",[52,36916,2099],{"class":160},[52,36918,36919],{"class":90},"False",[52,36921,34398],{"class":622},[52,36923,36924,36927,36929,36931,36933,36935,36937],{"class":54,"line":173},[52,36925,36926],{"class":8172},"                           transform",[52,36928,2099],{"class":160},[52,36930,34425],{"class":622},[52,36932,34428],{"class":8172},[52,36934,2099],{"class":160},[52,36936,4013],{"class":90},[52,36938,34436],{"class":622},[52,36940,36941,36944,36946,36948],{"class":54,"line":178},[52,36942,36943],{"class":8172},"                           download",[52,36945,2099],{"class":160},[52,36947,34408],{"class":90},[52,36949,170],{"class":622},[52,36951,36952,36955,36957,36959,36961,36963],{"class":54,"line":184},[52,36953,36954],{"class":622},"    test_dataloader",[52,36956,2099],{"class":160},[52,36958,34466],{"class":622},[52,36960,34469],{"class":8172},[52,36962,2099],{"class":160},[52,36964,36965],{"class":622},"test_data,\n",[52,36967,36968],{"class":54,"line":189},[52,36969,36970],{"class":332},"                                    # 这里是一张一张进行测试\n",[52,36972,36973,36976,36978,36980],{"class":54,"line":201},[52,36974,36975],{"class":8172},"                                    batch_size",[52,36977,2099],{"class":160},[52,36979,3332],{"class":90},[52,36981,34398],{"class":622},[52,36983,36984,36987,36989,36991],{"class":54,"line":206},[52,36985,36986],{"class":8172},"                                    shuffle",[52,36988,2099],{"class":160},[52,36990,34408],{"class":90},[52,36992,34398],{"class":622},[52,36994,36995,36998,37000,37002],{"class":54,"line":224},[52,36996,36997],{"class":8172},"                                    num_workers",[52,36999,2099],{"class":160},[52,37001,3306],{"class":90},[52,37003,170],{"class":622},[52,37005,37006,37008],{"class":54,"line":229},[52,37007,7049],{"class":160},[52,37009,37010],{"class":622}," test_dataloader\n",[52,37012,37013],{"class":54,"line":241},[52,37014,116],{"emptyLinePlaceholder":115},[52,37016,37017],{"class":54,"line":246},[52,37018,37019],{"class":332},"# 定义模型测试函数\n",[52,37021,37022,37024,37027],{"class":54,"line":252},[52,37023,34879],{"class":160},[52,37025,37026],{"class":58}," test_model_process",[52,37028,37029],{"class":622},"(model,test_dataloader):\n",[52,37031,37032],{"class":54,"line":257},[52,37033,37034],{"class":332},"    # 将模型放到设备当中，先进行判断\n",[52,37036,37037,37039,37041,37043,37045,37047,37049],{"class":54,"line":266},[52,37038,34169],{"class":622},[52,37040,2099],{"class":160},[52,37042,34176],{"class":62},[52,37044,4671],{"class":160},[52,37046,34181],{"class":622},[52,37048,4668],{"class":160},[52,37050,37051],{"class":62}," \"cpu\"\n",[52,37053,37054,37056,37058],{"class":54,"line":4722},[52,37055,34221],{"class":622},[52,37057,2099],{"class":160},[52,37059,35221],{"class":622},[52,37061,37062],{"class":54,"line":4727},[52,37063,116],{"emptyLinePlaceholder":115},[52,37065,37066],{"class":54,"line":4741},[52,37067,37068],{"class":332},"    # 设置初始化参数\n",[52,37070,37071,37074,37076],{"class":54,"line":4746},[52,37072,37073],{"class":622},"    test_corrects",[52,37075,2099],{"class":160},[52,37077,35274],{"class":90},[52,37079,37080,37083,37085],{"class":54,"line":5538},[52,37081,37082],{"class":622},"    test_num",[52,37084,2099],{"class":160},[52,37086,2719],{"class":90},[52,37088,37089],{"class":54,"line":5552},[52,37090,116],{"emptyLinePlaceholder":115},[52,37092,37093],{"class":54,"line":5560},[52,37094,37095],{"class":332},"    # 进行模型测试\n",[52,37097,37098],{"class":54,"line":5565},[52,37099,37100],{"class":332},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[52,37102,37103],{"class":54,"line":5571},[52,37104,37105],{"class":332},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[52,37107,37108,37111],{"class":54,"line":5577},[52,37109,37110],{"class":160},"    with",[52,37112,35816],{"class":622},[52,37114,37115],{"class":54,"line":5582},[52,37116,37117],{"class":332},"        # 从数据中进行\n",[52,37119,37120,37122,37125,37127],{"class":54,"line":10904},[52,37121,6362],{"class":160},[52,37123,37124],{"class":622}," test_data_x,test_data_y ",[52,37126,28988],{"class":160},[52,37128,37129],{"class":622}," test_dataloader:\n",[52,37131,37132,37135,37137],{"class":54,"line":10928},[52,37133,37134],{"class":622},"            test_data_x",[52,37136,2099],{"class":160},[52,37138,37139],{"class":622},"test_data_x.to(device)\n",[52,37141,37142,37145,37147],{"class":54,"line":10933},[52,37143,37144],{"class":622},"            test_data_y",[52,37146,2099],{"class":160},[52,37148,37149],{"class":622},"test_data_y.to(device)\n",[52,37151,37152],{"class":54,"line":10939},[52,37153,37154],{"class":332},"            # 设置为验证模式\n",[52,37156,37157],{"class":54,"line":10966},[52,37158,35807],{"class":622},[52,37160,37161],{"class":54,"line":10971},[52,37162,37163],{"class":332},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[52,37165,37166,37168,37170],{"class":54,"line":10977},[52,37167,35592],{"class":622},[52,37169,2099],{"class":160},[52,37171,37172],{"class":622},"model(test_data_x)\n",[52,37174,37175],{"class":54,"line":10989},[52,37176,37177],{"class":332},"            # 查找每一行中最大值对应的下标\n",[52,37179,37180,37182,37184,37186,37188,37190,37192],{"class":54,"line":11001},[52,37181,35609],{"class":622},[52,37183,2099],{"class":160},[52,37185,35614],{"class":622},[52,37187,35617],{"class":8172},[52,37189,2099],{"class":160},[52,37191,3332],{"class":90},[52,37193,170],{"class":622},[52,37195,37196],{"class":54,"line":11013},[52,37197,37198],{"class":332},"            # 计算正确率\n",[52,37200,37201],{"class":54,"line":12672},[52,37202,37203],{"class":332},"            # .data表示是一个不带梯度信息的tensor\n",[52,37205,37206],{"class":54,"line":12697},[52,37207,37208],{"class":332},"            # 如果预测正确，则准确度test_corrects加1\n",[52,37210,37211,37214,37216,37218,37220],{"class":54,"line":12720},[52,37212,37213],{"class":622},"            test_corrects",[52,37215,12433],{"class":160},[52,37217,35719],{"class":622},[52,37219,5909],{"class":160},[52,37221,37222],{"class":622},"test_data_y.data)\n",[52,37224,37225],{"class":54,"line":12744},[52,37226,37227],{"class":332},"            # 将所有的测试样本进行累计\n",[52,37229,37230,37233,37235,37238,37240],{"class":54,"line":12749},[52,37231,37232],{"class":622},"            test_num",[52,37234,12433],{"class":160},[52,37236,37237],{"class":622},"test_data_x.size(",[52,37239,3306],{"class":90},[52,37241,170],{"class":622},[52,37243,37244],{"class":54,"line":12754},[52,37245,116],{"emptyLinePlaceholder":115},[52,37247,37248],{"class":54,"line":12759},[52,37249,37250],{"class":332},"        # 计算准确度\n",[52,37252,37253,37256,37258,37261,37263],{"class":54,"line":12768},[52,37254,37255],{"class":622},"        test_acc",[52,37257,2099],{"class":160},[52,37259,37260],{"class":622},"test_corrects.double().item()",[52,37262,3696],{"class":160},[52,37264,37265],{"class":622},"test_num\n",[52,37267,37268],{"class":54,"line":12773},[52,37269,37270],{"class":332},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[52,37272,37273,37275,37277,37280],{"class":54,"line":12779},[52,37274,35383],{"class":90},[52,37276,3121],{"class":622},[52,37278,37279],{"class":62},"\"测试的准确率：\"",[52,37281,37282],{"class":622},",test_acc)\n",[52,37284,37285],{"class":54,"line":12800},[52,37286,116],{"emptyLinePlaceholder":115},[52,37288,37289],{"class":54,"line":12806},[52,37290,37291],{"class":332},"# 实现模型的测试功能\n",[52,37293,37294,37296,37298,37300,37302],{"class":54,"line":12820},[52,37295,4509],{"class":160},[52,37297,34152],{"class":90},[52,37299,5909],{"class":160},[52,37301,34157],{"class":62},[52,37303,6698],{"class":622},[52,37305,37306],{"class":54,"line":12826},[52,37307,37308],{"class":332},"    # 加载模型\n",[52,37310,37311,37313,37315],{"class":54,"line":12853},[52,37312,34221],{"class":622},[52,37314,2099],{"class":160},[52,37316,36757],{"class":622},[52,37318,37319],{"class":54,"line":12862},[52,37320,37321],{"class":332},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[52,37323,37324],{"class":54,"line":12868},[52,37325,37326],{"class":332},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[52,37328,37329,37332,37335],{"class":54,"line":12876},[52,37330,37331],{"class":622},"    model.load_state_dict(torch.load(",[52,37333,37334],{"class":62},"'best_model.pth'",[52,37336,33429],{"class":622},[52,37338,37339],{"class":54,"line":12881},[52,37340,37341],{"class":332},"    # 数据加载\n",[52,37343,37344,37346,37348],{"class":54,"line":19560},[52,37345,36954],{"class":622},[52,37347,2099],{"class":160},[52,37349,37350],{"class":622},"test_data_process()\n",[52,37352,37353],{"class":54,"line":19566},[52,37354,37355],{"class":332},"    # 加载模型测试的函数\n",[52,37357,37358],{"class":54,"line":19589},[52,37359,37360],{"class":622},"    test_model_process(model,test_dataloader)\n",[52,37362,37363],{"class":54,"line":19595},[52,37364,116],{"emptyLinePlaceholder":115},[52,37366,37367],{"class":54,"line":19618},[52,37368,37369],{"class":332},"    # 验证集推理实现：\n",[52,37371,37372],{"class":54,"line":19632},[52,37373,37374],{"class":332},"    # 加载数据加载的更详细一些\n",[52,37376,37377,37379,37381,37383,37385,37387,37389],{"class":54,"line":19652},[52,37378,34169],{"class":622},[52,37380,2099],{"class":160},[52,37382,34176],{"class":62},[52,37384,4671],{"class":160},[52,37386,34181],{"class":622},[52,37388,4668],{"class":160},[52,37390,37051],{"class":62},[52,37392,37393,37395,37397],{"class":54,"line":19658},[52,37394,34221],{"class":622},[52,37396,2099],{"class":160},[52,37398,35221],{"class":622},[52,37400,37401],{"class":54,"line":19669},[52,37402,37403],{"class":332},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[52,37405,37406],{"class":54,"line":19692},[52,37407,37408],{"class":332},"    # 顺序不可改变\n",[52,37410,37411,37414,37416,37418,37421,37423,37426,37428,37431,37433,37436,37438,37441,37443,37446,37448,37451,37453,37456,37458,37461,37463,37466],{"class":54,"line":19714},[52,37412,37413],{"class":622},"    classes",[52,37415,2099],{"class":160},[52,37417,4002],{"class":622},[52,37419,37420],{"class":62},"'T-shirt\u002Ftop'",[52,37422,3491],{"class":622},[52,37424,37425],{"class":62},"'Trouser'",[52,37427,3491],{"class":622},[52,37429,37430],{"class":62},"'Pullover'",[52,37432,3491],{"class":622},[52,37434,37435],{"class":62},"'Dress'",[52,37437,3491],{"class":622},[52,37439,37440],{"class":62},"'Coat'",[52,37442,3491],{"class":622},[52,37444,37445],{"class":62},"'Sandal'",[52,37447,3491],{"class":622},[52,37449,37450],{"class":62},"'Shirt'",[52,37452,3491],{"class":622},[52,37454,37455],{"class":62},"'Sneaker'",[52,37457,3491],{"class":622},[52,37459,37460],{"class":62},"'Bag'",[52,37462,3491],{"class":622},[52,37464,37465],{"class":62},"'Ankle boot'",[52,37467,36178],{"class":622},[52,37469,37470,37472],{"class":54,"line":19719},[52,37471,37110],{"class":160},[52,37473,35816],{"class":622},[52,37475,37476],{"class":54,"line":19725},[52,37477,37478],{"class":332},"        # 将数据和标签都放到设备当中\n",[52,37480,37481,37483,37486,37488],{"class":54,"line":19739},[52,37482,6362],{"class":160},[52,37484,37485],{"class":622}," b_x,b_y ",[52,37487,28988],{"class":160},[52,37489,37129],{"class":622},[52,37491,37492,37494,37496],{"class":54,"line":19752},[52,37493,35542],{"class":622},[52,37495,2099],{"class":160},[52,37497,35547],{"class":622},[52,37499,37500,37502,37504],{"class":54,"line":19757},[52,37501,35557],{"class":622},[52,37503,2099],{"class":160},[52,37505,35562],{"class":622},[52,37507,37508],{"class":54,"line":19771},[52,37509,116],{"emptyLinePlaceholder":115},[52,37511,37512],{"class":54,"line":19776},[52,37513,37514],{"class":332},"            # 设置模型为验证模式\n",[52,37516,37517],{"class":54,"line":19782},[52,37518,35807],{"class":622},[52,37520,37521],{"class":54,"line":19787},[52,37522,37523],{"class":332},"            # 模型推理结果\n",[52,37525,37526,37528,37530],{"class":54,"line":19801},[52,37527,35592],{"class":622},[52,37529,2099],{"class":160},[52,37531,35597],{"class":622},[52,37533,37534],{"class":54,"line":19806},[52,37535,37536],{"class":332},"            # 获取最大下标，最大下标就是类别号\n",[52,37538,37539,37541,37543,37545,37547,37549,37551],{"class":54,"line":19811},[52,37540,35609],{"class":622},[52,37542,2099],{"class":160},[52,37544,35614],{"class":622},[52,37546,35617],{"class":8172},[52,37548,2099],{"class":160},[52,37550,3332],{"class":90},[52,37552,170],{"class":622},[52,37554,37555],{"class":54,"line":19825},[52,37556,37557],{"class":332},"            # 取出张量中的数值\n",[52,37559,37560,37563,37565],{"class":54,"line":19837},[52,37561,37562],{"class":622},"            result",[52,37564,2099],{"class":160},[52,37566,37567],{"class":622},"pre_lab.item()\n",[52,37569,37570,37573,37575],{"class":54,"line":19842},[52,37571,37572],{"class":622},"            label",[52,37574,2099],{"class":160},[52,37576,37577],{"class":622},"b_y.item()\n",[52,37579,37580,37583,37585,37588,37591,37594,37596,37599],{"class":54,"line":19855},[52,37581,37582],{"class":90},"            print",[52,37584,3121],{"class":622},[52,37586,37587],{"class":62},"\"预测值：\"",[52,37589,37590],{"class":622},",classes[result],",[52,37592,37593],{"class":62},"\"------\"",[52,37595,3491],{"class":622},[52,37597,37598],{"class":62},"\"真实值：\"",[52,37600,37601],{"class":622},",classes[label])\n",[274,37603,37604],{},"（2）AlexNet",[1070,37606,37607],{},[1073,37608,37609],{},"神经网络构建",[19,37611,37613],{"className":33310,"code":37612,"language":33312,"meta":28,"style":28},"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",[26,37614,37615,37621,37631,37641,37653,37657,37674,37682,37697,37709,37751,37778,37821,37847,37891,37934,37977,38004,38008,38018,38023,38051,38070,38089,38093,38098,38106,38121,38131,38145,38155,38170,38185,38200,38211,38215,38220,38230,38245,38250,38264,38279,38291,38296,38307,38312,38318,38323,38335,38355,38360,38369],{"__ignoreMap":28},[52,37616,37617,37619],{"class":54,"line":55},[52,37618,33324],{"class":160},[52,37620,33327],{"class":622},[52,37622,37623,37625,37627,37629],{"class":54,"line":69},[52,37624,33669],{"class":160},[52,37626,33672],{"class":622},[52,37628,33324],{"class":160},[52,37630,33677],{"class":622},[52,37632,37633,37635,37637,37639],{"class":54,"line":82},[52,37634,33669],{"class":160},[52,37636,33689],{"class":622},[52,37638,33324],{"class":160},[52,37640,33694],{"class":622},[52,37642,37643,37645,37648,37650],{"class":54,"line":97},[52,37644,33324],{"class":160},[52,37646,37647],{"class":622}," torch.nn.functional ",[52,37649,34315],{"class":160},[52,37651,37652],{"class":622}," F\n",[52,37654,37655],{"class":54,"line":112},[52,37656,116],{"emptyLinePlaceholder":115},[52,37658,37659,37661,37664,37666,37668,37670,37672],{"class":54,"line":119},[52,37660,17650],{"class":160},[52,37662,37663],{"class":58}," AlexNet",[52,37665,3121],{"class":622},[52,37667,33710],{"class":58},[52,37669,3670],{"class":622},[52,37671,33715],{"class":58},[52,37673,33718],{"class":622},[52,37675,37676,37678,37680],{"class":54,"line":130},[52,37677,33733],{"class":160},[52,37679,33736],{"class":90},[52,37681,33739],{"class":622},[52,37683,37684,37686,37689,37691,37693,37695],{"class":54,"line":136},[52,37685,33749],{"class":90},[52,37687,37688],{"class":622},"(AlexNet,",[52,37690,33755],{"class":90},[52,37692,33758],{"class":622},[52,37694,33761],{"class":90},[52,37696,4938],{"class":622},[52,37698,37699,37701,37704,37706],{"class":54,"line":141},[52,37700,33777],{"class":90},[52,37702,37703],{"class":622},".ReLu",[52,37705,2099],{"class":160},[52,37707,37708],{"class":622},"nn.ReLU()\n",[52,37710,37711,37713,37715,37717,37719,37721,37723,37725,37727,37729,37731,37733,37735,37737,37739,37741,37743,37745,37747,37749],{"class":54,"line":146},[52,37712,33777],{"class":90},[52,37714,33780],{"class":622},[52,37716,2099],{"class":160},[52,37718,33785],{"class":622},[52,37720,33788],{"class":8172},[52,37722,2099],{"class":160},[52,37724,3332],{"class":90},[52,37726,3491],{"class":622},[52,37728,33797],{"class":8172},[52,37730,2099],{"class":160},[52,37732,3324],{"class":90},[52,37734,3491],{"class":622},[52,37736,33806],{"class":8172},[52,37738,2099],{"class":160},[52,37740,3584],{"class":90},[52,37742,3491],{"class":622},[52,37744,33861],{"class":8172},[52,37746,2099],{"class":160},[52,37748,3406],{"class":90},[52,37750,170],{"class":622},[52,37752,37753,37755,37757,37759,37762,37764,37766,37768,37770,37772,37774,37776],{"class":54,"line":152},[52,37754,33777],{"class":90},[52,37756,33845],{"class":622},[52,37758,2099],{"class":160},[52,37760,37761],{"class":622},"nn.MaxPool2d(",[52,37763,33806],{"class":8172},[52,37765,2099],{"class":160},[52,37767,3188],{"class":90},[52,37769,3491],{"class":622},[52,37771,33861],{"class":8172},[52,37773,2099],{"class":160},[52,37775,3194],{"class":90},[52,37777,170],{"class":622},[52,37779,37780,37782,37784,37786,37788,37790,37792,37794,37796,37798,37800,37803,37805,37807,37809,37811,37813,37815,37817,37819],{"class":54,"line":157},[52,37781,33777],{"class":90},[52,37783,33874],{"class":622},[52,37785,2099],{"class":160},[52,37787,33785],{"class":622},[52,37789,33788],{"class":8172},[52,37791,2099],{"class":160},[52,37793,3324],{"class":90},[52,37795,3491],{"class":622},[52,37797,33797],{"class":8172},[52,37799,2099],{"class":160},[52,37801,37802],{"class":90},"256",[52,37804,3491],{"class":622},[52,37806,33806],{"class":8172},[52,37808,2099],{"class":160},[52,37810,3432],{"class":90},[52,37812,3491],{"class":622},[52,37814,33815],{"class":8172},[52,37816,2099],{"class":160},[52,37818,3194],{"class":90},[52,37820,170],{"class":622},[52,37822,37823,37825,37827,37829,37831,37833,37835,37837,37839,37841,37843,37845],{"class":54,"line":173},[52,37824,33777],{"class":90},[52,37826,33909],{"class":622},[52,37828,2099],{"class":160},[52,37830,37761],{"class":622},[52,37832,33806],{"class":8172},[52,37834,2099],{"class":160},[52,37836,3188],{"class":90},[52,37838,3491],{"class":622},[52,37840,33861],{"class":8172},[52,37842,2099],{"class":160},[52,37844,3194],{"class":90},[52,37846,170],{"class":622},[52,37848,37849,37851,37854,37856,37858,37860,37862,37864,37866,37868,37870,37873,37875,37877,37879,37881,37883,37885,37887,37889],{"class":54,"line":178},[52,37850,33777],{"class":90},[52,37852,37853],{"class":622},".c5",[52,37855,2099],{"class":160},[52,37857,33785],{"class":622},[52,37859,33788],{"class":8172},[52,37861,2099],{"class":160},[52,37863,37802],{"class":90},[52,37865,3491],{"class":622},[52,37867,33797],{"class":8172},[52,37869,2099],{"class":160},[52,37871,37872],{"class":90},"384",[52,37874,3491],{"class":622},[52,37876,33806],{"class":8172},[52,37878,2099],{"class":160},[52,37880,3188],{"class":90},[52,37882,3491],{"class":622},[52,37884,33815],{"class":8172},[52,37886,2099],{"class":160},[52,37888,3332],{"class":90},[52,37890,170],{"class":622},[52,37892,37893,37895,37898,37900,37902,37904,37906,37908,37910,37912,37914,37916,37918,37920,37922,37924,37926,37928,37930,37932],{"class":54,"line":184},[52,37894,33777],{"class":90},[52,37896,37897],{"class":622},".c6",[52,37899,2099],{"class":160},[52,37901,33785],{"class":622},[52,37903,33788],{"class":8172},[52,37905,2099],{"class":160},[52,37907,37872],{"class":90},[52,37909,3491],{"class":622},[52,37911,33797],{"class":8172},[52,37913,2099],{"class":160},[52,37915,37872],{"class":90},[52,37917,3491],{"class":622},[52,37919,33806],{"class":8172},[52,37921,2099],{"class":160},[52,37923,3188],{"class":90},[52,37925,3491],{"class":622},[52,37927,33815],{"class":8172},[52,37929,2099],{"class":160},[52,37931,3332],{"class":90},[52,37933,170],{"class":622},[52,37935,37936,37938,37941,37943,37945,37947,37949,37951,37953,37955,37957,37959,37961,37963,37965,37967,37969,37971,37973,37975],{"class":54,"line":189},[52,37937,33777],{"class":90},[52,37939,37940],{"class":622},".c7",[52,37942,2099],{"class":160},[52,37944,33785],{"class":622},[52,37946,33788],{"class":8172},[52,37948,2099],{"class":160},[52,37950,37872],{"class":90},[52,37952,3491],{"class":622},[52,37954,33797],{"class":8172},[52,37956,2099],{"class":160},[52,37958,37802],{"class":90},[52,37960,3491],{"class":622},[52,37962,33806],{"class":8172},[52,37964,2099],{"class":160},[52,37966,3188],{"class":90},[52,37968,3491],{"class":622},[52,37970,33815],{"class":8172},[52,37972,2099],{"class":160},[52,37974,3332],{"class":90},[52,37976,170],{"class":622},[52,37978,37979,37981,37984,37986,37988,37990,37992,37994,37996,37998,38000,38002],{"class":54,"line":201},[52,37980,33777],{"class":90},[52,37982,37983],{"class":622},".s8",[52,37985,2099],{"class":160},[52,37987,37761],{"class":622},[52,37989,33806],{"class":8172},[52,37991,2099],{"class":160},[52,37993,3188],{"class":90},[52,37995,3491],{"class":622},[52,37997,33861],{"class":8172},[52,37999,2099],{"class":160},[52,38001,3194],{"class":90},[52,38003,170],{"class":622},[52,38005,38006],{"class":54,"line":206},[52,38007,33934],{"class":332},[52,38009,38010,38012,38014,38016],{"class":54,"line":224},[52,38011,33777],{"class":90},[52,38013,33941],{"class":622},[52,38015,2099],{"class":160},[52,38017,33946],{"class":622},[52,38019,38020],{"class":54,"line":229},[52,38021,38022],{"class":332},"       # 定义全连接层\n",[52,38024,38025,38027,38030,38032,38034,38036,38038,38040,38042,38044,38046,38049],{"class":54,"line":241},[52,38026,33777],{"class":90},[52,38028,38029],{"class":622},".f1",[52,38031,2099],{"class":160},[52,38033,33963],{"class":622},[52,38035,3457],{"class":90},[52,38037,1095],{"class":160},[52,38039,3457],{"class":90},[52,38041,1095],{"class":160},[52,38043,37802],{"class":90},[52,38045,3491],{"class":622},[52,38047,38048],{"class":90},"4096",[52,38050,170],{"class":622},[52,38052,38053,38055,38058,38060,38062,38064,38066,38068],{"class":54,"line":246},[52,38054,33777],{"class":90},[52,38056,38057],{"class":622},".f2",[52,38059,2099],{"class":160},[52,38061,33963],{"class":622},[52,38063,38048],{"class":90},[52,38065,3491],{"class":622},[52,38067,38048],{"class":90},[52,38069,170],{"class":622},[52,38071,38072,38074,38077,38079,38081,38083,38085,38087],{"class":54,"line":252},[52,38073,33777],{"class":90},[52,38075,38076],{"class":622},".f3",[52,38078,2099],{"class":160},[52,38080,33963],{"class":622},[52,38082,38048],{"class":90},[52,38084,3491],{"class":622},[52,38086,3559],{"class":90},[52,38088,170],{"class":622},[52,38090,38091],{"class":54,"line":257},[52,38092,116],{"emptyLinePlaceholder":115},[52,38094,38095],{"class":54,"line":266},[52,38096,38097],{"class":332},"    # 定义前向传播\n",[52,38099,38100,38102,38104],{"class":54,"line":4722},[52,38101,33733],{"class":160},[52,38103,34025],{"class":58},[52,38105,34028],{"class":622},[52,38107,38108,38110,38112,38114,38117,38119],{"class":54,"line":4727},[52,38109,34033],{"class":622},[52,38111,2099],{"class":160},[52,38113,33755],{"class":90},[52,38115,38116],{"class":622},".ReLu(",[52,38118,33755],{"class":90},[52,38120,34045],{"class":622},[52,38122,38123,38125,38127,38129],{"class":54,"line":4741},[52,38124,34033],{"class":622},[52,38126,2099],{"class":160},[52,38128,33755],{"class":90},[52,38130,34056],{"class":622},[52,38132,38133,38135,38137,38139,38141,38143],{"class":54,"line":4746},[52,38134,34033],{"class":622},[52,38136,2099],{"class":160},[52,38138,33755],{"class":90},[52,38140,38116],{"class":622},[52,38142,33755],{"class":90},[52,38144,34071],{"class":622},[52,38146,38147,38149,38151,38153],{"class":54,"line":5538},[52,38148,34033],{"class":622},[52,38150,2099],{"class":160},[52,38152,33755],{"class":90},[52,38154,34082],{"class":622},[52,38156,38157,38159,38161,38163,38165,38167],{"class":54,"line":5552},[52,38158,34033],{"class":622},[52,38160,2099],{"class":160},[52,38162,33755],{"class":90},[52,38164,38116],{"class":622},[52,38166,33755],{"class":90},[52,38168,38169],{"class":622},".c5(x))\n",[52,38171,38172,38174,38176,38178,38180,38182],{"class":54,"line":5560},[52,38173,34033],{"class":622},[52,38175,2099],{"class":160},[52,38177,33755],{"class":90},[52,38179,38116],{"class":622},[52,38181,33755],{"class":90},[52,38183,38184],{"class":622},".c6(x))\n",[52,38186,38187,38189,38191,38193,38195,38197],{"class":54,"line":5565},[52,38188,34033],{"class":622},[52,38190,2099],{"class":160},[52,38192,33755],{"class":90},[52,38194,38116],{"class":622},[52,38196,33755],{"class":90},[52,38198,38199],{"class":622},".c7(x))\n",[52,38201,38202,38204,38206,38208],{"class":54,"line":5571},[52,38203,34033],{"class":622},[52,38205,2099],{"class":160},[52,38207,33755],{"class":90},[52,38209,38210],{"class":622},".s8(x)\n",[52,38212,38213],{"class":54,"line":5577},[52,38214,116],{"emptyLinePlaceholder":115},[52,38216,38217],{"class":54,"line":5582},[52,38218,38219],{"class":332},"        # 展平加线性全连接层\n",[52,38221,38222,38224,38226,38228],{"class":54,"line":10904},[52,38223,34033],{"class":622},[52,38225,2099],{"class":160},[52,38227,33755],{"class":90},[52,38229,34093],{"class":622},[52,38231,38232,38234,38236,38238,38240,38242],{"class":54,"line":10928},[52,38233,34033],{"class":622},[52,38235,2099],{"class":160},[52,38237,33755],{"class":90},[52,38239,38116],{"class":622},[52,38241,33755],{"class":90},[52,38243,38244],{"class":622},".f1(x))\n",[52,38246,38247],{"class":54,"line":10933},[52,38248,38249],{"class":332},"        # 还需要dropout对神经元随机进行失活\n",[52,38251,38252,38254,38256,38259,38262],{"class":54,"line":10939},[52,38253,34033],{"class":622},[52,38255,2099],{"class":160},[52,38257,38258],{"class":622},"F.dropout(x,",[52,38260,38261],{"class":90},"0.5",[52,38263,170],{"class":622},[52,38265,38266,38268,38270,38272,38274,38276],{"class":54,"line":10966},[52,38267,34033],{"class":622},[52,38269,2099],{"class":160},[52,38271,33755],{"class":90},[52,38273,38116],{"class":622},[52,38275,33755],{"class":90},[52,38277,38278],{"class":622},".f2(x))\n",[52,38280,38281,38283,38285,38287,38289],{"class":54,"line":10971},[52,38282,34033],{"class":622},[52,38284,2099],{"class":160},[52,38286,38258],{"class":622},[52,38288,38261],{"class":90},[52,38290,170],{"class":622},[52,38292,38293],{"class":54,"line":10977},[52,38294,38295],{"class":332},"        # 直接输出\n",[52,38297,38298,38300,38302,38304],{"class":54,"line":10989},[52,38299,34033],{"class":622},[52,38301,2099],{"class":160},[52,38303,33755],{"class":90},[52,38305,38306],{"class":622},".f3(x)\n",[52,38308,38309],{"class":54,"line":11001},[52,38310,38311],{"class":332},"        # 前向传播输出\n",[52,38313,38314,38316],{"class":54,"line":11013},[52,38315,17708],{"class":160},[52,38317,34141],{"class":622},[52,38319,38320],{"class":54,"line":12672},[52,38321,38322],{"class":332},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[52,38324,38325,38327,38329,38331,38333],{"class":54,"line":12697},[52,38326,4509],{"class":160},[52,38328,34152],{"class":90},[52,38330,5909],{"class":160},[52,38332,34157],{"class":62},[52,38334,6698],{"class":622},[52,38336,38337,38339,38341,38343,38345,38347,38349,38351,38353],{"class":54,"line":12720},[52,38338,34169],{"class":622},[52,38340,2099],{"class":160},[52,38342,33383],{"class":622},[52,38344,34176],{"class":62},[52,38346,4671],{"class":160},[52,38348,34181],{"class":622},[52,38350,4668],{"class":160},[52,38352,33408],{"class":62},[52,38354,170],{"class":622},[52,38356,38357],{"class":54,"line":12744},[52,38358,38359],{"class":332},"    # 模型实例化，然后将实例化的模型放到设备中\n",[52,38361,38362,38364,38366],{"class":54,"line":12749},[52,38363,34221],{"class":622},[52,38365,2099],{"class":160},[52,38367,38368],{"class":622},"AlexNet().to(device)\n",[52,38370,38371,38373,38375,38377,38379,38382,38384,38386],{"class":54,"line":12754},[52,38372,34231],{"class":90},[52,38374,34234],{"class":622},[52,38376,3332],{"class":90},[52,38378,3491],{"class":622},[52,38380,38381],{"class":90},"227",[52,38383,3491],{"class":622},[52,38385,38381],{"class":90},[52,38387,34247],{"class":622},[1070,38389,38390],{"start":69},[1073,38391,34260],{},[19,38393,38395],{"className":33310,"code":38394,"language":33312,"meta":28,"style":28},"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",[26,38396,38397,38403,38409,38419,38425,38435,38445,38455,38465,38475,38479,38490,38500,38504,38508,38512,38520,38532,38542,38558,38568,38600,38614,38624,38634,38638,38648,38662,38672,38682,38692,38698,38702,38706,38710,38714,38718,38726,38746,38750,38754,38758,38762,38766,38782,38786,38790,38798,38802,38806,38814,38818,38822,38826,38834,38838,38842,38846,38850,38858,38862,38870,38874,38882,38886,38894,38898,38906,38910,38914,38922,38926,38930,38934,38946,38970,38984,38988,38992,38996,39004,39008,39016,39020,39028,39032,39040,39044,39052,39056,39064,39068,39080,39084,39092,39096,39104,39108,39112,39116,39120,39128,39132,39148,39152,39160,39164,39168,39172,39176,39180,39184,39188,39204,39208,39220,39224,39236,39240,39252,39256,39264,39268,39276,39280,39284,39289,39295,39299,39308,39312,39329,39333,39342,39346,39364,39377,39382,39395,39399,39403,39411,39415,39419,39427,39431,39439,39443,39451,39455,39459,39501,39543,39547,39551,39567,39571,39587,39591,39595,39603,39607,39611,39623,39661,39666,39671,39680,39684,39698,39708,39714,39720,39726,39732,39736,39740,39746,39750,39754,39762,39766,39784,39788,39792,39796,39812,39816,39820,39824,39828,39832,39852,39872,39876,39880,39884,39892,39900,39904,39920,39940,39960,39964,39968,39976,39984,39988,39992,39996,40008,40012,40022,40030,40047],{"__ignoreMap":28},[52,38398,38399,38401],{"class":54,"line":55},[52,38400,33324],{"class":160},[52,38402,34754],{"class":622},[52,38404,38405,38407],{"class":54,"line":69},[52,38406,33324],{"class":160},[52,38408,34761],{"class":622},[52,38410,38411,38413,38415,38417],{"class":54,"line":82},[52,38412,33324],{"class":160},[52,38414,34772],{"class":622},[52,38416,34315],{"class":160},[52,38418,34777],{"class":622},[52,38420,38421,38423],{"class":54,"line":97},[52,38422,33324],{"class":160},[52,38424,33327],{"class":622},[52,38426,38427,38429,38431,38433],{"class":54,"line":112},[52,38428,33669],{"class":160},[52,38430,34347],{"class":622},[52,38432,33324],{"class":160},[52,38434,34794],{"class":622},[52,38436,38437,38439,38441,38443],{"class":54,"line":119},[52,38438,33669],{"class":160},[52,38440,34300],{"class":622},[52,38442,33324],{"class":160},[52,38444,34305],{"class":622},[52,38446,38447,38449,38451,38453],{"class":54,"line":130},[52,38448,33669],{"class":160},[52,38450,34330],{"class":622},[52,38452,33324],{"class":160},[52,38454,34335],{"class":622},[52,38456,38457,38459,38461,38463],{"class":54,"line":136},[52,38458,33324],{"class":160},[52,38460,34347],{"class":622},[52,38462,34315],{"class":160},[52,38464,34352],{"class":622},[52,38466,38467,38469,38471,38473],{"class":54,"line":141},[52,38468,33324],{"class":160},[52,38470,34364],{"class":622},[52,38472,34315],{"class":160},[52,38474,34369],{"class":622},[52,38476,38477],{"class":54,"line":146},[52,38478,34839],{"class":332},[52,38480,38481,38483,38485,38487],{"class":54,"line":152},[52,38482,33669],{"class":160},[52,38484,34846],{"class":622},[52,38486,33324],{"class":160},[52,38488,38489],{"class":622}," AlexNet\n",[52,38491,38492,38494,38496,38498],{"class":54,"line":157},[52,38493,33669],{"class":160},[52,38495,33672],{"class":622},[52,38497,33324],{"class":160},[52,38499,33677],{"class":622},[52,38501,38502],{"class":54,"line":173},[52,38503,116],{"emptyLinePlaceholder":115},[52,38505,38506],{"class":54,"line":178},[52,38507,116],{"emptyLinePlaceholder":115},[52,38509,38510],{"class":54,"line":184},[52,38511,34874],{"class":332},[52,38513,38514,38516,38518],{"class":54,"line":189},[52,38515,34879],{"class":160},[52,38517,34882],{"class":58},[52,38519,34885],{"class":622},[52,38521,38522,38524,38526,38528,38530],{"class":54,"line":201},[52,38523,34890],{"class":622},[52,38525,2099],{"class":160},[52,38527,34387],{"class":622},[52,38529,34395],{"class":62},[52,38531,34398],{"class":622},[52,38533,38534,38536,38538,38540],{"class":54,"line":206},[52,38535,34903],{"class":8172},[52,38537,2099],{"class":160},[52,38539,34408],{"class":90},[52,38541,34398],{"class":622},[52,38543,38544,38546,38548,38550,38552,38554,38556],{"class":54,"line":224},[52,38545,34914],{"class":8172},[52,38547,2099],{"class":160},[52,38549,34425],{"class":622},[52,38551,34428],{"class":8172},[52,38553,2099],{"class":160},[52,38555,38381],{"class":90},[52,38557,34436],{"class":622},[52,38559,38560,38562,38564,38566],{"class":54,"line":229},[52,38561,34931],{"class":8172},[52,38563,2099],{"class":160},[52,38565,34408],{"class":90},[52,38567,170],{"class":622},[52,38569,38570,38572,38574,38576,38578,38580,38582,38584,38586,38588,38590,38592,38594,38596,38598],{"class":54,"line":241},[52,38571,34942],{"class":622},[52,38573,2099],{"class":160},[52,38575,34947],{"class":622},[52,38577,34950],{"class":90},[52,38579,3121],{"class":622},[52,38581,34955],{"class":90},[52,38583,1095],{"class":160},[52,38585,10314],{"class":90},[52,38587,34962],{"class":622},[52,38589,34950],{"class":90},[52,38591,3121],{"class":622},[52,38593,34969],{"class":90},[52,38595,1095],{"class":160},[52,38597,10314],{"class":90},[52,38599,34976],{"class":622},[52,38601,38602,38604,38606,38608,38610,38612],{"class":54,"line":246},[52,38603,34981],{"class":622},[52,38605,2099],{"class":160},[52,38607,34986],{"class":622},[52,38609,34469],{"class":8172},[52,38611,2099],{"class":160},[52,38613,34474],{"class":622},[52,38615,38616,38618,38620,38622],{"class":54,"line":252},[52,38617,34997],{"class":8172},[52,38619,2099],{"class":160},[52,38621,35002],{"class":90},[52,38623,34398],{"class":622},[52,38625,38626,38628,38630,38632],{"class":54,"line":257},[52,38627,35009],{"class":8172},[52,38629,2099],{"class":160},[52,38631,34408],{"class":90},[52,38633,34398],{"class":622},[52,38635,38636],{"class":54,"line":266},[52,38637,35020],{"class":332},[52,38639,38640,38642,38644,38646],{"class":54,"line":4722},[52,38641,35025],{"class":8172},[52,38643,2099],{"class":160},[52,38645,3508],{"class":90},[52,38647,170],{"class":622},[52,38649,38650,38652,38654,38656,38658,38660],{"class":54,"line":4727},[52,38651,35036],{"class":622},[52,38653,2099],{"class":160},[52,38655,34466],{"class":622},[52,38657,34469],{"class":8172},[52,38659,2099],{"class":160},[52,38661,35047],{"class":622},[52,38663,38664,38666,38668,38670],{"class":54,"line":4741},[52,38665,35052],{"class":8172},[52,38667,2099],{"class":160},[52,38669,35002],{"class":90},[52,38671,34398],{"class":622},[52,38673,38674,38676,38678,38680],{"class":54,"line":4746},[52,38675,35063],{"class":8172},[52,38677,2099],{"class":160},[52,38679,34408],{"class":90},[52,38681,34398],{"class":622},[52,38683,38684,38686,38688,38690],{"class":54,"line":5538},[52,38685,35074],{"class":8172},[52,38687,2099],{"class":160},[52,38689,3508],{"class":90},[52,38691,170],{"class":622},[52,38693,38694,38696],{"class":54,"line":5552},[52,38695,7049],{"class":160},[52,38697,35087],{"class":622},[52,38699,38700],{"class":54,"line":5560},[52,38701,116],{"emptyLinePlaceholder":115},[52,38703,38704],{"class":54,"line":5565},[52,38705,35096],{"class":332},[52,38707,38708],{"class":54,"line":5571},[52,38709,35101],{"class":332},[52,38711,38712],{"class":54,"line":5577},[52,38713,116],{"emptyLinePlaceholder":115},[52,38715,38716],{"class":54,"line":5582},[52,38717,35110],{"class":332},[52,38719,38720,38722,38724],{"class":54,"line":10904},[52,38721,34879],{"class":160},[52,38723,35117],{"class":58},[52,38725,35120],{"class":622},[52,38727,38728,38730,38732,38734,38736,38738,38740,38742,38744],{"class":54,"line":10928},[52,38729,34169],{"class":622},[52,38731,2099],{"class":160},[52,38733,33383],{"class":622},[52,38735,34176],{"class":62},[52,38737,4671],{"class":160},[52,38739,34181],{"class":622},[52,38741,4668],{"class":160},[52,38743,35139],{"class":62},[52,38745,170],{"class":622},[52,38747,38748],{"class":54,"line":10933},[52,38749,116],{"emptyLinePlaceholder":115},[52,38751,38752],{"class":54,"line":10939},[52,38753,116],{"emptyLinePlaceholder":115},[52,38755,38756],{"class":54,"line":10966},[52,38757,35154],{"class":332},[52,38759,38760],{"class":54,"line":10971},[52,38761,35159],{"class":332},[52,38763,38764],{"class":54,"line":10977},[52,38765,35164],{"class":332},[52,38767,38768,38770,38772,38774,38776,38778,38780],{"class":54,"line":10989},[52,38769,35169],{"class":622},[52,38771,2099],{"class":160},[52,38773,35174],{"class":622},[52,38775,35177],{"class":8172},[52,38777,2099],{"class":160},[52,38779,35182],{"class":90},[52,38781,170],{"class":622},[52,38783,38784],{"class":54,"line":11001},[52,38785,116],{"emptyLinePlaceholder":115},[52,38787,38788],{"class":54,"line":11013},[52,38789,35193],{"class":332},[52,38791,38792,38794,38796],{"class":54,"line":12672},[52,38793,35198],{"class":622},[52,38795,2099],{"class":160},[52,38797,35203],{"class":622},[52,38799,38800],{"class":54,"line":12697},[52,38801,116],{"emptyLinePlaceholder":115},[52,38803,38804],{"class":54,"line":12720},[52,38805,35212],{"class":332},[52,38807,38808,38810,38812],{"class":54,"line":12744},[52,38809,34221],{"class":622},[52,38811,2099],{"class":160},[52,38813,35221],{"class":622},[52,38815,38816],{"class":54,"line":12749},[52,38817,35226],{"class":332},[52,38819,38820],{"class":54,"line":12754},[52,38821,35231],{"class":332},[52,38823,38824],{"class":54,"line":12759},[52,38825,35236],{"class":332},[52,38827,38828,38830,38832],{"class":54,"line":12768},[52,38829,35241],{"class":622},[52,38831,2099],{"class":160},[52,38833,35246],{"class":622},[52,38835,38836],{"class":54,"line":12773},[52,38837,116],{"emptyLinePlaceholder":115},[52,38839,38840],{"class":54,"line":12779},[52,38841,116],{"emptyLinePlaceholder":115},[52,38843,38844],{"class":54,"line":12800},[52,38845,35259],{"class":332},[52,38847,38848],{"class":54,"line":12806},[52,38849,35264],{"class":332},[52,38851,38852,38854,38856],{"class":54,"line":12820},[52,38853,35269],{"class":622},[52,38855,2099],{"class":160},[52,38857,35274],{"class":90},[52,38859,38860],{"class":54,"line":12826},[52,38861,35279],{"class":332},[52,38863,38864,38866,38868],{"class":54,"line":12853},[52,38865,35284],{"class":622},[52,38867,2099],{"class":160},[52,38869,35289],{"class":622},[52,38871,38872],{"class":54,"line":12862},[52,38873,35294],{"class":332},[52,38875,38876,38878,38880],{"class":54,"line":12868},[52,38877,35299],{"class":622},[52,38879,2099],{"class":160},[52,38881,35289],{"class":622},[52,38883,38884],{"class":54,"line":12876},[52,38885,35308],{"class":332},[52,38887,38888,38890,38892],{"class":54,"line":12881},[52,38889,35313],{"class":622},[52,38891,2099],{"class":160},[52,38893,35289],{"class":622},[52,38895,38896],{"class":54,"line":19560},[52,38897,35322],{"class":332},[52,38899,38900,38902,38904],{"class":54,"line":19566},[52,38901,35327],{"class":622},[52,38903,2099],{"class":160},[52,38905,35289],{"class":622},[52,38907,38908],{"class":54,"line":19589},[52,38909,116],{"emptyLinePlaceholder":115},[52,38911,38912],{"class":54,"line":19595},[52,38913,35340],{"class":332},[52,38915,38916,38918,38920],{"class":54,"line":19618},[52,38917,35345],{"class":622},[52,38919,2099],{"class":160},[52,38921,35350],{"class":622},[52,38923,38924],{"class":54,"line":19632},[52,38925,116],{"emptyLinePlaceholder":115},[52,38927,38928],{"class":54,"line":19652},[52,38929,116],{"emptyLinePlaceholder":115},[52,38931,38932],{"class":54,"line":19658},[52,38933,35363],{"class":332},[52,38935,38936,38938,38940,38942,38944],{"class":54,"line":19669},[52,38937,6160],{"class":160},[52,38939,35370],{"class":622},[52,38941,28988],{"class":160},[52,38943,35375],{"class":90},[52,38945,35378],{"class":622},[52,38947,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968],{"class":54,"line":19692},[52,38949,35383],{"class":90},[52,38951,3121],{"class":622},[52,38953,35388],{"class":62},[52,38955,35391],{"class":90},[52,38957,3696],{"class":62},[52,38959,35391],{"class":90},[52,38961,3364],{"class":62},[52,38963,35400],{"class":622},[52,38965,3644],{"class":160},[52,38967,3332],{"class":90},[52,38969,33429],{"class":622},[52,38971,38972,38974,38976,38978,38980,38982],{"class":54,"line":19714},[52,38973,35383],{"class":90},[52,38975,3121],{"class":622},[52,38977,35415],{"class":62},[52,38979,1095],{"class":160},[52,38981,3559],{"class":90},[52,38983,170],{"class":622},[52,38985,38986],{"class":54,"line":19719},[52,38987,116],{"emptyLinePlaceholder":115},[52,38989,38990],{"class":54,"line":19725},[52,38991,35430],{"class":332},[52,38993,38994],{"class":54,"line":19739},[52,38995,35435],{"class":332},[52,38997,38998,39000,39002],{"class":54,"line":19752},[52,38999,35440],{"class":622},[52,39001,2099],{"class":160},[52,39003,35274],{"class":90},[52,39005,39006],{"class":54,"line":19757},[52,39007,35449],{"class":332},[52,39009,39010,39012,39014],{"class":54,"line":19771},[52,39011,35454],{"class":622},[52,39013,2099],{"class":160},[52,39015,2719],{"class":90},[52,39017,39018],{"class":54,"line":19776},[52,39019,35463],{"class":332},[52,39021,39022,39024,39026],{"class":54,"line":19782},[52,39023,35468],{"class":622},[52,39025,2099],{"class":160},[52,39027,35274],{"class":90},[52,39029,39030],{"class":54,"line":19787},[52,39031,35477],{"class":332},[52,39033,39034,39036,39038],{"class":54,"line":19801},[52,39035,35482],{"class":622},[52,39037,2099],{"class":160},[52,39039,2719],{"class":90},[52,39041,39042],{"class":54,"line":19806},[52,39043,35491],{"class":332},[52,39045,39046,39048,39050],{"class":54,"line":19811},[52,39047,35496],{"class":622},[52,39049,2099],{"class":160},[52,39051,2719],{"class":90},[52,39053,39054],{"class":54,"line":19825},[52,39055,35505],{"class":332},[52,39057,39058,39060,39062],{"class":54,"line":19837},[52,39059,35510],{"class":622},[52,39061,2099],{"class":160},[52,39063,2719],{"class":90},[52,39065,39066],{"class":54,"line":19842},[52,39067,35519],{"class":332},[52,39069,39070,39072,39074,39076,39078],{"class":54,"line":19855},[52,39071,6362],{"class":160},[52,39073,34533],{"class":622},[52,39075,28988],{"class":160},[52,39077,34538],{"class":90},[52,39079,35532],{"class":622},[52,39081,39082],{"class":54,"line":19860},[52,39083,35537],{"class":332},[52,39085,39086,39088,39090],{"class":54,"line":19865},[52,39087,35542],{"class":622},[52,39089,2099],{"class":160},[52,39091,35547],{"class":622},[52,39093,39094],{"class":54,"line":19870},[52,39095,35552],{"class":332},[52,39097,39098,39100,39102],{"class":54,"line":19883},[52,39099,35557],{"class":622},[52,39101,2099],{"class":160},[52,39103,35562],{"class":622},[52,39105,39106],{"class":54,"line":19888},[52,39107,35568],{"class":332},[52,39109,39110],{"class":54,"line":35565},[52,39111,35574],{"class":622},[52,39113,39114],{"class":54,"line":35571},[52,39115,35580],{"class":332},[52,39117,39118],{"class":54,"line":35577},[52,39119,35586],{"class":332},[52,39121,39122,39124,39126],{"class":54,"line":35583},[52,39123,35592],{"class":622},[52,39125,2099],{"class":160},[52,39127,35597],{"class":622},[52,39129,39130],{"class":54,"line":35589},[52,39131,35603],{"class":332},[52,39133,39134,39136,39138,39140,39142,39144,39146],{"class":54,"line":35600},[52,39135,35609],{"class":622},[52,39137,2099],{"class":160},[52,39139,35614],{"class":622},[52,39141,35617],{"class":8172},[52,39143,2099],{"class":160},[52,39145,3332],{"class":90},[52,39147,170],{"class":622},[52,39149,39150],{"class":54,"line":35606},[52,39151,35629],{"class":332},[52,39153,39154,39156,39158],{"class":54,"line":35626},[52,39155,35635],{"class":622},[52,39157,2099],{"class":160},[52,39159,35640],{"class":622},[52,39161,39162],{"class":54,"line":35632},[52,39163,35646],{"class":332},[52,39165,39166],{"class":54,"line":35643},[52,39167,35652],{"class":622},[52,39169,39170],{"class":54,"line":35649},[52,39171,35658],{"class":332},[52,39173,39174],{"class":54,"line":35655},[52,39175,35664],{"class":622},[52,39177,39178],{"class":54,"line":35661},[52,39179,35670],{"class":332},[52,39181,39182],{"class":54,"line":35667},[52,39183,35676],{"class":622},[52,39185,39186],{"class":54,"line":35673},[52,39187,35682],{"class":332},[52,39189,39190,39192,39194,39196,39198,39200,39202],{"class":54,"line":35679},[52,39191,35688],{"class":622},[52,39193,12433],{"class":160},[52,39195,35693],{"class":622},[52,39197,1095],{"class":160},[52,39199,35698],{"class":622},[52,39201,3306],{"class":90},[52,39203,170],{"class":622},[52,39205,39206],{"class":54,"line":35685},[52,39207,35708],{"class":332},[52,39209,39210,39212,39214,39216,39218],{"class":54,"line":35705},[52,39211,35714],{"class":622},[52,39213,12433],{"class":160},[52,39215,35719],{"class":622},[52,39217,5909],{"class":160},[52,39219,35724],{"class":622},[52,39221,39222],{"class":54,"line":35711},[52,39223,35730],{"class":332},[52,39225,39226,39228,39230,39232,39234],{"class":54,"line":35727},[52,39227,35736],{"class":622},[52,39229,12433],{"class":160},[52,39231,35698],{"class":622},[52,39233,3306],{"class":90},[52,39235,170],{"class":622},[52,39237,39238],{"class":54,"line":35733},[52,39239,35750],{"class":332},[52,39241,39242,39244,39246,39248,39250],{"class":54,"line":35747},[52,39243,6362],{"class":160},[52,39245,35758],{"class":622},[52,39247,28988],{"class":160},[52,39249,34538],{"class":90},[52,39251,35765],{"class":622},[52,39253,39254],{"class":54,"line":35753},[52,39255,35771],{"class":332},[52,39257,39258,39260,39262],{"class":54,"line":35768},[52,39259,35542],{"class":622},[52,39261,2099],{"class":160},[52,39263,35547],{"class":622},[52,39265,39266],{"class":54,"line":35774},[52,39267,35786],{"class":332},[52,39269,39270,39272,39274],{"class":54,"line":35783},[52,39271,35557],{"class":622},[52,39273,2099],{"class":160},[52,39275,35562],{"class":622},[52,39277,39278],{"class":54,"line":35789},[52,39279,35801],{"class":332},[52,39281,39282],{"class":54,"line":35798},[52,39283,35807],{"class":622},[52,39285,39286],{"class":54,"line":35804},[52,39287,39288],{"class":332},"            # 验证时不计算梯度以节省内存\u002F计算\n",[52,39290,39291,39293],{"class":54,"line":35810},[52,39292,35813],{"class":160},[52,39294,35816],{"class":622},[52,39296,39297],{"class":54,"line":35819},[52,39298,35822],{"class":332},[52,39300,39301,39304,39306],{"class":54,"line":35825},[52,39302,39303],{"class":622},"                output",[52,39305,2099],{"class":160},[52,39307,35597],{"class":622},[52,39309,39310],{"class":54,"line":35836},[52,39311,35839],{"class":332},[52,39313,39314,39317,39319,39321,39323,39325,39327],{"class":54,"line":35842},[52,39315,39316],{"class":622},"                pre_lab",[52,39318,2099],{"class":160},[52,39320,35614],{"class":622},[52,39322,35617],{"class":8172},[52,39324,2099],{"class":160},[52,39326,3332],{"class":90},[52,39328,170],{"class":622},[52,39330,39331],{"class":54,"line":35861},[52,39332,35864],{"class":332},[52,39334,39335,39338,39340],{"class":54,"line":35867},[52,39336,39337],{"class":622},"                val_batch_loss",[52,39339,2099],{"class":160},[52,39341,35640],{"class":622},[52,39343,39344],{"class":54,"line":35878},[52,39345,35881],{"class":332},[52,39347,39348,39351,39353,39356,39358,39360,39362],{"class":54,"line":35884},[52,39349,39350],{"class":622},"                val_loss",[52,39352,12433],{"class":160},[52,39354,39355],{"class":622},"val_batch_loss.item()",[52,39357,1095],{"class":160},[52,39359,35698],{"class":622},[52,39361,3306],{"class":90},[52,39363,170],{"class":622},[52,39365,39366,39369,39371,39373,39375],{"class":54,"line":35904},[52,39367,39368],{"class":622},"                val_corrects",[52,39370,12433],{"class":160},[52,39372,35719],{"class":622},[52,39374,5909],{"class":160},[52,39376,35724],{"class":622},[52,39378,39379],{"class":54,"line":35920},[52,39380,39381],{"class":332},"            # 当前用于验证的样本数量\n",[52,39383,39384,39387,39389,39391,39393],{"class":54,"line":35926},[52,39385,39386],{"class":622},"            val_num",[52,39388,12433],{"class":160},[52,39390,35698],{"class":622},[52,39392,3306],{"class":90},[52,39394,170],{"class":622},[52,39396,39397],{"class":54,"line":35940},[52,39398,35943],{"class":332},[52,39400,39401],{"class":54,"line":35946},[52,39402,35949],{"class":332},[52,39404,39405,39407,39409],{"class":54,"line":35952},[52,39406,35955],{"class":622},[52,39408,3696],{"class":160},[52,39410,35960],{"class":622},[52,39412,39413],{"class":54,"line":35963},[52,39414,35966],{"class":332},[52,39416,39417],{"class":54,"line":35969},[52,39418,35972],{"class":332},[52,39420,39421,39423,39425],{"class":54,"line":35975},[52,39422,35978],{"class":622},[52,39424,3696],{"class":160},[52,39426,35960],{"class":622},[52,39428,39429],{"class":54,"line":35985},[52,39430,35988],{"class":332},[52,39432,39433,39435,39437],{"class":54,"line":35991},[52,39434,35994],{"class":622},[52,39436,3696],{"class":160},[52,39438,35999],{"class":622},[52,39440,39441],{"class":54,"line":36002},[52,39442,36005],{"class":332},[52,39444,39445,39447,39449],{"class":54,"line":36008},[52,39446,36011],{"class":622},[52,39448,3696],{"class":160},[52,39450,35999],{"class":622},[52,39452,39453],{"class":54,"line":36018},[52,39454,116],{"emptyLinePlaceholder":115},[52,39456,39457],{"class":54,"line":36023},[52,39458,36026],{"class":332},[52,39460,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499],{"class":54,"line":36029},[52,39462,35383],{"class":90},[52,39464,3121],{"class":622},[52,39466,6551],{"class":62},[52,39468,35391],{"class":90},[52,39470,36040],{"class":62},[52,39472,4008],{"class":90},[52,39474,36045],{"class":160},[52,39476,4058],{"class":90},[52,39478,36050],{"class":62},[52,39480,4008],{"class":90},[52,39482,36045],{"class":160},[52,39484,4058],{"class":90},[52,39486,6551],{"class":62},[52,39488,36061],{"class":622},[52,39490,3644],{"class":160},[52,39492,3332],{"class":90},[52,39494,36068],{"class":622},[52,39496,3644],{"class":160},[52,39498,3332],{"class":90},[52,39500,36075],{"class":622},[52,39502,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541],{"class":54,"line":36078},[52,39504,35383],{"class":90},[52,39506,3121],{"class":622},[52,39508,6551],{"class":62},[52,39510,35391],{"class":90},[52,39512,36089],{"class":62},[52,39514,4008],{"class":90},[52,39516,36045],{"class":160},[52,39518,4058],{"class":90},[52,39520,36098],{"class":62},[52,39522,4008],{"class":90},[52,39524,36045],{"class":160},[52,39526,4058],{"class":90},[52,39528,6551],{"class":62},[52,39530,36109],{"class":622},[52,39532,3644],{"class":160},[52,39534,3332],{"class":90},[52,39536,36116],{"class":622},[52,39538,3644],{"class":160},[52,39540,3332],{"class":90},[52,39542,36075],{"class":622},[52,39544,39545],{"class":54,"line":36125},[52,39546,116],{"emptyLinePlaceholder":115},[52,39548,39549],{"class":54,"line":36130},[52,39550,36133],{"class":332},[52,39552,39553,39555,39557,39559,39561,39563,39565],{"class":54,"line":36136},[52,39554,5458],{"class":160},[52,39556,36141],{"class":622},[52,39558,3644],{"class":160},[52,39560,3332],{"class":90},[52,39562,4052],{"class":622},[52,39564,4072],{"class":160},[52,39566,36152],{"class":622},[52,39568,39569],{"class":54,"line":36155},[52,39570,36158],{"class":332},[52,39572,39573,39575,39577,39579,39581,39583,39585],{"class":54,"line":36161},[52,39574,36164],{"class":622},[52,39576,3159],{"class":90},[52,39578,2099],{"class":160},[52,39580,36171],{"class":622},[52,39582,3644],{"class":160},[52,39584,3332],{"class":90},[52,39586,36178],{"class":622},[52,39588,39589],{"class":54,"line":36181},[52,39590,36184],{"class":332},[52,39592,39593],{"class":54,"line":36187},[52,39594,36190],{"class":332},[52,39596,39597,39599,39601],{"class":54,"line":36193},[52,39598,36196],{"class":622},[52,39600,2099],{"class":160},[52,39602,35246],{"class":622},[52,39604,39605],{"class":54,"line":36203},[52,39606,116],{"emptyLinePlaceholder":115},[52,39608,39609],{"class":54,"line":36208},[52,39610,36211],{"class":332},[52,39612,39613,39615,39617,39619,39621],{"class":54,"line":36214},[52,39614,36217],{"class":622},[52,39616,2099],{"class":160},[52,39618,36222],{"class":622},[52,39620,3644],{"class":160},[52,39622,36227],{"class":622},[52,39624,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659],{"class":54,"line":36230},[52,39626,35383],{"class":90},[52,39628,3121],{"class":622},[52,39630,36237],{"class":62},[52,39632,4008],{"class":90},[52,39634,36242],{"class":160},[52,39636,4058],{"class":90},[52,39638,3656],{"class":62},[52,39640,4008],{"class":90},[52,39642,36242],{"class":160},[52,39644,4058],{"class":90},[52,39646,36255],{"class":62},[52,39648,36258],{"class":622},[52,39650,36261],{"class":160},[52,39652,4019],{"class":90},[52,39654,36266],{"class":622},[52,39656,3441],{"class":160},[52,39658,4019],{"class":90},[52,39660,33429],{"class":622},[52,39662,39663],{"class":54,"line":36275},[52,39664,39665],{"class":332},"    # 选择最优参数并保存\n",[52,39667,39668],{"class":54,"line":36281},[52,39669,39670],{"class":332},"    # 保存最佳模型权重字典\n",[52,39672,39673,39676,39678],{"class":54,"line":36287},[52,39674,39675],{"class":622},"    torch.save(best_model_wts,",[52,39677,36299],{"class":62},[52,39679,170],{"class":622},[52,39681,39682],{"class":54,"line":36293},[52,39683,36319],{"class":332},[52,39685,39686,39688,39690,39692,39694,39696],{"class":54,"line":36304},[52,39687,36325],{"class":622},[52,39689,2099],{"class":160},[52,39691,36330],{"class":622},[52,39693,36333],{"class":8172},[52,39695,2099],{"class":160},[52,39697,4524],{"class":622},[52,39699,39700,39702,39704,39706],{"class":54,"line":36310},[52,39701,36343],{"class":62},[52,39703,3971],{"class":622},[52,39705,36348],{"class":90},[52,39707,36351],{"class":622},[52,39709,39710,39712],{"class":54,"line":36316},[52,39711,36357],{"class":62},[52,39713,36360],{"class":622},[52,39715,39716,39718],{"class":54,"line":36322},[52,39717,36366],{"class":62},[52,39719,36369],{"class":622},[52,39721,39722,39724],{"class":54,"line":36340},[52,39723,36375],{"class":62},[52,39725,36378],{"class":622},[52,39727,39728,39730],{"class":54,"line":36354},[52,39729,36384],{"class":62},[52,39731,36387],{"class":622},[52,39733,39734],{"class":54,"line":36363},[52,39735,36393],{"class":622},[52,39737,39738],{"class":54,"line":36372},[52,39739,36399],{"class":332},[52,39741,39742,39744],{"class":54,"line":36381},[52,39743,7049],{"class":160},[52,39745,36407],{"class":622},[52,39747,39748],{"class":54,"line":36390},[52,39749,116],{"emptyLinePlaceholder":115},[52,39751,39752],{"class":54,"line":36396},[52,39753,36418],{"class":332},[52,39755,39756,39758,39760],{"class":54,"line":36402},[52,39757,34879],{"class":160},[52,39759,36426],{"class":58},[52,39761,36429],{"class":622},[52,39763,39764],{"class":54,"line":36410},[52,39765,36435],{"class":332},[52,39767,39768,39770,39772,39774,39776,39778,39780,39782],{"class":54,"line":36415},[52,39769,36441],{"class":622},[52,39771,34625],{"class":8172},[52,39773,2099],{"class":160},[52,39775,3121],{"class":622},[52,39777,3610],{"class":90},[52,39779,3491],{"class":622},[52,39781,3406],{"class":90},[52,39783,33429],{"class":622},[52,39785,39786],{"class":54,"line":36421},[52,39787,36461],{"class":332},[52,39789,39790],{"class":54,"line":36432},[52,39791,36467],{"class":332},[52,39793,39794],{"class":54,"line":36438},[52,39795,36473],{"class":332},[52,39797,39798,39800,39802,39804,39806,39808,39810],{"class":54,"line":36458},[52,39799,34659],{"class":622},[52,39801,3332],{"class":90},[52,39803,3491],{"class":622},[52,39805,3194],{"class":90},[52,39807,3491],{"class":622},[52,39809,3332],{"class":90},[52,39811,170],{"class":622},[52,39813,39814],{"class":54,"line":36464},[52,39815,36496],{"class":332},[52,39817,39818],{"class":54,"line":36470},[52,39819,36502],{"class":332},[52,39821,39822],{"class":54,"line":36476},[52,39823,36508],{"class":332},[52,39825,39826],{"class":54,"line":36493},[52,39827,36514],{"class":332},[52,39829,39830],{"class":54,"line":36499},[52,39831,36520],{"class":332},[52,39833,39834,39836,39838,39840,39842,39844,39846,39848,39850],{"class":54,"line":36505},[52,39835,36526],{"class":622},[52,39837,36529],{"class":62},[52,39839,36532],{"class":622},[52,39841,36535],{"class":62},[52,39843,3491],{"class":622},[52,39845,36540],{"class":8172},[52,39847,2099],{"class":160},[52,39849,36545],{"class":62},[52,39851,170],{"class":622},[52,39853,39854,39856,39858,39860,39862,39864,39866,39868,39870],{"class":54,"line":36511},[52,39855,36526],{"class":622},[52,39857,36529],{"class":62},[52,39859,36557],{"class":622},[52,39861,36560],{"class":62},[52,39863,3491],{"class":622},[52,39865,36540],{"class":8172},[52,39867,2099],{"class":160},[52,39869,36569],{"class":62},[52,39871,170],{"class":622},[52,39873,39874],{"class":54,"line":36517},[52,39875,36577],{"class":332},[52,39877,39878],{"class":54,"line":36523},[52,39879,36583],{"class":622},[52,39881,39882],{"class":54,"line":36550},[52,39883,36589],{"class":332},[52,39885,39886,39888,39890],{"class":54,"line":36574},[52,39887,36595],{"class":622},[52,39889,36598],{"class":62},[52,39891,170],{"class":622},[52,39893,39894,39896,39898],{"class":54,"line":36580},[52,39895,36606],{"class":622},[52,39897,36609],{"class":62},[52,39899,170],{"class":622},[52,39901,39902],{"class":54,"line":36586},[52,39903,36617],{"class":332},[52,39905,39906,39908,39910,39912,39914,39916,39918],{"class":54,"line":36592},[52,39907,34659],{"class":622},[52,39909,3332],{"class":90},[52,39911,3491],{"class":622},[52,39913,3194],{"class":90},[52,39915,3491],{"class":622},[52,39917,3194],{"class":90},[52,39919,170],{"class":622},[52,39921,39922,39924,39926,39928,39930,39932,39934,39936,39938],{"class":54,"line":36603},[52,39923,36526],{"class":622},[52,39925,36529],{"class":62},[52,39927,36644],{"class":622},[52,39929,36535],{"class":62},[52,39931,3491],{"class":622},[52,39933,36540],{"class":8172},[52,39935,2099],{"class":160},[52,39937,36655],{"class":62},[52,39939,170],{"class":622},[52,39941,39942,39944,39946,39948,39950,39952,39954,39956,39958],{"class":54,"line":36614},[52,39943,36526],{"class":622},[52,39945,36529],{"class":62},[52,39947,36667],{"class":622},[52,39949,36560],{"class":62},[52,39951,3491],{"class":622},[52,39953,36540],{"class":8172},[52,39955,2099],{"class":160},[52,39957,36678],{"class":62},[52,39959,170],{"class":622},[52,39961,39962],{"class":54,"line":36620},[52,39963,36686],{"class":332},[52,39965,39966],{"class":54,"line":36637},[52,39967,36583],{"class":622},[52,39969,39970,39972,39974],{"class":54,"line":36660},[52,39971,36595],{"class":622},[52,39973,36529],{"class":62},[52,39975,170],{"class":622},[52,39977,39978,39980,39982],{"class":54,"line":36683},[52,39979,36606],{"class":622},[52,39981,36708],{"class":62},[52,39983,170],{"class":622},[52,39985,39986],{"class":54,"line":36689},[52,39987,36716],{"class":622},[52,39989,39990],{"class":54,"line":36694},[52,39991,116],{"emptyLinePlaceholder":115},[52,39993,39994],{"class":54,"line":36703},[52,39995,36727],{"class":332},[52,39997,39998,40000,40002,40004,40006],{"class":54,"line":36713},[52,39999,4509],{"class":160},[52,40001,34152],{"class":90},[52,40003,5909],{"class":160},[52,40005,34157],{"class":62},[52,40007,6698],{"class":622},[52,40009,40010],{"class":54,"line":36719},[52,40011,36746],{"class":332},[52,40013,40014,40017,40019],{"class":54,"line":36724},[52,40015,40016],{"class":622},"    AlexNet",[52,40018,2099],{"class":160},[52,40020,40021],{"class":622},"AlexNet()\n",[52,40023,40024,40026,40028],{"class":54,"line":36730},[52,40025,36763],{"class":622},[52,40027,2099],{"class":160},[52,40029,36768],{"class":622},[52,40031,40032,40034,40036,40039,40041,40043,40045],{"class":54,"line":36743},[52,40033,36325],{"class":622},[52,40035,2099],{"class":160},[52,40037,40038],{"class":622},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[52,40040,36781],{"class":8172},[52,40042,2099],{"class":160},[52,40044,3812],{"class":90},[52,40046,170],{"class":622},[52,40048,40049],{"class":54,"line":36749},[52,40050,36793],{"class":622},[1070,40052,40053],{"start":82},[1073,40054,36806],{},[19,40056,40058],{"className":33310,"code":40057,"language":33312,"meta":28,"style":28},"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",[26,40059,40060,40066,40076,40086,40096,40100,40110,40120,40131,40135,40139,40143,40151,40167,40177,40193,40203,40217,40221,40231,40241,40251,40257,40261,40265,40273,40277,40293,40301,40305,40309,40317,40325,40329,40333,40337,40341,40347,40351,40361,40369,40377,40381,40385,40389,40397,40401,40417,40421,40425,40429,40441,40445,40457,40461,40465,40477,40481,40491,40495,40499,40511,40515,40523,40527,40531,40539,40543,40551,40555,40559,40563,40567,40571,40587,40595,40599,40603,40651,40657,40661,40671,40679,40687,40691,40695,40699,40703,40711,40715,40731,40735,40743,40751],{"__ignoreMap":28},[52,40061,40062,40064],{"class":54,"line":55},[52,40063,33324],{"class":160},[52,40065,33327],{"class":622},[52,40067,40068,40070,40072,40074],{"class":54,"line":69},[52,40069,33324],{"class":160},[52,40071,34347],{"class":622},[52,40073,34315],{"class":160},[52,40075,34352],{"class":622},[52,40077,40078,40080,40082,40084],{"class":54,"line":82},[52,40079,33669],{"class":160},[52,40081,36834],{"class":622},[52,40083,33324],{"class":160},[52,40085,36839],{"class":622},[52,40087,40088,40090,40092,40094],{"class":54,"line":97},[52,40089,33669],{"class":160},[52,40091,34330],{"class":622},[52,40093,33324],{"class":160},[52,40095,34335],{"class":622},[52,40097,40098],{"class":54,"line":112},[52,40099,36854],{"class":332},[52,40101,40102,40104,40106,40108],{"class":54,"line":119},[52,40103,33669],{"class":160},[52,40105,34300],{"class":622},[52,40107,33324],{"class":160},[52,40109,34305],{"class":622},[52,40111,40112,40114,40116,40118],{"class":54,"line":130},[52,40113,33669],{"class":160},[52,40115,34846],{"class":622},[52,40117,33324],{"class":160},[52,40119,38489],{"class":622},[52,40121,40122,40124,40127,40129],{"class":54,"line":136},[52,40123,33669],{"class":160},[52,40125,40126],{"class":622}," 练习.AlexNet.model ",[52,40128,33324],{"class":160},[52,40130,38489],{"class":622},[52,40132,40133],{"class":54,"line":141},[52,40134,116],{"emptyLinePlaceholder":115},[52,40136,40137],{"class":54,"line":146},[52,40138,116],{"emptyLinePlaceholder":115},[52,40140,40141],{"class":54,"line":152},[52,40142,36883],{"class":332},[52,40144,40145,40147,40149],{"class":54,"line":157},[52,40146,34879],{"class":160},[52,40148,36890],{"class":58},[52,40150,34885],{"class":622},[52,40152,40153,40155,40157,40159,40161,40163,40165],{"class":54,"line":173},[52,40154,36897],{"class":622},[52,40156,2099],{"class":160},[52,40158,34387],{"class":622},[52,40160,34390],{"class":8172},[52,40162,2099],{"class":160},[52,40164,34395],{"class":62},[52,40166,34398],{"class":622},[52,40168,40169,40171,40173,40175],{"class":54,"line":178},[52,40170,36914],{"class":8172},[52,40172,2099],{"class":160},[52,40174,36919],{"class":90},[52,40176,34398],{"class":622},[52,40178,40179,40181,40183,40185,40187,40189,40191],{"class":54,"line":184},[52,40180,36926],{"class":8172},[52,40182,2099],{"class":160},[52,40184,34425],{"class":622},[52,40186,34428],{"class":8172},[52,40188,2099],{"class":160},[52,40190,38381],{"class":90},[52,40192,34436],{"class":622},[52,40194,40195,40197,40199,40201],{"class":54,"line":189},[52,40196,36943],{"class":8172},[52,40198,2099],{"class":160},[52,40200,34408],{"class":90},[52,40202,170],{"class":622},[52,40204,40205,40207,40209,40211,40213,40215],{"class":54,"line":201},[52,40206,36954],{"class":622},[52,40208,2099],{"class":160},[52,40210,34466],{"class":622},[52,40212,34469],{"class":8172},[52,40214,2099],{"class":160},[52,40216,36965],{"class":622},[52,40218,40219],{"class":54,"line":206},[52,40220,36970],{"class":332},[52,40222,40223,40225,40227,40229],{"class":54,"line":224},[52,40224,36975],{"class":8172},[52,40226,2099],{"class":160},[52,40228,3332],{"class":90},[52,40230,34398],{"class":622},[52,40232,40233,40235,40237,40239],{"class":54,"line":229},[52,40234,36986],{"class":8172},[52,40236,2099],{"class":160},[52,40238,34408],{"class":90},[52,40240,34398],{"class":622},[52,40242,40243,40245,40247,40249],{"class":54,"line":241},[52,40244,36997],{"class":8172},[52,40246,2099],{"class":160},[52,40248,3306],{"class":90},[52,40250,170],{"class":622},[52,40252,40253,40255],{"class":54,"line":246},[52,40254,7049],{"class":160},[52,40256,37010],{"class":622},[52,40258,40259],{"class":54,"line":252},[52,40260,116],{"emptyLinePlaceholder":115},[52,40262,40263],{"class":54,"line":257},[52,40264,37019],{"class":332},[52,40266,40267,40269,40271],{"class":54,"line":266},[52,40268,34879],{"class":160},[52,40270,37026],{"class":58},[52,40272,37029],{"class":622},[52,40274,40275],{"class":54,"line":4722},[52,40276,37034],{"class":332},[52,40278,40279,40281,40283,40285,40287,40289,40291],{"class":54,"line":4727},[52,40280,34169],{"class":622},[52,40282,2099],{"class":160},[52,40284,34176],{"class":62},[52,40286,4671],{"class":160},[52,40288,34181],{"class":622},[52,40290,4668],{"class":160},[52,40292,37051],{"class":62},[52,40294,40295,40297,40299],{"class":54,"line":4741},[52,40296,34221],{"class":622},[52,40298,2099],{"class":160},[52,40300,35221],{"class":622},[52,40302,40303],{"class":54,"line":4746},[52,40304,116],{"emptyLinePlaceholder":115},[52,40306,40307],{"class":54,"line":5538},[52,40308,37068],{"class":332},[52,40310,40311,40313,40315],{"class":54,"line":5552},[52,40312,37073],{"class":622},[52,40314,2099],{"class":160},[52,40316,35274],{"class":90},[52,40318,40319,40321,40323],{"class":54,"line":5560},[52,40320,37082],{"class":622},[52,40322,2099],{"class":160},[52,40324,2719],{"class":90},[52,40326,40327],{"class":54,"line":5565},[52,40328,116],{"emptyLinePlaceholder":115},[52,40330,40331],{"class":54,"line":5571},[52,40332,37095],{"class":332},[52,40334,40335],{"class":54,"line":5577},[52,40336,37100],{"class":332},[52,40338,40339],{"class":54,"line":5582},[52,40340,37105],{"class":332},[52,40342,40343,40345],{"class":54,"line":10904},[52,40344,37110],{"class":160},[52,40346,35816],{"class":622},[52,40348,40349],{"class":54,"line":10928},[52,40350,37117],{"class":332},[52,40352,40353,40355,40357,40359],{"class":54,"line":10933},[52,40354,6362],{"class":160},[52,40356,37124],{"class":622},[52,40358,28988],{"class":160},[52,40360,37129],{"class":622},[52,40362,40363,40365,40367],{"class":54,"line":10939},[52,40364,37134],{"class":622},[52,40366,2099],{"class":160},[52,40368,37139],{"class":622},[52,40370,40371,40373,40375],{"class":54,"line":10966},[52,40372,37144],{"class":622},[52,40374,2099],{"class":160},[52,40376,37149],{"class":622},[52,40378,40379],{"class":54,"line":10971},[52,40380,37154],{"class":332},[52,40382,40383],{"class":54,"line":10977},[52,40384,35807],{"class":622},[52,40386,40387],{"class":54,"line":10989},[52,40388,37163],{"class":332},[52,40390,40391,40393,40395],{"class":54,"line":11001},[52,40392,35592],{"class":622},[52,40394,2099],{"class":160},[52,40396,37172],{"class":622},[52,40398,40399],{"class":54,"line":11013},[52,40400,37177],{"class":332},[52,40402,40403,40405,40407,40409,40411,40413,40415],{"class":54,"line":12672},[52,40404,35609],{"class":622},[52,40406,2099],{"class":160},[52,40408,35614],{"class":622},[52,40410,35617],{"class":8172},[52,40412,2099],{"class":160},[52,40414,3332],{"class":90},[52,40416,170],{"class":622},[52,40418,40419],{"class":54,"line":12697},[52,40420,37198],{"class":332},[52,40422,40423],{"class":54,"line":12720},[52,40424,37203],{"class":332},[52,40426,40427],{"class":54,"line":12744},[52,40428,37208],{"class":332},[52,40430,40431,40433,40435,40437,40439],{"class":54,"line":12749},[52,40432,37213],{"class":622},[52,40434,12433],{"class":160},[52,40436,35719],{"class":622},[52,40438,5909],{"class":160},[52,40440,37222],{"class":622},[52,40442,40443],{"class":54,"line":12754},[52,40444,37227],{"class":332},[52,40446,40447,40449,40451,40453,40455],{"class":54,"line":12759},[52,40448,37232],{"class":622},[52,40450,12433],{"class":160},[52,40452,37237],{"class":622},[52,40454,3306],{"class":90},[52,40456,170],{"class":622},[52,40458,40459],{"class":54,"line":12768},[52,40460,116],{"emptyLinePlaceholder":115},[52,40462,40463],{"class":54,"line":12773},[52,40464,37250],{"class":332},[52,40466,40467,40469,40471,40473,40475],{"class":54,"line":12779},[52,40468,37255],{"class":622},[52,40470,2099],{"class":160},[52,40472,37260],{"class":622},[52,40474,3696],{"class":160},[52,40476,37265],{"class":622},[52,40478,40479],{"class":54,"line":12800},[52,40480,37270],{"class":332},[52,40482,40483,40485,40487,40489],{"class":54,"line":12806},[52,40484,35383],{"class":90},[52,40486,3121],{"class":622},[52,40488,37279],{"class":62},[52,40490,37282],{"class":622},[52,40492,40493],{"class":54,"line":12820},[52,40494,116],{"emptyLinePlaceholder":115},[52,40496,40497],{"class":54,"line":12826},[52,40498,37291],{"class":332},[52,40500,40501,40503,40505,40507,40509],{"class":54,"line":12853},[52,40502,4509],{"class":160},[52,40504,34152],{"class":90},[52,40506,5909],{"class":160},[52,40508,34157],{"class":62},[52,40510,6698],{"class":622},[52,40512,40513],{"class":54,"line":12862},[52,40514,37308],{"class":332},[52,40516,40517,40519,40521],{"class":54,"line":12868},[52,40518,34221],{"class":622},[52,40520,2099],{"class":160},[52,40522,40021],{"class":622},[52,40524,40525],{"class":54,"line":12876},[52,40526,37321],{"class":332},[52,40528,40529],{"class":54,"line":12881},[52,40530,37326],{"class":332},[52,40532,40533,40535,40537],{"class":54,"line":19560},[52,40534,37331],{"class":622},[52,40536,37334],{"class":62},[52,40538,33429],{"class":622},[52,40540,40541],{"class":54,"line":19566},[52,40542,37341],{"class":332},[52,40544,40545,40547,40549],{"class":54,"line":19589},[52,40546,36954],{"class":622},[52,40548,2099],{"class":160},[52,40550,37350],{"class":622},[52,40552,40553],{"class":54,"line":19595},[52,40554,37355],{"class":332},[52,40556,40557],{"class":54,"line":19618},[52,40558,37360],{"class":622},[52,40560,40561],{"class":54,"line":19632},[52,40562,116],{"emptyLinePlaceholder":115},[52,40564,40565],{"class":54,"line":19652},[52,40566,37369],{"class":332},[52,40568,40569],{"class":54,"line":19658},[52,40570,37374],{"class":332},[52,40572,40573,40575,40577,40579,40581,40583,40585],{"class":54,"line":19669},[52,40574,34169],{"class":622},[52,40576,2099],{"class":160},[52,40578,34176],{"class":62},[52,40580,4671],{"class":160},[52,40582,34181],{"class":622},[52,40584,4668],{"class":160},[52,40586,37051],{"class":62},[52,40588,40589,40591,40593],{"class":54,"line":19692},[52,40590,34221],{"class":622},[52,40592,2099],{"class":160},[52,40594,35221],{"class":622},[52,40596,40597],{"class":54,"line":19714},[52,40598,37403],{"class":332},[52,40600,40601],{"class":54,"line":19719},[52,40602,37408],{"class":332},[52,40604,40605,40607,40609,40611,40613,40615,40617,40619,40621,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641,40643,40645,40647,40649],{"class":54,"line":19725},[52,40606,37413],{"class":622},[52,40608,2099],{"class":160},[52,40610,4002],{"class":622},[52,40612,37420],{"class":62},[52,40614,3491],{"class":622},[52,40616,37425],{"class":62},[52,40618,3491],{"class":622},[52,40620,37430],{"class":62},[52,40622,3491],{"class":622},[52,40624,37435],{"class":62},[52,40626,3491],{"class":622},[52,40628,37440],{"class":62},[52,40630,3491],{"class":622},[52,40632,37445],{"class":62},[52,40634,3491],{"class":622},[52,40636,37450],{"class":62},[52,40638,3491],{"class":622},[52,40640,37455],{"class":62},[52,40642,3491],{"class":622},[52,40644,37460],{"class":62},[52,40646,3491],{"class":622},[52,40648,37465],{"class":62},[52,40650,36178],{"class":622},[52,40652,40653,40655],{"class":54,"line":19739},[52,40654,37110],{"class":160},[52,40656,35816],{"class":622},[52,40658,40659],{"class":54,"line":19752},[52,40660,37478],{"class":332},[52,40662,40663,40665,40667,40669],{"class":54,"line":19757},[52,40664,6362],{"class":160},[52,40666,37485],{"class":622},[52,40668,28988],{"class":160},[52,40670,37129],{"class":622},[52,40672,40673,40675,40677],{"class":54,"line":19771},[52,40674,35542],{"class":622},[52,40676,2099],{"class":160},[52,40678,35547],{"class":622},[52,40680,40681,40683,40685],{"class":54,"line":19776},[52,40682,35557],{"class":622},[52,40684,2099],{"class":160},[52,40686,35562],{"class":622},[52,40688,40689],{"class":54,"line":19782},[52,40690,116],{"emptyLinePlaceholder":115},[52,40692,40693],{"class":54,"line":19787},[52,40694,37514],{"class":332},[52,40696,40697],{"class":54,"line":19801},[52,40698,35807],{"class":622},[52,40700,40701],{"class":54,"line":19806},[52,40702,37523],{"class":332},[52,40704,40705,40707,40709],{"class":54,"line":19811},[52,40706,35592],{"class":622},[52,40708,2099],{"class":160},[52,40710,35597],{"class":622},[52,40712,40713],{"class":54,"line":19825},[52,40714,37536],{"class":332},[52,40716,40717,40719,40721,40723,40725,40727,40729],{"class":54,"line":19837},[52,40718,35609],{"class":622},[52,40720,2099],{"class":160},[52,40722,35614],{"class":622},[52,40724,35617],{"class":8172},[52,40726,2099],{"class":160},[52,40728,3332],{"class":90},[52,40730,170],{"class":622},[52,40732,40733],{"class":54,"line":19842},[52,40734,37557],{"class":332},[52,40736,40737,40739,40741],{"class":54,"line":19855},[52,40738,37562],{"class":622},[52,40740,2099],{"class":160},[52,40742,37567],{"class":622},[52,40744,40745,40747,40749],{"class":54,"line":19860},[52,40746,37572],{"class":622},[52,40748,2099],{"class":160},[52,40750,37577],{"class":622},[52,40752,40753,40755,40757,40759,40761,40763,40765,40767],{"class":54,"line":19865},[52,40754,37582],{"class":90},[52,40756,3121],{"class":622},[52,40758,37587],{"class":62},[52,40760,37590],{"class":622},[52,40762,37593],{"class":62},[52,40764,3491],{"class":622},[52,40766,37598],{"class":62},[52,40768,37601],{"class":622},[30,40770,40772],{"id":40771},"_22vgg","2.2.VGG",[1486,40774,40776],{"id":40775},"_221原理","2.2.1.原理",[274,40778,40779],{},[280,40780],{"alt":28,"src":40781},"\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",[274,40783,40784],{},[280,40785],{"alt":28,"src":40786},"\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",[274,40788,40789],{},[280,40790],{"alt":28,"src":40791},"\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",[274,40793,40794],{},"参数详细描述：",[274,40796,40797],{},[280,40798],{"alt":28,"src":40799},"\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",[274,40801,40802],{},[280,40803],{"alt":28,"src":40804},"\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",[274,40806,40807],{},[280,40808],{"alt":28,"src":40809},"\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",[274,40811,40812],{},[280,40813],{"alt":28,"src":40814},"\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",[274,40816,40817],{},[280,40818],{"alt":28,"src":40819},"\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",[1486,40821,40823],{"id":40822},"_222代码实现","2.2.2.代码实现",[1070,40825,40826],{},[1073,40827,40828],{},"网络搭建",[19,40830,40832],{"className":33310,"code":40831,"language":33312,"meta":28,"style":28},"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",[26,40833,40834,40840,40852,40862,40872,40876,40893,40901,40920,40925,40930,40942,40980,40985,41021,41025,41054,41059,41064,41075,41111,41115,41151,41155,41183,41187,41192,41203,41239,41243,41279,41283,41319,41323,41351,41355,41360,41371,41408,41412,41448,41452,41488,41492,41520,41524,41529,41540,41576,41580,41616,41620,41656,41660,41688,41692,41697,41708,41713,41718,41723,41744,41748,41760,41764,41776,41780,41784,41789,41794,41809,41814,41824,41829,41844,41849,41868,41873,41882,41887,41897,41902,41907,41921,41926,41940,41948,41952,41956,41964,41975,41986,41997,42008,42019,42030,42036,42040,42045,42058,42078,42084,42093],{"__ignoreMap":28},[52,40835,40836,40838],{"class":54,"line":55},[52,40837,33324],{"class":160},[52,40839,33327],{"class":622},[52,40841,40842,40844,40847,40849],{"class":54,"line":69},[52,40843,33669],{"class":160},[52,40845,40846],{"class":622}," sympy.core.sympify ",[52,40848,33324],{"class":160},[52,40850,40851],{"class":622}," kernS\n",[52,40853,40854,40856,40858,40860],{"class":54,"line":82},[52,40855,33669],{"class":160},[52,40857,33672],{"class":622},[52,40859,33324],{"class":160},[52,40861,33677],{"class":622},[52,40863,40864,40866,40868,40870],{"class":54,"line":97},[52,40865,33669],{"class":160},[52,40867,33689],{"class":622},[52,40869,33324],{"class":160},[52,40871,33694],{"class":622},[52,40873,40874],{"class":54,"line":112},[52,40875,116],{"emptyLinePlaceholder":115},[52,40877,40878,40880,40883,40885,40887,40889,40891],{"class":54,"line":119},[52,40879,17650],{"class":160},[52,40881,40882],{"class":58}," VGG16",[52,40884,3121],{"class":622},[52,40886,33710],{"class":58},[52,40888,3670],{"class":622},[52,40890,33715],{"class":58},[52,40892,33718],{"class":622},[52,40894,40895,40897,40899],{"class":54,"line":130},[52,40896,33733],{"class":160},[52,40898,33736],{"class":90},[52,40900,33739],{"class":622},[52,40902,40903,40905,40907,40910,40912,40914,40916,40918],{"class":54,"line":136},[52,40904,33749],{"class":90},[52,40906,3121],{"class":622},[52,40908,40909],{"class":90},"VGG16",[52,40911,15391],{"class":622},[52,40913,33755],{"class":90},[52,40915,33758],{"class":622},[52,40917,33761],{"class":90},[52,40919,4938],{"class":622},[52,40921,40922],{"class":54,"line":141},[52,40923,40924],{"class":332},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[52,40926,40927],{"class":54,"line":146},[52,40928,40929],{"class":332},"        # 这里用的是灰度图\n",[52,40931,40932,40934,40937,40939],{"class":54,"line":152},[52,40933,33777],{"class":90},[52,40935,40936],{"class":622},".block1",[52,40938,2099],{"class":160},[52,40940,40941],{"class":622},"nn.Sequential(\n",[52,40943,40944,40947,40949,40951,40953,40955,40957,40959,40961,40963,40965,40967,40969,40971,40973,40975,40977],{"class":54,"line":157},[52,40945,40946],{"class":622},"            nn.Conv2d(",[52,40948,33788],{"class":8172},[52,40950,2099],{"class":160},[52,40952,3332],{"class":90},[52,40954,3491],{"class":622},[52,40956,33797],{"class":8172},[52,40958,2099],{"class":160},[52,40960,3318],{"class":90},[52,40962,3491],{"class":622},[52,40964,33806],{"class":8172},[52,40966,2099],{"class":160},[52,40968,3188],{"class":90},[52,40970,3491],{"class":622},[52,40972,33815],{"class":8172},[52,40974,2099],{"class":160},[52,40976,3332],{"class":90},[52,40978,40979],{"class":622},"),\n",[52,40981,40982],{"class":54,"line":173},[52,40983,40984],{"class":622},"            nn.ReLU(),\n",[52,40986,40987,40989,40991,40993,40995,40997,40999,41001,41003,41005,41007,41009,41011,41013,41015,41017,41019],{"class":54,"line":178},[52,40988,40946],{"class":622},[52,40990,33788],{"class":8172},[52,40992,2099],{"class":160},[52,40994,3318],{"class":90},[52,40996,3491],{"class":622},[52,40998,33797],{"class":8172},[52,41000,2099],{"class":160},[52,41002,3318],{"class":90},[52,41004,3491],{"class":622},[52,41006,33806],{"class":8172},[52,41008,2099],{"class":160},[52,41010,3188],{"class":90},[52,41012,3491],{"class":622},[52,41014,33815],{"class":8172},[52,41016,2099],{"class":160},[52,41018,3332],{"class":90},[52,41020,40979],{"class":622},[52,41022,41023],{"class":54,"line":184},[52,41024,40984],{"class":622},[52,41026,41027,41030,41032,41034,41036,41038,41040,41042,41044,41046,41048,41050,41052],{"class":54,"line":189},[52,41028,41029],{"class":622},"            nn.MaxPool2d(",[52,41031,33806],{"class":8172},[52,41033,2099],{"class":160},[52,41035,3194],{"class":90},[52,41037,3491],{"class":622},[52,41039,33861],{"class":8172},[52,41041,2099],{"class":160},[52,41043,3194],{"class":90},[52,41045,3491],{"class":622},[52,41047,33815],{"class":8172},[52,41049,2099],{"class":160},[52,41051,3306],{"class":90},[52,41053,170],{"class":622},[52,41055,41056],{"class":54,"line":201},[52,41057,41058],{"class":622},"        )\n",[52,41060,41061],{"class":54,"line":206},[52,41062,41063],{"class":332},"        # 第二层\n",[52,41065,41066,41068,41071,41073],{"class":54,"line":224},[52,41067,33777],{"class":90},[52,41069,41070],{"class":622},".block2",[52,41072,2099],{"class":160},[52,41074,40941],{"class":622},[52,41076,41077,41079,41081,41083,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109],{"class":54,"line":229},[52,41078,40946],{"class":622},[52,41080,33788],{"class":8172},[52,41082,2099],{"class":160},[52,41084,3318],{"class":90},[52,41086,3491],{"class":622},[52,41088,33797],{"class":8172},[52,41090,2099],{"class":160},[52,41092,35002],{"class":90},[52,41094,3491],{"class":622},[52,41096,33806],{"class":8172},[52,41098,2099],{"class":160},[52,41100,3188],{"class":90},[52,41102,3491],{"class":622},[52,41104,33815],{"class":8172},[52,41106,2099],{"class":160},[52,41108,3332],{"class":90},[52,41110,40979],{"class":622},[52,41112,41113],{"class":54,"line":241},[52,41114,40984],{"class":622},[52,41116,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149],{"class":54,"line":246},[52,41118,40946],{"class":622},[52,41120,33788],{"class":8172},[52,41122,2099],{"class":160},[52,41124,35002],{"class":90},[52,41126,3491],{"class":622},[52,41128,33797],{"class":8172},[52,41130,2099],{"class":160},[52,41132,35002],{"class":90},[52,41134,3491],{"class":622},[52,41136,33806],{"class":8172},[52,41138,2099],{"class":160},[52,41140,3188],{"class":90},[52,41142,3491],{"class":622},[52,41144,33815],{"class":8172},[52,41146,2099],{"class":160},[52,41148,3332],{"class":90},[52,41150,40979],{"class":622},[52,41152,41153],{"class":54,"line":252},[52,41154,40984],{"class":622},[52,41156,41157,41159,41161,41163,41165,41167,41169,41171,41173,41175,41177,41179,41181],{"class":54,"line":257},[52,41158,41029],{"class":622},[52,41160,33806],{"class":8172},[52,41162,2099],{"class":160},[52,41164,3194],{"class":90},[52,41166,3491],{"class":622},[52,41168,33861],{"class":8172},[52,41170,2099],{"class":160},[52,41172,3194],{"class":90},[52,41174,3491],{"class":622},[52,41176,33815],{"class":8172},[52,41178,2099],{"class":160},[52,41180,3306],{"class":90},[52,41182,170],{"class":622},[52,41184,41185],{"class":54,"line":266},[52,41186,41058],{"class":622},[52,41188,41189],{"class":54,"line":4722},[52,41190,41191],{"class":332},"        # 第三层\n",[52,41193,41194,41196,41199,41201],{"class":54,"line":4727},[52,41195,33777],{"class":90},[52,41197,41198],{"class":622},".block3",[52,41200,2099],{"class":160},[52,41202,40941],{"class":622},[52,41204,41205,41207,41209,41211,41213,41215,41217,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237],{"class":54,"line":4741},[52,41206,40946],{"class":622},[52,41208,33788],{"class":8172},[52,41210,2099],{"class":160},[52,41212,35002],{"class":90},[52,41214,3491],{"class":622},[52,41216,33797],{"class":8172},[52,41218,2099],{"class":160},[52,41220,37802],{"class":90},[52,41222,3491],{"class":622},[52,41224,33806],{"class":8172},[52,41226,2099],{"class":160},[52,41228,3188],{"class":90},[52,41230,3491],{"class":622},[52,41232,33815],{"class":8172},[52,41234,2099],{"class":160},[52,41236,3332],{"class":90},[52,41238,40979],{"class":622},[52,41240,41241],{"class":54,"line":4746},[52,41242,40984],{"class":622},[52,41244,41245,41247,41249,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277],{"class":54,"line":5538},[52,41246,40946],{"class":622},[52,41248,33788],{"class":8172},[52,41250,2099],{"class":160},[52,41252,37802],{"class":90},[52,41254,3491],{"class":622},[52,41256,33797],{"class":8172},[52,41258,2099],{"class":160},[52,41260,37802],{"class":90},[52,41262,3491],{"class":622},[52,41264,33806],{"class":8172},[52,41266,2099],{"class":160},[52,41268,3188],{"class":90},[52,41270,3491],{"class":622},[52,41272,33815],{"class":8172},[52,41274,2099],{"class":160},[52,41276,3332],{"class":90},[52,41278,40979],{"class":622},[52,41280,41281],{"class":54,"line":5552},[52,41282,40984],{"class":622},[52,41284,41285,41287,41289,41291,41293,41295,41297,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317],{"class":54,"line":5560},[52,41286,40946],{"class":622},[52,41288,33788],{"class":8172},[52,41290,2099],{"class":160},[52,41292,37802],{"class":90},[52,41294,3491],{"class":622},[52,41296,33797],{"class":8172},[52,41298,2099],{"class":160},[52,41300,37802],{"class":90},[52,41302,3491],{"class":622},[52,41304,33806],{"class":8172},[52,41306,2099],{"class":160},[52,41308,3188],{"class":90},[52,41310,3491],{"class":622},[52,41312,33815],{"class":8172},[52,41314,2099],{"class":160},[52,41316,3332],{"class":90},[52,41318,40979],{"class":622},[52,41320,41321],{"class":54,"line":5565},[52,41322,40984],{"class":622},[52,41324,41325,41327,41329,41331,41333,41335,41337,41339,41341,41343,41345,41347,41349],{"class":54,"line":5571},[52,41326,41029],{"class":622},[52,41328,33806],{"class":8172},[52,41330,2099],{"class":160},[52,41332,3194],{"class":90},[52,41334,3491],{"class":622},[52,41336,33861],{"class":8172},[52,41338,2099],{"class":160},[52,41340,3194],{"class":90},[52,41342,3491],{"class":622},[52,41344,33815],{"class":8172},[52,41346,2099],{"class":160},[52,41348,3306],{"class":90},[52,41350,170],{"class":622},[52,41352,41353],{"class":54,"line":5577},[52,41354,41058],{"class":622},[52,41356,41357],{"class":54,"line":5582},[52,41358,41359],{"class":332},"        # 第四层\n",[52,41361,41362,41364,41367,41369],{"class":54,"line":10904},[52,41363,33777],{"class":90},[52,41365,41366],{"class":622},".block4",[52,41368,2099],{"class":160},[52,41370,40941],{"class":622},[52,41372,41373,41375,41377,41379,41381,41383,41385,41387,41390,41392,41394,41396,41398,41400,41402,41404,41406],{"class":54,"line":10928},[52,41374,40946],{"class":622},[52,41376,33788],{"class":8172},[52,41378,2099],{"class":160},[52,41380,37802],{"class":90},[52,41382,3491],{"class":622},[52,41384,33797],{"class":8172},[52,41386,2099],{"class":160},[52,41388,41389],{"class":90},"512",[52,41391,3491],{"class":622},[52,41393,33806],{"class":8172},[52,41395,2099],{"class":160},[52,41397,3188],{"class":90},[52,41399,3491],{"class":622},[52,41401,33815],{"class":8172},[52,41403,2099],{"class":160},[52,41405,3332],{"class":90},[52,41407,40979],{"class":622},[52,41409,41410],{"class":54,"line":10933},[52,41411,40984],{"class":622},[52,41413,41414,41416,41418,41420,41422,41424,41426,41428,41430,41432,41434,41436,41438,41440,41442,41444,41446],{"class":54,"line":10939},[52,41415,40946],{"class":622},[52,41417,33788],{"class":8172},[52,41419,2099],{"class":160},[52,41421,41389],{"class":90},[52,41423,3491],{"class":622},[52,41425,33797],{"class":8172},[52,41427,2099],{"class":160},[52,41429,41389],{"class":90},[52,41431,3491],{"class":622},[52,41433,33806],{"class":8172},[52,41435,2099],{"class":160},[52,41437,3188],{"class":90},[52,41439,3491],{"class":622},[52,41441,33815],{"class":8172},[52,41443,2099],{"class":160},[52,41445,3332],{"class":90},[52,41447,40979],{"class":622},[52,41449,41450],{"class":54,"line":10966},[52,41451,40984],{"class":622},[52,41453,41454,41456,41458,41460,41462,41464,41466,41468,41470,41472,41474,41476,41478,41480,41482,41484,41486],{"class":54,"line":10971},[52,41455,40946],{"class":622},[52,41457,33788],{"class":8172},[52,41459,2099],{"class":160},[52,41461,41389],{"class":90},[52,41463,3491],{"class":622},[52,41465,33797],{"class":8172},[52,41467,2099],{"class":160},[52,41469,41389],{"class":90},[52,41471,3491],{"class":622},[52,41473,33806],{"class":8172},[52,41475,2099],{"class":160},[52,41477,3188],{"class":90},[52,41479,3491],{"class":622},[52,41481,33815],{"class":8172},[52,41483,2099],{"class":160},[52,41485,3332],{"class":90},[52,41487,40979],{"class":622},[52,41489,41490],{"class":54,"line":10977},[52,41491,40984],{"class":622},[52,41493,41494,41496,41498,41500,41502,41504,41506,41508,41510,41512,41514,41516,41518],{"class":54,"line":10989},[52,41495,41029],{"class":622},[52,41497,33806],{"class":8172},[52,41499,2099],{"class":160},[52,41501,3194],{"class":90},[52,41503,3491],{"class":622},[52,41505,33861],{"class":8172},[52,41507,2099],{"class":160},[52,41509,3194],{"class":90},[52,41511,3491],{"class":622},[52,41513,33815],{"class":8172},[52,41515,2099],{"class":160},[52,41517,3306],{"class":90},[52,41519,170],{"class":622},[52,41521,41522],{"class":54,"line":11001},[52,41523,41058],{"class":622},[52,41525,41526],{"class":54,"line":11013},[52,41527,41528],{"class":332},"        # 第五层\n",[52,41530,41531,41533,41536,41538],{"class":54,"line":12672},[52,41532,33777],{"class":90},[52,41534,41535],{"class":622},".block5",[52,41537,2099],{"class":160},[52,41539,40941],{"class":622},[52,41541,41542,41544,41546,41548,41550,41552,41554,41556,41558,41560,41562,41564,41566,41568,41570,41572,41574],{"class":54,"line":12697},[52,41543,40946],{"class":622},[52,41545,33788],{"class":8172},[52,41547,2099],{"class":160},[52,41549,41389],{"class":90},[52,41551,3491],{"class":622},[52,41553,33797],{"class":8172},[52,41555,2099],{"class":160},[52,41557,41389],{"class":90},[52,41559,3491],{"class":622},[52,41561,33806],{"class":8172},[52,41563,2099],{"class":160},[52,41565,3188],{"class":90},[52,41567,3491],{"class":622},[52,41569,33815],{"class":8172},[52,41571,2099],{"class":160},[52,41573,3332],{"class":90},[52,41575,40979],{"class":622},[52,41577,41578],{"class":54,"line":12720},[52,41579,40984],{"class":622},[52,41581,41582,41584,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604,41606,41608,41610,41612,41614],{"class":54,"line":12744},[52,41583,40946],{"class":622},[52,41585,33788],{"class":8172},[52,41587,2099],{"class":160},[52,41589,41389],{"class":90},[52,41591,3491],{"class":622},[52,41593,33797],{"class":8172},[52,41595,2099],{"class":160},[52,41597,41389],{"class":90},[52,41599,3491],{"class":622},[52,41601,33806],{"class":8172},[52,41603,2099],{"class":160},[52,41605,3188],{"class":90},[52,41607,3491],{"class":622},[52,41609,33815],{"class":8172},[52,41611,2099],{"class":160},[52,41613,3332],{"class":90},[52,41615,40979],{"class":622},[52,41617,41618],{"class":54,"line":12749},[52,41619,40984],{"class":622},[52,41621,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654],{"class":54,"line":12754},[52,41623,40946],{"class":622},[52,41625,33788],{"class":8172},[52,41627,2099],{"class":160},[52,41629,41389],{"class":90},[52,41631,3491],{"class":622},[52,41633,33797],{"class":8172},[52,41635,2099],{"class":160},[52,41637,41389],{"class":90},[52,41639,3491],{"class":622},[52,41641,33806],{"class":8172},[52,41643,2099],{"class":160},[52,41645,3188],{"class":90},[52,41647,3491],{"class":622},[52,41649,33815],{"class":8172},[52,41651,2099],{"class":160},[52,41653,3332],{"class":90},[52,41655,40979],{"class":622},[52,41657,41658],{"class":54,"line":12759},[52,41659,40984],{"class":622},[52,41661,41662,41664,41666,41668,41670,41672,41674,41676,41678,41680,41682,41684,41686],{"class":54,"line":12768},[52,41663,41029],{"class":622},[52,41665,33806],{"class":8172},[52,41667,2099],{"class":160},[52,41669,3194],{"class":90},[52,41671,3491],{"class":622},[52,41673,33861],{"class":8172},[52,41675,2099],{"class":160},[52,41677,3194],{"class":90},[52,41679,3491],{"class":622},[52,41681,33815],{"class":8172},[52,41683,2099],{"class":160},[52,41685,3306],{"class":90},[52,41687,170],{"class":622},[52,41689,41690],{"class":54,"line":12773},[52,41691,41058],{"class":622},[52,41693,41694],{"class":54,"line":12779},[52,41695,41696],{"class":332},"        # 全连接层\n",[52,41698,41699,41701,41704,41706],{"class":54,"line":12800},[52,41700,33777],{"class":90},[52,41702,41703],{"class":622},".block6",[52,41705,2099],{"class":160},[52,41707,40941],{"class":622},[52,41709,41710],{"class":54,"line":12806},[52,41711,41712],{"class":332},"            # 平展操作\n",[52,41714,41715],{"class":54,"line":12820},[52,41716,41717],{"class":332},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[52,41719,41720],{"class":54,"line":12826},[52,41721,41722],{"class":622},"            nn.Flatten(),\n",[52,41724,41725,41728,41730,41732,41734,41736,41738,41740,41742],{"class":54,"line":12853},[52,41726,41727],{"class":622},"            nn.Linear(",[52,41729,3482],{"class":90},[52,41731,1095],{"class":160},[52,41733,3482],{"class":90},[52,41735,1095],{"class":160},[52,41737,41389],{"class":90},[52,41739,3491],{"class":622},[52,41741,37802],{"class":90},[52,41743,40979],{"class":622},[52,41745,41746],{"class":54,"line":12862},[52,41747,40984],{"class":622},[52,41749,41750,41752,41754,41756,41758],{"class":54,"line":12868},[52,41751,41727],{"class":622},[52,41753,37802],{"class":90},[52,41755,3491],{"class":622},[52,41757,35002],{"class":90},[52,41759,40979],{"class":622},[52,41761,41762],{"class":54,"line":12876},[52,41763,40984],{"class":622},[52,41765,41766,41768,41770,41772,41774],{"class":54,"line":12881},[52,41767,41727],{"class":622},[52,41769,35002],{"class":90},[52,41771,3491],{"class":622},[52,41773,3559],{"class":90},[52,41775,170],{"class":622},[52,41777,41778],{"class":54,"line":19560},[52,41779,41058],{"class":622},[52,41781,41782],{"class":54,"line":19566},[52,41783,116],{"emptyLinePlaceholder":115},[52,41785,41786],{"class":54,"line":19589},[52,41787,41788],{"class":332},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[52,41790,41791],{"class":54,"line":19595},[52,41792,41793],{"class":332},"        # 循环遍历模型\n",[52,41795,41796,41798,41801,41803,41806],{"class":54,"line":19618},[52,41797,6362],{"class":160},[52,41799,41800],{"class":622}," m ",[52,41802,28988],{"class":160},[52,41804,41805],{"class":90}," self",[52,41807,41808],{"class":622},".modules():\n",[52,41810,41811],{"class":54,"line":19632},[52,41812,41813],{"class":332},"            # print(m)\n",[52,41815,41816,41818,41821],{"class":54,"line":19652},[52,41817,7601],{"class":160},[52,41819,41820],{"class":90}," isinstance",[52,41822,41823],{"class":622},"(m,nn.Conv2d):\n",[52,41825,41826],{"class":54,"line":19658},[52,41827,41828],{"class":332},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[52,41830,41831,41834,41837,41839,41842],{"class":54,"line":19669},[52,41832,41833],{"class":622},"                nn.init.kaiming_normal_(m.weight,",[52,41835,41836],{"class":8172},"nonlinearity",[52,41838,2099],{"class":160},[52,41840,41841],{"class":62},"'relu'",[52,41843,170],{"class":622},[52,41845,41846],{"class":54,"line":19692},[52,41847,41848],{"class":332},"                # 判断b参数是否存在\n",[52,41850,41851,41854,41857,41860,41863,41866],{"class":54,"line":19714},[52,41852,41853],{"class":160},"                if",[52,41855,41856],{"class":622}," m.bias ",[52,41858,41859],{"class":160},"is",[52,41861,41862],{"class":160}," not",[52,41864,41865],{"class":90}," None",[52,41867,6698],{"class":622},[52,41869,41870],{"class":54,"line":19719},[52,41871,41872],{"class":332},"                    # 如果参数不存在的化初始化b=0\n",[52,41874,41875,41878,41880],{"class":54,"line":19725},[52,41876,41877],{"class":622},"                    nn.init.constant_(m.bias,",[52,41879,3306],{"class":90},[52,41881,170],{"class":622},[52,41883,41884],{"class":54,"line":19739},[52,41885,41886],{"class":332},"            # 全连接层初始化\n",[52,41888,41889,41892,41894],{"class":54,"line":19752},[52,41890,41891],{"class":160},"            elif",[52,41893,41820],{"class":90},[52,41895,41896],{"class":622},"(m,nn.Linear):\n",[52,41898,41899],{"class":54,"line":19757},[52,41900,41901],{"class":332},"                # 这个初始化方法是利用的是正太分布的方式\n",[52,41903,41904],{"class":54,"line":19771},[52,41905,41906],{"class":332},"                # 均值为0，方差为0.01\n",[52,41908,41909,41912,41914,41916,41919],{"class":54,"line":19776},[52,41910,41911],{"class":622},"                nn.init.normal_(m.weight,",[52,41913,3306],{"class":90},[52,41915,3491],{"class":622},[52,41917,41918],{"class":90},"0.01",[52,41920,170],{"class":622},[52,41922,41923],{"class":54,"line":19782},[52,41924,41925],{"class":332},"                # 初始化b参数\n",[52,41927,41928,41930,41932,41934,41936,41938],{"class":54,"line":19787},[52,41929,41853],{"class":160},[52,41931,41856],{"class":622},[52,41933,41859],{"class":160},[52,41935,41862],{"class":160},[52,41937,41865],{"class":90},[52,41939,6698],{"class":622},[52,41941,41942,41944,41946],{"class":54,"line":19801},[52,41943,41877],{"class":622},[52,41945,3306],{"class":90},[52,41947,170],{"class":622},[52,41949,41950],{"class":54,"line":19806},[52,41951,116],{"emptyLinePlaceholder":115},[52,41953,41954],{"class":54,"line":19811},[52,41955,38097],{"class":332},[52,41957,41958,41960,41962],{"class":54,"line":19825},[52,41959,33733],{"class":160},[52,41961,34025],{"class":58},[52,41963,34028],{"class":622},[52,41965,41966,41968,41970,41972],{"class":54,"line":19837},[52,41967,34033],{"class":622},[52,41969,2099],{"class":160},[52,41971,33755],{"class":90},[52,41973,41974],{"class":622},".block1(x)\n",[52,41976,41977,41979,41981,41983],{"class":54,"line":19842},[52,41978,34033],{"class":622},[52,41980,2099],{"class":160},[52,41982,33755],{"class":90},[52,41984,41985],{"class":622},".block2(x)\n",[52,41987,41988,41990,41992,41994],{"class":54,"line":19855},[52,41989,34033],{"class":622},[52,41991,2099],{"class":160},[52,41993,33755],{"class":90},[52,41995,41996],{"class":622},".block3(x)\n",[52,41998,41999,42001,42003,42005],{"class":54,"line":19860},[52,42000,34033],{"class":622},[52,42002,2099],{"class":160},[52,42004,33755],{"class":90},[52,42006,42007],{"class":622},".block4(x)\n",[52,42009,42010,42012,42014,42016],{"class":54,"line":19865},[52,42011,34033],{"class":622},[52,42013,2099],{"class":160},[52,42015,33755],{"class":90},[52,42017,42018],{"class":622},".block5(x)\n",[52,42020,42021,42023,42025,42027],{"class":54,"line":19870},[52,42022,34033],{"class":622},[52,42024,2099],{"class":160},[52,42026,33755],{"class":90},[52,42028,42029],{"class":622},".block6(x)\n",[52,42031,42032,42034],{"class":54,"line":19883},[52,42033,17708],{"class":160},[52,42035,34141],{"class":622},[52,42037,42038],{"class":54,"line":19888},[52,42039,116],{"emptyLinePlaceholder":115},[52,42041,42042],{"class":54,"line":35565},[52,42043,42044],{"class":332},"# 验证模型\n",[52,42046,42047,42049,42051,42053,42056],{"class":54,"line":35571},[52,42048,4509],{"class":160},[52,42050,34152],{"class":90},[52,42052,5909],{"class":160},[52,42054,42055],{"class":62},"'__main__'",[52,42057,6698],{"class":622},[52,42059,42060,42062,42064,42066,42068,42070,42072,42074,42076],{"class":54,"line":35577},[52,42061,34169],{"class":622},[52,42063,2099],{"class":160},[52,42065,33383],{"class":622},[52,42067,34176],{"class":62},[52,42069,4671],{"class":160},[52,42071,34181],{"class":622},[52,42073,4668],{"class":160},[52,42075,33408],{"class":62},[52,42077,170],{"class":622},[52,42079,42080,42082],{"class":54,"line":35583},[52,42081,34231],{"class":90},[52,42083,33417],{"class":622},[52,42085,42086,42088,42090],{"class":54,"line":35589},[52,42087,34221],{"class":622},[52,42089,2099],{"class":160},[52,42091,42092],{"class":622},"VGG16().to(device)\n",[52,42094,42095,42097,42099,42101,42103,42105,42107,42109],{"class":54,"line":35600},[52,42096,34231],{"class":90},[52,42098,34234],{"class":622},[52,42100,3332],{"class":90},[52,42102,3491],{"class":622},[52,42104,34433],{"class":90},[52,42106,3491],{"class":622},[52,42108,34433],{"class":90},[52,42110,34247],{"class":622},[1070,42112,42113],{"start":69},[1073,42114,42115],{},"训练代码",[274,42117,42118],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[274,42120,42121],{},"解决方式:",[274,42123,42124],{},"①权重初始化",[19,42126,42128],{"className":33310,"code":42127,"language":33312,"meta":28,"style":28},"# 权重初始化,保证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",[26,42129,42130,42135,42140,42152,42157,42165,42170,42183,42188,42202,42207,42216,42221,42230,42235,42240,42253,42258,42272],{"__ignoreMap":28},[52,42131,42132],{"class":54,"line":55},[52,42133,42134],{"class":332},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[52,42136,42137],{"class":54,"line":69},[52,42138,42139],{"class":332},"# 循环遍历模型\n",[52,42141,42142,42144,42146,42148,42150],{"class":54,"line":82},[52,42143,5985],{"class":160},[52,42145,41800],{"class":622},[52,42147,28988],{"class":160},[52,42149,41805],{"class":90},[52,42151,41808],{"class":622},[52,42153,42154],{"class":54,"line":97},[52,42155,42156],{"class":332},"    # print(m)\n",[52,42158,42159,42161,42163],{"class":54,"line":112},[52,42160,6060],{"class":160},[52,42162,41820],{"class":90},[52,42164,41823],{"class":622},[52,42166,42167],{"class":54,"line":119},[52,42168,42169],{"class":332},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[52,42171,42172,42175,42177,42179,42181],{"class":54,"line":130},[52,42173,42174],{"class":622},"        nn.init.kaiming_normal_(m.weight,",[52,42176,41836],{"class":8172},[52,42178,2099],{"class":160},[52,42180,41841],{"class":62},[52,42182,170],{"class":622},[52,42184,42185],{"class":54,"line":136},[52,42186,42187],{"class":332},"        # 判断b参数是否存在\n",[52,42189,42190,42192,42194,42196,42198,42200],{"class":54,"line":141},[52,42191,5458],{"class":160},[52,42193,41856],{"class":622},[52,42195,41859],{"class":160},[52,42197,41862],{"class":160},[52,42199,41865],{"class":90},[52,42201,6698],{"class":622},[52,42203,42204],{"class":54,"line":146},[52,42205,42206],{"class":332},"            # 如果参数不存在的化初始化b=0\n",[52,42208,42209,42212,42214],{"class":54,"line":152},[52,42210,42211],{"class":622},"            nn.init.constant_(m.bias,",[52,42213,3306],{"class":90},[52,42215,170],{"class":622},[52,42217,42218],{"class":54,"line":157},[52,42219,42220],{"class":332},"    # 全连接层初始化\n",[52,42222,42223,42226,42228],{"class":54,"line":173},[52,42224,42225],{"class":160},"    elif",[52,42227,41820],{"class":90},[52,42229,41896],{"class":622},[52,42231,42232],{"class":54,"line":178},[52,42233,42234],{"class":332},"        # 这个初始化方法是利用的是正太分布的方式\n",[52,42236,42237],{"class":54,"line":184},[52,42238,42239],{"class":332},"        # 均值为0，方差为0.01\n",[52,42241,42242,42245,42247,42249,42251],{"class":54,"line":189},[52,42243,42244],{"class":622},"        nn.init.normal_(m.weight,",[52,42246,3306],{"class":90},[52,42248,3491],{"class":622},[52,42250,41918],{"class":90},[52,42252,170],{"class":622},[52,42254,42255],{"class":54,"line":201},[52,42256,42257],{"class":332},"        # 初始化b参数\n",[52,42259,42260,42262,42264,42266,42268,42270],{"class":54,"line":206},[52,42261,5458],{"class":160},[52,42263,41856],{"class":622},[52,42265,41859],{"class":160},[52,42267,41862],{"class":160},[52,42269,41865],{"class":90},[52,42271,6698],{"class":622},[52,42273,42274,42276,42278],{"class":54,"line":224},[52,42275,42211],{"class":622},[52,42277,3306],{"class":90},[52,42279,170],{"class":622},[274,42281,42282],{},"②尽可能地增加批次",[274,42284,42285],{},"训练完整代码：",[19,42287,42288],{"className":33310,"code":40831,"language":33312,"meta":28,"style":28},[26,42289,42290,42296,42306,42316,42326,42330,42346,42354,42372,42376,42380,42390,42426,42430,42466,42470,42498,42502,42506,42516,42552,42556,42592,42596,42624,42628,42632,42642,42678,42682,42718,42722,42758,42762,42790,42794,42798,42808,42844,42848,42884,42888,42924,42928,42956,42960,42964,42974,43010,43014,43050,43054,43090,43094,43122,43126,43130,43140,43144,43148,43152,43172,43176,43188,43192,43204,43208,43212,43216,43220,43232,43236,43244,43248,43260,43264,43278,43282,43290,43294,43302,43306,43310,43322,43326,43340,43348,43352,43356,43364,43374,43384,43394,43404,43414,43424,43430,43434,43438,43450,43470,43476,43484],{"__ignoreMap":28},[52,42291,42292,42294],{"class":54,"line":55},[52,42293,33324],{"class":160},[52,42295,33327],{"class":622},[52,42297,42298,42300,42302,42304],{"class":54,"line":69},[52,42299,33669],{"class":160},[52,42301,40846],{"class":622},[52,42303,33324],{"class":160},[52,42305,40851],{"class":622},[52,42307,42308,42310,42312,42314],{"class":54,"line":82},[52,42309,33669],{"class":160},[52,42311,33672],{"class":622},[52,42313,33324],{"class":160},[52,42315,33677],{"class":622},[52,42317,42318,42320,42322,42324],{"class":54,"line":97},[52,42319,33669],{"class":160},[52,42321,33689],{"class":622},[52,42323,33324],{"class":160},[52,42325,33694],{"class":622},[52,42327,42328],{"class":54,"line":112},[52,42329,116],{"emptyLinePlaceholder":115},[52,42331,42332,42334,42336,42338,42340,42342,42344],{"class":54,"line":119},[52,42333,17650],{"class":160},[52,42335,40882],{"class":58},[52,42337,3121],{"class":622},[52,42339,33710],{"class":58},[52,42341,3670],{"class":622},[52,42343,33715],{"class":58},[52,42345,33718],{"class":622},[52,42347,42348,42350,42352],{"class":54,"line":130},[52,42349,33733],{"class":160},[52,42351,33736],{"class":90},[52,42353,33739],{"class":622},[52,42355,42356,42358,42360,42362,42364,42366,42368,42370],{"class":54,"line":136},[52,42357,33749],{"class":90},[52,42359,3121],{"class":622},[52,42361,40909],{"class":90},[52,42363,15391],{"class":622},[52,42365,33755],{"class":90},[52,42367,33758],{"class":622},[52,42369,33761],{"class":90},[52,42371,4938],{"class":622},[52,42373,42374],{"class":54,"line":141},[52,42375,40924],{"class":332},[52,42377,42378],{"class":54,"line":146},[52,42379,40929],{"class":332},[52,42381,42382,42384,42386,42388],{"class":54,"line":152},[52,42383,33777],{"class":90},[52,42385,40936],{"class":622},[52,42387,2099],{"class":160},[52,42389,40941],{"class":622},[52,42391,42392,42394,42396,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424],{"class":54,"line":157},[52,42393,40946],{"class":622},[52,42395,33788],{"class":8172},[52,42397,2099],{"class":160},[52,42399,3332],{"class":90},[52,42401,3491],{"class":622},[52,42403,33797],{"class":8172},[52,42405,2099],{"class":160},[52,42407,3318],{"class":90},[52,42409,3491],{"class":622},[52,42411,33806],{"class":8172},[52,42413,2099],{"class":160},[52,42415,3188],{"class":90},[52,42417,3491],{"class":622},[52,42419,33815],{"class":8172},[52,42421,2099],{"class":160},[52,42423,3332],{"class":90},[52,42425,40979],{"class":622},[52,42427,42428],{"class":54,"line":173},[52,42429,40984],{"class":622},[52,42431,42432,42434,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460,42462,42464],{"class":54,"line":178},[52,42433,40946],{"class":622},[52,42435,33788],{"class":8172},[52,42437,2099],{"class":160},[52,42439,3318],{"class":90},[52,42441,3491],{"class":622},[52,42443,33797],{"class":8172},[52,42445,2099],{"class":160},[52,42447,3318],{"class":90},[52,42449,3491],{"class":622},[52,42451,33806],{"class":8172},[52,42453,2099],{"class":160},[52,42455,3188],{"class":90},[52,42457,3491],{"class":622},[52,42459,33815],{"class":8172},[52,42461,2099],{"class":160},[52,42463,3332],{"class":90},[52,42465,40979],{"class":622},[52,42467,42468],{"class":54,"line":184},[52,42469,40984],{"class":622},[52,42471,42472,42474,42476,42478,42480,42482,42484,42486,42488,42490,42492,42494,42496],{"class":54,"line":189},[52,42473,41029],{"class":622},[52,42475,33806],{"class":8172},[52,42477,2099],{"class":160},[52,42479,3194],{"class":90},[52,42481,3491],{"class":622},[52,42483,33861],{"class":8172},[52,42485,2099],{"class":160},[52,42487,3194],{"class":90},[52,42489,3491],{"class":622},[52,42491,33815],{"class":8172},[52,42493,2099],{"class":160},[52,42495,3306],{"class":90},[52,42497,170],{"class":622},[52,42499,42500],{"class":54,"line":201},[52,42501,41058],{"class":622},[52,42503,42504],{"class":54,"line":206},[52,42505,41063],{"class":332},[52,42507,42508,42510,42512,42514],{"class":54,"line":224},[52,42509,33777],{"class":90},[52,42511,41070],{"class":622},[52,42513,2099],{"class":160},[52,42515,40941],{"class":622},[52,42517,42518,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550],{"class":54,"line":229},[52,42519,40946],{"class":622},[52,42521,33788],{"class":8172},[52,42523,2099],{"class":160},[52,42525,3318],{"class":90},[52,42527,3491],{"class":622},[52,42529,33797],{"class":8172},[52,42531,2099],{"class":160},[52,42533,35002],{"class":90},[52,42535,3491],{"class":622},[52,42537,33806],{"class":8172},[52,42539,2099],{"class":160},[52,42541,3188],{"class":90},[52,42543,3491],{"class":622},[52,42545,33815],{"class":8172},[52,42547,2099],{"class":160},[52,42549,3332],{"class":90},[52,42551,40979],{"class":622},[52,42553,42554],{"class":54,"line":241},[52,42555,40984],{"class":622},[52,42557,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590],{"class":54,"line":246},[52,42559,40946],{"class":622},[52,42561,33788],{"class":8172},[52,42563,2099],{"class":160},[52,42565,35002],{"class":90},[52,42567,3491],{"class":622},[52,42569,33797],{"class":8172},[52,42571,2099],{"class":160},[52,42573,35002],{"class":90},[52,42575,3491],{"class":622},[52,42577,33806],{"class":8172},[52,42579,2099],{"class":160},[52,42581,3188],{"class":90},[52,42583,3491],{"class":622},[52,42585,33815],{"class":8172},[52,42587,2099],{"class":160},[52,42589,3332],{"class":90},[52,42591,40979],{"class":622},[52,42593,42594],{"class":54,"line":252},[52,42595,40984],{"class":622},[52,42597,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622],{"class":54,"line":257},[52,42599,41029],{"class":622},[52,42601,33806],{"class":8172},[52,42603,2099],{"class":160},[52,42605,3194],{"class":90},[52,42607,3491],{"class":622},[52,42609,33861],{"class":8172},[52,42611,2099],{"class":160},[52,42613,3194],{"class":90},[52,42615,3491],{"class":622},[52,42617,33815],{"class":8172},[52,42619,2099],{"class":160},[52,42621,3306],{"class":90},[52,42623,170],{"class":622},[52,42625,42626],{"class":54,"line":266},[52,42627,41058],{"class":622},[52,42629,42630],{"class":54,"line":4722},[52,42631,41191],{"class":332},[52,42633,42634,42636,42638,42640],{"class":54,"line":4727},[52,42635,33777],{"class":90},[52,42637,41198],{"class":622},[52,42639,2099],{"class":160},[52,42641,40941],{"class":622},[52,42643,42644,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672,42674,42676],{"class":54,"line":4741},[52,42645,40946],{"class":622},[52,42647,33788],{"class":8172},[52,42649,2099],{"class":160},[52,42651,35002],{"class":90},[52,42653,3491],{"class":622},[52,42655,33797],{"class":8172},[52,42657,2099],{"class":160},[52,42659,37802],{"class":90},[52,42661,3491],{"class":622},[52,42663,33806],{"class":8172},[52,42665,2099],{"class":160},[52,42667,3188],{"class":90},[52,42669,3491],{"class":622},[52,42671,33815],{"class":8172},[52,42673,2099],{"class":160},[52,42675,3332],{"class":90},[52,42677,40979],{"class":622},[52,42679,42680],{"class":54,"line":4746},[52,42681,40984],{"class":622},[52,42683,42684,42686,42688,42690,42692,42694,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716],{"class":54,"line":5538},[52,42685,40946],{"class":622},[52,42687,33788],{"class":8172},[52,42689,2099],{"class":160},[52,42691,37802],{"class":90},[52,42693,3491],{"class":622},[52,42695,33797],{"class":8172},[52,42697,2099],{"class":160},[52,42699,37802],{"class":90},[52,42701,3491],{"class":622},[52,42703,33806],{"class":8172},[52,42705,2099],{"class":160},[52,42707,3188],{"class":90},[52,42709,3491],{"class":622},[52,42711,33815],{"class":8172},[52,42713,2099],{"class":160},[52,42715,3332],{"class":90},[52,42717,40979],{"class":622},[52,42719,42720],{"class":54,"line":5552},[52,42721,40984],{"class":622},[52,42723,42724,42726,42728,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748,42750,42752,42754,42756],{"class":54,"line":5560},[52,42725,40946],{"class":622},[52,42727,33788],{"class":8172},[52,42729,2099],{"class":160},[52,42731,37802],{"class":90},[52,42733,3491],{"class":622},[52,42735,33797],{"class":8172},[52,42737,2099],{"class":160},[52,42739,37802],{"class":90},[52,42741,3491],{"class":622},[52,42743,33806],{"class":8172},[52,42745,2099],{"class":160},[52,42747,3188],{"class":90},[52,42749,3491],{"class":622},[52,42751,33815],{"class":8172},[52,42753,2099],{"class":160},[52,42755,3332],{"class":90},[52,42757,40979],{"class":622},[52,42759,42760],{"class":54,"line":5565},[52,42761,40984],{"class":622},[52,42763,42764,42766,42768,42770,42772,42774,42776,42778,42780,42782,42784,42786,42788],{"class":54,"line":5571},[52,42765,41029],{"class":622},[52,42767,33806],{"class":8172},[52,42769,2099],{"class":160},[52,42771,3194],{"class":90},[52,42773,3491],{"class":622},[52,42775,33861],{"class":8172},[52,42777,2099],{"class":160},[52,42779,3194],{"class":90},[52,42781,3491],{"class":622},[52,42783,33815],{"class":8172},[52,42785,2099],{"class":160},[52,42787,3306],{"class":90},[52,42789,170],{"class":622},[52,42791,42792],{"class":54,"line":5577},[52,42793,41058],{"class":622},[52,42795,42796],{"class":54,"line":5582},[52,42797,41359],{"class":332},[52,42799,42800,42802,42804,42806],{"class":54,"line":10904},[52,42801,33777],{"class":90},[52,42803,41366],{"class":622},[52,42805,2099],{"class":160},[52,42807,40941],{"class":622},[52,42809,42810,42812,42814,42816,42818,42820,42822,42824,42826,42828,42830,42832,42834,42836,42838,42840,42842],{"class":54,"line":10928},[52,42811,40946],{"class":622},[52,42813,33788],{"class":8172},[52,42815,2099],{"class":160},[52,42817,37802],{"class":90},[52,42819,3491],{"class":622},[52,42821,33797],{"class":8172},[52,42823,2099],{"class":160},[52,42825,41389],{"class":90},[52,42827,3491],{"class":622},[52,42829,33806],{"class":8172},[52,42831,2099],{"class":160},[52,42833,3188],{"class":90},[52,42835,3491],{"class":622},[52,42837,33815],{"class":8172},[52,42839,2099],{"class":160},[52,42841,3332],{"class":90},[52,42843,40979],{"class":622},[52,42845,42846],{"class":54,"line":10933},[52,42847,40984],{"class":622},[52,42849,42850,42852,42854,42856,42858,42860,42862,42864,42866,42868,42870,42872,42874,42876,42878,42880,42882],{"class":54,"line":10939},[52,42851,40946],{"class":622},[52,42853,33788],{"class":8172},[52,42855,2099],{"class":160},[52,42857,41389],{"class":90},[52,42859,3491],{"class":622},[52,42861,33797],{"class":8172},[52,42863,2099],{"class":160},[52,42865,41389],{"class":90},[52,42867,3491],{"class":622},[52,42869,33806],{"class":8172},[52,42871,2099],{"class":160},[52,42873,3188],{"class":90},[52,42875,3491],{"class":622},[52,42877,33815],{"class":8172},[52,42879,2099],{"class":160},[52,42881,3332],{"class":90},[52,42883,40979],{"class":622},[52,42885,42886],{"class":54,"line":10966},[52,42887,40984],{"class":622},[52,42889,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908,42910,42912,42914,42916,42918,42920,42922],{"class":54,"line":10971},[52,42891,40946],{"class":622},[52,42893,33788],{"class":8172},[52,42895,2099],{"class":160},[52,42897,41389],{"class":90},[52,42899,3491],{"class":622},[52,42901,33797],{"class":8172},[52,42903,2099],{"class":160},[52,42905,41389],{"class":90},[52,42907,3491],{"class":622},[52,42909,33806],{"class":8172},[52,42911,2099],{"class":160},[52,42913,3188],{"class":90},[52,42915,3491],{"class":622},[52,42917,33815],{"class":8172},[52,42919,2099],{"class":160},[52,42921,3332],{"class":90},[52,42923,40979],{"class":622},[52,42925,42926],{"class":54,"line":10977},[52,42927,40984],{"class":622},[52,42929,42930,42932,42934,42936,42938,42940,42942,42944,42946,42948,42950,42952,42954],{"class":54,"line":10989},[52,42931,41029],{"class":622},[52,42933,33806],{"class":8172},[52,42935,2099],{"class":160},[52,42937,3194],{"class":90},[52,42939,3491],{"class":622},[52,42941,33861],{"class":8172},[52,42943,2099],{"class":160},[52,42945,3194],{"class":90},[52,42947,3491],{"class":622},[52,42949,33815],{"class":8172},[52,42951,2099],{"class":160},[52,42953,3306],{"class":90},[52,42955,170],{"class":622},[52,42957,42958],{"class":54,"line":11001},[52,42959,41058],{"class":622},[52,42961,42962],{"class":54,"line":11013},[52,42963,41528],{"class":332},[52,42965,42966,42968,42970,42972],{"class":54,"line":12672},[52,42967,33777],{"class":90},[52,42969,41535],{"class":622},[52,42971,2099],{"class":160},[52,42973,40941],{"class":622},[52,42975,42976,42978,42980,42982,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004,43006,43008],{"class":54,"line":12697},[52,42977,40946],{"class":622},[52,42979,33788],{"class":8172},[52,42981,2099],{"class":160},[52,42983,41389],{"class":90},[52,42985,3491],{"class":622},[52,42987,33797],{"class":8172},[52,42989,2099],{"class":160},[52,42991,41389],{"class":90},[52,42993,3491],{"class":622},[52,42995,33806],{"class":8172},[52,42997,2099],{"class":160},[52,42999,3188],{"class":90},[52,43001,3491],{"class":622},[52,43003,33815],{"class":8172},[52,43005,2099],{"class":160},[52,43007,3332],{"class":90},[52,43009,40979],{"class":622},[52,43011,43012],{"class":54,"line":12720},[52,43013,40984],{"class":622},[52,43015,43016,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040,43042,43044,43046,43048],{"class":54,"line":12744},[52,43017,40946],{"class":622},[52,43019,33788],{"class":8172},[52,43021,2099],{"class":160},[52,43023,41389],{"class":90},[52,43025,3491],{"class":622},[52,43027,33797],{"class":8172},[52,43029,2099],{"class":160},[52,43031,41389],{"class":90},[52,43033,3491],{"class":622},[52,43035,33806],{"class":8172},[52,43037,2099],{"class":160},[52,43039,3188],{"class":90},[52,43041,3491],{"class":622},[52,43043,33815],{"class":8172},[52,43045,2099],{"class":160},[52,43047,3332],{"class":90},[52,43049,40979],{"class":622},[52,43051,43052],{"class":54,"line":12749},[52,43053,40984],{"class":622},[52,43055,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082,43084,43086,43088],{"class":54,"line":12754},[52,43057,40946],{"class":622},[52,43059,33788],{"class":8172},[52,43061,2099],{"class":160},[52,43063,41389],{"class":90},[52,43065,3491],{"class":622},[52,43067,33797],{"class":8172},[52,43069,2099],{"class":160},[52,43071,41389],{"class":90},[52,43073,3491],{"class":622},[52,43075,33806],{"class":8172},[52,43077,2099],{"class":160},[52,43079,3188],{"class":90},[52,43081,3491],{"class":622},[52,43083,33815],{"class":8172},[52,43085,2099],{"class":160},[52,43087,3332],{"class":90},[52,43089,40979],{"class":622},[52,43091,43092],{"class":54,"line":12759},[52,43093,40984],{"class":622},[52,43095,43096,43098,43100,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120],{"class":54,"line":12768},[52,43097,41029],{"class":622},[52,43099,33806],{"class":8172},[52,43101,2099],{"class":160},[52,43103,3194],{"class":90},[52,43105,3491],{"class":622},[52,43107,33861],{"class":8172},[52,43109,2099],{"class":160},[52,43111,3194],{"class":90},[52,43113,3491],{"class":622},[52,43115,33815],{"class":8172},[52,43117,2099],{"class":160},[52,43119,3306],{"class":90},[52,43121,170],{"class":622},[52,43123,43124],{"class":54,"line":12773},[52,43125,41058],{"class":622},[52,43127,43128],{"class":54,"line":12779},[52,43129,41696],{"class":332},[52,43131,43132,43134,43136,43138],{"class":54,"line":12800},[52,43133,33777],{"class":90},[52,43135,41703],{"class":622},[52,43137,2099],{"class":160},[52,43139,40941],{"class":622},[52,43141,43142],{"class":54,"line":12806},[52,43143,41712],{"class":332},[52,43145,43146],{"class":54,"line":12820},[52,43147,41717],{"class":332},[52,43149,43150],{"class":54,"line":12826},[52,43151,41722],{"class":622},[52,43153,43154,43156,43158,43160,43162,43164,43166,43168,43170],{"class":54,"line":12853},[52,43155,41727],{"class":622},[52,43157,3482],{"class":90},[52,43159,1095],{"class":160},[52,43161,3482],{"class":90},[52,43163,1095],{"class":160},[52,43165,41389],{"class":90},[52,43167,3491],{"class":622},[52,43169,37802],{"class":90},[52,43171,40979],{"class":622},[52,43173,43174],{"class":54,"line":12862},[52,43175,40984],{"class":622},[52,43177,43178,43180,43182,43184,43186],{"class":54,"line":12868},[52,43179,41727],{"class":622},[52,43181,37802],{"class":90},[52,43183,3491],{"class":622},[52,43185,35002],{"class":90},[52,43187,40979],{"class":622},[52,43189,43190],{"class":54,"line":12876},[52,43191,40984],{"class":622},[52,43193,43194,43196,43198,43200,43202],{"class":54,"line":12881},[52,43195,41727],{"class":622},[52,43197,35002],{"class":90},[52,43199,3491],{"class":622},[52,43201,3559],{"class":90},[52,43203,170],{"class":622},[52,43205,43206],{"class":54,"line":19560},[52,43207,41058],{"class":622},[52,43209,43210],{"class":54,"line":19566},[52,43211,116],{"emptyLinePlaceholder":115},[52,43213,43214],{"class":54,"line":19589},[52,43215,41788],{"class":332},[52,43217,43218],{"class":54,"line":19595},[52,43219,41793],{"class":332},[52,43221,43222,43224,43226,43228,43230],{"class":54,"line":19618},[52,43223,6362],{"class":160},[52,43225,41800],{"class":622},[52,43227,28988],{"class":160},[52,43229,41805],{"class":90},[52,43231,41808],{"class":622},[52,43233,43234],{"class":54,"line":19632},[52,43235,41813],{"class":332},[52,43237,43238,43240,43242],{"class":54,"line":19652},[52,43239,7601],{"class":160},[52,43241,41820],{"class":90},[52,43243,41823],{"class":622},[52,43245,43246],{"class":54,"line":19658},[52,43247,41828],{"class":332},[52,43249,43250,43252,43254,43256,43258],{"class":54,"line":19669},[52,43251,41833],{"class":622},[52,43253,41836],{"class":8172},[52,43255,2099],{"class":160},[52,43257,41841],{"class":62},[52,43259,170],{"class":622},[52,43261,43262],{"class":54,"line":19692},[52,43263,41848],{"class":332},[52,43265,43266,43268,43270,43272,43274,43276],{"class":54,"line":19714},[52,43267,41853],{"class":160},[52,43269,41856],{"class":622},[52,43271,41859],{"class":160},[52,43273,41862],{"class":160},[52,43275,41865],{"class":90},[52,43277,6698],{"class":622},[52,43279,43280],{"class":54,"line":19719},[52,43281,41872],{"class":332},[52,43283,43284,43286,43288],{"class":54,"line":19725},[52,43285,41877],{"class":622},[52,43287,3306],{"class":90},[52,43289,170],{"class":622},[52,43291,43292],{"class":54,"line":19739},[52,43293,41886],{"class":332},[52,43295,43296,43298,43300],{"class":54,"line":19752},[52,43297,41891],{"class":160},[52,43299,41820],{"class":90},[52,43301,41896],{"class":622},[52,43303,43304],{"class":54,"line":19757},[52,43305,41901],{"class":332},[52,43307,43308],{"class":54,"line":19771},[52,43309,41906],{"class":332},[52,43311,43312,43314,43316,43318,43320],{"class":54,"line":19776},[52,43313,41911],{"class":622},[52,43315,3306],{"class":90},[52,43317,3491],{"class":622},[52,43319,41918],{"class":90},[52,43321,170],{"class":622},[52,43323,43324],{"class":54,"line":19782},[52,43325,41925],{"class":332},[52,43327,43328,43330,43332,43334,43336,43338],{"class":54,"line":19787},[52,43329,41853],{"class":160},[52,43331,41856],{"class":622},[52,43333,41859],{"class":160},[52,43335,41862],{"class":160},[52,43337,41865],{"class":90},[52,43339,6698],{"class":622},[52,43341,43342,43344,43346],{"class":54,"line":19801},[52,43343,41877],{"class":622},[52,43345,3306],{"class":90},[52,43347,170],{"class":622},[52,43349,43350],{"class":54,"line":19806},[52,43351,116],{"emptyLinePlaceholder":115},[52,43353,43354],{"class":54,"line":19811},[52,43355,38097],{"class":332},[52,43357,43358,43360,43362],{"class":54,"line":19825},[52,43359,33733],{"class":160},[52,43361,34025],{"class":58},[52,43363,34028],{"class":622},[52,43365,43366,43368,43370,43372],{"class":54,"line":19837},[52,43367,34033],{"class":622},[52,43369,2099],{"class":160},[52,43371,33755],{"class":90},[52,43373,41974],{"class":622},[52,43375,43376,43378,43380,43382],{"class":54,"line":19842},[52,43377,34033],{"class":622},[52,43379,2099],{"class":160},[52,43381,33755],{"class":90},[52,43383,41985],{"class":622},[52,43385,43386,43388,43390,43392],{"class":54,"line":19855},[52,43387,34033],{"class":622},[52,43389,2099],{"class":160},[52,43391,33755],{"class":90},[52,43393,41996],{"class":622},[52,43395,43396,43398,43400,43402],{"class":54,"line":19860},[52,43397,34033],{"class":622},[52,43399,2099],{"class":160},[52,43401,33755],{"class":90},[52,43403,42007],{"class":622},[52,43405,43406,43408,43410,43412],{"class":54,"line":19865},[52,43407,34033],{"class":622},[52,43409,2099],{"class":160},[52,43411,33755],{"class":90},[52,43413,42018],{"class":622},[52,43415,43416,43418,43420,43422],{"class":54,"line":19870},[52,43417,34033],{"class":622},[52,43419,2099],{"class":160},[52,43421,33755],{"class":90},[52,43423,42029],{"class":622},[52,43425,43426,43428],{"class":54,"line":19883},[52,43427,17708],{"class":160},[52,43429,34141],{"class":622},[52,43431,43432],{"class":54,"line":19888},[52,43433,116],{"emptyLinePlaceholder":115},[52,43435,43436],{"class":54,"line":35565},[52,43437,42044],{"class":332},[52,43439,43440,43442,43444,43446,43448],{"class":54,"line":35571},[52,43441,4509],{"class":160},[52,43443,34152],{"class":90},[52,43445,5909],{"class":160},[52,43447,42055],{"class":62},[52,43449,6698],{"class":622},[52,43451,43452,43454,43456,43458,43460,43462,43464,43466,43468],{"class":54,"line":35577},[52,43453,34169],{"class":622},[52,43455,2099],{"class":160},[52,43457,33383],{"class":622},[52,43459,34176],{"class":62},[52,43461,4671],{"class":160},[52,43463,34181],{"class":622},[52,43465,4668],{"class":160},[52,43467,33408],{"class":62},[52,43469,170],{"class":622},[52,43471,43472,43474],{"class":54,"line":35583},[52,43473,34231],{"class":90},[52,43475,33417],{"class":622},[52,43477,43478,43480,43482],{"class":54,"line":35589},[52,43479,34221],{"class":622},[52,43481,2099],{"class":160},[52,43483,42092],{"class":622},[52,43485,43486,43488,43490,43492,43494,43496,43498,43500],{"class":54,"line":35600},[52,43487,34231],{"class":90},[52,43489,34234],{"class":622},[52,43491,3332],{"class":90},[52,43493,3491],{"class":622},[52,43495,34433],{"class":90},[52,43497,3491],{"class":622},[52,43499,34433],{"class":90},[52,43501,34247],{"class":622},[1070,43503,43504],{"start":82},[1073,43505,43506],{},"测试代码",[19,43508,43510],{"className":33310,"code":43509,"language":33312,"meta":28,"style":28},"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",[26,43511,43512,43518,43528,43538,43542,43552,43563,43567,43571,43575,43583,43599,43609,43625,43635,43649,43653,43663,43673,43683,43689,43693,43697,43705,43709,43725,43733,43737,43741,43749,43757,43761,43765,43769,43773,43779,43783,43793,43801,43809,43813,43817,43821,43829,43833,43849,43853,43857,43861,43873,43877,43889,43893,43897,43909,43913,43923,43927,43931,43943,43947,43956,43960,43964,43972,43976,43984,43988,43992,43996,44000,44004,44020,44028,44032,44036,44084,44090,44094,44104,44112,44120,44124,44128,44132,44136,44144,44148,44164,44168,44176,44184],{"__ignoreMap":28},[52,43513,43514,43516],{"class":54,"line":55},[52,43515,33324],{"class":160},[52,43517,33327],{"class":622},[52,43519,43520,43522,43524,43526],{"class":54,"line":69},[52,43521,33324],{"class":160},[52,43523,34347],{"class":622},[52,43525,34315],{"class":160},[52,43527,34352],{"class":622},[52,43529,43530,43532,43534,43536],{"class":54,"line":82},[52,43531,33669],{"class":160},[52,43533,34330],{"class":622},[52,43535,33324],{"class":160},[52,43537,34335],{"class":622},[52,43539,43540],{"class":54,"line":97},[52,43541,36854],{"class":332},[52,43543,43544,43546,43548,43550],{"class":54,"line":112},[52,43545,33669],{"class":160},[52,43547,34300],{"class":622},[52,43549,33324],{"class":160},[52,43551,34305],{"class":622},[52,43553,43554,43556,43558,43560],{"class":54,"line":119},[52,43555,33669],{"class":160},[52,43557,34846],{"class":622},[52,43559,33324],{"class":160},[52,43561,43562],{"class":90}," VGG16\n",[52,43564,43565],{"class":54,"line":130},[52,43566,116],{"emptyLinePlaceholder":115},[52,43568,43569],{"class":54,"line":136},[52,43570,116],{"emptyLinePlaceholder":115},[52,43572,43573],{"class":54,"line":141},[52,43574,36883],{"class":332},[52,43576,43577,43579,43581],{"class":54,"line":146},[52,43578,34879],{"class":160},[52,43580,36890],{"class":58},[52,43582,34885],{"class":622},[52,43584,43585,43587,43589,43591,43593,43595,43597],{"class":54,"line":152},[52,43586,36897],{"class":622},[52,43588,2099],{"class":160},[52,43590,34387],{"class":622},[52,43592,34390],{"class":8172},[52,43594,2099],{"class":160},[52,43596,34395],{"class":62},[52,43598,34398],{"class":622},[52,43600,43601,43603,43605,43607],{"class":54,"line":157},[52,43602,36914],{"class":8172},[52,43604,2099],{"class":160},[52,43606,36919],{"class":90},[52,43608,34398],{"class":622},[52,43610,43611,43613,43615,43617,43619,43621,43623],{"class":54,"line":173},[52,43612,36926],{"class":8172},[52,43614,2099],{"class":160},[52,43616,34425],{"class":622},[52,43618,34428],{"class":8172},[52,43620,2099],{"class":160},[52,43622,34433],{"class":90},[52,43624,34436],{"class":622},[52,43626,43627,43629,43631,43633],{"class":54,"line":178},[52,43628,36943],{"class":8172},[52,43630,2099],{"class":160},[52,43632,34408],{"class":90},[52,43634,170],{"class":622},[52,43636,43637,43639,43641,43643,43645,43647],{"class":54,"line":184},[52,43638,36954],{"class":622},[52,43640,2099],{"class":160},[52,43642,34466],{"class":622},[52,43644,34469],{"class":8172},[52,43646,2099],{"class":160},[52,43648,36965],{"class":622},[52,43650,43651],{"class":54,"line":189},[52,43652,36970],{"class":332},[52,43654,43655,43657,43659,43661],{"class":54,"line":201},[52,43656,36975],{"class":8172},[52,43658,2099],{"class":160},[52,43660,3332],{"class":90},[52,43662,34398],{"class":622},[52,43664,43665,43667,43669,43671],{"class":54,"line":206},[52,43666,36986],{"class":8172},[52,43668,2099],{"class":160},[52,43670,34408],{"class":90},[52,43672,34398],{"class":622},[52,43674,43675,43677,43679,43681],{"class":54,"line":224},[52,43676,36997],{"class":8172},[52,43678,2099],{"class":160},[52,43680,3306],{"class":90},[52,43682,170],{"class":622},[52,43684,43685,43687],{"class":54,"line":229},[52,43686,7049],{"class":160},[52,43688,37010],{"class":622},[52,43690,43691],{"class":54,"line":241},[52,43692,116],{"emptyLinePlaceholder":115},[52,43694,43695],{"class":54,"line":246},[52,43696,37019],{"class":332},[52,43698,43699,43701,43703],{"class":54,"line":252},[52,43700,34879],{"class":160},[52,43702,37026],{"class":58},[52,43704,37029],{"class":622},[52,43706,43707],{"class":54,"line":257},[52,43708,37034],{"class":332},[52,43710,43711,43713,43715,43717,43719,43721,43723],{"class":54,"line":266},[52,43712,34169],{"class":622},[52,43714,2099],{"class":160},[52,43716,34176],{"class":62},[52,43718,4671],{"class":160},[52,43720,34181],{"class":622},[52,43722,4668],{"class":160},[52,43724,37051],{"class":62},[52,43726,43727,43729,43731],{"class":54,"line":4722},[52,43728,34221],{"class":622},[52,43730,2099],{"class":160},[52,43732,35221],{"class":622},[52,43734,43735],{"class":54,"line":4727},[52,43736,116],{"emptyLinePlaceholder":115},[52,43738,43739],{"class":54,"line":4741},[52,43740,37068],{"class":332},[52,43742,43743,43745,43747],{"class":54,"line":4746},[52,43744,37073],{"class":622},[52,43746,2099],{"class":160},[52,43748,35274],{"class":90},[52,43750,43751,43753,43755],{"class":54,"line":5538},[52,43752,37082],{"class":622},[52,43754,2099],{"class":160},[52,43756,2719],{"class":90},[52,43758,43759],{"class":54,"line":5552},[52,43760,116],{"emptyLinePlaceholder":115},[52,43762,43763],{"class":54,"line":5560},[52,43764,37095],{"class":332},[52,43766,43767],{"class":54,"line":5565},[52,43768,37100],{"class":332},[52,43770,43771],{"class":54,"line":5571},[52,43772,37105],{"class":332},[52,43774,43775,43777],{"class":54,"line":5577},[52,43776,37110],{"class":160},[52,43778,35816],{"class":622},[52,43780,43781],{"class":54,"line":5582},[52,43782,37117],{"class":332},[52,43784,43785,43787,43789,43791],{"class":54,"line":10904},[52,43786,6362],{"class":160},[52,43788,37124],{"class":622},[52,43790,28988],{"class":160},[52,43792,37129],{"class":622},[52,43794,43795,43797,43799],{"class":54,"line":10928},[52,43796,37134],{"class":622},[52,43798,2099],{"class":160},[52,43800,37139],{"class":622},[52,43802,43803,43805,43807],{"class":54,"line":10933},[52,43804,37144],{"class":622},[52,43806,2099],{"class":160},[52,43808,37149],{"class":622},[52,43810,43811],{"class":54,"line":10939},[52,43812,37154],{"class":332},[52,43814,43815],{"class":54,"line":10966},[52,43816,35807],{"class":622},[52,43818,43819],{"class":54,"line":10971},[52,43820,37163],{"class":332},[52,43822,43823,43825,43827],{"class":54,"line":10977},[52,43824,35592],{"class":622},[52,43826,2099],{"class":160},[52,43828,37172],{"class":622},[52,43830,43831],{"class":54,"line":10989},[52,43832,37177],{"class":332},[52,43834,43835,43837,43839,43841,43843,43845,43847],{"class":54,"line":11001},[52,43836,35609],{"class":622},[52,43838,2099],{"class":160},[52,43840,35614],{"class":622},[52,43842,35617],{"class":8172},[52,43844,2099],{"class":160},[52,43846,3332],{"class":90},[52,43848,170],{"class":622},[52,43850,43851],{"class":54,"line":11013},[52,43852,37198],{"class":332},[52,43854,43855],{"class":54,"line":12672},[52,43856,37203],{"class":332},[52,43858,43859],{"class":54,"line":12697},[52,43860,37208],{"class":332},[52,43862,43863,43865,43867,43869,43871],{"class":54,"line":12720},[52,43864,37213],{"class":622},[52,43866,12433],{"class":160},[52,43868,35719],{"class":622},[52,43870,5909],{"class":160},[52,43872,37222],{"class":622},[52,43874,43875],{"class":54,"line":12744},[52,43876,37227],{"class":332},[52,43878,43879,43881,43883,43885,43887],{"class":54,"line":12749},[52,43880,37232],{"class":622},[52,43882,12433],{"class":160},[52,43884,37237],{"class":622},[52,43886,3306],{"class":90},[52,43888,170],{"class":622},[52,43890,43891],{"class":54,"line":12754},[52,43892,116],{"emptyLinePlaceholder":115},[52,43894,43895],{"class":54,"line":12759},[52,43896,37250],{"class":332},[52,43898,43899,43901,43903,43905,43907],{"class":54,"line":12768},[52,43900,37255],{"class":622},[52,43902,2099],{"class":160},[52,43904,37260],{"class":622},[52,43906,3696],{"class":160},[52,43908,37265],{"class":622},[52,43910,43911],{"class":54,"line":12773},[52,43912,37270],{"class":332},[52,43914,43915,43917,43919,43921],{"class":54,"line":12779},[52,43916,35383],{"class":90},[52,43918,3121],{"class":622},[52,43920,37279],{"class":62},[52,43922,37282],{"class":622},[52,43924,43925],{"class":54,"line":12800},[52,43926,116],{"emptyLinePlaceholder":115},[52,43928,43929],{"class":54,"line":12806},[52,43930,37291],{"class":332},[52,43932,43933,43935,43937,43939,43941],{"class":54,"line":12820},[52,43934,4509],{"class":160},[52,43936,34152],{"class":90},[52,43938,5909],{"class":160},[52,43940,34157],{"class":62},[52,43942,6698],{"class":622},[52,43944,43945],{"class":54,"line":12826},[52,43946,37308],{"class":332},[52,43948,43949,43951,43953],{"class":54,"line":12853},[52,43950,34221],{"class":622},[52,43952,2099],{"class":160},[52,43954,43955],{"class":622},"VGG16()\n",[52,43957,43958],{"class":54,"line":12862},[52,43959,37321],{"class":332},[52,43961,43962],{"class":54,"line":12868},[52,43963,37326],{"class":332},[52,43965,43966,43968,43970],{"class":54,"line":12876},[52,43967,37331],{"class":622},[52,43969,37334],{"class":62},[52,43971,33429],{"class":622},[52,43973,43974],{"class":54,"line":12881},[52,43975,37341],{"class":332},[52,43977,43978,43980,43982],{"class":54,"line":19560},[52,43979,36954],{"class":622},[52,43981,2099],{"class":160},[52,43983,37350],{"class":622},[52,43985,43986],{"class":54,"line":19566},[52,43987,37355],{"class":332},[52,43989,43990],{"class":54,"line":19589},[52,43991,37360],{"class":622},[52,43993,43994],{"class":54,"line":19595},[52,43995,116],{"emptyLinePlaceholder":115},[52,43997,43998],{"class":54,"line":19618},[52,43999,37369],{"class":332},[52,44001,44002],{"class":54,"line":19632},[52,44003,37374],{"class":332},[52,44005,44006,44008,44010,44012,44014,44016,44018],{"class":54,"line":19652},[52,44007,34169],{"class":622},[52,44009,2099],{"class":160},[52,44011,34176],{"class":62},[52,44013,4671],{"class":160},[52,44015,34181],{"class":622},[52,44017,4668],{"class":160},[52,44019,37051],{"class":62},[52,44021,44022,44024,44026],{"class":54,"line":19658},[52,44023,34221],{"class":622},[52,44025,2099],{"class":160},[52,44027,35221],{"class":622},[52,44029,44030],{"class":54,"line":19669},[52,44031,37403],{"class":332},[52,44033,44034],{"class":54,"line":19692},[52,44035,37408],{"class":332},[52,44037,44038,44040,44042,44044,44046,44048,44050,44052,44054,44056,44058,44060,44062,44064,44066,44068,44070,44072,44074,44076,44078,44080,44082],{"class":54,"line":19714},[52,44039,37413],{"class":622},[52,44041,2099],{"class":160},[52,44043,4002],{"class":622},[52,44045,37420],{"class":62},[52,44047,3491],{"class":622},[52,44049,37425],{"class":62},[52,44051,3491],{"class":622},[52,44053,37430],{"class":62},[52,44055,3491],{"class":622},[52,44057,37435],{"class":62},[52,44059,3491],{"class":622},[52,44061,37440],{"class":62},[52,44063,3491],{"class":622},[52,44065,37445],{"class":62},[52,44067,3491],{"class":622},[52,44069,37450],{"class":62},[52,44071,3491],{"class":622},[52,44073,37455],{"class":62},[52,44075,3491],{"class":622},[52,44077,37460],{"class":62},[52,44079,3491],{"class":622},[52,44081,37465],{"class":62},[52,44083,36178],{"class":622},[52,44085,44086,44088],{"class":54,"line":19719},[52,44087,37110],{"class":160},[52,44089,35816],{"class":622},[52,44091,44092],{"class":54,"line":19725},[52,44093,37478],{"class":332},[52,44095,44096,44098,44100,44102],{"class":54,"line":19739},[52,44097,6362],{"class":160},[52,44099,37485],{"class":622},[52,44101,28988],{"class":160},[52,44103,37129],{"class":622},[52,44105,44106,44108,44110],{"class":54,"line":19752},[52,44107,35542],{"class":622},[52,44109,2099],{"class":160},[52,44111,35547],{"class":622},[52,44113,44114,44116,44118],{"class":54,"line":19757},[52,44115,35557],{"class":622},[52,44117,2099],{"class":160},[52,44119,35562],{"class":622},[52,44121,44122],{"class":54,"line":19771},[52,44123,116],{"emptyLinePlaceholder":115},[52,44125,44126],{"class":54,"line":19776},[52,44127,37514],{"class":332},[52,44129,44130],{"class":54,"line":19782},[52,44131,35807],{"class":622},[52,44133,44134],{"class":54,"line":19787},[52,44135,37523],{"class":332},[52,44137,44138,44140,44142],{"class":54,"line":19801},[52,44139,35592],{"class":622},[52,44141,2099],{"class":160},[52,44143,35597],{"class":622},[52,44145,44146],{"class":54,"line":19806},[52,44147,37536],{"class":332},[52,44149,44150,44152,44154,44156,44158,44160,44162],{"class":54,"line":19811},[52,44151,35609],{"class":622},[52,44153,2099],{"class":160},[52,44155,35614],{"class":622},[52,44157,35617],{"class":8172},[52,44159,2099],{"class":160},[52,44161,3332],{"class":90},[52,44163,170],{"class":622},[52,44165,44166],{"class":54,"line":19825},[52,44167,37557],{"class":332},[52,44169,44170,44172,44174],{"class":54,"line":19837},[52,44171,37562],{"class":622},[52,44173,2099],{"class":160},[52,44175,37567],{"class":622},[52,44177,44178,44180,44182],{"class":54,"line":19842},[52,44179,37572],{"class":622},[52,44181,2099],{"class":160},[52,44183,37577],{"class":622},[52,44185,44186,44188,44190,44192,44194,44196,44198,44200],{"class":54,"line":19855},[52,44187,37582],{"class":90},[52,44189,3121],{"class":622},[52,44191,37587],{"class":62},[52,44193,37590],{"class":622},[52,44195,37593],{"class":62},[52,44197,3491],{"class":622},[52,44199,37598],{"class":62},[52,44201,37601],{"class":622},[30,44203,44205],{"id":44204},"_23googlenet","2.3.GoogLeNet",[1486,44207,44209],{"id":44208},"_231原理","2.3.1.原理",[1070,44211,44212],{},[1073,44213,44214],{},"网络结构",[274,44216,44217],{},[280,44218],{"alt":28,"src":44219},"\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",[274,44221,44222],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[274,44224,44225],{},[280,44226],{"alt":28,"src":44227},"\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",[274,44229,44230],{},[280,44231],{"alt":28,"src":44232},"\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",[274,44234,44235],{},[280,44236],{"alt":28,"src":44237},"\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",[1070,44239,44240],{"start":69},[1073,44241,44242],{},"1x1卷积的优点",[274,44244,44245],{},[280,44246],{"alt":28,"src":44247},"\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",[1070,44249,44250],{"start":82},[1073,44251,44252],{},"全局平均池化层优点",[274,44254,44255],{},[280,44256],{"alt":28,"src":44257},"\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",[274,44259,44260],{},[280,44261],{"alt":28,"src":44262},"\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",[1070,44264,44265],{"start":97},[1073,44266,44267],{},"参数详细描述",[274,44269,44270],{},[280,44271],{"alt":28,"src":44272},"\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",[274,44274,44275],{},[280,44276],{"alt":28,"src":44277},"\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",[274,44279,44280],{},[280,44281],{"alt":28,"src":44282},"\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",[274,44284,44285],{},[280,44286],{"alt":28,"src":44287},"\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",[274,44289,44290],{},[280,44291],{"alt":28,"src":44292},"\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",[274,44294,44295],{},[280,44296],{"alt":28,"src":44297},"\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",[274,44299,44300],{},[280,44301],{"alt":28,"src":44302},"\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",[274,44304,44305],{},[280,44306],{"alt":28,"src":44307},"\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",[274,44309,44310],{},[280,44311],{"alt":28,"src":44312},"\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",[274,44314,44315],{},[280,44316],{"alt":28,"src":44317},"\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",[274,44319,44320],{},[280,44321],{"alt":28,"src":44322},"\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",[274,44324,44325],{},[280,44326],{"alt":28,"src":44327},"\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",[274,44329,44330],{},[280,44331],{"alt":28,"src":44332},"\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",[274,44334,44335],{},[280,44336],{"alt":28,"src":44337},"\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",[274,44339,44340],{},[280,44341],{"alt":28,"src":44342},"\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",[274,44344,44345],{},[280,44346],{"alt":28,"src":44347},"\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",[274,44349,44350],{},[280,44351],{"alt":28,"src":44352},"\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",[274,44354,44355],{},[280,44356],{"alt":28,"src":44357},"\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",[274,44359,44360],{},[280,44361],{"alt":28,"src":44362},"\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",[274,44364,44365],{},[280,44366],{"alt":28,"src":44367},"\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",[274,44369,44370],{},[280,44371],{"alt":28,"src":44372},"\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",[1486,44374,44376],{"id":44375},"_232代码实现","2.3.2.代码实现",[1070,44378,44379],{},[1073,44380,33643],{},[274,44382,44383],{},"根据原理一步一步搭建即可",[19,44385,44387],{"className":33310,"code":44386,"language":33312,"meta":28,"style":28},"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",[26,44388,44389,44395,44405,44415,44419,44436,44445,44460,44470,44475,44508,44513,44550,44597,44602,44638,44685,44690,44695,44730,44762,44766,44774,44790,44814,44839,44860,44865,44880,44884,44888,44893,44910,44915,44924,44939,44950,44994,44998,45026,45030,45041,45069,45073,45110,45114,45142,45146,45157,45193,45225,45253,45257,45268,45302,45334,45366,45399,45433,45461,45465,45476,45509,45541,45555,45559,45572,45576,45581,45593,45601,45623,45628,45633,45638,45643,45648,45653,45667,45675,45684,45697,45712,45721,45725,45733,45744,45755,45766,45777,45788,45794,45798,45803,45815,45835,45844],{"__ignoreMap":28},[52,44390,44391,44393],{"class":54,"line":55},[52,44392,33324],{"class":160},[52,44394,33327],{"class":622},[52,44396,44397,44399,44401,44403],{"class":54,"line":69},[52,44398,33669],{"class":160},[52,44400,33672],{"class":622},[52,44402,33324],{"class":160},[52,44404,33677],{"class":622},[52,44406,44407,44409,44411,44413],{"class":54,"line":82},[52,44408,33669],{"class":160},[52,44410,33689],{"class":622},[52,44412,33324],{"class":160},[52,44414,33694],{"class":622},[52,44416,44417],{"class":54,"line":97},[52,44418,116],{"emptyLinePlaceholder":115},[52,44420,44421,44423,44426,44428,44430,44432,44434],{"class":54,"line":112},[52,44422,17650],{"class":160},[52,44424,44425],{"class":58}," Inception",[52,44427,3121],{"class":622},[52,44429,33710],{"class":58},[52,44431,3670],{"class":622},[52,44433,33715],{"class":58},[52,44435,33718],{"class":622},[52,44437,44438,44440,44442],{"class":54,"line":119},[52,44439,33733],{"class":160},[52,44441,33736],{"class":90},[52,44443,44444],{"class":622},"(self,in_channels,c1,c2,c3,c4):\n",[52,44446,44447,44449,44452,44454,44456,44458],{"class":54,"line":130},[52,44448,33749],{"class":90},[52,44450,44451],{"class":622},"(Inception,",[52,44453,33755],{"class":90},[52,44455,33758],{"class":622},[52,44457,33761],{"class":90},[52,44459,4938],{"class":622},[52,44461,44462,44464,44466,44468],{"class":54,"line":136},[52,44463,33777],{"class":90},[52,44465,37703],{"class":622},[52,44467,2099],{"class":160},[52,44469,37708],{"class":622},[52,44471,44472],{"class":54,"line":141},[52,44473,44474],{"class":332},"        # 路线1：定义1*1卷积\n",[52,44476,44477,44479,44482,44484,44486,44488,44490,44493,44495,44497,44500,44502,44504,44506],{"class":54,"line":146},[52,44478,33777],{"class":90},[52,44480,44481],{"class":622},".p1_1",[52,44483,2099],{"class":160},[52,44485,33785],{"class":622},[52,44487,33788],{"class":8172},[52,44489,2099],{"class":160},[52,44491,44492],{"class":622},"in_channels,",[52,44494,33797],{"class":8172},[52,44496,2099],{"class":160},[52,44498,44499],{"class":622},"c1,",[52,44501,33806],{"class":8172},[52,44503,2099],{"class":160},[52,44505,3332],{"class":90},[52,44507,170],{"class":622},[52,44509,44510],{"class":54,"line":152},[52,44511,44512],{"class":332},"        # 路线2：定义1*1卷积和3*3\n",[52,44514,44515,44517,44520,44522,44524,44526,44528,44530,44532,44534,44537,44539,44542,44544,44546,44548],{"class":54,"line":157},[52,44516,33777],{"class":90},[52,44518,44519],{"class":622},".p2_1",[52,44521,2099],{"class":160},[52,44523,33785],{"class":622},[52,44525,33788],{"class":8172},[52,44527,2099],{"class":160},[52,44529,44492],{"class":622},[52,44531,33797],{"class":8172},[52,44533,2099],{"class":160},[52,44535,44536],{"class":622},"c2[",[52,44538,3306],{"class":90},[52,44540,44541],{"class":622},"],",[52,44543,33806],{"class":8172},[52,44545,2099],{"class":160},[52,44547,3332],{"class":90},[52,44549,170],{"class":622},[52,44551,44552,44554,44557,44559,44561,44563,44565,44567,44569,44571,44573,44575,44577,44579,44581,44583,44585,44587,44589,44591,44593,44595],{"class":54,"line":173},[52,44553,33777],{"class":90},[52,44555,44556],{"class":622},".p2_2",[52,44558,2099],{"class":160},[52,44560,33785],{"class":622},[52,44562,33788],{"class":8172},[52,44564,2099],{"class":160},[52,44566,44536],{"class":622},[52,44568,3306],{"class":90},[52,44570,44541],{"class":622},[52,44572,33797],{"class":8172},[52,44574,2099],{"class":160},[52,44576,44536],{"class":622},[52,44578,3332],{"class":90},[52,44580,44541],{"class":622},[52,44582,33806],{"class":8172},[52,44584,2099],{"class":160},[52,44586,3188],{"class":90},[52,44588,3491],{"class":622},[52,44590,33815],{"class":8172},[52,44592,2099],{"class":160},[52,44594,3332],{"class":90},[52,44596,170],{"class":622},[52,44598,44599],{"class":54,"line":178},[52,44600,44601],{"class":332},"        # 路线3：定义1*1卷积和5*5\n",[52,44603,44604,44606,44609,44611,44613,44615,44617,44619,44621,44623,44626,44628,44630,44632,44634,44636],{"class":54,"line":184},[52,44605,33777],{"class":90},[52,44607,44608],{"class":622},".p3_1",[52,44610,2099],{"class":160},[52,44612,33785],{"class":622},[52,44614,33788],{"class":8172},[52,44616,2099],{"class":160},[52,44618,44492],{"class":622},[52,44620,33797],{"class":8172},[52,44622,2099],{"class":160},[52,44624,44625],{"class":622},"c3[",[52,44627,3306],{"class":90},[52,44629,44541],{"class":622},[52,44631,33806],{"class":8172},[52,44633,2099],{"class":160},[52,44635,3332],{"class":90},[52,44637,170],{"class":622},[52,44639,44640,44642,44645,44647,44649,44651,44653,44655,44657,44659,44661,44663,44665,44667,44669,44671,44673,44675,44677,44679,44681,44683],{"class":54,"line":189},[52,44641,33777],{"class":90},[52,44643,44644],{"class":622},".p3_2",[52,44646,2099],{"class":160},[52,44648,33785],{"class":622},[52,44650,33788],{"class":8172},[52,44652,2099],{"class":160},[52,44654,44625],{"class":622},[52,44656,3306],{"class":90},[52,44658,44541],{"class":622},[52,44660,33797],{"class":8172},[52,44662,2099],{"class":160},[52,44664,44625],{"class":622},[52,44666,3332],{"class":90},[52,44668,44541],{"class":622},[52,44670,33806],{"class":8172},[52,44672,2099],{"class":160},[52,44674,3432],{"class":90},[52,44676,3491],{"class":622},[52,44678,33815],{"class":8172},[52,44680,2099],{"class":160},[52,44682,3194],{"class":90},[52,44684,170],{"class":622},[52,44686,44687],{"class":54,"line":201},[52,44688,44689],{"class":332},"        # 路线4：定义3*3最大池化和1*1卷积\n",[52,44691,44692],{"class":54,"line":206},[52,44693,44694],{"class":332},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[52,44696,44697,44699,44702,44704,44706,44708,44710,44712,44714,44716,44718,44720,44722,44724,44726,44728],{"class":54,"line":224},[52,44698,33777],{"class":90},[52,44700,44701],{"class":622},".p4_1",[52,44703,2099],{"class":160},[52,44705,37761],{"class":622},[52,44707,33806],{"class":8172},[52,44709,2099],{"class":160},[52,44711,3188],{"class":90},[52,44713,3491],{"class":622},[52,44715,33861],{"class":8172},[52,44717,2099],{"class":160},[52,44719,3332],{"class":90},[52,44721,3491],{"class":622},[52,44723,33815],{"class":8172},[52,44725,2099],{"class":160},[52,44727,3332],{"class":90},[52,44729,170],{"class":622},[52,44731,44732,44734,44737,44739,44741,44743,44745,44747,44749,44751,44754,44756,44758,44760],{"class":54,"line":229},[52,44733,33777],{"class":90},[52,44735,44736],{"class":622},".p4_2",[52,44738,2099],{"class":160},[52,44740,33785],{"class":622},[52,44742,33788],{"class":8172},[52,44744,2099],{"class":160},[52,44746,44492],{"class":622},[52,44748,33797],{"class":8172},[52,44750,2099],{"class":160},[52,44752,44753],{"class":622},"c4,",[52,44755,33806],{"class":8172},[52,44757,2099],{"class":160},[52,44759,3332],{"class":90},[52,44761,170],{"class":622},[52,44763,44764],{"class":54,"line":241},[52,44765,116],{"emptyLinePlaceholder":115},[52,44767,44768,44770,44772],{"class":54,"line":246},[52,44769,33733],{"class":160},[52,44771,34025],{"class":58},[52,44773,34028],{"class":622},[52,44775,44776,44779,44781,44783,44785,44787],{"class":54,"line":252},[52,44777,44778],{"class":622},"        p1",[52,44780,2099],{"class":160},[52,44782,33755],{"class":90},[52,44784,38116],{"class":622},[52,44786,33755],{"class":90},[52,44788,44789],{"class":622},".p1_1(x))\n",[52,44791,44792,44794,44796,44798,44800,44802,44805,44807,44809,44811],{"class":54,"line":257},[52,44793,10041],{"class":622},[52,44795,2099],{"class":160},[52,44797,33755],{"class":90},[52,44799,38116],{"class":622},[52,44801,33755],{"class":90},[52,44803,44804],{"class":622},".p2_2(",[52,44806,33755],{"class":90},[52,44808,38116],{"class":622},[52,44810,33755],{"class":90},[52,44812,44813],{"class":622},".p2_1(x))))\n",[52,44815,44816,44819,44821,44823,44825,44827,44830,44832,44834,44836],{"class":54,"line":266},[52,44817,44818],{"class":622},"        p3",[52,44820,2099],{"class":160},[52,44822,33755],{"class":90},[52,44824,38116],{"class":622},[52,44826,33755],{"class":90},[52,44828,44829],{"class":622},".p3_2(",[52,44831,33755],{"class":90},[52,44833,38116],{"class":622},[52,44835,33755],{"class":90},[52,44837,44838],{"class":622},".p3_1(x))))\n",[52,44840,44841,44844,44846,44848,44850,44852,44855,44857],{"class":54,"line":4722},[52,44842,44843],{"class":622},"        p4",[52,44845,2099],{"class":160},[52,44847,33755],{"class":90},[52,44849,38116],{"class":622},[52,44851,33755],{"class":90},[52,44853,44854],{"class":622},".p4_2(",[52,44856,33755],{"class":90},[52,44858,44859],{"class":622},".p4_1(x)))\n",[52,44861,44862],{"class":54,"line":4727},[52,44863,44864],{"class":332},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[52,44866,44867,44869,44872,44874,44876,44878],{"class":54,"line":4741},[52,44868,17708],{"class":160},[52,44870,44871],{"class":622}," torch.cat((p1,p2,p3,p4),",[52,44873,35617],{"class":8172},[52,44875,2099],{"class":160},[52,44877,3332],{"class":90},[52,44879,170],{"class":622},[52,44881,44882],{"class":54,"line":4746},[52,44883,116],{"emptyLinePlaceholder":115},[52,44885,44886],{"class":54,"line":5538},[52,44887,116],{"emptyLinePlaceholder":115},[52,44889,44890],{"class":54,"line":5552},[52,44891,44892],{"class":332},"# 搭建GoogLeNet网络\n",[52,44894,44895,44897,44900,44902,44904,44906,44908],{"class":54,"line":5560},[52,44896,17650],{"class":160},[52,44898,44899],{"class":58}," GoogLeNet",[52,44901,3121],{"class":622},[52,44903,33710],{"class":58},[52,44905,3670],{"class":622},[52,44907,33715],{"class":58},[52,44909,33718],{"class":622},[52,44911,44912],{"class":54,"line":5565},[52,44913,44914],{"class":332},"    # 必须把Inception导入到里边\n",[52,44916,44917,44919,44921],{"class":54,"line":5571},[52,44918,33733],{"class":160},[52,44920,33736],{"class":90},[52,44922,44923],{"class":622},"(self,Inception):\n",[52,44925,44926,44928,44931,44933,44935,44937],{"class":54,"line":5577},[52,44927,33749],{"class":90},[52,44929,44930],{"class":622},"(GoogLeNet,",[52,44932,33755],{"class":90},[52,44934,33758],{"class":622},[52,44936,33761],{"class":90},[52,44938,4938],{"class":622},[52,44940,44941,44943,44946,44948],{"class":54,"line":5582},[52,44942,33777],{"class":90},[52,44944,44945],{"class":622},".b1",[52,44947,2099],{"class":160},[52,44949,40941],{"class":622},[52,44951,44952,44954,44956,44958,44960,44962,44964,44966,44968,44970,44972,44974,44976,44978,44980,44982,44984,44986,44988,44990,44992],{"class":54,"line":10904},[52,44953,40946],{"class":622},[52,44955,33788],{"class":8172},[52,44957,2099],{"class":160},[52,44959,3332],{"class":90},[52,44961,3491],{"class":622},[52,44963,33797],{"class":8172},[52,44965,2099],{"class":160},[52,44967,3318],{"class":90},[52,44969,3491],{"class":622},[52,44971,33806],{"class":8172},[52,44973,2099],{"class":160},[52,44975,3482],{"class":90},[52,44977,3491],{"class":622},[52,44979,33861],{"class":8172},[52,44981,2099],{"class":160},[52,44983,3194],{"class":90},[52,44985,3491],{"class":622},[52,44987,33815],{"class":8172},[52,44989,2099],{"class":160},[52,44991,3188],{"class":90},[52,44993,40979],{"class":622},[52,44995,44996],{"class":54,"line":10928},[52,44997,40984],{"class":622},[52,44999,45000,45002,45004,45006,45008,45010,45012,45014,45016,45018,45020,45022,45024],{"class":54,"line":10933},[52,45001,41029],{"class":622},[52,45003,33806],{"class":8172},[52,45005,2099],{"class":160},[52,45007,3188],{"class":90},[52,45009,3491],{"class":622},[52,45011,33861],{"class":8172},[52,45013,2099],{"class":160},[52,45015,3194],{"class":90},[52,45017,3491],{"class":622},[52,45019,33815],{"class":8172},[52,45021,2099],{"class":160},[52,45023,3332],{"class":90},[52,45025,170],{"class":622},[52,45027,45028],{"class":54,"line":10939},[52,45029,41058],{"class":622},[52,45031,45032,45034,45037,45039],{"class":54,"line":10966},[52,45033,33777],{"class":90},[52,45035,45036],{"class":622},".b2",[52,45038,2099],{"class":160},[52,45040,40941],{"class":622},[52,45042,45043,45045,45047,45049,45051,45053,45055,45057,45059,45061,45063,45065,45067],{"class":54,"line":10971},[52,45044,40946],{"class":622},[52,45046,33788],{"class":8172},[52,45048,2099],{"class":160},[52,45050,3318],{"class":90},[52,45052,3491],{"class":622},[52,45054,33797],{"class":8172},[52,45056,2099],{"class":160},[52,45058,3318],{"class":90},[52,45060,3491],{"class":622},[52,45062,33806],{"class":8172},[52,45064,2099],{"class":160},[52,45066,3332],{"class":90},[52,45068,40979],{"class":622},[52,45070,45071],{"class":54,"line":10977},[52,45072,40984],{"class":622},[52,45074,45075,45077,45079,45081,45083,45085,45087,45089,45092,45094,45096,45098,45100,45102,45104,45106,45108],{"class":54,"line":10989},[52,45076,40946],{"class":622},[52,45078,33788],{"class":8172},[52,45080,2099],{"class":160},[52,45082,3318],{"class":90},[52,45084,3491],{"class":622},[52,45086,33797],{"class":8172},[52,45088,2099],{"class":160},[52,45090,45091],{"class":90},"192",[52,45093,3491],{"class":622},[52,45095,33806],{"class":8172},[52,45097,2099],{"class":160},[52,45099,3188],{"class":90},[52,45101,3491],{"class":622},[52,45103,33815],{"class":8172},[52,45105,2099],{"class":160},[52,45107,3332],{"class":90},[52,45109,40979],{"class":622},[52,45111,45112],{"class":54,"line":11001},[52,45113,40984],{"class":622},[52,45115,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140],{"class":54,"line":11013},[52,45117,41029],{"class":622},[52,45119,33806],{"class":8172},[52,45121,2099],{"class":160},[52,45123,3188],{"class":90},[52,45125,3491],{"class":622},[52,45127,33861],{"class":8172},[52,45129,2099],{"class":160},[52,45131,3194],{"class":90},[52,45133,3491],{"class":622},[52,45135,33815],{"class":8172},[52,45137,2099],{"class":160},[52,45139,3332],{"class":90},[52,45141,170],{"class":622},[52,45143,45144],{"class":54,"line":12672},[52,45145,41058],{"class":622},[52,45147,45148,45150,45153,45155],{"class":54,"line":12697},[52,45149,33777],{"class":90},[52,45151,45152],{"class":622},".b3",[52,45154,2099],{"class":160},[52,45156,40941],{"class":622},[52,45158,45159,45162,45164,45166,45168,45171,45173,45175,45177,45180,45182,45184,45186,45189,45191],{"class":54,"line":12720},[52,45160,45161],{"class":622},"            Inception(",[52,45163,45091],{"class":90},[52,45165,3491],{"class":622},[52,45167,3318],{"class":90},[52,45169,45170],{"class":622},",(",[52,45172,3324],{"class":90},[52,45174,3491],{"class":622},[52,45176,35002],{"class":90},[52,45178,45179],{"class":622},"),(",[52,45181,3713],{"class":90},[52,45183,3491],{"class":622},[52,45185,3312],{"class":90},[52,45187,45188],{"class":622},"),",[52,45190,3312],{"class":90},[52,45192,40979],{"class":622},[52,45194,45195,45197,45199,45201,45203,45205,45207,45209,45211,45213,45215,45217,45219,45221,45223],{"class":54,"line":12744},[52,45196,45161],{"class":622},[52,45198,37802],{"class":90},[52,45200,3491],{"class":622},[52,45202,35002],{"class":90},[52,45204,45170],{"class":622},[52,45206,35002],{"class":90},[52,45208,3491],{"class":622},[52,45210,45091],{"class":90},[52,45212,45179],{"class":622},[52,45214,3312],{"class":90},[52,45216,3491],{"class":622},[52,45218,3324],{"class":90},[52,45220,45188],{"class":622},[52,45222,3318],{"class":90},[52,45224,40979],{"class":622},[52,45226,45227,45229,45231,45233,45235,45237,45239,45241,45243,45245,45247,45249,45251],{"class":54,"line":12749},[52,45228,41029],{"class":622},[52,45230,33806],{"class":8172},[52,45232,2099],{"class":160},[52,45234,3188],{"class":90},[52,45236,3491],{"class":622},[52,45238,33861],{"class":8172},[52,45240,2099],{"class":160},[52,45242,3194],{"class":90},[52,45244,3491],{"class":622},[52,45246,33815],{"class":8172},[52,45248,2099],{"class":160},[52,45250,3332],{"class":90},[52,45252,170],{"class":622},[52,45254,45255],{"class":54,"line":12754},[52,45256,41058],{"class":622},[52,45258,45259,45261,45264,45266],{"class":54,"line":12759},[52,45260,33777],{"class":90},[52,45262,45263],{"class":622},".b4",[52,45265,2099],{"class":160},[52,45267,40941],{"class":622},[52,45269,45270,45272,45275,45277,45279,45281,45283,45285,45288,45290,45292,45294,45296,45298,45300],{"class":54,"line":12768},[52,45271,45161],{"class":622},[52,45273,45274],{"class":90},"480",[52,45276,3491],{"class":622},[52,45278,45091],{"class":90},[52,45280,45170],{"class":622},[52,45282,3324],{"class":90},[52,45284,3491],{"class":622},[52,45286,45287],{"class":90},"208",[52,45289,45179],{"class":622},[52,45291,3713],{"class":90},[52,45293,3491],{"class":622},[52,45295,3719],{"class":90},[52,45297,45188],{"class":622},[52,45299,3318],{"class":90},[52,45301,40979],{"class":622},[52,45303,45304,45306,45308,45310,45312,45314,45316,45318,45320,45322,45324,45326,45328,45330,45332],{"class":54,"line":12773},[52,45305,45161],{"class":622},[52,45307,41389],{"class":90},[52,45309,3491],{"class":622},[52,45311,24003],{"class":90},[52,45313,45170],{"class":622},[52,45315,3730],{"class":90},[52,45317,3491],{"class":622},[52,45319,34433],{"class":90},[52,45321,45179],{"class":622},[52,45323,3912],{"class":90},[52,45325,3491],{"class":622},[52,45327,3318],{"class":90},[52,45329,45188],{"class":622},[52,45331,3318],{"class":90},[52,45333,40979],{"class":622},[52,45335,45336,45338,45340,45342,45344,45346,45348,45350,45352,45354,45356,45358,45360,45362,45364],{"class":54,"line":12779},[52,45337,45161],{"class":622},[52,45339,41389],{"class":90},[52,45341,3491],{"class":622},[52,45343,35002],{"class":90},[52,45345,45170],{"class":622},[52,45347,35002],{"class":90},[52,45349,3491],{"class":622},[52,45351,37802],{"class":90},[52,45353,45179],{"class":622},[52,45355,3912],{"class":90},[52,45357,3491],{"class":622},[52,45359,3318],{"class":90},[52,45361,45188],{"class":622},[52,45363,3318],{"class":90},[52,45365,40979],{"class":622},[52,45367,45368,45370,45372,45374,45376,45378,45380,45382,45385,45387,45389,45391,45393,45395,45397],{"class":54,"line":12800},[52,45369,45161],{"class":622},[52,45371,41389],{"class":90},[52,45373,3491],{"class":622},[52,45375,3730],{"class":90},[52,45377,45170],{"class":622},[52,45379,35002],{"class":90},[52,45381,3491],{"class":622},[52,45383,45384],{"class":90},"288",[52,45386,45179],{"class":622},[52,45388,3312],{"class":90},[52,45390,3491],{"class":622},[52,45392,3318],{"class":90},[52,45394,45188],{"class":622},[52,45396,3318],{"class":90},[52,45398,40979],{"class":622},[52,45400,45401,45403,45406,45408,45410,45412,45414,45416,45419,45421,45423,45425,45427,45429,45431],{"class":54,"line":12806},[52,45402,45161],{"class":622},[52,45404,45405],{"class":90},"528",[52,45407,3491],{"class":622},[52,45409,37802],{"class":90},[52,45411,45170],{"class":622},[52,45413,24003],{"class":90},[52,45415,3491],{"class":622},[52,45417,45418],{"class":90},"320",[52,45420,45179],{"class":622},[52,45422,3312],{"class":90},[52,45424,3491],{"class":622},[52,45426,35002],{"class":90},[52,45428,45188],{"class":622},[52,45430,35002],{"class":90},[52,45432,40979],{"class":622},[52,45434,45435,45437,45439,45441,45443,45445,45447,45449,45451,45453,45455,45457,45459],{"class":54,"line":12820},[52,45436,41029],{"class":622},[52,45438,33806],{"class":8172},[52,45440,2099],{"class":160},[52,45442,3188],{"class":90},[52,45444,3491],{"class":622},[52,45446,33861],{"class":8172},[52,45448,2099],{"class":160},[52,45450,3194],{"class":90},[52,45452,3491],{"class":622},[52,45454,33815],{"class":8172},[52,45456,2099],{"class":160},[52,45458,3332],{"class":90},[52,45460,170],{"class":622},[52,45462,45463],{"class":54,"line":12826},[52,45464,41058],{"class":622},[52,45466,45467,45469,45472,45474],{"class":54,"line":12853},[52,45468,33777],{"class":90},[52,45470,45471],{"class":622},".b5",[52,45473,2099],{"class":160},[52,45475,40941],{"class":622},[52,45477,45478,45480,45483,45485,45487,45489,45491,45493,45495,45497,45499,45501,45503,45505,45507],{"class":54,"line":12862},[52,45479,45161],{"class":622},[52,45481,45482],{"class":90},"832",[52,45484,3491],{"class":622},[52,45486,37802],{"class":90},[52,45488,45170],{"class":622},[52,45490,24003],{"class":90},[52,45492,3491],{"class":622},[52,45494,45418],{"class":90},[52,45496,45179],{"class":622},[52,45498,3312],{"class":90},[52,45500,3491],{"class":622},[52,45502,35002],{"class":90},[52,45504,45188],{"class":622},[52,45506,35002],{"class":90},[52,45508,40979],{"class":622},[52,45510,45511,45513,45515,45517,45519,45521,45523,45525,45527,45529,45531,45533,45535,45537,45539],{"class":54,"line":12868},[52,45512,45161],{"class":622},[52,45514,45482],{"class":90},[52,45516,3491],{"class":622},[52,45518,37872],{"class":90},[52,45520,45170],{"class":622},[52,45522,45091],{"class":90},[52,45524,3491],{"class":622},[52,45526,37872],{"class":90},[52,45528,45179],{"class":622},[52,45530,3719],{"class":90},[52,45532,3491],{"class":622},[52,45534,35002],{"class":90},[52,45536,45188],{"class":622},[52,45538,35002],{"class":90},[52,45540,40979],{"class":622},[52,45542,45543,45546,45548,45550,45552],{"class":54,"line":12876},[52,45544,45545],{"class":622},"            nn.AdaptiveAvgPool2d((",[52,45547,3332],{"class":90},[52,45549,3491],{"class":622},[52,45551,3332],{"class":90},[52,45553,45554],{"class":622},")),\n",[52,45556,45557],{"class":54,"line":12881},[52,45558,41722],{"class":622},[52,45560,45561,45563,45566,45568,45570],{"class":54,"line":19560},[52,45562,41727],{"class":622},[52,45564,45565],{"class":90},"1024",[52,45567,3491],{"class":622},[52,45569,3559],{"class":90},[52,45571,170],{"class":622},[52,45573,45574],{"class":54,"line":19566},[52,45575,41058],{"class":622},[52,45577,45578],{"class":54,"line":19589},[52,45579,45580],{"class":332},"        # 对模型参数初始化\n",[52,45582,45583,45585,45587,45589,45591],{"class":54,"line":19595},[52,45584,6362],{"class":160},[52,45586,41800],{"class":622},[52,45588,28988],{"class":160},[52,45590,41805],{"class":90},[52,45592,41808],{"class":622},[52,45594,45595,45597,45599],{"class":54,"line":19618},[52,45596,7601],{"class":160},[52,45598,41820],{"class":90},[52,45600,41823],{"class":622},[52,45602,45603,45605,45608,45610,45613,45615,45617,45619,45621],{"class":54,"line":19632},[52,45604,41833],{"class":622},[52,45606,45607],{"class":8172},"mode",[52,45609,2099],{"class":160},[52,45611,45612],{"class":62},"'fan_out'",[52,45614,3491],{"class":622},[52,45616,41836],{"class":8172},[52,45618,2099],{"class":160},[52,45620,41841],{"class":62},[52,45622,170],{"class":622},[52,45624,45625],{"class":54,"line":19652},[52,45626,45627],{"class":332},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[52,45629,45630],{"class":54,"line":19658},[52,45631,45632],{"class":332},"                # ② mode = 'fan_out'决定使用的fan值：\n",[52,45634,45635],{"class":54,"line":19669},[52,45636,45637],{"class":332},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[52,45639,45640],{"class":54,"line":19692},[52,45641,45642],{"class":332},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[52,45644,45645],{"class":54,"line":19714},[52,45646,45647],{"class":332},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[52,45649,45650],{"class":54,"line":19719},[52,45651,45652],{"class":332},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[52,45654,45655,45657,45659,45661,45663,45665],{"class":54,"line":19725},[52,45656,41853],{"class":160},[52,45658,41856],{"class":622},[52,45660,41859],{"class":160},[52,45662,41862],{"class":160},[52,45664,41865],{"class":90},[52,45666,6698],{"class":622},[52,45668,45669,45671,45673],{"class":54,"line":19739},[52,45670,41877],{"class":622},[52,45672,3306],{"class":90},[52,45674,170],{"class":622},[52,45676,45677,45680,45682],{"class":54,"line":19752},[52,45678,45679],{"class":160},"                elif",[52,45681,41820],{"class":90},[52,45683,41896],{"class":622},[52,45685,45686,45689,45691,45693,45695],{"class":54,"line":19757},[52,45687,45688],{"class":622},"                    nn.init.normal_(m.weight,",[52,45690,3306],{"class":90},[52,45692,3491],{"class":622},[52,45694,41918],{"class":90},[52,45696,170],{"class":622},[52,45698,45699,45702,45704,45706,45708,45710],{"class":54,"line":19771},[52,45700,45701],{"class":160},"                    if",[52,45703,41856],{"class":622},[52,45705,41859],{"class":160},[52,45707,41862],{"class":160},[52,45709,41865],{"class":90},[52,45711,6698],{"class":622},[52,45713,45714,45717,45719],{"class":54,"line":19776},[52,45715,45716],{"class":622},"                        nn.init.constant_(m.bias,",[52,45718,3306],{"class":90},[52,45720,170],{"class":622},[52,45722,45723],{"class":54,"line":19782},[52,45724,38097],{"class":332},[52,45726,45727,45729,45731],{"class":54,"line":19787},[52,45728,33733],{"class":160},[52,45730,34025],{"class":58},[52,45732,34028],{"class":622},[52,45734,45735,45737,45739,45741],{"class":54,"line":19801},[52,45736,34033],{"class":622},[52,45738,2099],{"class":160},[52,45740,33755],{"class":90},[52,45742,45743],{"class":622},".b1(x)\n",[52,45745,45746,45748,45750,45752],{"class":54,"line":19806},[52,45747,34033],{"class":622},[52,45749,2099],{"class":160},[52,45751,33755],{"class":90},[52,45753,45754],{"class":622},".b2(x)\n",[52,45756,45757,45759,45761,45763],{"class":54,"line":19811},[52,45758,34033],{"class":622},[52,45760,2099],{"class":160},[52,45762,33755],{"class":90},[52,45764,45765],{"class":622},".b3(x)\n",[52,45767,45768,45770,45772,45774],{"class":54,"line":19825},[52,45769,34033],{"class":622},[52,45771,2099],{"class":160},[52,45773,33755],{"class":90},[52,45775,45776],{"class":622},".b4(x)\n",[52,45778,45779,45781,45783,45785],{"class":54,"line":19837},[52,45780,34033],{"class":622},[52,45782,2099],{"class":160},[52,45784,33755],{"class":90},[52,45786,45787],{"class":622},".b5(x)\n",[52,45789,45790,45792],{"class":54,"line":19842},[52,45791,17708],{"class":160},[52,45793,34141],{"class":622},[52,45795,45796],{"class":54,"line":19855},[52,45797,116],{"emptyLinePlaceholder":115},[52,45799,45800],{"class":54,"line":19860},[52,45801,45802],{"class":332},"# 模型展示\n",[52,45804,45805,45807,45809,45811,45813],{"class":54,"line":19865},[52,45806,4509],{"class":160},[52,45808,34152],{"class":90},[52,45810,5909],{"class":160},[52,45812,34157],{"class":62},[52,45814,6698],{"class":622},[52,45816,45817,45819,45821,45823,45825,45827,45829,45831,45833],{"class":54,"line":19870},[52,45818,34169],{"class":622},[52,45820,2099],{"class":160},[52,45822,33383],{"class":622},[52,45824,34176],{"class":62},[52,45826,4671],{"class":160},[52,45828,34181],{"class":622},[52,45830,4668],{"class":160},[52,45832,33408],{"class":62},[52,45834,170],{"class":622},[52,45836,45837,45839,45841],{"class":54,"line":19883},[52,45838,34221],{"class":622},[52,45840,2099],{"class":160},[52,45842,45843],{"class":622},"GoogLeNet(Inception).to(device)\n",[52,45845,45846,45848,45850,45852,45854,45856,45858,45860],{"class":54,"line":19888},[52,45847,34231],{"class":90},[52,45849,34234],{"class":622},[52,45851,3332],{"class":90},[52,45853,3491],{"class":622},[52,45855,34433],{"class":90},[52,45857,3491],{"class":622},[52,45859,34433],{"class":90},[52,45861,34247],{"class":622},[1070,45863,45864],{"start":69},[1073,45865,42115],{},[19,45867,45869],{"className":33310,"code":45868,"language":33312,"meta":28,"style":28},"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",[26,45870,45871,45877,45883,45893,45899,45909,45919,45929,45939,45949,45953,45964,45974,45978,45982,45986,45994,46006,46016,46032,46042,46074,46088,46098,46108,46112,46122,46136,46146,46156,46166,46172,46176,46180,46184,46188,46192,46200,46220,46224,46228,46232,46236,46240,46256,46260,46264,46272,46276,46280,46288,46292,46296,46300,46308,46312,46316,46320,46324,46332,46336,46344,46348,46356,46360,46368,46372,46380,46384,46388,46396,46400,46404,46408,46420,46444,46458,46462,46466,46470,46478,46482,46490,46494,46502,46506,46514,46518,46526,46530,46538,46542,46554,46558,46566,46570,46578,46582,46586,46590,46594,46602,46606,46622,46626,46634,46638,46642,46646,46650,46654,46658,46662,46678,46682,46694,46698,46710,46714,46726,46730,46738,46742,46750,46754,46758,46762,46768,46772,46780,46784,46800,46804,46812,46816,46832,46844,46848,46860,46864,46868,46876,46880,46884,46892,46896,46904,46908,46916,46920,46924,46966,47008,47012,47016,47032,47036,47052,47056,47060,47068,47072,47076,47088,47126,47130,47134,47142,47146,47160,47170,47176,47182,47188,47194,47198,47202,47208,47212,47216,47224,47228,47246,47250,47254,47258,47274,47278,47282,47286,47290,47294,47314,47334,47338,47342,47346,47354,47362,47366,47382,47402,47422,47426,47430,47438,47446,47450,47454,47458,47470,47474,47484,47492,47509],{"__ignoreMap":28},[52,45872,45873,45875],{"class":54,"line":55},[52,45874,33324],{"class":160},[52,45876,34754],{"class":622},[52,45878,45879,45881],{"class":54,"line":69},[52,45880,33324],{"class":160},[52,45882,34761],{"class":622},[52,45884,45885,45887,45889,45891],{"class":54,"line":82},[52,45886,33324],{"class":160},[52,45888,34772],{"class":622},[52,45890,34315],{"class":160},[52,45892,34777],{"class":622},[52,45894,45895,45897],{"class":54,"line":97},[52,45896,33324],{"class":160},[52,45898,33327],{"class":622},[52,45900,45901,45903,45905,45907],{"class":54,"line":112},[52,45902,33669],{"class":160},[52,45904,34347],{"class":622},[52,45906,33324],{"class":160},[52,45908,34794],{"class":622},[52,45910,45911,45913,45915,45917],{"class":54,"line":119},[52,45912,33669],{"class":160},[52,45914,34300],{"class":622},[52,45916,33324],{"class":160},[52,45918,34305],{"class":622},[52,45920,45921,45923,45925,45927],{"class":54,"line":130},[52,45922,33669],{"class":160},[52,45924,34330],{"class":622},[52,45926,33324],{"class":160},[52,45928,34335],{"class":622},[52,45930,45931,45933,45935,45937],{"class":54,"line":136},[52,45932,33324],{"class":160},[52,45934,34347],{"class":622},[52,45936,34315],{"class":160},[52,45938,34352],{"class":622},[52,45940,45941,45943,45945,45947],{"class":54,"line":141},[52,45942,33324],{"class":160},[52,45944,34364],{"class":622},[52,45946,34315],{"class":160},[52,45948,34369],{"class":622},[52,45950,45951],{"class":54,"line":146},[52,45952,34839],{"class":332},[52,45954,45955,45957,45959,45961],{"class":54,"line":152},[52,45956,33669],{"class":160},[52,45958,34846],{"class":622},[52,45960,33324],{"class":160},[52,45962,45963],{"class":622}," GoogLeNet, Inception\n",[52,45965,45966,45968,45970,45972],{"class":54,"line":157},[52,45967,33669],{"class":160},[52,45969,33672],{"class":622},[52,45971,33324],{"class":160},[52,45973,33677],{"class":622},[52,45975,45976],{"class":54,"line":173},[52,45977,116],{"emptyLinePlaceholder":115},[52,45979,45980],{"class":54,"line":178},[52,45981,116],{"emptyLinePlaceholder":115},[52,45983,45984],{"class":54,"line":184},[52,45985,34874],{"class":332},[52,45987,45988,45990,45992],{"class":54,"line":189},[52,45989,34879],{"class":160},[52,45991,34882],{"class":58},[52,45993,34885],{"class":622},[52,45995,45996,45998,46000,46002,46004],{"class":54,"line":201},[52,45997,34890],{"class":622},[52,45999,2099],{"class":160},[52,46001,34387],{"class":622},[52,46003,34395],{"class":62},[52,46005,34398],{"class":622},[52,46007,46008,46010,46012,46014],{"class":54,"line":206},[52,46009,34903],{"class":8172},[52,46011,2099],{"class":160},[52,46013,34408],{"class":90},[52,46015,34398],{"class":622},[52,46017,46018,46020,46022,46024,46026,46028,46030],{"class":54,"line":224},[52,46019,34914],{"class":8172},[52,46021,2099],{"class":160},[52,46023,34425],{"class":622},[52,46025,34428],{"class":8172},[52,46027,2099],{"class":160},[52,46029,38381],{"class":90},[52,46031,34436],{"class":622},[52,46033,46034,46036,46038,46040],{"class":54,"line":229},[52,46035,34931],{"class":8172},[52,46037,2099],{"class":160},[52,46039,34408],{"class":90},[52,46041,170],{"class":622},[52,46043,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062,46064,46066,46068,46070,46072],{"class":54,"line":241},[52,46045,34942],{"class":622},[52,46047,2099],{"class":160},[52,46049,34947],{"class":622},[52,46051,34950],{"class":90},[52,46053,3121],{"class":622},[52,46055,34955],{"class":90},[52,46057,1095],{"class":160},[52,46059,10314],{"class":90},[52,46061,34962],{"class":622},[52,46063,34950],{"class":90},[52,46065,3121],{"class":622},[52,46067,34969],{"class":90},[52,46069,1095],{"class":160},[52,46071,10314],{"class":90},[52,46073,34976],{"class":622},[52,46075,46076,46078,46080,46082,46084,46086],{"class":54,"line":246},[52,46077,34981],{"class":622},[52,46079,2099],{"class":160},[52,46081,34986],{"class":622},[52,46083,34469],{"class":8172},[52,46085,2099],{"class":160},[52,46087,34474],{"class":622},[52,46089,46090,46092,46094,46096],{"class":54,"line":252},[52,46091,34997],{"class":8172},[52,46093,2099],{"class":160},[52,46095,3312],{"class":90},[52,46097,34398],{"class":622},[52,46099,46100,46102,46104,46106],{"class":54,"line":257},[52,46101,35009],{"class":8172},[52,46103,2099],{"class":160},[52,46105,34408],{"class":90},[52,46107,34398],{"class":622},[52,46109,46110],{"class":54,"line":266},[52,46111,35020],{"class":332},[52,46113,46114,46116,46118,46120],{"class":54,"line":4722},[52,46115,35025],{"class":8172},[52,46117,2099],{"class":160},[52,46119,3508],{"class":90},[52,46121,170],{"class":622},[52,46123,46124,46126,46128,46130,46132,46134],{"class":54,"line":4727},[52,46125,35036],{"class":622},[52,46127,2099],{"class":160},[52,46129,34466],{"class":622},[52,46131,34469],{"class":8172},[52,46133,2099],{"class":160},[52,46135,35047],{"class":622},[52,46137,46138,46140,46142,46144],{"class":54,"line":4741},[52,46139,35052],{"class":8172},[52,46141,2099],{"class":160},[52,46143,3312],{"class":90},[52,46145,34398],{"class":622},[52,46147,46148,46150,46152,46154],{"class":54,"line":4746},[52,46149,35063],{"class":8172},[52,46151,2099],{"class":160},[52,46153,34408],{"class":90},[52,46155,34398],{"class":622},[52,46157,46158,46160,46162,46164],{"class":54,"line":5538},[52,46159,35074],{"class":8172},[52,46161,2099],{"class":160},[52,46163,3508],{"class":90},[52,46165,170],{"class":622},[52,46167,46168,46170],{"class":54,"line":5552},[52,46169,7049],{"class":160},[52,46171,35087],{"class":622},[52,46173,46174],{"class":54,"line":5560},[52,46175,116],{"emptyLinePlaceholder":115},[52,46177,46178],{"class":54,"line":5565},[52,46179,35096],{"class":332},[52,46181,46182],{"class":54,"line":5571},[52,46183,35101],{"class":332},[52,46185,46186],{"class":54,"line":5577},[52,46187,116],{"emptyLinePlaceholder":115},[52,46189,46190],{"class":54,"line":5582},[52,46191,35110],{"class":332},[52,46193,46194,46196,46198],{"class":54,"line":10904},[52,46195,34879],{"class":160},[52,46197,35117],{"class":58},[52,46199,35120],{"class":622},[52,46201,46202,46204,46206,46208,46210,46212,46214,46216,46218],{"class":54,"line":10928},[52,46203,34169],{"class":622},[52,46205,2099],{"class":160},[52,46207,33383],{"class":622},[52,46209,34176],{"class":62},[52,46211,4671],{"class":160},[52,46213,34181],{"class":622},[52,46215,4668],{"class":160},[52,46217,35139],{"class":62},[52,46219,170],{"class":622},[52,46221,46222],{"class":54,"line":10933},[52,46223,116],{"emptyLinePlaceholder":115},[52,46225,46226],{"class":54,"line":10939},[52,46227,116],{"emptyLinePlaceholder":115},[52,46229,46230],{"class":54,"line":10966},[52,46231,35154],{"class":332},[52,46233,46234],{"class":54,"line":10971},[52,46235,35159],{"class":332},[52,46237,46238],{"class":54,"line":10977},[52,46239,35164],{"class":332},[52,46241,46242,46244,46246,46248,46250,46252,46254],{"class":54,"line":10989},[52,46243,35169],{"class":622},[52,46245,2099],{"class":160},[52,46247,35174],{"class":622},[52,46249,35177],{"class":8172},[52,46251,2099],{"class":160},[52,46253,35182],{"class":90},[52,46255,170],{"class":622},[52,46257,46258],{"class":54,"line":11001},[52,46259,116],{"emptyLinePlaceholder":115},[52,46261,46262],{"class":54,"line":11013},[52,46263,35193],{"class":332},[52,46265,46266,46268,46270],{"class":54,"line":12672},[52,46267,35198],{"class":622},[52,46269,2099],{"class":160},[52,46271,35203],{"class":622},[52,46273,46274],{"class":54,"line":12697},[52,46275,116],{"emptyLinePlaceholder":115},[52,46277,46278],{"class":54,"line":12720},[52,46279,35212],{"class":332},[52,46281,46282,46284,46286],{"class":54,"line":12744},[52,46283,34221],{"class":622},[52,46285,2099],{"class":160},[52,46287,35221],{"class":622},[52,46289,46290],{"class":54,"line":12749},[52,46291,35226],{"class":332},[52,46293,46294],{"class":54,"line":12754},[52,46295,35231],{"class":332},[52,46297,46298],{"class":54,"line":12759},[52,46299,35236],{"class":332},[52,46301,46302,46304,46306],{"class":54,"line":12768},[52,46303,35241],{"class":622},[52,46305,2099],{"class":160},[52,46307,35246],{"class":622},[52,46309,46310],{"class":54,"line":12773},[52,46311,116],{"emptyLinePlaceholder":115},[52,46313,46314],{"class":54,"line":12779},[52,46315,116],{"emptyLinePlaceholder":115},[52,46317,46318],{"class":54,"line":12800},[52,46319,35259],{"class":332},[52,46321,46322],{"class":54,"line":12806},[52,46323,35264],{"class":332},[52,46325,46326,46328,46330],{"class":54,"line":12820},[52,46327,35269],{"class":622},[52,46329,2099],{"class":160},[52,46331,35274],{"class":90},[52,46333,46334],{"class":54,"line":12826},[52,46335,35279],{"class":332},[52,46337,46338,46340,46342],{"class":54,"line":12853},[52,46339,35284],{"class":622},[52,46341,2099],{"class":160},[52,46343,35289],{"class":622},[52,46345,46346],{"class":54,"line":12862},[52,46347,35294],{"class":332},[52,46349,46350,46352,46354],{"class":54,"line":12868},[52,46351,35299],{"class":622},[52,46353,2099],{"class":160},[52,46355,35289],{"class":622},[52,46357,46358],{"class":54,"line":12876},[52,46359,35308],{"class":332},[52,46361,46362,46364,46366],{"class":54,"line":12881},[52,46363,35313],{"class":622},[52,46365,2099],{"class":160},[52,46367,35289],{"class":622},[52,46369,46370],{"class":54,"line":19560},[52,46371,35322],{"class":332},[52,46373,46374,46376,46378],{"class":54,"line":19566},[52,46375,35327],{"class":622},[52,46377,2099],{"class":160},[52,46379,35289],{"class":622},[52,46381,46382],{"class":54,"line":19589},[52,46383,116],{"emptyLinePlaceholder":115},[52,46385,46386],{"class":54,"line":19595},[52,46387,35340],{"class":332},[52,46389,46390,46392,46394],{"class":54,"line":19618},[52,46391,35345],{"class":622},[52,46393,2099],{"class":160},[52,46395,35350],{"class":622},[52,46397,46398],{"class":54,"line":19632},[52,46399,116],{"emptyLinePlaceholder":115},[52,46401,46402],{"class":54,"line":19652},[52,46403,116],{"emptyLinePlaceholder":115},[52,46405,46406],{"class":54,"line":19658},[52,46407,35363],{"class":332},[52,46409,46410,46412,46414,46416,46418],{"class":54,"line":19669},[52,46411,6160],{"class":160},[52,46413,35370],{"class":622},[52,46415,28988],{"class":160},[52,46417,35375],{"class":90},[52,46419,35378],{"class":622},[52,46421,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440,46442],{"class":54,"line":19692},[52,46423,35383],{"class":90},[52,46425,3121],{"class":622},[52,46427,35388],{"class":62},[52,46429,35391],{"class":90},[52,46431,3696],{"class":62},[52,46433,35391],{"class":90},[52,46435,3364],{"class":62},[52,46437,35400],{"class":622},[52,46439,3644],{"class":160},[52,46441,3332],{"class":90},[52,46443,33429],{"class":622},[52,46445,46446,46448,46450,46452,46454,46456],{"class":54,"line":19714},[52,46447,35383],{"class":90},[52,46449,3121],{"class":622},[52,46451,35415],{"class":62},[52,46453,1095],{"class":160},[52,46455,3559],{"class":90},[52,46457,170],{"class":622},[52,46459,46460],{"class":54,"line":19719},[52,46461,116],{"emptyLinePlaceholder":115},[52,46463,46464],{"class":54,"line":19725},[52,46465,35430],{"class":332},[52,46467,46468],{"class":54,"line":19739},[52,46469,35435],{"class":332},[52,46471,46472,46474,46476],{"class":54,"line":19752},[52,46473,35440],{"class":622},[52,46475,2099],{"class":160},[52,46477,35274],{"class":90},[52,46479,46480],{"class":54,"line":19757},[52,46481,35449],{"class":332},[52,46483,46484,46486,46488],{"class":54,"line":19771},[52,46485,35454],{"class":622},[52,46487,2099],{"class":160},[52,46489,2719],{"class":90},[52,46491,46492],{"class":54,"line":19776},[52,46493,35463],{"class":332},[52,46495,46496,46498,46500],{"class":54,"line":19782},[52,46497,35468],{"class":622},[52,46499,2099],{"class":160},[52,46501,35274],{"class":90},[52,46503,46504],{"class":54,"line":19787},[52,46505,35477],{"class":332},[52,46507,46508,46510,46512],{"class":54,"line":19801},[52,46509,35482],{"class":622},[52,46511,2099],{"class":160},[52,46513,2719],{"class":90},[52,46515,46516],{"class":54,"line":19806},[52,46517,35491],{"class":332},[52,46519,46520,46522,46524],{"class":54,"line":19811},[52,46521,35496],{"class":622},[52,46523,2099],{"class":160},[52,46525,2719],{"class":90},[52,46527,46528],{"class":54,"line":19825},[52,46529,35505],{"class":332},[52,46531,46532,46534,46536],{"class":54,"line":19837},[52,46533,35510],{"class":622},[52,46535,2099],{"class":160},[52,46537,2719],{"class":90},[52,46539,46540],{"class":54,"line":19842},[52,46541,35519],{"class":332},[52,46543,46544,46546,46548,46550,46552],{"class":54,"line":19855},[52,46545,6362],{"class":160},[52,46547,34533],{"class":622},[52,46549,28988],{"class":160},[52,46551,34538],{"class":90},[52,46553,35532],{"class":622},[52,46555,46556],{"class":54,"line":19860},[52,46557,35537],{"class":332},[52,46559,46560,46562,46564],{"class":54,"line":19865},[52,46561,35542],{"class":622},[52,46563,2099],{"class":160},[52,46565,35547],{"class":622},[52,46567,46568],{"class":54,"line":19870},[52,46569,35552],{"class":332},[52,46571,46572,46574,46576],{"class":54,"line":19883},[52,46573,35557],{"class":622},[52,46575,2099],{"class":160},[52,46577,35562],{"class":622},[52,46579,46580],{"class":54,"line":19888},[52,46581,35568],{"class":332},[52,46583,46584],{"class":54,"line":35565},[52,46585,35574],{"class":622},[52,46587,46588],{"class":54,"line":35571},[52,46589,35580],{"class":332},[52,46591,46592],{"class":54,"line":35577},[52,46593,35586],{"class":332},[52,46595,46596,46598,46600],{"class":54,"line":35583},[52,46597,35592],{"class":622},[52,46599,2099],{"class":160},[52,46601,35597],{"class":622},[52,46603,46604],{"class":54,"line":35589},[52,46605,35603],{"class":332},[52,46607,46608,46610,46612,46614,46616,46618,46620],{"class":54,"line":35600},[52,46609,35609],{"class":622},[52,46611,2099],{"class":160},[52,46613,35614],{"class":622},[52,46615,35617],{"class":8172},[52,46617,2099],{"class":160},[52,46619,3332],{"class":90},[52,46621,170],{"class":622},[52,46623,46624],{"class":54,"line":35606},[52,46625,35629],{"class":332},[52,46627,46628,46630,46632],{"class":54,"line":35626},[52,46629,35635],{"class":622},[52,46631,2099],{"class":160},[52,46633,35640],{"class":622},[52,46635,46636],{"class":54,"line":35632},[52,46637,35646],{"class":332},[52,46639,46640],{"class":54,"line":35643},[52,46641,35652],{"class":622},[52,46643,46644],{"class":54,"line":35649},[52,46645,35658],{"class":332},[52,46647,46648],{"class":54,"line":35655},[52,46649,35664],{"class":622},[52,46651,46652],{"class":54,"line":35661},[52,46653,35670],{"class":332},[52,46655,46656],{"class":54,"line":35667},[52,46657,35676],{"class":622},[52,46659,46660],{"class":54,"line":35673},[52,46661,35682],{"class":332},[52,46663,46664,46666,46668,46670,46672,46674,46676],{"class":54,"line":35679},[52,46665,35688],{"class":622},[52,46667,12433],{"class":160},[52,46669,35693],{"class":622},[52,46671,1095],{"class":160},[52,46673,35698],{"class":622},[52,46675,3306],{"class":90},[52,46677,170],{"class":622},[52,46679,46680],{"class":54,"line":35685},[52,46681,35708],{"class":332},[52,46683,46684,46686,46688,46690,46692],{"class":54,"line":35705},[52,46685,35714],{"class":622},[52,46687,12433],{"class":160},[52,46689,35719],{"class":622},[52,46691,5909],{"class":160},[52,46693,35724],{"class":622},[52,46695,46696],{"class":54,"line":35711},[52,46697,35730],{"class":332},[52,46699,46700,46702,46704,46706,46708],{"class":54,"line":35727},[52,46701,35736],{"class":622},[52,46703,12433],{"class":160},[52,46705,35698],{"class":622},[52,46707,3306],{"class":90},[52,46709,170],{"class":622},[52,46711,46712],{"class":54,"line":35733},[52,46713,35750],{"class":332},[52,46715,46716,46718,46720,46722,46724],{"class":54,"line":35747},[52,46717,6362],{"class":160},[52,46719,35758],{"class":622},[52,46721,28988],{"class":160},[52,46723,34538],{"class":90},[52,46725,35765],{"class":622},[52,46727,46728],{"class":54,"line":35753},[52,46729,35771],{"class":332},[52,46731,46732,46734,46736],{"class":54,"line":35768},[52,46733,35542],{"class":622},[52,46735,2099],{"class":160},[52,46737,35547],{"class":622},[52,46739,46740],{"class":54,"line":35774},[52,46741,35786],{"class":332},[52,46743,46744,46746,46748],{"class":54,"line":35783},[52,46745,35557],{"class":622},[52,46747,2099],{"class":160},[52,46749,35562],{"class":622},[52,46751,46752],{"class":54,"line":35789},[52,46753,35801],{"class":332},[52,46755,46756],{"class":54,"line":35798},[52,46757,35807],{"class":622},[52,46759,46760],{"class":54,"line":35804},[52,46761,39288],{"class":332},[52,46763,46764,46766],{"class":54,"line":35810},[52,46765,35813],{"class":160},[52,46767,35816],{"class":622},[52,46769,46770],{"class":54,"line":35819},[52,46771,35822],{"class":332},[52,46773,46774,46776,46778],{"class":54,"line":35825},[52,46775,39303],{"class":622},[52,46777,2099],{"class":160},[52,46779,35597],{"class":622},[52,46781,46782],{"class":54,"line":35836},[52,46783,35839],{"class":332},[52,46785,46786,46788,46790,46792,46794,46796,46798],{"class":54,"line":35842},[52,46787,39316],{"class":622},[52,46789,2099],{"class":160},[52,46791,35614],{"class":622},[52,46793,35617],{"class":8172},[52,46795,2099],{"class":160},[52,46797,3332],{"class":90},[52,46799,170],{"class":622},[52,46801,46802],{"class":54,"line":35861},[52,46803,35864],{"class":332},[52,46805,46806,46808,46810],{"class":54,"line":35867},[52,46807,39337],{"class":622},[52,46809,2099],{"class":160},[52,46811,35640],{"class":622},[52,46813,46814],{"class":54,"line":35878},[52,46815,35881],{"class":332},[52,46817,46818,46820,46822,46824,46826,46828,46830],{"class":54,"line":35884},[52,46819,39350],{"class":622},[52,46821,12433],{"class":160},[52,46823,39355],{"class":622},[52,46825,1095],{"class":160},[52,46827,35698],{"class":622},[52,46829,3306],{"class":90},[52,46831,170],{"class":622},[52,46833,46834,46836,46838,46840,46842],{"class":54,"line":35904},[52,46835,39368],{"class":622},[52,46837,12433],{"class":160},[52,46839,35719],{"class":622},[52,46841,5909],{"class":160},[52,46843,35724],{"class":622},[52,46845,46846],{"class":54,"line":35920},[52,46847,39381],{"class":332},[52,46849,46850,46852,46854,46856,46858],{"class":54,"line":35926},[52,46851,39386],{"class":622},[52,46853,12433],{"class":160},[52,46855,35698],{"class":622},[52,46857,3306],{"class":90},[52,46859,170],{"class":622},[52,46861,46862],{"class":54,"line":35940},[52,46863,35943],{"class":332},[52,46865,46866],{"class":54,"line":35946},[52,46867,35949],{"class":332},[52,46869,46870,46872,46874],{"class":54,"line":35952},[52,46871,35955],{"class":622},[52,46873,3696],{"class":160},[52,46875,35960],{"class":622},[52,46877,46878],{"class":54,"line":35963},[52,46879,35966],{"class":332},[52,46881,46882],{"class":54,"line":35969},[52,46883,35972],{"class":332},[52,46885,46886,46888,46890],{"class":54,"line":35975},[52,46887,35978],{"class":622},[52,46889,3696],{"class":160},[52,46891,35960],{"class":622},[52,46893,46894],{"class":54,"line":35985},[52,46895,35988],{"class":332},[52,46897,46898,46900,46902],{"class":54,"line":35991},[52,46899,35994],{"class":622},[52,46901,3696],{"class":160},[52,46903,35999],{"class":622},[52,46905,46906],{"class":54,"line":36002},[52,46907,36005],{"class":332},[52,46909,46910,46912,46914],{"class":54,"line":36008},[52,46911,36011],{"class":622},[52,46913,3696],{"class":160},[52,46915,35999],{"class":622},[52,46917,46918],{"class":54,"line":36018},[52,46919,116],{"emptyLinePlaceholder":115},[52,46921,46922],{"class":54,"line":36023},[52,46923,36026],{"class":332},[52,46925,46926,46928,46930,46932,46934,46936,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958,46960,46962,46964],{"class":54,"line":36029},[52,46927,35383],{"class":90},[52,46929,3121],{"class":622},[52,46931,6551],{"class":62},[52,46933,35391],{"class":90},[52,46935,36040],{"class":62},[52,46937,4008],{"class":90},[52,46939,36045],{"class":160},[52,46941,4058],{"class":90},[52,46943,36050],{"class":62},[52,46945,4008],{"class":90},[52,46947,36045],{"class":160},[52,46949,4058],{"class":90},[52,46951,6551],{"class":62},[52,46953,36061],{"class":622},[52,46955,3644],{"class":160},[52,46957,3332],{"class":90},[52,46959,36068],{"class":622},[52,46961,3644],{"class":160},[52,46963,3332],{"class":90},[52,46965,36075],{"class":622},[52,46967,46968,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006],{"class":54,"line":36078},[52,46969,35383],{"class":90},[52,46971,3121],{"class":622},[52,46973,6551],{"class":62},[52,46975,35391],{"class":90},[52,46977,36089],{"class":62},[52,46979,4008],{"class":90},[52,46981,36045],{"class":160},[52,46983,4058],{"class":90},[52,46985,36098],{"class":62},[52,46987,4008],{"class":90},[52,46989,36045],{"class":160},[52,46991,4058],{"class":90},[52,46993,6551],{"class":62},[52,46995,36109],{"class":622},[52,46997,3644],{"class":160},[52,46999,3332],{"class":90},[52,47001,36116],{"class":622},[52,47003,3644],{"class":160},[52,47005,3332],{"class":90},[52,47007,36075],{"class":622},[52,47009,47010],{"class":54,"line":36125},[52,47011,116],{"emptyLinePlaceholder":115},[52,47013,47014],{"class":54,"line":36130},[52,47015,36133],{"class":332},[52,47017,47018,47020,47022,47024,47026,47028,47030],{"class":54,"line":36136},[52,47019,5458],{"class":160},[52,47021,36141],{"class":622},[52,47023,3644],{"class":160},[52,47025,3332],{"class":90},[52,47027,4052],{"class":622},[52,47029,4072],{"class":160},[52,47031,36152],{"class":622},[52,47033,47034],{"class":54,"line":36155},[52,47035,36158],{"class":332},[52,47037,47038,47040,47042,47044,47046,47048,47050],{"class":54,"line":36161},[52,47039,36164],{"class":622},[52,47041,3159],{"class":90},[52,47043,2099],{"class":160},[52,47045,36171],{"class":622},[52,47047,3644],{"class":160},[52,47049,3332],{"class":90},[52,47051,36178],{"class":622},[52,47053,47054],{"class":54,"line":36181},[52,47055,36184],{"class":332},[52,47057,47058],{"class":54,"line":36187},[52,47059,36190],{"class":332},[52,47061,47062,47064,47066],{"class":54,"line":36193},[52,47063,36196],{"class":622},[52,47065,2099],{"class":160},[52,47067,35246],{"class":622},[52,47069,47070],{"class":54,"line":36203},[52,47071,116],{"emptyLinePlaceholder":115},[52,47073,47074],{"class":54,"line":36208},[52,47075,36211],{"class":332},[52,47077,47078,47080,47082,47084,47086],{"class":54,"line":36214},[52,47079,36217],{"class":622},[52,47081,2099],{"class":160},[52,47083,36222],{"class":622},[52,47085,3644],{"class":160},[52,47087,36227],{"class":622},[52,47089,47090,47092,47094,47096,47098,47100,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124],{"class":54,"line":36230},[52,47091,35383],{"class":90},[52,47093,3121],{"class":622},[52,47095,36237],{"class":62},[52,47097,4008],{"class":90},[52,47099,36242],{"class":160},[52,47101,4058],{"class":90},[52,47103,3656],{"class":62},[52,47105,4008],{"class":90},[52,47107,36242],{"class":160},[52,47109,4058],{"class":90},[52,47111,36255],{"class":62},[52,47113,36258],{"class":622},[52,47115,36261],{"class":160},[52,47117,4019],{"class":90},[52,47119,36266],{"class":622},[52,47121,3441],{"class":160},[52,47123,4019],{"class":90},[52,47125,33429],{"class":622},[52,47127,47128],{"class":54,"line":36275},[52,47129,39665],{"class":332},[52,47131,47132],{"class":54,"line":36281},[52,47133,39670],{"class":332},[52,47135,47136,47138,47140],{"class":54,"line":36287},[52,47137,39675],{"class":622},[52,47139,36299],{"class":62},[52,47141,170],{"class":622},[52,47143,47144],{"class":54,"line":36293},[52,47145,36319],{"class":332},[52,47147,47148,47150,47152,47154,47156,47158],{"class":54,"line":36304},[52,47149,36325],{"class":622},[52,47151,2099],{"class":160},[52,47153,36330],{"class":622},[52,47155,36333],{"class":8172},[52,47157,2099],{"class":160},[52,47159,4524],{"class":622},[52,47161,47162,47164,47166,47168],{"class":54,"line":36310},[52,47163,36343],{"class":62},[52,47165,3971],{"class":622},[52,47167,36348],{"class":90},[52,47169,36351],{"class":622},[52,47171,47172,47174],{"class":54,"line":36316},[52,47173,36357],{"class":62},[52,47175,36360],{"class":622},[52,47177,47178,47180],{"class":54,"line":36322},[52,47179,36366],{"class":62},[52,47181,36369],{"class":622},[52,47183,47184,47186],{"class":54,"line":36340},[52,47185,36375],{"class":62},[52,47187,36378],{"class":622},[52,47189,47190,47192],{"class":54,"line":36354},[52,47191,36384],{"class":62},[52,47193,36387],{"class":622},[52,47195,47196],{"class":54,"line":36363},[52,47197,36393],{"class":622},[52,47199,47200],{"class":54,"line":36372},[52,47201,36399],{"class":332},[52,47203,47204,47206],{"class":54,"line":36381},[52,47205,7049],{"class":160},[52,47207,36407],{"class":622},[52,47209,47210],{"class":54,"line":36390},[52,47211,116],{"emptyLinePlaceholder":115},[52,47213,47214],{"class":54,"line":36396},[52,47215,36418],{"class":332},[52,47217,47218,47220,47222],{"class":54,"line":36402},[52,47219,34879],{"class":160},[52,47221,36426],{"class":58},[52,47223,36429],{"class":622},[52,47225,47226],{"class":54,"line":36410},[52,47227,36435],{"class":332},[52,47229,47230,47232,47234,47236,47238,47240,47242,47244],{"class":54,"line":36415},[52,47231,36441],{"class":622},[52,47233,34625],{"class":8172},[52,47235,2099],{"class":160},[52,47237,3121],{"class":622},[52,47239,3610],{"class":90},[52,47241,3491],{"class":622},[52,47243,3406],{"class":90},[52,47245,33429],{"class":622},[52,47247,47248],{"class":54,"line":36421},[52,47249,36461],{"class":332},[52,47251,47252],{"class":54,"line":36432},[52,47253,36467],{"class":332},[52,47255,47256],{"class":54,"line":36438},[52,47257,36473],{"class":332},[52,47259,47260,47262,47264,47266,47268,47270,47272],{"class":54,"line":36458},[52,47261,34659],{"class":622},[52,47263,3332],{"class":90},[52,47265,3491],{"class":622},[52,47267,3194],{"class":90},[52,47269,3491],{"class":622},[52,47271,3332],{"class":90},[52,47273,170],{"class":622},[52,47275,47276],{"class":54,"line":36464},[52,47277,36496],{"class":332},[52,47279,47280],{"class":54,"line":36470},[52,47281,36502],{"class":332},[52,47283,47284],{"class":54,"line":36476},[52,47285,36508],{"class":332},[52,47287,47288],{"class":54,"line":36493},[52,47289,36514],{"class":332},[52,47291,47292],{"class":54,"line":36499},[52,47293,36520],{"class":332},[52,47295,47296,47298,47300,47302,47304,47306,47308,47310,47312],{"class":54,"line":36505},[52,47297,36526],{"class":622},[52,47299,36529],{"class":62},[52,47301,36532],{"class":622},[52,47303,36535],{"class":62},[52,47305,3491],{"class":622},[52,47307,36540],{"class":8172},[52,47309,2099],{"class":160},[52,47311,36545],{"class":62},[52,47313,170],{"class":622},[52,47315,47316,47318,47320,47322,47324,47326,47328,47330,47332],{"class":54,"line":36511},[52,47317,36526],{"class":622},[52,47319,36529],{"class":62},[52,47321,36557],{"class":622},[52,47323,36560],{"class":62},[52,47325,3491],{"class":622},[52,47327,36540],{"class":8172},[52,47329,2099],{"class":160},[52,47331,36569],{"class":62},[52,47333,170],{"class":622},[52,47335,47336],{"class":54,"line":36517},[52,47337,36577],{"class":332},[52,47339,47340],{"class":54,"line":36523},[52,47341,36583],{"class":622},[52,47343,47344],{"class":54,"line":36550},[52,47345,36589],{"class":332},[52,47347,47348,47350,47352],{"class":54,"line":36574},[52,47349,36595],{"class":622},[52,47351,36598],{"class":62},[52,47353,170],{"class":622},[52,47355,47356,47358,47360],{"class":54,"line":36580},[52,47357,36606],{"class":622},[52,47359,36609],{"class":62},[52,47361,170],{"class":622},[52,47363,47364],{"class":54,"line":36586},[52,47365,36617],{"class":332},[52,47367,47368,47370,47372,47374,47376,47378,47380],{"class":54,"line":36592},[52,47369,34659],{"class":622},[52,47371,3332],{"class":90},[52,47373,3491],{"class":622},[52,47375,3194],{"class":90},[52,47377,3491],{"class":622},[52,47379,3194],{"class":90},[52,47381,170],{"class":622},[52,47383,47384,47386,47388,47390,47392,47394,47396,47398,47400],{"class":54,"line":36603},[52,47385,36526],{"class":622},[52,47387,36529],{"class":62},[52,47389,36644],{"class":622},[52,47391,36535],{"class":62},[52,47393,3491],{"class":622},[52,47395,36540],{"class":8172},[52,47397,2099],{"class":160},[52,47399,36655],{"class":62},[52,47401,170],{"class":622},[52,47403,47404,47406,47408,47410,47412,47414,47416,47418,47420],{"class":54,"line":36614},[52,47405,36526],{"class":622},[52,47407,36529],{"class":62},[52,47409,36667],{"class":622},[52,47411,36560],{"class":62},[52,47413,3491],{"class":622},[52,47415,36540],{"class":8172},[52,47417,2099],{"class":160},[52,47419,36678],{"class":62},[52,47421,170],{"class":622},[52,47423,47424],{"class":54,"line":36620},[52,47425,36686],{"class":332},[52,47427,47428],{"class":54,"line":36637},[52,47429,36583],{"class":622},[52,47431,47432,47434,47436],{"class":54,"line":36660},[52,47433,36595],{"class":622},[52,47435,36529],{"class":62},[52,47437,170],{"class":622},[52,47439,47440,47442,47444],{"class":54,"line":36683},[52,47441,36606],{"class":622},[52,47443,36708],{"class":62},[52,47445,170],{"class":622},[52,47447,47448],{"class":54,"line":36689},[52,47449,36716],{"class":622},[52,47451,47452],{"class":54,"line":36694},[52,47453,116],{"emptyLinePlaceholder":115},[52,47455,47456],{"class":54,"line":36703},[52,47457,36727],{"class":332},[52,47459,47460,47462,47464,47466,47468],{"class":54,"line":36713},[52,47461,4509],{"class":160},[52,47463,34152],{"class":90},[52,47465,5909],{"class":160},[52,47467,34157],{"class":62},[52,47469,6698],{"class":622},[52,47471,47472],{"class":54,"line":36719},[52,47473,36746],{"class":332},[52,47475,47476,47479,47481],{"class":54,"line":36724},[52,47477,47478],{"class":622},"    GoogLeNet",[52,47480,2099],{"class":160},[52,47482,47483],{"class":622},"GoogLeNet(Inception)\n",[52,47485,47486,47488,47490],{"class":54,"line":36730},[52,47487,36763],{"class":622},[52,47489,2099],{"class":160},[52,47491,36768],{"class":622},[52,47493,47494,47496,47498,47501,47503,47505,47507],{"class":54,"line":36743},[52,47495,36325],{"class":622},[52,47497,2099],{"class":160},[52,47499,47500],{"class":622},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[52,47502,36781],{"class":8172},[52,47504,2099],{"class":160},[52,47506,4063],{"class":90},[52,47508,170],{"class":622},[52,47510,47511],{"class":54,"line":36749},[52,47512,36793],{"class":622},[1070,47514,47515],{"start":82},[1073,47516,43506],{},[19,47518,47520],{"className":33310,"code":47519,"language":33312,"meta":28,"style":28},"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",[26,47521,47522,47528,47538,47548,47552,47562,47573,47577,47581,47585,47593,47609,47619,47635,47645,47659,47663,47673,47683,47693,47699,47703,47707,47715,47719,47735,47743,47747,47751,47759,47767,47771,47775,47779,47783,47789,47793,47803,47811,47819,47823,47827,47831,47839,47843,47859,47863,47867,47871,47883,47887,47899,47903,47907,47919,47923,47933,47937,47941,47953,47957,47965,47969,47973,47981,47985,47993,47997,48001,48005,48009,48013,48029,48037,48041,48045,48093,48099,48103,48113,48121,48129,48133,48137,48141,48145,48153,48157,48173,48177,48185,48193],{"__ignoreMap":28},[52,47523,47524,47526],{"class":54,"line":55},[52,47525,33324],{"class":160},[52,47527,33327],{"class":622},[52,47529,47530,47532,47534,47536],{"class":54,"line":69},[52,47531,33324],{"class":160},[52,47533,34347],{"class":622},[52,47535,34315],{"class":160},[52,47537,34352],{"class":622},[52,47539,47540,47542,47544,47546],{"class":54,"line":82},[52,47541,33669],{"class":160},[52,47543,34330],{"class":622},[52,47545,33324],{"class":160},[52,47547,34335],{"class":622},[52,47549,47550],{"class":54,"line":97},[52,47551,36854],{"class":332},[52,47553,47554,47556,47558,47560],{"class":54,"line":112},[52,47555,33669],{"class":160},[52,47557,34300],{"class":622},[52,47559,33324],{"class":160},[52,47561,34305],{"class":622},[52,47563,47564,47566,47568,47570],{"class":54,"line":119},[52,47565,33669],{"class":160},[52,47567,34846],{"class":622},[52,47569,33324],{"class":160},[52,47571,47572],{"class":622}," GoogLeNet,Inception\n",[52,47574,47575],{"class":54,"line":130},[52,47576,116],{"emptyLinePlaceholder":115},[52,47578,47579],{"class":54,"line":136},[52,47580,116],{"emptyLinePlaceholder":115},[52,47582,47583],{"class":54,"line":141},[52,47584,36883],{"class":332},[52,47586,47587,47589,47591],{"class":54,"line":146},[52,47588,34879],{"class":160},[52,47590,36890],{"class":58},[52,47592,34885],{"class":622},[52,47594,47595,47597,47599,47601,47603,47605,47607],{"class":54,"line":152},[52,47596,36897],{"class":622},[52,47598,2099],{"class":160},[52,47600,34387],{"class":622},[52,47602,34390],{"class":8172},[52,47604,2099],{"class":160},[52,47606,34395],{"class":62},[52,47608,34398],{"class":622},[52,47610,47611,47613,47615,47617],{"class":54,"line":157},[52,47612,36914],{"class":8172},[52,47614,2099],{"class":160},[52,47616,36919],{"class":90},[52,47618,34398],{"class":622},[52,47620,47621,47623,47625,47627,47629,47631,47633],{"class":54,"line":173},[52,47622,36926],{"class":8172},[52,47624,2099],{"class":160},[52,47626,34425],{"class":622},[52,47628,34428],{"class":8172},[52,47630,2099],{"class":160},[52,47632,38381],{"class":90},[52,47634,34436],{"class":622},[52,47636,47637,47639,47641,47643],{"class":54,"line":178},[52,47638,36943],{"class":8172},[52,47640,2099],{"class":160},[52,47642,34408],{"class":90},[52,47644,170],{"class":622},[52,47646,47647,47649,47651,47653,47655,47657],{"class":54,"line":184},[52,47648,36954],{"class":622},[52,47650,2099],{"class":160},[52,47652,34466],{"class":622},[52,47654,34469],{"class":8172},[52,47656,2099],{"class":160},[52,47658,36965],{"class":622},[52,47660,47661],{"class":54,"line":189},[52,47662,36970],{"class":332},[52,47664,47665,47667,47669,47671],{"class":54,"line":201},[52,47666,36975],{"class":8172},[52,47668,2099],{"class":160},[52,47670,3332],{"class":90},[52,47672,34398],{"class":622},[52,47674,47675,47677,47679,47681],{"class":54,"line":206},[52,47676,36986],{"class":8172},[52,47678,2099],{"class":160},[52,47680,34408],{"class":90},[52,47682,34398],{"class":622},[52,47684,47685,47687,47689,47691],{"class":54,"line":224},[52,47686,36997],{"class":8172},[52,47688,2099],{"class":160},[52,47690,3306],{"class":90},[52,47692,170],{"class":622},[52,47694,47695,47697],{"class":54,"line":229},[52,47696,7049],{"class":160},[52,47698,37010],{"class":622},[52,47700,47701],{"class":54,"line":241},[52,47702,116],{"emptyLinePlaceholder":115},[52,47704,47705],{"class":54,"line":246},[52,47706,37019],{"class":332},[52,47708,47709,47711,47713],{"class":54,"line":252},[52,47710,34879],{"class":160},[52,47712,37026],{"class":58},[52,47714,37029],{"class":622},[52,47716,47717],{"class":54,"line":257},[52,47718,37034],{"class":332},[52,47720,47721,47723,47725,47727,47729,47731,47733],{"class":54,"line":266},[52,47722,34169],{"class":622},[52,47724,2099],{"class":160},[52,47726,34176],{"class":62},[52,47728,4671],{"class":160},[52,47730,34181],{"class":622},[52,47732,4668],{"class":160},[52,47734,37051],{"class":62},[52,47736,47737,47739,47741],{"class":54,"line":4722},[52,47738,34221],{"class":622},[52,47740,2099],{"class":160},[52,47742,35221],{"class":622},[52,47744,47745],{"class":54,"line":4727},[52,47746,116],{"emptyLinePlaceholder":115},[52,47748,47749],{"class":54,"line":4741},[52,47750,37068],{"class":332},[52,47752,47753,47755,47757],{"class":54,"line":4746},[52,47754,37073],{"class":622},[52,47756,2099],{"class":160},[52,47758,35274],{"class":90},[52,47760,47761,47763,47765],{"class":54,"line":5538},[52,47762,37082],{"class":622},[52,47764,2099],{"class":160},[52,47766,2719],{"class":90},[52,47768,47769],{"class":54,"line":5552},[52,47770,116],{"emptyLinePlaceholder":115},[52,47772,47773],{"class":54,"line":5560},[52,47774,37095],{"class":332},[52,47776,47777],{"class":54,"line":5565},[52,47778,37100],{"class":332},[52,47780,47781],{"class":54,"line":5571},[52,47782,37105],{"class":332},[52,47784,47785,47787],{"class":54,"line":5577},[52,47786,37110],{"class":160},[52,47788,35816],{"class":622},[52,47790,47791],{"class":54,"line":5582},[52,47792,37117],{"class":332},[52,47794,47795,47797,47799,47801],{"class":54,"line":10904},[52,47796,6362],{"class":160},[52,47798,37124],{"class":622},[52,47800,28988],{"class":160},[52,47802,37129],{"class":622},[52,47804,47805,47807,47809],{"class":54,"line":10928},[52,47806,37134],{"class":622},[52,47808,2099],{"class":160},[52,47810,37139],{"class":622},[52,47812,47813,47815,47817],{"class":54,"line":10933},[52,47814,37144],{"class":622},[52,47816,2099],{"class":160},[52,47818,37149],{"class":622},[52,47820,47821],{"class":54,"line":10939},[52,47822,37154],{"class":332},[52,47824,47825],{"class":54,"line":10966},[52,47826,35807],{"class":622},[52,47828,47829],{"class":54,"line":10971},[52,47830,37163],{"class":332},[52,47832,47833,47835,47837],{"class":54,"line":10977},[52,47834,35592],{"class":622},[52,47836,2099],{"class":160},[52,47838,37172],{"class":622},[52,47840,47841],{"class":54,"line":10989},[52,47842,37177],{"class":332},[52,47844,47845,47847,47849,47851,47853,47855,47857],{"class":54,"line":11001},[52,47846,35609],{"class":622},[52,47848,2099],{"class":160},[52,47850,35614],{"class":622},[52,47852,35617],{"class":8172},[52,47854,2099],{"class":160},[52,47856,3332],{"class":90},[52,47858,170],{"class":622},[52,47860,47861],{"class":54,"line":11013},[52,47862,37198],{"class":332},[52,47864,47865],{"class":54,"line":12672},[52,47866,37203],{"class":332},[52,47868,47869],{"class":54,"line":12697},[52,47870,37208],{"class":332},[52,47872,47873,47875,47877,47879,47881],{"class":54,"line":12720},[52,47874,37213],{"class":622},[52,47876,12433],{"class":160},[52,47878,35719],{"class":622},[52,47880,5909],{"class":160},[52,47882,37222],{"class":622},[52,47884,47885],{"class":54,"line":12744},[52,47886,37227],{"class":332},[52,47888,47889,47891,47893,47895,47897],{"class":54,"line":12749},[52,47890,37232],{"class":622},[52,47892,12433],{"class":160},[52,47894,37237],{"class":622},[52,47896,3306],{"class":90},[52,47898,170],{"class":622},[52,47900,47901],{"class":54,"line":12754},[52,47902,116],{"emptyLinePlaceholder":115},[52,47904,47905],{"class":54,"line":12759},[52,47906,37250],{"class":332},[52,47908,47909,47911,47913,47915,47917],{"class":54,"line":12768},[52,47910,37255],{"class":622},[52,47912,2099],{"class":160},[52,47914,37260],{"class":622},[52,47916,3696],{"class":160},[52,47918,37265],{"class":622},[52,47920,47921],{"class":54,"line":12773},[52,47922,37270],{"class":332},[52,47924,47925,47927,47929,47931],{"class":54,"line":12779},[52,47926,35383],{"class":90},[52,47928,3121],{"class":622},[52,47930,37279],{"class":62},[52,47932,37282],{"class":622},[52,47934,47935],{"class":54,"line":12800},[52,47936,116],{"emptyLinePlaceholder":115},[52,47938,47939],{"class":54,"line":12806},[52,47940,37291],{"class":332},[52,47942,47943,47945,47947,47949,47951],{"class":54,"line":12820},[52,47944,4509],{"class":160},[52,47946,34152],{"class":90},[52,47948,5909],{"class":160},[52,47950,34157],{"class":62},[52,47952,6698],{"class":622},[52,47954,47955],{"class":54,"line":12826},[52,47956,37308],{"class":332},[52,47958,47959,47961,47963],{"class":54,"line":12853},[52,47960,34221],{"class":622},[52,47962,2099],{"class":160},[52,47964,47483],{"class":622},[52,47966,47967],{"class":54,"line":12862},[52,47968,37321],{"class":332},[52,47970,47971],{"class":54,"line":12868},[52,47972,37326],{"class":332},[52,47974,47975,47977,47979],{"class":54,"line":12876},[52,47976,37331],{"class":622},[52,47978,37334],{"class":62},[52,47980,33429],{"class":622},[52,47982,47983],{"class":54,"line":12881},[52,47984,37341],{"class":332},[52,47986,47987,47989,47991],{"class":54,"line":19560},[52,47988,36954],{"class":622},[52,47990,2099],{"class":160},[52,47992,37350],{"class":622},[52,47994,47995],{"class":54,"line":19566},[52,47996,37355],{"class":332},[52,47998,47999],{"class":54,"line":19589},[52,48000,37360],{"class":622},[52,48002,48003],{"class":54,"line":19595},[52,48004,116],{"emptyLinePlaceholder":115},[52,48006,48007],{"class":54,"line":19618},[52,48008,37369],{"class":332},[52,48010,48011],{"class":54,"line":19632},[52,48012,37374],{"class":332},[52,48014,48015,48017,48019,48021,48023,48025,48027],{"class":54,"line":19652},[52,48016,34169],{"class":622},[52,48018,2099],{"class":160},[52,48020,34176],{"class":62},[52,48022,4671],{"class":160},[52,48024,34181],{"class":622},[52,48026,4668],{"class":160},[52,48028,37051],{"class":62},[52,48030,48031,48033,48035],{"class":54,"line":19658},[52,48032,34221],{"class":622},[52,48034,2099],{"class":160},[52,48036,35221],{"class":622},[52,48038,48039],{"class":54,"line":19669},[52,48040,37403],{"class":332},[52,48042,48043],{"class":54,"line":19692},[52,48044,37408],{"class":332},[52,48046,48047,48049,48051,48053,48055,48057,48059,48061,48063,48065,48067,48069,48071,48073,48075,48077,48079,48081,48083,48085,48087,48089,48091],{"class":54,"line":19714},[52,48048,37413],{"class":622},[52,48050,2099],{"class":160},[52,48052,4002],{"class":622},[52,48054,37420],{"class":62},[52,48056,3491],{"class":622},[52,48058,37425],{"class":62},[52,48060,3491],{"class":622},[52,48062,37430],{"class":62},[52,48064,3491],{"class":622},[52,48066,37435],{"class":62},[52,48068,3491],{"class":622},[52,48070,37440],{"class":62},[52,48072,3491],{"class":622},[52,48074,37445],{"class":62},[52,48076,3491],{"class":622},[52,48078,37450],{"class":62},[52,48080,3491],{"class":622},[52,48082,37455],{"class":62},[52,48084,3491],{"class":622},[52,48086,37460],{"class":62},[52,48088,3491],{"class":622},[52,48090,37465],{"class":62},[52,48092,36178],{"class":622},[52,48094,48095,48097],{"class":54,"line":19719},[52,48096,37110],{"class":160},[52,48098,35816],{"class":622},[52,48100,48101],{"class":54,"line":19725},[52,48102,37478],{"class":332},[52,48104,48105,48107,48109,48111],{"class":54,"line":19739},[52,48106,6362],{"class":160},[52,48108,37485],{"class":622},[52,48110,28988],{"class":160},[52,48112,37129],{"class":622},[52,48114,48115,48117,48119],{"class":54,"line":19752},[52,48116,35542],{"class":622},[52,48118,2099],{"class":160},[52,48120,35547],{"class":622},[52,48122,48123,48125,48127],{"class":54,"line":19757},[52,48124,35557],{"class":622},[52,48126,2099],{"class":160},[52,48128,35562],{"class":622},[52,48130,48131],{"class":54,"line":19771},[52,48132,116],{"emptyLinePlaceholder":115},[52,48134,48135],{"class":54,"line":19776},[52,48136,37514],{"class":332},[52,48138,48139],{"class":54,"line":19782},[52,48140,35807],{"class":622},[52,48142,48143],{"class":54,"line":19787},[52,48144,37523],{"class":332},[52,48146,48147,48149,48151],{"class":54,"line":19801},[52,48148,35592],{"class":622},[52,48150,2099],{"class":160},[52,48152,35597],{"class":622},[52,48154,48155],{"class":54,"line":19806},[52,48156,37536],{"class":332},[52,48158,48159,48161,48163,48165,48167,48169,48171],{"class":54,"line":19811},[52,48160,35609],{"class":622},[52,48162,2099],{"class":160},[52,48164,35614],{"class":622},[52,48166,35617],{"class":8172},[52,48168,2099],{"class":160},[52,48170,3332],{"class":90},[52,48172,170],{"class":622},[52,48174,48175],{"class":54,"line":19825},[52,48176,37557],{"class":332},[52,48178,48179,48181,48183],{"class":54,"line":19837},[52,48180,37562],{"class":622},[52,48182,2099],{"class":160},[52,48184,37567],{"class":622},[52,48186,48187,48189,48191],{"class":54,"line":19842},[52,48188,37572],{"class":622},[52,48190,2099],{"class":160},[52,48192,37577],{"class":622},[52,48194,48195,48197,48199,48201,48203,48205,48207,48209],{"class":54,"line":19855},[52,48196,37582],{"class":90},[52,48198,3121],{"class":622},[52,48200,37587],{"class":62},[52,48202,37590],{"class":622},[52,48204,37593],{"class":62},[52,48206,3491],{"class":622},[52,48208,37598],{"class":62},[52,48210,37601],{"class":622},[30,48212,48214],{"id":48213},"_24训练自己的数据集","2.4.训练自己的数据集",[274,48216,48217],{},"猫狗分类任务",[274,48219,48220],{},"划分数据集和验证集",[19,48222,48224],{"className":33310,"code":48223,"language":33312,"meta":28,"style":28},"# 创建脚本，用于划分数据集和验证集\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",[26,48225,48226,48231,48238,48243,48254,48261,48265,48275,48289,48298,48302,48307,48317,48337,48341,48346,48356,48367,48380,48384,48389,48398,48408,48419,48423,48428,48438,48442,48447,48452,48457,48462,48467,48471,48481,48508,48521,48533,48560,48565,48570,48584,48589,48601,48616,48631,48639,48643,48648,48654,48666,48679,48684,48689,48694,48744,48750,48754],{"__ignoreMap":28},[52,48227,48228],{"class":54,"line":55},[52,48229,48230],{"class":332},"# 创建脚本，用于划分数据集和验证集\n",[52,48232,48233,48235],{"class":54,"line":69},[52,48234,33324],{"class":160},[52,48236,48237],{"class":622}," os\n",[52,48239,48240],{"class":54,"line":82},[52,48241,48242],{"class":332},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[52,48244,48245,48247,48250,48252],{"class":54,"line":97},[52,48246,33669],{"class":160},[52,48248,48249],{"class":622}," shutil ",[52,48251,33324],{"class":160},[52,48253,34754],{"class":622},[52,48255,48256,48258],{"class":54,"line":112},[52,48257,33324],{"class":160},[52,48259,48260],{"class":622}," random\n",[52,48262,48263],{"class":54,"line":119},[52,48264,116],{"emptyLinePlaceholder":115},[52,48266,48267,48269,48272],{"class":54,"line":130},[52,48268,34879],{"class":160},[52,48270,48271],{"class":58}," mkfile",[52,48273,48274],{"class":622},"(file):\n",[52,48276,48277,48279,48281,48284,48287],{"class":54,"line":136},[52,48278,6060],{"class":160},[52,48280,41862],{"class":160},[52,48282,48283],{"class":622}," os.path.exists(",[52,48285,48286],{"class":8172},"file",[52,48288,33718],{"class":622},[52,48290,48291,48294,48296],{"class":54,"line":141},[52,48292,48293],{"class":622},"        os.makedirs(",[52,48295,48286],{"class":8172},[52,48297,170],{"class":622},[52,48299,48300],{"class":54,"line":146},[52,48301,116],{"emptyLinePlaceholder":115},[52,48303,48304],{"class":54,"line":152},[52,48305,48306],{"class":332},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[52,48308,48309,48312,48314],{"class":54,"line":157},[52,48310,48311],{"class":622},"file_path",[52,48313,2099],{"class":160},[52,48315,48316],{"class":62},"'data_cat_dog'\n",[52,48318,48319,48322,48324,48327,48329,48332,48334],{"class":54,"line":173},[52,48320,48321],{"class":622},"flower_class",[52,48323,2099],{"class":160},[52,48325,48326],{"class":622},"[cla ",[52,48328,5985],{"class":160},[52,48330,48331],{"class":622}," cla ",[52,48333,28988],{"class":160},[52,48335,48336],{"class":622}," os.listdir(file_path)]\n",[52,48338,48339],{"class":54,"line":178},[52,48340,116],{"emptyLinePlaceholder":115},[52,48342,48343],{"class":54,"line":184},[52,48344,48345],{"class":332},"# 创建训练集train文件夹\n",[52,48347,48348,48351,48354],{"class":54,"line":189},[52,48349,48350],{"class":622},"mkfile(",[52,48352,48353],{"class":62},"'data\u002Ftrain'",[52,48355,170],{"class":622},[52,48357,48358,48360,48362,48364],{"class":54,"line":201},[52,48359,5985],{"class":160},[52,48361,48331],{"class":622},[52,48363,28988],{"class":160},[52,48365,48366],{"class":622}," flower_class:\n",[52,48368,48369,48372,48375,48377],{"class":54,"line":206},[52,48370,48371],{"class":622},"    mkfile(",[52,48373,48374],{"class":62},"'data\u002Ftrain\u002F'",[52,48376,3593],{"class":160},[52,48378,48379],{"class":622},"cla)\n",[52,48381,48382],{"class":54,"line":224},[52,48383,116],{"emptyLinePlaceholder":115},[52,48385,48386],{"class":54,"line":229},[52,48387,48388],{"class":332},"# 创建验证集val文件夹\n",[52,48390,48391,48393,48396],{"class":54,"line":241},[52,48392,48350],{"class":622},[52,48394,48395],{"class":62},"'data\u002Ftest'",[52,48397,170],{"class":622},[52,48399,48400,48402,48404,48406],{"class":54,"line":246},[52,48401,5985],{"class":160},[52,48403,48331],{"class":622},[52,48405,28988],{"class":160},[52,48407,48366],{"class":622},[52,48409,48410,48412,48415,48417],{"class":54,"line":252},[52,48411,48371],{"class":622},[52,48413,48414],{"class":62},"'data\u002Ftest\u002F'",[52,48416,3593],{"class":160},[52,48418,48379],{"class":622},[52,48420,48421],{"class":54,"line":257},[52,48422,116],{"emptyLinePlaceholder":115},[52,48424,48425],{"class":54,"line":266},[52,48426,48427],{"class":332},"# 划分比例，训练集：测试集=9：1\n",[52,48429,48430,48433,48435],{"class":54,"line":4722},[52,48431,48432],{"class":622},"split_rate",[52,48434,2099],{"class":160},[52,48436,48437],{"class":90},"0.1\n",[52,48439,48440],{"class":54,"line":4727},[52,48441,116],{"emptyLinePlaceholder":115},[52,48443,48444],{"class":54,"line":4741},[52,48445,48446],{"class":332},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[52,48448,48449],{"class":54,"line":4746},[52,48450,48451],{"class":332},"# cla_path：当前类别的原始图片路径\n",[52,48453,48454],{"class":54,"line":5538},[52,48455,48456],{"class":332},"# images：当前类别下所有图片的文件名列表\n",[52,48458,48459],{"class":54,"line":5552},[52,48460,48461],{"class":332},"# num：该类别图片总数\n",[52,48463,48464],{"class":54,"line":5560},[52,48465,48466],{"class":332},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[52,48468,48469],{"class":54,"line":5565},[52,48470,116],{"emptyLinePlaceholder":115},[52,48472,48473,48475,48477,48479],{"class":54,"line":5571},[52,48474,5985],{"class":160},[52,48476,48331],{"class":622},[52,48478,28988],{"class":160},[52,48480,48366],{"class":622},[52,48482,48483,48486,48488,48491,48493,48496,48499,48501,48503,48505],{"class":54,"line":5577},[52,48484,48485],{"class":622},"    cla_path ",[52,48487,2099],{"class":160},[52,48489,48490],{"class":622}," file_path ",[52,48492,3593],{"class":160},[52,48494,48495],{"class":62}," '\u002F'",[52,48497,48498],{"class":160}," +",[52,48500,48331],{"class":622},[52,48502,3593],{"class":160},[52,48504,48495],{"class":62},[52,48506,48507],{"class":332},"  # 某一类别的子目录\n",[52,48509,48510,48513,48515,48518],{"class":54,"line":5582},[52,48511,48512],{"class":622},"    images ",[52,48514,2099],{"class":160},[52,48516,48517],{"class":622}," os.listdir(cla_path)  ",[52,48519,48520],{"class":332},"# iamges 列表存储了该目录下所有图像的名称\n",[52,48522,48523,48526,48528,48530],{"class":54,"line":10904},[52,48524,48525],{"class":622},"    num ",[52,48527,2099],{"class":160},[52,48529,10287],{"class":90},[52,48531,48532],{"class":622},"(images)\n",[52,48534,48535,48538,48540,48543,48545,48547,48549,48552,48554,48557],{"class":54,"line":10928},[52,48536,48537],{"class":622},"    eval_index ",[52,48539,2099],{"class":160},[52,48541,48542],{"class":622}," random.sample(images, ",[52,48544,3605],{"class":8172},[52,48546,2099],{"class":160},[52,48548,3124],{"class":90},[52,48550,48551],{"class":622},"(num ",[52,48553,1095],{"class":160},[52,48555,48556],{"class":622}," split_rate))  ",[52,48558,48559],{"class":332},"# 从images列表中随机抽取 k 个图像名称\n",[52,48561,48562],{"class":54,"line":10933},[52,48563,48564],{"class":332},"    # 遍历该类别下的所有图片\n",[52,48566,48567],{"class":54,"line":10939},[52,48568,48569],{"class":332},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[52,48571,48572,48574,48577,48579,48581],{"class":54,"line":10966},[52,48573,6160],{"class":160},[52,48575,48576],{"class":622}," index, image ",[52,48578,28988],{"class":160},[52,48580,34538],{"class":90},[52,48582,48583],{"class":622},"(images):\n",[52,48585,48586],{"class":54,"line":10971},[52,48587,48588],{"class":332},"        # eval_index 中保存验证集val的图像名称\n",[52,48590,48591,48593,48596,48598],{"class":54,"line":10977},[52,48592,5458],{"class":160},[52,48594,48595],{"class":622}," image ",[52,48597,28988],{"class":160},[52,48599,48600],{"class":622}," eval_index:\n",[52,48602,48603,48606,48608,48611,48613],{"class":54,"line":10989},[52,48604,48605],{"class":622},"            image_path ",[52,48607,2099],{"class":160},[52,48609,48610],{"class":622}," cla_path ",[52,48612,3593],{"class":160},[52,48614,48615],{"class":622}," image\n",[52,48617,48618,48621,48623,48626,48628],{"class":54,"line":11001},[52,48619,48620],{"class":622},"            new_path ",[52,48622,2099],{"class":160},[52,48624,48625],{"class":62}," 'data\u002Ftest\u002F'",[52,48627,48498],{"class":160},[52,48629,48630],{"class":622}," cla\n",[52,48632,48633,48636],{"class":54,"line":11013},[52,48634,48635],{"class":622},"            copy(image_path, new_path)  ",[52,48637,48638],{"class":332},"# 将选中的图像复制到新路径\n",[52,48640,48641],{"class":54,"line":12672},[52,48642,116],{"emptyLinePlaceholder":115},[52,48644,48645],{"class":54,"line":12697},[52,48646,48647],{"class":332},"        # 其余的图像保存在训练集train中\n",[52,48649,48650,48652],{"class":54,"line":12720},[52,48651,5495],{"class":160},[52,48653,6698],{"class":622},[52,48655,48656,48658,48660,48662,48664],{"class":54,"line":12744},[52,48657,48605],{"class":622},[52,48659,2099],{"class":160},[52,48661,48610],{"class":622},[52,48663,3593],{"class":160},[52,48665,48615],{"class":622},[52,48667,48668,48670,48672,48675,48677],{"class":54,"line":12749},[52,48669,48620],{"class":622},[52,48671,2099],{"class":160},[52,48673,48674],{"class":62}," 'data\u002Ftrain\u002F'",[52,48676,48498],{"class":160},[52,48678,48630],{"class":622},[52,48680,48681],{"class":54,"line":12754},[52,48682,48683],{"class":622},"            copy(image_path, new_path)\n",[52,48685,48686],{"class":54,"line":12759},[52,48687,48688],{"class":332},"            # 打印进度条信息\n",[52,48690,48691],{"class":54,"line":12768},[52,48692,48693],{"class":332},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[52,48695,48696,48698,48700,48702,48705,48707,48709,48712,48714,48716,48718,48721,48724,48726,48728,48731,48734,48736,48738,48741],{"class":54,"line":12773},[52,48697,35383],{"class":90},[52,48699,3121],{"class":622},[52,48701,3364],{"class":62},[52,48703,48704],{"class":90},"\\r",[52,48706,4002],{"class":62},[52,48708,35391],{"class":90},[52,48710,48711],{"class":62},"] processing [",[52,48713,35391],{"class":90},[52,48715,3696],{"class":62},[52,48717,35391],{"class":90},[52,48719,48720],{"class":62},"]\"",[52,48722,48723],{"class":622},".format(cla, index ",[52,48725,3593],{"class":160},[52,48727,28064],{"class":90},[52,48729,48730],{"class":622},", num), ",[52,48732,48733],{"class":8172},"end",[52,48735,2099],{"class":160},[52,48737,10608],{"class":62},[52,48739,48740],{"class":622},")  ",[52,48742,48743],{"class":332},"# processing bar\n",[52,48745,48746,48748],{"class":54,"line":12779},[52,48747,34231],{"class":90},[52,48749,4938],{"class":622},[52,48751,48752],{"class":54,"line":12800},[52,48753,116],{"emptyLinePlaceholder":115},[52,48755,48756,48758,48760,48763],{"class":54,"line":12806},[52,48757,33347],{"class":90},[52,48759,3121],{"class":622},[52,48761,48762],{"class":62},"\"processing done!\"",[52,48764,170],{"class":622},[274,48766,48767],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[1486,48769,48771],{"id":48770},"_242模型代码","2.4.2.模型代码",[274,48773,48774],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[19,48776,48778],{"className":33310,"code":48777,"language":33312,"meta":28,"style":28},"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",[26,48779,48780,48786,48796,48806,48810,48826,48834,48848,48858,48862,48892,48896,48930,48976,48980,49014,49060,49064,49068,49102,49132,49136,49144,49158,49180,49202,49220,49224,49238,49242,49246,49262,49266,49274,49288,49298,49342,49346,49374,49378,49388,49416,49420,49456,49460,49488,49492,49502,49534,49566,49594,49598,49608,49640,49672,49704,49736,49768,49796,49800,49810,49842,49874,49886,49890,49902,49906,49910,49922,49930,49950,49954,49958,49962,49966,49970,49974,49988,49996,50004,50016,50030,50038,50042,50050,50060,50070,50080,50090,50100,50106,50110,50114,50126,50146,50154],{"__ignoreMap":28},[52,48781,48782,48784],{"class":54,"line":55},[52,48783,33324],{"class":160},[52,48785,33327],{"class":622},[52,48787,48788,48790,48792,48794],{"class":54,"line":69},[52,48789,33669],{"class":160},[52,48791,33672],{"class":622},[52,48793,33324],{"class":160},[52,48795,33677],{"class":622},[52,48797,48798,48800,48802,48804],{"class":54,"line":82},[52,48799,33669],{"class":160},[52,48801,33689],{"class":622},[52,48803,33324],{"class":160},[52,48805,33694],{"class":622},[52,48807,48808],{"class":54,"line":97},[52,48809,116],{"emptyLinePlaceholder":115},[52,48811,48812,48814,48816,48818,48820,48822,48824],{"class":54,"line":112},[52,48813,17650],{"class":160},[52,48815,44425],{"class":58},[52,48817,3121],{"class":622},[52,48819,33710],{"class":58},[52,48821,3670],{"class":622},[52,48823,33715],{"class":58},[52,48825,33718],{"class":622},[52,48827,48828,48830,48832],{"class":54,"line":119},[52,48829,33733],{"class":160},[52,48831,33736],{"class":90},[52,48833,44444],{"class":622},[52,48835,48836,48838,48840,48842,48844,48846],{"class":54,"line":130},[52,48837,33749],{"class":90},[52,48839,44451],{"class":622},[52,48841,33755],{"class":90},[52,48843,33758],{"class":622},[52,48845,33761],{"class":90},[52,48847,4938],{"class":622},[52,48849,48850,48852,48854,48856],{"class":54,"line":136},[52,48851,33777],{"class":90},[52,48853,37703],{"class":622},[52,48855,2099],{"class":160},[52,48857,37708],{"class":622},[52,48859,48860],{"class":54,"line":141},[52,48861,44474],{"class":332},[52,48863,48864,48866,48868,48870,48872,48874,48876,48878,48880,48882,48884,48886,48888,48890],{"class":54,"line":146},[52,48865,33777],{"class":90},[52,48867,44481],{"class":622},[52,48869,2099],{"class":160},[52,48871,33785],{"class":622},[52,48873,33788],{"class":8172},[52,48875,2099],{"class":160},[52,48877,44492],{"class":622},[52,48879,33797],{"class":8172},[52,48881,2099],{"class":160},[52,48883,44499],{"class":622},[52,48885,33806],{"class":8172},[52,48887,2099],{"class":160},[52,48889,3332],{"class":90},[52,48891,170],{"class":622},[52,48893,48894],{"class":54,"line":152},[52,48895,44512],{"class":332},[52,48897,48898,48900,48902,48904,48906,48908,48910,48912,48914,48916,48918,48920,48922,48924,48926,48928],{"class":54,"line":157},[52,48899,33777],{"class":90},[52,48901,44519],{"class":622},[52,48903,2099],{"class":160},[52,48905,33785],{"class":622},[52,48907,33788],{"class":8172},[52,48909,2099],{"class":160},[52,48911,44492],{"class":622},[52,48913,33797],{"class":8172},[52,48915,2099],{"class":160},[52,48917,44536],{"class":622},[52,48919,3306],{"class":90},[52,48921,44541],{"class":622},[52,48923,33806],{"class":8172},[52,48925,2099],{"class":160},[52,48927,3332],{"class":90},[52,48929,170],{"class":622},[52,48931,48932,48934,48936,48938,48940,48942,48944,48946,48948,48950,48952,48954,48956,48958,48960,48962,48964,48966,48968,48970,48972,48974],{"class":54,"line":173},[52,48933,33777],{"class":90},[52,48935,44556],{"class":622},[52,48937,2099],{"class":160},[52,48939,33785],{"class":622},[52,48941,33788],{"class":8172},[52,48943,2099],{"class":160},[52,48945,44536],{"class":622},[52,48947,3306],{"class":90},[52,48949,44541],{"class":622},[52,48951,33797],{"class":8172},[52,48953,2099],{"class":160},[52,48955,44536],{"class":622},[52,48957,3332],{"class":90},[52,48959,44541],{"class":622},[52,48961,33806],{"class":8172},[52,48963,2099],{"class":160},[52,48965,3188],{"class":90},[52,48967,3491],{"class":622},[52,48969,33815],{"class":8172},[52,48971,2099],{"class":160},[52,48973,3332],{"class":90},[52,48975,170],{"class":622},[52,48977,48978],{"class":54,"line":178},[52,48979,44601],{"class":332},[52,48981,48982,48984,48986,48988,48990,48992,48994,48996,48998,49000,49002,49004,49006,49008,49010,49012],{"class":54,"line":184},[52,48983,33777],{"class":90},[52,48985,44608],{"class":622},[52,48987,2099],{"class":160},[52,48989,33785],{"class":622},[52,48991,33788],{"class":8172},[52,48993,2099],{"class":160},[52,48995,44492],{"class":622},[52,48997,33797],{"class":8172},[52,48999,2099],{"class":160},[52,49001,44625],{"class":622},[52,49003,3306],{"class":90},[52,49005,44541],{"class":622},[52,49007,33806],{"class":8172},[52,49009,2099],{"class":160},[52,49011,3332],{"class":90},[52,49013,170],{"class":622},[52,49015,49016,49018,49020,49022,49024,49026,49028,49030,49032,49034,49036,49038,49040,49042,49044,49046,49048,49050,49052,49054,49056,49058],{"class":54,"line":189},[52,49017,33777],{"class":90},[52,49019,44644],{"class":622},[52,49021,2099],{"class":160},[52,49023,33785],{"class":622},[52,49025,33788],{"class":8172},[52,49027,2099],{"class":160},[52,49029,44625],{"class":622},[52,49031,3306],{"class":90},[52,49033,44541],{"class":622},[52,49035,33797],{"class":8172},[52,49037,2099],{"class":160},[52,49039,44625],{"class":622},[52,49041,3332],{"class":90},[52,49043,44541],{"class":622},[52,49045,33806],{"class":8172},[52,49047,2099],{"class":160},[52,49049,3432],{"class":90},[52,49051,3491],{"class":622},[52,49053,33815],{"class":8172},[52,49055,2099],{"class":160},[52,49057,3194],{"class":90},[52,49059,170],{"class":622},[52,49061,49062],{"class":54,"line":201},[52,49063,44689],{"class":332},[52,49065,49066],{"class":54,"line":206},[52,49067,44694],{"class":332},[52,49069,49070,49072,49074,49076,49078,49080,49082,49084,49086,49088,49090,49092,49094,49096,49098,49100],{"class":54,"line":224},[52,49071,33777],{"class":90},[52,49073,44701],{"class":622},[52,49075,2099],{"class":160},[52,49077,37761],{"class":622},[52,49079,33806],{"class":8172},[52,49081,2099],{"class":160},[52,49083,3188],{"class":90},[52,49085,3491],{"class":622},[52,49087,33861],{"class":8172},[52,49089,2099],{"class":160},[52,49091,3332],{"class":90},[52,49093,3491],{"class":622},[52,49095,33815],{"class":8172},[52,49097,2099],{"class":160},[52,49099,3332],{"class":90},[52,49101,170],{"class":622},[52,49103,49104,49106,49108,49110,49112,49114,49116,49118,49120,49122,49124,49126,49128,49130],{"class":54,"line":229},[52,49105,33777],{"class":90},[52,49107,44736],{"class":622},[52,49109,2099],{"class":160},[52,49111,33785],{"class":622},[52,49113,33788],{"class":8172},[52,49115,2099],{"class":160},[52,49117,44492],{"class":622},[52,49119,33797],{"class":8172},[52,49121,2099],{"class":160},[52,49123,44753],{"class":622},[52,49125,33806],{"class":8172},[52,49127,2099],{"class":160},[52,49129,3332],{"class":90},[52,49131,170],{"class":622},[52,49133,49134],{"class":54,"line":241},[52,49135,116],{"emptyLinePlaceholder":115},[52,49137,49138,49140,49142],{"class":54,"line":246},[52,49139,33733],{"class":160},[52,49141,34025],{"class":58},[52,49143,34028],{"class":622},[52,49145,49146,49148,49150,49152,49154,49156],{"class":54,"line":252},[52,49147,44778],{"class":622},[52,49149,2099],{"class":160},[52,49151,33755],{"class":90},[52,49153,38116],{"class":622},[52,49155,33755],{"class":90},[52,49157,44789],{"class":622},[52,49159,49160,49162,49164,49166,49168,49170,49172,49174,49176,49178],{"class":54,"line":257},[52,49161,10041],{"class":622},[52,49163,2099],{"class":160},[52,49165,33755],{"class":90},[52,49167,38116],{"class":622},[52,49169,33755],{"class":90},[52,49171,44804],{"class":622},[52,49173,33755],{"class":90},[52,49175,38116],{"class":622},[52,49177,33755],{"class":90},[52,49179,44813],{"class":622},[52,49181,49182,49184,49186,49188,49190,49192,49194,49196,49198,49200],{"class":54,"line":266},[52,49183,44818],{"class":622},[52,49185,2099],{"class":160},[52,49187,33755],{"class":90},[52,49189,38116],{"class":622},[52,49191,33755],{"class":90},[52,49193,44829],{"class":622},[52,49195,33755],{"class":90},[52,49197,38116],{"class":622},[52,49199,33755],{"class":90},[52,49201,44838],{"class":622},[52,49203,49204,49206,49208,49210,49212,49214,49216,49218],{"class":54,"line":4722},[52,49205,44843],{"class":622},[52,49207,2099],{"class":160},[52,49209,33755],{"class":90},[52,49211,38116],{"class":622},[52,49213,33755],{"class":90},[52,49215,44854],{"class":622},[52,49217,33755],{"class":90},[52,49219,44859],{"class":622},[52,49221,49222],{"class":54,"line":4727},[52,49223,44864],{"class":332},[52,49225,49226,49228,49230,49232,49234,49236],{"class":54,"line":4741},[52,49227,17708],{"class":160},[52,49229,44871],{"class":622},[52,49231,35617],{"class":8172},[52,49233,2099],{"class":160},[52,49235,3332],{"class":90},[52,49237,170],{"class":622},[52,49239,49240],{"class":54,"line":4746},[52,49241,116],{"emptyLinePlaceholder":115},[52,49243,49244],{"class":54,"line":5538},[52,49245,44892],{"class":332},[52,49247,49248,49250,49252,49254,49256,49258,49260],{"class":54,"line":5552},[52,49249,17650],{"class":160},[52,49251,44899],{"class":58},[52,49253,3121],{"class":622},[52,49255,33710],{"class":58},[52,49257,3670],{"class":622},[52,49259,33715],{"class":58},[52,49261,33718],{"class":622},[52,49263,49264],{"class":54,"line":5560},[52,49265,44914],{"class":332},[52,49267,49268,49270,49272],{"class":54,"line":5565},[52,49269,33733],{"class":160},[52,49271,33736],{"class":90},[52,49273,44923],{"class":622},[52,49275,49276,49278,49280,49282,49284,49286],{"class":54,"line":5571},[52,49277,33749],{"class":90},[52,49279,44930],{"class":622},[52,49281,33755],{"class":90},[52,49283,33758],{"class":622},[52,49285,33761],{"class":90},[52,49287,4938],{"class":622},[52,49289,49290,49292,49294,49296],{"class":54,"line":5577},[52,49291,33777],{"class":90},[52,49293,44945],{"class":622},[52,49295,2099],{"class":160},[52,49297,40941],{"class":622},[52,49299,49300,49302,49304,49306,49308,49310,49312,49314,49316,49318,49320,49322,49324,49326,49328,49330,49332,49334,49336,49338,49340],{"class":54,"line":5582},[52,49301,40946],{"class":622},[52,49303,33788],{"class":8172},[52,49305,2099],{"class":160},[52,49307,3188],{"class":90},[52,49309,3491],{"class":622},[52,49311,33797],{"class":8172},[52,49313,2099],{"class":160},[52,49315,3318],{"class":90},[52,49317,3491],{"class":622},[52,49319,33806],{"class":8172},[52,49321,2099],{"class":160},[52,49323,3482],{"class":90},[52,49325,3491],{"class":622},[52,49327,33861],{"class":8172},[52,49329,2099],{"class":160},[52,49331,3194],{"class":90},[52,49333,3491],{"class":622},[52,49335,33815],{"class":8172},[52,49337,2099],{"class":160},[52,49339,3188],{"class":90},[52,49341,40979],{"class":622},[52,49343,49344],{"class":54,"line":10904},[52,49345,40984],{"class":622},[52,49347,49348,49350,49352,49354,49356,49358,49360,49362,49364,49366,49368,49370,49372],{"class":54,"line":10928},[52,49349,41029],{"class":622},[52,49351,33806],{"class":8172},[52,49353,2099],{"class":160},[52,49355,3188],{"class":90},[52,49357,3491],{"class":622},[52,49359,33861],{"class":8172},[52,49361,2099],{"class":160},[52,49363,3194],{"class":90},[52,49365,3491],{"class":622},[52,49367,33815],{"class":8172},[52,49369,2099],{"class":160},[52,49371,3332],{"class":90},[52,49373,170],{"class":622},[52,49375,49376],{"class":54,"line":10933},[52,49377,41058],{"class":622},[52,49379,49380,49382,49384,49386],{"class":54,"line":10939},[52,49381,33777],{"class":90},[52,49383,45036],{"class":622},[52,49385,2099],{"class":160},[52,49387,40941],{"class":622},[52,49389,49390,49392,49394,49396,49398,49400,49402,49404,49406,49408,49410,49412,49414],{"class":54,"line":10966},[52,49391,40946],{"class":622},[52,49393,33788],{"class":8172},[52,49395,2099],{"class":160},[52,49397,3318],{"class":90},[52,49399,3491],{"class":622},[52,49401,33797],{"class":8172},[52,49403,2099],{"class":160},[52,49405,3318],{"class":90},[52,49407,3491],{"class":622},[52,49409,33806],{"class":8172},[52,49411,2099],{"class":160},[52,49413,3332],{"class":90},[52,49415,40979],{"class":622},[52,49417,49418],{"class":54,"line":10971},[52,49419,40984],{"class":622},[52,49421,49422,49424,49426,49428,49430,49432,49434,49436,49438,49440,49442,49444,49446,49448,49450,49452,49454],{"class":54,"line":10977},[52,49423,40946],{"class":622},[52,49425,33788],{"class":8172},[52,49427,2099],{"class":160},[52,49429,3318],{"class":90},[52,49431,3491],{"class":622},[52,49433,33797],{"class":8172},[52,49435,2099],{"class":160},[52,49437,45091],{"class":90},[52,49439,3491],{"class":622},[52,49441,33806],{"class":8172},[52,49443,2099],{"class":160},[52,49445,3188],{"class":90},[52,49447,3491],{"class":622},[52,49449,33815],{"class":8172},[52,49451,2099],{"class":160},[52,49453,3332],{"class":90},[52,49455,40979],{"class":622},[52,49457,49458],{"class":54,"line":10989},[52,49459,40984],{"class":622},[52,49461,49462,49464,49466,49468,49470,49472,49474,49476,49478,49480,49482,49484,49486],{"class":54,"line":11001},[52,49463,41029],{"class":622},[52,49465,33806],{"class":8172},[52,49467,2099],{"class":160},[52,49469,3188],{"class":90},[52,49471,3491],{"class":622},[52,49473,33861],{"class":8172},[52,49475,2099],{"class":160},[52,49477,3194],{"class":90},[52,49479,3491],{"class":622},[52,49481,33815],{"class":8172},[52,49483,2099],{"class":160},[52,49485,3332],{"class":90},[52,49487,170],{"class":622},[52,49489,49490],{"class":54,"line":11013},[52,49491,41058],{"class":622},[52,49493,49494,49496,49498,49500],{"class":54,"line":12672},[52,49495,33777],{"class":90},[52,49497,45152],{"class":622},[52,49499,2099],{"class":160},[52,49501,40941],{"class":622},[52,49503,49504,49506,49508,49510,49512,49514,49516,49518,49520,49522,49524,49526,49528,49530,49532],{"class":54,"line":12697},[52,49505,45161],{"class":622},[52,49507,45091],{"class":90},[52,49509,3491],{"class":622},[52,49511,3318],{"class":90},[52,49513,45170],{"class":622},[52,49515,3324],{"class":90},[52,49517,3491],{"class":622},[52,49519,35002],{"class":90},[52,49521,45179],{"class":622},[52,49523,3713],{"class":90},[52,49525,3491],{"class":622},[52,49527,3312],{"class":90},[52,49529,45188],{"class":622},[52,49531,3312],{"class":90},[52,49533,40979],{"class":622},[52,49535,49536,49538,49540,49542,49544,49546,49548,49550,49552,49554,49556,49558,49560,49562,49564],{"class":54,"line":12720},[52,49537,45161],{"class":622},[52,49539,37802],{"class":90},[52,49541,3491],{"class":622},[52,49543,35002],{"class":90},[52,49545,45170],{"class":622},[52,49547,35002],{"class":90},[52,49549,3491],{"class":622},[52,49551,45091],{"class":90},[52,49553,45179],{"class":622},[52,49555,3312],{"class":90},[52,49557,3491],{"class":622},[52,49559,3324],{"class":90},[52,49561,45188],{"class":622},[52,49563,3318],{"class":90},[52,49565,40979],{"class":622},[52,49567,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586,49588,49590,49592],{"class":54,"line":12744},[52,49569,41029],{"class":622},[52,49571,33806],{"class":8172},[52,49573,2099],{"class":160},[52,49575,3188],{"class":90},[52,49577,3491],{"class":622},[52,49579,33861],{"class":8172},[52,49581,2099],{"class":160},[52,49583,3194],{"class":90},[52,49585,3491],{"class":622},[52,49587,33815],{"class":8172},[52,49589,2099],{"class":160},[52,49591,3332],{"class":90},[52,49593,170],{"class":622},[52,49595,49596],{"class":54,"line":12749},[52,49597,41058],{"class":622},[52,49599,49600,49602,49604,49606],{"class":54,"line":12754},[52,49601,33777],{"class":90},[52,49603,45263],{"class":622},[52,49605,2099],{"class":160},[52,49607,40941],{"class":622},[52,49609,49610,49612,49614,49616,49618,49620,49622,49624,49626,49628,49630,49632,49634,49636,49638],{"class":54,"line":12759},[52,49611,45161],{"class":622},[52,49613,45274],{"class":90},[52,49615,3491],{"class":622},[52,49617,45091],{"class":90},[52,49619,45170],{"class":622},[52,49621,3324],{"class":90},[52,49623,3491],{"class":622},[52,49625,45287],{"class":90},[52,49627,45179],{"class":622},[52,49629,3713],{"class":90},[52,49631,3491],{"class":622},[52,49633,3719],{"class":90},[52,49635,45188],{"class":622},[52,49637,3318],{"class":90},[52,49639,40979],{"class":622},[52,49641,49642,49644,49646,49648,49650,49652,49654,49656,49658,49660,49662,49664,49666,49668,49670],{"class":54,"line":12768},[52,49643,45161],{"class":622},[52,49645,41389],{"class":90},[52,49647,3491],{"class":622},[52,49649,24003],{"class":90},[52,49651,45170],{"class":622},[52,49653,3730],{"class":90},[52,49655,3491],{"class":622},[52,49657,34433],{"class":90},[52,49659,45179],{"class":622},[52,49661,3912],{"class":90},[52,49663,3491],{"class":622},[52,49665,3318],{"class":90},[52,49667,45188],{"class":622},[52,49669,3318],{"class":90},[52,49671,40979],{"class":622},[52,49673,49674,49676,49678,49680,49682,49684,49686,49688,49690,49692,49694,49696,49698,49700,49702],{"class":54,"line":12773},[52,49675,45161],{"class":622},[52,49677,41389],{"class":90},[52,49679,3491],{"class":622},[52,49681,35002],{"class":90},[52,49683,45170],{"class":622},[52,49685,35002],{"class":90},[52,49687,3491],{"class":622},[52,49689,37802],{"class":90},[52,49691,45179],{"class":622},[52,49693,3912],{"class":90},[52,49695,3491],{"class":622},[52,49697,3318],{"class":90},[52,49699,45188],{"class":622},[52,49701,3318],{"class":90},[52,49703,40979],{"class":622},[52,49705,49706,49708,49710,49712,49714,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734],{"class":54,"line":12779},[52,49707,45161],{"class":622},[52,49709,41389],{"class":90},[52,49711,3491],{"class":622},[52,49713,3730],{"class":90},[52,49715,45170],{"class":622},[52,49717,35002],{"class":90},[52,49719,3491],{"class":622},[52,49721,45384],{"class":90},[52,49723,45179],{"class":622},[52,49725,3312],{"class":90},[52,49727,3491],{"class":622},[52,49729,3318],{"class":90},[52,49731,45188],{"class":622},[52,49733,3318],{"class":90},[52,49735,40979],{"class":622},[52,49737,49738,49740,49742,49744,49746,49748,49750,49752,49754,49756,49758,49760,49762,49764,49766],{"class":54,"line":12800},[52,49739,45161],{"class":622},[52,49741,45405],{"class":90},[52,49743,3491],{"class":622},[52,49745,37802],{"class":90},[52,49747,45170],{"class":622},[52,49749,24003],{"class":90},[52,49751,3491],{"class":622},[52,49753,45418],{"class":90},[52,49755,45179],{"class":622},[52,49757,3312],{"class":90},[52,49759,3491],{"class":622},[52,49761,35002],{"class":90},[52,49763,45188],{"class":622},[52,49765,35002],{"class":90},[52,49767,40979],{"class":622},[52,49769,49770,49772,49774,49776,49778,49780,49782,49784,49786,49788,49790,49792,49794],{"class":54,"line":12806},[52,49771,41029],{"class":622},[52,49773,33806],{"class":8172},[52,49775,2099],{"class":160},[52,49777,3188],{"class":90},[52,49779,3491],{"class":622},[52,49781,33861],{"class":8172},[52,49783,2099],{"class":160},[52,49785,3194],{"class":90},[52,49787,3491],{"class":622},[52,49789,33815],{"class":8172},[52,49791,2099],{"class":160},[52,49793,3332],{"class":90},[52,49795,170],{"class":622},[52,49797,49798],{"class":54,"line":12820},[52,49799,41058],{"class":622},[52,49801,49802,49804,49806,49808],{"class":54,"line":12826},[52,49803,33777],{"class":90},[52,49805,45471],{"class":622},[52,49807,2099],{"class":160},[52,49809,40941],{"class":622},[52,49811,49812,49814,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834,49836,49838,49840],{"class":54,"line":12853},[52,49813,45161],{"class":622},[52,49815,45482],{"class":90},[52,49817,3491],{"class":622},[52,49819,37802],{"class":90},[52,49821,45170],{"class":622},[52,49823,24003],{"class":90},[52,49825,3491],{"class":622},[52,49827,45418],{"class":90},[52,49829,45179],{"class":622},[52,49831,3312],{"class":90},[52,49833,3491],{"class":622},[52,49835,35002],{"class":90},[52,49837,45188],{"class":622},[52,49839,35002],{"class":90},[52,49841,40979],{"class":622},[52,49843,49844,49846,49848,49850,49852,49854,49856,49858,49860,49862,49864,49866,49868,49870,49872],{"class":54,"line":12862},[52,49845,45161],{"class":622},[52,49847,45482],{"class":90},[52,49849,3491],{"class":622},[52,49851,37872],{"class":90},[52,49853,45170],{"class":622},[52,49855,45091],{"class":90},[52,49857,3491],{"class":622},[52,49859,37872],{"class":90},[52,49861,45179],{"class":622},[52,49863,3719],{"class":90},[52,49865,3491],{"class":622},[52,49867,35002],{"class":90},[52,49869,45188],{"class":622},[52,49871,35002],{"class":90},[52,49873,40979],{"class":622},[52,49875,49876,49878,49880,49882,49884],{"class":54,"line":12868},[52,49877,45545],{"class":622},[52,49879,3332],{"class":90},[52,49881,3491],{"class":622},[52,49883,3332],{"class":90},[52,49885,45554],{"class":622},[52,49887,49888],{"class":54,"line":12876},[52,49889,41722],{"class":622},[52,49891,49892,49894,49896,49898,49900],{"class":54,"line":12881},[52,49893,41727],{"class":622},[52,49895,45565],{"class":90},[52,49897,3491],{"class":622},[52,49899,3194],{"class":90},[52,49901,170],{"class":622},[52,49903,49904],{"class":54,"line":19560},[52,49905,41058],{"class":622},[52,49907,49908],{"class":54,"line":19566},[52,49909,45580],{"class":332},[52,49911,49912,49914,49916,49918,49920],{"class":54,"line":19589},[52,49913,6362],{"class":160},[52,49915,41800],{"class":622},[52,49917,28988],{"class":160},[52,49919,41805],{"class":90},[52,49921,41808],{"class":622},[52,49923,49924,49926,49928],{"class":54,"line":19595},[52,49925,7601],{"class":160},[52,49927,41820],{"class":90},[52,49929,41823],{"class":622},[52,49931,49932,49934,49936,49938,49940,49942,49944,49946,49948],{"class":54,"line":19618},[52,49933,41833],{"class":622},[52,49935,45607],{"class":8172},[52,49937,2099],{"class":160},[52,49939,45612],{"class":62},[52,49941,3491],{"class":622},[52,49943,41836],{"class":8172},[52,49945,2099],{"class":160},[52,49947,41841],{"class":62},[52,49949,170],{"class":622},[52,49951,49952],{"class":54,"line":19632},[52,49953,45627],{"class":332},[52,49955,49956],{"class":54,"line":19652},[52,49957,45632],{"class":332},[52,49959,49960],{"class":54,"line":19658},[52,49961,45637],{"class":332},[52,49963,49964],{"class":54,"line":19669},[52,49965,45642],{"class":332},[52,49967,49968],{"class":54,"line":19692},[52,49969,45647],{"class":332},[52,49971,49972],{"class":54,"line":19714},[52,49973,45652],{"class":332},[52,49975,49976,49978,49980,49982,49984,49986],{"class":54,"line":19719},[52,49977,41853],{"class":160},[52,49979,41856],{"class":622},[52,49981,41859],{"class":160},[52,49983,41862],{"class":160},[52,49985,41865],{"class":90},[52,49987,6698],{"class":622},[52,49989,49990,49992,49994],{"class":54,"line":19725},[52,49991,41877],{"class":622},[52,49993,3306],{"class":90},[52,49995,170],{"class":622},[52,49997,49998,50000,50002],{"class":54,"line":19739},[52,49999,45679],{"class":160},[52,50001,41820],{"class":90},[52,50003,41896],{"class":622},[52,50005,50006,50008,50010,50012,50014],{"class":54,"line":19752},[52,50007,45688],{"class":622},[52,50009,3306],{"class":90},[52,50011,3491],{"class":622},[52,50013,41918],{"class":90},[52,50015,170],{"class":622},[52,50017,50018,50020,50022,50024,50026,50028],{"class":54,"line":19757},[52,50019,45701],{"class":160},[52,50021,41856],{"class":622},[52,50023,41859],{"class":160},[52,50025,41862],{"class":160},[52,50027,41865],{"class":90},[52,50029,6698],{"class":622},[52,50031,50032,50034,50036],{"class":54,"line":19771},[52,50033,45716],{"class":622},[52,50035,3306],{"class":90},[52,50037,170],{"class":622},[52,50039,50040],{"class":54,"line":19776},[52,50041,38097],{"class":332},[52,50043,50044,50046,50048],{"class":54,"line":19782},[52,50045,33733],{"class":160},[52,50047,34025],{"class":58},[52,50049,34028],{"class":622},[52,50051,50052,50054,50056,50058],{"class":54,"line":19787},[52,50053,34033],{"class":622},[52,50055,2099],{"class":160},[52,50057,33755],{"class":90},[52,50059,45743],{"class":622},[52,50061,50062,50064,50066,50068],{"class":54,"line":19801},[52,50063,34033],{"class":622},[52,50065,2099],{"class":160},[52,50067,33755],{"class":90},[52,50069,45754],{"class":622},[52,50071,50072,50074,50076,50078],{"class":54,"line":19806},[52,50073,34033],{"class":622},[52,50075,2099],{"class":160},[52,50077,33755],{"class":90},[52,50079,45765],{"class":622},[52,50081,50082,50084,50086,50088],{"class":54,"line":19811},[52,50083,34033],{"class":622},[52,50085,2099],{"class":160},[52,50087,33755],{"class":90},[52,50089,45776],{"class":622},[52,50091,50092,50094,50096,50098],{"class":54,"line":19825},[52,50093,34033],{"class":622},[52,50095,2099],{"class":160},[52,50097,33755],{"class":90},[52,50099,45787],{"class":622},[52,50101,50102,50104],{"class":54,"line":19837},[52,50103,17708],{"class":160},[52,50105,34141],{"class":622},[52,50107,50108],{"class":54,"line":19842},[52,50109,116],{"emptyLinePlaceholder":115},[52,50111,50112],{"class":54,"line":19855},[52,50113,45802],{"class":332},[52,50115,50116,50118,50120,50122,50124],{"class":54,"line":19860},[52,50117,4509],{"class":160},[52,50119,34152],{"class":90},[52,50121,5909],{"class":160},[52,50123,34157],{"class":62},[52,50125,6698],{"class":622},[52,50127,50128,50130,50132,50134,50136,50138,50140,50142,50144],{"class":54,"line":19865},[52,50129,34169],{"class":622},[52,50131,2099],{"class":160},[52,50133,33383],{"class":622},[52,50135,34176],{"class":62},[52,50137,4671],{"class":160},[52,50139,34181],{"class":622},[52,50141,4668],{"class":160},[52,50143,33408],{"class":62},[52,50145,170],{"class":622},[52,50147,50148,50150,50152],{"class":54,"line":19870},[52,50149,34221],{"class":622},[52,50151,2099],{"class":160},[52,50153,45843],{"class":622},[52,50155,50156,50158,50160,50162,50164,50166,50168,50170],{"class":54,"line":19883},[52,50157,34231],{"class":90},[52,50159,34234],{"class":622},[52,50161,3332],{"class":90},[52,50163,3491],{"class":622},[52,50165,34433],{"class":90},[52,50167,3491],{"class":622},[52,50169,34433],{"class":90},[52,50171,34247],{"class":622},[1486,50173,50175],{"id":50174},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[274,50177,50178],{},"计算图片的均值与方差，用于训练中归一化处理操作",[19,50180,50182],{"className":33310,"code":50181,"language":33312,"meta":28,"style":28},"# 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",[26,50183,50184,50189,50202,50207,50213,50218,50228,50232,50237,50247,50251,50256,50266,50283,50287,50292,50304,50316,50347,50356,50366,50376,50380,50385,50400,50404,50409,50414,50419,50429,50434,50459,50463,50468,50483,50487,50500,50504,50509,50514,50519,50524,50529,50539,50549,50572,50580,50588,50596,50600,50612,50616,50621,50625,50629,50636,50655,50679,50686,50700,50705,50710,50714,50728,50732,50744],{"__ignoreMap":28},[52,50185,50186],{"class":54,"line":55},[52,50187,50188],{"class":332},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[52,50190,50191,50193,50196,50199],{"class":54,"line":69},[52,50192,33669],{"class":160},[52,50194,50195],{"class":90}," PIL",[52,50197,50198],{"class":160}," import",[52,50200,50201],{"class":622}," Image\n",[52,50203,50204],{"class":54,"line":82},[52,50205,50206],{"class":332},"# os 用来处理文件夹和文件路径\n",[52,50208,50209,50211],{"class":54,"line":97},[52,50210,33324],{"class":160},[52,50212,48237],{"class":622},[52,50214,50215],{"class":54,"line":112},[52,50216,50217],{"class":332},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[52,50219,50220,50222,50224,50226],{"class":54,"line":119},[52,50221,33324],{"class":160},[52,50223,34312],{"class":622},[52,50225,34315],{"class":160},[52,50227,34318],{"class":622},[52,50229,50230],{"class":54,"line":130},[52,50231,116],{"emptyLinePlaceholder":115},[52,50233,50234],{"class":54,"line":136},[52,50235,50236],{"class":332},"# 文件夹路径，包含所有图片文件\n",[52,50238,50239,50242,50244],{"class":54,"line":141},[52,50240,50241],{"class":622},"folder_path ",[52,50243,2099],{"class":160},[52,50245,50246],{"class":62}," 'data_cat_dog'\n",[52,50248,50249],{"class":54,"line":146},[52,50250,116],{"emptyLinePlaceholder":115},[52,50252,50253],{"class":54,"line":152},[52,50254,50255],{"class":332},"# 初始化累积变量\n",[52,50257,50258,50261,50263],{"class":54,"line":157},[52,50259,50260],{"class":622},"total_pixels ",[52,50262,2099],{"class":160},[52,50264,50265],{"class":90}," 0\n",[52,50267,50268,50271,50273,50276,50278,50280],{"class":54,"line":173},[52,50269,50270],{"class":622},"sum_normalized_pixel_values ",[52,50272,2099],{"class":160},[52,50274,50275],{"class":622}," np.zeros(",[52,50277,3188],{"class":90},[52,50279,48740],{"class":622},[52,50281,50282],{"class":332},"# 如果是RGB图像，需要三个通道的均值和方差\n",[52,50284,50285],{"class":54,"line":178},[52,50286,116],{"emptyLinePlaceholder":115},[52,50288,50289],{"class":54,"line":184},[52,50290,50291],{"class":332},"# 遍历文件夹中的图片文件\n",[52,50293,50294,50296,50299,50301],{"class":54,"line":189},[52,50295,5985],{"class":160},[52,50297,50298],{"class":622}," root, dirs, files ",[52,50300,28988],{"class":160},[52,50302,50303],{"class":622}," os.walk(folder_path):\n",[52,50305,50306,50308,50311,50313],{"class":54,"line":201},[52,50307,6160],{"class":160},[52,50309,50310],{"class":622}," filename ",[52,50312,28988],{"class":160},[52,50314,50315],{"class":622}," files:\n",[52,50317,50318,50320,50323,50326,50328,50331,50333,50336,50338,50341,50344],{"class":54,"line":206},[52,50319,5458],{"class":160},[52,50321,50322],{"class":622}," filename.endswith((",[52,50324,50325],{"class":62},"'.jpg'",[52,50327,15391],{"class":622},[52,50329,50330],{"class":62},"'.jpeg'",[52,50332,15391],{"class":622},[52,50334,50335],{"class":62},"'.png'",[52,50337,15391],{"class":622},[52,50339,50340],{"class":62},"'.bmp'",[52,50342,50343],{"class":622},")):  ",[52,50345,50346],{"class":332},"# 可根据实际情况添加其他格式\n",[52,50348,50349,50351,50353],{"class":54,"line":224},[52,50350,48605],{"class":622},[52,50352,2099],{"class":160},[52,50354,50355],{"class":622}," os.path.join(root, filename)\n",[52,50357,50358,50361,50363],{"class":54,"line":229},[52,50359,50360],{"class":622},"            image ",[52,50362,2099],{"class":160},[52,50364,50365],{"class":622}," Image.open(image_path)\n",[52,50367,50368,50371,50373],{"class":54,"line":241},[52,50369,50370],{"class":622},"            image_array ",[52,50372,2099],{"class":160},[52,50374,50375],{"class":622}," np.array(image)\n",[52,50377,50378],{"class":54,"line":246},[52,50379,116],{"emptyLinePlaceholder":115},[52,50381,50382],{"class":54,"line":252},[52,50383,50384],{"class":332},"            # 归一化像素值到0-1之间\n",[52,50386,50387,50390,50392,50395,50397],{"class":54,"line":257},[52,50388,50389],{"class":622},"            normalized_image_array ",[52,50391,2099],{"class":160},[52,50393,50394],{"class":622}," image_array ",[52,50396,3696],{"class":160},[52,50398,50399],{"class":90}," 255.0\n",[52,50401,50402],{"class":54,"line":266},[52,50403,116],{"emptyLinePlaceholder":115},[52,50405,50406],{"class":54,"line":4722},[52,50407,50408],{"class":332},"            # print(image_path)\n",[52,50410,50411],{"class":54,"line":4727},[52,50412,50413],{"class":332},"            # print(normalized_image_array.shape)\n",[52,50415,50416],{"class":54,"line":4741},[52,50417,50418],{"class":332},"            # 累积归一化后的像素值和像素数量\n",[52,50420,50421,50424,50426],{"class":54,"line":4746},[52,50422,50423],{"class":622},"            total_pixels ",[52,50425,12433],{"class":160},[52,50427,50428],{"class":622}," normalized_image_array.size\n",[52,50430,50431],{"class":54,"line":5538},[52,50432,50433],{"class":332},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[52,50435,50436,50439,50441,50444,50447,50449,50451,50453,50455,50457],{"class":54,"line":5552},[52,50437,50438],{"class":622},"            sum_normalized_pixel_values ",[52,50440,12433],{"class":160},[52,50442,50443],{"class":622}," np.sum(normalized_image_array, ",[52,50445,50446],{"class":8172},"axis",[52,50448,2099],{"class":160},[52,50450,3121],{"class":622},[52,50452,3306],{"class":90},[52,50454,15391],{"class":622},[52,50456,3332],{"class":90},[52,50458,33429],{"class":622},[52,50460,50461],{"class":54,"line":5560},[52,50462,116],{"emptyLinePlaceholder":115},[52,50464,50465],{"class":54,"line":5565},[52,50466,50467],{"class":332},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[52,50469,50470,50473,50475,50478,50480],{"class":54,"line":5571},[52,50471,50472],{"class":622},"mean ",[52,50474,2099],{"class":160},[52,50476,50477],{"class":622}," sum_normalized_pixel_values ",[52,50479,3696],{"class":160},[52,50481,50482],{"class":622}," total_pixels\n",[52,50484,50485],{"class":54,"line":5577},[52,50486,116],{"emptyLinePlaceholder":115},[52,50488,50489,50492,50494,50496,50498],{"class":54,"line":5582},[52,50490,50491],{"class":622},"sum_squared_diff ",[52,50493,2099],{"class":160},[52,50495,50275],{"class":622},[52,50497,3188],{"class":90},[52,50499,170],{"class":622},[52,50501,50502],{"class":54,"line":10904},[52,50503,116],{"emptyLinePlaceholder":115},[52,50505,50506],{"class":54,"line":10928},[52,50507,50508],{"class":332},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[52,50510,50511],{"class":54,"line":10933},[52,50512,50513],{"class":332},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[52,50515,50516],{"class":54,"line":10939},[52,50517,50518],{"class":332},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[52,50520,50521],{"class":54,"line":10966},[52,50522,50523],{"class":332},"# Image.open(image_path)：打开图片\n",[52,50525,50526],{"class":54,"line":10971},[52,50527,50528],{"class":332},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[52,50530,50531,50533,50535,50537],{"class":54,"line":10977},[52,50532,5985],{"class":160},[52,50534,50298],{"class":622},[52,50536,28988],{"class":160},[52,50538,50303],{"class":622},[52,50540,50541,50543,50545,50547],{"class":54,"line":10989},[52,50542,6160],{"class":160},[52,50544,50310],{"class":622},[52,50546,28988],{"class":160},[52,50548,50315],{"class":622},[52,50550,50551,50553,50555,50557,50559,50561,50563,50565,50567,50569],{"class":54,"line":11001},[52,50552,5458],{"class":160},[52,50554,50322],{"class":622},[52,50556,50325],{"class":62},[52,50558,15391],{"class":622},[52,50560,50330],{"class":62},[52,50562,15391],{"class":622},[52,50564,50335],{"class":62},[52,50566,15391],{"class":622},[52,50568,50340],{"class":62},[52,50570,50571],{"class":622},")):\n",[52,50573,50574,50576,50578],{"class":54,"line":11013},[52,50575,48605],{"class":622},[52,50577,2099],{"class":160},[52,50579,50355],{"class":622},[52,50581,50582,50584,50586],{"class":54,"line":12672},[52,50583,50360],{"class":622},[52,50585,2099],{"class":160},[52,50587,50365],{"class":622},[52,50589,50590,50592,50594],{"class":54,"line":12697},[52,50591,50370],{"class":622},[52,50593,2099],{"class":160},[52,50595,50375],{"class":622},[52,50597,50598],{"class":54,"line":12720},[52,50599,50384],{"class":332},[52,50601,50602,50604,50606,50608,50610],{"class":54,"line":12744},[52,50603,50389],{"class":622},[52,50605,2099],{"class":160},[52,50607,50394],{"class":622},[52,50609,3696],{"class":160},[52,50611,50399],{"class":90},[52,50613,50614],{"class":54,"line":12749},[52,50615,50413],{"class":332},[52,50617,50618],{"class":54,"line":12754},[52,50619,50620],{"class":332},"            # print(mean.shape)\n",[52,50622,50623],{"class":54,"line":12759},[52,50624,50408],{"class":332},[52,50626,50627],{"class":54,"line":12768},[52,50628,116],{"emptyLinePlaceholder":115},[52,50630,50631,50634],{"class":54,"line":12773},[52,50632,50633],{"class":160},"            try",[52,50635,6698],{"class":622},[52,50637,50638,50641,50643,50646,50648,50651,50653],{"class":54,"line":12779},[52,50639,50640],{"class":622},"                diff ",[52,50642,2099],{"class":160},[52,50644,50645],{"class":622}," (normalized_image_array ",[52,50647,3644],{"class":160},[52,50649,50650],{"class":622}," mean) ",[52,50652,13617],{"class":160},[52,50654,2391],{"class":90},[52,50656,50657,50660,50662,50665,50667,50669,50671,50673,50675,50677],{"class":54,"line":12800},[52,50658,50659],{"class":622},"                sum_squared_diff ",[52,50661,12433],{"class":160},[52,50663,50664],{"class":622}," np.sum(diff, ",[52,50666,50446],{"class":8172},[52,50668,2099],{"class":160},[52,50670,3121],{"class":622},[52,50672,3306],{"class":90},[52,50674,15391],{"class":622},[52,50676,3332],{"class":90},[52,50678,33429],{"class":622},[52,50680,50681,50684],{"class":54,"line":12806},[52,50682,50683],{"class":160},"            except",[52,50685,6698],{"class":622},[52,50687,50688,50691,50693,50695,50698],{"class":54,"line":12820},[52,50689,50690],{"class":90},"                print",[52,50692,3121],{"class":622},[52,50694,3170],{"class":160},[52,50696,50697],{"class":62},"\"捕获到自定义异常\"",[52,50699,170],{"class":622},[52,50701,50702],{"class":54,"line":12826},[52,50703,50704],{"class":332},"            # diff = (normalized_image_array - mean) ** 2\n",[52,50706,50707],{"class":54,"line":12853},[52,50708,50709],{"class":332},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[52,50711,50712],{"class":54,"line":12862},[52,50713,116],{"emptyLinePlaceholder":115},[52,50715,50716,50719,50721,50724,50726],{"class":54,"line":12868},[52,50717,50718],{"class":622},"variance ",[52,50720,2099],{"class":160},[52,50722,50723],{"class":622}," sum_squared_diff ",[52,50725,3696],{"class":160},[52,50727,50482],{"class":622},[52,50729,50730],{"class":54,"line":12876},[52,50731,116],{"emptyLinePlaceholder":115},[52,50733,50734,50736,50738,50741],{"class":54,"line":12881},[52,50735,33347],{"class":90},[52,50737,3121],{"class":622},[52,50739,50740],{"class":62},"\"Mean:\"",[52,50742,50743],{"class":622},", mean)\n",[52,50745,50746,50748,50750,50753],{"class":54,"line":19560},[52,50747,33347],{"class":90},[52,50749,3121],{"class":622},[52,50751,50752],{"class":62},"\"Variance:\"",[52,50754,50755],{"class":622},", variance)\n",[19,50757,50759],{"className":33310,"code":50758,"language":33312,"meta":28,"style":28},"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",[26,50760,50761,50767,50773,50783,50789,50799,50813,50823,50833,50843,50847,50857,50867,50871,50875,50883,50888,50893,50912,50916,50921,50926,50931,50936,50977,50982,50992,50997,51010,51015,51020,51025,51030,51035,51039,51044,51049,51071,51075,51107,51121,51131,51141,51145,51155,51169,51179,51189,51199,51205,51209,51213,51217,51221,51225,51233,51253,51257,51261,51265,51269,51285,51289,51293,51301,51305,51309,51317,51321,51325,51329,51337,51341,51345,51349,51357,51361,51369,51373,51381,51385,51393,51397,51405,51409,51413,51421,51425,51429,51441,51465,51479,51483,51487,51491,51499,51503,51511,51515,51523,51527,51535,51539,51547,51551,51559,51563,51575,51579,51587,51591,51599,51603,51607,51611,51615,51623,51627,51643,51647,51655,51659,51663,51667,51671,51675,51679,51683,51699,51703,51715,51719,51731,51735,51747,51751,51759,51763,51771,51775,51779,51783,51789,51793,51801,51805,51821,51825,51833,51837,51853,51865,51869,51881,51885,51889,51897,51901,51905,51913,51917,51925,51929,51937,51941,51945,51987,52029,52033,52037,52053,52057,52073,52077,52081,52089,52093,52097,52109,52147,52151,52155,52163,52167,52181,52191,52197,52203,52209,52215,52219,52223,52229,52233,52237,52245,52249,52267,52271,52275,52279,52295,52299,52303,52307,52311,52315,52335,52355,52359,52363,52367,52375,52383,52387,52403,52423,52443,52447,52452,52461,52470,52475,52480,52485,52498,52503,52512,52521,52538],{"__ignoreMap":28},[52,50762,50763,50765],{"class":54,"line":55},[52,50764,33324],{"class":160},[52,50766,34754],{"class":622},[52,50768,50769,50771],{"class":54,"line":69},[52,50770,33324],{"class":160},[52,50772,34761],{"class":622},[52,50774,50775,50777,50779,50781],{"class":54,"line":82},[52,50776,33324],{"class":160},[52,50778,34772],{"class":622},[52,50780,34315],{"class":160},[52,50782,34777],{"class":622},[52,50784,50785,50787],{"class":54,"line":97},[52,50786,33324],{"class":160},[52,50788,33327],{"class":622},[52,50790,50791,50793,50795,50797],{"class":54,"line":112},[52,50792,33669],{"class":160},[52,50794,34347],{"class":622},[52,50796,33324],{"class":160},[52,50798,34794],{"class":622},[52,50800,50801,50803,50805,50807,50810],{"class":54,"line":119},[52,50802,33669],{"class":160},[52,50804,34300],{"class":622},[52,50806,33324],{"class":160},[52,50808,50809],{"class":622}," ImageFolder ",[52,50811,50812],{"class":332},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[52,50814,50815,50817,50819,50821],{"class":54,"line":130},[52,50816,33669],{"class":160},[52,50818,34330],{"class":622},[52,50820,33324],{"class":160},[52,50822,34335],{"class":622},[52,50824,50825,50827,50829,50831],{"class":54,"line":136},[52,50826,33324],{"class":160},[52,50828,34347],{"class":622},[52,50830,34315],{"class":160},[52,50832,34352],{"class":622},[52,50834,50835,50837,50839,50841],{"class":54,"line":141},[52,50836,33324],{"class":160},[52,50838,34364],{"class":622},[52,50840,34315],{"class":160},[52,50842,34369],{"class":622},[52,50844,50845],{"class":54,"line":146},[52,50846,34839],{"class":332},[52,50848,50849,50851,50853,50855],{"class":54,"line":152},[52,50850,33669],{"class":160},[52,50852,34846],{"class":622},[52,50854,33324],{"class":160},[52,50856,45963],{"class":622},[52,50858,50859,50861,50863,50865],{"class":54,"line":157},[52,50860,33669],{"class":160},[52,50862,33672],{"class":622},[52,50864,33324],{"class":160},[52,50866,33677],{"class":622},[52,50868,50869],{"class":54,"line":173},[52,50870,116],{"emptyLinePlaceholder":115},[52,50872,50873],{"class":54,"line":178},[52,50874,34874],{"class":332},[52,50876,50877,50879,50881],{"class":54,"line":184},[52,50878,34879],{"class":160},[52,50880,34882],{"class":58},[52,50882,34885],{"class":622},[52,50884,50885],{"class":54,"line":189},[52,50886,50887],{"class":332},"    # 导入自己的数据集，并进行数据处理\n",[52,50889,50890],{"class":54,"line":201},[52,50891,50892],{"class":332},"    # 定义数据集的路径\n",[52,50894,50895,50898,50900,50902,50904,50906,50910],{"class":54,"line":206},[52,50896,50897],{"class":90},"    ROOT_PATH",[52,50899,2099],{"class":160},[52,50901,3782],{"class":160},[52,50903,3364],{"class":62},[52,50905,3670],{"class":90},[52,50907,50909],{"class":50908},"sA_wV","\u002Fdata\u002Ftrain",[52,50911,28079],{"class":62},[52,50913,50914],{"class":54,"line":224},[52,50915,116],{"emptyLinePlaceholder":115},[52,50917,50918],{"class":54,"line":229},[52,50919,50920],{"class":332},"    # 定义归一化方法\n",[52,50922,50923],{"class":54,"line":241},[52,50924,50925],{"class":332},"    # 这里需要先计算一下数据集的均值和方差\n",[52,50927,50928],{"class":54,"line":246},[52,50929,50930],{"class":332},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[52,50932,50933],{"class":54,"line":252},[52,50934,50935],{"class":332},"    # 第一个参数是均值，第二个参数是方差\n",[52,50937,50938,50941,50943,50946,50949,50951,50954,50956,50959,50962,50965,50967,50970,50972,50975],{"class":54,"line":257},[52,50939,50940],{"class":622},"    normalize",[52,50942,2099],{"class":160},[52,50944,50945],{"class":622},"transforms.Normalize([",[52,50947,50948],{"class":90},"0.162",[52,50950,3491],{"class":622},[52,50952,50953],{"class":90},"0.151",[52,50955,3491],{"class":622},[52,50957,50958],{"class":90},"0.138",[52,50960,50961],{"class":622},"],[",[52,50963,50964],{"class":90},"0.058",[52,50966,3491],{"class":622},[52,50968,50969],{"class":90},"0.052",[52,50971,3491],{"class":622},[52,50973,50974],{"class":90},"0.048",[52,50976,7616],{"class":622},[52,50978,50979],{"class":54,"line":266},[52,50980,50981],{"class":332},"    # 定义数据集处理方法变量\n",[52,50983,50984,50987,50989],{"class":54,"line":4722},[52,50985,50986],{"class":622},"    train_transform",[52,50988,2099],{"class":160},[52,50990,50991],{"class":622},"transforms.Compose([\n",[52,50993,50994],{"class":54,"line":4727},[52,50995,50996],{"class":332},"        # 调整图像大小为224*224\n",[52,50998,50999,51002,51004,51006,51008],{"class":54,"line":4741},[52,51000,51001],{"class":622},"        transforms.Resize((",[52,51003,34433],{"class":90},[52,51005,3491],{"class":622},[52,51007,34433],{"class":90},[52,51009,45554],{"class":622},[52,51011,51012],{"class":54,"line":4746},[52,51013,51014],{"class":332},"        # 将图像转换为张量\n",[52,51016,51017],{"class":54,"line":5538},[52,51018,51019],{"class":622},"        transforms.ToTensor(),\n",[52,51021,51022],{"class":54,"line":5552},[52,51023,51024],{"class":622},"        normalize])\n",[52,51026,51027],{"class":54,"line":5560},[52,51028,51029],{"class":332},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[52,51031,51032],{"class":54,"line":5565},[52,51033,51034],{"class":332},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[52,51036,51037],{"class":54,"line":5571},[52,51038,116],{"emptyLinePlaceholder":115},[52,51040,51041],{"class":54,"line":5577},[52,51042,51043],{"class":332},"    # 加载数据集\n",[52,51045,51046],{"class":54,"line":5582},[52,51047,51048],{"class":332},"    # 传入数据集路径与处理方法\n",[52,51050,51051,51053,51055,51058,51061,51063,51066,51068],{"class":54,"line":10904},[52,51052,34890],{"class":622},[52,51054,2099],{"class":160},[52,51056,51057],{"class":622},"ImageFolder(",[52,51059,51060],{"class":90},"ROOT_PATH",[52,51062,3491],{"class":622},[52,51064,51065],{"class":8172},"transform",[52,51067,2099],{"class":160},[52,51069,51070],{"class":622},"train_transform)\n",[52,51072,51073],{"class":54,"line":10928},[52,51074,116],{"emptyLinePlaceholder":115},[52,51076,51077,51079,51081,51083,51085,51087,51089,51091,51093,51095,51097,51099,51101,51103,51105],{"class":54,"line":10933},[52,51078,34942],{"class":622},[52,51080,2099],{"class":160},[52,51082,34947],{"class":622},[52,51084,34950],{"class":90},[52,51086,3121],{"class":622},[52,51088,34955],{"class":90},[52,51090,1095],{"class":160},[52,51092,10314],{"class":90},[52,51094,34962],{"class":622},[52,51096,34950],{"class":90},[52,51098,3121],{"class":622},[52,51100,34969],{"class":90},[52,51102,1095],{"class":160},[52,51104,10314],{"class":90},[52,51106,34976],{"class":622},[52,51108,51109,51111,51113,51115,51117,51119],{"class":54,"line":10939},[52,51110,34981],{"class":622},[52,51112,2099],{"class":160},[52,51114,34986],{"class":622},[52,51116,34469],{"class":8172},[52,51118,2099],{"class":160},[52,51120,34474],{"class":622},[52,51122,51123,51125,51127,51129],{"class":54,"line":10966},[52,51124,34997],{"class":8172},[52,51126,2099],{"class":160},[52,51128,3312],{"class":90},[52,51130,34398],{"class":622},[52,51132,51133,51135,51137,51139],{"class":54,"line":10971},[52,51134,35009],{"class":8172},[52,51136,2099],{"class":160},[52,51138,34408],{"class":90},[52,51140,34398],{"class":622},[52,51142,51143],{"class":54,"line":10977},[52,51144,35020],{"class":332},[52,51146,51147,51149,51151,51153],{"class":54,"line":10989},[52,51148,35025],{"class":8172},[52,51150,2099],{"class":160},[52,51152,3508],{"class":90},[52,51154,170],{"class":622},[52,51156,51157,51159,51161,51163,51165,51167],{"class":54,"line":11001},[52,51158,35036],{"class":622},[52,51160,2099],{"class":160},[52,51162,34466],{"class":622},[52,51164,34469],{"class":8172},[52,51166,2099],{"class":160},[52,51168,35047],{"class":622},[52,51170,51171,51173,51175,51177],{"class":54,"line":11013},[52,51172,35052],{"class":8172},[52,51174,2099],{"class":160},[52,51176,3312],{"class":90},[52,51178,34398],{"class":622},[52,51180,51181,51183,51185,51187],{"class":54,"line":12672},[52,51182,35063],{"class":8172},[52,51184,2099],{"class":160},[52,51186,34408],{"class":90},[52,51188,34398],{"class":622},[52,51190,51191,51193,51195,51197],{"class":54,"line":12697},[52,51192,35074],{"class":8172},[52,51194,2099],{"class":160},[52,51196,3508],{"class":90},[52,51198,170],{"class":622},[52,51200,51201,51203],{"class":54,"line":12720},[52,51202,7049],{"class":160},[52,51204,35087],{"class":622},[52,51206,51207],{"class":54,"line":12744},[52,51208,116],{"emptyLinePlaceholder":115},[52,51210,51211],{"class":54,"line":12749},[52,51212,35096],{"class":332},[52,51214,51215],{"class":54,"line":12754},[52,51216,35101],{"class":332},[52,51218,51219],{"class":54,"line":12759},[52,51220,116],{"emptyLinePlaceholder":115},[52,51222,51223],{"class":54,"line":12768},[52,51224,35110],{"class":332},[52,51226,51227,51229,51231],{"class":54,"line":12773},[52,51228,34879],{"class":160},[52,51230,35117],{"class":58},[52,51232,35120],{"class":622},[52,51234,51235,51237,51239,51241,51243,51245,51247,51249,51251],{"class":54,"line":12779},[52,51236,34169],{"class":622},[52,51238,2099],{"class":160},[52,51240,33383],{"class":622},[52,51242,34176],{"class":62},[52,51244,4671],{"class":160},[52,51246,34181],{"class":622},[52,51248,4668],{"class":160},[52,51250,35139],{"class":62},[52,51252,170],{"class":622},[52,51254,51255],{"class":54,"line":12800},[52,51256,116],{"emptyLinePlaceholder":115},[52,51258,51259],{"class":54,"line":12806},[52,51260,35154],{"class":332},[52,51262,51263],{"class":54,"line":12820},[52,51264,35159],{"class":332},[52,51266,51267],{"class":54,"line":12826},[52,51268,35164],{"class":332},[52,51270,51271,51273,51275,51277,51279,51281,51283],{"class":54,"line":12853},[52,51272,35169],{"class":622},[52,51274,2099],{"class":160},[52,51276,35174],{"class":622},[52,51278,35177],{"class":8172},[52,51280,2099],{"class":160},[52,51282,35182],{"class":90},[52,51284,170],{"class":622},[52,51286,51287],{"class":54,"line":12862},[52,51288,116],{"emptyLinePlaceholder":115},[52,51290,51291],{"class":54,"line":12868},[52,51292,35193],{"class":332},[52,51294,51295,51297,51299],{"class":54,"line":12876},[52,51296,35198],{"class":622},[52,51298,2099],{"class":160},[52,51300,35203],{"class":622},[52,51302,51303],{"class":54,"line":12881},[52,51304,116],{"emptyLinePlaceholder":115},[52,51306,51307],{"class":54,"line":19560},[52,51308,35212],{"class":332},[52,51310,51311,51313,51315],{"class":54,"line":19566},[52,51312,34221],{"class":622},[52,51314,2099],{"class":160},[52,51316,35221],{"class":622},[52,51318,51319],{"class":54,"line":19589},[52,51320,35226],{"class":332},[52,51322,51323],{"class":54,"line":19595},[52,51324,35231],{"class":332},[52,51326,51327],{"class":54,"line":19618},[52,51328,35236],{"class":332},[52,51330,51331,51333,51335],{"class":54,"line":19632},[52,51332,35241],{"class":622},[52,51334,2099],{"class":160},[52,51336,35246],{"class":622},[52,51338,51339],{"class":54,"line":19652},[52,51340,116],{"emptyLinePlaceholder":115},[52,51342,51343],{"class":54,"line":19658},[52,51344,35259],{"class":332},[52,51346,51347],{"class":54,"line":19669},[52,51348,35264],{"class":332},[52,51350,51351,51353,51355],{"class":54,"line":19692},[52,51352,35269],{"class":622},[52,51354,2099],{"class":160},[52,51356,35274],{"class":90},[52,51358,51359],{"class":54,"line":19714},[52,51360,35279],{"class":332},[52,51362,51363,51365,51367],{"class":54,"line":19719},[52,51364,35284],{"class":622},[52,51366,2099],{"class":160},[52,51368,35289],{"class":622},[52,51370,51371],{"class":54,"line":19725},[52,51372,35294],{"class":332},[52,51374,51375,51377,51379],{"class":54,"line":19739},[52,51376,35299],{"class":622},[52,51378,2099],{"class":160},[52,51380,35289],{"class":622},[52,51382,51383],{"class":54,"line":19752},[52,51384,35308],{"class":332},[52,51386,51387,51389,51391],{"class":54,"line":19757},[52,51388,35313],{"class":622},[52,51390,2099],{"class":160},[52,51392,35289],{"class":622},[52,51394,51395],{"class":54,"line":19771},[52,51396,35322],{"class":332},[52,51398,51399,51401,51403],{"class":54,"line":19776},[52,51400,35327],{"class":622},[52,51402,2099],{"class":160},[52,51404,35289],{"class":622},[52,51406,51407],{"class":54,"line":19782},[52,51408,116],{"emptyLinePlaceholder":115},[52,51410,51411],{"class":54,"line":19787},[52,51412,35340],{"class":332},[52,51414,51415,51417,51419],{"class":54,"line":19801},[52,51416,35345],{"class":622},[52,51418,2099],{"class":160},[52,51420,35350],{"class":622},[52,51422,51423],{"class":54,"line":19806},[52,51424,116],{"emptyLinePlaceholder":115},[52,51426,51427],{"class":54,"line":19811},[52,51428,35363],{"class":332},[52,51430,51431,51433,51435,51437,51439],{"class":54,"line":19825},[52,51432,6160],{"class":160},[52,51434,35370],{"class":622},[52,51436,28988],{"class":160},[52,51438,35375],{"class":90},[52,51440,35378],{"class":622},[52,51442,51443,51445,51447,51449,51451,51453,51455,51457,51459,51461,51463],{"class":54,"line":19837},[52,51444,35383],{"class":90},[52,51446,3121],{"class":622},[52,51448,35388],{"class":62},[52,51450,35391],{"class":90},[52,51452,3696],{"class":62},[52,51454,35391],{"class":90},[52,51456,3364],{"class":62},[52,51458,35400],{"class":622},[52,51460,3644],{"class":160},[52,51462,3332],{"class":90},[52,51464,33429],{"class":622},[52,51466,51467,51469,51471,51473,51475,51477],{"class":54,"line":19842},[52,51468,35383],{"class":90},[52,51470,3121],{"class":622},[52,51472,35415],{"class":62},[52,51474,1095],{"class":160},[52,51476,3559],{"class":90},[52,51478,170],{"class":622},[52,51480,51481],{"class":54,"line":19855},[52,51482,116],{"emptyLinePlaceholder":115},[52,51484,51485],{"class":54,"line":19860},[52,51486,35430],{"class":332},[52,51488,51489],{"class":54,"line":19865},[52,51490,35435],{"class":332},[52,51492,51493,51495,51497],{"class":54,"line":19870},[52,51494,35440],{"class":622},[52,51496,2099],{"class":160},[52,51498,35274],{"class":90},[52,51500,51501],{"class":54,"line":19883},[52,51502,35449],{"class":332},[52,51504,51505,51507,51509],{"class":54,"line":19888},[52,51506,35454],{"class":622},[52,51508,2099],{"class":160},[52,51510,2719],{"class":90},[52,51512,51513],{"class":54,"line":35565},[52,51514,35463],{"class":332},[52,51516,51517,51519,51521],{"class":54,"line":35571},[52,51518,35468],{"class":622},[52,51520,2099],{"class":160},[52,51522,35274],{"class":90},[52,51524,51525],{"class":54,"line":35577},[52,51526,35477],{"class":332},[52,51528,51529,51531,51533],{"class":54,"line":35583},[52,51530,35482],{"class":622},[52,51532,2099],{"class":160},[52,51534,2719],{"class":90},[52,51536,51537],{"class":54,"line":35589},[52,51538,35491],{"class":332},[52,51540,51541,51543,51545],{"class":54,"line":35600},[52,51542,35496],{"class":622},[52,51544,2099],{"class":160},[52,51546,2719],{"class":90},[52,51548,51549],{"class":54,"line":35606},[52,51550,35505],{"class":332},[52,51552,51553,51555,51557],{"class":54,"line":35626},[52,51554,35510],{"class":622},[52,51556,2099],{"class":160},[52,51558,2719],{"class":90},[52,51560,51561],{"class":54,"line":35632},[52,51562,35519],{"class":332},[52,51564,51565,51567,51569,51571,51573],{"class":54,"line":35643},[52,51566,6362],{"class":160},[52,51568,34533],{"class":622},[52,51570,28988],{"class":160},[52,51572,34538],{"class":90},[52,51574,35532],{"class":622},[52,51576,51577],{"class":54,"line":35649},[52,51578,35537],{"class":332},[52,51580,51581,51583,51585],{"class":54,"line":35655},[52,51582,35542],{"class":622},[52,51584,2099],{"class":160},[52,51586,35547],{"class":622},[52,51588,51589],{"class":54,"line":35661},[52,51590,35552],{"class":332},[52,51592,51593,51595,51597],{"class":54,"line":35667},[52,51594,35557],{"class":622},[52,51596,2099],{"class":160},[52,51598,35562],{"class":622},[52,51600,51601],{"class":54,"line":35673},[52,51602,35568],{"class":332},[52,51604,51605],{"class":54,"line":35679},[52,51606,35574],{"class":622},[52,51608,51609],{"class":54,"line":35685},[52,51610,35580],{"class":332},[52,51612,51613],{"class":54,"line":35705},[52,51614,35586],{"class":332},[52,51616,51617,51619,51621],{"class":54,"line":35711},[52,51618,35592],{"class":622},[52,51620,2099],{"class":160},[52,51622,35597],{"class":622},[52,51624,51625],{"class":54,"line":35727},[52,51626,35603],{"class":332},[52,51628,51629,51631,51633,51635,51637,51639,51641],{"class":54,"line":35733},[52,51630,35609],{"class":622},[52,51632,2099],{"class":160},[52,51634,35614],{"class":622},[52,51636,35617],{"class":8172},[52,51638,2099],{"class":160},[52,51640,3332],{"class":90},[52,51642,170],{"class":622},[52,51644,51645],{"class":54,"line":35747},[52,51646,35629],{"class":332},[52,51648,51649,51651,51653],{"class":54,"line":35753},[52,51650,35635],{"class":622},[52,51652,2099],{"class":160},[52,51654,35640],{"class":622},[52,51656,51657],{"class":54,"line":35768},[52,51658,35646],{"class":332},[52,51660,51661],{"class":54,"line":35774},[52,51662,35652],{"class":622},[52,51664,51665],{"class":54,"line":35783},[52,51666,35658],{"class":332},[52,51668,51669],{"class":54,"line":35789},[52,51670,35664],{"class":622},[52,51672,51673],{"class":54,"line":35798},[52,51674,35670],{"class":332},[52,51676,51677],{"class":54,"line":35804},[52,51678,35676],{"class":622},[52,51680,51681],{"class":54,"line":35810},[52,51682,35682],{"class":332},[52,51684,51685,51687,51689,51691,51693,51695,51697],{"class":54,"line":35819},[52,51686,35688],{"class":622},[52,51688,12433],{"class":160},[52,51690,35693],{"class":622},[52,51692,1095],{"class":160},[52,51694,35698],{"class":622},[52,51696,3306],{"class":90},[52,51698,170],{"class":622},[52,51700,51701],{"class":54,"line":35825},[52,51702,35708],{"class":332},[52,51704,51705,51707,51709,51711,51713],{"class":54,"line":35836},[52,51706,35714],{"class":622},[52,51708,12433],{"class":160},[52,51710,35719],{"class":622},[52,51712,5909],{"class":160},[52,51714,35724],{"class":622},[52,51716,51717],{"class":54,"line":35842},[52,51718,35730],{"class":332},[52,51720,51721,51723,51725,51727,51729],{"class":54,"line":35861},[52,51722,35736],{"class":622},[52,51724,12433],{"class":160},[52,51726,35698],{"class":622},[52,51728,3306],{"class":90},[52,51730,170],{"class":622},[52,51732,51733],{"class":54,"line":35867},[52,51734,35750],{"class":332},[52,51736,51737,51739,51741,51743,51745],{"class":54,"line":35878},[52,51738,6362],{"class":160},[52,51740,35758],{"class":622},[52,51742,28988],{"class":160},[52,51744,34538],{"class":90},[52,51746,35765],{"class":622},[52,51748,51749],{"class":54,"line":35884},[52,51750,35771],{"class":332},[52,51752,51753,51755,51757],{"class":54,"line":35904},[52,51754,35542],{"class":622},[52,51756,2099],{"class":160},[52,51758,35547],{"class":622},[52,51760,51761],{"class":54,"line":35920},[52,51762,35786],{"class":332},[52,51764,51765,51767,51769],{"class":54,"line":35926},[52,51766,35557],{"class":622},[52,51768,2099],{"class":160},[52,51770,35562],{"class":622},[52,51772,51773],{"class":54,"line":35940},[52,51774,35801],{"class":332},[52,51776,51777],{"class":54,"line":35946},[52,51778,35807],{"class":622},[52,51780,51781],{"class":54,"line":35952},[52,51782,39288],{"class":332},[52,51784,51785,51787],{"class":54,"line":35963},[52,51786,35813],{"class":160},[52,51788,35816],{"class":622},[52,51790,51791],{"class":54,"line":35969},[52,51792,35822],{"class":332},[52,51794,51795,51797,51799],{"class":54,"line":35975},[52,51796,39303],{"class":622},[52,51798,2099],{"class":160},[52,51800,35597],{"class":622},[52,51802,51803],{"class":54,"line":35985},[52,51804,35839],{"class":332},[52,51806,51807,51809,51811,51813,51815,51817,51819],{"class":54,"line":35991},[52,51808,39316],{"class":622},[52,51810,2099],{"class":160},[52,51812,35614],{"class":622},[52,51814,35617],{"class":8172},[52,51816,2099],{"class":160},[52,51818,3332],{"class":90},[52,51820,170],{"class":622},[52,51822,51823],{"class":54,"line":36002},[52,51824,35864],{"class":332},[52,51826,51827,51829,51831],{"class":54,"line":36008},[52,51828,39337],{"class":622},[52,51830,2099],{"class":160},[52,51832,35640],{"class":622},[52,51834,51835],{"class":54,"line":36018},[52,51836,35881],{"class":332},[52,51838,51839,51841,51843,51845,51847,51849,51851],{"class":54,"line":36023},[52,51840,39350],{"class":622},[52,51842,12433],{"class":160},[52,51844,39355],{"class":622},[52,51846,1095],{"class":160},[52,51848,35698],{"class":622},[52,51850,3306],{"class":90},[52,51852,170],{"class":622},[52,51854,51855,51857,51859,51861,51863],{"class":54,"line":36029},[52,51856,39368],{"class":622},[52,51858,12433],{"class":160},[52,51860,35719],{"class":622},[52,51862,5909],{"class":160},[52,51864,35724],{"class":622},[52,51866,51867],{"class":54,"line":36078},[52,51868,39381],{"class":332},[52,51870,51871,51873,51875,51877,51879],{"class":54,"line":36125},[52,51872,39386],{"class":622},[52,51874,12433],{"class":160},[52,51876,35698],{"class":622},[52,51878,3306],{"class":90},[52,51880,170],{"class":622},[52,51882,51883],{"class":54,"line":36130},[52,51884,35943],{"class":332},[52,51886,51887],{"class":54,"line":36136},[52,51888,35949],{"class":332},[52,51890,51891,51893,51895],{"class":54,"line":36155},[52,51892,35955],{"class":622},[52,51894,3696],{"class":160},[52,51896,35960],{"class":622},[52,51898,51899],{"class":54,"line":36161},[52,51900,35966],{"class":332},[52,51902,51903],{"class":54,"line":36181},[52,51904,35972],{"class":332},[52,51906,51907,51909,51911],{"class":54,"line":36187},[52,51908,35978],{"class":622},[52,51910,3696],{"class":160},[52,51912,35960],{"class":622},[52,51914,51915],{"class":54,"line":36193},[52,51916,35988],{"class":332},[52,51918,51919,51921,51923],{"class":54,"line":36203},[52,51920,35994],{"class":622},[52,51922,3696],{"class":160},[52,51924,35999],{"class":622},[52,51926,51927],{"class":54,"line":36208},[52,51928,36005],{"class":332},[52,51930,51931,51933,51935],{"class":54,"line":36214},[52,51932,36011],{"class":622},[52,51934,3696],{"class":160},[52,51936,35999],{"class":622},[52,51938,51939],{"class":54,"line":36230},[52,51940,116],{"emptyLinePlaceholder":115},[52,51942,51943],{"class":54,"line":36275},[52,51944,36026],{"class":332},[52,51946,51947,51949,51951,51953,51955,51957,51959,51961,51963,51965,51967,51969,51971,51973,51975,51977,51979,51981,51983,51985],{"class":54,"line":36281},[52,51948,35383],{"class":90},[52,51950,3121],{"class":622},[52,51952,6551],{"class":62},[52,51954,35391],{"class":90},[52,51956,36040],{"class":62},[52,51958,4008],{"class":90},[52,51960,36045],{"class":160},[52,51962,4058],{"class":90},[52,51964,36050],{"class":62},[52,51966,4008],{"class":90},[52,51968,36045],{"class":160},[52,51970,4058],{"class":90},[52,51972,6551],{"class":62},[52,51974,36061],{"class":622},[52,51976,3644],{"class":160},[52,51978,3332],{"class":90},[52,51980,36068],{"class":622},[52,51982,3644],{"class":160},[52,51984,3332],{"class":90},[52,51986,36075],{"class":622},[52,51988,51989,51991,51993,51995,51997,51999,52001,52003,52005,52007,52009,52011,52013,52015,52017,52019,52021,52023,52025,52027],{"class":54,"line":36287},[52,51990,35383],{"class":90},[52,51992,3121],{"class":622},[52,51994,6551],{"class":62},[52,51996,35391],{"class":90},[52,51998,36089],{"class":62},[52,52000,4008],{"class":90},[52,52002,36045],{"class":160},[52,52004,4058],{"class":90},[52,52006,36098],{"class":62},[52,52008,4008],{"class":90},[52,52010,36045],{"class":160},[52,52012,4058],{"class":90},[52,52014,6551],{"class":62},[52,52016,36109],{"class":622},[52,52018,3644],{"class":160},[52,52020,3332],{"class":90},[52,52022,36116],{"class":622},[52,52024,3644],{"class":160},[52,52026,3332],{"class":90},[52,52028,36075],{"class":622},[52,52030,52031],{"class":54,"line":36293},[52,52032,116],{"emptyLinePlaceholder":115},[52,52034,52035],{"class":54,"line":36304},[52,52036,36133],{"class":332},[52,52038,52039,52041,52043,52045,52047,52049,52051],{"class":54,"line":36310},[52,52040,5458],{"class":160},[52,52042,36141],{"class":622},[52,52044,3644],{"class":160},[52,52046,3332],{"class":90},[52,52048,4052],{"class":622},[52,52050,4072],{"class":160},[52,52052,36152],{"class":622},[52,52054,52055],{"class":54,"line":36316},[52,52056,36158],{"class":332},[52,52058,52059,52061,52063,52065,52067,52069,52071],{"class":54,"line":36322},[52,52060,36164],{"class":622},[52,52062,3159],{"class":90},[52,52064,2099],{"class":160},[52,52066,36171],{"class":622},[52,52068,3644],{"class":160},[52,52070,3332],{"class":90},[52,52072,36178],{"class":622},[52,52074,52075],{"class":54,"line":36340},[52,52076,36184],{"class":332},[52,52078,52079],{"class":54,"line":36354},[52,52080,36190],{"class":332},[52,52082,52083,52085,52087],{"class":54,"line":36363},[52,52084,36196],{"class":622},[52,52086,2099],{"class":160},[52,52088,35246],{"class":622},[52,52090,52091],{"class":54,"line":36372},[52,52092,116],{"emptyLinePlaceholder":115},[52,52094,52095],{"class":54,"line":36381},[52,52096,36211],{"class":332},[52,52098,52099,52101,52103,52105,52107],{"class":54,"line":36390},[52,52100,36217],{"class":622},[52,52102,2099],{"class":160},[52,52104,36222],{"class":622},[52,52106,3644],{"class":160},[52,52108,36227],{"class":622},[52,52110,52111,52113,52115,52117,52119,52121,52123,52125,52127,52129,52131,52133,52135,52137,52139,52141,52143,52145],{"class":54,"line":36396},[52,52112,35383],{"class":90},[52,52114,3121],{"class":622},[52,52116,36237],{"class":62},[52,52118,4008],{"class":90},[52,52120,36242],{"class":160},[52,52122,4058],{"class":90},[52,52124,3656],{"class":62},[52,52126,4008],{"class":90},[52,52128,36242],{"class":160},[52,52130,4058],{"class":90},[52,52132,36255],{"class":62},[52,52134,36258],{"class":622},[52,52136,36261],{"class":160},[52,52138,4019],{"class":90},[52,52140,36266],{"class":622},[52,52142,3441],{"class":160},[52,52144,4019],{"class":90},[52,52146,33429],{"class":622},[52,52148,52149],{"class":54,"line":36402},[52,52150,39665],{"class":332},[52,52152,52153],{"class":54,"line":36410},[52,52154,39670],{"class":332},[52,52156,52157,52159,52161],{"class":54,"line":36415},[52,52158,39675],{"class":622},[52,52160,36299],{"class":62},[52,52162,170],{"class":622},[52,52164,52165],{"class":54,"line":36421},[52,52166,36319],{"class":332},[52,52168,52169,52171,52173,52175,52177,52179],{"class":54,"line":36432},[52,52170,36325],{"class":622},[52,52172,2099],{"class":160},[52,52174,36330],{"class":622},[52,52176,36333],{"class":8172},[52,52178,2099],{"class":160},[52,52180,4524],{"class":622},[52,52182,52183,52185,52187,52189],{"class":54,"line":36438},[52,52184,36343],{"class":62},[52,52186,3971],{"class":622},[52,52188,36348],{"class":90},[52,52190,36351],{"class":622},[52,52192,52193,52195],{"class":54,"line":36458},[52,52194,36357],{"class":62},[52,52196,36360],{"class":622},[52,52198,52199,52201],{"class":54,"line":36464},[52,52200,36366],{"class":62},[52,52202,36369],{"class":622},[52,52204,52205,52207],{"class":54,"line":36470},[52,52206,36375],{"class":62},[52,52208,36378],{"class":622},[52,52210,52211,52213],{"class":54,"line":36476},[52,52212,36384],{"class":62},[52,52214,36387],{"class":622},[52,52216,52217],{"class":54,"line":36493},[52,52218,36393],{"class":622},[52,52220,52221],{"class":54,"line":36499},[52,52222,36399],{"class":332},[52,52224,52225,52227],{"class":54,"line":36505},[52,52226,7049],{"class":160},[52,52228,36407],{"class":622},[52,52230,52231],{"class":54,"line":36511},[52,52232,116],{"emptyLinePlaceholder":115},[52,52234,52235],{"class":54,"line":36517},[52,52236,36418],{"class":332},[52,52238,52239,52241,52243],{"class":54,"line":36523},[52,52240,34879],{"class":160},[52,52242,36426],{"class":58},[52,52244,36429],{"class":622},[52,52246,52247],{"class":54,"line":36550},[52,52248,36435],{"class":332},[52,52250,52251,52253,52255,52257,52259,52261,52263,52265],{"class":54,"line":36574},[52,52252,36441],{"class":622},[52,52254,34625],{"class":8172},[52,52256,2099],{"class":160},[52,52258,3121],{"class":622},[52,52260,3610],{"class":90},[52,52262,3491],{"class":622},[52,52264,3406],{"class":90},[52,52266,33429],{"class":622},[52,52268,52269],{"class":54,"line":36580},[52,52270,36461],{"class":332},[52,52272,52273],{"class":54,"line":36586},[52,52274,36467],{"class":332},[52,52276,52277],{"class":54,"line":36592},[52,52278,36473],{"class":332},[52,52280,52281,52283,52285,52287,52289,52291,52293],{"class":54,"line":36603},[52,52282,34659],{"class":622},[52,52284,3332],{"class":90},[52,52286,3491],{"class":622},[52,52288,3194],{"class":90},[52,52290,3491],{"class":622},[52,52292,3332],{"class":90},[52,52294,170],{"class":622},[52,52296,52297],{"class":54,"line":36614},[52,52298,36496],{"class":332},[52,52300,52301],{"class":54,"line":36620},[52,52302,36502],{"class":332},[52,52304,52305],{"class":54,"line":36637},[52,52306,36508],{"class":332},[52,52308,52309],{"class":54,"line":36660},[52,52310,36514],{"class":332},[52,52312,52313],{"class":54,"line":36683},[52,52314,36520],{"class":332},[52,52316,52317,52319,52321,52323,52325,52327,52329,52331,52333],{"class":54,"line":36689},[52,52318,36526],{"class":622},[52,52320,36529],{"class":62},[52,52322,36532],{"class":622},[52,52324,36535],{"class":62},[52,52326,3491],{"class":622},[52,52328,36540],{"class":8172},[52,52330,2099],{"class":160},[52,52332,36545],{"class":62},[52,52334,170],{"class":622},[52,52336,52337,52339,52341,52343,52345,52347,52349,52351,52353],{"class":54,"line":36694},[52,52338,36526],{"class":622},[52,52340,36529],{"class":62},[52,52342,36557],{"class":622},[52,52344,36560],{"class":62},[52,52346,3491],{"class":622},[52,52348,36540],{"class":8172},[52,52350,2099],{"class":160},[52,52352,36569],{"class":62},[52,52354,170],{"class":622},[52,52356,52357],{"class":54,"line":36703},[52,52358,36577],{"class":332},[52,52360,52361],{"class":54,"line":36713},[52,52362,36583],{"class":622},[52,52364,52365],{"class":54,"line":36719},[52,52366,36589],{"class":332},[52,52368,52369,52371,52373],{"class":54,"line":36724},[52,52370,36595],{"class":622},[52,52372,36598],{"class":62},[52,52374,170],{"class":622},[52,52376,52377,52379,52381],{"class":54,"line":36730},[52,52378,36606],{"class":622},[52,52380,36609],{"class":62},[52,52382,170],{"class":622},[52,52384,52385],{"class":54,"line":36743},[52,52386,36617],{"class":332},[52,52388,52389,52391,52393,52395,52397,52399,52401],{"class":54,"line":36749},[52,52390,34659],{"class":622},[52,52392,3332],{"class":90},[52,52394,3491],{"class":622},[52,52396,3194],{"class":90},[52,52398,3491],{"class":622},[52,52400,3194],{"class":90},[52,52402,170],{"class":622},[52,52404,52405,52407,52409,52411,52413,52415,52417,52419,52421],{"class":54,"line":36760},[52,52406,36526],{"class":622},[52,52408,36529],{"class":62},[52,52410,36644],{"class":622},[52,52412,36535],{"class":62},[52,52414,3491],{"class":622},[52,52416,36540],{"class":8172},[52,52418,2099],{"class":160},[52,52420,36655],{"class":62},[52,52422,170],{"class":622},[52,52424,52425,52427,52429,52431,52433,52435,52437,52439,52441],{"class":54,"line":36771},[52,52426,36526],{"class":622},[52,52428,36529],{"class":62},[52,52430,36667],{"class":622},[52,52432,36560],{"class":62},[52,52434,3491],{"class":622},[52,52436,36540],{"class":8172},[52,52438,2099],{"class":160},[52,52440,36678],{"class":62},[52,52442,170],{"class":622},[52,52444,52445],{"class":54,"line":36790},[52,52446,36686],{"class":332},[52,52448,52450],{"class":54,"line":52449},219,[52,52451,36583],{"class":622},[52,52453,52455,52457,52459],{"class":54,"line":52454},220,[52,52456,36595],{"class":622},[52,52458,36529],{"class":62},[52,52460,170],{"class":622},[52,52462,52464,52466,52468],{"class":54,"line":52463},221,[52,52465,36606],{"class":622},[52,52467,36708],{"class":62},[52,52469,170],{"class":622},[52,52471,52473],{"class":54,"line":52472},222,[52,52474,36716],{"class":622},[52,52476,52478],{"class":54,"line":52477},223,[52,52479,116],{"emptyLinePlaceholder":115},[52,52481,52483],{"class":54,"line":52482},224,[52,52484,36727],{"class":332},[52,52486,52488,52490,52492,52494,52496],{"class":54,"line":52487},225,[52,52489,4509],{"class":160},[52,52491,34152],{"class":90},[52,52493,5909],{"class":160},[52,52495,34157],{"class":62},[52,52497,6698],{"class":622},[52,52499,52501],{"class":54,"line":52500},226,[52,52502,36746],{"class":332},[52,52504,52506,52508,52510],{"class":54,"line":52505},227,[52,52507,47478],{"class":622},[52,52509,2099],{"class":160},[52,52511,47483],{"class":622},[52,52513,52515,52517,52519],{"class":54,"line":52514},228,[52,52516,36763],{"class":622},[52,52518,2099],{"class":160},[52,52520,36768],{"class":622},[52,52522,52524,52526,52528,52530,52532,52534,52536],{"class":54,"line":52523},229,[52,52525,36325],{"class":622},[52,52527,2099],{"class":160},[52,52529,47500],{"class":622},[52,52531,36781],{"class":8172},[52,52533,2099],{"class":160},[52,52535,4019],{"class":90},[52,52537,170],{"class":622},[52,52539,52541],{"class":54,"line":52540},230,[52,52542,36793],{"class":622},[1486,52544,52546],{"id":52545},"_242测试代码","2.4.2.测试代码",[274,52548,52549],{},"使用测试集进行测试与推理",[19,52551,52553],{"className":33310,"code":52552,"language":33312,"meta":28,"style":28},"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",[26,52554,52555,52561,52571,52581,52592,52602,52606,52610,52618,52623,52627,52644,52648,52652,52656,52660,52664,52696,52700,52708,52712,52724,52728,52732,52736,52740,52744,52748,52752,52756,52774,52788,52792,52802,52812,52822,52828,52832,52836,52844,52848,52864,52872,52876,52880,52888,52896,52900,52904,52908,52912,52918,52922,52932,52940,52948,52952,52956,52960,52968,52972,52988,52992,52996,53000,53012,53016,53028,53032,53036,53048,53052,53062,53066,53070,53082,53086,53094,53098,53102,53110,53114,53122,53126,53130,53134,53138,53142,53158,53166,53170,53174,53192,53198,53202,53212,53220,53228,53232,53236,53240,53244,53252,53256,53272,53276,53284,53292],{"__ignoreMap":28},[52,52556,52557,52559],{"class":54,"line":55},[52,52558,33324],{"class":160},[52,52560,33327],{"class":622},[52,52562,52563,52565,52567,52569],{"class":54,"line":69},[52,52564,33324],{"class":160},[52,52566,34347],{"class":622},[52,52568,34315],{"class":160},[52,52570,34352],{"class":622},[52,52572,52573,52575,52577,52579],{"class":54,"line":82},[52,52574,33669],{"class":160},[52,52576,34330],{"class":622},[52,52578,33324],{"class":160},[52,52580,34335],{"class":622},[52,52582,52583,52585,52587,52589],{"class":54,"line":97},[52,52584,33669],{"class":160},[52,52586,34300],{"class":622},[52,52588,33324],{"class":160},[52,52590,52591],{"class":622}," ImageFolder\n",[52,52593,52594,52596,52598,52600],{"class":54,"line":112},[52,52595,33669],{"class":160},[52,52597,34846],{"class":622},[52,52599,33324],{"class":160},[52,52601,47572],{"class":622},[52,52603,52604],{"class":54,"line":119},[52,52605,116],{"emptyLinePlaceholder":115},[52,52607,52608],{"class":54,"line":130},[52,52609,36883],{"class":332},[52,52611,52612,52614,52616],{"class":54,"line":136},[52,52613,34879],{"class":160},[52,52615,36890],{"class":58},[52,52617,34885],{"class":622},[52,52619,52620],{"class":54,"line":141},[52,52621,52622],{"class":332},"   # 导入自己的数据集，并进行数据处理\n",[52,52624,52625],{"class":54,"line":146},[52,52626,50892],{"class":332},[52,52628,52629,52631,52633,52635,52637,52639,52642],{"class":54,"line":152},[52,52630,50897],{"class":90},[52,52632,2099],{"class":160},[52,52634,3782],{"class":160},[52,52636,3364],{"class":62},[52,52638,3670],{"class":90},[52,52640,52641],{"class":50908},"\u002Fdata\u002Ftest",[52,52643,28079],{"class":62},[52,52645,52646],{"class":54,"line":157},[52,52647,116],{"emptyLinePlaceholder":115},[52,52649,52650],{"class":54,"line":173},[52,52651,50920],{"class":332},[52,52653,52654],{"class":54,"line":178},[52,52655,50925],{"class":332},[52,52657,52658],{"class":54,"line":184},[52,52659,50930],{"class":332},[52,52661,52662],{"class":54,"line":189},[52,52663,50935],{"class":332},[52,52665,52666,52668,52670,52672,52674,52676,52678,52680,52682,52684,52686,52688,52690,52692,52694],{"class":54,"line":201},[52,52667,50940],{"class":622},[52,52669,2099],{"class":160},[52,52671,50945],{"class":622},[52,52673,50948],{"class":90},[52,52675,3491],{"class":622},[52,52677,50953],{"class":90},[52,52679,3491],{"class":622},[52,52681,50958],{"class":90},[52,52683,50961],{"class":622},[52,52685,50964],{"class":90},[52,52687,3491],{"class":622},[52,52689,50969],{"class":90},[52,52691,3491],{"class":622},[52,52693,50974],{"class":90},[52,52695,7616],{"class":622},[52,52697,52698],{"class":54,"line":206},[52,52699,50981],{"class":332},[52,52701,52702,52704,52706],{"class":54,"line":224},[52,52703,50986],{"class":622},[52,52705,2099],{"class":160},[52,52707,50991],{"class":622},[52,52709,52710],{"class":54,"line":229},[52,52711,50996],{"class":332},[52,52713,52714,52716,52718,52720,52722],{"class":54,"line":241},[52,52715,51001],{"class":622},[52,52717,34433],{"class":90},[52,52719,3491],{"class":622},[52,52721,34433],{"class":90},[52,52723,45554],{"class":622},[52,52725,52726],{"class":54,"line":246},[52,52727,51014],{"class":332},[52,52729,52730],{"class":54,"line":252},[52,52731,51019],{"class":622},[52,52733,52734],{"class":54,"line":257},[52,52735,51024],{"class":622},[52,52737,52738],{"class":54,"line":266},[52,52739,51029],{"class":332},[52,52741,52742],{"class":54,"line":4722},[52,52743,51034],{"class":332},[52,52745,52746],{"class":54,"line":4727},[52,52747,116],{"emptyLinePlaceholder":115},[52,52749,52750],{"class":54,"line":4741},[52,52751,51043],{"class":332},[52,52753,52754],{"class":54,"line":4746},[52,52755,51048],{"class":332},[52,52757,52758,52760,52762,52764,52766,52768,52770,52772],{"class":54,"line":5538},[52,52759,36897],{"class":622},[52,52761,2099],{"class":160},[52,52763,51057],{"class":622},[52,52765,51060],{"class":90},[52,52767,3491],{"class":622},[52,52769,51065],{"class":8172},[52,52771,2099],{"class":160},[52,52773,51070],{"class":622},[52,52775,52776,52778,52780,52782,52784,52786],{"class":54,"line":5552},[52,52777,36954],{"class":622},[52,52779,2099],{"class":160},[52,52781,34466],{"class":622},[52,52783,34469],{"class":8172},[52,52785,2099],{"class":160},[52,52787,36965],{"class":622},[52,52789,52790],{"class":54,"line":5560},[52,52791,36970],{"class":332},[52,52793,52794,52796,52798,52800],{"class":54,"line":5565},[52,52795,36975],{"class":8172},[52,52797,2099],{"class":160},[52,52799,3332],{"class":90},[52,52801,34398],{"class":622},[52,52803,52804,52806,52808,52810],{"class":54,"line":5571},[52,52805,36986],{"class":8172},[52,52807,2099],{"class":160},[52,52809,34408],{"class":90},[52,52811,34398],{"class":622},[52,52813,52814,52816,52818,52820],{"class":54,"line":5577},[52,52815,36997],{"class":8172},[52,52817,2099],{"class":160},[52,52819,3306],{"class":90},[52,52821,170],{"class":622},[52,52823,52824,52826],{"class":54,"line":5582},[52,52825,7049],{"class":160},[52,52827,37010],{"class":622},[52,52829,52830],{"class":54,"line":10904},[52,52831,116],{"emptyLinePlaceholder":115},[52,52833,52834],{"class":54,"line":10928},[52,52835,37019],{"class":332},[52,52837,52838,52840,52842],{"class":54,"line":10933},[52,52839,34879],{"class":160},[52,52841,37026],{"class":58},[52,52843,37029],{"class":622},[52,52845,52846],{"class":54,"line":10939},[52,52847,37034],{"class":332},[52,52849,52850,52852,52854,52856,52858,52860,52862],{"class":54,"line":10966},[52,52851,34169],{"class":622},[52,52853,2099],{"class":160},[52,52855,34176],{"class":62},[52,52857,4671],{"class":160},[52,52859,34181],{"class":622},[52,52861,4668],{"class":160},[52,52863,37051],{"class":62},[52,52865,52866,52868,52870],{"class":54,"line":10971},[52,52867,34221],{"class":622},[52,52869,2099],{"class":160},[52,52871,35221],{"class":622},[52,52873,52874],{"class":54,"line":10977},[52,52875,116],{"emptyLinePlaceholder":115},[52,52877,52878],{"class":54,"line":10989},[52,52879,37068],{"class":332},[52,52881,52882,52884,52886],{"class":54,"line":11001},[52,52883,37073],{"class":622},[52,52885,2099],{"class":160},[52,52887,35274],{"class":90},[52,52889,52890,52892,52894],{"class":54,"line":11013},[52,52891,37082],{"class":622},[52,52893,2099],{"class":160},[52,52895,2719],{"class":90},[52,52897,52898],{"class":54,"line":12672},[52,52899,116],{"emptyLinePlaceholder":115},[52,52901,52902],{"class":54,"line":12697},[52,52903,37095],{"class":332},[52,52905,52906],{"class":54,"line":12720},[52,52907,37100],{"class":332},[52,52909,52910],{"class":54,"line":12744},[52,52911,37105],{"class":332},[52,52913,52914,52916],{"class":54,"line":12749},[52,52915,37110],{"class":160},[52,52917,35816],{"class":622},[52,52919,52920],{"class":54,"line":12754},[52,52921,37117],{"class":332},[52,52923,52924,52926,52928,52930],{"class":54,"line":12759},[52,52925,6362],{"class":160},[52,52927,37124],{"class":622},[52,52929,28988],{"class":160},[52,52931,37129],{"class":622},[52,52933,52934,52936,52938],{"class":54,"line":12768},[52,52935,37134],{"class":622},[52,52937,2099],{"class":160},[52,52939,37139],{"class":622},[52,52941,52942,52944,52946],{"class":54,"line":12773},[52,52943,37144],{"class":622},[52,52945,2099],{"class":160},[52,52947,37149],{"class":622},[52,52949,52950],{"class":54,"line":12779},[52,52951,37154],{"class":332},[52,52953,52954],{"class":54,"line":12800},[52,52955,35807],{"class":622},[52,52957,52958],{"class":54,"line":12806},[52,52959,37163],{"class":332},[52,52961,52962,52964,52966],{"class":54,"line":12820},[52,52963,35592],{"class":622},[52,52965,2099],{"class":160},[52,52967,37172],{"class":622},[52,52969,52970],{"class":54,"line":12826},[52,52971,37177],{"class":332},[52,52973,52974,52976,52978,52980,52982,52984,52986],{"class":54,"line":12853},[52,52975,35609],{"class":622},[52,52977,2099],{"class":160},[52,52979,35614],{"class":622},[52,52981,35617],{"class":8172},[52,52983,2099],{"class":160},[52,52985,3332],{"class":90},[52,52987,170],{"class":622},[52,52989,52990],{"class":54,"line":12862},[52,52991,37198],{"class":332},[52,52993,52994],{"class":54,"line":12868},[52,52995,37203],{"class":332},[52,52997,52998],{"class":54,"line":12876},[52,52999,37208],{"class":332},[52,53001,53002,53004,53006,53008,53010],{"class":54,"line":12881},[52,53003,37213],{"class":622},[52,53005,12433],{"class":160},[52,53007,35719],{"class":622},[52,53009,5909],{"class":160},[52,53011,37222],{"class":622},[52,53013,53014],{"class":54,"line":19560},[52,53015,37227],{"class":332},[52,53017,53018,53020,53022,53024,53026],{"class":54,"line":19566},[52,53019,37232],{"class":622},[52,53021,12433],{"class":160},[52,53023,37237],{"class":622},[52,53025,3306],{"class":90},[52,53027,170],{"class":622},[52,53029,53030],{"class":54,"line":19589},[52,53031,116],{"emptyLinePlaceholder":115},[52,53033,53034],{"class":54,"line":19595},[52,53035,37250],{"class":332},[52,53037,53038,53040,53042,53044,53046],{"class":54,"line":19618},[52,53039,37255],{"class":622},[52,53041,2099],{"class":160},[52,53043,37260],{"class":622},[52,53045,3696],{"class":160},[52,53047,37265],{"class":622},[52,53049,53050],{"class":54,"line":19632},[52,53051,37270],{"class":332},[52,53053,53054,53056,53058,53060],{"class":54,"line":19652},[52,53055,35383],{"class":90},[52,53057,3121],{"class":622},[52,53059,37279],{"class":62},[52,53061,37282],{"class":622},[52,53063,53064],{"class":54,"line":19658},[52,53065,116],{"emptyLinePlaceholder":115},[52,53067,53068],{"class":54,"line":19669},[52,53069,37291],{"class":332},[52,53071,53072,53074,53076,53078,53080],{"class":54,"line":19692},[52,53073,4509],{"class":160},[52,53075,34152],{"class":90},[52,53077,5909],{"class":160},[52,53079,34157],{"class":62},[52,53081,6698],{"class":622},[52,53083,53084],{"class":54,"line":19714},[52,53085,37308],{"class":332},[52,53087,53088,53090,53092],{"class":54,"line":19719},[52,53089,34221],{"class":622},[52,53091,2099],{"class":160},[52,53093,47483],{"class":622},[52,53095,53096],{"class":54,"line":19725},[52,53097,37321],{"class":332},[52,53099,53100],{"class":54,"line":19739},[52,53101,37326],{"class":332},[52,53103,53104,53106,53108],{"class":54,"line":19752},[52,53105,37331],{"class":622},[52,53107,37334],{"class":62},[52,53109,33429],{"class":622},[52,53111,53112],{"class":54,"line":19757},[52,53113,37341],{"class":332},[52,53115,53116,53118,53120],{"class":54,"line":19771},[52,53117,36954],{"class":622},[52,53119,2099],{"class":160},[52,53121,37350],{"class":622},[52,53123,53124],{"class":54,"line":19776},[52,53125,37355],{"class":332},[52,53127,53128],{"class":54,"line":19782},[52,53129,37360],{"class":622},[52,53131,53132],{"class":54,"line":19787},[52,53133,116],{"emptyLinePlaceholder":115},[52,53135,53136],{"class":54,"line":19801},[52,53137,37369],{"class":332},[52,53139,53140],{"class":54,"line":19806},[52,53141,37374],{"class":332},[52,53143,53144,53146,53148,53150,53152,53154,53156],{"class":54,"line":19811},[52,53145,34169],{"class":622},[52,53147,2099],{"class":160},[52,53149,34176],{"class":62},[52,53151,4671],{"class":160},[52,53153,34181],{"class":622},[52,53155,4668],{"class":160},[52,53157,37051],{"class":62},[52,53159,53160,53162,53164],{"class":54,"line":19825},[52,53161,34221],{"class":622},[52,53163,2099],{"class":160},[52,53165,35221],{"class":622},[52,53167,53168],{"class":54,"line":19837},[52,53169,37403],{"class":332},[52,53171,53172],{"class":54,"line":19842},[52,53173,37408],{"class":332},[52,53175,53176,53178,53180,53182,53185,53187,53190],{"class":54,"line":19855},[52,53177,37413],{"class":622},[52,53179,2099],{"class":160},[52,53181,4002],{"class":622},[52,53183,53184],{"class":62},"'猫'",[52,53186,3491],{"class":622},[52,53188,53189],{"class":62},"'狗'",[52,53191,36178],{"class":622},[52,53193,53194,53196],{"class":54,"line":19860},[52,53195,37110],{"class":160},[52,53197,35816],{"class":622},[52,53199,53200],{"class":54,"line":19865},[52,53201,37478],{"class":332},[52,53203,53204,53206,53208,53210],{"class":54,"line":19870},[52,53205,6362],{"class":160},[52,53207,37485],{"class":622},[52,53209,28988],{"class":160},[52,53211,37129],{"class":622},[52,53213,53214,53216,53218],{"class":54,"line":19883},[52,53215,35542],{"class":622},[52,53217,2099],{"class":160},[52,53219,35547],{"class":622},[52,53221,53222,53224,53226],{"class":54,"line":19888},[52,53223,35557],{"class":622},[52,53225,2099],{"class":160},[52,53227,35562],{"class":622},[52,53229,53230],{"class":54,"line":35565},[52,53231,116],{"emptyLinePlaceholder":115},[52,53233,53234],{"class":54,"line":35571},[52,53235,37514],{"class":332},[52,53237,53238],{"class":54,"line":35577},[52,53239,35807],{"class":622},[52,53241,53242],{"class":54,"line":35583},[52,53243,37523],{"class":332},[52,53245,53246,53248,53250],{"class":54,"line":35589},[52,53247,35592],{"class":622},[52,53249,2099],{"class":160},[52,53251,35597],{"class":622},[52,53253,53254],{"class":54,"line":35600},[52,53255,37536],{"class":332},[52,53257,53258,53260,53262,53264,53266,53268,53270],{"class":54,"line":35606},[52,53259,35609],{"class":622},[52,53261,2099],{"class":160},[52,53263,35614],{"class":622},[52,53265,35617],{"class":8172},[52,53267,2099],{"class":160},[52,53269,3332],{"class":90},[52,53271,170],{"class":622},[52,53273,53274],{"class":54,"line":35626},[52,53275,37557],{"class":332},[52,53277,53278,53280,53282],{"class":54,"line":35632},[52,53279,37562],{"class":622},[52,53281,2099],{"class":160},[52,53283,37567],{"class":622},[52,53285,53286,53288,53290],{"class":54,"line":35643},[52,53287,37572],{"class":622},[52,53289,2099],{"class":160},[52,53291,37577],{"class":622},[52,53293,53294,53296,53298,53300,53302,53304,53306,53308],{"class":54,"line":35649},[52,53295,37582],{"class":90},[52,53297,3121],{"class":622},[52,53299,37587],{"class":62},[52,53301,37590],{"class":622},[52,53303,37593],{"class":62},[52,53305,3491],{"class":622},[52,53307,37598],{"class":62},[52,53309,37601],{"class":622},[3015,53311,53312],{},"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":28,"searchDepth":69,"depth":69,"links":53314},[53315,53316,53317,53318],{"id":33523,"depth":82,"text":33524},{"id":40771,"depth":82,"text":40772},{"id":44204,"depth":82,"text":44205},{"id":48213,"depth":82,"text":48214},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":33515,"description":3046},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":53325,"title":53326,"body":53327,"description":3046,"extension":3047,"meta":53334,"navigation":115,"path":53335,"seo":53336,"stem":53337,"__hash__":53338},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":53328,"toc":53332},[53329],[10,53330,53326],{"id":53331},"_3yolo模型学习",{"title":28,"searchDepth":69,"depth":69,"links":53333},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":53326,"description":3046},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":53340,"title":53341,"body":53342,"description":53349,"extension":3047,"meta":53350,"navigation":115,"path":53352,"seo":53353,"stem":53354,"__hash__":53355},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":53343,"toc":53347},[53344],[274,53345,53346],{},"yolo模型还未补充",{"title":28,"searchDepth":69,"depth":69,"links":53348},[],"深度学习学习",{"category":53351},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":53341,"description":53349},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":53357,"title":53358,"body":53359,"description":3046,"extension":3047,"meta":53384,"navigation":115,"path":53385,"seo":53386,"stem":53387,"__hash__":53388},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":53360,"toc":53382},[53361,53364,53367,53372,53379],[10,53362,53358],{"id":53363},"_1工具",[274,53365,53366],{},"提示错误插件：有问题会提前报错",[274,53368,53369],{},[280,53370],{"alt":28,"src":53371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[274,53373,53374],{},[300,53375,53378],{"href":53376,"rel":53377},"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",[304],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[274,53380,53381],{},"alt键加上下箭头可以实现语句的移动",{"title":28,"searchDepth":69,"depth":69,"links":53383},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":53358,"description":3046},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":53390,"title":53391,"body":53392,"description":3046,"extension":3047,"meta":56255,"navigation":115,"path":56256,"seo":56257,"stem":56258,"__hash__":56259},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":53393,"toc":56206},[53394,53397,53401,53405,53410,53413,53418,53422,53429,53434,53441,53446,53453,53458,53462,53467,53470,53474,53479,53483,53488,53491,53494,53497,53500,53503,53506,53509,53512,53517,53522,53527,53531,53534,53537,53541,53546,53549,53557,53562,53579,53587,53592,53597,53602,53607,53612,53615,53620,53625,53629,53638,53643,53648,53652,53657,53660,53664,53669,53677,53682,53687,53690,53695,53700,53705,53708,53711,53714,53719,53724,53727,53732,53735,53740,53743,53746,53749,53754,53757,53760,53775,53780,53785,53790,53793,53796,53799,53813,53816,53821,53826,53829,53832,53835,53838,53841,53844,53847,53851,53855,53860,53864,53867,53872,53877,53880,53885,53888,53892,53897,53900,53903,53906,53909,53912,53915,53918,53921,53924,53928,53933,53938,53943,53946,53949,53953,53958,53961,53965,53968,53971,53976,53979,53982,53986,53990,53993,53998,54003,54006,54035,54040,54045,54050,54055,54059,54064,54068,54073,54076,54080,54084,54089,54093,54098,54103,54107,54112,54115,54117,54120,54125,54129,54134,54138,54142,54147,54152,54157,54162,54166,54171,54176,54181,54184,54187,54192,54195,54200,54205,54210,54215,54219,55026,55030,55372,55377,55380,55383,55386,55389,55392,55395,55398,55401,55403,55406,55408,55411,55415,55420,55423,55426,55429,55433,55438,55443,55463,55466,55470,55475,55480,55497,55501,55530,55534,55556,55558,55597,55605,55611,55615,55618,55621,55626,55631,55634,55637,55640,55645,55650,55653,55656,55659,55662,55665,55668,55671,55674,55677,55680,55683,55685,55688,55691,55694,55697,55700,55703,55706,55709,55713,55718,55721,55726,55729,55732,55735,55738,55741,55744,55747,55749,55752,55755,55758,55761,55764,55767,55771,55774,55783,55786,55791,55794,55799,55802,55805,55808,55811,55814,55817,55820,55824,55828,55831,55834,55839,55844,55849,55853,55858,55863,55866,55869,55872,55875,55878,55883,55886,55891,55893,55898,55901,55905,55910,55913,55916,55921,55925,55928,55933,55936,55939,55968,55973,55976,55979,55982,55985,55988,55992,55995,56081,56085,56088,56093,56098,56105,56108,56111,56114,56117,56120,56125,56130,56133,56136,56139,56142,56145,56148,56151,56154,56157,56159,56162,56166,56171,56176,56181,56184,56189,56194,56197,56200,56203],[10,53395,53391],{"id":53396},"_2基础语法",[14,53398,53400],{"id":53399},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[30,53402,53404],{"id":53403},"_211-js组成","2.1.1 js组成",[1070,53406,53407],{},[1073,53408,53409],{},"js是编程语言，html和css不是编程语言，是标记语言",[274,53411,53412],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1070,53414,53415],{"start":69},[1073,53416,53417],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[30,53419,53421],{"id":53420},"_212-js书写位置","2.1.2 js书写位置",[1070,53423,53424],{},[1073,53425,53426],{},[538,53427,53428],{},"内部 JavaScript",[274,53430,53431],{},[280,53432],{"alt":28,"src":53433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1070,53435,53436],{"start":69},[1073,53437,53438],{},[538,53439,53440],{},"外部 JavaScript",[274,53442,53443],{},[280,53444],{"alt":28,"src":53445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1070,53447,53448],{"start":82},[1073,53449,53450],{},[538,53451,53452],{},"内联 JavaScript",[274,53454,53455],{},[280,53456],{"alt":28,"src":53457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[30,53459,53461],{"id":53460},"_213-javascript注释","2.1.3 JavaScript注释",[274,53463,53464],{},[280,53465],{"alt":28,"src":53466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[274,53468,53469],{},"alt+shift+a一定要记住！",[30,53471,53473],{"id":53472},"_214-javascript结束符","2.1.4 JavaScript结束符",[274,53475,53476],{},[280,53477],{"alt":28,"src":53478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[30,53480,53482],{"id":53481},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1070,53484,53485],{},[1073,53486,53487],{},"输出语法：",[274,53489,53490],{},"①document.write('要出的内容')",[274,53492,53493],{},"向body内输出内容；",[274,53495,53496],{},"如果输出的内容写的是标签，也会被解析cheng",[274,53498,53499],{},"②alert('要出的内容')",[274,53501,53502],{},"页面弹出警告对话框",[274,53504,53505],{},"③console.log('控制台打印')",[274,53507,53508],{},"控制台输出语法，程序员调试使用",[274,53510,53511],{},"输入log就行，自动生成：",[274,53513,53514],{},[280,53515],{"alt":28,"src":53516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1070,53518,53519],{"start":69},[1073,53520,53521],{},"输入语法：",[274,53523,53524],{},[280,53525],{"alt":28,"src":53526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[30,53528,53530],{"id":53529},"_2116-字面量","21.1.6 字面量",[274,53532,53533],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[274,53535,53536],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,53538,53540],{"id":53539},"_22-变量","2.2 变量",[1070,53542,53543],{},[1073,53544,53545],{},"变量声明",[274,53547,53548],{},"let 变量名",[4118,53550,53551,53554],{},[1073,53552,53553],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[1073,53555,53556],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1070,53558,53559],{"start":69},[1073,53560,53561],{},"变量赋值",[19,53563,53567],{"className":53564,"code":53565,"language":53566,"meta":28,"style":28},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[26,53568,53569,53574],{"__ignoreMap":28},[52,53570,53571],{"class":54,"line":55},[52,53572,53573],{"class":622},"let age\n",[52,53575,53576],{"class":54,"line":69},[52,53577,53578],{"class":622},"age=18\n",[1070,53580,53581,53584],{"start":82},[1073,53582,53583],{},"连这些（变量的初始化）：let age=18",[1073,53585,53586],{},"更新变量",[274,53588,53589],{},[280,53590],{"alt":28,"src":53591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1070,53593,53594],{"start":112},[1073,53595,53596],{},"声明多个变量",[274,53598,53599],{},[280,53600],{"alt":28,"src":53601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1070,53603,53604],{"start":119},[1073,53605,53606],{},"变量命名规则与规范",[274,53608,53609],{},[280,53610],{"alt":28,"src":53611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[274,53613,53614],{},"遵守小驼峰！",[1070,53616,53617],{"start":130},[1073,53618,53619],{},"变量拓展-let和var的区别",[274,53621,53622],{},[280,53623],{"alt":28,"src":53624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,53626,53628],{"id":53627},"_23-数组","2.3 数组",[19,53630,53632],{"className":53564,"code":53631,"language":53566,"meta":28,"style":28},"let arr = []\n",[26,53633,53634],{"__ignoreMap":28},[52,53635,53636],{"class":54,"line":55},[52,53637,53631],{"class":622},[274,53639,53640],{},[280,53641],{"alt":28,"src":53642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[274,53644,53645],{},[280,53646],{"alt":28,"src":53647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,53649,53651],{"id":53650},"_24-常量","2.4 常量",[274,53653,53654],{},[280,53655],{"alt":28,"src":53656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[274,53658,53659],{},"const — 类似于 let ，但是变量的值无法被修改",[14,53661,53663],{"id":53662},"_25-数据类型","2.5 数据类型",[274,53665,53666],{},[280,53667],{"alt":28,"src":53668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1070,53670,53671,53674],{},[1073,53672,53673],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[1073,53675,53676],{},"算数运算符：",[274,53678,53679],{},[280,53680],{"alt":28,"src":53681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1070,53683,53684],{"start":82},[1073,53685,53686],{},"数字类型（Number）",[274,53688,53689],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[274,53691,53692],{},[280,53693],{"alt":28,"src":53694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1070,53696,53697],{"start":97},[1073,53698,53699],{},"字符串类型（string）",[274,53701,53702],{},[280,53703],{"alt":28,"src":53704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[274,53706,53707],{},"反引号也是可以使用的",[274,53709,53710],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[274,53712,53713],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1070,53715,53716],{"start":112},[1073,53717,53718],{},"模板字符串",[274,53720,53721],{},[280,53722],{"alt":28,"src":53723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[274,53725,53726],{},"类似于python的字符串格式化",[1070,53728,53729],{"start":119},[1073,53730,53731],{},"布尔类型",[274,53733,53734],{},"true 和 false",[1070,53736,53737],{"start":130},[1073,53738,53739],{},"未定义类型（underfined）",[274,53741,53742],{},"表示没有赋值",[274,53744,53745],{},"未定义类型是比较特殊的类型，只有一个值undefined",[274,53747,53748],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1070,53750,53751],{"start":136},[1073,53752,53753],{},"null（空类型）",[274,53755,53756],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[274,53758,53759],{},"赋值了，但是内容为空",[19,53761,53763],{"className":53564,"code":53762,"language":53566,"meta":28,"style":28},"typeof null\n输出的是'object'，是一个对象数据类型\n",[26,53764,53765,53770],{"__ignoreMap":28},[52,53766,53767],{"class":54,"line":55},[52,53768,53769],{"class":622},"typeof null\n",[52,53771,53772],{"class":54,"line":69},[52,53773,53774],{"class":622},"输出的是'object'，是一个对象数据类型\n",[1070,53776,53777],{"start":141},[1073,53778,53779],{},"控制台检测数据类型",[274,53781,53782],{},[280,53783],{"alt":28,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1070,53786,53787],{"start":146},[1073,53788,53789],{},"类型转换",[274,53791,53792],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[274,53794,53795],{},"转换方式：隐式转换和显示转换",[274,53797,53798],{},"①隐式转换",[4118,53800,53801,53804,53807,53810],{},[1073,53802,53803],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[1073,53805,53806],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[1073,53808,53809],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[1073,53811,53812],{},"任何数据和字符串相加结果都是字符串",[274,53814,53815],{},"②显示转换",[274,53817,53818],{},[280,53819],{"alt":28,"src":53820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[274,53822,53823],{},[280,53824],{"alt":28,"src":53825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[274,53827,53828],{},"在输入的时候要用好隐式转换，简单写起来",[274,53830,53831],{},"let num = +prompt(’请输入数字：‘)",[274,53833,53834],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[274,53836,53837],{},"console.log(parseInt('12.333px'))",[274,53839,53840],{},"输出为：12",[274,53842,53843],{},"console.log(parseInt('a'a'a12.333px'))",[274,53845,53846],{},"输出：NaN",[14,53848,53850],{"id":53849},"_26-运算符","2.6 运算符",[30,53852,53854],{"id":53853},"_261-赋值运算符","2.6.1 赋值运算符",[274,53856,53857],{},[280,53858],{"alt":28,"src":53859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[30,53861,53863],{"id":53862},"_262-一元运算符","2.6.2 一元运算符",[274,53865,53866],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[274,53868,53869],{},[280,53870],{"alt":28,"src":53871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[274,53873,53874],{},[280,53875],{"alt":28,"src":53876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[274,53878,53879],{},"两者的区别：",[274,53881,53882],{},[280,53883],{"alt":28,"src":53884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[274,53886,53887],{},"前置先自加；后置后加，代码执行完之后再加",[30,53889,53891],{"id":53890},"_263-比较运算符","2.6.3 比较运算符",[274,53893,53894],{},[280,53895],{"alt":28,"src":53896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[274,53898,53899],{},"比较运算符也有隐式转换",[274,53901,53902],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[274,53904,53905],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[274,53907,53908],{},"要使用三等，开发的时候",[274,53910,53911],{},"NaN不等于任何人，包括它自己",[274,53913,53914],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[274,53916,53917],{},"7\u002F10=0.7",[274,53919,53920],{},"最后：0.5+0.2=0.7",[274,53922,53923],{},"字符串比较，比较的是字符对应的ASCII码",[30,53925,53927],{"id":53926},"_264-逻辑运算符","2.6.4 逻辑运算符",[274,53929,53930],{},[280,53931],{"alt":28,"src":53932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[274,53934,53935],{},[280,53936],{"alt":28,"src":53937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[274,53939,53940],{},[280,53941],{"alt":28,"src":53942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[274,53944,53945],{},"上述题目选D",[274,53947,53948],{},"与真2假1；或真1假2",[30,53950,53952],{"id":53951},"_265-运算符优先级","2.6.5 运算符优先级",[274,53954,53955],{},[280,53956],{"alt":28,"src":53957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[274,53959,53960],{},"先算逻辑与，后算逻辑或",[14,53962,53964],{"id":53963},"_27-语句","2.7 语句",[274,53966,53967],{},"表达式：是可以被求值的代码，会有结果给我们",[274,53969,53970],{},"语句：语句是可以被执行的代码，例如prompt()",[274,53972,53973],{},[280,53974],{"alt":28,"src":53975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[274,53977,53978],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[274,53980,53981],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[30,53983,53985],{"id":53984},"_271-分支语句","2.7.1 分支语句",[1486,53987,53989],{"id":53988},"_2711-if分支语句","2.7.1.1 if分支语句",[274,53991,53992],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1070,53994,53995],{},[1073,53996,53997],{},"单分支语句",[274,53999,54000],{},[280,54001],{"alt":28,"src":54002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[274,54004,54005],{},"除了0，所有数字都为真",[19,54007,54009],{"className":53564,"code":54008,"language":53566,"meta":28,"style":28},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[26,54010,54011,54016,54021,54026,54030],{"__ignoreMap":28},[52,54012,54013],{"class":54,"line":55},[52,54014,54015],{"class":622},"if（0) {\n",[52,54017,54018],{"class":54,"line":69},[52,54019,54020],{"class":622},"    let a=1\n",[52,54022,54023],{"class":54,"line":82},[52,54024,54025],{"class":622},"    alert(typeof a)\n",[52,54027,54028],{"class":54,"line":97},[52,54029,4543],{"class":622},[52,54031,54032],{"class":54,"line":112},[52,54033,54034],{"class":622},"不输出，括号为假\n",[1070,54036,54037],{"start":69},[1073,54038,54039],{},"双分支语句",[274,54041,54042],{},[280,54043],{"alt":28,"src":54044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1070,54046,54047],{"start":82},[1073,54048,54049],{},"多分支语句",[274,54051,54052],{},[280,54053],{"alt":28,"src":54054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[1486,54056,54058],{"id":54057},"_2712-三元运算符","2.7.1.2 三元运算符",[274,54060,54061],{},[280,54062],{"alt":28,"src":54063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[1486,54065,54067],{"id":54066},"_2713-switch语句","2.7.1.3 switch语句",[274,54069,54070],{},[280,54071],{"alt":28,"src":54072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[274,54074,54075],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[30,54077,54079],{"id":54078},"_272-循环语句","2.7.2 循环语句",[1486,54081,54083],{"id":54082},"_2721-断点演示","2.7.2.1 断点演示",[274,54085,54086],{},[280,54087],{"alt":28,"src":54088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[1486,54090,54092],{"id":54091},"_2722-while循环","2.7.2.2 while循环",[274,54094,54095],{},[280,54096],{"alt":28,"src":54097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[274,54099,54100],{},[280,54101],{"alt":28,"src":54102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[1486,54104,54106],{"id":54105},"_2723-for循环","2.7.2.3 for循环",[274,54108,54109],{},[280,54110],{"alt":28,"src":54111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[274,54113,54114],{},"for(;;) {",[274,54116,4058],{},[274,54118,54119],{},"表示无限循环",[274,54121,54122],{},[280,54123],{"alt":28,"src":54124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[1486,54126,54128],{"id":54127},"_2724-循环的退出","2.7.2.4 循环的退出",[274,54130,54131],{},[280,54132],{"alt":28,"src":54133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,54135,54137],{"id":54136},"_28-数组","2.8 数组",[30,54139,54141],{"id":54140},"_281-基础认识","2.8.1 基础认识",[274,54143,54144],{},[280,54145],{"alt":28,"src":54146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[274,54148,54149],{},[280,54150],{"alt":28,"src":54151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[274,54153,54154],{},[280,54155],{"alt":28,"src":54156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[274,54158,54159],{},[280,54160],{"alt":28,"src":54161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[30,54163,54165],{"id":54164},"_282-操作数组","2.8.2 操作数组",[274,54167,54168],{},[280,54169],{"alt":28,"src":54170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1070,54172,54173],{},[1073,54174,54175],{},"添加元素",[274,54177,54178],{},[280,54179],{"alt":28,"src":54180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[274,54182,54183],{},"console.log(arr.push('green'))",[274,54185,54186],{},"输出结果：为新数组的长度",[274,54188,54189],{},[280,54190],{"alt":28,"src":54191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[274,54193,54194],{},"push用的非常多，一定要记住",[1070,54196,54197],{},[1073,54198,54199],{},"删除元素",[274,54201,54202],{},[280,54203],{"alt":28,"src":54204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[274,54206,54207],{},[280,54208],{"alt":28,"src":54209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[274,54211,54212],{},[280,54213],{"alt":28,"src":54214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[30,54216,54218],{"id":54217},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[19,54220,54222],{"className":53564,"code":54221,"language":53566,"meta":28,"style":28},"\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",[26,54223,54224,54239,54255,54259,54268,54286,54310,54332,54346,54354,54361,54373,54384,54388,54392,54399,54411,54426,54439,54458,54475,54490,54502,54514,54526,54530,54534,54545,54555,54567,54579,54591,54602,54606,54610,54622,54626,54640,54644,54648,54659,54673,54685,54699,54703,54712,54721,54725,54734,54738,54747,54752,54757,54770,54798,54803,54808,54833,54838,54842,54847,54852,54867,54871,54876,54906,54918,54934,54950,54964,54969,54976,54980,54985,54998,55006,55014,55018],{"__ignoreMap":28},[52,54225,54226,54229,54233,54236],{"class":54,"line":55},[52,54227,54228],{"class":622},"\u003C!",[52,54230,54232],{"class":54231},"s9eBZ","DOCTYPE",[52,54234,54235],{"class":58}," html",[52,54237,54238],{"class":622},">\n",[52,54240,54241,54243,54245,54248,54250,54253],{"class":54,"line":69},[52,54242,4022],{"class":622},[52,54244,53566],{"class":54231},[52,54246,54247],{"class":58}," lang",[52,54249,2099],{"class":622},[52,54251,54252],{"class":62},"\"en\"",[52,54254,54238],{"class":622},[52,54256,54257],{"class":54,"line":82},[52,54258,116],{"emptyLinePlaceholder":115},[52,54260,54261,54263,54266],{"class":54,"line":97},[52,54262,4022],{"class":622},[52,54264,54265],{"class":54231},"head",[52,54267,54238],{"class":622},[52,54269,54270,54273,54276,54279,54281,54284],{"class":54,"line":112},[52,54271,54272],{"class":622},"    \u003C",[52,54274,54275],{"class":54231},"meta",[52,54277,54278],{"class":58}," charset",[52,54280,2099],{"class":622},[52,54282,54283],{"class":62},"\"UTF-8\"",[52,54285,54238],{"class":622},[52,54287,54288,54290,54292,54295,54297,54300,54303,54305,54308],{"class":54,"line":119},[52,54289,54272],{"class":622},[52,54291,54275],{"class":54231},[52,54293,54294],{"class":58}," http-equiv",[52,54296,2099],{"class":622},[52,54298,54299],{"class":62},"\"X-UA-Compatible\"",[52,54301,54302],{"class":58}," content",[52,54304,2099],{"class":622},[52,54306,54307],{"class":62},"\"IE=edge\"",[52,54309,54238],{"class":622},[52,54311,54312,54314,54316,54318,54320,54323,54325,54327,54330],{"class":54,"line":130},[52,54313,54272],{"class":622},[52,54315,54275],{"class":54231},[52,54317,17876],{"class":58},[52,54319,2099],{"class":622},[52,54321,54322],{"class":62},"\"viewport\"",[52,54324,54302],{"class":58},[52,54326,2099],{"class":622},[52,54328,54329],{"class":62},"\"width=device-width, initial-scale=1.0\"",[52,54331,54238],{"class":622},[52,54333,54334,54336,54339,54342,54344],{"class":54,"line":136},[52,54335,54272],{"class":622},[52,54337,54338],{"class":54231},"title",[52,54340,54341],{"class":622},">Document\u003C\u002F",[52,54343,54338],{"class":54231},[52,54345,54238],{"class":622},[52,54347,54348,54350,54352],{"class":54,"line":141},[52,54349,54272],{"class":622},[52,54351,3015],{"class":54231},[52,54353,54238],{"class":622},[52,54355,54356,54359],{"class":54,"line":146},[52,54357,54358],{"class":54231},"        *",[52,54360,18528],{"class":622},[52,54362,54363,54366,54369,54371],{"class":54,"line":152},[52,54364,54365],{"class":90},"            margin",[52,54367,54368],{"class":622},": ",[52,54370,3306],{"class":90},[52,54372,4272],{"class":622},[52,54374,54375,54378,54380,54382],{"class":54,"line":157},[52,54376,54377],{"class":90},"            padding",[52,54379,54368],{"class":622},[52,54381,3306],{"class":90},[52,54383,4272],{"class":622},[52,54385,54386],{"class":54,"line":173},[52,54387,5490],{"class":622},[52,54389,54390],{"class":54,"line":178},[52,54391,116],{"emptyLinePlaceholder":115},[52,54393,54394,54397],{"class":54,"line":184},[52,54395,54396],{"class":58},"        .box",[52,54398,18528],{"class":622},[52,54400,54401,54404,54406,54409],{"class":54,"line":189},[52,54402,54403],{"class":90},"            display",[52,54405,54368],{"class":622},[52,54407,54408],{"class":90},"flex",[52,54410,4272],{"class":622},[52,54412,54413,54416,54418,54421,54424],{"class":54,"line":201},[52,54414,54415],{"class":90},"            width",[52,54417,54368],{"class":622},[52,54419,54420],{"class":90},"700",[52,54422,54423],{"class":160},"px",[52,54425,4272],{"class":622},[52,54427,54428,54431,54433,54435,54437],{"class":54,"line":206},[52,54429,54430],{"class":90},"            height",[52,54432,54368],{"class":622},[52,54434,6932],{"class":90},[52,54436,54423],{"class":160},[52,54438,4272],{"class":622},[52,54440,54441,54444,54446,54448,54450,54453,54456],{"class":54,"line":224},[52,54442,54443],{"class":90},"            border-left",[52,54445,54368],{"class":622},[52,54447,3332],{"class":90},[52,54449,54423],{"class":160},[52,54451,54452],{"class":90}," solid",[52,54454,54455],{"class":90}," pink",[52,54457,4272],{"class":622},[52,54459,54460,54463,54465,54467,54469,54471,54473],{"class":54,"line":229},[52,54461,54462],{"class":90},"            border-bottom",[52,54464,54368],{"class":622},[52,54466,3332],{"class":90},[52,54468,54423],{"class":160},[52,54470,54452],{"class":90},[52,54472,54455],{"class":90},[52,54474,4272],{"class":622},[52,54476,54477,54479,54481,54483,54485,54488],{"class":54,"line":241},[52,54478,54365],{"class":90},[52,54480,54368],{"class":622},[52,54482,3768],{"class":90},[52,54484,54423],{"class":160},[52,54486,54487],{"class":90}," auto",[52,54489,4272],{"class":622},[52,54491,54492,54495,54497,54500],{"class":54,"line":246},[52,54493,54494],{"class":90},"            justify-content",[52,54496,54368],{"class":622},[52,54498,54499],{"class":90},"space-around",[52,54501,4272],{"class":622},[52,54503,54504,54507,54509,54512],{"class":54,"line":252},[52,54505,54506],{"class":90},"            align-items",[52,54508,54368],{"class":622},[52,54510,54511],{"class":90},"flex-end",[52,54513,4272],{"class":622},[52,54515,54516,54519,54521,54524],{"class":54,"line":257},[52,54517,54518],{"class":90},"            text-align",[52,54520,54368],{"class":622},[52,54522,54523],{"class":90},"center",[52,54525,4272],{"class":622},[52,54527,54528],{"class":54,"line":266},[52,54529,5490],{"class":622},[52,54531,54532],{"class":54,"line":4722},[52,54533,116],{"emptyLinePlaceholder":115},[52,54535,54536,54538,54540,54543],{"class":54,"line":4727},[52,54537,54396],{"class":58},[52,54539,4072],{"class":160},[52,54541,54542],{"class":54231},"div",[52,54544,18528],{"class":622},[52,54546,54547,54549,54551,54553],{"class":54,"line":4741},[52,54548,54403],{"class":90},[52,54550,54368],{"class":622},[52,54552,54408],{"class":90},[52,54554,4272],{"class":622},[52,54556,54557,54559,54561,54563,54565],{"class":54,"line":4746},[52,54558,54415],{"class":90},[52,54560,54368],{"class":622},[52,54562,3768],{"class":90},[52,54564,54423],{"class":160},[52,54566,4272],{"class":622},[52,54568,54569,54572,54574,54577],{"class":54,"line":5538},[52,54570,54571],{"class":90},"            background-color",[52,54573,54368],{"class":622},[52,54575,54576],{"class":90},"pink",[52,54578,4272],{"class":622},[52,54580,54581,54584,54586,54589],{"class":54,"line":5552},[52,54582,54583],{"class":90},"            flex-direction",[52,54585,54368],{"class":622},[52,54587,54588],{"class":90},"column",[52,54590,4272],{"class":622},[52,54592,54593,54595,54597,54600],{"class":54,"line":5560},[52,54594,54494],{"class":90},[52,54596,54368],{"class":622},[52,54598,54599],{"class":90},"space-between",[52,54601,4272],{"class":622},[52,54603,54604],{"class":54,"line":5565},[52,54605,5490],{"class":622},[52,54607,54608],{"class":54,"line":5571},[52,54609,116],{"emptyLinePlaceholder":115},[52,54611,54612,54614,54617,54620],{"class":54,"line":5577},[52,54613,54396],{"class":58},[52,54615,54616],{"class":54231}," div",[52,54618,54619],{"class":54231}," span",[52,54621,18528],{"class":622},[52,54623,54624],{"class":54,"line":5582},[52,54625,116],{"emptyLinePlaceholder":115},[52,54627,54628,54631,54633,54636,54638],{"class":54,"line":10904},[52,54629,54630],{"class":90},"            margin-top",[52,54632,54368],{"class":622},[52,54634,54635],{"class":90},"-20",[52,54637,54423],{"class":160},[52,54639,4272],{"class":622},[52,54641,54642],{"class":54,"line":10928},[52,54643,5490],{"class":622},[52,54645,54646],{"class":54,"line":10933},[52,54647,116],{"emptyLinePlaceholder":115},[52,54649,54650,54652,54654,54657],{"class":54,"line":10939},[52,54651,54396],{"class":58},[52,54653,54616],{"class":54231},[52,54655,54656],{"class":54231}," h4",[52,54658,18528],{"class":622},[52,54660,54661,54664,54666,54669,54671],{"class":54,"line":10966},[52,54662,54663],{"class":90},"            margin-bottom",[52,54665,54368],{"class":622},[52,54667,54668],{"class":90},"-35",[52,54670,54423],{"class":160},[52,54672,4272],{"class":622},[52,54674,54675,54677,54679,54681,54683],{"class":54,"line":10971},[52,54676,54415],{"class":90},[52,54678,54368],{"class":622},[52,54680,3469],{"class":90},[52,54682,54423],{"class":160},[52,54684,4272],{"class":622},[52,54686,54687,54690,54692,54695,54697],{"class":54,"line":10977},[52,54688,54689],{"class":90},"            margin-left",[52,54691,54368],{"class":622},[52,54693,54694],{"class":90},"-10",[52,54696,54423],{"class":160},[52,54698,4272],{"class":622},[52,54700,54701],{"class":54,"line":10989},[52,54702,5490],{"class":622},[52,54704,54705,54708,54710],{"class":54,"line":11001},[52,54706,54707],{"class":622},"    \u003C\u002F",[52,54709,3015],{"class":54231},[52,54711,54238],{"class":622},[52,54713,54714,54717,54719],{"class":54,"line":11013},[52,54715,54716],{"class":622},"\u003C\u002F",[52,54718,54265],{"class":54231},[52,54720,54238],{"class":622},[52,54722,54723],{"class":54,"line":12672},[52,54724,116],{"emptyLinePlaceholder":115},[52,54726,54727,54729,54732],{"class":54,"line":12697},[52,54728,4022],{"class":622},[52,54730,54731],{"class":54231},"body",[52,54733,54238],{"class":622},[52,54735,54736],{"class":54,"line":12720},[52,54737,116],{"emptyLinePlaceholder":115},[52,54739,54740,54742,54745],{"class":54,"line":12744},[52,54741,54272],{"class":622},[52,54743,54744],{"class":54231},"script",[52,54746,54238],{"class":622},[52,54748,54749],{"class":54,"line":12749},[52,54750,54751],{"class":332},"        \u002F\u002F 1. 四次弹框效果\n",[52,54753,54754],{"class":54,"line":12754},[52,54755,54756],{"class":332},"        \u002F\u002F 声明一个新的数组\n",[52,54758,54759,54762,54765,54767],{"class":54,"line":12759},[52,54760,54761],{"class":160},"        let",[52,54763,54764],{"class":622}," arr ",[52,54766,2099],{"class":160},[52,54768,54769],{"class":622}," []\n",[52,54771,54772,54774,54776,54779,54781,54783,54785,54787,54789,54792,54794,54796],{"class":54,"line":12768},[52,54773,6362],{"class":160},[52,54775,4629],{"class":622},[52,54777,54778],{"class":160},"let",[52,54780,12394],{"class":622},[52,54782,2099],{"class":160},[52,54784,28064],{"class":90},[52,54786,12401],{"class":622},[52,54788,4566],{"class":160},[52,54790,54791],{"class":90}," 4",[52,54793,6173],{"class":622},[52,54795,5254],{"class":160},[52,54797,15398],{"class":622},[52,54799,54800],{"class":54,"line":12773},[52,54801,54802],{"class":332},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[52,54804,54805],{"class":54,"line":12779},[52,54806,54807],{"class":332},"            \u002F\u002F arr.push(num)\n",[52,54809,54810,54813,54816,54818,54821,54823,54826,54828,54831],{"class":54,"line":12800},[52,54811,54812],{"class":622},"            arr.",[52,54814,54815],{"class":58},"push",[52,54817,3121],{"class":622},[52,54819,54820],{"class":58},"prompt",[52,54822,3121],{"class":622},[52,54824,54825],{"class":62},"`请输入第${",[52,54827,3554],{"class":622},[52,54829,54830],{"class":62},"}季度的数据:`",[52,54832,33429],{"class":622},[52,54834,54835],{"class":54,"line":12806},[52,54836,54837],{"class":332},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[52,54839,54840],{"class":54,"line":12820},[52,54841,5490],{"class":622},[52,54843,54844],{"class":54,"line":12826},[52,54845,54846],{"class":332},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[52,54848,54849],{"class":54,"line":12853},[52,54850,54851],{"class":332},"        \u002F\u002F 盒子开头\n",[52,54853,54854,54857,54860,54862,54865],{"class":54,"line":12862},[52,54855,54856],{"class":622},"        document.",[52,54858,54859],{"class":58},"write",[52,54861,3121],{"class":622},[52,54863,54864],{"class":62},"` \u003Cdiv class=\"box\">`",[52,54866,170],{"class":622},[52,54868,54869],{"class":54,"line":12868},[52,54870,116],{"emptyLinePlaceholder":115},[52,54872,54873],{"class":54,"line":12876},[52,54874,54875],{"class":332},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[52,54877,54878,54880,54882,54884,54886,54888,54890,54892,54894,54897,54900,54902,54904],{"class":54,"line":12881},[52,54879,6362],{"class":160},[52,54881,4629],{"class":622},[52,54883,54778],{"class":160},[52,54885,12394],{"class":622},[52,54887,2099],{"class":160},[52,54889,7052],{"class":90},[52,54891,12401],{"class":622},[52,54893,4022],{"class":160},[52,54895,54896],{"class":622}," arr.",[52,54898,54899],{"class":90},"length",[52,54901,6173],{"class":622},[52,54903,5254],{"class":160},[52,54905,15398],{"class":622},[52,54907,54908,54911,54913,54915],{"class":54,"line":19560},[52,54909,54910],{"class":622},"            document.",[52,54912,54859],{"class":58},[52,54914,3121],{"class":622},[52,54916,54917],{"class":62},"`\n",[52,54919,54920,54923,54925,54927,54929,54931],{"class":54,"line":19566},[52,54921,54922],{"class":62},"              \u003Cdiv style=\"height: ${",[52,54924,6839],{"class":622},[52,54926,4002],{"class":62},[52,54928,3554],{"class":622},[52,54930,4052],{"class":62},[52,54932,54933],{"class":62},"}px;\">\n",[52,54935,54936,54939,54941,54943,54945,54947],{"class":54,"line":19589},[52,54937,54938],{"class":62},"                \u003Cspan>${",[52,54940,6839],{"class":622},[52,54942,4002],{"class":62},[52,54944,3554],{"class":622},[52,54946,4052],{"class":62},[52,54948,54949],{"class":62},"}\u003C\u002Fspan>\n",[52,54951,54952,54955,54957,54959,54961],{"class":54,"line":19595},[52,54953,54954],{"class":62},"                \u003Ch4>第${",[52,54956,3554],{"class":622},[52,54958,48498],{"class":160},[52,54960,28064],{"class":90},[52,54962,54963],{"class":62},"}季度\u003C\u002Fh4>\n",[52,54965,54966],{"class":54,"line":19618},[52,54967,54968],{"class":62},"              \u003C\u002Fdiv>          \n",[52,54970,54971,54974],{"class":54,"line":19632},[52,54972,54973],{"class":62},"            `",[52,54975,170],{"class":622},[52,54977,54978],{"class":54,"line":19652},[52,54979,5490],{"class":622},[52,54981,54982],{"class":54,"line":19658},[52,54983,54984],{"class":332},"        \u002F\u002F 盒子结尾\n",[52,54986,54987,54989,54991,54993,54996],{"class":54,"line":19669},[52,54988,54856],{"class":622},[52,54990,54859],{"class":58},[52,54992,3121],{"class":622},[52,54994,54995],{"class":62},"` \u003C\u002Fdiv>`",[52,54997,170],{"class":622},[52,54999,55000,55002,55004],{"class":54,"line":19692},[52,55001,54707],{"class":622},[52,55003,54744],{"class":54231},[52,55005,54238],{"class":622},[52,55007,55008,55010,55012],{"class":54,"line":19714},[52,55009,54716],{"class":622},[52,55011,54731],{"class":54231},[52,55013,54238],{"class":622},[52,55015,55016],{"class":54,"line":19719},[52,55017,116],{"emptyLinePlaceholder":115},[52,55019,55020,55022,55024],{"class":54,"line":19725},[52,55021,54716],{"class":622},[52,55023,53566],{"class":54231},[52,55025,54238],{"class":622},[30,55027,55029],{"id":55028},"_284-冒泡排序","2.8.4 冒泡排序",[19,55031,55033],{"className":53564,"code":55032,"language":53566,"meta":28,"style":28},"\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",[26,55034,55035,55045,55059,55063,55071,55086,55106,55118,55126,55130,55138,55146,55178,55210,55247,55252,55271,55276,55289,55304,55320,55324,55329,55333,55343,55352,55360,55364],{"__ignoreMap":28},[52,55036,55037,55039,55041,55043],{"class":54,"line":55},[52,55038,54228],{"class":622},[52,55040,54232],{"class":54231},[52,55042,54235],{"class":58},[52,55044,54238],{"class":622},[52,55046,55047,55049,55051,55053,55055,55057],{"class":54,"line":69},[52,55048,4022],{"class":622},[52,55050,53566],{"class":54231},[52,55052,54247],{"class":58},[52,55054,2099],{"class":622},[52,55056,54252],{"class":62},[52,55058,54238],{"class":622},[52,55060,55061],{"class":54,"line":82},[52,55062,116],{"emptyLinePlaceholder":115},[52,55064,55065,55067,55069],{"class":54,"line":97},[52,55066,4022],{"class":622},[52,55068,54265],{"class":54231},[52,55070,54238],{"class":622},[52,55072,55073,55076,55078,55080,55082,55084],{"class":54,"line":112},[52,55074,55075],{"class":622},"  \u003C",[52,55077,54275],{"class":54231},[52,55079,54278],{"class":58},[52,55081,2099],{"class":622},[52,55083,54283],{"class":62},[52,55085,54238],{"class":622},[52,55087,55088,55090,55092,55094,55096,55098,55100,55102,55104],{"class":54,"line":119},[52,55089,55075],{"class":622},[52,55091,54275],{"class":54231},[52,55093,17876],{"class":58},[52,55095,2099],{"class":622},[52,55097,54322],{"class":62},[52,55099,54302],{"class":58},[52,55101,2099],{"class":622},[52,55103,54329],{"class":62},[52,55105,54238],{"class":622},[52,55107,55108,55110,55112,55114,55116],{"class":54,"line":130},[52,55109,55075],{"class":622},[52,55111,54338],{"class":54231},[52,55113,54341],{"class":622},[52,55115,54338],{"class":54231},[52,55117,54238],{"class":622},[52,55119,55120,55122,55124],{"class":54,"line":136},[52,55121,54716],{"class":622},[52,55123,54265],{"class":54231},[52,55125,54238],{"class":622},[52,55127,55128],{"class":54,"line":141},[52,55129,116],{"emptyLinePlaceholder":115},[52,55131,55132,55134,55136],{"class":54,"line":146},[52,55133,4022],{"class":622},[52,55135,54731],{"class":54231},[52,55137,54238],{"class":622},[52,55139,55140,55142,55144],{"class":54,"line":152},[52,55141,55075],{"class":622},[52,55143,54744],{"class":54231},[52,55145,54238],{"class":622},[52,55147,55148,55151,55153,55155,55158,55160,55162,55164,55166,55168,55170,55172,55174,55176],{"class":54,"line":157},[52,55149,55150],{"class":160},"    let",[52,55152,54764],{"class":622},[52,55154,2099],{"class":160},[52,55156,55157],{"class":622}," [",[52,55159,3432],{"class":90},[52,55161,15391],{"class":622},[52,55163,3406],{"class":90},[52,55165,15391],{"class":622},[52,55167,3188],{"class":90},[52,55169,15391],{"class":622},[52,55171,3194],{"class":90},[52,55173,15391],{"class":622},[52,55175,3332],{"class":90},[52,55177,36178],{"class":622},[52,55179,55180,55182,55184,55186,55188,55190,55192,55194,55196,55198,55200,55202,55204,55206,55208],{"class":54,"line":173},[52,55181,6160],{"class":160},[52,55183,4629],{"class":622},[52,55185,54778],{"class":160},[52,55187,12394],{"class":622},[52,55189,2099],{"class":160},[52,55191,7052],{"class":90},[52,55193,12401],{"class":622},[52,55195,4022],{"class":160},[52,55197,54896],{"class":622},[52,55199,54899],{"class":90},[52,55201,1989],{"class":160},[52,55203,28064],{"class":90},[52,55205,6173],{"class":622},[52,55207,5254],{"class":160},[52,55209,15398],{"class":622},[52,55211,55212,55215,55217,55219,55221,55223,55225,55227,55229,55231,55233,55235,55237,55239,55241,55243,55245],{"class":54,"line":178},[52,55213,55214],{"class":160},"      for",[52,55216,4629],{"class":622},[52,55218,54778],{"class":160},[52,55220,12456],{"class":622},[52,55222,2099],{"class":160},[52,55224,7052],{"class":90},[52,55226,12463],{"class":622},[52,55228,4022],{"class":160},[52,55230,54896],{"class":622},[52,55232,54899],{"class":90},[52,55234,1989],{"class":160},[52,55236,12394],{"class":622},[52,55238,3644],{"class":160},[52,55240,28064],{"class":90},[52,55242,12470],{"class":622},[52,55244,5254],{"class":160},[52,55246,15398],{"class":622},[52,55248,55249],{"class":54,"line":184},[52,55250,55251],{"class":332},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[52,55253,55254,55256,55259,55261,55264,55266,55268],{"class":54,"line":189},[52,55255,5458],{"class":160},[52,55257,55258],{"class":622}," (arr[j] ",[52,55260,4072],{"class":160},[52,55262,55263],{"class":622}," arr[j ",[52,55265,3593],{"class":160},[52,55267,28064],{"class":90},[52,55269,55270],{"class":622},"]) {\n",[52,55272,55273],{"class":54,"line":201},[52,55274,55275],{"class":332},"          \u002F\u002F 交换两个变量\n",[52,55277,55278,55281,55284,55286],{"class":54,"line":206},[52,55279,55280],{"class":160},"          let",[52,55282,55283],{"class":622}," tmp ",[52,55285,2099],{"class":160},[52,55287,55288],{"class":622}," arr[j]\n",[52,55290,55291,55294,55296,55298,55300,55302],{"class":54,"line":224},[52,55292,55293],{"class":622},"          arr[j] ",[52,55295,2099],{"class":160},[52,55297,55263],{"class":622},[52,55299,3593],{"class":160},[52,55301,28064],{"class":90},[52,55303,36178],{"class":622},[52,55305,55306,55309,55311,55313,55315,55317],{"class":54,"line":229},[52,55307,55308],{"class":622},"          arr[j ",[52,55310,3593],{"class":160},[52,55312,28064],{"class":90},[52,55314,7402],{"class":622},[52,55316,2099],{"class":160},[52,55318,55319],{"class":622}," tmp\n",[52,55321,55322],{"class":54,"line":241},[52,55323,5490],{"class":622},[52,55325,55326],{"class":54,"line":246},[52,55327,55328],{"class":622},"      }\n",[52,55330,55331],{"class":54,"line":252},[52,55332,5149],{"class":622},[52,55334,55335,55338,55340],{"class":54,"line":257},[52,55336,55337],{"class":622},"    document.",[52,55339,54859],{"class":58},[52,55341,55342],{"class":622},"(arr)\n",[52,55344,55345,55348,55350],{"class":54,"line":266},[52,55346,55347],{"class":622},"  \u003C\u002F",[52,55349,54744],{"class":54231},[52,55351,54238],{"class":622},[52,55353,55354,55356,55358],{"class":54,"line":4722},[52,55355,54716],{"class":622},[52,55357,54731],{"class":54231},[52,55359,54238],{"class":622},[52,55361,55362],{"class":54,"line":4727},[52,55363,116],{"emptyLinePlaceholder":115},[52,55365,55366,55368,55370],{"class":54,"line":4741},[52,55367,54716],{"class":622},[52,55369,53566],{"class":54231},[52,55371,54238],{"class":622},[274,55373,55374],{},[280,55375],{"alt":28,"src":55376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[274,55378,55379],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[274,55381,55382],{},"let arr = [4, 2, 5, 1, 3]",[274,55384,55385],{},"\u002F\u002F 1.升序排列写法",[274,55387,55388],{},"arr.sort(function (a, b) {",[274,55390,55391],{},"return a - b",[274,55393,55394],{},"})",[274,55396,55397],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[274,55399,55400],{},"\u002F\u002F 降序排列写法",[274,55402,55388],{},[274,55404,55405],{},"return b - a",[274,55407,55394],{},[274,55409,55410],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,55412,55414],{"id":55413},"_29-函数","2.9 函数",[274,55416,55417],{},[280,55418],{"alt":28,"src":55419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[274,55421,55422],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[274,55424,55425],{},"函数的声明用function",[274,55427,55428],{},"函数里边可以嵌套函数",[30,55430,55432],{"id":55431},"_291-函数传参","2.9.1 函数传参",[274,55434,55435],{},[280,55436],{"alt":28,"src":55437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[274,55439,55440],{},[280,55441],{"alt":28,"src":55442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[4118,55444,55445,55448,55451,55454,55457,55460],{},[1073,55446,55447],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[1073,55449,55450],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[1073,55452,55453],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[1073,55455,55456],{},"开发中尽量保持形参和实参个数一致",[1073,55458,55459],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[1073,55461,55462],{},"形参只在函数中有用，所以不需要进行声明这个变量",[274,55464,55465],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[30,55467,55469],{"id":55468},"_292-函数的返回值","2.9.2 函数的返回值",[274,55471,55472],{},[280,55473],{"alt":28,"src":55474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[274,55476,55477],{},[280,55478],{"alt":28,"src":55479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[4118,55481,55482,55485,55488,55491,55494],{},[1073,55483,55484],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[1073,55486,55487],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[1073,55489,55490],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[1073,55492,55493],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[1073,55495,55496],{},"断点调试:进入函数内部看执行过程F11",[30,55498,55500],{"id":55499},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[19,55502,55504],{"className":53564,"code":55503,"language":53566,"meta":28,"style":28},"    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",[26,55505,55506,55511,55516,55520,55525],{"__ignoreMap":28},[52,55507,55508],{"class":54,"line":55},[52,55509,55510],{"class":622},"    function fn(a, b) {\n",[52,55512,55513],{"class":54,"line":69},[52,55514,55515],{"class":622},"      console.log(a + b);\n",[52,55517,55518],{"class":54,"line":82},[52,55519,5149],{"class":622},[52,55521,55522],{"class":54,"line":97},[52,55523,55524],{"class":622},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[52,55526,55527],{"class":54,"line":112},[52,55528,55529],{"class":622},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[30,55531,55533],{"id":55532},"_294-作用域","2.9.4 作用域",[4118,55535,55536,55542,55547,55550,55553],{},[1073,55537,55538,55539],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[538,55540,55541],{},"作用域",[1073,55543,55544],{},[538,55545,55546],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[1073,55548,55549],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[1073,55551,55552],{},"函数内部可以直接所使用全局变量",[1073,55554,55555],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[274,55557,17589],{},[19,55559,55561],{"className":53564,"code":55560,"language":53566,"meta":28,"style":28},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[26,55562,55563,55568,55573,55577,55582,55587,55592],{"__ignoreMap":28},[52,55564,55565],{"class":54,"line":55},[52,55566,55567],{"class":622},"    function fun() {\n",[52,55569,55570],{"class":54,"line":69},[52,55571,55572],{"class":622},"      num = 10\n",[52,55574,55575],{"class":54,"line":82},[52,55576,5149],{"class":622},[52,55578,55579],{"class":54,"line":97},[52,55580,55581],{"class":622},"    fun()\n",[52,55583,55584],{"class":54,"line":112},[52,55585,55586],{"class":622},"    console.log(num)\n",[52,55588,55589],{"class":54,"line":119},[52,55590,55591],{"class":622},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[52,55593,55594],{"class":54,"line":130},[52,55595,55596],{"class":622},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[4118,55598,55599,55602],{},[1073,55600,55601],{},"函数内部的形参可以看做是局部变量",[1073,55603,55604],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[274,55606,55607,55608],{},"变量访问原则： ",[538,55609,55610],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[30,55612,55614],{"id":55613},"_295-匿名函数","2.9.5 匿名函数",[274,55616,55617],{},"函数可以分为具名函数和匿名函数",[274,55619,55620],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1070,55622,55623],{},[1073,55624,55625],{},"函数表达式",[274,55627,55628],{},[280,55629],{"alt":28,"src":55630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[274,55632,55633],{},"里边也可以写参数",[274,55635,55636],{},"具名函数调用位置可以随意调整；",[274,55638,55639],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1070,55641,55642],{"start":69},[1073,55643,55644],{},"立即执行函数",[274,55646,55647],{},[280,55648],{"alt":28,"src":55649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[274,55651,55652],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[274,55654,55655],{},"写法：两个小括号，然后在第一个小括号中写function",[274,55657,55658],{},"(function () {})();",[274,55660,55661],{},"不要落下最后的;",[274,55663,55664],{},"立即执行函数必须要加;",[274,55666,55667],{},"分号写前写后都没问题",[274,55669,55670],{},"写前：",[274,55672,55673],{},"(function() {})()",[274,55675,55676],{},";(function () {})();",[274,55678,55679],{},"写后:",[274,55681,55682],{},"(function() {})();",[274,55684,55658],{},[274,55686,55687],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[274,55689,55690],{},"还有一种写法：",[274,55692,55693],{},"(function(){}());",[274,55695,55696],{},"或者:",[274,55698,55699],{},"!function(){}();",[274,55701,55702],{},"立即执行函数有时候也是可以加名字的：",[274,55704,55705],{},"(function flexible(window,document) {}(window,document));",[274,55707,55708],{},"省一些调用方法",[30,55710,55712],{"id":55711},"_296-逻辑中断","2.9.6 逻辑中断!!!",[274,55714,55715],{},[280,55716],{"alt":28,"src":55717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[274,55719,55720],{},"这样就不用非得给x,y初始化了",[274,55722,55723],{},[280,55724],{"alt":28,"src":55725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[274,55727,55728],{},"代码执行时先看左边",[274,55730,55731],{},"例如：console.log(false && 3+5)",[274,55733,55734],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[274,55736,55737],{},"&&都是真时，就返回最后一个真值",[274,55739,55740],{},"console.log(11 && 22)",[274,55742,55743],{},"输出22",[274,55745,55746],{},"逻辑与：遇真则真",[274,55748,17589],{},[274,55750,55751],{},"let age=1",[274,55753,55754],{},"console.log(11 || age++)",[274,55756,55757],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[274,55759,55760],{},"console.log(11 || 22)",[274,55762,55763],{},"||逻辑或遇到真就直接输出，输出结果为11",[274,55765,55766],{},"||如果都是假的话，就取最后一个假的值了",[30,55768,55770],{"id":55769},"_297-转换为boolean型","2.9.7 转换为Boolean型",[274,55772,55773],{},"显示转换：",[274,55775,55776,55779,55780],{},[538,55777,55778],{},"记忆","： ",[538,55781,55782],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[274,55784,55785],{},"空字符串为假，其他字符串全为真",[274,55787,55788],{},[280,55789],{"alt":28,"src":55790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[274,55792,55793],{},"隐式转换：",[274,55795,55796],{},[280,55797],{"alt":28,"src":55798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[274,55800,55801],{},"隐式转换:",[274,55803,55804],{},"null+3=3",[274,55806,55807],{},"undefined+3=NaN",[274,55809,55810],{},"null==undefined 输出true,他两个都当0看",[274,55812,55813],{},"null===undefined 输出false",[274,55815,55816],{},"undefined做任何操作都是NaN",[274,55818,55819],{},"NaN不等于NaN，NaN表示计算错误",[14,55821,55823],{"id":55822},"_210-对象","2.10 对象",[30,55825,55827],{"id":55826},"_2101-对象的介绍","2.10.1 对象的介绍",[274,55829,55830],{},"对象也是一种数据类型，里边的数据是无序的",[274,55832,55833],{},"对象由属性和方法组成",[274,55835,55836],{},[280,55837],{"alt":28,"src":55838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[274,55840,55841],{},[280,55842],{"alt":28,"src":55843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[274,55845,55846],{},[280,55847],{"alt":28,"src":55848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[30,55850,55852],{"id":55851},"_2102-对象属性","2.10.2 对象属性",[274,55854,55855],{},[280,55856],{"alt":28,"src":55857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1070,55859,55860],{},[1073,55861,55862],{},"查询对象",[274,55864,55865],{},"对象名.属性 goods.uname",[274,55867,55868],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[274,55870,55871],{},"不带字符串的属性名也可以使用 对象名['属性名']",[274,55873,55874],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[274,55876,55877],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1070,55879,55880],{"start":69},[1073,55881,55882],{},"重新赋值",[274,55884,55885],{},"对象名.属性=新值",[1070,55887,55888],{"start":82},[1073,55889,55890],{},"增加新数据",[274,55892,55885],{},[1070,55894,55895],{"start":97},[1073,55896,55897],{},"删除对象中的属性",[274,55899,55900],{},"delete 对象名.属性",[30,55902,55904],{"id":55903},"_2103-对象方法","2.10.3 对象方法",[274,55906,55907],{},[280,55908],{"alt":28,"src":55909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[274,55911,55912],{},"后边跟的是匿名函数",[274,55914,55915],{},"对象外面的叫函数；对象内部的叫方法",[274,55917,55918],{},[280,55919],{"alt":28,"src":55920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[30,55922,55924],{"id":55923},"_2104-遍历对象","2.10.4 遍历对象",[274,55926,55927],{},"理解为加括号的python字典遍历",[274,55929,55930],{},[280,55931],{"alt":28,"src":55932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[274,55934,55935],{},"k是字符串类型",[274,55937,55938],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[19,55940,55942],{"className":53564,"code":55941,"language":53566,"meta":28,"style":28},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[26,55943,55944,55949,55954,55959,55964],{"__ignoreMap":28},[52,55945,55946],{"class":54,"line":55},[52,55947,55948],{"class":622},"   let arr = [1, 2, 3]\n",[52,55950,55951],{"class":54,"line":69},[52,55952,55953],{"class":622},"    for (let k in arr) {\n",[52,55955,55956],{"class":54,"line":82},[52,55957,55958],{"class":622},"      console.log(k)\n",[52,55960,55961],{"class":54,"line":97},[52,55962,55963],{"class":622},"      console.log(arr[k])\n",[52,55965,55966],{"class":54,"line":112},[52,55967,5149],{"class":622},[274,55969,55970],{},[280,55971],{"alt":28,"src":55972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[274,55974,55975],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[274,55977,55978],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[274,55980,55981],{},"for in 得到的k是属性名",[54744,55983,55984],{},"\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",[274,55986,55987],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[30,55989,55991],{"id":55990},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[274,55993,55994],{},"数组中放对象信息",[19,55996,56000],{"className":55997,"code":55998,"language":55999,"meta":28,"style":28},"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",[26,56001,56002,56010,56015,56020,56025,56030,56035,56040,56045,56050,56055,56060,56065,56069,56073],{"__ignoreMap":28},[52,56003,56004,56006,56008],{"class":54,"line":55},[52,56005,4022],{"class":622},[52,56007,54744],{"class":54231},[52,56009,54238],{"class":622},[52,56011,56012],{"class":54,"line":69},[52,56013,56014],{"class":622},"    let students = [\n",[52,56016,56017],{"class":54,"line":82},[52,56018,56019],{"class":622},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[52,56021,56022],{"class":54,"line":97},[52,56023,56024],{"class":622},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[52,56026,56027],{"class":54,"line":112},[52,56028,56029],{"class":622},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[52,56031,56032],{"class":54,"line":119},[52,56033,56034],{"class":622},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[52,56036,56037],{"class":54,"line":130},[52,56038,56039],{"class":622},"    ]\n",[52,56041,56042],{"class":54,"line":136},[52,56043,56044],{"class":622},"    for (let i = 0; i \u003C students.length; i++) {\n",[52,56046,56047],{"class":54,"line":141},[52,56048,56049],{"class":622},"      for (let k in students[i]) {\n",[52,56051,56052],{"class":54,"line":146},[52,56053,56054],{"class":622},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[52,56056,56057],{"class":54,"line":152},[52,56058,56059],{"class":622},"        \u002F\u002F输出每个人的名字：\n",[52,56061,56062],{"class":54,"line":157},[52,56063,56064],{"class":622},"        \u002F\u002Fconsole.log(students[i].name)\n",[52,56066,56067],{"class":54,"line":173},[52,56068,55328],{"class":622},[52,56070,56071],{"class":54,"line":178},[52,56072,5149],{"class":622},[52,56074,56075,56077,56079],{"class":54,"line":184},[52,56076,55347],{"class":622},[52,56078,54744],{"class":54231},[52,56080,54238],{"class":622},[30,56082,56084],{"id":56083},"_2106-内置对象","2.10.6 内置对象",[274,56086,56087],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1070,56089,56090],{},[1073,56091,56092],{},"数学对象Math",[274,56094,56095],{},[280,56096],{"alt":28,"src":56097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[274,56099,56100],{},[300,56101,56104],{"href":56102,"rel":56103},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[304],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[274,56106,56107],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[274,56109,56110],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[274,56112,56113],{},"数组不可以使用Math中的max,min来求最大值与最小值",[274,56115,56116],{},"null是一个空对象，可以认为：null类似于let obj={}",[274,56118,56119],{},"null属于对象数据类型",[1070,56121,56122],{"start":69},[1073,56123,56124],{},"生成任意范围随机数",[274,56126,56127],{},[280,56128],{"alt":28,"src":56129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[274,56131,56132],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[274,56134,56135],{},"乘以几就取不到几",[274,56137,56138],{},"取数组中的随机元素：",[274,56140,56141],{},"let arr = ['red', 'green', 'blue']",[274,56143,56144],{},"let random = Math.floor(Math.random() * arr.length)",[274,56146,56147],{},"console.log(arr[random])",[274,56149,56150],{},"这个函数得到的是全闭区间",[274,56152,56153],{},"function getRandom(N, M) {",[274,56155,56156],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[274,56158,4058],{},[274,56160,56161],{},"console.log(getRandom(4, 8))",[30,56163,56165],{"id":56164},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[274,56167,56168],{},[280,56169],{"alt":28,"src":56170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[274,56172,56173],{},[280,56174],{"alt":28,"src":56175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[274,56177,56178],{},[280,56179],{"alt":28,"src":56180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[274,56182,56183],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[274,56185,56186],{},[280,56187],{"alt":28,"src":56188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[274,56190,56191],{},[280,56192],{"alt":28,"src":56193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[274,56195,56196],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[274,56198,56199],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[274,56201,56202],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[3015,56204,56205],{},"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":28,"searchDepth":69,"depth":69,"links":56207},[56208,56216,56217,56218,56219,56220,56227,56231,56237,56246],{"id":53399,"depth":69,"text":53400,"children":56209},[56210,56211,56212,56213,56214,56215],{"id":53403,"depth":82,"text":53404},{"id":53420,"depth":82,"text":53421},{"id":53460,"depth":82,"text":53461},{"id":53472,"depth":82,"text":53473},{"id":53481,"depth":82,"text":53482},{"id":53529,"depth":82,"text":53530},{"id":53539,"depth":69,"text":53540},{"id":53627,"depth":69,"text":53628},{"id":53650,"depth":69,"text":53651},{"id":53662,"depth":69,"text":53663},{"id":53849,"depth":69,"text":53850,"children":56221},[56222,56223,56224,56225,56226],{"id":53853,"depth":82,"text":53854},{"id":53862,"depth":82,"text":53863},{"id":53890,"depth":82,"text":53891},{"id":53926,"depth":82,"text":53927},{"id":53951,"depth":82,"text":53952},{"id":53963,"depth":69,"text":53964,"children":56228},[56229,56230],{"id":53984,"depth":82,"text":53985},{"id":54078,"depth":82,"text":54079},{"id":54136,"depth":69,"text":54137,"children":56232},[56233,56234,56235,56236],{"id":54140,"depth":82,"text":54141},{"id":54164,"depth":82,"text":54165},{"id":54217,"depth":82,"text":54218},{"id":55028,"depth":82,"text":55029},{"id":55413,"depth":69,"text":55414,"children":56238},[56239,56240,56241,56242,56243,56244,56245],{"id":55431,"depth":82,"text":55432},{"id":55468,"depth":82,"text":55469},{"id":55499,"depth":82,"text":55500},{"id":55532,"depth":82,"text":55533},{"id":55613,"depth":82,"text":55614},{"id":55711,"depth":82,"text":55712},{"id":55769,"depth":82,"text":55770},{"id":55822,"depth":69,"text":55823,"children":56247},[56248,56249,56250,56251,56252,56253,56254],{"id":55826,"depth":82,"text":55827},{"id":55851,"depth":82,"text":55852},{"id":55903,"depth":82,"text":55904},{"id":55923,"depth":82,"text":55924},{"id":55990,"depth":82,"text":55991},{"id":56083,"depth":82,"text":56084},{"id":56164,"depth":82,"text":56165},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":53391,"description":3046},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":56261,"title":56262,"body":56263,"description":3046,"extension":3047,"meta":79601,"navigation":115,"path":79602,"seo":79603,"stem":79604,"__hash__":79605},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":56264,"toc":79541},[56265,56268,56271,56274,56279,56282,56285,56288,56292,56296,56302,56307,56315,56322,56325,56329,56334,56339,56344,56347,56350,56361,56364,56368,56371,56374,56379,56384,56389,56392,56395,56487,56490,56495,56498,56503,56506,56509,56514,56517,56522,56526,56529,56543,56547,56552,56555,56558,56562,56567,56570,56574,56578,56583,56587,56592,56595,56598,56601,56604,56607,56610,56615,56620,56648,56651,56654,56657,56662,56665,56668,56671,56674,56678,56707,56711,56716,56721,56724,56727,56730,56735,56850,56855,56860,57021,57026,57029,57033,57038,57043,57046,57049,57052,57055,57058,57061,57064,57067,57070,57073,57076,57079,57082,57085,57087,57090,57093,57096,57101,57105,57502,57505,57511,57515,57520,58802,58807,58810,58813,58816,58821,60017,60021,60027,60032,60035,60040,60045,60049,60053,60058,60061,60066,60069,60072,60076,60984,60987,60991,61212,61215,61218,61221,61447,61450,61674,61677,61681,61686,61689,61692,61920,61923,61956,61959,61963,61968,61972,61975,61978,61981,61984,61987,61990,61993,61998,63278,63282,63285,64378,64382,64385,64388,64391,64394,64398,64401,64404,64406,64414,65895,65899,65902,65905,65908,66117,66120,66124,66128,66133,66138,66141,66144,66149,66153,66158,66161,66270,66274,66279,66284,66287,66290,66294,66299,66304,66309,66312,66315,66326,66329,66334,66339,66342,66345,66418,66422,66427,66430,66432,66443,66447,66452,67777,67780,67783,67786,67788,67791,67794,67797,67800,67803,67806,67809,67812,67815,67818,67821,67824,67826,67828,67831,67835,68929,68932,68935,68951,68965,68968,68973,68979,68984,68988,68992,68997,69001,69006,69448,69453,69456,69460,69465,69468,69471,69475,69480,69484,69489,69494,69498,69503,69508,69511,69516,69521,69525,69530,69535,69639,69642,69646,69651,70017,70020,70023,70026,70029,70032,70035,70038,70041,71337,71341,71346,71351,71354,71357,71360,71363,71365,71370,71375,71378,71382,71387,71392,71397,71400,71403,71406,71409,71412,71417,71420,71424,71429,71434,71438,71443,71446,71451,71454,71457,71460,71463,71466,71471,71474,71477,71480,71483,71487,71492,71495,71499,71504,71507,71510,71514,71543,71546,71550,71554,71559,71563,71568,71571,71574,71577,71580,71583,71586,71589,71592,71595,71598,71601,71604,71607,71610,71614,71619,71624,71627,71631,71635,71640,71643,71647,71650,71653,71658,71663,71668,71673,71678,71681,71684,71689,71694,71698,71703,71706,71711,71714,71717,71720,71723,71728,71731,71740,71744,71749,71752,71755,71759,71762,71767,71771,71774,71780,71786,71790,71816,71819,73379,73382,73878,73881,73886,73891,73896,73900,73905,73910,73915,73919,73924,73927,73930,73933,73936,73940,73943,73948,73951,73956,73960,73965,73968,73973,73978,73983,73986,73989,73994,73999,74002,74005,74009,74012,74017,74020,74025,74028,74033,74038,74043,74046,74051,74116,74119,74130,74134,74139,74311,74315,74320,74323,74326,74329,74333,74344,74348,74351,74356,74361,74364,74367,74370,74373,74376,74378,74381,74384,74387,74392,74395,74400,74403,74407,74410,74413,74427,74431,74434,74489,74494,74497,74500,74505,74508,74512,74517,74647,74651,74656,74661,74742,74747,74751,74754,74759,74764,74770,74773,74776,74779,74783,74788,74791,74802,74806,74823,77870,77874,77877,77880,77883,77904,77908,77911,77919,77922,77927,77930,77933,77938,77943,77947,77968,77972,77977,77980,77983,77986,77989,77993,77998,78001,78005,78010,78013,78018,78021,78026,78029,78034,79237,79241,79246,79249,79254,79538],[10,56266,56262],{"id":56267},"_3web-apis",[274,56269,56270],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[274,56272,56273],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[274,56275,56276],{},[280,56277],{"alt":28,"src":56278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[274,56280,56281],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[274,56283,56284],{},"建议数组和对象使用 const 来声明",[274,56286,56287],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,56289,56291],{"id":56290},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[30,56293,56295],{"id":56294},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[274,56297,56298,56301],{},[26,56299,56300],{},"document"," = HTML 文件解析后的对象化表示；",[274,56303,56304,56306],{},[26,56305,56300],{}," ≠ HTML 文件本身",[274,56308,56309,56314],{},[538,56310,56311],{},[26,56312,56313],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[274,56316,56317,56321],{},[538,56318,56319],{},[26,56320,56300],{}," ：容器里的内容，代表当前加载的网页（DOM）",[274,56323,56324],{},"document实际上为window.document的简写",[30,56326,56328],{"id":56327},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[274,56330,56331],{},[280,56332],{"alt":28,"src":56333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[274,56335,56336],{},[280,56337],{"alt":28,"src":56338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[274,56340,56341],{},[280,56342],{"alt":28,"src":56343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[274,56345,56346],{},"console.dir()",[274,56348,56349],{},"dir用来打印对象",[4118,56351,56352,56355,56358],{},[1073,56353,56354],{},"任何一个标签，都是一个对象",[1073,56356,56357],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[1073,56359,56360],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[274,56362,56363],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[30,56365,56367],{"id":56366},"_312-获取dom对象","3.1.2 获取DoM对象",[274,56369,56370],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[274,56372,56373],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[274,56375,56376],{},[538,56377,56378],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1070,56380,56381],{},[1073,56382,56383],{},"利用CSS选择器来获取标签元素",[274,56385,56386],{},[280,56387],{"alt":28,"src":56388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[274,56390,56391],{},"里边的选择器必须必须加引号！！！",[274,56393,56394],{},"只选择第一个元素",[19,56396,56398],{"className":55997,"code":56397,"language":55999,"meta":28,"style":28},"\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",[26,56399,56400,56408,56429,56448,56456,56461,56466,56471,56479],{"__ignoreMap":28},[52,56401,56402,56404,56406],{"class":54,"line":55},[52,56403,4022],{"class":622},[52,56405,54731],{"class":54231},[52,56407,54238],{"class":622},[52,56409,56410,56412,56414,56417,56419,56422,56425,56427],{"class":54,"line":69},[52,56411,55075],{"class":622},[52,56413,54542],{"class":54231},[52,56415,56416],{"class":58}," class",[52,56418,2099],{"class":622},[52,56420,56421],{"class":62},"\"box\"",[52,56423,56424],{"class":622},">123\u003C\u002F",[52,56426,54542],{"class":54231},[52,56428,54238],{"class":622},[52,56430,56431,56433,56435,56437,56439,56441,56444,56446],{"class":54,"line":82},[52,56432,55075],{"class":622},[52,56434,54542],{"class":54231},[52,56436,56416],{"class":58},[52,56438,2099],{"class":622},[52,56440,56421],{"class":62},[52,56442,56443],{"class":622},">456\u003C\u002F",[52,56445,54542],{"class":54231},[52,56447,54238],{"class":622},[52,56449,56450,56452,56454],{"class":54,"line":97},[52,56451,55075],{"class":622},[52,56453,54744],{"class":54231},[52,56455,54238],{"class":622},[52,56457,56458],{"class":54,"line":112},[52,56459,56460],{"class":622},"    \u002F\u002F 1.获取匹配的第一个元素\n",[52,56462,56463],{"class":54,"line":119},[52,56464,56465],{"class":622},"    const box = document.querySelector('div')\n",[52,56467,56468],{"class":54,"line":130},[52,56469,56470],{"class":622},"    console.dir(box)\n",[52,56472,56473,56475,56477],{"class":54,"line":136},[52,56474,55347],{"class":622},[52,56476,54744],{"class":54231},[52,56478,54238],{"class":622},[52,56480,56481,56483,56485],{"class":54,"line":141},[52,56482,54716],{"class":622},[52,56484,54731],{"class":54231},[52,56486,54238],{"class":622},[274,56488,56489],{},"只选123，不选456",[274,56491,56492],{},[280,56493],{"alt":28,"src":56494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[274,56496,56497],{},"返回的是一个数组的集合，不能对其进行直接修改",[274,56499,56500],{},[280,56501],{"alt":28,"src":56502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[274,56504,56505],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[274,56507,56508],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1070,56510,56511],{"start":69},[1073,56512,56513],{},"其他方法来获取标签元素",[274,56515,56516],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[274,56518,56519],{},[280,56520],{"alt":28,"src":56521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[30,56523,56525],{"id":56524},"_313-操作元素的内容","3.1.3 操作元素的内容",[274,56527,56528],{},"设置修改DOM元素内容有两种方式：",[4118,56530,56531,56534,56537,56540],{},[1073,56532,56533],{},"元素.innerText=''",[1073,56535,56536],{},"元素.innerHTML=''",[1073,56538,56539],{},"不写字符串输出数字也是可以的",[1073,56541,56542],{},"元素.innerHtml=1",[1486,56544,56546],{"id":56545},"_3131-innertext","3.1.3.1 innerText",[274,56548,56549],{},[280,56550],{"alt":28,"src":56551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[274,56553,56554],{},"思路：实现了修改盒子中的内容！",[274,56556,56557],{},"它只显示纯文本，不解析标签",[1486,56559,56561],{"id":56560},"_3132-innerhtml","3.1.3.2 innerHTML",[274,56563,56564],{},[280,56565],{"alt":28,"src":56566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[274,56568,56569],{},"相比于innerText，他的强大之处在于可以解析标签",[30,56571,56573],{"id":56572},"_314-操作元素属性","3.1.4 操作元素属性",[1486,56575,56577],{"id":56576},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[274,56579,56580],{},[280,56581],{"alt":28,"src":56582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[1486,56584,56586],{"id":56585},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[274,56588,56589],{},[280,56590],{"alt":28,"src":56591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[274,56593,56594],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[274,56596,56597],{},"div.style.backgroundColor = 'hotpink'",[274,56599,56600],{},"如果按照css的写法，-表示减，就会出错",[274,56602,56603],{},"body元素不需要再获取，直接用就行！！！！！！",[274,56605,56606],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[274,56608,56609],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[274,56611,56612],{},[280,56613],{"alt":28,"src":56614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[274,56616,56617],{},[280,56618],{"alt":28,"src":56619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1070,56621,56622,56625,56628,56631,56634,56637],{},[1073,56623,56624],{},"className这个方式就是修改很多样式的时候来使用的！",[1073,56626,56627],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[1073,56629,56630],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[1073,56632,56633],{},"className为属性名，如果还用class的话就导致与关键字冲突",[1073,56635,56636],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[1073,56638,56639,56640,56645],{},"解析标签的时候就变为了",[54542,56641],{"className":56642},[56643,56644],"nav","box",[56646,56647],"br",{},[274,56649,56650],{},"例子：",[54542,56652],{"className":56653},[56643],[54744,56655,56656],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[274,56658,56659],{},[280,56660],{"alt":28,"src":56661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[274,56663,56664],{},"追加和删除类名用classList",[274,56666,56667],{},"常用于类似于开关的操作",[274,56669,56670],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[274,56672,56673],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[1486,56675,56677],{"id":56676},"_3143-牢记点","3.1.4.3 牢记点",[1070,56679,56680,56683,56686,56689,56692,56695,56698,56701,56704],{},[1073,56681,56682],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[1073,56684,56685],{},"使用style属性操作css时不要忘记引号",[1073,56687,56688],{},"使用className或者classList时也不要忘记引号",[1073,56690,56691],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[1073,56693,56694],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[1073,56696,56697],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[1073,56699,56700],{},"若： let arr=['1','2',3] arr[0]=1",[1073,56702,56703],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[1073,56705,56706],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[30,56708,56710],{"id":56709},"_315-操作表单元素","3.1.5 操作表单元素",[1070,56712,56713],{},[1073,56714,56715],{},"天生的属性",[274,56717,56718],{},[280,56719],{"alt":28,"src":56720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[274,56722,56723],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[274,56725,56726],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[274,56728,56729],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[274,56731,56732],{},[280,56733],{"alt":28,"src":56734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[19,56736,56738],{"className":53564,"code":56737,"language":53566,"meta":28,"style":28},"在复选框中如果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",[26,56739,56740,56745,56777,56782,56787,56792,56797,56801,56806,56811,56828,56840,56845],{"__ignoreMap":28},[52,56741,56742],{"class":54,"line":55},[52,56743,56744],{"class":622},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[52,56746,56747,56749,56752,56755,56757,56760,56762,56764,56766,56768,56770,56772,56775],{"class":54,"line":69},[52,56748,4022],{"class":622},[52,56750,56751],{"class":54231},"input",[52,56753,56754],{"class":58}," type",[52,56756,2099],{"class":622},[52,56758,56759],{"class":62},"\"checkbox\"",[52,56761,17876],{"class":58},[52,56763,2099],{"class":622},[52,56765,10608],{"class":62},[52,56767,17915],{"class":58},[52,56769,2099],{"class":622},[52,56771,10608],{"class":62},[52,56773,56774],{"class":58}," checked",[52,56776,54238],{"class":622},[52,56778,56779],{"class":54,"line":82},[52,56780,56781],{"class":622},"不选的话：\n",[52,56783,56784],{"class":54,"line":97},[52,56785,56786],{"class":622},"const input = document.querySelector('input')\n",[52,56788,56789],{"class":54,"line":112},[52,56790,56791],{"class":622},"input.checked=false\n",[52,56793,56794],{"class":54,"line":119},[52,56795,56796],{"class":622},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[52,56798,56799],{"class":54,"line":130},[52,56800,116],{"emptyLinePlaceholder":115},[52,56802,56803],{"class":54,"line":136},[52,56804,56805],{"class":622},"禁用按钮：\n",[52,56807,56808],{"class":54,"line":141},[52,56809,56810],{"class":622},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[52,56812,56813,56815,56818,56821,56824,56826],{"class":54,"line":146},[52,56814,4022],{"class":622},[52,56816,56817],{"class":54231},"button",[52,56819,56820],{"class":58}," disabled",[52,56822,56823],{"class":622},">点击\u003C\u002F",[52,56825,56817],{"class":54231},[52,56827,54238],{"class":622},[52,56829,56830,56832,56834,56836,56838],{"class":54,"line":152},[52,56831,4022],{"class":622},[52,56833,56817],{"class":54231},[52,56835,56823],{"class":622},[52,56837,56817],{"class":54231},[52,56839,54238],{"class":622},[52,56841,56842],{"class":54,"line":157},[52,56843,56844],{"class":622},"const bt = document.querySelector('button')\n",[52,56846,56847],{"class":54,"line":173},[52,56848,56849],{"class":622},"bt.disabled = false\n",[1070,56851,56852],{"start":69},[1073,56853,56854],{},"自定义属性",[274,56856,56857],{},[280,56858],{"alt":28,"src":56859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[19,56861,56863],{"className":55997,"code":56862,"language":55999,"meta":28,"style":28},"\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",[26,56864,56865,56873,56901,56920,56939,56958,56977,56985,56990,56995,57000,57005,57013],{"__ignoreMap":28},[52,56866,56867,56869,56871],{"class":54,"line":55},[52,56868,4022],{"class":622},[52,56870,54731],{"class":54231},[52,56872,54238],{"class":622},[52,56874,56875,56877,56879,56882,56884,56886,56889,56891,56894,56897,56899],{"class":54,"line":69},[52,56876,55075],{"class":622},[52,56878,54542],{"class":54231},[52,56880,56881],{"class":58}," data-id",[52,56883,2099],{"class":622},[52,56885,6637],{"class":62},[52,56887,56888],{"class":58}," data-spm",[52,56890,2099],{"class":622},[52,56892,56893],{"class":62},"\"我不知道\"",[52,56895,56896],{"class":622},">1\u003C\u002F",[52,56898,54542],{"class":54231},[52,56900,54238],{"class":622},[52,56902,56903,56905,56907,56909,56911,56913,56916,56918],{"class":54,"line":82},[52,56904,55075],{"class":622},[52,56906,54542],{"class":54231},[52,56908,56881],{"class":58},[52,56910,2099],{"class":622},[52,56912,6660],{"class":62},[52,56914,56915],{"class":622},">2\u003C\u002F",[52,56917,54542],{"class":54231},[52,56919,54238],{"class":622},[52,56921,56922,56924,56926,56928,56930,56932,56935,56937],{"class":54,"line":97},[52,56923,55075],{"class":622},[52,56925,54542],{"class":54231},[52,56927,56881],{"class":58},[52,56929,2099],{"class":622},[52,56931,6673],{"class":62},[52,56933,56934],{"class":622},">3\u003C\u002F",[52,56936,54542],{"class":54231},[52,56938,54238],{"class":622},[52,56940,56941,56943,56945,56947,56949,56951,56954,56956],{"class":54,"line":112},[52,56942,55075],{"class":622},[52,56944,54542],{"class":54231},[52,56946,56881],{"class":58},[52,56948,2099],{"class":622},[52,56950,6686],{"class":62},[52,56952,56953],{"class":622},">4\u003C\u002F",[52,56955,54542],{"class":54231},[52,56957,54238],{"class":622},[52,56959,56960,56962,56964,56966,56968,56970,56973,56975],{"class":54,"line":119},[52,56961,55075],{"class":622},[52,56963,54542],{"class":54231},[52,56965,56881],{"class":58},[52,56967,2099],{"class":622},[52,56969,6707],{"class":62},[52,56971,56972],{"class":622},">5\u003C\u002F",[52,56974,54542],{"class":54231},[52,56976,54238],{"class":622},[52,56978,56979,56981,56983],{"class":54,"line":130},[52,56980,55075],{"class":622},[52,56982,54744],{"class":54231},[52,56984,54238],{"class":622},[52,56986,56987],{"class":54,"line":136},[52,56988,56989],{"class":622},"    const one = document.querySelector('div')\n",[52,56991,56992],{"class":54,"line":141},[52,56993,56994],{"class":622},"    console.log(one.dataset)\n",[52,56996,56997],{"class":54,"line":146},[52,56998,56999],{"class":622},"    console.log(one.dataset.id)\n",[52,57001,57002],{"class":54,"line":152},[52,57003,57004],{"class":622},"    console.log(one.dataset.spm)\n",[52,57006,57007,57009,57011],{"class":54,"line":157},[52,57008,55347],{"class":622},[52,57010,54744],{"class":54231},[52,57012,54238],{"class":622},[52,57014,57015,57017,57019],{"class":54,"line":173},[52,57016,54716],{"class":622},[52,57018,54731],{"class":54231},[52,57020,54238],{"class":622},[274,57022,57023],{},[280,57024],{"alt":28,"src":57025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[274,57027,57028],{},"document.querySelector选择的是第一个对象（元素）",[30,57030,57032],{"id":57031},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[274,57034,57035],{},[280,57036],{"alt":28,"src":57037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[274,57039,57040],{},[280,57041],{"alt":28,"src":57042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[274,57044,57045],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54744,57047,57048],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[274,57050,57051],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54744,57053,57054],{},"\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",[274,57056,57057],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[274,57059,57060],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[274,57062,57063],{},"单位为毫秒！！！",[274,57065,57066],{},"可以搭配匿名函数来用！！！",[274,57068,57069],{},"setInterval(function () {",[274,57071,57072],{},"alert('两秒执行一次')",[274,57074,57075],{},"}, 2000)",[274,57077,57078],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[274,57080,57081],{},"function fn() {",[274,57083,57084],{},"document.write(1)",[274,57086,4058],{},[274,57088,57089],{},"setInterval(fn, 1000)",[274,57091,57092],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[274,57094,57095],{},"setInterval('fn()', 1000)",[274,57097,57098],{},[280,57099],{"alt":28,"src":57100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[1486,57102,57104],{"id":57103},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[19,57106,57108],{"className":53564,"code":57107,"language":53566,"meta":28,"style":28},"\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",[26,57109,57110,57120,57134,57138,57146,57160,57180,57192,57200,57204,57212,57249,57254,57259,57264,57272,57280,57302,57310,57315,57337,57342,57347,57358,57363,57383,57391,57406,57421,57432,57437,57447,57457,57461,57470,57474,57482,57490,57494],{"__ignoreMap":28},[52,57111,57112,57114,57116,57118],{"class":54,"line":55},[52,57113,54228],{"class":622},[52,57115,54232],{"class":54231},[52,57117,54235],{"class":58},[52,57119,54238],{"class":622},[52,57121,57122,57124,57126,57128,57130,57132],{"class":54,"line":69},[52,57123,4022],{"class":622},[52,57125,53566],{"class":54231},[52,57127,54247],{"class":58},[52,57129,2099],{"class":622},[52,57131,54252],{"class":62},[52,57133,54238],{"class":622},[52,57135,57136],{"class":54,"line":82},[52,57137,116],{"emptyLinePlaceholder":115},[52,57139,57140,57142,57144],{"class":54,"line":97},[52,57141,4022],{"class":622},[52,57143,54265],{"class":54231},[52,57145,54238],{"class":622},[52,57147,57148,57150,57152,57154,57156,57158],{"class":54,"line":112},[52,57149,55075],{"class":622},[52,57151,54275],{"class":54231},[52,57153,54278],{"class":58},[52,57155,2099],{"class":622},[52,57157,54283],{"class":62},[52,57159,54238],{"class":622},[52,57161,57162,57164,57166,57168,57170,57172,57174,57176,57178],{"class":54,"line":119},[52,57163,55075],{"class":622},[52,57165,54275],{"class":54231},[52,57167,17876],{"class":58},[52,57169,2099],{"class":622},[52,57171,54322],{"class":62},[52,57173,54302],{"class":58},[52,57175,2099],{"class":622},[52,57177,54329],{"class":62},[52,57179,54238],{"class":622},[52,57181,57182,57184,57186,57188,57190],{"class":54,"line":130},[52,57183,55075],{"class":622},[52,57185,54338],{"class":54231},[52,57187,54341],{"class":622},[52,57189,54338],{"class":54231},[52,57191,54238],{"class":622},[52,57193,57194,57196,57198],{"class":54,"line":136},[52,57195,54716],{"class":622},[52,57197,54265],{"class":54231},[52,57199,54238],{"class":622},[52,57201,57202],{"class":54,"line":141},[52,57203,116],{"emptyLinePlaceholder":115},[52,57205,57206,57208,57210],{"class":54,"line":146},[52,57207,4022],{"class":622},[52,57209,54731],{"class":54231},[52,57211,54238],{"class":622},[52,57213,57214,57216,57219,57221,57223,57225,57227,57229,57231,57234,57236,57239,57242,57244,57247],{"class":54,"line":152},[52,57215,55075],{"class":622},[52,57217,57218],{"class":54231},"textarea",[52,57220,17876],{"class":58},[52,57222,2099],{"class":622},[52,57224,10608],{"class":62},[52,57226,17915],{"class":58},[52,57228,2099],{"class":622},[52,57230,10608],{"class":62},[52,57232,57233],{"class":58}," cols",[52,57235,2099],{"class":622},[52,57237,57238],{"class":62},"\"30\"",[52,57240,57241],{"class":58}," rows",[52,57243,2099],{"class":622},[52,57245,57246],{"class":62},"\"10\"",[52,57248,54238],{"class":622},[52,57250,57251],{"class":54,"line":157},[52,57252,57253],{"class":622},"        用户注册协议\n",[52,57255,57256],{"class":54,"line":173},[52,57257,57258],{"class":622},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[52,57260,57261],{"class":54,"line":178},[52,57262,57263],{"class":622},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[52,57265,57266,57268,57270],{"class":54,"line":184},[52,57267,54707],{"class":622},[52,57269,57218],{"class":54231},[52,57271,54238],{"class":622},[52,57273,57274,57276,57278],{"class":54,"line":189},[52,57275,55075],{"class":622},[52,57277,56646],{"class":54231},[52,57279,54238],{"class":622},[52,57281,57282,57284,57286,57288,57290,57293,57295,57298,57300],{"class":54,"line":201},[52,57283,55075],{"class":622},[52,57285,56817],{"class":54231},[52,57287,56416],{"class":58},[52,57289,2099],{"class":622},[52,57291,57292],{"class":62},"\"btn\"",[52,57294,56820],{"class":58},[52,57296,57297],{"class":622},">我已经阅读用户协议(5)\u003C\u002F",[52,57299,56817],{"class":54231},[52,57301,54238],{"class":622},[52,57303,57304,57306,57308],{"class":54,"line":206},[52,57305,55075],{"class":622},[52,57307,54744],{"class":54231},[52,57309,54238],{"class":622},[52,57311,57312],{"class":54,"line":224},[52,57313,57314],{"class":332},"    \u002F\u002F 1. 获取元素\n",[52,57316,57317,57319,57322,57324,57327,57330,57332,57335],{"class":54,"line":229},[52,57318,14177],{"class":160},[52,57320,57321],{"class":90}," btn",[52,57323,16520],{"class":160},[52,57325,57326],{"class":622}," document.",[52,57328,57329],{"class":58},"querySelector",[52,57331,3121],{"class":622},[52,57333,57334],{"class":62},"'.btn'",[52,57336,170],{"class":622},[52,57338,57339],{"class":54,"line":241},[52,57340,57341],{"class":332},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[52,57343,57344],{"class":54,"line":246},[52,57345,57346],{"class":332},"    \u002F\u002F 2. 倒计时\n",[52,57348,57349,57351,57353,57355],{"class":54,"line":252},[52,57350,55150],{"class":160},[52,57352,12394],{"class":622},[52,57354,2099],{"class":160},[52,57356,57357],{"class":90}," 5\n",[52,57359,57360],{"class":54,"line":257},[52,57361,57362],{"class":332},"    \u002F\u002F 2.1 开启定时器\n",[52,57364,57365,57367,57370,57372,57375,57377,57380],{"class":54,"line":266},[52,57366,55150],{"class":160},[52,57368,57369],{"class":622}," n ",[52,57371,2099],{"class":160},[52,57373,57374],{"class":58}," setInterval",[52,57376,3121],{"class":622},[52,57378,57379],{"class":160},"function",[52,57381,57382],{"class":622}," () {\n",[52,57384,57385,57388],{"class":54,"line":4722},[52,57386,57387],{"class":622},"      i",[52,57389,57390],{"class":160},"--\n",[52,57392,57393,57396,57398,57401,57403],{"class":54,"line":4727},[52,57394,57395],{"class":622},"      btn.innerHTML ",[52,57397,2099],{"class":160},[52,57399,57400],{"class":62}," `我已经阅读用户协议(${",[52,57402,3554],{"class":622},[52,57404,57405],{"class":62},"})`\n",[52,57407,57408,57411,57414,57417,57419],{"class":54,"line":4741},[52,57409,57410],{"class":160},"      if",[52,57412,57413],{"class":622}," (i ",[52,57415,57416],{"class":160},"===",[52,57418,7052],{"class":90},[52,57420,15398],{"class":622},[52,57422,57423,57426,57429],{"class":54,"line":4746},[52,57424,57425],{"class":58},"        clearInterval",[52,57427,57428],{"class":622},"(n)  ",[52,57430,57431],{"class":332},"\u002F\u002F 关闭定时器\n",[52,57433,57434],{"class":54,"line":5538},[52,57435,57436],{"class":332},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[52,57438,57439,57442,57444],{"class":54,"line":5552},[52,57440,57441],{"class":622},"        btn.disabled ",[52,57443,2099],{"class":160},[52,57445,57446],{"class":90}," false\n",[52,57448,57449,57452,57454],{"class":54,"line":5560},[52,57450,57451],{"class":622},"        btn.innerHTML ",[52,57453,2099],{"class":160},[52,57455,57456],{"class":62}," '同意'\n",[52,57458,57459],{"class":54,"line":5565},[52,57460,55328],{"class":622},[52,57462,57463,57466,57468],{"class":54,"line":5571},[52,57464,57465],{"class":622},"    }, ",[52,57467,9366],{"class":90},[52,57469,170],{"class":622},[52,57471,57472],{"class":54,"line":5577},[52,57473,116],{"emptyLinePlaceholder":115},[52,57475,57476,57478,57480],{"class":54,"line":5582},[52,57477,55347],{"class":622},[52,57479,54744],{"class":54231},[52,57481,54238],{"class":622},[52,57483,57484,57486,57488],{"class":54,"line":10904},[52,57485,54716],{"class":622},[52,57487,54731],{"class":54231},[52,57489,54238],{"class":622},[52,57491,57492],{"class":54,"line":10928},[52,57493,116],{"emptyLinePlaceholder":115},[52,57495,57496,57498,57500],{"class":54,"line":10933},[52,57497,54716],{"class":622},[52,57499,53566],{"class":54231},[52,57501,54238],{"class":622},[274,57503,57504],{},"不要一直想着用死循环,避免死循环",[274,57506,57507,57510],{},[26,57508,57509],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[1486,57512,57514],{"id":57513},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1070,57516,57517],{},[1073,57518,57519],{},"法1",[19,57521,57523],{"className":53564,"code":57522,"language":53566,"meta":28,"style":28},"\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",[26,57524,57525,57535,57549,57553,57561,57575,57595,57607,57615,57621,57632,57643,57647,57651,57658,57670,57674,57678,57685,57697,57711,57724,57738,57742,57746,57753,57764,57775,57786,57798,57810,57822,57826,57830,57838,57848,57861,57873,57886,57890,57894,57901,57911,57923,57935,57946,57957,57967,57979,57991,57995,57999,58008,58020,58032,58060,58073,58077,58081,58088,58099,58103,58111,58119,58123,58131,58145,58160,58184,58192,58207,58220,58228,58249,58261,58273,58285,58297,58309,58321,58333,58342,58350,58358,58366,58378,58401,58420,58439,58458,58477,58496,58515,58535,58539,58559,58578,58598,58619,58630,58647,58657,58667,58677,58682,58687,58692,58697,58722,58735,58739,58762,58766,58774,58782,58790,58794],{"__ignoreMap":28},[52,57526,57527,57529,57531,57533],{"class":54,"line":55},[52,57528,54228],{"class":622},[52,57530,54232],{"class":54231},[52,57532,54235],{"class":58},[52,57534,54238],{"class":622},[52,57536,57537,57539,57541,57543,57545,57547],{"class":54,"line":69},[52,57538,4022],{"class":622},[52,57540,53566],{"class":54231},[52,57542,54247],{"class":58},[52,57544,2099],{"class":622},[52,57546,54252],{"class":62},[52,57548,54238],{"class":622},[52,57550,57551],{"class":54,"line":82},[52,57552,116],{"emptyLinePlaceholder":115},[52,57554,57555,57557,57559],{"class":54,"line":97},[52,57556,4022],{"class":622},[52,57558,54265],{"class":54231},[52,57560,54238],{"class":622},[52,57562,57563,57565,57567,57569,57571,57573],{"class":54,"line":112},[52,57564,55075],{"class":622},[52,57566,54275],{"class":54231},[52,57568,54278],{"class":58},[52,57570,2099],{"class":622},[52,57572,54283],{"class":62},[52,57574,54238],{"class":622},[52,57576,57577,57579,57581,57583,57585,57587,57589,57591,57593],{"class":54,"line":119},[52,57578,55075],{"class":622},[52,57580,54275],{"class":54231},[52,57582,17876],{"class":58},[52,57584,2099],{"class":622},[52,57586,54322],{"class":62},[52,57588,54302],{"class":58},[52,57590,2099],{"class":622},[52,57592,54329],{"class":62},[52,57594,54238],{"class":622},[52,57596,57597,57599,57601,57603,57605],{"class":54,"line":130},[52,57598,55075],{"class":622},[52,57600,54338],{"class":54231},[52,57602,54341],{"class":622},[52,57604,54338],{"class":54231},[52,57606,54238],{"class":622},[52,57608,57609,57611,57613],{"class":54,"line":136},[52,57610,55075],{"class":622},[52,57612,3015],{"class":54231},[52,57614,54238],{"class":622},[52,57616,57617,57619],{"class":54,"line":141},[52,57618,9359],{"class":54231},[52,57620,18528],{"class":622},[52,57622,57623,57626,57628,57630],{"class":54,"line":146},[52,57624,57625],{"class":90},"      padding",[52,57627,54368],{"class":622},[52,57629,3306],{"class":90},[52,57631,4272],{"class":622},[52,57633,57634,57637,57639,57641],{"class":54,"line":152},[52,57635,57636],{"class":90},"      margin",[52,57638,54368],{"class":622},[52,57640,3306],{"class":90},[52,57642,4272],{"class":622},[52,57644,57645],{"class":54,"line":157},[52,57646,5149],{"class":622},[52,57648,57649],{"class":54,"line":173},[52,57650,116],{"emptyLinePlaceholder":115},[52,57652,57653,57656],{"class":54,"line":178},[52,57654,57655],{"class":54231},"    li",[52,57657,18528],{"class":622},[52,57659,57660,57663,57665,57668],{"class":54,"line":184},[52,57661,57662],{"class":90},"      list-style",[52,57664,54368],{"class":622},[52,57666,57667],{"class":90},"none",[52,57669,4272],{"class":622},[52,57671,57672],{"class":54,"line":189},[52,57673,5149],{"class":622},[52,57675,57676],{"class":54,"line":201},[52,57677,116],{"emptyLinePlaceholder":115},[52,57679,57680,57683],{"class":54,"line":206},[52,57681,57682],{"class":58},"    .box",[52,57684,18528],{"class":622},[52,57686,57687,57690,57692,57695],{"class":54,"line":224},[52,57688,57689],{"class":90},"      position",[52,57691,54368],{"class":622},[52,57693,57694],{"class":90},"relative",[52,57696,4272],{"class":622},[52,57698,57699,57702,57704,57707,57709],{"class":54,"line":229},[52,57700,57701],{"class":90},"      width",[52,57703,54368],{"class":622},[52,57705,57706],{"class":90},"976",[52,57708,54423],{"class":160},[52,57710,4272],{"class":622},[52,57712,57713,57716,57718,57720,57722],{"class":54,"line":241},[52,57714,57715],{"class":90},"      height",[52,57717,54368],{"class":622},[52,57719,4517],{"class":90},[52,57721,54423],{"class":160},[52,57723,4272],{"class":622},[52,57725,57726,57728,57730,57732,57734,57736],{"class":54,"line":246},[52,57727,57636],{"class":90},[52,57729,54368],{"class":622},[52,57731,3424],{"class":90},[52,57733,54423],{"class":160},[52,57735,54487],{"class":90},[52,57737,4272],{"class":622},[52,57739,57740],{"class":54,"line":252},[52,57741,5149],{"class":622},[52,57743,57744],{"class":54,"line":257},[52,57745,116],{"emptyLinePlaceholder":115},[52,57747,57748,57751],{"class":54,"line":266},[52,57749,57750],{"class":58},"    .slider-footer",[52,57752,18528],{"class":622},[52,57754,57755,57757,57759,57762],{"class":54,"line":4722},[52,57756,57689],{"class":90},[52,57758,54368],{"class":622},[52,57760,57761],{"class":90},"absolute",[52,57763,4272],{"class":622},[52,57765,57766,57769,57771,57773],{"class":54,"line":4727},[52,57767,57768],{"class":90},"      left",[52,57770,54368],{"class":622},[52,57772,3306],{"class":90},[52,57774,4272],{"class":622},[52,57776,57777,57780,57782,57784],{"class":54,"line":4741},[52,57778,57779],{"class":90},"      bottom",[52,57781,54368],{"class":622},[52,57783,3306],{"class":90},[52,57785,4272],{"class":622},[52,57787,57788,57790,57792,57794,57796],{"class":54,"line":4746},[52,57789,57701],{"class":90},[52,57791,54368],{"class":622},[52,57793,3424],{"class":90},[52,57795,3441],{"class":160},[52,57797,4272],{"class":622},[52,57799,57800,57802,57804,57806,57808],{"class":54,"line":5538},[52,57801,57715],{"class":90},[52,57803,54368],{"class":622},[52,57805,3687],{"class":90},[52,57807,3441],{"class":160},[52,57809,4272],{"class":622},[52,57811,57812,57815,57817,57820],{"class":54,"line":5552},[52,57813,57814],{"class":90},"      background-color",[52,57816,54368],{"class":622},[52,57818,57819],{"class":90},"skyblue",[52,57821,4272],{"class":622},[52,57823,57824],{"class":54,"line":5560},[52,57825,5149],{"class":622},[52,57827,57828],{"class":54,"line":5565},[52,57829,116],{"emptyLinePlaceholder":115},[52,57831,57832,57834,57836],{"class":54,"line":5571},[52,57833,57750],{"class":58},[52,57835,9781],{"class":54231},[52,57837,18528],{"class":622},[52,57839,57840,57842,57844,57846],{"class":54,"line":5577},[52,57841,57689],{"class":90},[52,57843,54368],{"class":622},[52,57845,57761],{"class":90},[52,57847,4272],{"class":622},[52,57849,57850,57853,57855,57857,57859],{"class":54,"line":5582},[52,57851,57852],{"class":90},"      font-size",[52,57854,54368],{"class":622},[52,57856,4013],{"class":90},[52,57858,54423],{"class":160},[52,57860,4272],{"class":622},[52,57862,57863,57865,57867,57869,57871],{"class":54,"line":10904},[52,57864,57768],{"class":90},[52,57866,54368],{"class":622},[52,57868,3812],{"class":90},[52,57870,54423],{"class":160},[52,57872,4272],{"class":622},[52,57874,57875,57878,57880,57882,57884],{"class":54,"line":10928},[52,57876,57877],{"class":90},"      top",[52,57879,54368],{"class":622},[52,57881,3432],{"class":90},[52,57883,54423],{"class":160},[52,57885,4272],{"class":622},[52,57887,57888],{"class":54,"line":10933},[52,57889,5149],{"class":622},[52,57891,57892],{"class":54,"line":10939},[52,57893,116],{"emptyLinePlaceholder":115},[52,57895,57896,57899],{"class":54,"line":10966},[52,57897,57898],{"class":54231},"    ul",[52,57900,18528],{"class":622},[52,57902,57903,57905,57907,57909],{"class":54,"line":10971},[52,57904,57689],{"class":90},[52,57906,54368],{"class":622},[52,57908,57761],{"class":90},[52,57910,4272],{"class":622},[52,57912,57913,57915,57917,57919,57921],{"class":54,"line":10977},[52,57914,57877],{"class":90},[52,57916,54368],{"class":622},[52,57918,3893],{"class":90},[52,57920,54423],{"class":160},[52,57922,4272],{"class":622},[52,57924,57925,57927,57929,57931,57933],{"class":54,"line":10989},[52,57926,57768],{"class":90},[52,57928,54368],{"class":622},[52,57930,3812],{"class":90},[52,57932,54423],{"class":160},[52,57934,4272],{"class":622},[52,57936,57937,57940,57942,57944],{"class":54,"line":11001},[52,57938,57939],{"class":90},"      display",[52,57941,54368],{"class":622},[52,57943,54408],{"class":90},[52,57945,4272],{"class":622},[52,57947,57948,57951,57953,57955],{"class":54,"line":11013},[52,57949,57950],{"class":90},"      justify-content",[52,57952,54368],{"class":622},[52,57954,54599],{"class":90},[52,57956,4272],{"class":622},[52,57958,57959,57961,57963,57965],{"class":54,"line":12672},[52,57960,57689],{"class":90},[52,57962,54368],{"class":622},[52,57964,57761],{"class":90},[52,57966,4272],{"class":622},[52,57968,57969,57971,57973,57975,57977],{"class":54,"line":12697},[52,57970,57701],{"class":90},[52,57972,54368],{"class":622},[52,57974,6951],{"class":90},[52,57976,54423],{"class":160},[52,57978,4272],{"class":622},[52,57980,57981,57983,57985,57987,57989],{"class":54,"line":12720},[52,57982,57715],{"class":90},[52,57984,54368],{"class":622},[52,57986,3812],{"class":90},[52,57988,54423],{"class":160},[52,57990,4272],{"class":622},[52,57992,57993],{"class":54,"line":12744},[52,57994,5149],{"class":622},[52,57996,57997],{"class":54,"line":12749},[52,57998,116],{"emptyLinePlaceholder":115},[52,58000,58001,58003,58006],{"class":54,"line":12754},[52,58002,57898],{"class":54231},[52,58004,58005],{"class":54231}," li",[52,58007,18528],{"class":622},[52,58009,58010,58012,58014,58016,58018],{"class":54,"line":12759},[52,58011,57701],{"class":90},[52,58013,54368],{"class":622},[52,58015,3812],{"class":90},[52,58017,54423],{"class":160},[52,58019,4272],{"class":622},[52,58021,58022,58024,58026,58028,58030],{"class":54,"line":12768},[52,58023,57715],{"class":90},[52,58025,54368],{"class":622},[52,58027,3812],{"class":90},[52,58029,54423],{"class":160},[52,58031,4272],{"class":622},[52,58033,58034,58036,58038,58041,58043,58045,58047,58049,58051,58053,58055,58058],{"class":54,"line":12773},[52,58035,57814],{"class":90},[52,58037,54368],{"class":622},[52,58039,58040],{"class":90},"rgba",[52,58042,3121],{"class":622},[52,58044,3306],{"class":90},[52,58046,15391],{"class":622},[52,58048,3306],{"class":90},[52,58050,15391],{"class":622},[52,58052,3306],{"class":90},[52,58054,15391],{"class":622},[52,58056,58057],{"class":90},".4",[52,58059,5679],{"class":622},[52,58061,58062,58065,58067,58069,58071],{"class":54,"line":12779},[52,58063,58064],{"class":90},"      border-radius",[52,58066,54368],{"class":622},[52,58068,3559],{"class":90},[52,58070,54423],{"class":160},[52,58072,4272],{"class":622},[52,58074,58075],{"class":54,"line":12800},[52,58076,5149],{"class":622},[52,58078,58079],{"class":54,"line":12806},[52,58080,116],{"emptyLinePlaceholder":115},[52,58082,58083,58086],{"class":54,"line":12820},[52,58084,58085],{"class":58},"    .activate",[52,58087,18528],{"class":622},[52,58089,58090,58092,58094,58097],{"class":54,"line":12826},[52,58091,57814],{"class":90},[52,58093,54368],{"class":622},[52,58095,58096],{"class":90},"#f7f7f7",[52,58098,4272],{"class":622},[52,58100,58101],{"class":54,"line":12853},[52,58102,5149],{"class":622},[52,58104,58105,58107,58109],{"class":54,"line":12862},[52,58106,55347],{"class":622},[52,58108,3015],{"class":54231},[52,58110,54238],{"class":622},[52,58112,58113,58115,58117],{"class":54,"line":12868},[52,58114,54716],{"class":622},[52,58116,54265],{"class":54231},[52,58118,54238],{"class":622},[52,58120,58121],{"class":54,"line":12876},[52,58122,116],{"emptyLinePlaceholder":115},[52,58124,58125,58127,58129],{"class":54,"line":12881},[52,58126,4022],{"class":622},[52,58128,54731],{"class":54231},[52,58130,54238],{"class":622},[52,58132,58133,58135,58137,58139,58141,58143],{"class":54,"line":19560},[52,58134,55075],{"class":622},[52,58136,54542],{"class":54231},[52,58138,56416],{"class":58},[52,58140,2099],{"class":622},[52,58142,56421],{"class":62},[52,58144,54238],{"class":622},[52,58146,58147,58149,58151,58153,58155,58158],{"class":54,"line":19566},[52,58148,54272],{"class":622},[52,58150,54542],{"class":54231},[52,58152,56416],{"class":58},[52,58154,2099],{"class":622},[52,58156,58157],{"class":62},"\"slider-wrapper\"",[52,58159,54238],{"class":622},[52,58161,58162,58165,58167,58170,58172,58175,58178,58180,58182],{"class":54,"line":19589},[52,58163,58164],{"class":622},"      \u003C",[52,58166,280],{"class":54231},[52,58168,58169],{"class":58}," src",[52,58171,2099],{"class":622},[52,58173,58174],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[52,58176,58177],{"class":58}," alt",[52,58179,2099],{"class":622},[52,58181,10608],{"class":62},[52,58183,54238],{"class":622},[52,58185,58186,58188,58190],{"class":54,"line":19595},[52,58187,54707],{"class":622},[52,58189,54542],{"class":54231},[52,58191,54238],{"class":622},[52,58193,58194,58196,58198,58200,58202,58205],{"class":54,"line":19618},[52,58195,54272],{"class":622},[52,58197,54542],{"class":54231},[52,58199,56416],{"class":58},[52,58201,2099],{"class":622},[52,58203,58204],{"class":62},"\"slider-footer\"",[52,58206,54238],{"class":622},[52,58208,58209,58211,58213,58216,58218],{"class":54,"line":19632},[52,58210,58164],{"class":622},[52,58212,274],{"class":54231},[52,58214,58215],{"class":622},">对人类来说会不会太超前了?\u003C\u002F",[52,58217,274],{"class":54231},[52,58219,54238],{"class":622},[52,58221,58222,58224,58226],{"class":54,"line":19652},[52,58223,58164],{"class":622},[52,58225,4118],{"class":54231},[52,58227,54238],{"class":622},[52,58229,58230,58233,58235,58237,58239,58242,58245,58247],{"class":54,"line":19658},[52,58231,58232],{"class":622},"        \u003C",[52,58234,1073],{"class":54231},[52,58236,56416],{"class":58},[52,58238,2099],{"class":622},[52,58240,58241],{"class":62},"\"activate\"",[52,58243,58244],{"class":622},">\u003C\u002F",[52,58246,1073],{"class":54231},[52,58248,54238],{"class":622},[52,58250,58251,58253,58255,58257,58259],{"class":54,"line":19669},[52,58252,58232],{"class":622},[52,58254,1073],{"class":54231},[52,58256,58244],{"class":622},[52,58258,1073],{"class":54231},[52,58260,54238],{"class":622},[52,58262,58263,58265,58267,58269,58271],{"class":54,"line":19692},[52,58264,58232],{"class":622},[52,58266,1073],{"class":54231},[52,58268,58244],{"class":622},[52,58270,1073],{"class":54231},[52,58272,54238],{"class":622},[52,58274,58275,58277,58279,58281,58283],{"class":54,"line":19714},[52,58276,58232],{"class":622},[52,58278,1073],{"class":54231},[52,58280,58244],{"class":622},[52,58282,1073],{"class":54231},[52,58284,54238],{"class":622},[52,58286,58287,58289,58291,58293,58295],{"class":54,"line":19719},[52,58288,58232],{"class":622},[52,58290,1073],{"class":54231},[52,58292,58244],{"class":622},[52,58294,1073],{"class":54231},[52,58296,54238],{"class":622},[52,58298,58299,58301,58303,58305,58307],{"class":54,"line":19725},[52,58300,58232],{"class":622},[52,58302,1073],{"class":54231},[52,58304,58244],{"class":622},[52,58306,1073],{"class":54231},[52,58308,54238],{"class":622},[52,58310,58311,58313,58315,58317,58319],{"class":54,"line":19739},[52,58312,58232],{"class":622},[52,58314,1073],{"class":54231},[52,58316,58244],{"class":622},[52,58318,1073],{"class":54231},[52,58320,54238],{"class":622},[52,58322,58323,58325,58327,58329,58331],{"class":54,"line":19752},[52,58324,58232],{"class":622},[52,58326,1073],{"class":54231},[52,58328,58244],{"class":622},[52,58330,1073],{"class":54231},[52,58332,54238],{"class":622},[52,58334,58335,58338,58340],{"class":54,"line":19757},[52,58336,58337],{"class":622},"      \u003C\u002F",[52,58339,4118],{"class":54231},[52,58341,54238],{"class":622},[52,58343,58344,58346,58348],{"class":54,"line":19771},[52,58345,54707],{"class":622},[52,58347,54542],{"class":54231},[52,58349,54238],{"class":622},[52,58351,58352,58354,58356],{"class":54,"line":19776},[52,58353,55347],{"class":622},[52,58355,54542],{"class":54231},[52,58357,54238],{"class":622},[52,58359,58360,58362,58364],{"class":54,"line":19782},[52,58361,55075],{"class":622},[52,58363,54744],{"class":54231},[52,58365,54238],{"class":622},[52,58367,58368,58370,58373,58375],{"class":54,"line":19787},[52,58369,14177],{"class":160},[52,58371,58372],{"class":90}," arrImage",[52,58374,16520],{"class":160},[52,58376,58377],{"class":622}," [\n",[52,58379,58380,58383,58386,58389,58392,58395,58398],{"class":54,"line":19801},[52,58381,58382],{"class":622},"      { url: ",[52,58384,58385],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[52,58387,58388],{"class":622},", title: ",[52,58390,58391],{"class":62},"'对人类来说会不会太超前了?'",[52,58393,58394],{"class":622},", color: ",[52,58396,58397],{"class":62},"'rgba(100,67,68)'",[52,58399,58400],{"class":622}," },\n",[52,58402,58403,58405,58408,58410,58413,58415,58418],{"class":54,"line":19806},[52,58404,58382],{"class":622},[52,58406,58407],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[52,58409,58388],{"class":622},[52,58411,58412],{"class":62},"'开启剑与雪的黑暗传说!'",[52,58414,58394],{"class":622},[52,58416,58417],{"class":62},"'rgba(43,35,26)'",[52,58419,58400],{"class":622},[52,58421,58422,58424,58427,58429,58432,58434,58437],{"class":54,"line":19811},[52,58423,58382],{"class":622},[52,58425,58426],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[52,58428,58388],{"class":622},[52,58430,58431],{"class":62},"'真正的jo厨出现了!'",[52,58433,58394],{"class":622},[52,58435,58436],{"class":62},"'rgba(36,31,33)'",[52,58438,58400],{"class":622},[52,58440,58441,58443,58446,58448,58451,58453,58456],{"class":54,"line":19825},[52,58442,58382],{"class":622},[52,58444,58445],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[52,58447,58388],{"class":622},[52,58449,58450],{"class":62},"'李玉刚:让世界通过b站看到东方大国文化'",[52,58452,58394],{"class":622},[52,58454,58455],{"class":62},"'rgba(139,98,66)'",[52,58457,58400],{"class":622},[52,58459,58460,58462,58465,58467,58470,58472,58475],{"class":54,"line":19837},[52,58461,58382],{"class":622},[52,58463,58464],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[52,58466,58388],{"class":622},[52,58468,58469],{"class":62},"'快来分享你的寒假日常吧'",[52,58471,58394],{"class":622},[52,58473,58474],{"class":62},"'rgba(67,90,92)'",[52,58476,58400],{"class":622},[52,58478,58479,58481,58484,58486,58489,58491,58494],{"class":54,"line":19842},[52,58480,58382],{"class":622},[52,58482,58483],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[52,58485,58388],{"class":622},[52,58487,58488],{"class":62},"'哔哩哔哩小年YEAR'",[52,58490,58394],{"class":622},[52,58492,58493],{"class":62},"'rgba(166,131,143)'",[52,58495,58400],{"class":622},[52,58497,58498,58500,58503,58505,58508,58510,58513],{"class":54,"line":19855},[52,58499,58382],{"class":622},[52,58501,58502],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[52,58504,58388],{"class":622},[52,58506,58507],{"class":62},"'一站式解决你的电脑配置问题'",[52,58509,58394],{"class":622},[52,58511,58512],{"class":62},"'rgba(53,29,25)'",[52,58514,58400],{"class":622},[52,58516,58517,58519,58522,58524,58527,58529,58532],{"class":54,"line":19860},[52,58518,58382],{"class":622},[52,58520,58521],{"class":62},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[52,58523,58388],{"class":622},[52,58525,58526],{"class":62},"'谁不想和小猫咪贴贴呢?'",[52,58528,58394],{"class":622},[52,58530,58531],{"class":62},"'rgba(99,72,114)'",[52,58533,58534],{"class":622}," }\n",[52,58536,58537],{"class":54,"line":19865},[52,58538,56039],{"class":622},[52,58540,58541,58543,58546,58548,58550,58552,58554,58557],{"class":54,"line":19870},[52,58542,14177],{"class":160},[52,58544,58545],{"class":90}," img",[52,58547,16520],{"class":160},[52,58549,57326],{"class":622},[52,58551,57329],{"class":58},[52,58553,3121],{"class":622},[52,58555,58556],{"class":62},"'.slider-wrapper img'",[52,58558,170],{"class":622},[52,58560,58561,58563,58565,58567,58569,58571,58573,58576],{"class":54,"line":19883},[52,58562,14177],{"class":160},[52,58564,9781],{"class":90},[52,58566,16520],{"class":160},[52,58568,57326],{"class":622},[52,58570,57329],{"class":58},[52,58572,3121],{"class":622},[52,58574,58575],{"class":62},"'.slider-footer p'",[52,58577,170],{"class":622},[52,58579,58580,58582,58585,58587,58589,58591,58593,58596],{"class":54,"line":19888},[52,58581,14177],{"class":160},[52,58583,58584],{"class":90}," color",[52,58586,16520],{"class":160},[52,58588,57326],{"class":622},[52,58590,57329],{"class":58},[52,58592,3121],{"class":622},[52,58594,58595],{"class":62},"'.slider-footer'",[52,58597,170],{"class":622},[52,58599,58600,58602,58605,58607,58609,58612,58614,58617],{"class":54,"line":35565},[52,58601,14177],{"class":160},[52,58603,58604],{"class":90}," lis",[52,58606,16520],{"class":160},[52,58608,57326],{"class":622},[52,58610,58611],{"class":58},"querySelectorAll",[52,58613,3121],{"class":622},[52,58615,58616],{"class":62},"'.slider-footer ul li'",[52,58618,170],{"class":622},[52,58620,58621,58623,58625,58627],{"class":54,"line":35571},[52,58622,55150],{"class":160},[52,58624,12394],{"class":622},[52,58626,2099],{"class":160},[52,58628,58629],{"class":90}," 1\n",[52,58631,58632,58634,58637,58639,58641,58643,58645],{"class":54,"line":35577},[52,58633,55150],{"class":160},[52,58635,58636],{"class":622}," timer ",[52,58638,2099],{"class":160},[52,58640,57374],{"class":58},[52,58642,3121],{"class":622},[52,58644,57379],{"class":160},[52,58646,57382],{"class":622},[52,58648,58649,58652,58654],{"class":54,"line":35583},[52,58650,58651],{"class":622},"      img.src ",[52,58653,2099],{"class":160},[52,58655,58656],{"class":622}," arrImage[i].url\n",[52,58658,58659,58662,58664],{"class":54,"line":35589},[52,58660,58661],{"class":622},"      p.innerHTML ",[52,58663,2099],{"class":160},[52,58665,58666],{"class":622}," arrImage[i].title\n",[52,58668,58669,58672,58674],{"class":54,"line":35600},[52,58670,58671],{"class":622},"      color.style.backgroundColor ",[52,58673,2099],{"class":160},[52,58675,58676],{"class":622}," arrImage[i].color\n",[52,58678,58679],{"class":54,"line":35606},[52,58680,58681],{"class":332},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[52,58683,58684],{"class":54,"line":35626},[52,58685,58686],{"class":332},"      \u002F\u002F li.classList.add('activate')\n",[52,58688,58689],{"class":54,"line":35632},[52,58690,58691],{"class":332},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[52,58693,58694],{"class":54,"line":35643},[52,58695,58696],{"class":332},"      \u002F\u002F lis[i].classList.remove('activate')\n",[52,58698,58699,58702,58704,58706,58709,58712,58715,58717,58720],{"class":54,"line":35649},[52,58700,58701],{"class":622},"      document.",[52,58703,57329],{"class":58},[52,58705,3121],{"class":622},[52,58707,58708],{"class":62},"'.activate'",[52,58710,58711],{"class":622},")?.classList.",[52,58713,58714],{"class":58},"toggle",[52,58716,3121],{"class":622},[52,58718,58719],{"class":62},"'activate'",[52,58721,170],{"class":622},[52,58723,58724,58727,58729,58731,58733],{"class":54,"line":35655},[52,58725,58726],{"class":622},"      lis[i].classList.",[52,58728,8290],{"class":58},[52,58730,3121],{"class":622},[52,58732,58719],{"class":62},[52,58734,170],{"class":622},[52,58736,58737],{"class":54,"line":35661},[52,58738,116],{"emptyLinePlaceholder":115},[52,58740,58741,58744,58746,58748,58750,58752,58754,58756,58759],{"class":54,"line":35667},[52,58742,58743],{"class":622},"      i ",[52,58745,2099],{"class":160},[52,58747,57413],{"class":622},[52,58749,3593],{"class":160},[52,58751,28064],{"class":90},[52,58753,16670],{"class":622},[52,58755,3441],{"class":160},[52,58757,58758],{"class":622}," arrImage.",[52,58760,58761],{"class":90},"length\n",[52,58763,58764],{"class":54,"line":35673},[52,58765,116],{"emptyLinePlaceholder":115},[52,58767,58768,58770,58772],{"class":54,"line":35679},[52,58769,57465],{"class":622},[52,58771,9366],{"class":90},[52,58773,170],{"class":622},[52,58775,58776,58778,58780],{"class":54,"line":35685},[52,58777,55347],{"class":622},[52,58779,54744],{"class":54231},[52,58781,54238],{"class":622},[52,58783,58784,58786,58788],{"class":54,"line":35705},[52,58785,54716],{"class":622},[52,58787,54731],{"class":54231},[52,58789,54238],{"class":622},[52,58791,58792],{"class":54,"line":35711},[52,58793,116],{"emptyLinePlaceholder":115},[52,58795,58796,58798,58800],{"class":54,"line":35727},[52,58797,54716],{"class":622},[52,58799,53566],{"class":54231},[52,58801,54238],{"class":622},[274,58803,58804],{},[280,58805],{"alt":28,"src":58806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[274,58808,58809],{},"?.就是短路保护,确保输出正常进行",[274,58811,58812],{},"不要忘记取余%,有时候可以用",[274,58814,58815],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1070,58817,58818],{"start":69},[1073,58819,58820],{},"法2",[19,58822,58824],{"className":53564,"code":58823,"language":53566,"meta":28,"style":28},"\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",[26,58825,58826,58836,58850,58854,58862,58876,58896,58908,58916,58922,58932,58942,58946,58950,58956,58966,58970,58974,58980,58990,59002,59014,59028,59032,59036,59042,59052,59062,59072,59084,59096,59106,59110,59114,59122,59132,59144,59156,59168,59172,59176,59182,59192,59204,59216,59226,59236,59246,59258,59270,59274,59278,59286,59298,59310,59336,59348,59352,59356,59362,59372,59376,59384,59392,59396,59404,59418,59432,59452,59460,59474,59486,59494,59512,59524,59536,59548,59560,59572,59584,59596,59604,59612,59620,59628,59639,59655,59671,59687,59703,59719,59735,59751,59767,59771,59776,59794,59812,59822,59827,59832,59843,59849,59864,59873,59877,59882,59891,59896,59905,59910,59915,59920,59943,59973,59977,59985,59989,59997,60005,60009],{"__ignoreMap":28},[52,58827,58828,58830,58832,58834],{"class":54,"line":55},[52,58829,54228],{"class":622},[52,58831,54232],{"class":54231},[52,58833,54235],{"class":58},[52,58835,54238],{"class":622},[52,58837,58838,58840,58842,58844,58846,58848],{"class":54,"line":69},[52,58839,4022],{"class":622},[52,58841,53566],{"class":54231},[52,58843,54247],{"class":58},[52,58845,2099],{"class":622},[52,58847,54252],{"class":62},[52,58849,54238],{"class":622},[52,58851,58852],{"class":54,"line":82},[52,58853,116],{"emptyLinePlaceholder":115},[52,58855,58856,58858,58860],{"class":54,"line":97},[52,58857,4022],{"class":622},[52,58859,54265],{"class":54231},[52,58861,54238],{"class":622},[52,58863,58864,58866,58868,58870,58872,58874],{"class":54,"line":112},[52,58865,55075],{"class":622},[52,58867,54275],{"class":54231},[52,58869,54278],{"class":58},[52,58871,2099],{"class":622},[52,58873,54283],{"class":62},[52,58875,54238],{"class":622},[52,58877,58878,58880,58882,58884,58886,58888,58890,58892,58894],{"class":54,"line":119},[52,58879,55075],{"class":622},[52,58881,54275],{"class":54231},[52,58883,17876],{"class":58},[52,58885,2099],{"class":622},[52,58887,54322],{"class":62},[52,58889,54302],{"class":58},[52,58891,2099],{"class":622},[52,58893,54329],{"class":62},[52,58895,54238],{"class":622},[52,58897,58898,58900,58902,58904,58906],{"class":54,"line":130},[52,58899,55075],{"class":622},[52,58901,54338],{"class":54231},[52,58903,54341],{"class":622},[52,58905,54338],{"class":54231},[52,58907,54238],{"class":622},[52,58909,58910,58912,58914],{"class":54,"line":136},[52,58911,55075],{"class":622},[52,58913,3015],{"class":54231},[52,58915,54238],{"class":622},[52,58917,58918,58920],{"class":54,"line":141},[52,58919,9359],{"class":54231},[52,58921,18528],{"class":622},[52,58923,58924,58926,58928,58930],{"class":54,"line":146},[52,58925,57625],{"class":90},[52,58927,54368],{"class":622},[52,58929,3306],{"class":90},[52,58931,4272],{"class":622},[52,58933,58934,58936,58938,58940],{"class":54,"line":152},[52,58935,57636],{"class":90},[52,58937,54368],{"class":622},[52,58939,3306],{"class":90},[52,58941,4272],{"class":622},[52,58943,58944],{"class":54,"line":157},[52,58945,5149],{"class":622},[52,58947,58948],{"class":54,"line":173},[52,58949,116],{"emptyLinePlaceholder":115},[52,58951,58952,58954],{"class":54,"line":178},[52,58953,57655],{"class":54231},[52,58955,18528],{"class":622},[52,58957,58958,58960,58962,58964],{"class":54,"line":184},[52,58959,57662],{"class":90},[52,58961,54368],{"class":622},[52,58963,57667],{"class":90},[52,58965,4272],{"class":622},[52,58967,58968],{"class":54,"line":189},[52,58969,5149],{"class":622},[52,58971,58972],{"class":54,"line":201},[52,58973,116],{"emptyLinePlaceholder":115},[52,58975,58976,58978],{"class":54,"line":206},[52,58977,57682],{"class":58},[52,58979,18528],{"class":622},[52,58981,58982,58984,58986,58988],{"class":54,"line":224},[52,58983,57689],{"class":90},[52,58985,54368],{"class":622},[52,58987,57694],{"class":90},[52,58989,4272],{"class":622},[52,58991,58992,58994,58996,58998,59000],{"class":54,"line":229},[52,58993,57701],{"class":90},[52,58995,54368],{"class":622},[52,58997,57706],{"class":90},[52,58999,54423],{"class":160},[52,59001,4272],{"class":622},[52,59003,59004,59006,59008,59010,59012],{"class":54,"line":241},[52,59005,57715],{"class":90},[52,59007,54368],{"class":622},[52,59009,4517],{"class":90},[52,59011,54423],{"class":160},[52,59013,4272],{"class":622},[52,59015,59016,59018,59020,59022,59024,59026],{"class":54,"line":246},[52,59017,57636],{"class":90},[52,59019,54368],{"class":622},[52,59021,3424],{"class":90},[52,59023,54423],{"class":160},[52,59025,54487],{"class":90},[52,59027,4272],{"class":622},[52,59029,59030],{"class":54,"line":252},[52,59031,5149],{"class":622},[52,59033,59034],{"class":54,"line":257},[52,59035,116],{"emptyLinePlaceholder":115},[52,59037,59038,59040],{"class":54,"line":266},[52,59039,57750],{"class":58},[52,59041,18528],{"class":622},[52,59043,59044,59046,59048,59050],{"class":54,"line":4722},[52,59045,57689],{"class":90},[52,59047,54368],{"class":622},[52,59049,57761],{"class":90},[52,59051,4272],{"class":622},[52,59053,59054,59056,59058,59060],{"class":54,"line":4727},[52,59055,57768],{"class":90},[52,59057,54368],{"class":622},[52,59059,3306],{"class":90},[52,59061,4272],{"class":622},[52,59063,59064,59066,59068,59070],{"class":54,"line":4741},[52,59065,57779],{"class":90},[52,59067,54368],{"class":622},[52,59069,3306],{"class":90},[52,59071,4272],{"class":622},[52,59073,59074,59076,59078,59080,59082],{"class":54,"line":4746},[52,59075,57701],{"class":90},[52,59077,54368],{"class":622},[52,59079,3424],{"class":90},[52,59081,3441],{"class":160},[52,59083,4272],{"class":622},[52,59085,59086,59088,59090,59092,59094],{"class":54,"line":5538},[52,59087,57715],{"class":90},[52,59089,54368],{"class":622},[52,59091,3687],{"class":90},[52,59093,3441],{"class":160},[52,59095,4272],{"class":622},[52,59097,59098,59100,59102,59104],{"class":54,"line":5552},[52,59099,57814],{"class":90},[52,59101,54368],{"class":622},[52,59103,57819],{"class":90},[52,59105,4272],{"class":622},[52,59107,59108],{"class":54,"line":5560},[52,59109,5149],{"class":622},[52,59111,59112],{"class":54,"line":5565},[52,59113,116],{"emptyLinePlaceholder":115},[52,59115,59116,59118,59120],{"class":54,"line":5571},[52,59117,57750],{"class":58},[52,59119,9781],{"class":54231},[52,59121,18528],{"class":622},[52,59123,59124,59126,59128,59130],{"class":54,"line":5577},[52,59125,57689],{"class":90},[52,59127,54368],{"class":622},[52,59129,57761],{"class":90},[52,59131,4272],{"class":622},[52,59133,59134,59136,59138,59140,59142],{"class":54,"line":5582},[52,59135,57852],{"class":90},[52,59137,54368],{"class":622},[52,59139,4013],{"class":90},[52,59141,54423],{"class":160},[52,59143,4272],{"class":622},[52,59145,59146,59148,59150,59152,59154],{"class":54,"line":10904},[52,59147,57768],{"class":90},[52,59149,54368],{"class":622},[52,59151,3812],{"class":90},[52,59153,54423],{"class":160},[52,59155,4272],{"class":622},[52,59157,59158,59160,59162,59164,59166],{"class":54,"line":10928},[52,59159,57877],{"class":90},[52,59161,54368],{"class":622},[52,59163,3432],{"class":90},[52,59165,54423],{"class":160},[52,59167,4272],{"class":622},[52,59169,59170],{"class":54,"line":10933},[52,59171,5149],{"class":622},[52,59173,59174],{"class":54,"line":10939},[52,59175,116],{"emptyLinePlaceholder":115},[52,59177,59178,59180],{"class":54,"line":10966},[52,59179,57898],{"class":54231},[52,59181,18528],{"class":622},[52,59183,59184,59186,59188,59190],{"class":54,"line":10971},[52,59185,57689],{"class":90},[52,59187,54368],{"class":622},[52,59189,57761],{"class":90},[52,59191,4272],{"class":622},[52,59193,59194,59196,59198,59200,59202],{"class":54,"line":10977},[52,59195,57877],{"class":90},[52,59197,54368],{"class":622},[52,59199,3893],{"class":90},[52,59201,54423],{"class":160},[52,59203,4272],{"class":622},[52,59205,59206,59208,59210,59212,59214],{"class":54,"line":10989},[52,59207,57768],{"class":90},[52,59209,54368],{"class":622},[52,59211,3812],{"class":90},[52,59213,54423],{"class":160},[52,59215,4272],{"class":622},[52,59217,59218,59220,59222,59224],{"class":54,"line":11001},[52,59219,57939],{"class":90},[52,59221,54368],{"class":622},[52,59223,54408],{"class":90},[52,59225,4272],{"class":622},[52,59227,59228,59230,59232,59234],{"class":54,"line":11013},[52,59229,57950],{"class":90},[52,59231,54368],{"class":622},[52,59233,54599],{"class":90},[52,59235,4272],{"class":622},[52,59237,59238,59240,59242,59244],{"class":54,"line":12672},[52,59239,57689],{"class":90},[52,59241,54368],{"class":622},[52,59243,57761],{"class":90},[52,59245,4272],{"class":622},[52,59247,59248,59250,59252,59254,59256],{"class":54,"line":12697},[52,59249,57701],{"class":90},[52,59251,54368],{"class":622},[52,59253,6951],{"class":90},[52,59255,54423],{"class":160},[52,59257,4272],{"class":622},[52,59259,59260,59262,59264,59266,59268],{"class":54,"line":12720},[52,59261,57715],{"class":90},[52,59263,54368],{"class":622},[52,59265,3812],{"class":90},[52,59267,54423],{"class":160},[52,59269,4272],{"class":622},[52,59271,59272],{"class":54,"line":12744},[52,59273,5149],{"class":622},[52,59275,59276],{"class":54,"line":12749},[52,59277,116],{"emptyLinePlaceholder":115},[52,59279,59280,59282,59284],{"class":54,"line":12754},[52,59281,57898],{"class":54231},[52,59283,58005],{"class":54231},[52,59285,18528],{"class":622},[52,59287,59288,59290,59292,59294,59296],{"class":54,"line":12759},[52,59289,57701],{"class":90},[52,59291,54368],{"class":622},[52,59293,3812],{"class":90},[52,59295,54423],{"class":160},[52,59297,4272],{"class":622},[52,59299,59300,59302,59304,59306,59308],{"class":54,"line":12768},[52,59301,57715],{"class":90},[52,59303,54368],{"class":622},[52,59305,3812],{"class":90},[52,59307,54423],{"class":160},[52,59309,4272],{"class":622},[52,59311,59312,59314,59316,59318,59320,59322,59324,59326,59328,59330,59332,59334],{"class":54,"line":12773},[52,59313,57814],{"class":90},[52,59315,54368],{"class":622},[52,59317,58040],{"class":90},[52,59319,3121],{"class":622},[52,59321,3306],{"class":90},[52,59323,15391],{"class":622},[52,59325,3306],{"class":90},[52,59327,15391],{"class":622},[52,59329,3306],{"class":90},[52,59331,15391],{"class":622},[52,59333,58057],{"class":90},[52,59335,5679],{"class":622},[52,59337,59338,59340,59342,59344,59346],{"class":54,"line":12779},[52,59339,58064],{"class":90},[52,59341,54368],{"class":622},[52,59343,3559],{"class":90},[52,59345,54423],{"class":160},[52,59347,4272],{"class":622},[52,59349,59350],{"class":54,"line":12800},[52,59351,5149],{"class":622},[52,59353,59354],{"class":54,"line":12806},[52,59355,116],{"emptyLinePlaceholder":115},[52,59357,59358,59360],{"class":54,"line":12820},[52,59359,58085],{"class":58},[52,59361,18528],{"class":622},[52,59363,59364,59366,59368,59370],{"class":54,"line":12826},[52,59365,57814],{"class":90},[52,59367,54368],{"class":622},[52,59369,58096],{"class":90},[52,59371,4272],{"class":622},[52,59373,59374],{"class":54,"line":12853},[52,59375,5149],{"class":622},[52,59377,59378,59380,59382],{"class":54,"line":12862},[52,59379,55347],{"class":622},[52,59381,3015],{"class":54231},[52,59383,54238],{"class":622},[52,59385,59386,59388,59390],{"class":54,"line":12868},[52,59387,54716],{"class":622},[52,59389,54265],{"class":54231},[52,59391,54238],{"class":622},[52,59393,59394],{"class":54,"line":12876},[52,59395,116],{"emptyLinePlaceholder":115},[52,59397,59398,59400,59402],{"class":54,"line":12881},[52,59399,4022],{"class":622},[52,59401,54731],{"class":54231},[52,59403,54238],{"class":622},[52,59405,59406,59408,59410,59412,59414,59416],{"class":54,"line":19560},[52,59407,55075],{"class":622},[52,59409,54542],{"class":54231},[52,59411,56416],{"class":58},[52,59413,2099],{"class":622},[52,59415,56421],{"class":62},[52,59417,54238],{"class":622},[52,59419,59420,59422,59424,59426,59428,59430],{"class":54,"line":19566},[52,59421,54272],{"class":622},[52,59423,54542],{"class":54231},[52,59425,56416],{"class":58},[52,59427,2099],{"class":622},[52,59429,58157],{"class":62},[52,59431,54238],{"class":622},[52,59433,59434,59436,59438,59440,59442,59444,59446,59448,59450],{"class":54,"line":19589},[52,59435,58164],{"class":622},[52,59437,280],{"class":54231},[52,59439,58169],{"class":58},[52,59441,2099],{"class":622},[52,59443,58174],{"class":62},[52,59445,58177],{"class":58},[52,59447,2099],{"class":622},[52,59449,10608],{"class":62},[52,59451,54238],{"class":622},[52,59453,59454,59456,59458],{"class":54,"line":19595},[52,59455,54707],{"class":622},[52,59457,54542],{"class":54231},[52,59459,54238],{"class":622},[52,59461,59462,59464,59466,59468,59470,59472],{"class":54,"line":19618},[52,59463,54272],{"class":622},[52,59465,54542],{"class":54231},[52,59467,56416],{"class":58},[52,59469,2099],{"class":622},[52,59471,58204],{"class":62},[52,59473,54238],{"class":622},[52,59475,59476,59478,59480,59482,59484],{"class":54,"line":19632},[52,59477,58164],{"class":622},[52,59479,274],{"class":54231},[52,59481,58215],{"class":622},[52,59483,274],{"class":54231},[52,59485,54238],{"class":622},[52,59487,59488,59490,59492],{"class":54,"line":19652},[52,59489,58164],{"class":622},[52,59491,4118],{"class":54231},[52,59493,54238],{"class":622},[52,59495,59496,59498,59500,59502,59504,59506,59508,59510],{"class":54,"line":19658},[52,59497,58232],{"class":622},[52,59499,1073],{"class":54231},[52,59501,56416],{"class":58},[52,59503,2099],{"class":622},[52,59505,58241],{"class":62},[52,59507,58244],{"class":622},[52,59509,1073],{"class":54231},[52,59511,54238],{"class":622},[52,59513,59514,59516,59518,59520,59522],{"class":54,"line":19669},[52,59515,58232],{"class":622},[52,59517,1073],{"class":54231},[52,59519,58244],{"class":622},[52,59521,1073],{"class":54231},[52,59523,54238],{"class":622},[52,59525,59526,59528,59530,59532,59534],{"class":54,"line":19692},[52,59527,58232],{"class":622},[52,59529,1073],{"class":54231},[52,59531,58244],{"class":622},[52,59533,1073],{"class":54231},[52,59535,54238],{"class":622},[52,59537,59538,59540,59542,59544,59546],{"class":54,"line":19714},[52,59539,58232],{"class":622},[52,59541,1073],{"class":54231},[52,59543,58244],{"class":622},[52,59545,1073],{"class":54231},[52,59547,54238],{"class":622},[52,59549,59550,59552,59554,59556,59558],{"class":54,"line":19719},[52,59551,58232],{"class":622},[52,59553,1073],{"class":54231},[52,59555,58244],{"class":622},[52,59557,1073],{"class":54231},[52,59559,54238],{"class":622},[52,59561,59562,59564,59566,59568,59570],{"class":54,"line":19725},[52,59563,58232],{"class":622},[52,59565,1073],{"class":54231},[52,59567,58244],{"class":622},[52,59569,1073],{"class":54231},[52,59571,54238],{"class":622},[52,59573,59574,59576,59578,59580,59582],{"class":54,"line":19739},[52,59575,58232],{"class":622},[52,59577,1073],{"class":54231},[52,59579,58244],{"class":622},[52,59581,1073],{"class":54231},[52,59583,54238],{"class":622},[52,59585,59586,59588,59590,59592,59594],{"class":54,"line":19752},[52,59587,58232],{"class":622},[52,59589,1073],{"class":54231},[52,59591,58244],{"class":622},[52,59593,1073],{"class":54231},[52,59595,54238],{"class":622},[52,59597,59598,59600,59602],{"class":54,"line":19757},[52,59599,58337],{"class":622},[52,59601,4118],{"class":54231},[52,59603,54238],{"class":622},[52,59605,59606,59608,59610],{"class":54,"line":19771},[52,59607,54707],{"class":622},[52,59609,54542],{"class":54231},[52,59611,54238],{"class":622},[52,59613,59614,59616,59618],{"class":54,"line":19776},[52,59615,55347],{"class":622},[52,59617,54542],{"class":54231},[52,59619,54238],{"class":622},[52,59621,59622,59624,59626],{"class":54,"line":19782},[52,59623,55075],{"class":622},[52,59625,54744],{"class":54231},[52,59627,54238],{"class":622},[52,59629,59630,59632,59635,59637],{"class":54,"line":19787},[52,59631,14177],{"class":160},[52,59633,59634],{"class":90}," sliderData",[52,59636,16520],{"class":160},[52,59638,58377],{"class":622},[52,59640,59641,59643,59645,59647,59649,59651,59653],{"class":54,"line":19801},[52,59642,58382],{"class":622},[52,59644,58385],{"class":62},[52,59646,58388],{"class":622},[52,59648,58391],{"class":62},[52,59650,58394],{"class":622},[52,59652,58397],{"class":62},[52,59654,58400],{"class":622},[52,59656,59657,59659,59661,59663,59665,59667,59669],{"class":54,"line":19806},[52,59658,58382],{"class":622},[52,59660,58407],{"class":62},[52,59662,58388],{"class":622},[52,59664,58412],{"class":62},[52,59666,58394],{"class":622},[52,59668,58417],{"class":62},[52,59670,58400],{"class":622},[52,59672,59673,59675,59677,59679,59681,59683,59685],{"class":54,"line":19811},[52,59674,58382],{"class":622},[52,59676,58426],{"class":62},[52,59678,58388],{"class":622},[52,59680,58431],{"class":62},[52,59682,58394],{"class":622},[52,59684,58436],{"class":62},[52,59686,58400],{"class":622},[52,59688,59689,59691,59693,59695,59697,59699,59701],{"class":54,"line":19825},[52,59690,58382],{"class":622},[52,59692,58445],{"class":62},[52,59694,58388],{"class":622},[52,59696,58450],{"class":62},[52,59698,58394],{"class":622},[52,59700,58455],{"class":62},[52,59702,58400],{"class":622},[52,59704,59705,59707,59709,59711,59713,59715,59717],{"class":54,"line":19837},[52,59706,58382],{"class":622},[52,59708,58464],{"class":62},[52,59710,58388],{"class":622},[52,59712,58469],{"class":62},[52,59714,58394],{"class":622},[52,59716,58474],{"class":62},[52,59718,58400],{"class":622},[52,59720,59721,59723,59725,59727,59729,59731,59733],{"class":54,"line":19842},[52,59722,58382],{"class":622},[52,59724,58483],{"class":62},[52,59726,58388],{"class":622},[52,59728,58488],{"class":62},[52,59730,58394],{"class":622},[52,59732,58493],{"class":62},[52,59734,58400],{"class":622},[52,59736,59737,59739,59741,59743,59745,59747,59749],{"class":54,"line":19855},[52,59738,58382],{"class":622},[52,59740,58502],{"class":62},[52,59742,58388],{"class":622},[52,59744,58507],{"class":62},[52,59746,58394],{"class":622},[52,59748,58512],{"class":62},[52,59750,58400],{"class":622},[52,59752,59753,59755,59757,59759,59761,59763,59765],{"class":54,"line":19860},[52,59754,58382],{"class":622},[52,59756,58521],{"class":62},[52,59758,58388],{"class":622},[52,59760,58526],{"class":62},[52,59762,58394],{"class":622},[52,59764,58531],{"class":62},[52,59766,58534],{"class":622},[52,59768,59769],{"class":54,"line":19865},[52,59770,56039],{"class":622},[52,59772,59773],{"class":54,"line":19870},[52,59774,59775],{"class":332},"    \u002F\u002F 1.获取元素\n",[52,59777,59778,59780,59782,59784,59786,59788,59790,59792],{"class":54,"line":19883},[52,59779,14177],{"class":160},[52,59781,58545],{"class":90},[52,59783,16520],{"class":160},[52,59785,57326],{"class":622},[52,59787,57329],{"class":58},[52,59789,3121],{"class":622},[52,59791,58556],{"class":62},[52,59793,170],{"class":622},[52,59795,59796,59798,59800,59802,59804,59806,59808,59810],{"class":54,"line":19888},[52,59797,14177],{"class":160},[52,59799,9781],{"class":90},[52,59801,16520],{"class":160},[52,59803,57326],{"class":622},[52,59805,57329],{"class":58},[52,59807,3121],{"class":622},[52,59809,58575],{"class":62},[52,59811,170],{"class":622},[52,59813,59814,59816,59818,59820],{"class":54,"line":35565},[52,59815,55150],{"class":160},[52,59817,12394],{"class":622},[52,59819,2099],{"class":160},[52,59821,50265],{"class":90},[52,59823,59824],{"class":54,"line":35571},[52,59825,59826],{"class":332},"    \u002F\u002F 2.开启定时器\n",[52,59828,59829],{"class":54,"line":35577},[52,59830,59831],{"class":332},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[52,59833,59834,59837,59839,59841],{"class":54,"line":35583},[52,59835,59836],{"class":58},"    setInterval",[52,59838,3121],{"class":622},[52,59840,57379],{"class":160},[52,59842,57382],{"class":622},[52,59844,59845,59847],{"class":54,"line":35589},[52,59846,57387],{"class":622},[52,59848,5662],{"class":160},[52,59850,59851,59853,59855,59857,59860,59862],{"class":54,"line":35600},[52,59852,57410],{"class":160},[52,59854,57413],{"class":622},[52,59856,4677],{"class":160},[52,59858,59859],{"class":622}," sliderData.",[52,59861,54899],{"class":90},[52,59863,15398],{"class":622},[52,59865,59866,59869,59871],{"class":54,"line":35606},[52,59867,59868],{"class":622},"        i ",[52,59870,2099],{"class":160},[52,59872,50265],{"class":90},[52,59874,59875],{"class":54,"line":35626},[52,59876,55328],{"class":622},[52,59878,59879],{"class":54,"line":35632},[52,59880,59881],{"class":332},"      \u002F\u002F 更换图片路径\n",[52,59883,59884,59886,59888],{"class":54,"line":35643},[52,59885,58651],{"class":622},[52,59887,2099],{"class":160},[52,59889,59890],{"class":622}," sliderData[i].url\n",[52,59892,59893],{"class":54,"line":35649},[52,59894,59895],{"class":332},"      \u002F\u002F 把文字写到p里面\n",[52,59897,59898,59900,59902],{"class":54,"line":35655},[52,59899,58661],{"class":622},[52,59901,2099],{"class":160},[52,59903,59904],{"class":622}," sliderData[i].title\n",[52,59906,59907],{"class":54,"line":35661},[52,59908,59909],{"class":332},"      \u002F\u002F 小圆点\n",[52,59911,59912],{"class":54,"line":35667},[52,59913,59914],{"class":332},"      \u002F\u002F 先删除以前的active\n",[52,59916,59917],{"class":54,"line":35673},[52,59918,59919],{"class":332},"      \u002F\u002F 只让当前li添加active\n",[52,59921,59922,59924,59926,59928,59931,59934,59937,59939,59941],{"class":54,"line":35679},[52,59923,58701],{"class":622},[52,59925,57329],{"class":58},[52,59927,3121],{"class":622},[52,59929,59930],{"class":62},"'.slider-footer .activate'",[52,59932,59933],{"class":622},").classList.",[52,59935,59936],{"class":58},"remove",[52,59938,3121],{"class":622},[52,59940,58719],{"class":62},[52,59942,170],{"class":622},[52,59944,59945,59947,59949,59951,59954,59956,59958,59960,59963,59965,59967,59969,59971],{"class":54,"line":35685},[52,59946,58701],{"class":622},[52,59948,57329],{"class":58},[52,59950,3121],{"class":622},[52,59952,59953],{"class":62},"`.slider-footer ul li:nth-child(${",[52,59955,3554],{"class":622},[52,59957,48498],{"class":160},[52,59959,28064],{"class":90},[52,59961,59962],{"class":62},"})`",[52,59964,59933],{"class":622},[52,59966,8290],{"class":58},[52,59968,3121],{"class":622},[52,59970,58719],{"class":62},[52,59972,170],{"class":622},[52,59974,59975],{"class":54,"line":35705},[52,59976,116],{"emptyLinePlaceholder":115},[52,59978,59979,59981,59983],{"class":54,"line":35711},[52,59980,57465],{"class":622},[52,59982,9366],{"class":90},[52,59984,170],{"class":622},[52,59986,59987],{"class":54,"line":35727},[52,59988,116],{"emptyLinePlaceholder":115},[52,59990,59991,59993,59995],{"class":54,"line":35733},[52,59992,55347],{"class":622},[52,59994,54744],{"class":54231},[52,59996,54238],{"class":622},[52,59998,59999,60001,60003],{"class":54,"line":35747},[52,60000,54716],{"class":622},[52,60002,54731],{"class":54231},[52,60004,54238],{"class":622},[52,60006,60007],{"class":54,"line":35753},[52,60008,116],{"emptyLinePlaceholder":115},[52,60010,60011,60013,60015],{"class":54,"line":35768},[52,60012,54716],{"class":622},[52,60014,53566],{"class":54231},[52,60016,54238],{"class":622},[30,60018,60020],{"id":60019},"_317-重要知识点","3.1.7 重要知识点",[274,60022,60023,60024],{},"浏览器在渲染文本时， ",[538,60025,60026],{},"没有空格或换行符就没有“断行点”",[274,60028,60029],{},[280,60030],{"alt":28,"src":60031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[274,60033,60034],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[274,60036,60037],{},[280,60038],{"alt":28,"src":60039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[274,60041,60042],{},[280,60043],{"alt":28,"src":60044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,60046,60048],{"id":60047},"_32-dom事件基础","3.2 DOM事件基础",[30,60050,60052],{"id":60051},"_321-事件监听","3.2.1 事件监听",[274,60054,60055],{},[280,60056],{"alt":28,"src":60057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[274,60059,60060],{},"事件监听有响应的发生",[274,60062,60063],{},[280,60064],{"alt":28,"src":60065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[274,60067,60068],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[274,60070,60071],{},"对于有名函数,要执行的函数名后边不要加()",[30,60073,60075],{"id":60074},"_322-随机点名案例","3.2.2 随机点名案例",[19,60077,60079],{"className":53564,"code":60078,"language":53566,"meta":28,"style":28},"\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",[26,60080,60081,60091,60105,60109,60117,60131,60151,60163,60171,60177,60187,60197,60201,60205,60212,60223,60227,60231,60237,60249,60263,60273,60285,60298,60302,60306,60313,60317,60330,60342,60354,60358,60362,60366,60373,60383,60387,60391,60400,60412,60424,60439,60443,60451,60459,60463,60471,60484,60498,60511,60531,60539,60554,60574,60594,60602,60606,60614,60619,60655,60675,60680,60699,60704,60715,60720,60731,60736,60755,60770,60775,60801,60811,60820,60825,60841,60846,60851,60856,60871,60875,60879,60884,60903,60920,60928,60933,60948,60952,60956,60964,60972,60976],{"__ignoreMap":28},[52,60082,60083,60085,60087,60089],{"class":54,"line":55},[52,60084,54228],{"class":622},[52,60086,54232],{"class":54231},[52,60088,54235],{"class":58},[52,60090,54238],{"class":622},[52,60092,60093,60095,60097,60099,60101,60103],{"class":54,"line":69},[52,60094,4022],{"class":622},[52,60096,53566],{"class":54231},[52,60098,54247],{"class":58},[52,60100,2099],{"class":622},[52,60102,54252],{"class":62},[52,60104,54238],{"class":622},[52,60106,60107],{"class":54,"line":82},[52,60108,116],{"emptyLinePlaceholder":115},[52,60110,60111,60113,60115],{"class":54,"line":97},[52,60112,4022],{"class":622},[52,60114,54265],{"class":54231},[52,60116,54238],{"class":622},[52,60118,60119,60121,60123,60125,60127,60129],{"class":54,"line":112},[52,60120,55075],{"class":622},[52,60122,54275],{"class":54231},[52,60124,54278],{"class":58},[52,60126,2099],{"class":622},[52,60128,54283],{"class":62},[52,60130,54238],{"class":622},[52,60132,60133,60135,60137,60139,60141,60143,60145,60147,60149],{"class":54,"line":119},[52,60134,55075],{"class":622},[52,60136,54275],{"class":54231},[52,60138,17876],{"class":58},[52,60140,2099],{"class":622},[52,60142,54322],{"class":62},[52,60144,54302],{"class":58},[52,60146,2099],{"class":622},[52,60148,54329],{"class":62},[52,60150,54238],{"class":622},[52,60152,60153,60155,60157,60159,60161],{"class":54,"line":130},[52,60154,55075],{"class":622},[52,60156,54338],{"class":54231},[52,60158,54341],{"class":622},[52,60160,54338],{"class":54231},[52,60162,54238],{"class":622},[52,60164,60165,60167,60169],{"class":54,"line":136},[52,60166,55075],{"class":622},[52,60168,3015],{"class":54231},[52,60170,54238],{"class":622},[52,60172,60173,60175],{"class":54,"line":141},[52,60174,9359],{"class":54231},[52,60176,18528],{"class":622},[52,60178,60179,60181,60183,60185],{"class":54,"line":146},[52,60180,57636],{"class":90},[52,60182,54368],{"class":622},[52,60184,3306],{"class":90},[52,60186,4272],{"class":622},[52,60188,60189,60191,60193,60195],{"class":54,"line":152},[52,60190,57625],{"class":90},[52,60192,54368],{"class":622},[52,60194,3306],{"class":90},[52,60196,4272],{"class":622},[52,60198,60199],{"class":54,"line":157},[52,60200,5149],{"class":622},[52,60202,60203],{"class":54,"line":173},[52,60204,116],{"emptyLinePlaceholder":115},[52,60206,60207,60210],{"class":54,"line":178},[52,60208,60209],{"class":54231},"    h2",[52,60211,18528],{"class":622},[52,60213,60214,60217,60219,60221],{"class":54,"line":184},[52,60215,60216],{"class":90},"      text-align",[52,60218,54368],{"class":622},[52,60220,54523],{"class":90},[52,60222,4272],{"class":622},[52,60224,60225],{"class":54,"line":189},[52,60226,5149],{"class":622},[52,60228,60229],{"class":54,"line":201},[52,60230,116],{"emptyLinePlaceholder":115},[52,60232,60233,60235],{"class":54,"line":206},[52,60234,57682],{"class":58},[52,60236,18528],{"class":622},[52,60238,60239,60241,60243,60245,60247],{"class":54,"line":224},[52,60240,57701],{"class":90},[52,60242,54368],{"class":622},[52,60244,4517],{"class":90},[52,60246,54423],{"class":160},[52,60248,4272],{"class":622},[52,60250,60251,60253,60255,60257,60259,60261],{"class":54,"line":229},[52,60252,57636],{"class":90},[52,60254,54368],{"class":622},[52,60256,3768],{"class":90},[52,60258,54423],{"class":160},[52,60260,54487],{"class":90},[52,60262,4272],{"class":622},[52,60264,60265,60267,60269,60271],{"class":54,"line":241},[52,60266,57939],{"class":90},[52,60268,54368],{"class":622},[52,60270,54408],{"class":90},[52,60272,4272],{"class":622},[52,60274,60275,60277,60279,60281,60283],{"class":54,"line":246},[52,60276,57852],{"class":90},[52,60278,54368],{"class":622},[52,60280,3937],{"class":90},[52,60282,54423],{"class":160},[52,60284,4272],{"class":622},[52,60286,60287,60290,60292,60294,60296],{"class":54,"line":252},[52,60288,60289],{"class":90},"      line-height",[52,60291,54368],{"class":622},[52,60293,3514],{"class":90},[52,60295,54423],{"class":160},[52,60297,4272],{"class":622},[52,60299,60300],{"class":54,"line":257},[52,60301,5149],{"class":622},[52,60303,60304],{"class":54,"line":266},[52,60305,116],{"emptyLinePlaceholder":115},[52,60307,60308,60311],{"class":54,"line":4722},[52,60309,60310],{"class":58},"    .qs",[52,60312,18528],{"class":622},[52,60314,60315],{"class":54,"line":4727},[52,60316,116],{"emptyLinePlaceholder":115},[52,60318,60319,60321,60323,60326,60328],{"class":54,"line":4741},[52,60320,57701],{"class":90},[52,60322,54368],{"class":622},[52,60324,60325],{"class":90},"450",[52,60327,54423],{"class":160},[52,60329,4272],{"class":622},[52,60331,60332,60334,60336,60338,60340],{"class":54,"line":4746},[52,60333,57715],{"class":90},[52,60335,54368],{"class":622},[52,60337,3514],{"class":90},[52,60339,54423],{"class":160},[52,60341,4272],{"class":622},[52,60343,60344,60347,60349,60352],{"class":54,"line":5538},[52,60345,60346],{"class":90},"      color",[52,60348,54368],{"class":622},[52,60350,60351],{"class":90},"red",[52,60353,4272],{"class":622},[52,60355,60356],{"class":54,"line":5552},[52,60357,116],{"emptyLinePlaceholder":115},[52,60359,60360],{"class":54,"line":5560},[52,60361,5149],{"class":622},[52,60363,60364],{"class":54,"line":5565},[52,60365,116],{"emptyLinePlaceholder":115},[52,60367,60368,60371],{"class":54,"line":5571},[52,60369,60370],{"class":58},"    .btns",[52,60372,18528],{"class":622},[52,60374,60375,60377,60379,60381],{"class":54,"line":5577},[52,60376,60216],{"class":90},[52,60378,54368],{"class":622},[52,60380,54523],{"class":90},[52,60382,4272],{"class":622},[52,60384,60385],{"class":54,"line":5582},[52,60386,5149],{"class":622},[52,60388,60389],{"class":54,"line":10904},[52,60390,116],{"emptyLinePlaceholder":115},[52,60392,60393,60395,60398],{"class":54,"line":10928},[52,60394,60370],{"class":58},[52,60396,60397],{"class":54231}," button",[52,60399,18528],{"class":622},[52,60401,60402,60404,60406,60408,60410],{"class":54,"line":10933},[52,60403,57701],{"class":90},[52,60405,54368],{"class":622},[52,60407,3929],{"class":90},[52,60409,54423],{"class":160},[52,60411,4272],{"class":622},[52,60413,60414,60416,60418,60420,60422],{"class":54,"line":10939},[52,60415,57715],{"class":90},[52,60417,54368],{"class":622},[52,60419,3386],{"class":90},[52,60421,54423],{"class":160},[52,60423,4272],{"class":622},[52,60425,60426,60428,60430,60432,60435,60437],{"class":54,"line":10966},[52,60427,57636],{"class":90},[52,60429,54368],{"class":622},[52,60431,3306],{"class":90},[52,60433,60434],{"class":90}," 50",[52,60436,54423],{"class":160},[52,60438,4272],{"class":622},[52,60440,60441],{"class":54,"line":10971},[52,60442,5149],{"class":622},[52,60444,60445,60447,60449],{"class":54,"line":10977},[52,60446,55347],{"class":622},[52,60448,3015],{"class":54231},[52,60450,54238],{"class":622},[52,60452,60453,60455,60457],{"class":54,"line":10989},[52,60454,54716],{"class":622},[52,60456,54265],{"class":54231},[52,60458,54238],{"class":622},[52,60460,60461],{"class":54,"line":11001},[52,60462,116],{"emptyLinePlaceholder":115},[52,60464,60465,60467,60469],{"class":54,"line":11013},[52,60466,4022],{"class":622},[52,60468,54731],{"class":54231},[52,60470,54238],{"class":622},[52,60472,60473,60475,60477,60480,60482],{"class":54,"line":12672},[52,60474,55075],{"class":622},[52,60476,14],{"class":54231},[52,60478,60479],{"class":622},">随机点名\u003C\u002F",[52,60481,14],{"class":54231},[52,60483,54238],{"class":622},[52,60485,60486,60488,60490,60492,60494,60496],{"class":54,"line":12697},[52,60487,55075],{"class":622},[52,60489,54542],{"class":54231},[52,60491,56416],{"class":58},[52,60493,2099],{"class":622},[52,60495,56421],{"class":62},[52,60497,54238],{"class":622},[52,60499,60500,60502,60504,60507,60509],{"class":54,"line":12720},[52,60501,54272],{"class":622},[52,60503,52],{"class":54231},[52,60505,60506],{"class":622},">名字是：\u003C\u002F",[52,60508,52],{"class":54231},[52,60510,54238],{"class":622},[52,60512,60513,60515,60517,60519,60521,60524,60527,60529],{"class":54,"line":12744},[52,60514,54272],{"class":622},[52,60516,54542],{"class":54231},[52,60518,56416],{"class":58},[52,60520,2099],{"class":622},[52,60522,60523],{"class":62},"\"qs\"",[52,60525,60526],{"class":622},">这里显示姓名\u003C\u002F",[52,60528,54542],{"class":54231},[52,60530,54238],{"class":622},[52,60532,60533,60535,60537],{"class":54,"line":12749},[52,60534,55347],{"class":622},[52,60536,54542],{"class":54231},[52,60538,54238],{"class":622},[52,60540,60541,60543,60545,60547,60549,60552],{"class":54,"line":12754},[52,60542,55075],{"class":622},[52,60544,54542],{"class":54231},[52,60546,56416],{"class":58},[52,60548,2099],{"class":622},[52,60550,60551],{"class":62},"\"btns\"",[52,60553,54238],{"class":622},[52,60555,60556,60558,60560,60562,60564,60567,60570,60572],{"class":54,"line":12759},[52,60557,54272],{"class":622},[52,60559,56817],{"class":54231},[52,60561,56416],{"class":58},[52,60563,2099],{"class":622},[52,60565,60566],{"class":62},"\"start\"",[52,60568,60569],{"class":622},">开始\u003C\u002F",[52,60571,56817],{"class":54231},[52,60573,54238],{"class":622},[52,60575,60576,60578,60580,60582,60584,60587,60590,60592],{"class":54,"line":12768},[52,60577,54272],{"class":622},[52,60579,56817],{"class":54231},[52,60581,56416],{"class":58},[52,60583,2099],{"class":622},[52,60585,60586],{"class":62},"\"end\"",[52,60588,60589],{"class":622},">结束\u003C\u002F",[52,60591,56817],{"class":54231},[52,60593,54238],{"class":622},[52,60595,60596,60598,60600],{"class":54,"line":12773},[52,60597,55347],{"class":622},[52,60599,54542],{"class":54231},[52,60601,54238],{"class":622},[52,60603,60604],{"class":54,"line":12779},[52,60605,116],{"emptyLinePlaceholder":115},[52,60607,60608,60610,60612],{"class":54,"line":12800},[52,60609,55075],{"class":622},[52,60611,54744],{"class":54231},[52,60613,54238],{"class":622},[52,60615,60616],{"class":54,"line":12806},[52,60617,60618],{"class":332},"    \u002F\u002F 数据数组\n",[52,60620,60621,60623,60626,60628,60630,60633,60635,60638,60640,60643,60645,60648,60650,60653],{"class":54,"line":12820},[52,60622,14177],{"class":160},[52,60624,60625],{"class":90}," arr",[52,60627,16520],{"class":160},[52,60629,55157],{"class":622},[52,60631,60632],{"class":62},"'马超'",[52,60634,15391],{"class":622},[52,60636,60637],{"class":62},"'黄忠'",[52,60639,15391],{"class":622},[52,60641,60642],{"class":62},"'赵云'",[52,60644,15391],{"class":622},[52,60646,60647],{"class":62},"'关羽'",[52,60649,15391],{"class":622},[52,60651,60652],{"class":62},"'张飞'",[52,60654,36178],{"class":622},[52,60656,60657,60659,60662,60664,60666,60668,60670,60673],{"class":54,"line":12826},[52,60658,14177],{"class":160},[52,60660,60661],{"class":90}," qs",[52,60663,16520],{"class":160},[52,60665,57326],{"class":622},[52,60667,57329],{"class":58},[52,60669,3121],{"class":622},[52,60671,60672],{"class":62},"'.qs'",[52,60674,170],{"class":622},[52,60676,60677],{"class":54,"line":12853},[52,60678,60679],{"class":332},"    \u002F\u002F 1.业务1.开始按钮模块\n",[52,60681,60682,60684,60686,60688,60690,60692,60694,60697],{"class":54,"line":12862},[52,60683,14177],{"class":160},[52,60685,7143],{"class":90},[52,60687,16520],{"class":160},[52,60689,57326],{"class":622},[52,60691,57329],{"class":58},[52,60693,3121],{"class":622},[52,60695,60696],{"class":62},"'.start'",[52,60698,170],{"class":622},[52,60700,60701],{"class":54,"line":12868},[52,60702,60703],{"class":332},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[52,60705,60706,60708,60711,60713],{"class":54,"line":12876},[52,60707,55150],{"class":160},[52,60709,60710],{"class":622}," timerId ",[52,60712,2099],{"class":160},[52,60714,50265],{"class":90},[52,60716,60717],{"class":54,"line":12881},[52,60718,60719],{"class":332},"    \u002F\u002F 随机号要全局变量\n",[52,60721,60722,60724,60727,60729],{"class":54,"line":19560},[52,60723,55150],{"class":160},[52,60725,60726],{"class":622}," random ",[52,60728,2099],{"class":160},[52,60730,50265],{"class":90},[52,60732,60733],{"class":54,"line":19566},[52,60734,60735],{"class":332},"    \u002F\u002F 1.1 添加点击事件\n",[52,60737,60738,60741,60744,60746,60749,60751,60753],{"class":54,"line":19589},[52,60739,60740],{"class":622},"    start.",[52,60742,60743],{"class":58},"addEventListener",[52,60745,3121],{"class":622},[52,60747,60748],{"class":62},"'click'",[52,60750,15391],{"class":622},[52,60752,57379],{"class":160},[52,60754,57382],{"class":622},[52,60756,60757,60760,60762,60764,60766,60768],{"class":54,"line":19595},[52,60758,60759],{"class":622},"      timerId ",[52,60761,2099],{"class":160},[52,60763,57374],{"class":58},[52,60765,3121],{"class":622},[52,60767,57379],{"class":160},[52,60769,57382],{"class":622},[52,60771,60772],{"class":54,"line":19618},[52,60773,60774],{"class":332},"        \u002F\u002F 随机数\n",[52,60776,60777,60780,60782,60785,60788,60791,60793,60795,60797,60799],{"class":54,"line":19632},[52,60778,60779],{"class":622},"        random ",[52,60781,2099],{"class":160},[52,60783,60784],{"class":58}," parseInt",[52,60786,60787],{"class":622},"(Math.",[52,60789,60790],{"class":58},"random",[52,60792,16006],{"class":622},[52,60794,1095],{"class":160},[52,60796,54896],{"class":622},[52,60798,54899],{"class":90},[52,60800,170],{"class":622},[52,60802,60803,60806,60808],{"class":54,"line":19652},[52,60804,60805],{"class":622},"        qs.innerHTML ",[52,60807,2099],{"class":160},[52,60809,60810],{"class":622}," arr[random]\n",[52,60812,60813,60816,60818],{"class":54,"line":19658},[52,60814,60815],{"class":622},"      }, ",[52,60817,3386],{"class":90},[52,60819,170],{"class":622},[52,60821,60822],{"class":54,"line":19669},[52,60823,60824],{"class":332},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[52,60826,60827,60829,60832,60834,60837,60839],{"class":54,"line":19692},[52,60828,57410],{"class":160},[52,60830,60831],{"class":622}," (arr.",[52,60833,54899],{"class":90},[52,60835,60836],{"class":160}," ===",[52,60838,28064],{"class":90},[52,60840,15398],{"class":622},[52,60842,60843],{"class":54,"line":19714},[52,60844,60845],{"class":332},"        \u002F\u002F start.disabled = true\n",[52,60847,60848],{"class":54,"line":19719},[52,60849,60850],{"class":332},"        \u002F\u002F end.disabled = true\n",[52,60852,60853],{"class":54,"line":19725},[52,60854,60855],{"class":332},"        \u002F\u002F 可以合起来写\n",[52,60857,60858,60861,60863,60866,60868],{"class":54,"line":19739},[52,60859,60860],{"class":622},"        start.disabled ",[52,60862,2099],{"class":160},[52,60864,60865],{"class":622}," end.disabled ",[52,60867,2099],{"class":160},[52,60869,60870],{"class":90}," true\n",[52,60872,60873],{"class":54,"line":19752},[52,60874,55328],{"class":622},[52,60876,60877],{"class":54,"line":19757},[52,60878,36393],{"class":622},[52,60880,60881],{"class":54,"line":19771},[52,60882,60883],{"class":332},"    \u002F\u002F 1.2 关闭按钮模块\n",[52,60885,60886,60888,60890,60892,60894,60896,60898,60901],{"class":54,"line":19776},[52,60887,14177],{"class":160},[52,60889,7159],{"class":90},[52,60891,16520],{"class":160},[52,60893,57326],{"class":622},[52,60895,57329],{"class":58},[52,60897,3121],{"class":622},[52,60899,60900],{"class":62},"'.end'",[52,60902,170],{"class":622},[52,60904,60905,60908,60910,60912,60914,60916,60918],{"class":54,"line":19782},[52,60906,60907],{"class":622},"    end.",[52,60909,60743],{"class":58},[52,60911,3121],{"class":622},[52,60913,60748],{"class":62},[52,60915,15391],{"class":622},[52,60917,57379],{"class":160},[52,60919,57382],{"class":622},[52,60921,60922,60925],{"class":54,"line":19787},[52,60923,60924],{"class":58},"      clearInterval",[52,60926,60927],{"class":622},"(timerId)\n",[52,60929,60930],{"class":54,"line":19801},[52,60931,60932],{"class":332},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[52,60934,60935,60938,60941,60944,60946],{"class":54,"line":19806},[52,60936,60937],{"class":622},"      arr.",[52,60939,60940],{"class":58},"splice",[52,60942,60943],{"class":622},"(random, ",[52,60945,3332],{"class":90},[52,60947,170],{"class":622},[52,60949,60950],{"class":54,"line":19811},[52,60951,36393],{"class":622},[52,60953,60954],{"class":54,"line":19825},[52,60955,116],{"emptyLinePlaceholder":115},[52,60957,60958,60960,60962],{"class":54,"line":19837},[52,60959,55347],{"class":622},[52,60961,54744],{"class":54231},[52,60963,54238],{"class":622},[52,60965,60966,60968,60970],{"class":54,"line":19842},[52,60967,54716],{"class":622},[52,60969,54731],{"class":54231},[52,60971,54238],{"class":622},[52,60973,60974],{"class":54,"line":19855},[52,60975,116],{"emptyLinePlaceholder":115},[52,60977,60978,60980,60982],{"class":54,"line":19860},[52,60979,54716],{"class":622},[52,60981,53566],{"class":54231},[52,60983,54238],{"class":622},[274,60985,60986],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[30,60988,60990],{"id":60989},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[19,60992,60994],{"className":53564,"code":60993,"language":53566,"meta":28,"style":28},"\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",[26,60995,60996,61006,61020,61024,61032,61046,61066,61078,61086,61090,61098,61110,61118,61137,61154,61170,61180,61184,61192,61200,61204],{"__ignoreMap":28},[52,60997,60998,61000,61002,61004],{"class":54,"line":55},[52,60999,54228],{"class":622},[52,61001,54232],{"class":54231},[52,61003,54235],{"class":58},[52,61005,54238],{"class":622},[52,61007,61008,61010,61012,61014,61016,61018],{"class":54,"line":69},[52,61009,4022],{"class":622},[52,61011,53566],{"class":54231},[52,61013,54247],{"class":58},[52,61015,2099],{"class":622},[52,61017,54252],{"class":62},[52,61019,54238],{"class":622},[52,61021,61022],{"class":54,"line":82},[52,61023,116],{"emptyLinePlaceholder":115},[52,61025,61026,61028,61030],{"class":54,"line":97},[52,61027,4022],{"class":622},[52,61029,54265],{"class":54231},[52,61031,54238],{"class":622},[52,61033,61034,61036,61038,61040,61042,61044],{"class":54,"line":112},[52,61035,55075],{"class":622},[52,61037,54275],{"class":54231},[52,61039,54278],{"class":58},[52,61041,2099],{"class":622},[52,61043,54283],{"class":62},[52,61045,54238],{"class":622},[52,61047,61048,61050,61052,61054,61056,61058,61060,61062,61064],{"class":54,"line":119},[52,61049,55075],{"class":622},[52,61051,54275],{"class":54231},[52,61053,17876],{"class":58},[52,61055,2099],{"class":622},[52,61057,54322],{"class":62},[52,61059,54302],{"class":58},[52,61061,2099],{"class":622},[52,61063,54329],{"class":62},[52,61065,54238],{"class":622},[52,61067,61068,61070,61072,61074,61076],{"class":54,"line":130},[52,61069,55075],{"class":622},[52,61071,54338],{"class":54231},[52,61073,54341],{"class":622},[52,61075,54338],{"class":54231},[52,61077,54238],{"class":622},[52,61079,61080,61082,61084],{"class":54,"line":136},[52,61081,54716],{"class":622},[52,61083,54265],{"class":54231},[52,61085,54238],{"class":622},[52,61087,61088],{"class":54,"line":141},[52,61089,116],{"emptyLinePlaceholder":115},[52,61091,61092,61094,61096],{"class":54,"line":146},[52,61093,4022],{"class":622},[52,61095,54731],{"class":54231},[52,61097,54238],{"class":622},[52,61099,61100,61102,61104,61106,61108],{"class":54,"line":152},[52,61101,55075],{"class":622},[52,61103,56817],{"class":54231},[52,61105,56823],{"class":622},[52,61107,56817],{"class":54231},[52,61109,54238],{"class":622},[52,61111,61112,61114,61116],{"class":54,"line":157},[52,61113,55075],{"class":622},[52,61115,54744],{"class":54231},[52,61117,54238],{"class":622},[52,61119,61120,61122,61124,61126,61128,61130,61132,61135],{"class":54,"line":173},[52,61121,14177],{"class":160},[52,61123,57321],{"class":90},[52,61125,16520],{"class":160},[52,61127,57326],{"class":622},[52,61129,57329],{"class":58},[52,61131,3121],{"class":622},[52,61133,61134],{"class":62},"'button'",[52,61136,170],{"class":622},[52,61138,61139,61142,61144,61146,61148,61150,61152],{"class":54,"line":178},[52,61140,61141],{"class":622},"    btn.",[52,61143,60743],{"class":58},[52,61145,3121],{"class":622},[52,61147,60748],{"class":62},[52,61149,15391],{"class":622},[52,61151,57379],{"class":160},[52,61153,57382],{"class":622},[52,61155,61156,61159,61161,61163,61166,61168],{"class":54,"line":184},[52,61157,61158],{"class":160},"      const",[52,61160,5202],{"class":90},[52,61162,16520],{"class":160},[52,61164,61165],{"class":622}," Math.",[52,61167,60790],{"class":58},[52,61169,4938],{"class":622},[52,61171,61172,61175,61178],{"class":54,"line":189},[52,61173,61174],{"class":622},"      console.",[52,61176,61177],{"class":58},"log",[52,61179,3133],{"class":622},[52,61181,61182],{"class":54,"line":201},[52,61183,36393],{"class":622},[52,61185,61186,61188,61190],{"class":54,"line":206},[52,61187,55347],{"class":622},[52,61189,54744],{"class":54231},[52,61191,54238],{"class":622},[52,61193,61194,61196,61198],{"class":54,"line":224},[52,61195,54716],{"class":622},[52,61197,54731],{"class":54231},[52,61199,54238],{"class":622},[52,61201,61202],{"class":54,"line":229},[52,61203,116],{"emptyLinePlaceholder":115},[52,61205,61206,61208,61210],{"class":54,"line":241},[52,61207,54716],{"class":622},[52,61209,53566],{"class":54231},[52,61211,54238],{"class":622},[274,61213,61214],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[274,61216,61217],{},"常量不可以重新赋值",[274,61219,61220],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[19,61222,61224],{"className":53564,"code":61223,"language":53566,"meta":28,"style":28},"\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",[26,61225,61226,61236,61250,61254,61262,61276,61296,61308,61316,61320,61328,61340,61348,61359,61377,61393,61407,61415,61419,61427,61435,61439],{"__ignoreMap":28},[52,61227,61228,61230,61232,61234],{"class":54,"line":55},[52,61229,54228],{"class":622},[52,61231,54232],{"class":54231},[52,61233,54235],{"class":58},[52,61235,54238],{"class":622},[52,61237,61238,61240,61242,61244,61246,61248],{"class":54,"line":69},[52,61239,4022],{"class":622},[52,61241,53566],{"class":54231},[52,61243,54247],{"class":58},[52,61245,2099],{"class":622},[52,61247,54252],{"class":62},[52,61249,54238],{"class":622},[52,61251,61252],{"class":54,"line":82},[52,61253,116],{"emptyLinePlaceholder":115},[52,61255,61256,61258,61260],{"class":54,"line":97},[52,61257,4022],{"class":622},[52,61259,54265],{"class":54231},[52,61261,54238],{"class":622},[52,61263,61264,61266,61268,61270,61272,61274],{"class":54,"line":112},[52,61265,55075],{"class":622},[52,61267,54275],{"class":54231},[52,61269,54278],{"class":58},[52,61271,2099],{"class":622},[52,61273,54283],{"class":62},[52,61275,54238],{"class":622},[52,61277,61278,61280,61282,61284,61286,61288,61290,61292,61294],{"class":54,"line":119},[52,61279,55075],{"class":622},[52,61281,54275],{"class":54231},[52,61283,17876],{"class":58},[52,61285,2099],{"class":622},[52,61287,54322],{"class":62},[52,61289,54302],{"class":58},[52,61291,2099],{"class":622},[52,61293,54329],{"class":62},[52,61295,54238],{"class":622},[52,61297,61298,61300,61302,61304,61306],{"class":54,"line":130},[52,61299,55075],{"class":622},[52,61301,54338],{"class":54231},[52,61303,54341],{"class":622},[52,61305,54338],{"class":54231},[52,61307,54238],{"class":622},[52,61309,61310,61312,61314],{"class":54,"line":136},[52,61311,54716],{"class":622},[52,61313,54265],{"class":54231},[52,61315,54238],{"class":622},[52,61317,61318],{"class":54,"line":141},[52,61319,116],{"emptyLinePlaceholder":115},[52,61321,61322,61324,61326],{"class":54,"line":146},[52,61323,4022],{"class":622},[52,61325,54731],{"class":54231},[52,61327,54238],{"class":622},[52,61329,61330,61332,61334,61336,61338],{"class":54,"line":152},[52,61331,55075],{"class":622},[52,61333,56817],{"class":54231},[52,61335,56823],{"class":622},[52,61337,56817],{"class":54231},[52,61339,54238],{"class":622},[52,61341,61342,61344,61346],{"class":54,"line":157},[52,61343,55075],{"class":622},[52,61345,54744],{"class":54231},[52,61347,54238],{"class":622},[52,61349,61350,61352,61354,61356],{"class":54,"line":173},[52,61351,14177],{"class":160},[52,61353,5202],{"class":90},[52,61355,16520],{"class":160},[52,61357,61358],{"class":90}," 10\n",[52,61360,61361,61363,61365,61367,61369,61371,61373,61375],{"class":54,"line":178},[52,61362,14177],{"class":160},[52,61364,57321],{"class":90},[52,61366,16520],{"class":160},[52,61368,57326],{"class":622},[52,61370,57329],{"class":58},[52,61372,3121],{"class":622},[52,61374,61134],{"class":62},[52,61376,170],{"class":622},[52,61378,61379,61381,61383,61385,61387,61389,61391],{"class":54,"line":184},[52,61380,61141],{"class":622},[52,61382,60743],{"class":58},[52,61384,3121],{"class":622},[52,61386,60748],{"class":62},[52,61388,15391],{"class":622},[52,61390,57379],{"class":160},[52,61392,57382],{"class":622},[52,61394,61395,61397,61399,61401,61403,61405],{"class":54,"line":189},[52,61396,61158],{"class":160},[52,61398,5202],{"class":90},[52,61400,16520],{"class":160},[52,61402,61165],{"class":622},[52,61404,60790],{"class":58},[52,61406,4938],{"class":622},[52,61408,61409,61411,61413],{"class":54,"line":201},[52,61410,61174],{"class":622},[52,61412,61177],{"class":58},[52,61414,3133],{"class":622},[52,61416,61417],{"class":54,"line":206},[52,61418,36393],{"class":622},[52,61420,61421,61423,61425],{"class":54,"line":224},[52,61422,55347],{"class":622},[52,61424,54744],{"class":54231},[52,61426,54238],{"class":622},[52,61428,61429,61431,61433],{"class":54,"line":229},[52,61430,54716],{"class":622},[52,61432,54731],{"class":54231},[52,61434,54238],{"class":622},[52,61436,61437],{"class":54,"line":241},[52,61438,116],{"emptyLinePlaceholder":115},[52,61440,61441,61443,61445],{"class":54,"line":246},[52,61442,54716],{"class":622},[52,61444,53566],{"class":54231},[52,61446,54238],{"class":622},[274,61448,61449],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[19,61451,61453],{"className":53564,"code":61452,"language":53566,"meta":28,"style":28},"\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",[26,61454,61455,61465,61479,61483,61491,61505,61525,61537,61545,61549,61557,61569,61577,61587,61605,61621,61634,61642,61646,61654,61662,61666],{"__ignoreMap":28},[52,61456,61457,61459,61461,61463],{"class":54,"line":55},[52,61458,54228],{"class":622},[52,61460,54232],{"class":54231},[52,61462,54235],{"class":58},[52,61464,54238],{"class":622},[52,61466,61467,61469,61471,61473,61475,61477],{"class":54,"line":69},[52,61468,4022],{"class":622},[52,61470,53566],{"class":54231},[52,61472,54247],{"class":58},[52,61474,2099],{"class":622},[52,61476,54252],{"class":62},[52,61478,54238],{"class":622},[52,61480,61481],{"class":54,"line":82},[52,61482,116],{"emptyLinePlaceholder":115},[52,61484,61485,61487,61489],{"class":54,"line":97},[52,61486,4022],{"class":622},[52,61488,54265],{"class":54231},[52,61490,54238],{"class":622},[52,61492,61493,61495,61497,61499,61501,61503],{"class":54,"line":112},[52,61494,55075],{"class":622},[52,61496,54275],{"class":54231},[52,61498,54278],{"class":58},[52,61500,2099],{"class":622},[52,61502,54283],{"class":62},[52,61504,54238],{"class":622},[52,61506,61507,61509,61511,61513,61515,61517,61519,61521,61523],{"class":54,"line":119},[52,61508,55075],{"class":622},[52,61510,54275],{"class":54231},[52,61512,17876],{"class":58},[52,61514,2099],{"class":622},[52,61516,54322],{"class":62},[52,61518,54302],{"class":58},[52,61520,2099],{"class":622},[52,61522,54329],{"class":62},[52,61524,54238],{"class":622},[52,61526,61527,61529,61531,61533,61535],{"class":54,"line":130},[52,61528,55075],{"class":622},[52,61530,54338],{"class":54231},[52,61532,54341],{"class":622},[52,61534,54338],{"class":54231},[52,61536,54238],{"class":622},[52,61538,61539,61541,61543],{"class":54,"line":136},[52,61540,54716],{"class":622},[52,61542,54265],{"class":54231},[52,61544,54238],{"class":622},[52,61546,61547],{"class":54,"line":141},[52,61548,116],{"emptyLinePlaceholder":115},[52,61550,61551,61553,61555],{"class":54,"line":146},[52,61552,4022],{"class":622},[52,61554,54731],{"class":54231},[52,61556,54238],{"class":622},[52,61558,61559,61561,61563,61565,61567],{"class":54,"line":152},[52,61560,55075],{"class":622},[52,61562,56817],{"class":54231},[52,61564,56823],{"class":622},[52,61566,56817],{"class":54231},[52,61568,54238],{"class":622},[52,61570,61571,61573,61575],{"class":54,"line":157},[52,61572,55075],{"class":622},[52,61574,54744],{"class":54231},[52,61576,54238],{"class":622},[52,61578,61579,61581,61583,61585],{"class":54,"line":173},[52,61580,14177],{"class":160},[52,61582,5202],{"class":90},[52,61584,16520],{"class":160},[52,61586,61358],{"class":90},[52,61588,61589,61591,61593,61595,61597,61599,61601,61603],{"class":54,"line":178},[52,61590,14177],{"class":160},[52,61592,57321],{"class":90},[52,61594,16520],{"class":160},[52,61596,57326],{"class":622},[52,61598,57329],{"class":58},[52,61600,3121],{"class":622},[52,61602,61134],{"class":62},[52,61604,170],{"class":622},[52,61606,61607,61609,61611,61613,61615,61617,61619],{"class":54,"line":184},[52,61608,61141],{"class":622},[52,61610,60743],{"class":58},[52,61612,3121],{"class":622},[52,61614,60748],{"class":62},[52,61616,15391],{"class":622},[52,61618,57379],{"class":160},[52,61620,57382],{"class":622},[52,61622,61623,61626,61628,61630,61632],{"class":54,"line":189},[52,61624,61625],{"class":622},"      num ",[52,61627,2099],{"class":160},[52,61629,61165],{"class":622},[52,61631,60790],{"class":58},[52,61633,4938],{"class":622},[52,61635,61636,61638,61640],{"class":54,"line":201},[52,61637,61174],{"class":622},[52,61639,61177],{"class":58},[52,61641,3133],{"class":622},[52,61643,61644],{"class":54,"line":206},[52,61645,36393],{"class":622},[52,61647,61648,61650,61652],{"class":54,"line":224},[52,61649,55347],{"class":622},[52,61651,54744],{"class":54231},[52,61653,54238],{"class":622},[52,61655,61656,61658,61660],{"class":54,"line":229},[52,61657,54716],{"class":622},[52,61659,54731],{"class":54231},[52,61661,54238],{"class":622},[52,61663,61664],{"class":54,"line":241},[52,61665,116],{"emptyLinePlaceholder":115},[52,61667,61668,61670,61672],{"class":54,"line":246},[52,61669,54716],{"class":622},[52,61671,53566],{"class":54231},[52,61673,54238],{"class":622},[274,61675,61676],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[30,61678,61680],{"id":61679},"_324-事件监听版本","3.2.4 事件监听版本",[274,61682,61683],{},[280,61684],{"alt":28,"src":61685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[274,61687,61688],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[274,61690,61691],{},"这种方式会覆盖前边的事件监听:",[19,61693,61695],{"className":53564,"code":61694,"language":53566,"meta":28,"style":28},"\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",[26,61696,61697,61707,61721,61725,61733,61747,61767,61779,61787,61791,61799,61811,61819,61837,61851,61862,61866,61878,61888,61892,61900,61908,61912],{"__ignoreMap":28},[52,61698,61699,61701,61703,61705],{"class":54,"line":55},[52,61700,54228],{"class":622},[52,61702,54232],{"class":54231},[52,61704,54235],{"class":58},[52,61706,54238],{"class":622},[52,61708,61709,61711,61713,61715,61717,61719],{"class":54,"line":69},[52,61710,4022],{"class":622},[52,61712,53566],{"class":54231},[52,61714,54247],{"class":58},[52,61716,2099],{"class":622},[52,61718,54252],{"class":62},[52,61720,54238],{"class":622},[52,61722,61723],{"class":54,"line":82},[52,61724,116],{"emptyLinePlaceholder":115},[52,61726,61727,61729,61731],{"class":54,"line":97},[52,61728,4022],{"class":622},[52,61730,54265],{"class":54231},[52,61732,54238],{"class":622},[52,61734,61735,61737,61739,61741,61743,61745],{"class":54,"line":112},[52,61736,55075],{"class":622},[52,61738,54275],{"class":54231},[52,61740,54278],{"class":58},[52,61742,2099],{"class":622},[52,61744,54283],{"class":62},[52,61746,54238],{"class":622},[52,61748,61749,61751,61753,61755,61757,61759,61761,61763,61765],{"class":54,"line":119},[52,61750,55075],{"class":622},[52,61752,54275],{"class":54231},[52,61754,17876],{"class":58},[52,61756,2099],{"class":622},[52,61758,54322],{"class":62},[52,61760,54302],{"class":58},[52,61762,2099],{"class":622},[52,61764,54329],{"class":62},[52,61766,54238],{"class":622},[52,61768,61769,61771,61773,61775,61777],{"class":54,"line":130},[52,61770,55075],{"class":622},[52,61772,54338],{"class":54231},[52,61774,54341],{"class":622},[52,61776,54338],{"class":54231},[52,61778,54238],{"class":622},[52,61780,61781,61783,61785],{"class":54,"line":136},[52,61782,54716],{"class":622},[52,61784,54265],{"class":54231},[52,61786,54238],{"class":622},[52,61788,61789],{"class":54,"line":141},[52,61790,116],{"emptyLinePlaceholder":115},[52,61792,61793,61795,61797],{"class":54,"line":146},[52,61794,4022],{"class":622},[52,61796,54731],{"class":54231},[52,61798,54238],{"class":622},[52,61800,61801,61803,61805,61807,61809],{"class":54,"line":152},[52,61802,55075],{"class":622},[52,61804,56817],{"class":54231},[52,61806,56823],{"class":622},[52,61808,56817],{"class":54231},[52,61810,54238],{"class":622},[52,61812,61813,61815,61817],{"class":54,"line":157},[52,61814,55075],{"class":622},[52,61816,54744],{"class":54231},[52,61818,54238],{"class":622},[52,61820,61821,61823,61825,61827,61829,61831,61833,61835],{"class":54,"line":173},[52,61822,14177],{"class":160},[52,61824,57321],{"class":90},[52,61826,16520],{"class":160},[52,61828,57326],{"class":622},[52,61830,57329],{"class":58},[52,61832,3121],{"class":622},[52,61834,61134],{"class":62},[52,61836,170],{"class":622},[52,61838,61839,61841,61844,61846,61849],{"class":54,"line":178},[52,61840,61141],{"class":622},[52,61842,61843],{"class":58},"onclick",[52,61845,16520],{"class":160},[52,61847,61848],{"class":160}," function",[52,61850,57382],{"class":622},[52,61852,61853,61856,61858,61860],{"class":54,"line":184},[52,61854,61855],{"class":58},"      alert",[52,61857,3121],{"class":622},[52,61859,3584],{"class":90},[52,61861,170],{"class":622},[52,61863,61864],{"class":54,"line":189},[52,61865,5149],{"class":622},[52,61867,61868,61870,61872,61874,61876],{"class":54,"line":201},[52,61869,61141],{"class":622},[52,61871,61843],{"class":58},[52,61873,16520],{"class":160},[52,61875,61848],{"class":160},[52,61877,57382],{"class":622},[52,61879,61880,61882,61884,61886],{"class":54,"line":206},[52,61881,61855],{"class":58},[52,61883,3121],{"class":622},[52,61885,3862],{"class":90},[52,61887,170],{"class":622},[52,61889,61890],{"class":54,"line":224},[52,61891,5149],{"class":622},[52,61893,61894,61896,61898],{"class":54,"line":229},[52,61895,55347],{"class":622},[52,61897,54744],{"class":54231},[52,61899,54238],{"class":622},[52,61901,61902,61904,61906],{"class":54,"line":241},[52,61903,54716],{"class":622},[52,61905,54731],{"class":54231},[52,61907,54238],{"class":622},[52,61909,61910],{"class":54,"line":246},[52,61911,116],{"emptyLinePlaceholder":115},[52,61913,61914,61916,61918],{"class":54,"line":252},[52,61915,54716],{"class":622},[52,61917,53566],{"class":54231},[52,61919,54238],{"class":622},[274,61921,61922],{},"只要点击就输出结果为22,前边11被覆盖了",[19,61924,61926],{"className":53564,"code":61925,"language":53566,"meta":28,"style":28},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[26,61927,61928,61933,61938,61942,61947,61952],{"__ignoreMap":28},[52,61929,61930],{"class":54,"line":55},[52,61931,61932],{"class":622},"  btn.addEventListener('click', function () {\n",[52,61934,61935],{"class":54,"line":69},[52,61936,61937],{"class":622},"      alert(11)\n",[52,61939,61940],{"class":54,"line":82},[52,61941,36393],{"class":622},[52,61943,61944],{"class":54,"line":97},[52,61945,61946],{"class":622},"    btn.addEventListener('click', function () {\n",[52,61948,61949],{"class":54,"line":112},[52,61950,61951],{"class":622},"      alert(22)\n",[52,61953,61954],{"class":54,"line":119},[52,61955,36393],{"class":622},[274,61957,61958],{},"点击第一次输出11,第二次点击为22",[30,61960,61962],{"id":61961},"_325-事件类型","3.2.5 事件类型",[274,61964,61965],{},[280,61966],{"alt":28,"src":61967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[1486,61969,61971],{"id":61970},"_3251-鼠标事件","3.2.5.1 鼠标事件",[274,61973,61974],{},"补充知识:",[274,61976,61977],{},"轮播图自动播放模块,可以使用",[274,61979,61980],{},"let timerId = setInterval(function () {",[274,61982,61983],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[274,61985,61986],{},"用js方法模拟进行点击事件,click必须加()",[274,61988,61989],{},"next.click()",[274,61991,61992],{},"}, 1000)",[274,61994,61995],{},[280,61996],{"alt":28,"src":61997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[19,61999,62001],{"className":55997,"code":62000,"language":55999,"meta":28,"style":28},"\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",[26,62002,62003,62007,62017,62031,62035,62043,62058,62078,62098,62111,62119,62124,62129,62133,62137,62142,62147,62152,62157,62161,62165,62170,62175,62180,62184,62188,62193,62197,62202,62207,62211,62215,62220,62225,62230,62235,62240,62244,62248,62253,62258,62263,62268,62273,62277,62281,62286,62291,62296,62301,62306,62311,62316,62321,62326,62331,62335,62339,62344,62349,62353,62357,62362,62367,62371,62376,62381,62385,62389,62394,62398,62403,62408,62412,62417,62421,62425,62430,62435,62440,62445,62450,62455,62460,62464,62468,62472,62477,62482,62487,62492,62496,62504,62512,62516,62524,62539,62553,62574,62582,62596,62609,62624,62643,62655,62667,62679,62691,62703,62715,62727,62735,62750,62774,62798,62806,62814,62822,62830,62835,62840,62845,62850,62855,62860,62865,62870,62875,62880,62884,62889,62894,62899,62904,62909,62914,62919,62924,62929,62933,62938,62943,62948,62953,62958,62963,62968,62973,62978,62983,62988,62993,62997,63001,63006,63011,63016,63020,63025,63030,63035,63040,63045,63049,63054,63058,63062,63066,63070,63074,63078,63083,63088,63093,63098,63103,63108,63113,63118,63123,63127,63131,63136,63141,63146,63151,63156,63160,63165,63170,63175,63180,63185,63190,63194,63198,63203,63207,63212,63216,63221,63226,63231,63236,63241,63246,63250,63258,63266,63270],{"__ignoreMap":28},[52,62004,62005],{"class":54,"line":55},[52,62006,116],{"emptyLinePlaceholder":115},[52,62008,62009,62011,62013,62015],{"class":54,"line":69},[52,62010,54228],{"class":622},[52,62012,54232],{"class":160},[52,62014,54235],{"class":90},[52,62016,54238],{"class":622},[52,62018,62019,62021,62023,62025,62027,62029],{"class":54,"line":82},[52,62020,4022],{"class":622},[52,62022,53566],{"class":54231},[52,62024,54247],{"class":58},[52,62026,2099],{"class":622},[52,62028,54252],{"class":62},[52,62030,54238],{"class":622},[52,62032,62033],{"class":54,"line":97},[52,62034,116],{"emptyLinePlaceholder":115},[52,62036,62037,62039,62041],{"class":54,"line":112},[52,62038,4022],{"class":622},[52,62040,54265],{"class":54231},[52,62042,54238],{"class":622},[52,62044,62045,62047,62049,62051,62053,62055],{"class":54,"line":119},[52,62046,55075],{"class":622},[52,62048,54275],{"class":54231},[52,62050,54278],{"class":58},[52,62052,2099],{"class":622},[52,62054,54283],{"class":62},[52,62056,62057],{"class":622}," \u002F>\n",[52,62059,62060,62062,62064,62066,62068,62070,62072,62074,62076],{"class":54,"line":130},[52,62061,55075],{"class":622},[52,62063,54275],{"class":54231},[52,62065,54294],{"class":58},[52,62067,2099],{"class":622},[52,62069,54299],{"class":62},[52,62071,54302],{"class":58},[52,62073,2099],{"class":622},[52,62075,54307],{"class":62},[52,62077,62057],{"class":622},[52,62079,62080,62082,62084,62086,62088,62090,62092,62094,62096],{"class":54,"line":136},[52,62081,55075],{"class":622},[52,62083,54275],{"class":54231},[52,62085,17876],{"class":58},[52,62087,2099],{"class":622},[52,62089,54322],{"class":62},[52,62091,54302],{"class":58},[52,62093,2099],{"class":622},[52,62095,54329],{"class":62},[52,62097,62057],{"class":622},[52,62099,62100,62102,62104,62107,62109],{"class":54,"line":141},[52,62101,55075],{"class":622},[52,62103,54338],{"class":54231},[52,62105,62106],{"class":622},">轮播图点击切换\u003C\u002F",[52,62108,54338],{"class":54231},[52,62110,54238],{"class":622},[52,62112,62113,62115,62117],{"class":54,"line":146},[52,62114,55075],{"class":622},[52,62116,3015],{"class":54231},[52,62118,54238],{"class":622},[52,62120,62121],{"class":54,"line":152},[52,62122,62123],{"class":622},"    * {\n",[52,62125,62126],{"class":54,"line":157},[52,62127,62128],{"class":622},"      box-sizing: border-box;\n",[52,62130,62131],{"class":54,"line":173},[52,62132,5149],{"class":622},[52,62134,62135],{"class":54,"line":178},[52,62136,116],{"emptyLinePlaceholder":115},[52,62138,62139],{"class":54,"line":184},[52,62140,62141],{"class":622},"    .slider {\n",[52,62143,62144],{"class":54,"line":189},[52,62145,62146],{"class":622},"      width: 560px;\n",[52,62148,62149],{"class":54,"line":201},[52,62150,62151],{"class":622},"      height: 400px;\n",[52,62153,62154],{"class":54,"line":206},[52,62155,62156],{"class":622},"      overflow: hidden;\n",[52,62158,62159],{"class":54,"line":224},[52,62160,5149],{"class":622},[52,62162,62163],{"class":54,"line":229},[52,62164,116],{"emptyLinePlaceholder":115},[52,62166,62167],{"class":54,"line":241},[52,62168,62169],{"class":622},"    .slider-wrapper {\n",[52,62171,62172],{"class":54,"line":246},[52,62173,62174],{"class":622},"      width: 100%;\n",[52,62176,62177],{"class":54,"line":252},[52,62178,62179],{"class":622},"      height: 320px;\n",[52,62181,62182],{"class":54,"line":257},[52,62183,5149],{"class":622},[52,62185,62186],{"class":54,"line":266},[52,62187,116],{"emptyLinePlaceholder":115},[52,62189,62190],{"class":54,"line":4722},[52,62191,62192],{"class":622},"    .slider-wrapper img {\n",[52,62194,62195],{"class":54,"line":4727},[52,62196,62174],{"class":622},[52,62198,62199],{"class":54,"line":4741},[52,62200,62201],{"class":622},"      height: 100%;\n",[52,62203,62204],{"class":54,"line":4746},[52,62205,62206],{"class":622},"      display: block;\n",[52,62208,62209],{"class":54,"line":5538},[52,62210,5149],{"class":622},[52,62212,62213],{"class":54,"line":5552},[52,62214,116],{"emptyLinePlaceholder":115},[52,62216,62217],{"class":54,"line":5560},[52,62218,62219],{"class":622},"    .slider-footer {\n",[52,62221,62222],{"class":54,"line":5565},[52,62223,62224],{"class":622},"      height: 80px;\n",[52,62226,62227],{"class":54,"line":5571},[52,62228,62229],{"class":622},"      background-color: rgb(100, 67, 68);\n",[52,62231,62232],{"class":54,"line":5577},[52,62233,62234],{"class":622},"      padding: 12px 12px 0 12px;\n",[52,62236,62237],{"class":54,"line":5582},[52,62238,62239],{"class":622},"      position: relative;\n",[52,62241,62242],{"class":54,"line":10904},[52,62243,5149],{"class":622},[52,62245,62246],{"class":54,"line":10928},[52,62247,116],{"emptyLinePlaceholder":115},[52,62249,62250],{"class":54,"line":10933},[52,62251,62252],{"class":622},"    .slider-footer .toggle {\n",[52,62254,62255],{"class":54,"line":10939},[52,62256,62257],{"class":622},"      position: absolute;\n",[52,62259,62260],{"class":54,"line":10966},[52,62261,62262],{"class":622},"      right: 0;\n",[52,62264,62265],{"class":54,"line":10971},[52,62266,62267],{"class":622},"      top: 12px;\n",[52,62269,62270],{"class":54,"line":10977},[52,62271,62272],{"class":622},"      display: flex;\n",[52,62274,62275],{"class":54,"line":10989},[52,62276,5149],{"class":622},[52,62278,62279],{"class":54,"line":11001},[52,62280,116],{"emptyLinePlaceholder":115},[52,62282,62283],{"class":54,"line":11013},[52,62284,62285],{"class":622},"    .slider-footer .toggle button {\n",[52,62287,62288],{"class":54,"line":12672},[52,62289,62290],{"class":622},"      margin-right: 12px;\n",[52,62292,62293],{"class":54,"line":12697},[52,62294,62295],{"class":622},"      width: 28px;\n",[52,62297,62298],{"class":54,"line":12720},[52,62299,62300],{"class":622},"      height: 28px;\n",[52,62302,62303],{"class":54,"line":12744},[52,62304,62305],{"class":622},"      appearance: none;\n",[52,62307,62308],{"class":54,"line":12749},[52,62309,62310],{"class":622},"      border: none;\n",[52,62312,62313],{"class":54,"line":12754},[52,62314,62315],{"class":622},"      background: rgba(255, 255, 255, 0.1);\n",[52,62317,62318],{"class":54,"line":12759},[52,62319,62320],{"class":622},"      color: #fff;\n",[52,62322,62323],{"class":54,"line":12768},[52,62324,62325],{"class":622},"      border-radius: 4px;\n",[52,62327,62328],{"class":54,"line":12773},[52,62329,62330],{"class":622},"      cursor: pointer;\n",[52,62332,62333],{"class":54,"line":12779},[52,62334,5149],{"class":622},[52,62336,62337],{"class":54,"line":12800},[52,62338,116],{"emptyLinePlaceholder":115},[52,62340,62341],{"class":54,"line":12806},[52,62342,62343],{"class":622},"    .slider-footer .toggle button:hover {\n",[52,62345,62346],{"class":54,"line":12820},[52,62347,62348],{"class":622},"      background: rgba(255, 255, 255, 0.2);\n",[52,62350,62351],{"class":54,"line":12826},[52,62352,5149],{"class":622},[52,62354,62355],{"class":54,"line":12853},[52,62356,116],{"emptyLinePlaceholder":115},[52,62358,62359],{"class":54,"line":12862},[52,62360,62361],{"class":622},"    .slider-footer p {\n",[52,62363,62364],{"class":54,"line":12868},[52,62365,62366],{"class":622},"      margin: 0;\n",[52,62368,62369],{"class":54,"line":12876},[52,62370,62320],{"class":622},[52,62372,62373],{"class":54,"line":12881},[52,62374,62375],{"class":622},"      font-size: 18px;\n",[52,62377,62378],{"class":54,"line":19560},[52,62379,62380],{"class":622},"      margin-bottom: 10px;\n",[52,62382,62383],{"class":54,"line":19566},[52,62384,5149],{"class":622},[52,62386,62387],{"class":54,"line":19589},[52,62388,116],{"emptyLinePlaceholder":115},[52,62390,62391],{"class":54,"line":19595},[52,62392,62393],{"class":622},"    .slider-indicator {\n",[52,62395,62396],{"class":54,"line":19618},[52,62397,62366],{"class":622},[52,62399,62400],{"class":54,"line":19632},[52,62401,62402],{"class":622},"      padding: 0;\n",[52,62404,62405],{"class":54,"line":19652},[52,62406,62407],{"class":622},"      list-style: none;\n",[52,62409,62410],{"class":54,"line":19658},[52,62411,62272],{"class":622},[52,62413,62414],{"class":54,"line":19669},[52,62415,62416],{"class":622},"      align-items: center;\n",[52,62418,62419],{"class":54,"line":19692},[52,62420,5149],{"class":622},[52,62422,62423],{"class":54,"line":19714},[52,62424,116],{"emptyLinePlaceholder":115},[52,62426,62427],{"class":54,"line":19719},[52,62428,62429],{"class":622},"    .slider-indicator li {\n",[52,62431,62432],{"class":54,"line":19725},[52,62433,62434],{"class":622},"      width: 8px;\n",[52,62436,62437],{"class":54,"line":19739},[52,62438,62439],{"class":622},"      height: 8px;\n",[52,62441,62442],{"class":54,"line":19752},[52,62443,62444],{"class":622},"      margin: 4px;\n",[52,62446,62447],{"class":54,"line":19757},[52,62448,62449],{"class":622},"      border-radius: 50%;\n",[52,62451,62452],{"class":54,"line":19771},[52,62453,62454],{"class":622},"      background: #fff;\n",[52,62456,62457],{"class":54,"line":19776},[52,62458,62459],{"class":622},"      opacity: 0.4;\n",[52,62461,62462],{"class":54,"line":19782},[52,62463,62330],{"class":622},[52,62465,62466],{"class":54,"line":19787},[52,62467,5149],{"class":622},[52,62469,62470],{"class":54,"line":19801},[52,62471,116],{"emptyLinePlaceholder":115},[52,62473,62474],{"class":54,"line":19806},[52,62475,62476],{"class":622},"    .slider-indicator li.active {\n",[52,62478,62479],{"class":54,"line":19811},[52,62480,62481],{"class":622},"      width: 12px;\n",[52,62483,62484],{"class":54,"line":19825},[52,62485,62486],{"class":622},"      height: 12px;\n",[52,62488,62489],{"class":54,"line":19837},[52,62490,62491],{"class":622},"      opacity: 1;\n",[52,62493,62494],{"class":54,"line":19842},[52,62495,5149],{"class":622},[52,62497,62498,62500,62502],{"class":54,"line":19855},[52,62499,55347],{"class":622},[52,62501,3015],{"class":54231},[52,62503,54238],{"class":622},[52,62505,62506,62508,62510],{"class":54,"line":19860},[52,62507,54716],{"class":622},[52,62509,54265],{"class":54231},[52,62511,54238],{"class":622},[52,62513,62514],{"class":54,"line":19865},[52,62515,116],{"emptyLinePlaceholder":115},[52,62517,62518,62520,62522],{"class":54,"line":19870},[52,62519,4022],{"class":622},[52,62521,54731],{"class":54231},[52,62523,54238],{"class":622},[52,62525,62526,62528,62530,62532,62534,62537],{"class":54,"line":19883},[52,62527,55075],{"class":622},[52,62529,54542],{"class":54231},[52,62531,56416],{"class":58},[52,62533,2099],{"class":622},[52,62535,62536],{"class":62},"\"slider\"",[52,62538,54238],{"class":622},[52,62540,62541,62543,62545,62547,62549,62551],{"class":54,"line":19888},[52,62542,54272],{"class":622},[52,62544,54542],{"class":54231},[52,62546,56416],{"class":58},[52,62548,2099],{"class":622},[52,62550,58157],{"class":62},[52,62552,54238],{"class":622},[52,62554,62555,62557,62559,62561,62563,62566,62568,62570,62572],{"class":54,"line":35565},[52,62556,58164],{"class":622},[52,62558,280],{"class":54231},[52,62560,58169],{"class":58},[52,62562,2099],{"class":622},[52,62564,62565],{"class":62},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[52,62567,58177],{"class":58},[52,62569,2099],{"class":622},[52,62571,10608],{"class":62},[52,62573,62057],{"class":622},[52,62575,62576,62578,62580],{"class":54,"line":35571},[52,62577,54707],{"class":622},[52,62579,54542],{"class":54231},[52,62581,54238],{"class":622},[52,62583,62584,62586,62588,62590,62592,62594],{"class":54,"line":35577},[52,62585,54272],{"class":622},[52,62587,54542],{"class":54231},[52,62589,56416],{"class":58},[52,62591,2099],{"class":622},[52,62593,58204],{"class":62},[52,62595,54238],{"class":622},[52,62597,62598,62600,62602,62605,62607],{"class":54,"line":35583},[52,62599,58164],{"class":622},[52,62601,274],{"class":54231},[52,62603,62604],{"class":622},">对人类来说会不会太超前了？\u003C\u002F",[52,62606,274],{"class":54231},[52,62608,54238],{"class":622},[52,62610,62611,62613,62615,62617,62619,62622],{"class":54,"line":35589},[52,62612,58164],{"class":622},[52,62614,4118],{"class":54231},[52,62616,56416],{"class":58},[52,62618,2099],{"class":622},[52,62620,62621],{"class":62},"\"slider-indicator\"",[52,62623,54238],{"class":622},[52,62625,62626,62628,62630,62632,62634,62637,62639,62641],{"class":54,"line":35600},[52,62627,58232],{"class":622},[52,62629,1073],{"class":54231},[52,62631,56416],{"class":58},[52,62633,2099],{"class":622},[52,62635,62636],{"class":62},"\"active\"",[52,62638,58244],{"class":622},[52,62640,1073],{"class":54231},[52,62642,54238],{"class":622},[52,62644,62645,62647,62649,62651,62653],{"class":54,"line":35606},[52,62646,58232],{"class":622},[52,62648,1073],{"class":54231},[52,62650,58244],{"class":622},[52,62652,1073],{"class":54231},[52,62654,54238],{"class":622},[52,62656,62657,62659,62661,62663,62665],{"class":54,"line":35626},[52,62658,58232],{"class":622},[52,62660,1073],{"class":54231},[52,62662,58244],{"class":622},[52,62664,1073],{"class":54231},[52,62666,54238],{"class":622},[52,62668,62669,62671,62673,62675,62677],{"class":54,"line":35632},[52,62670,58232],{"class":622},[52,62672,1073],{"class":54231},[52,62674,58244],{"class":622},[52,62676,1073],{"class":54231},[52,62678,54238],{"class":622},[52,62680,62681,62683,62685,62687,62689],{"class":54,"line":35643},[52,62682,58232],{"class":622},[52,62684,1073],{"class":54231},[52,62686,58244],{"class":622},[52,62688,1073],{"class":54231},[52,62690,54238],{"class":622},[52,62692,62693,62695,62697,62699,62701],{"class":54,"line":35649},[52,62694,58232],{"class":622},[52,62696,1073],{"class":54231},[52,62698,58244],{"class":622},[52,62700,1073],{"class":54231},[52,62702,54238],{"class":622},[52,62704,62705,62707,62709,62711,62713],{"class":54,"line":35655},[52,62706,58232],{"class":622},[52,62708,1073],{"class":54231},[52,62710,58244],{"class":622},[52,62712,1073],{"class":54231},[52,62714,54238],{"class":622},[52,62716,62717,62719,62721,62723,62725],{"class":54,"line":35661},[52,62718,58232],{"class":622},[52,62720,1073],{"class":54231},[52,62722,58244],{"class":622},[52,62724,1073],{"class":54231},[52,62726,54238],{"class":622},[52,62728,62729,62731,62733],{"class":54,"line":35667},[52,62730,58337],{"class":622},[52,62732,4118],{"class":54231},[52,62734,54238],{"class":622},[52,62736,62737,62739,62741,62743,62745,62748],{"class":54,"line":35673},[52,62738,58164],{"class":622},[52,62740,54542],{"class":54231},[52,62742,56416],{"class":58},[52,62744,2099],{"class":622},[52,62746,62747],{"class":62},"\"toggle\"",[52,62749,54238],{"class":622},[52,62751,62752,62754,62756,62758,62760,62763,62765,62768,62770,62772],{"class":54,"line":35679},[52,62753,58232],{"class":622},[52,62755,56817],{"class":54231},[52,62757,56416],{"class":58},[52,62759,2099],{"class":622},[52,62761,62762],{"class":62},"\"prev\"",[52,62764,4072],{"class":622},[52,62766,62767],{"class":90},"&lt;",[52,62769,54716],{"class":622},[52,62771,56817],{"class":54231},[52,62773,54238],{"class":622},[52,62775,62776,62778,62780,62782,62784,62787,62789,62792,62794,62796],{"class":54,"line":35685},[52,62777,58232],{"class":622},[52,62779,56817],{"class":54231},[52,62781,56416],{"class":58},[52,62783,2099],{"class":622},[52,62785,62786],{"class":62},"\"next\"",[52,62788,4072],{"class":622},[52,62790,62791],{"class":90},"&gt;",[52,62793,54716],{"class":622},[52,62795,56817],{"class":54231},[52,62797,54238],{"class":622},[52,62799,62800,62802,62804],{"class":54,"line":35705},[52,62801,58337],{"class":622},[52,62803,54542],{"class":54231},[52,62805,54238],{"class":622},[52,62807,62808,62810,62812],{"class":54,"line":35711},[52,62809,54707],{"class":622},[52,62811,54542],{"class":54231},[52,62813,54238],{"class":622},[52,62815,62816,62818,62820],{"class":54,"line":35727},[52,62817,55347],{"class":622},[52,62819,54542],{"class":54231},[52,62821,54238],{"class":622},[52,62823,62824,62826,62828],{"class":54,"line":35733},[52,62825,55075],{"class":622},[52,62827,54744],{"class":54231},[52,62829,54238],{"class":622},[52,62831,62832],{"class":54,"line":35747},[52,62833,62834],{"class":622},"    \u002F\u002F 1. 初始数据\n",[52,62836,62837],{"class":54,"line":35753},[52,62838,62839],{"class":622},"    const data = [\n",[52,62841,62842],{"class":54,"line":35768},[52,62843,62844],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[52,62846,62847],{"class":54,"line":35774},[52,62848,62849],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[52,62851,62852],{"class":54,"line":35783},[52,62853,62854],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[52,62856,62857],{"class":54,"line":35789},[52,62858,62859],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[52,62861,62862],{"class":54,"line":35798},[52,62863,62864],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[52,62866,62867],{"class":54,"line":35804},[52,62868,62869],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[52,62871,62872],{"class":54,"line":35810},[52,62873,62874],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[52,62876,62877],{"class":54,"line":35819},[52,62878,62879],{"class":622},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[52,62881,62882],{"class":54,"line":35825},[52,62883,56039],{"class":622},[52,62885,62886],{"class":54,"line":35836},[52,62887,62888],{"class":622},"    \u002F\u002F 获取元素\n",[52,62890,62891],{"class":54,"line":35842},[52,62892,62893],{"class":622},"    const img = document.querySelector('.slider-wrapper img')\n",[52,62895,62896],{"class":54,"line":35861},[52,62897,62898],{"class":622},"    const p = document.querySelector('.slider-footer p')\n",[52,62900,62901],{"class":54,"line":35867},[52,62902,62903],{"class":622},"    const footer = document.querySelector('.slider-footer')\n",[52,62905,62906],{"class":54,"line":35878},[52,62907,62908],{"class":622},"    \u002F\u002F 1. 右按钮业务\n",[52,62910,62911],{"class":54,"line":35884},[52,62912,62913],{"class":622},"    \u002F\u002F 1.1 获取右侧按钮 \n",[52,62915,62916],{"class":54,"line":35904},[52,62917,62918],{"class":622},"    const next = document.querySelector('.next')\n",[52,62920,62921],{"class":54,"line":35920},[52,62922,62923],{"class":622},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[52,62925,62926],{"class":54,"line":35926},[52,62927,62928],{"class":622},"    \u002F\u002F 1.2 注册点击事件\n",[52,62930,62931],{"class":54,"line":35940},[52,62932,116],{"emptyLinePlaceholder":115},[52,62934,62935],{"class":54,"line":35946},[52,62936,62937],{"class":622},"    next.addEventListener('click', function () {\n",[52,62939,62940],{"class":54,"line":35952},[52,62941,62942],{"class":622},"      \u002F\u002F console.log(11)\n",[52,62944,62945],{"class":54,"line":35963},[52,62946,62947],{"class":622},"      i++\n",[52,62949,62950],{"class":54,"line":35969},[52,62951,62952],{"class":622},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[52,62954,62955],{"class":54,"line":35975},[52,62956,62957],{"class":622},"      \u002F\u002F if (i >= 8) {\n",[52,62959,62960],{"class":54,"line":35985},[52,62961,62962],{"class":622},"      \u002F\u002F   i = 0\n",[52,62964,62965],{"class":54,"line":35991},[52,62966,62967],{"class":622},"      \u002F\u002F }\n",[52,62969,62970],{"class":54,"line":36002},[52,62971,62972],{"class":622},"      i = i >= data.length ? 0 : i\n",[52,62974,62975],{"class":54,"line":36008},[52,62976,62977],{"class":622},"      \u002F\u002F 1.3 得到对应的对象\n",[52,62979,62980],{"class":54,"line":36018},[52,62981,62982],{"class":622},"      \u002F\u002F console.log(data[i])\n",[52,62984,62985],{"class":54,"line":36023},[52,62986,62987],{"class":622},"      \u002F\u002F 调用函数\n",[52,62989,62990],{"class":54,"line":36029},[52,62991,62992],{"class":622},"      toggle()\n",[52,62994,62995],{"class":54,"line":36078},[52,62996,36393],{"class":622},[52,62998,62999],{"class":54,"line":36125},[52,63000,116],{"emptyLinePlaceholder":115},[52,63002,63003],{"class":54,"line":36130},[52,63004,63005],{"class":622},"    \u002F\u002F 2. 左侧按钮业务\n",[52,63007,63008],{"class":54,"line":36136},[52,63009,63010],{"class":622},"    \u002F\u002F 2.1 获取左侧按钮 \n",[52,63012,63013],{"class":54,"line":36155},[52,63014,63015],{"class":622},"    const prev = document.querySelector('.prev')\n",[52,63017,63018],{"class":54,"line":36161},[52,63019,62928],{"class":622},[52,63021,63022],{"class":54,"line":36181},[52,63023,63024],{"class":622},"    prev.addEventListener('click', function () {\n",[52,63026,63027],{"class":54,"line":36187},[52,63028,63029],{"class":622},"      i--\n",[52,63031,63032],{"class":54,"line":36193},[52,63033,63034],{"class":622},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[52,63036,63037],{"class":54,"line":36203},[52,63038,63039],{"class":622},"      \u002F\u002F if (i \u003C 0) {\n",[52,63041,63042],{"class":54,"line":36208},[52,63043,63044],{"class":622},"      \u002F\u002F   i = 7\n",[52,63046,63047],{"class":54,"line":36214},[52,63048,62967],{"class":622},[52,63050,63051],{"class":54,"line":36230},[52,63052,63053],{"class":622},"      i = i \u003C 0 ? data.length - 1 : i\n",[52,63055,63056],{"class":54,"line":36275},[52,63057,62977],{"class":622},[52,63059,63060],{"class":54,"line":36281},[52,63061,62982],{"class":622},[52,63063,63064],{"class":54,"line":36287},[52,63065,62987],{"class":622},[52,63067,63068],{"class":54,"line":36293},[52,63069,62992],{"class":622},[52,63071,63072],{"class":54,"line":36304},[52,63073,36393],{"class":622},[52,63075,63076],{"class":54,"line":36310},[52,63077,116],{"emptyLinePlaceholder":115},[52,63079,63080],{"class":54,"line":36316},[52,63081,63082],{"class":622},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[52,63084,63085],{"class":54,"line":36322},[52,63086,63087],{"class":622},"    function toggle() {\n",[52,63089,63090],{"class":54,"line":36340},[52,63091,63092],{"class":622},"      \u002F\u002F 1.4 渲染对应的数据\n",[52,63094,63095],{"class":54,"line":36354},[52,63096,63097],{"class":622},"      img.src = data[i].url\n",[52,63099,63100],{"class":54,"line":36363},[52,63101,63102],{"class":622},"      p.innerHTML = data[i].title\n",[52,63104,63105],{"class":54,"line":36372},[52,63106,63107],{"class":622},"      footer.style.backgroundColor = data[i].color\n",[52,63109,63110],{"class":54,"line":36381},[52,63111,63112],{"class":622},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[52,63114,63115],{"class":54,"line":36390},[52,63116,63117],{"class":622},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[52,63119,63120],{"class":54,"line":36396},[52,63121,63122],{"class":622},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[52,63124,63125],{"class":54,"line":36402},[52,63126,5149],{"class":622},[52,63128,63129],{"class":54,"line":36410},[52,63130,116],{"emptyLinePlaceholder":115},[52,63132,63133],{"class":54,"line":36415},[52,63134,63135],{"class":622},"    \u002F\u002F 3. 自动播放模块\n",[52,63137,63138],{"class":54,"line":36421},[52,63139,63140],{"class":622},"    let timerId = setInterval(function () {\n",[52,63142,63143],{"class":54,"line":36432},[52,63144,63145],{"class":622},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[52,63147,63148],{"class":54,"line":36438},[52,63149,63150],{"class":622},"      next.click()\n",[52,63152,63153],{"class":54,"line":36458},[52,63154,63155],{"class":622},"    }, 1000)\n",[52,63157,63158],{"class":54,"line":36464},[52,63159,116],{"emptyLinePlaceholder":115},[52,63161,63162],{"class":54,"line":36470},[52,63163,63164],{"class":622},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[52,63166,63167],{"class":54,"line":36476},[52,63168,63169],{"class":622},"    const slider = document.querySelector('.slider')\n",[52,63171,63172],{"class":54,"line":36493},[52,63173,63174],{"class":622},"    \u002F\u002F 注册事件\n",[52,63176,63177],{"class":54,"line":36499},[52,63178,63179],{"class":622},"    slider.addEventListener('mouseenter', function () {\n",[52,63181,63182],{"class":54,"line":36505},[52,63183,63184],{"class":622},"      \u002F\u002F 停止定时器\n",[52,63186,63187],{"class":54,"line":36511},[52,63188,63189],{"class":622},"      clearInterval(timerId)\n",[52,63191,63192],{"class":54,"line":36517},[52,63193,36393],{"class":622},[52,63195,63196],{"class":54,"line":36523},[52,63197,116],{"emptyLinePlaceholder":115},[52,63199,63200],{"class":54,"line":36550},[52,63201,63202],{"class":622},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[52,63204,63205],{"class":54,"line":36574},[52,63206,63174],{"class":622},[52,63208,63209],{"class":54,"line":36580},[52,63210,63211],{"class":622},"    slider.addEventListener('mouseleave', function () {\n",[52,63213,63214],{"class":54,"line":36586},[52,63215,63184],{"class":622},[52,63217,63218],{"class":54,"line":36592},[52,63219,63220],{"class":622},"      if (timerId) clearInterval(timerId)\n",[52,63222,63223],{"class":54,"line":36603},[52,63224,63225],{"class":622},"      \u002F\u002F 开启定时器\n",[52,63227,63228],{"class":54,"line":36614},[52,63229,63230],{"class":622},"      timerId = setInterval(function () {\n",[52,63232,63233],{"class":54,"line":36620},[52,63234,63235],{"class":622},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[52,63237,63238],{"class":54,"line":36637},[52,63239,63240],{"class":622},"        next.click()\n",[52,63242,63243],{"class":54,"line":36660},[52,63244,63245],{"class":622},"      }, 1000)\n",[52,63247,63248],{"class":54,"line":36683},[52,63249,36393],{"class":622},[52,63251,63252,63254,63256],{"class":54,"line":36689},[52,63253,55347],{"class":622},[52,63255,54744],{"class":54231},[52,63257,54238],{"class":622},[52,63259,63260,63262,63264],{"class":54,"line":36694},[52,63261,54716],{"class":622},[52,63263,54731],{"class":54231},[52,63265,54238],{"class":622},[52,63267,63268],{"class":54,"line":36703},[52,63269,116],{"emptyLinePlaceholder":115},[52,63271,63272,63274,63276],{"class":54,"line":36713},[52,63273,54716],{"class":622},[52,63275,53566],{"class":54231},[52,63277,54238],{"class":622},[1486,63279,63281],{"id":63280},"_3252-焦点事件","3.2.5.2 焦点事件",[274,63283,63284],{},"小米搜索框案例：",[19,63286,63288],{"className":53564,"code":63287,"language":53566,"meta":28,"style":28},"\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",[26,63289,63290,63300,63314,63318,63326,63340,63360,63380,63392,63400,63406,63416,63426,63438,63442,63446,63453,63457,63468,63472,63476,63483,63494,63507,63521,63525,63529,63538,63550,63562,63576,63589,63602,63620,63631,63635,63639,63648,63665,63669,63673,63680,63690,63700,63711,63724,63736,63752,63763,63775,63779,63783,63791,63802,63819,63831,63843,63854,63858,63862,63873,63884,63888,63896,63900,63908,63912,63920,63935,63958,63973,64004,64031,64058,64085,64112,64139,64166,64175,64183,64191,64196,64216,64236,64241,64246,64264,64269,64279,64284,64298,64303,64308,64325,64334,64346,64350,64358,64366,64370],{"__ignoreMap":28},[52,63291,63292,63294,63296,63298],{"class":54,"line":55},[52,63293,54228],{"class":622},[52,63295,54232],{"class":54231},[52,63297,54235],{"class":58},[52,63299,54238],{"class":622},[52,63301,63302,63304,63306,63308,63310,63312],{"class":54,"line":69},[52,63303,4022],{"class":622},[52,63305,53566],{"class":54231},[52,63307,54247],{"class":58},[52,63309,2099],{"class":622},[52,63311,54252],{"class":62},[52,63313,54238],{"class":622},[52,63315,63316],{"class":54,"line":82},[52,63317,116],{"emptyLinePlaceholder":115},[52,63319,63320,63322,63324],{"class":54,"line":97},[52,63321,4022],{"class":622},[52,63323,54265],{"class":54231},[52,63325,54238],{"class":622},[52,63327,63328,63330,63332,63334,63336,63338],{"class":54,"line":112},[52,63329,54272],{"class":622},[52,63331,54275],{"class":54231},[52,63333,54278],{"class":58},[52,63335,2099],{"class":622},[52,63337,54283],{"class":62},[52,63339,54238],{"class":622},[52,63341,63342,63344,63346,63348,63350,63352,63354,63356,63358],{"class":54,"line":119},[52,63343,54272],{"class":622},[52,63345,54275],{"class":54231},[52,63347,54294],{"class":58},[52,63349,2099],{"class":622},[52,63351,54299],{"class":62},[52,63353,54302],{"class":58},[52,63355,2099],{"class":622},[52,63357,54307],{"class":62},[52,63359,54238],{"class":622},[52,63361,63362,63364,63366,63368,63370,63372,63374,63376,63378],{"class":54,"line":130},[52,63363,54272],{"class":622},[52,63365,54275],{"class":54231},[52,63367,17876],{"class":58},[52,63369,2099],{"class":622},[52,63371,54322],{"class":62},[52,63373,54302],{"class":58},[52,63375,2099],{"class":622},[52,63377,54329],{"class":62},[52,63379,54238],{"class":622},[52,63381,63382,63384,63386,63388,63390],{"class":54,"line":136},[52,63383,54272],{"class":622},[52,63385,54338],{"class":54231},[52,63387,54341],{"class":622},[52,63389,54338],{"class":54231},[52,63391,54238],{"class":622},[52,63393,63394,63396,63398],{"class":54,"line":141},[52,63395,54272],{"class":622},[52,63397,3015],{"class":54231},[52,63399,54238],{"class":622},[52,63401,63402,63404],{"class":54,"line":146},[52,63403,54358],{"class":54231},[52,63405,18528],{"class":622},[52,63407,63408,63410,63412,63414],{"class":54,"line":152},[52,63409,54365],{"class":90},[52,63411,54368],{"class":622},[52,63413,3306],{"class":90},[52,63415,4272],{"class":622},[52,63417,63418,63420,63422,63424],{"class":54,"line":157},[52,63419,54377],{"class":90},[52,63421,54368],{"class":622},[52,63423,3306],{"class":90},[52,63425,4272],{"class":622},[52,63427,63428,63431,63433,63436],{"class":54,"line":173},[52,63429,63430],{"class":90},"            box-sizing",[52,63432,54368],{"class":622},[52,63434,63435],{"class":90},"border-box",[52,63437,4272],{"class":622},[52,63439,63440],{"class":54,"line":178},[52,63441,5490],{"class":622},[52,63443,63444],{"class":54,"line":184},[52,63445,116],{"emptyLinePlaceholder":115},[52,63447,63448,63451],{"class":54,"line":189},[52,63449,63450],{"class":54231},"        ul",[52,63452,18528],{"class":622},[52,63454,63455],{"class":54,"line":201},[52,63456,116],{"emptyLinePlaceholder":115},[52,63458,63459,63462,63464,63466],{"class":54,"line":206},[52,63460,63461],{"class":90},"            list-style",[52,63463,54368],{"class":622},[52,63465,57667],{"class":90},[52,63467,4272],{"class":622},[52,63469,63470],{"class":54,"line":224},[52,63471,5490],{"class":622},[52,63473,63474],{"class":54,"line":229},[52,63475,116],{"emptyLinePlaceholder":115},[52,63477,63478,63481],{"class":54,"line":241},[52,63479,63480],{"class":58},"        .mi",[52,63482,18528],{"class":622},[52,63484,63485,63488,63490,63492],{"class":54,"line":246},[52,63486,63487],{"class":90},"            position",[52,63489,54368],{"class":622},[52,63491,57694],{"class":90},[52,63493,4272],{"class":622},[52,63495,63496,63498,63500,63503,63505],{"class":54,"line":252},[52,63497,54415],{"class":90},[52,63499,54368],{"class":622},[52,63501,63502],{"class":90},"223",[52,63504,54423],{"class":160},[52,63506,4272],{"class":622},[52,63508,63509,63511,63513,63515,63517,63519],{"class":54,"line":257},[52,63510,54365],{"class":90},[52,63512,54368],{"class":622},[52,63514,3424],{"class":90},[52,63516,54423],{"class":160},[52,63518,54487],{"class":90},[52,63520,4272],{"class":622},[52,63522,63523],{"class":54,"line":266},[52,63524,5490],{"class":622},[52,63526,63527],{"class":54,"line":4722},[52,63528,116],{"emptyLinePlaceholder":115},[52,63530,63531,63533,63536],{"class":54,"line":4727},[52,63532,63480],{"class":58},[52,63534,63535],{"class":54231}," input",[52,63537,18528],{"class":622},[52,63539,63540,63542,63544,63546,63548],{"class":54,"line":4741},[52,63541,54415],{"class":90},[52,63543,54368],{"class":622},[52,63545,63502],{"class":90},[52,63547,54423],{"class":160},[52,63549,4272],{"class":622},[52,63551,63552,63554,63556,63558,63560],{"class":54,"line":4746},[52,63553,54430],{"class":90},[52,63555,54368],{"class":622},[52,63557,3719],{"class":90},[52,63559,54423],{"class":160},[52,63561,4272],{"class":622},[52,63563,63564,63566,63568,63570,63572,63574],{"class":54,"line":5538},[52,63565,54377],{"class":90},[52,63567,54368],{"class":622},[52,63569,3306],{"class":90},[52,63571,5000],{"class":90},[52,63573,54423],{"class":160},[52,63575,4272],{"class":622},[52,63577,63578,63581,63583,63585,63587],{"class":54,"line":5552},[52,63579,63580],{"class":90},"            font-size",[52,63582,54368],{"class":622},[52,63584,3661],{"class":90},[52,63586,54423],{"class":160},[52,63588,4272],{"class":622},[52,63590,63591,63594,63596,63598,63600],{"class":54,"line":5560},[52,63592,63593],{"class":90},"            line-height",[52,63595,54368],{"class":622},[52,63597,3719],{"class":90},[52,63599,54423],{"class":160},[52,63601,4272],{"class":622},[52,63603,63604,63607,63609,63611,63613,63615,63618],{"class":54,"line":5565},[52,63605,63606],{"class":90},"            border",[52,63608,54368],{"class":622},[52,63610,3332],{"class":90},[52,63612,54423],{"class":160},[52,63614,54452],{"class":90},[52,63616,63617],{"class":90}," #e0e0e0",[52,63619,4272],{"class":622},[52,63621,63622,63625,63627,63629],{"class":54,"line":5571},[52,63623,63624],{"class":90},"            outline",[52,63626,54368],{"class":622},[52,63628,57667],{"class":90},[52,63630,4272],{"class":622},[52,63632,63633],{"class":54,"line":5577},[52,63634,5490],{"class":622},[52,63636,63637],{"class":54,"line":5582},[52,63638,116],{"emptyLinePlaceholder":115},[52,63640,63641,63643,63646],{"class":54,"line":10904},[52,63642,63480],{"class":58},[52,63644,63645],{"class":58}," .search",[52,63647,18528],{"class":622},[52,63649,63650,63652,63654,63656,63658,63660,63663],{"class":54,"line":10928},[52,63651,63606],{"class":90},[52,63653,54368],{"class":622},[52,63655,3332],{"class":90},[52,63657,54423],{"class":160},[52,63659,54452],{"class":90},[52,63661,63662],{"class":90}," #ff6700",[52,63664,4272],{"class":622},[52,63666,63667],{"class":54,"line":10933},[52,63668,5490],{"class":622},[52,63670,63671],{"class":54,"line":10939},[52,63672,116],{"emptyLinePlaceholder":115},[52,63674,63675,63678],{"class":54,"line":10966},[52,63676,63677],{"class":58},"        .result-list",[52,63679,18528],{"class":622},[52,63681,63682,63684,63686,63688],{"class":54,"line":10971},[52,63683,54403],{"class":90},[52,63685,54368],{"class":622},[52,63687,57667],{"class":90},[52,63689,4272],{"class":622},[52,63691,63692,63694,63696,63698],{"class":54,"line":10977},[52,63693,63487],{"class":90},[52,63695,54368],{"class":622},[52,63697,57761],{"class":90},[52,63699,4272],{"class":622},[52,63701,63702,63705,63707,63709],{"class":54,"line":10989},[52,63703,63704],{"class":90},"            left",[52,63706,54368],{"class":622},[52,63708,3306],{"class":90},[52,63710,4272],{"class":622},[52,63712,63713,63716,63718,63720,63722],{"class":54,"line":11001},[52,63714,63715],{"class":90},"            top",[52,63717,54368],{"class":622},[52,63719,3719],{"class":90},[52,63721,54423],{"class":160},[52,63723,4272],{"class":622},[52,63725,63726,63728,63730,63732,63734],{"class":54,"line":11013},[52,63727,54415],{"class":90},[52,63729,54368],{"class":622},[52,63731,63502],{"class":90},[52,63733,54423],{"class":160},[52,63735,4272],{"class":622},[52,63737,63738,63740,63742,63744,63746,63748,63750],{"class":54,"line":12672},[52,63739,63606],{"class":90},[52,63741,54368],{"class":622},[52,63743,3332],{"class":90},[52,63745,54423],{"class":160},[52,63747,54452],{"class":90},[52,63749,63662],{"class":90},[52,63751,4272],{"class":622},[52,63753,63754,63757,63759,63761],{"class":54,"line":12697},[52,63755,63756],{"class":90},"            border-top",[52,63758,54368],{"class":622},[52,63760,3306],{"class":90},[52,63762,4272],{"class":622},[52,63764,63765,63768,63770,63773],{"class":54,"line":12720},[52,63766,63767],{"class":90},"            background",[52,63769,54368],{"class":622},[52,63771,63772],{"class":90},"#fff",[52,63774,4272],{"class":622},[52,63776,63777],{"class":54,"line":12744},[52,63778,5490],{"class":622},[52,63780,63781],{"class":54,"line":12749},[52,63782,116],{"emptyLinePlaceholder":115},[52,63784,63785,63787,63789],{"class":54,"line":12754},[52,63786,63677],{"class":58},[52,63788,4377],{"class":54231},[52,63790,18528],{"class":622},[52,63792,63793,63795,63797,63800],{"class":54,"line":12759},[52,63794,54403],{"class":90},[52,63796,54368],{"class":622},[52,63798,63799],{"class":90},"block",[52,63801,4272],{"class":622},[52,63803,63804,63806,63808,63810,63812,63815,63817],{"class":54,"line":12768},[52,63805,54377],{"class":90},[52,63807,54368],{"class":622},[52,63809,3457],{"class":90},[52,63811,54423],{"class":160},[52,63813,63814],{"class":90}," 15",[52,63816,54423],{"class":160},[52,63818,4272],{"class":622},[52,63820,63821,63823,63825,63827,63829],{"class":54,"line":12773},[52,63822,63580],{"class":90},[52,63824,54368],{"class":622},[52,63826,3610],{"class":90},[52,63828,54423],{"class":160},[52,63830,4272],{"class":622},[52,63832,63833,63836,63838,63841],{"class":54,"line":12779},[52,63834,63835],{"class":90},"            color",[52,63837,54368],{"class":622},[52,63839,63840],{"class":90},"#424242",[52,63842,4272],{"class":622},[52,63844,63845,63848,63850,63852],{"class":54,"line":12800},[52,63846,63847],{"class":90},"            text-decoration",[52,63849,54368],{"class":622},[52,63851,57667],{"class":90},[52,63853,4272],{"class":622},[52,63855,63856],{"class":54,"line":12806},[52,63857,5490],{"class":622},[52,63859,63860],{"class":54,"line":12820},[52,63861,116],{"emptyLinePlaceholder":115},[52,63863,63864,63866,63868,63871],{"class":54,"line":12826},[52,63865,63677],{"class":58},[52,63867,4377],{"class":54231},[52,63869,63870],{"class":58},":hover",[52,63872,18528],{"class":622},[52,63874,63875,63877,63879,63882],{"class":54,"line":12853},[52,63876,54571],{"class":90},[52,63878,54368],{"class":622},[52,63880,63881],{"class":90},"#eee",[52,63883,4272],{"class":622},[52,63885,63886],{"class":54,"line":12862},[52,63887,5490],{"class":622},[52,63889,63890,63892,63894],{"class":54,"line":12868},[52,63891,54707],{"class":622},[52,63893,3015],{"class":54231},[52,63895,54238],{"class":622},[52,63897,63898],{"class":54,"line":12876},[52,63899,116],{"emptyLinePlaceholder":115},[52,63901,63902,63904,63906],{"class":54,"line":12881},[52,63903,54716],{"class":622},[52,63905,54265],{"class":54231},[52,63907,54238],{"class":622},[52,63909,63910],{"class":54,"line":19560},[52,63911,116],{"emptyLinePlaceholder":115},[52,63913,63914,63916,63918],{"class":54,"line":19566},[52,63915,4022],{"class":622},[52,63917,54731],{"class":54231},[52,63919,54238],{"class":622},[52,63921,63922,63924,63926,63928,63930,63933],{"class":54,"line":19589},[52,63923,54272],{"class":622},[52,63925,54542],{"class":54231},[52,63927,56416],{"class":58},[52,63929,2099],{"class":622},[52,63931,63932],{"class":62},"\"mi\"",[52,63934,54238],{"class":622},[52,63936,63937,63939,63941,63943,63945,63948,63951,63953,63956],{"class":54,"line":19595},[52,63938,58232],{"class":622},[52,63940,56751],{"class":54231},[52,63942,56754],{"class":58},[52,63944,2099],{"class":622},[52,63946,63947],{"class":62},"\"search\"",[52,63949,63950],{"class":58}," placeholder",[52,63952,2099],{"class":622},[52,63954,63955],{"class":62},"\"小米笔记本\"",[52,63957,54238],{"class":622},[52,63959,63960,63962,63964,63966,63968,63971],{"class":54,"line":19618},[52,63961,58232],{"class":622},[52,63963,4118],{"class":54231},[52,63965,56416],{"class":58},[52,63967,2099],{"class":622},[52,63969,63970],{"class":62},"\"result-list\"",[52,63972,54238],{"class":622},[52,63974,63975,63978,63980,63983,63985,63988,63990,63993,63996,63998,64000,64002],{"class":54,"line":19632},[52,63976,63977],{"class":622},"            \u003C",[52,63979,1073],{"class":54231},[52,63981,63982],{"class":622},">\u003C",[52,63984,300],{"class":54231},[52,63986,63987],{"class":58}," href",[52,63989,2099],{"class":622},[52,63991,63992],{"class":62},"\"#\"",[52,63994,63995],{"class":622},">全部商品\u003C\u002F",[52,63997,300],{"class":54231},[52,63999,58244],{"class":622},[52,64001,1073],{"class":54231},[52,64003,54238],{"class":622},[52,64005,64006,64008,64010,64012,64014,64016,64018,64020,64023,64025,64027,64029],{"class":54,"line":19652},[52,64007,63977],{"class":622},[52,64009,1073],{"class":54231},[52,64011,63982],{"class":622},[52,64013,300],{"class":54231},[52,64015,63987],{"class":58},[52,64017,2099],{"class":622},[52,64019,63992],{"class":62},[52,64021,64022],{"class":622},">小米11\u003C\u002F",[52,64024,300],{"class":54231},[52,64026,58244],{"class":622},[52,64028,1073],{"class":54231},[52,64030,54238],{"class":622},[52,64032,64033,64035,64037,64039,64041,64043,64045,64047,64050,64052,64054,64056],{"class":54,"line":19658},[52,64034,63977],{"class":622},[52,64036,1073],{"class":54231},[52,64038,63982],{"class":622},[52,64040,300],{"class":54231},[52,64042,63987],{"class":58},[52,64044,2099],{"class":622},[52,64046,63992],{"class":62},[52,64048,64049],{"class":622},">小米10S\u003C\u002F",[52,64051,300],{"class":54231},[52,64053,58244],{"class":622},[52,64055,1073],{"class":54231},[52,64057,54238],{"class":622},[52,64059,64060,64062,64064,64066,64068,64070,64072,64074,64077,64079,64081,64083],{"class":54,"line":19669},[52,64061,63977],{"class":622},[52,64063,1073],{"class":54231},[52,64065,63982],{"class":622},[52,64067,300],{"class":54231},[52,64069,63987],{"class":58},[52,64071,2099],{"class":622},[52,64073,63992],{"class":62},[52,64075,64076],{"class":622},">小米笔记本\u003C\u002F",[52,64078,300],{"class":54231},[52,64080,58244],{"class":622},[52,64082,1073],{"class":54231},[52,64084,54238],{"class":622},[52,64086,64087,64089,64091,64093,64095,64097,64099,64101,64104,64106,64108,64110],{"class":54,"line":19692},[52,64088,63977],{"class":622},[52,64090,1073],{"class":54231},[52,64092,63982],{"class":622},[52,64094,300],{"class":54231},[52,64096,63987],{"class":58},[52,64098,2099],{"class":622},[52,64100,63992],{"class":62},[52,64102,64103],{"class":622},">小米手机\u003C\u002F",[52,64105,300],{"class":54231},[52,64107,58244],{"class":622},[52,64109,1073],{"class":54231},[52,64111,54238],{"class":622},[52,64113,64114,64116,64118,64120,64122,64124,64126,64128,64131,64133,64135,64137],{"class":54,"line":19714},[52,64115,63977],{"class":622},[52,64117,1073],{"class":54231},[52,64119,63982],{"class":622},[52,64121,300],{"class":54231},[52,64123,63987],{"class":58},[52,64125,2099],{"class":622},[52,64127,63992],{"class":62},[52,64129,64130],{"class":622},">黑鲨4\u003C\u002F",[52,64132,300],{"class":54231},[52,64134,58244],{"class":622},[52,64136,1073],{"class":54231},[52,64138,54238],{"class":622},[52,64140,64141,64143,64145,64147,64149,64151,64153,64155,64158,64160,64162,64164],{"class":54,"line":19719},[52,64142,63977],{"class":622},[52,64144,1073],{"class":54231},[52,64146,63982],{"class":622},[52,64148,300],{"class":54231},[52,64150,63987],{"class":58},[52,64152,2099],{"class":622},[52,64154,63992],{"class":62},[52,64156,64157],{"class":622},">空调\u003C\u002F",[52,64159,300],{"class":54231},[52,64161,58244],{"class":622},[52,64163,1073],{"class":54231},[52,64165,54238],{"class":622},[52,64167,64168,64171,64173],{"class":54,"line":19725},[52,64169,64170],{"class":622},"        \u003C\u002F",[52,64172,4118],{"class":54231},[52,64174,54238],{"class":622},[52,64176,64177,64179,64181],{"class":54,"line":19739},[52,64178,54707],{"class":622},[52,64180,54542],{"class":54231},[52,64182,54238],{"class":622},[52,64184,64185,64187,64189],{"class":54,"line":19752},[52,64186,54272],{"class":622},[52,64188,54744],{"class":54231},[52,64190,54238],{"class":622},[52,64192,64193],{"class":54,"line":19757},[52,64194,64195],{"class":332},"        \u002F\u002F 1. 获取元素\n",[52,64197,64198,64201,64203,64205,64207,64209,64211,64214],{"class":54,"line":19771},[52,64199,64200],{"class":160},"        const",[52,64202,63535],{"class":90},[52,64204,16520],{"class":160},[52,64206,57326],{"class":622},[52,64208,57329],{"class":58},[52,64210,3121],{"class":622},[52,64212,64213],{"class":62},"'[type=search]'",[52,64215,170],{"class":622},[52,64217,64218,64220,64223,64225,64227,64229,64231,64234],{"class":54,"line":19776},[52,64219,64200],{"class":160},[52,64221,64222],{"class":90}," ul",[52,64224,16520],{"class":160},[52,64226,57326],{"class":622},[52,64228,57329],{"class":58},[52,64230,3121],{"class":622},[52,64232,64233],{"class":62},"'.result-list'",[52,64235,170],{"class":622},[52,64237,64238],{"class":54,"line":19782},[52,64239,64240],{"class":332},"        \u002F\u002F console.log(input)\n",[52,64242,64243],{"class":54,"line":19787},[52,64244,64245],{"class":332},"        \u002F\u002F 2. 监听事件 获得焦点\n",[52,64247,64248,64251,64253,64255,64258,64260,64262],{"class":54,"line":19801},[52,64249,64250],{"class":622},"        input.",[52,64252,60743],{"class":58},[52,64254,3121],{"class":622},[52,64256,64257],{"class":62},"'focus'",[52,64259,15391],{"class":622},[52,64261,57379],{"class":160},[52,64263,57382],{"class":622},[52,64265,64266],{"class":54,"line":19806},[52,64267,64268],{"class":332},"            \u002F\u002F ul显示\n",[52,64270,64271,64274,64276],{"class":54,"line":19811},[52,64272,64273],{"class":622},"            ul.style.display ",[52,64275,2099],{"class":160},[52,64277,64278],{"class":62}," 'block'\n",[52,64280,64281],{"class":54,"line":19825},[52,64282,64283],{"class":332},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[52,64285,64286,64289,64291,64293,64296],{"class":54,"line":19837},[52,64287,64288],{"class":622},"            input.classList.",[52,64290,8290],{"class":58},[52,64292,3121],{"class":622},[52,64294,64295],{"class":62},"'search'",[52,64297,170],{"class":622},[52,64299,64300],{"class":54,"line":19842},[52,64301,64302],{"class":622},"        })\n",[52,64304,64305],{"class":54,"line":19855},[52,64306,64307],{"class":332},"        \u002F\u002F 3. 监听事件 失去焦点\n",[52,64309,64310,64312,64314,64316,64319,64321,64323],{"class":54,"line":19860},[52,64311,64250],{"class":622},[52,64313,60743],{"class":58},[52,64315,3121],{"class":622},[52,64317,64318],{"class":62},"'blur'",[52,64320,15391],{"class":622},[52,64322,57379],{"class":160},[52,64324,57382],{"class":622},[52,64326,64327,64329,64331],{"class":54,"line":19865},[52,64328,64273],{"class":622},[52,64330,2099],{"class":160},[52,64332,64333],{"class":62}," 'none'\n",[52,64335,64336,64338,64340,64342,64344],{"class":54,"line":19870},[52,64337,64288],{"class":622},[52,64339,59936],{"class":58},[52,64341,3121],{"class":622},[52,64343,64295],{"class":62},[52,64345,170],{"class":622},[52,64347,64348],{"class":54,"line":19883},[52,64349,64302],{"class":622},[52,64351,64352,64354,64356],{"class":54,"line":19888},[52,64353,54707],{"class":622},[52,64355,54744],{"class":54231},[52,64357,54238],{"class":622},[52,64359,64360,64362,64364],{"class":54,"line":35565},[52,64361,54716],{"class":622},[52,64363,54731],{"class":54231},[52,64365,54238],{"class":622},[52,64367,64368],{"class":54,"line":35571},[52,64369,116],{"emptyLinePlaceholder":115},[52,64371,64372,64374,64376],{"class":54,"line":35577},[52,64373,54716],{"class":622},[52,64375,53566],{"class":54231},[52,64377,54238],{"class":622},[1486,64379,64381],{"id":64380},"_3253-键盘事件","3.2.5.3 键盘事件",[274,64383,64384],{},"评论字数统计案例",[274,64386,64387],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[274,64389,64390],{},"牢记focus伪类选择器",[54275,64392],{"charSet":64393},"UTF-8",[54275,64395],{"name":64396,"content":64397},"viewport","width=device-width, initial-scale=1.0",[54338,64399,64400],{},"Document",[3015,64402,64403],{},"\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",[56751,64405],{"type":24},[4118,64407,64408,64411],{},[1073,64409,64410],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[1073,64412,64413],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[19,64415,64417],{"className":53564,"code":64416,"language":53566,"meta":28,"style":28},"\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",[26,64418,64419,64429,64443,64447,64455,64469,64489,64509,64522,64530,64537,64550,64564,64574,64584,64588,64592,64599,64611,64623,64635,64647,64676,64689,64693,64697,64706,64717,64729,64740,64751,64763,64774,64786,64802,64814,64818,64822,64833,64844,64854,64866,64870,64874,64882,64893,64903,64914,64926,64939,64951,64963,64967,64971,64980,64992,65003,65016,65027,65041,65045,65049,65056,65068,65080,65090,65094,65098,65107,65119,65129,65133,65137,65148,65158,65177,65190,65194,65198,65208,65218,65222,65226,65237,65248,65260,65272,65276,65280,65291,65302,65316,65320,65324,65335,65345,65357,65361,65369,65377,65381,65389,65404,65423,65463,65476,65484,65498,65518,65526,65541,65564,65582,65597,65617,65637,65657,65665,65673,65681,65689,65709,65729,65734,65751,65760,65764,65769,65785,65793,65797,65802,65819,65824,65849,65853,65857,65862,65867,65875,65883,65887],{"__ignoreMap":28},[52,64420,64421,64423,64425,64427],{"class":54,"line":55},[52,64422,54228],{"class":622},[52,64424,54232],{"class":54231},[52,64426,54235],{"class":58},[52,64428,54238],{"class":622},[52,64430,64431,64433,64435,64437,64439,64441],{"class":54,"line":69},[52,64432,4022],{"class":622},[52,64434,53566],{"class":54231},[52,64436,54247],{"class":58},[52,64438,2099],{"class":622},[52,64440,54252],{"class":62},[52,64442,54238],{"class":622},[52,64444,64445],{"class":54,"line":82},[52,64446,116],{"emptyLinePlaceholder":115},[52,64448,64449,64451,64453],{"class":54,"line":97},[52,64450,4022],{"class":622},[52,64452,54265],{"class":54231},[52,64454,54238],{"class":622},[52,64456,64457,64459,64461,64463,64465,64467],{"class":54,"line":112},[52,64458,55075],{"class":622},[52,64460,54275],{"class":54231},[52,64462,54278],{"class":58},[52,64464,2099],{"class":622},[52,64466,54283],{"class":62},[52,64468,54238],{"class":622},[52,64470,64471,64473,64475,64477,64479,64481,64483,64485,64487],{"class":54,"line":119},[52,64472,55075],{"class":622},[52,64474,54275],{"class":54231},[52,64476,54294],{"class":58},[52,64478,2099],{"class":622},[52,64480,54299],{"class":62},[52,64482,54302],{"class":58},[52,64484,2099],{"class":622},[52,64486,54307],{"class":62},[52,64488,54238],{"class":622},[52,64490,64491,64493,64495,64497,64499,64501,64503,64505,64507],{"class":54,"line":130},[52,64492,55075],{"class":622},[52,64494,54275],{"class":54231},[52,64496,17876],{"class":58},[52,64498,2099],{"class":622},[52,64500,54322],{"class":62},[52,64502,54302],{"class":58},[52,64504,2099],{"class":622},[52,64506,54329],{"class":62},[52,64508,54238],{"class":622},[52,64510,64511,64513,64515,64518,64520],{"class":54,"line":136},[52,64512,55075],{"class":622},[52,64514,54338],{"class":54231},[52,64516,64517],{"class":622},">评论回车发布\u003C\u002F",[52,64519,54338],{"class":54231},[52,64521,54238],{"class":622},[52,64523,64524,64526,64528],{"class":54,"line":141},[52,64525,55075],{"class":622},[52,64527,3015],{"class":54231},[52,64529,54238],{"class":622},[52,64531,64532,64535],{"class":54,"line":146},[52,64533,64534],{"class":58},"    .wrapper",[52,64536,18528],{"class":622},[52,64538,64539,64542,64544,64546,64548],{"class":54,"line":152},[52,64540,64541],{"class":90},"      min-width",[52,64543,54368],{"class":622},[52,64545,6946],{"class":90},[52,64547,54423],{"class":160},[52,64549,4272],{"class":622},[52,64551,64552,64555,64557,64560,64562],{"class":54,"line":157},[52,64553,64554],{"class":90},"      max-width",[52,64556,54368],{"class":622},[52,64558,64559],{"class":90},"800",[52,64561,54423],{"class":160},[52,64563,4272],{"class":622},[52,64565,64566,64568,64570,64572],{"class":54,"line":173},[52,64567,57939],{"class":90},[52,64569,54368],{"class":622},[52,64571,54408],{"class":90},[52,64573,4272],{"class":622},[52,64575,64576,64578,64580,64582],{"class":54,"line":178},[52,64577,57950],{"class":90},[52,64579,54368],{"class":622},[52,64581,54511],{"class":90},[52,64583,4272],{"class":622},[52,64585,64586],{"class":54,"line":184},[52,64587,5149],{"class":622},[52,64589,64590],{"class":54,"line":189},[52,64591,116],{"emptyLinePlaceholder":115},[52,64593,64594,64597],{"class":54,"line":201},[52,64595,64596],{"class":58},"    .avatar",[52,64598,18528],{"class":622},[52,64600,64601,64603,64605,64607,64609],{"class":54,"line":206},[52,64602,57701],{"class":90},[52,64604,54368],{"class":622},[52,64606,3719],{"class":90},[52,64608,54423],{"class":160},[52,64610,4272],{"class":622},[52,64612,64613,64615,64617,64619,64621],{"class":54,"line":224},[52,64614,57715],{"class":90},[52,64616,54368],{"class":622},[52,64618,3719],{"class":90},[52,64620,54423],{"class":160},[52,64622,4272],{"class":622},[52,64624,64625,64627,64629,64631,64633],{"class":54,"line":229},[52,64626,58064],{"class":90},[52,64628,54368],{"class":622},[52,64630,3768],{"class":90},[52,64632,3441],{"class":160},[52,64634,4272],{"class":622},[52,64636,64637,64640,64642,64645],{"class":54,"line":241},[52,64638,64639],{"class":90},"      overflow",[52,64641,54368],{"class":622},[52,64643,64644],{"class":90},"hidden",[52,64646,4272],{"class":622},[52,64648,64649,64652,64654,64657,64659,64662,64664,64667,64669,64671,64674],{"class":54,"line":246},[52,64650,64651],{"class":90},"      background",[52,64653,54368],{"class":622},[52,64655,64656],{"class":90},"url",[52,64658,3121],{"class":622},[52,64660,64661],{"class":8172},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[52,64663,16670],{"class":622},[52,64665,64666],{"class":90},"no-repeat",[52,64668,20100],{"class":90},[52,64670,27927],{"class":622},[52,64672,64673],{"class":90},"cover",[52,64675,4272],{"class":622},[52,64677,64678,64681,64683,64685,64687],{"class":54,"line":252},[52,64679,64680],{"class":90},"      margin-right",[52,64682,54368],{"class":622},[52,64684,3812],{"class":90},[52,64686,54423],{"class":160},[52,64688,4272],{"class":622},[52,64690,64691],{"class":54,"line":257},[52,64692,5149],{"class":622},[52,64694,64695],{"class":54,"line":266},[52,64696,116],{"emptyLinePlaceholder":115},[52,64698,64699,64701,64704],{"class":54,"line":4722},[52,64700,64534],{"class":58},[52,64702,64703],{"class":54231}," textarea",[52,64705,18528],{"class":622},[52,64707,64708,64711,64713,64715],{"class":54,"line":4727},[52,64709,64710],{"class":90},"      outline",[52,64712,54368],{"class":622},[52,64714,57667],{"class":90},[52,64716,4272],{"class":622},[52,64718,64719,64722,64724,64727],{"class":54,"line":4741},[52,64720,64721],{"class":90},"      border-color",[52,64723,54368],{"class":622},[52,64725,64726],{"class":90},"transparent",[52,64728,4272],{"class":622},[52,64730,64731,64734,64736,64738],{"class":54,"line":4746},[52,64732,64733],{"class":90},"      resize",[52,64735,54368],{"class":622},[52,64737,57667],{"class":90},[52,64739,4272],{"class":622},[52,64741,64742,64744,64746,64749],{"class":54,"line":5538},[52,64743,64651],{"class":90},[52,64745,54368],{"class":622},[52,64747,64748],{"class":90},"#f5f5f5",[52,64750,4272],{"class":622},[52,64752,64753,64755,64757,64759,64761],{"class":54,"line":5552},[52,64754,58064],{"class":90},[52,64756,54368],{"class":622},[52,64758,3406],{"class":90},[52,64760,54423],{"class":160},[52,64762,4272],{"class":622},[52,64764,64765,64768,64770,64772],{"class":54,"line":5560},[52,64766,64767],{"class":90},"      flex",[52,64769,54368],{"class":622},[52,64771,3332],{"class":90},[52,64773,4272],{"class":622},[52,64775,64776,64778,64780,64782,64784],{"class":54,"line":5565},[52,64777,57625],{"class":90},[52,64779,54368],{"class":622},[52,64781,3559],{"class":90},[52,64783,54423],{"class":160},[52,64785,4272],{"class":622},[52,64787,64788,64791,64793,64795,64798,64800],{"class":54,"line":5571},[52,64789,64790],{"class":90},"      transition",[52,64792,54368],{"class":622},[52,64794,31055],{"class":90},[52,64796,64797],{"class":90}," 0.5",[52,64799,3807],{"class":160},[52,64801,4272],{"class":622},[52,64803,64804,64806,64808,64810,64812],{"class":54,"line":5577},[52,64805,57715],{"class":90},[52,64807,54368],{"class":622},[52,64809,4063],{"class":90},[52,64811,54423],{"class":160},[52,64813,4272],{"class":622},[52,64815,64816],{"class":54,"line":5582},[52,64817,5149],{"class":622},[52,64819,64820],{"class":54,"line":10904},[52,64821,116],{"emptyLinePlaceholder":115},[52,64823,64824,64826,64828,64831],{"class":54,"line":10928},[52,64825,64534],{"class":58},[52,64827,64703],{"class":54231},[52,64829,64830],{"class":58},":focus",[52,64832,18528],{"class":622},[52,64834,64835,64837,64839,64842],{"class":54,"line":10933},[52,64836,64721],{"class":90},[52,64838,54368],{"class":622},[52,64840,64841],{"class":90},"#e4e4e4",[52,64843,4272],{"class":622},[52,64845,64846,64848,64850,64852],{"class":54,"line":10939},[52,64847,64651],{"class":90},[52,64849,54368],{"class":622},[52,64851,63772],{"class":90},[52,64853,4272],{"class":622},[52,64855,64856,64858,64860,64862,64864],{"class":54,"line":10966},[52,64857,57715],{"class":90},[52,64859,54368],{"class":622},[52,64861,3768],{"class":90},[52,64863,54423],{"class":160},[52,64865,4272],{"class":622},[52,64867,64868],{"class":54,"line":10971},[52,64869,5149],{"class":622},[52,64871,64872],{"class":54,"line":10977},[52,64873,116],{"emptyLinePlaceholder":115},[52,64875,64876,64878,64880],{"class":54,"line":10989},[52,64877,64534],{"class":58},[52,64879,60397],{"class":54231},[52,64881,18528],{"class":622},[52,64883,64884,64886,64888,64891],{"class":54,"line":11001},[52,64885,64651],{"class":90},[52,64887,54368],{"class":622},[52,64889,64890],{"class":90},"#00aeec",[52,64892,4272],{"class":622},[52,64894,64895,64897,64899,64901],{"class":54,"line":11013},[52,64896,60346],{"class":90},[52,64898,54368],{"class":622},[52,64900,63772],{"class":90},[52,64902,4272],{"class":622},[52,64904,64905,64908,64910,64912],{"class":54,"line":12672},[52,64906,64907],{"class":90},"      border",[52,64909,54368],{"class":622},[52,64911,57667],{"class":90},[52,64913,4272],{"class":622},[52,64915,64916,64918,64920,64922,64924],{"class":54,"line":12697},[52,64917,58064],{"class":90},[52,64919,54368],{"class":622},[52,64921,3406],{"class":90},[52,64923,54423],{"class":160},[52,64925,4272],{"class":622},[52,64927,64928,64931,64933,64935,64937],{"class":54,"line":12720},[52,64929,64930],{"class":90},"      margin-left",[52,64932,54368],{"class":622},[52,64934,3559],{"class":90},[52,64936,54423],{"class":160},[52,64938,4272],{"class":622},[52,64940,64941,64943,64945,64947,64949],{"class":54,"line":12744},[52,64942,57701],{"class":90},[52,64944,54368],{"class":622},[52,64946,3469],{"class":90},[52,64948,54423],{"class":160},[52,64950,4272],{"class":622},[52,64952,64953,64956,64958,64961],{"class":54,"line":12749},[52,64954,64955],{"class":90},"      cursor",[52,64957,54368],{"class":622},[52,64959,64960],{"class":90},"pointer",[52,64962,4272],{"class":622},[52,64964,64965],{"class":54,"line":12754},[52,64966,5149],{"class":622},[52,64968,64969],{"class":54,"line":12759},[52,64970,116],{"emptyLinePlaceholder":115},[52,64972,64973,64975,64978],{"class":54,"line":12768},[52,64974,64534],{"class":58},[52,64976,64977],{"class":58}," .total",[52,64979,18528],{"class":622},[52,64981,64982,64984,64986,64988,64990],{"class":54,"line":12773},[52,64983,64680],{"class":90},[52,64985,54368],{"class":622},[52,64987,3724],{"class":90},[52,64989,54423],{"class":160},[52,64991,4272],{"class":622},[52,64993,64994,64996,64998,65001],{"class":54,"line":12779},[52,64995,60346],{"class":90},[52,64997,54368],{"class":622},[52,64999,65000],{"class":90},"#999",[52,65002,4272],{"class":622},[52,65004,65005,65008,65010,65012,65014],{"class":54,"line":12800},[52,65006,65007],{"class":90},"      margin-top",[52,65009,54368],{"class":622},[52,65011,3432],{"class":90},[52,65013,54423],{"class":160},[52,65015,4272],{"class":622},[52,65017,65018,65021,65023,65025],{"class":54,"line":12806},[52,65019,65020],{"class":90},"      opacity",[52,65022,54368],{"class":622},[52,65024,3306],{"class":90},[52,65026,4272],{"class":622},[52,65028,65029,65031,65033,65035,65037,65039],{"class":54,"line":12820},[52,65030,64790],{"class":90},[52,65032,54368],{"class":622},[52,65034,31055],{"class":90},[52,65036,64797],{"class":90},[52,65038,3807],{"class":160},[52,65040,4272],{"class":622},[52,65042,65043],{"class":54,"line":12826},[52,65044,5149],{"class":622},[52,65046,65047],{"class":54,"line":12853},[52,65048,116],{"emptyLinePlaceholder":115},[52,65050,65051,65054],{"class":54,"line":12862},[52,65052,65053],{"class":58},"    .list",[52,65055,18528],{"class":622},[52,65057,65058,65060,65062,65064,65066],{"class":54,"line":12868},[52,65059,64541],{"class":90},[52,65061,54368],{"class":622},[52,65063,6946],{"class":90},[52,65065,54423],{"class":160},[52,65067,4272],{"class":622},[52,65069,65070,65072,65074,65076,65078],{"class":54,"line":12876},[52,65071,64554],{"class":90},[52,65073,54368],{"class":622},[52,65075,64559],{"class":90},[52,65077,54423],{"class":160},[52,65079,4272],{"class":622},[52,65081,65082,65084,65086,65088],{"class":54,"line":12881},[52,65083,57939],{"class":90},[52,65085,54368],{"class":622},[52,65087,54408],{"class":90},[52,65089,4272],{"class":622},[52,65091,65092],{"class":54,"line":19560},[52,65093,5149],{"class":622},[52,65095,65096],{"class":54,"line":19566},[52,65097,116],{"emptyLinePlaceholder":115},[52,65099,65100,65102,65105],{"class":54,"line":19589},[52,65101,65053],{"class":58},[52,65103,65104],{"class":58}," .item",[52,65106,18528],{"class":622},[52,65108,65109,65111,65113,65115,65117],{"class":54,"line":19595},[52,65110,57701],{"class":90},[52,65112,54368],{"class":622},[52,65114,3424],{"class":90},[52,65116,3441],{"class":160},[52,65118,4272],{"class":622},[52,65120,65121,65123,65125,65127],{"class":54,"line":19618},[52,65122,57939],{"class":90},[52,65124,54368],{"class":622},[52,65126,54408],{"class":90},[52,65128,4272],{"class":622},[52,65130,65131],{"class":54,"line":19632},[52,65132,5149],{"class":622},[52,65134,65135],{"class":54,"line":19652},[52,65136,116],{"emptyLinePlaceholder":115},[52,65138,65139,65141,65143,65146],{"class":54,"line":19658},[52,65140,65053],{"class":58},[52,65142,65104],{"class":58},[52,65144,65145],{"class":58}," .info",[52,65147,18528],{"class":622},[52,65149,65150,65152,65154,65156],{"class":54,"line":19669},[52,65151,64767],{"class":90},[52,65153,54368],{"class":622},[52,65155,3332],{"class":90},[52,65157,4272],{"class":622},[52,65159,65160,65163,65165,65167,65169,65172,65175],{"class":54,"line":19692},[52,65161,65162],{"class":90},"      border-bottom",[52,65164,54368],{"class":622},[52,65166,3332],{"class":90},[52,65168,54423],{"class":160},[52,65170,65171],{"class":90}," dashed",[52,65173,65174],{"class":90}," #e4e4e4",[52,65176,4272],{"class":622},[52,65178,65179,65182,65184,65186,65188],{"class":54,"line":19714},[52,65180,65181],{"class":90},"      padding-bottom",[52,65183,54368],{"class":622},[52,65185,3559],{"class":90},[52,65187,54423],{"class":160},[52,65189,4272],{"class":622},[52,65191,65192],{"class":54,"line":19719},[52,65193,5149],{"class":622},[52,65195,65196],{"class":54,"line":19725},[52,65197,116],{"emptyLinePlaceholder":115},[52,65199,65200,65202,65204,65206],{"class":54,"line":19739},[52,65201,65053],{"class":58},[52,65203,65104],{"class":58},[52,65205,9781],{"class":54231},[52,65207,18528],{"class":622},[52,65209,65210,65212,65214,65216],{"class":54,"line":19752},[52,65211,57636],{"class":90},[52,65213,54368],{"class":622},[52,65215,3306],{"class":90},[52,65217,4272],{"class":622},[52,65219,65220],{"class":54,"line":19757},[52,65221,5149],{"class":622},[52,65223,65224],{"class":54,"line":19771},[52,65225,116],{"emptyLinePlaceholder":115},[52,65227,65228,65230,65232,65235],{"class":54,"line":19776},[52,65229,65053],{"class":58},[52,65231,65104],{"class":58},[52,65233,65234],{"class":58}," .name",[52,65236,18528],{"class":622},[52,65238,65239,65241,65243,65246],{"class":54,"line":19782},[52,65240,60346],{"class":90},[52,65242,54368],{"class":622},[52,65244,65245],{"class":90},"#FB7299",[52,65247,4272],{"class":622},[52,65249,65250,65252,65254,65256,65258],{"class":54,"line":19787},[52,65251,57852],{"class":90},[52,65253,54368],{"class":622},[52,65255,3661],{"class":90},[52,65257,54423],{"class":160},[52,65259,4272],{"class":622},[52,65261,65262,65265,65267,65270],{"class":54,"line":19801},[52,65263,65264],{"class":90},"      font-weight",[52,65266,54368],{"class":622},[52,65268,65269],{"class":90},"bold",[52,65271,4272],{"class":622},[52,65273,65274],{"class":54,"line":19806},[52,65275,5149],{"class":622},[52,65277,65278],{"class":54,"line":19811},[52,65279,116],{"emptyLinePlaceholder":115},[52,65281,65282,65284,65286,65289],{"class":54,"line":19825},[52,65283,65053],{"class":58},[52,65285,65104],{"class":58},[52,65287,65288],{"class":58}," .text",[52,65290,18528],{"class":622},[52,65292,65293,65295,65297,65300],{"class":54,"line":19837},[52,65294,60346],{"class":90},[52,65296,54368],{"class":622},[52,65298,65299],{"class":90},"#333",[52,65301,4272],{"class":622},[52,65303,65304,65306,65308,65310,65312,65314],{"class":54,"line":19842},[52,65305,57625],{"class":90},[52,65307,54368],{"class":622},[52,65309,3559],{"class":90},[52,65311,54423],{"class":160},[52,65313,7052],{"class":90},[52,65315,4272],{"class":622},[52,65317,65318],{"class":54,"line":19855},[52,65319,5149],{"class":622},[52,65321,65322],{"class":54,"line":19860},[52,65323,116],{"emptyLinePlaceholder":115},[52,65325,65326,65328,65330,65333],{"class":54,"line":19865},[52,65327,65053],{"class":58},[52,65329,65104],{"class":58},[52,65331,65332],{"class":58}," .time",[52,65334,18528],{"class":622},[52,65336,65337,65339,65341,65343],{"class":54,"line":19870},[52,65338,60346],{"class":90},[52,65340,54368],{"class":622},[52,65342,65000],{"class":90},[52,65344,4272],{"class":622},[52,65346,65347,65349,65351,65353,65355],{"class":54,"line":19883},[52,65348,57852],{"class":90},[52,65350,54368],{"class":622},[52,65352,3610],{"class":90},[52,65354,54423],{"class":160},[52,65356,4272],{"class":622},[52,65358,65359],{"class":54,"line":19888},[52,65360,5149],{"class":622},[52,65362,65363,65365,65367],{"class":54,"line":35565},[52,65364,55347],{"class":622},[52,65366,3015],{"class":54231},[52,65368,54238],{"class":622},[52,65370,65371,65373,65375],{"class":54,"line":35571},[52,65372,54716],{"class":622},[52,65374,54265],{"class":54231},[52,65376,54238],{"class":622},[52,65378,65379],{"class":54,"line":35577},[52,65380,116],{"emptyLinePlaceholder":115},[52,65382,65383,65385,65387],{"class":54,"line":35583},[52,65384,4022],{"class":622},[52,65386,54731],{"class":54231},[52,65388,54238],{"class":622},[52,65390,65391,65393,65395,65397,65399,65402],{"class":54,"line":35589},[52,65392,55075],{"class":622},[52,65394,54542],{"class":54231},[52,65396,56416],{"class":58},[52,65398,2099],{"class":622},[52,65400,65401],{"class":62},"\"wrapper\"",[52,65403,54238],{"class":622},[52,65405,65406,65408,65410,65412,65414,65417,65419,65421],{"class":54,"line":35600},[52,65407,54272],{"class":622},[52,65409,3554],{"class":54231},[52,65411,56416],{"class":58},[52,65413,2099],{"class":622},[52,65415,65416],{"class":62},"\"avatar\"",[52,65418,58244],{"class":622},[52,65420,3554],{"class":54231},[52,65422,54238],{"class":622},[52,65424,65425,65427,65429,65431,65433,65436,65438,65440,65443,65445,65447,65449,65452,65454,65457,65459,65461],{"class":54,"line":35606},[52,65426,54272],{"class":622},[52,65428,57218],{"class":54231},[52,65430,17915],{"class":58},[52,65432,2099],{"class":622},[52,65434,65435],{"class":62},"\"tx\"",[52,65437,63950],{"class":58},[52,65439,2099],{"class":622},[52,65441,65442],{"class":62},"\"发一条友善的评论\"",[52,65444,57241],{"class":58},[52,65446,2099],{"class":622},[52,65448,6660],{"class":62},[52,65450,65451],{"class":58}," maxlength",[52,65453,2099],{"class":622},[52,65455,65456],{"class":62},"\"200\"",[52,65458,58244],{"class":622},[52,65460,57218],{"class":54231},[52,65462,54238],{"class":622},[52,65464,65465,65467,65469,65472,65474],{"class":54,"line":35626},[52,65466,54272],{"class":622},[52,65468,56817],{"class":54231},[52,65470,65471],{"class":622},">发布\u003C\u002F",[52,65473,56817],{"class":54231},[52,65475,54238],{"class":622},[52,65477,65478,65480,65482],{"class":54,"line":35632},[52,65479,55347],{"class":622},[52,65481,54542],{"class":54231},[52,65483,54238],{"class":622},[52,65485,65486,65488,65490,65492,65494,65496],{"class":54,"line":35643},[52,65487,55075],{"class":622},[52,65489,54542],{"class":54231},[52,65491,56416],{"class":58},[52,65493,2099],{"class":622},[52,65495,65401],{"class":62},[52,65497,54238],{"class":622},[52,65499,65500,65502,65504,65506,65508,65511,65514,65516],{"class":54,"line":35649},[52,65501,54272],{"class":622},[52,65503,52],{"class":54231},[52,65505,56416],{"class":58},[52,65507,2099],{"class":622},[52,65509,65510],{"class":62},"\"total\"",[52,65512,65513],{"class":622},">0\u002F200字\u003C\u002F",[52,65515,52],{"class":54231},[52,65517,54238],{"class":622},[52,65519,65520,65522,65524],{"class":54,"line":35655},[52,65521,55347],{"class":622},[52,65523,54542],{"class":54231},[52,65525,54238],{"class":622},[52,65527,65528,65530,65532,65534,65536,65539],{"class":54,"line":35661},[52,65529,55075],{"class":622},[52,65531,54542],{"class":54231},[52,65533,56416],{"class":58},[52,65535,2099],{"class":622},[52,65537,65538],{"class":62},"\"list\"",[52,65540,54238],{"class":622},[52,65542,65543,65545,65547,65549,65551,65554,65557,65559,65562],{"class":54,"line":35667},[52,65544,54272],{"class":622},[52,65546,54542],{"class":54231},[52,65548,56416],{"class":58},[52,65550,2099],{"class":622},[52,65552,65553],{"class":62},"\"item\"",[52,65555,65556],{"class":58}," style",[52,65558,2099],{"class":622},[52,65560,65561],{"class":62},"\"display: none;\"",[52,65563,54238],{"class":622},[52,65565,65566,65568,65570,65572,65574,65576,65578,65580],{"class":54,"line":35673},[52,65567,58164],{"class":622},[52,65569,3554],{"class":54231},[52,65571,56416],{"class":58},[52,65573,2099],{"class":622},[52,65575,65416],{"class":62},[52,65577,58244],{"class":622},[52,65579,3554],{"class":54231},[52,65581,54238],{"class":622},[52,65583,65584,65586,65588,65590,65592,65595],{"class":54,"line":35679},[52,65585,58164],{"class":622},[52,65587,54542],{"class":54231},[52,65589,56416],{"class":58},[52,65591,2099],{"class":622},[52,65593,65594],{"class":62},"\"info\"",[52,65596,54238],{"class":622},[52,65598,65599,65601,65603,65605,65607,65610,65613,65615],{"class":54,"line":35685},[52,65600,58232],{"class":622},[52,65602,274],{"class":54231},[52,65604,56416],{"class":58},[52,65606,2099],{"class":622},[52,65608,65609],{"class":62},"\"name\"",[52,65611,65612],{"class":622},">清风徐来\u003C\u002F",[52,65614,274],{"class":54231},[52,65616,54238],{"class":622},[52,65618,65619,65621,65623,65625,65627,65630,65633,65635],{"class":54,"line":35705},[52,65620,58232],{"class":622},[52,65622,274],{"class":54231},[52,65624,56416],{"class":58},[52,65626,2099],{"class":622},[52,65628,65629],{"class":62},"\"text\"",[52,65631,65632],{"class":622},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[52,65634,274],{"class":54231},[52,65636,54238],{"class":622},[52,65638,65639,65641,65643,65645,65647,65650,65653,65655],{"class":54,"line":35711},[52,65640,58232],{"class":622},[52,65642,274],{"class":54231},[52,65644,56416],{"class":58},[52,65646,2099],{"class":622},[52,65648,65649],{"class":62},"\"time\"",[52,65651,65652],{"class":622},">2022-10-10 20:29:21\u003C\u002F",[52,65654,274],{"class":54231},[52,65656,54238],{"class":622},[52,65658,65659,65661,65663],{"class":54,"line":35727},[52,65660,58337],{"class":622},[52,65662,54542],{"class":54231},[52,65664,54238],{"class":622},[52,65666,65667,65669,65671],{"class":54,"line":35733},[52,65668,54707],{"class":622},[52,65670,54542],{"class":54231},[52,65672,54238],{"class":622},[52,65674,65675,65677,65679],{"class":54,"line":35747},[52,65676,55347],{"class":622},[52,65678,54542],{"class":54231},[52,65680,54238],{"class":622},[52,65682,65683,65685,65687],{"class":54,"line":35753},[52,65684,55075],{"class":622},[52,65686,54744],{"class":54231},[52,65688,54238],{"class":622},[52,65690,65691,65693,65696,65698,65700,65702,65704,65707],{"class":54,"line":35768},[52,65692,14177],{"class":160},[52,65694,65695],{"class":90}," tx",[52,65697,16520],{"class":160},[52,65699,57326],{"class":622},[52,65701,57329],{"class":58},[52,65703,3121],{"class":622},[52,65705,65706],{"class":62},"'#tx'",[52,65708,170],{"class":622},[52,65710,65711,65713,65716,65718,65720,65722,65724,65727],{"class":54,"line":35774},[52,65712,14177],{"class":160},[52,65714,65715],{"class":90}," total",[52,65717,16520],{"class":160},[52,65719,57326],{"class":622},[52,65721,57329],{"class":58},[52,65723,3121],{"class":622},[52,65725,65726],{"class":62},"'.total'",[52,65728,170],{"class":622},[52,65730,65731],{"class":54,"line":35783},[52,65732,65733],{"class":332},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[52,65735,65736,65739,65741,65743,65745,65747,65749],{"class":54,"line":35789},[52,65737,65738],{"class":622},"    tx.",[52,65740,60743],{"class":58},[52,65742,3121],{"class":622},[52,65744,64257],{"class":62},[52,65746,15391],{"class":622},[52,65748,57379],{"class":160},[52,65750,57382],{"class":622},[52,65752,65753,65756,65758],{"class":54,"line":35798},[52,65754,65755],{"class":622},"      total.style.opacity ",[52,65757,2099],{"class":160},[52,65759,58629],{"class":90},[52,65761,65762],{"class":54,"line":35804},[52,65763,36393],{"class":622},[52,65765,65766],{"class":54,"line":35810},[52,65767,65768],{"class":332},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[52,65770,65771,65773,65775,65777,65779,65781,65783],{"class":54,"line":35819},[52,65772,65738],{"class":622},[52,65774,60743],{"class":58},[52,65776,3121],{"class":622},[52,65778,64318],{"class":62},[52,65780,15391],{"class":622},[52,65782,57379],{"class":160},[52,65784,57382],{"class":622},[52,65786,65787,65789,65791],{"class":54,"line":35825},[52,65788,65755],{"class":622},[52,65790,2099],{"class":160},[52,65792,50265],{"class":90},[52,65794,65795],{"class":54,"line":35836},[52,65796,36393],{"class":622},[52,65798,65799],{"class":54,"line":35842},[52,65800,65801],{"class":332},"    \u002F\u002F 3. 检测用户输入\n",[52,65803,65804,65806,65808,65810,65813,65815,65817],{"class":54,"line":35861},[52,65805,65738],{"class":622},[52,65807,60743],{"class":58},[52,65809,3121],{"class":622},[52,65811,65812],{"class":62},"'input'",[52,65814,15391],{"class":622},[52,65816,57379],{"class":160},[52,65818,57382],{"class":622},[52,65820,65821],{"class":54,"line":35867},[52,65822,65823],{"class":332},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[52,65825,65826,65829,65831,65834,65837,65839,65842,65844,65846],{"class":54,"line":35878},[52,65827,65828],{"class":622},"      total.innerHTML ",[52,65830,2099],{"class":160},[52,65832,65833],{"class":62}," `${",[52,65835,65836],{"class":622},"tx",[52,65838,3670],{"class":62},[52,65840,65841],{"class":622},"value",[52,65843,3670],{"class":62},[52,65845,54899],{"class":90},[52,65847,65848],{"class":62},"}\u002F200字`\n",[52,65850,65851],{"class":54,"line":35884},[52,65852,36393],{"class":622},[52,65854,65855],{"class":54,"line":35904},[52,65856,116],{"emptyLinePlaceholder":115},[52,65858,65859],{"class":54,"line":35920},[52,65860,65861],{"class":332},"    \u002F\u002F const str = 'andy'\n",[52,65863,65864],{"class":54,"line":35926},[52,65865,65866],{"class":332},"    \u002F\u002F console.log(str.length)\n",[52,65868,65869,65871,65873],{"class":54,"line":35940},[52,65870,55347],{"class":622},[52,65872,54744],{"class":54231},[52,65874,54238],{"class":622},[52,65876,65877,65879,65881],{"class":54,"line":35946},[52,65878,54716],{"class":622},[52,65880,54731],{"class":54231},[52,65882,54238],{"class":622},[52,65884,65885],{"class":54,"line":35952},[52,65886,116],{"emptyLinePlaceholder":115},[52,65888,65889,65891,65893],{"class":54,"line":35963},[52,65890,54716],{"class":622},[52,65892,53566],{"class":54231},[52,65894,54238],{"class":622},[1486,65896,65898],{"id":65897},"_3254-change事件","3.2.5.4 change事件",[274,65900,65901],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[274,65903,65904],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[274,65906,65907],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[19,65909,65911],{"className":53564,"code":65910,"language":53566,"meta":28,"style":28},"\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",[26,65912,65913,65923,65937,65941,65949,65963,65983,65995,66003,66007,66015,66029,66037,66055,66073,66085,66089,66097,66105,66109],{"__ignoreMap":28},[52,65914,65915,65917,65919,65921],{"class":54,"line":55},[52,65916,54228],{"class":622},[52,65918,54232],{"class":54231},[52,65920,54235],{"class":58},[52,65922,54238],{"class":622},[52,65924,65925,65927,65929,65931,65933,65935],{"class":54,"line":69},[52,65926,4022],{"class":622},[52,65928,53566],{"class":54231},[52,65930,54247],{"class":58},[52,65932,2099],{"class":622},[52,65934,54252],{"class":62},[52,65936,54238],{"class":622},[52,65938,65939],{"class":54,"line":82},[52,65940,116],{"emptyLinePlaceholder":115},[52,65942,65943,65945,65947],{"class":54,"line":97},[52,65944,4022],{"class":622},[52,65946,54265],{"class":54231},[52,65948,54238],{"class":622},[52,65950,65951,65953,65955,65957,65959,65961],{"class":54,"line":112},[52,65952,55075],{"class":622},[52,65954,54275],{"class":54231},[52,65956,54278],{"class":58},[52,65958,2099],{"class":622},[52,65960,54283],{"class":62},[52,65962,54238],{"class":622},[52,65964,65965,65967,65969,65971,65973,65975,65977,65979,65981],{"class":54,"line":119},[52,65966,55075],{"class":622},[52,65968,54275],{"class":54231},[52,65970,17876],{"class":58},[52,65972,2099],{"class":622},[52,65974,54322],{"class":62},[52,65976,54302],{"class":58},[52,65978,2099],{"class":622},[52,65980,54329],{"class":62},[52,65982,54238],{"class":622},[52,65984,65985,65987,65989,65991,65993],{"class":54,"line":130},[52,65986,55075],{"class":622},[52,65988,54338],{"class":54231},[52,65990,54341],{"class":622},[52,65992,54338],{"class":54231},[52,65994,54238],{"class":622},[52,65996,65997,65999,66001],{"class":54,"line":136},[52,65998,54716],{"class":622},[52,66000,54265],{"class":54231},[52,66002,54238],{"class":622},[52,66004,66005],{"class":54,"line":141},[52,66006,116],{"emptyLinePlaceholder":115},[52,66008,66009,66011,66013],{"class":54,"line":146},[52,66010,4022],{"class":622},[52,66012,54731],{"class":54231},[52,66014,54238],{"class":622},[52,66016,66017,66019,66021,66023,66025,66027],{"class":54,"line":152},[52,66018,55075],{"class":622},[52,66020,56751],{"class":54231},[52,66022,56754],{"class":58},[52,66024,2099],{"class":622},[52,66026,65629],{"class":62},[52,66028,54238],{"class":622},[52,66030,66031,66033,66035],{"class":54,"line":157},[52,66032,55075],{"class":622},[52,66034,54744],{"class":54231},[52,66036,54238],{"class":622},[52,66038,66039,66041,66043,66045,66047,66049,66051,66053],{"class":54,"line":173},[52,66040,14177],{"class":160},[52,66042,63535],{"class":90},[52,66044,16520],{"class":160},[52,66046,57326],{"class":622},[52,66048,57329],{"class":58},[52,66050,3121],{"class":622},[52,66052,65812],{"class":62},[52,66054,170],{"class":622},[52,66056,66057,66060,66062,66064,66067,66069,66071],{"class":54,"line":178},[52,66058,66059],{"class":622},"    input.",[52,66061,60743],{"class":58},[52,66063,3121],{"class":622},[52,66065,66066],{"class":62},"'change'",[52,66068,15391],{"class":622},[52,66070,57379],{"class":160},[52,66072,57382],{"class":622},[52,66074,66075,66077,66079,66081,66083],{"class":54,"line":184},[52,66076,61174],{"class":622},[52,66078,61177],{"class":58},[52,66080,3121],{"class":622},[52,66082,3705],{"class":90},[52,66084,170],{"class":622},[52,66086,66087],{"class":54,"line":189},[52,66088,36393],{"class":622},[52,66090,66091,66093,66095],{"class":54,"line":201},[52,66092,55347],{"class":622},[52,66094,54744],{"class":54231},[52,66096,54238],{"class":622},[52,66098,66099,66101,66103],{"class":54,"line":206},[52,66100,54716],{"class":622},[52,66102,54731],{"class":54231},[52,66104,54238],{"class":622},[52,66106,66107],{"class":54,"line":224},[52,66108,116],{"emptyLinePlaceholder":115},[52,66110,66111,66113,66115],{"class":54,"line":229},[52,66112,54716],{"class":622},[52,66114,53566],{"class":54231},[52,66116,54238],{"class":622},[274,66118,66119],{},"总结：内容发生改变才回去触发",[30,66121,66123],{"id":66122},"_326-事件对象","3.2.6 事件对象",[1486,66125,66127],{"id":66126},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[274,66129,66130],{},[280,66131],{"alt":28,"src":66132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[274,66134,66135],{},[280,66136],{"alt":28,"src":66137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[274,66139,66140],{},"点击一次，就输出了事件对象，它是个对象",[274,66142,66143],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[274,66145,66146],{},[280,66147],{"alt":28,"src":66148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[1486,66150,66152],{"id":66151},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[274,66154,66155],{},[280,66156],{"alt":28,"src":66157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[274,66159,66160],{},"实现按特殊字符才是实现打印输出效果：",[19,66162,66164],{"className":55997,"code":66163,"language":55999,"meta":28,"style":28},"\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",[26,66165,66166,66174,66179,66193,66201,66206,66211,66216,66221,66226,66231,66236,66241,66246,66250,66254,66262],{"__ignoreMap":28},[52,66167,66168,66170,66172],{"class":54,"line":55},[52,66169,4022],{"class":622},[52,66171,54731],{"class":54231},[52,66173,54238],{"class":622},[52,66175,66176],{"class":54,"line":69},[52,66177,66178],{"class":332},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[52,66180,66181,66183,66185,66187,66189,66191],{"class":54,"line":82},[52,66182,55075],{"class":622},[52,66184,56751],{"class":54231},[52,66186,56754],{"class":58},[52,66188,2099],{"class":622},[52,66190,65629],{"class":62},[52,66192,54238],{"class":622},[52,66194,66195,66197,66199],{"class":54,"line":97},[52,66196,55075],{"class":622},[52,66198,54744],{"class":54231},[52,66200,54238],{"class":622},[52,66202,66203],{"class":54,"line":112},[52,66204,66205],{"class":622},"    \u002F\u002F const btn = document.querySelector('button')\n",[52,66207,66208],{"class":54,"line":119},[52,66209,66210],{"class":622},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[52,66212,66213],{"class":54,"line":130},[52,66214,66215],{"class":622},"    \u002F\u002F   console.log(e);\n",[52,66217,66218],{"class":54,"line":136},[52,66219,66220],{"class":622},"    \u002F\u002F })\n",[52,66222,66223],{"class":54,"line":141},[52,66224,66225],{"class":622},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[52,66227,66228],{"class":54,"line":146},[52,66229,66230],{"class":622},"    const input = document.querySelector('input')\n",[52,66232,66233],{"class":54,"line":152},[52,66234,66235],{"class":622},"    input.addEventListener('keyup', function (e) {\n",[52,66237,66238],{"class":54,"line":157},[52,66239,66240],{"class":622},"      if (e.key === 'Enter') {\n",[52,66242,66243],{"class":54,"line":173},[52,66244,66245],{"class":622},"        console.log('我按下了回车键')\n",[52,66247,66248],{"class":54,"line":178},[52,66249,55328],{"class":622},[52,66251,66252],{"class":54,"line":184},[52,66253,36393],{"class":622},[52,66255,66256,66258,66260],{"class":54,"line":189},[52,66257,55347],{"class":622},[52,66259,54744],{"class":54231},[52,66261,54238],{"class":622},[52,66263,66264,66266,66268],{"class":54,"line":201},[52,66265,54716],{"class":622},[52,66267,54731],{"class":54231},[52,66269,54238],{"class":622},[1486,66271,66273],{"id":66272},"_3263-trim方法","3.2.6.3 trim方法",[274,66275,66276],{},[280,66277],{"alt":28,"src":66278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[274,66280,66281],{},[280,66282],{"alt":28,"src":66283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[274,66285,66286],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[274,66288,66289],{},"str.trim()",[30,66291,66293],{"id":66292},"_327-环境对象","3.2.7 环境对象",[274,66295,66296],{},[280,66297],{"alt":28,"src":66298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[274,66300,66301],{},[280,66302],{"alt":28,"src":66303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[274,66305,66306],{},[280,66307],{"alt":28,"src":66308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[274,66310,66311],{},"实际函数调用是window.fn()",[274,66313,66314],{},"普通函数里面this指向的是window",[4118,66316,66317,66320,66323],{},[1073,66318,66319],{},"在普通函数下，this指向的是window",[1073,66321,66322],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[1073,66324,66325],{},"箭头函数没有this",[274,66327,66328],{},"粗略记法就是：谁调用，this就指向谁",[274,66330,66331],{},[280,66332],{"alt":28,"src":66333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[274,66335,66336],{},[280,66337],{"alt":28,"src":66338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[274,66340,66341],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[274,66343,66344],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[19,66346,66348],{"className":55997,"code":66347,"language":55999,"meta":28,"style":28},"\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",[26,66349,66350,66358,66370,66378,66383,66388,66393,66398,66402,66410],{"__ignoreMap":28},[52,66351,66352,66354,66356],{"class":54,"line":55},[52,66353,4022],{"class":622},[52,66355,54731],{"class":54231},[52,66357,54238],{"class":622},[52,66359,66360,66362,66364,66366,66368],{"class":54,"line":69},[52,66361,55075],{"class":622},[52,66363,56817],{"class":54231},[52,66365,56823],{"class":622},[52,66367,56817],{"class":54231},[52,66369,54238],{"class":622},[52,66371,66372,66374,66376],{"class":54,"line":82},[52,66373,55075],{"class":622},[52,66375,54744],{"class":54231},[52,66377,54238],{"class":622},[52,66379,66380],{"class":54,"line":97},[52,66381,66382],{"class":622},"    const button = document.querySelector('button')\n",[52,66384,66385],{"class":54,"line":112},[52,66386,66387],{"class":622},"    button.addEventListener('click', function () {\n",[52,66389,66390],{"class":54,"line":119},[52,66391,66392],{"class":622},"      \u002F\u002F console.log(this);\n",[52,66394,66395],{"class":54,"line":130},[52,66396,66397],{"class":622},"      this.style.color = 'pink'\n",[52,66399,66400],{"class":54,"line":136},[52,66401,36393],{"class":622},[52,66403,66404,66406,66408],{"class":54,"line":141},[52,66405,55347],{"class":622},[52,66407,54744],{"class":54231},[52,66409,54238],{"class":622},[52,66411,66412,66414,66416],{"class":54,"line":146},[52,66413,54716],{"class":622},[52,66415,54731],{"class":54231},[52,66417,54238],{"class":622},[30,66419,66421],{"id":66420},"_328-回调函数","3.2.8 回调函数",[274,66423,66424],{},[280,66425],{"alt":28,"src":66426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[274,66428,66429],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[274,66431,14288],{},[4118,66433,66434,66437,66440],{},[1073,66435,66436],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[1073,66438,66439],{},"回调函数本质还是函数，只不过把它当成参数使用",[1073,66441,66442],{},"使用匿名函数做为回调函数比较常见",[30,66444,66446],{"id":66445},"_329-tab栏切换","3.2.9 tab栏切换",[274,66448,66449],{},[280,66450],{"alt":28,"src":66451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[19,66453,66455],{"className":53564,"code":66454,"language":53566,"meta":28,"style":28},"\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",[26,66456,66457,66467,66481,66485,66493,66507,66527,66547,66560,66568,66574,66584,66594,66598,66602,66609,66622,66635,66647,66663,66667,66671,66678,66690,66702,66714,66724,66734,66738,66742,66751,66763,66774,66786,66790,66794,66802,66812,66822,66832,66836,66840,66850,66864,66876,66880,66884,66896,66907,66924,66934,66938,66942,66957,66968,66978,66982,66986,66993,67008,67012,67016,67024,67034,67038,67042,67051,67061,67065,67073,67081,67085,67093,67108,67123,67136,67144,67178,67205,67232,67259,67286,67294,67302,67317,67354,67389,67424,67459,67494,67502,67510,67518,67523,67528,67547,67552,67581,67586,67591,67609,67614,67619,67624,67646,67651,67667,67671,67676,67681,67702,67707,67736,67740,67745,67749,67757,67765,67769],{"__ignoreMap":28},[52,66458,66459,66461,66463,66465],{"class":54,"line":55},[52,66460,54228],{"class":622},[52,66462,54232],{"class":54231},[52,66464,54235],{"class":58},[52,66466,54238],{"class":622},[52,66468,66469,66471,66473,66475,66477,66479],{"class":54,"line":69},[52,66470,4022],{"class":622},[52,66472,53566],{"class":54231},[52,66474,54247],{"class":58},[52,66476,2099],{"class":622},[52,66478,54252],{"class":62},[52,66480,54238],{"class":622},[52,66482,66483],{"class":54,"line":82},[52,66484,116],{"emptyLinePlaceholder":115},[52,66486,66487,66489,66491],{"class":54,"line":97},[52,66488,4022],{"class":622},[52,66490,54265],{"class":54231},[52,66492,54238],{"class":622},[52,66494,66495,66497,66499,66501,66503,66505],{"class":54,"line":112},[52,66496,55075],{"class":622},[52,66498,54275],{"class":54231},[52,66500,54278],{"class":58},[52,66502,2099],{"class":622},[52,66504,54283],{"class":62},[52,66506,62057],{"class":622},[52,66508,66509,66511,66513,66515,66517,66519,66521,66523,66525],{"class":54,"line":119},[52,66510,55075],{"class":622},[52,66512,54275],{"class":54231},[52,66514,54294],{"class":58},[52,66516,2099],{"class":622},[52,66518,54299],{"class":62},[52,66520,54302],{"class":58},[52,66522,2099],{"class":622},[52,66524,54307],{"class":62},[52,66526,62057],{"class":622},[52,66528,66529,66531,66533,66535,66537,66539,66541,66543,66545],{"class":54,"line":130},[52,66530,55075],{"class":622},[52,66532,54275],{"class":54231},[52,66534,17876],{"class":58},[52,66536,2099],{"class":622},[52,66538,54322],{"class":62},[52,66540,54302],{"class":58},[52,66542,2099],{"class":622},[52,66544,54329],{"class":62},[52,66546,62057],{"class":622},[52,66548,66549,66551,66553,66556,66558],{"class":54,"line":136},[52,66550,55075],{"class":622},[52,66552,54338],{"class":54231},[52,66554,66555],{"class":622},">tab栏切换\u003C\u002F",[52,66557,54338],{"class":54231},[52,66559,54238],{"class":622},[52,66561,66562,66564,66566],{"class":54,"line":141},[52,66563,55075],{"class":622},[52,66565,3015],{"class":54231},[52,66567,54238],{"class":622},[52,66569,66570,66572],{"class":54,"line":146},[52,66571,9359],{"class":54231},[52,66573,18528],{"class":622},[52,66575,66576,66578,66580,66582],{"class":54,"line":152},[52,66577,57636],{"class":90},[52,66579,54368],{"class":622},[52,66581,3306],{"class":90},[52,66583,4272],{"class":622},[52,66585,66586,66588,66590,66592],{"class":54,"line":157},[52,66587,57625],{"class":90},[52,66589,54368],{"class":622},[52,66591,3306],{"class":90},[52,66593,4272],{"class":622},[52,66595,66596],{"class":54,"line":173},[52,66597,5149],{"class":622},[52,66599,66600],{"class":54,"line":178},[52,66601,116],{"emptyLinePlaceholder":115},[52,66603,66604,66607],{"class":54,"line":184},[52,66605,66606],{"class":58},"    .tab",[52,66608,18528],{"class":622},[52,66610,66611,66613,66615,66618,66620],{"class":54,"line":189},[52,66612,57701],{"class":90},[52,66614,54368],{"class":622},[52,66616,66617],{"class":90},"590",[52,66619,54423],{"class":160},[52,66621,4272],{"class":622},[52,66623,66624,66626,66628,66631,66633],{"class":54,"line":201},[52,66625,57715],{"class":90},[52,66627,54368],{"class":622},[52,66629,66630],{"class":90},"340",[52,66632,54423],{"class":160},[52,66634,4272],{"class":622},[52,66636,66637,66639,66641,66643,66645],{"class":54,"line":206},[52,66638,57636],{"class":90},[52,66640,54368],{"class":622},[52,66642,3812],{"class":90},[52,66644,54423],{"class":160},[52,66646,4272],{"class":622},[52,66648,66649,66651,66653,66655,66657,66659,66661],{"class":54,"line":224},[52,66650,64907],{"class":90},[52,66652,54368],{"class":622},[52,66654,3332],{"class":90},[52,66656,54423],{"class":160},[52,66658,54452],{"class":90},[52,66660,65174],{"class":90},[52,66662,4272],{"class":622},[52,66664,66665],{"class":54,"line":229},[52,66666,5149],{"class":622},[52,66668,66669],{"class":54,"line":241},[52,66670,116],{"emptyLinePlaceholder":115},[52,66672,66673,66676],{"class":54,"line":246},[52,66674,66675],{"class":58},"    .tab-nav",[52,66677,18528],{"class":622},[52,66679,66680,66682,66684,66686,66688],{"class":54,"line":252},[52,66681,57701],{"class":90},[52,66683,54368],{"class":622},[52,66685,3424],{"class":90},[52,66687,3441],{"class":160},[52,66689,4272],{"class":622},[52,66691,66692,66694,66696,66698,66700],{"class":54,"line":257},[52,66693,57715],{"class":90},[52,66695,54368],{"class":622},[52,66697,4019],{"class":90},[52,66699,54423],{"class":160},[52,66701,4272],{"class":622},[52,66703,66704,66706,66708,66710,66712],{"class":54,"line":266},[52,66705,60289],{"class":90},[52,66707,54368],{"class":622},[52,66709,4019],{"class":90},[52,66711,54423],{"class":160},[52,66713,4272],{"class":622},[52,66715,66716,66718,66720,66722],{"class":54,"line":4722},[52,66717,57939],{"class":90},[52,66719,54368],{"class":622},[52,66721,54408],{"class":90},[52,66723,4272],{"class":622},[52,66725,66726,66728,66730,66732],{"class":54,"line":4727},[52,66727,57950],{"class":90},[52,66729,54368],{"class":622},[52,66731,54599],{"class":90},[52,66733,4272],{"class":622},[52,66735,66736],{"class":54,"line":4741},[52,66737,5149],{"class":622},[52,66739,66740],{"class":54,"line":4746},[52,66741,116],{"emptyLinePlaceholder":115},[52,66743,66744,66746,66749],{"class":54,"line":5538},[52,66745,66675],{"class":58},[52,66747,66748],{"class":54231}," h3",[52,66750,18528],{"class":622},[52,66752,66753,66755,66757,66759,66761],{"class":54,"line":5552},[52,66754,57852],{"class":90},[52,66756,54368],{"class":622},[52,66758,3912],{"class":90},[52,66760,54423],{"class":160},[52,66762,4272],{"class":622},[52,66764,66765,66767,66769,66772],{"class":54,"line":5560},[52,66766,65264],{"class":90},[52,66768,54368],{"class":622},[52,66770,66771],{"class":90},"normal",[52,66773,4272],{"class":622},[52,66775,66776,66778,66780,66782,66784],{"class":54,"line":5565},[52,66777,64930],{"class":90},[52,66779,54368],{"class":622},[52,66781,3812],{"class":90},[52,66783,54423],{"class":160},[52,66785,4272],{"class":622},[52,66787,66788],{"class":54,"line":5571},[52,66789,5149],{"class":622},[52,66791,66792],{"class":54,"line":5577},[52,66793,116],{"emptyLinePlaceholder":115},[52,66795,66796,66798,66800],{"class":54,"line":5582},[52,66797,66675],{"class":58},[52,66799,64222],{"class":54231},[52,66801,18528],{"class":622},[52,66803,66804,66806,66808,66810],{"class":54,"line":10904},[52,66805,57662],{"class":90},[52,66807,54368],{"class":622},[52,66809,57667],{"class":90},[52,66811,4272],{"class":622},[52,66813,66814,66816,66818,66820],{"class":54,"line":10928},[52,66815,57939],{"class":90},[52,66817,54368],{"class":622},[52,66819,54408],{"class":90},[52,66821,4272],{"class":622},[52,66823,66824,66826,66828,66830],{"class":54,"line":10933},[52,66825,57950],{"class":90},[52,66827,54368],{"class":622},[52,66829,54511],{"class":90},[52,66831,4272],{"class":622},[52,66833,66834],{"class":54,"line":10939},[52,66835,5149],{"class":622},[52,66837,66838],{"class":54,"line":10966},[52,66839,116],{"emptyLinePlaceholder":115},[52,66841,66842,66844,66846,66848],{"class":54,"line":10971},[52,66843,66675],{"class":58},[52,66845,64222],{"class":54231},[52,66847,58005],{"class":54231},[52,66849,18528],{"class":622},[52,66851,66852,66854,66856,66858,66860,66862],{"class":54,"line":10977},[52,66853,57636],{"class":90},[52,66855,54368],{"class":622},[52,66857,3306],{"class":90},[52,66859,11906],{"class":90},[52,66861,54423],{"class":160},[52,66863,4272],{"class":622},[52,66865,66866,66868,66870,66872,66874],{"class":54,"line":10989},[52,66867,57852],{"class":90},[52,66869,54368],{"class":622},[52,66871,3661],{"class":90},[52,66873,54423],{"class":160},[52,66875,4272],{"class":622},[52,66877,66878],{"class":54,"line":11001},[52,66879,5149],{"class":622},[52,66881,66882],{"class":54,"line":11013},[52,66883,116],{"emptyLinePlaceholder":115},[52,66885,66886,66888,66890,66892,66894],{"class":54,"line":12672},[52,66887,66675],{"class":58},[52,66889,64222],{"class":54231},[52,66891,58005],{"class":54231},[52,66893,4377],{"class":54231},[52,66895,18528],{"class":622},[52,66897,66898,66901,66903,66905],{"class":54,"line":12697},[52,66899,66900],{"class":90},"      text-decoration",[52,66902,54368],{"class":622},[52,66904,57667],{"class":90},[52,66906,4272],{"class":622},[52,66908,66909,66911,66913,66915,66917,66919,66922],{"class":54,"line":12720},[52,66910,65162],{"class":90},[52,66912,54368],{"class":622},[52,66914,3194],{"class":90},[52,66916,54423],{"class":160},[52,66918,54452],{"class":90},[52,66920,66921],{"class":90}," transparent",[52,66923,4272],{"class":622},[52,66925,66926,66928,66930,66932],{"class":54,"line":12744},[52,66927,60346],{"class":90},[52,66929,54368],{"class":622},[52,66931,65299],{"class":90},[52,66933,4272],{"class":622},[52,66935,66936],{"class":54,"line":12749},[52,66937,5149],{"class":622},[52,66939,66940],{"class":54,"line":12754},[52,66941,116],{"emptyLinePlaceholder":115},[52,66943,66944,66946,66948,66950,66952,66955],{"class":54,"line":12759},[52,66945,66675],{"class":58},[52,66947,64222],{"class":54231},[52,66949,58005],{"class":54231},[52,66951,4377],{"class":54231},[52,66953,66954],{"class":58},".active",[52,66956,18528],{"class":622},[52,66958,66959,66961,66963,66966],{"class":54,"line":12768},[52,66960,64721],{"class":90},[52,66962,54368],{"class":622},[52,66964,66965],{"class":90},"#e1251b",[52,66967,4272],{"class":622},[52,66969,66970,66972,66974,66976],{"class":54,"line":12773},[52,66971,60346],{"class":90},[52,66973,54368],{"class":622},[52,66975,66965],{"class":90},[52,66977,4272],{"class":622},[52,66979,66980],{"class":54,"line":12779},[52,66981,5149],{"class":622},[52,66983,66984],{"class":54,"line":12800},[52,66985,116],{"emptyLinePlaceholder":115},[52,66987,66988,66991],{"class":54,"line":12806},[52,66989,66990],{"class":58},"    .tab-content",[52,66992,18528],{"class":622},[52,66994,66995,66997,66999,67001,67004,67006],{"class":54,"line":12820},[52,66996,57625],{"class":90},[52,66998,54368],{"class":622},[52,67000,3306],{"class":90},[52,67002,67003],{"class":90}," 16",[52,67005,54423],{"class":160},[52,67007,4272],{"class":622},[52,67009,67010],{"class":54,"line":12826},[52,67011,5149],{"class":622},[52,67013,67014],{"class":54,"line":12853},[52,67015,116],{"emptyLinePlaceholder":115},[52,67017,67018,67020,67022],{"class":54,"line":12862},[52,67019,66990],{"class":58},[52,67021,65104],{"class":58},[52,67023,18528],{"class":622},[52,67025,67026,67028,67030,67032],{"class":54,"line":12868},[52,67027,57939],{"class":90},[52,67029,54368],{"class":622},[52,67031,57667],{"class":90},[52,67033,4272],{"class":622},[52,67035,67036],{"class":54,"line":12876},[52,67037,5149],{"class":622},[52,67039,67040],{"class":54,"line":12881},[52,67041,116],{"emptyLinePlaceholder":115},[52,67043,67044,67046,67049],{"class":54,"line":19560},[52,67045,66990],{"class":58},[52,67047,67048],{"class":58}," .item.active",[52,67050,18528],{"class":622},[52,67052,67053,67055,67057,67059],{"class":54,"line":19566},[52,67054,57939],{"class":90},[52,67056,54368],{"class":622},[52,67058,63799],{"class":90},[52,67060,4272],{"class":622},[52,67062,67063],{"class":54,"line":19589},[52,67064,5149],{"class":622},[52,67066,67067,67069,67071],{"class":54,"line":19595},[52,67068,55347],{"class":622},[52,67070,3015],{"class":54231},[52,67072,54238],{"class":622},[52,67074,67075,67077,67079],{"class":54,"line":19618},[52,67076,54716],{"class":622},[52,67078,54265],{"class":54231},[52,67080,54238],{"class":622},[52,67082,67083],{"class":54,"line":19632},[52,67084,116],{"emptyLinePlaceholder":115},[52,67086,67087,67089,67091],{"class":54,"line":19652},[52,67088,4022],{"class":622},[52,67090,54731],{"class":54231},[52,67092,54238],{"class":622},[52,67094,67095,67097,67099,67101,67103,67106],{"class":54,"line":19658},[52,67096,55075],{"class":622},[52,67098,54542],{"class":54231},[52,67100,56416],{"class":58},[52,67102,2099],{"class":622},[52,67104,67105],{"class":62},"\"tab\"",[52,67107,54238],{"class":622},[52,67109,67110,67112,67114,67116,67118,67121],{"class":54,"line":19669},[52,67111,54272],{"class":622},[52,67113,54542],{"class":54231},[52,67115,56416],{"class":58},[52,67117,2099],{"class":622},[52,67119,67120],{"class":62},"\"tab-nav\"",[52,67122,54238],{"class":622},[52,67124,67125,67127,67129,67132,67134],{"class":54,"line":19692},[52,67126,58164],{"class":622},[52,67128,30],{"class":54231},[52,67130,67131],{"class":622},">每日特价\u003C\u002F",[52,67133,30],{"class":54231},[52,67135,54238],{"class":622},[52,67137,67138,67140,67142],{"class":54,"line":19714},[52,67139,58164],{"class":622},[52,67141,4118],{"class":54231},[52,67143,54238],{"class":622},[52,67145,67146,67148,67150,67152,67154,67156,67158,67160,67162,67164,67167,67170,67172,67174,67176],{"class":54,"line":19719},[52,67147,58232],{"class":622},[52,67149,1073],{"class":54231},[52,67151,63982],{"class":622},[52,67153,300],{"class":54231},[52,67155,56416],{"class":58},[52,67157,2099],{"class":622},[52,67159,62636],{"class":62},[52,67161,63987],{"class":58},[52,67163,2099],{"class":622},[52,67165,67166],{"class":62},"\"javascript:;\"",[52,67168,67169],{"class":622},">精选\u003C\u002F",[52,67171,300],{"class":54231},[52,67173,58244],{"class":622},[52,67175,1073],{"class":54231},[52,67177,54238],{"class":622},[52,67179,67180,67182,67184,67186,67188,67190,67192,67194,67197,67199,67201,67203],{"class":54,"line":19725},[52,67181,58232],{"class":622},[52,67183,1073],{"class":54231},[52,67185,63982],{"class":622},[52,67187,300],{"class":54231},[52,67189,63987],{"class":58},[52,67191,2099],{"class":622},[52,67193,67166],{"class":62},[52,67195,67196],{"class":622},">美食\u003C\u002F",[52,67198,300],{"class":54231},[52,67200,58244],{"class":622},[52,67202,1073],{"class":54231},[52,67204,54238],{"class":622},[52,67206,67207,67209,67211,67213,67215,67217,67219,67221,67224,67226,67228,67230],{"class":54,"line":19739},[52,67208,58232],{"class":622},[52,67210,1073],{"class":54231},[52,67212,63982],{"class":622},[52,67214,300],{"class":54231},[52,67216,63987],{"class":58},[52,67218,2099],{"class":622},[52,67220,67166],{"class":62},[52,67222,67223],{"class":622},">百货\u003C\u002F",[52,67225,300],{"class":54231},[52,67227,58244],{"class":622},[52,67229,1073],{"class":54231},[52,67231,54238],{"class":622},[52,67233,67234,67236,67238,67240,67242,67244,67246,67248,67251,67253,67255,67257],{"class":54,"line":19752},[52,67235,58232],{"class":622},[52,67237,1073],{"class":54231},[52,67239,63982],{"class":622},[52,67241,300],{"class":54231},[52,67243,63987],{"class":58},[52,67245,2099],{"class":622},[52,67247,67166],{"class":62},[52,67249,67250],{"class":622},">个护\u003C\u002F",[52,67252,300],{"class":54231},[52,67254,58244],{"class":622},[52,67256,1073],{"class":54231},[52,67258,54238],{"class":622},[52,67260,67261,67263,67265,67267,67269,67271,67273,67275,67278,67280,67282,67284],{"class":54,"line":19757},[52,67262,58232],{"class":622},[52,67264,1073],{"class":54231},[52,67266,63982],{"class":622},[52,67268,300],{"class":54231},[52,67270,63987],{"class":58},[52,67272,2099],{"class":622},[52,67274,67166],{"class":62},[52,67276,67277],{"class":622},">预告\u003C\u002F",[52,67279,300],{"class":54231},[52,67281,58244],{"class":622},[52,67283,1073],{"class":54231},[52,67285,54238],{"class":622},[52,67287,67288,67290,67292],{"class":54,"line":19771},[52,67289,58337],{"class":622},[52,67291,4118],{"class":54231},[52,67293,54238],{"class":622},[52,67295,67296,67298,67300],{"class":54,"line":19776},[52,67297,54707],{"class":622},[52,67299,54542],{"class":54231},[52,67301,54238],{"class":622},[52,67303,67304,67306,67308,67310,67312,67315],{"class":54,"line":19782},[52,67305,54272],{"class":622},[52,67307,54542],{"class":54231},[52,67309,56416],{"class":58},[52,67311,2099],{"class":622},[52,67313,67314],{"class":62},"\"tab-content\"",[52,67316,54238],{"class":622},[52,67318,67319,67321,67323,67325,67327,67330,67332,67334,67336,67338,67341,67343,67345,67347,67350,67352],{"class":54,"line":19787},[52,67320,58164],{"class":622},[52,67322,54542],{"class":54231},[52,67324,56416],{"class":58},[52,67326,2099],{"class":622},[52,67328,67329],{"class":62},"\"item active\"",[52,67331,63982],{"class":622},[52,67333,280],{"class":54231},[52,67335,58169],{"class":58},[52,67337,2099],{"class":622},[52,67339,67340],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[52,67342,58177],{"class":58},[52,67344,2099],{"class":622},[52,67346,10608],{"class":62},[52,67348,67349],{"class":622}," \u002F>\u003C\u002F",[52,67351,54542],{"class":54231},[52,67353,54238],{"class":622},[52,67355,67356,67358,67360,67362,67364,67366,67368,67370,67372,67374,67377,67379,67381,67383,67385,67387],{"class":54,"line":19801},[52,67357,58164],{"class":622},[52,67359,54542],{"class":54231},[52,67361,56416],{"class":58},[52,67363,2099],{"class":622},[52,67365,65553],{"class":62},[52,67367,63982],{"class":622},[52,67369,280],{"class":54231},[52,67371,58169],{"class":58},[52,67373,2099],{"class":622},[52,67375,67376],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[52,67378,58177],{"class":58},[52,67380,2099],{"class":622},[52,67382,10608],{"class":62},[52,67384,67349],{"class":622},[52,67386,54542],{"class":54231},[52,67388,54238],{"class":622},[52,67390,67391,67393,67395,67397,67399,67401,67403,67405,67407,67409,67412,67414,67416,67418,67420,67422],{"class":54,"line":19806},[52,67392,58164],{"class":622},[52,67394,54542],{"class":54231},[52,67396,56416],{"class":58},[52,67398,2099],{"class":622},[52,67400,65553],{"class":62},[52,67402,63982],{"class":622},[52,67404,280],{"class":54231},[52,67406,58169],{"class":58},[52,67408,2099],{"class":622},[52,67410,67411],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[52,67413,58177],{"class":58},[52,67415,2099],{"class":622},[52,67417,10608],{"class":62},[52,67419,67349],{"class":622},[52,67421,54542],{"class":54231},[52,67423,54238],{"class":622},[52,67425,67426,67428,67430,67432,67434,67436,67438,67440,67442,67444,67447,67449,67451,67453,67455,67457],{"class":54,"line":19811},[52,67427,58164],{"class":622},[52,67429,54542],{"class":54231},[52,67431,56416],{"class":58},[52,67433,2099],{"class":622},[52,67435,65553],{"class":62},[52,67437,63982],{"class":622},[52,67439,280],{"class":54231},[52,67441,58169],{"class":58},[52,67443,2099],{"class":622},[52,67445,67446],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[52,67448,58177],{"class":58},[52,67450,2099],{"class":622},[52,67452,10608],{"class":62},[52,67454,67349],{"class":622},[52,67456,54542],{"class":54231},[52,67458,54238],{"class":622},[52,67460,67461,67463,67465,67467,67469,67471,67473,67475,67477,67479,67482,67484,67486,67488,67490,67492],{"class":54,"line":19825},[52,67462,58164],{"class":622},[52,67464,54542],{"class":54231},[52,67466,56416],{"class":58},[52,67468,2099],{"class":622},[52,67470,65553],{"class":62},[52,67472,63982],{"class":622},[52,67474,280],{"class":54231},[52,67476,58169],{"class":58},[52,67478,2099],{"class":622},[52,67480,67481],{"class":62},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[52,67483,58177],{"class":58},[52,67485,2099],{"class":622},[52,67487,10608],{"class":62},[52,67489,67349],{"class":622},[52,67491,54542],{"class":54231},[52,67493,54238],{"class":622},[52,67495,67496,67498,67500],{"class":54,"line":19837},[52,67497,54707],{"class":622},[52,67499,54542],{"class":54231},[52,67501,54238],{"class":622},[52,67503,67504,67506,67508],{"class":54,"line":19842},[52,67505,55347],{"class":622},[52,67507,54542],{"class":54231},[52,67509,54238],{"class":622},[52,67511,67512,67514,67516],{"class":54,"line":19855},[52,67513,55075],{"class":622},[52,67515,54744],{"class":54231},[52,67517,54238],{"class":622},[52,67519,67520],{"class":54,"line":19860},[52,67521,67522],{"class":332},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[52,67524,67525],{"class":54,"line":19865},[52,67526,67527],{"class":332},"    \u002F\u002F 1.1 获取 a 元素 \n",[52,67529,67530,67532,67534,67536,67538,67540,67542,67545],{"class":54,"line":19870},[52,67531,14177],{"class":160},[52,67533,2039],{"class":90},[52,67535,16520],{"class":160},[52,67537,57326],{"class":622},[52,67539,58611],{"class":58},[52,67541,3121],{"class":622},[52,67543,67544],{"class":62},"'.tab-nav a'",[52,67546,170],{"class":622},[52,67548,67549],{"class":54,"line":19883},[52,67550,67551],{"class":332},"    \u002F\u002F console.log(as) \n",[52,67553,67554,67556,67558,67560,67562,67564,67566,67568,67570,67573,67575,67577,67579],{"class":54,"line":19888},[52,67555,6160],{"class":160},[52,67557,4629],{"class":622},[52,67559,54778],{"class":160},[52,67561,12394],{"class":622},[52,67563,2099],{"class":160},[52,67565,7052],{"class":90},[52,67567,12401],{"class":622},[52,67569,4022],{"class":160},[52,67571,67572],{"class":622}," as.",[52,67574,54899],{"class":90},[52,67576,6173],{"class":622},[52,67578,5254],{"class":160},[52,67580,15398],{"class":622},[52,67582,67583],{"class":54,"line":35565},[52,67584,67585],{"class":332},"      \u002F\u002F console.log(as[i])\n",[52,67587,67588],{"class":54,"line":35571},[52,67589,67590],{"class":332},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[52,67592,67593,67596,67598,67600,67603,67605,67607],{"class":54,"line":35577},[52,67594,67595],{"class":622},"      as[i].",[52,67597,60743],{"class":58},[52,67599,3121],{"class":622},[52,67601,67602],{"class":62},"'mouseenter'",[52,67604,15391],{"class":622},[52,67606,57379],{"class":160},[52,67608,57382],{"class":622},[52,67610,67611],{"class":54,"line":35583},[52,67612,67613],{"class":332},"        \u002F\u002F console.log('鼠标经过')\n",[52,67615,67616],{"class":54,"line":35589},[52,67617,67618],{"class":332},"        \u002F\u002F 排他思想  \n",[52,67620,67621],{"class":54,"line":35600},[52,67622,67623],{"class":332},"        \u002F\u002F 干掉别人 移除类active\n",[52,67625,67626,67628,67630,67632,67635,67637,67639,67641,67644],{"class":54,"line":35606},[52,67627,54856],{"class":622},[52,67629,57329],{"class":58},[52,67631,3121],{"class":622},[52,67633,67634],{"class":62},"'.tab-nav .active'",[52,67636,59933],{"class":622},[52,67638,59936],{"class":58},[52,67640,3121],{"class":622},[52,67642,67643],{"class":62},"'active'",[52,67645,170],{"class":622},[52,67647,67648],{"class":54,"line":35626},[52,67649,67650],{"class":332},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[52,67652,67653,67656,67659,67661,67663,67665],{"class":54,"line":35632},[52,67654,67655],{"class":90},"        this",[52,67657,67658],{"class":622},".classList.",[52,67660,8290],{"class":58},[52,67662,3121],{"class":622},[52,67664,67643],{"class":62},[52,67666,170],{"class":622},[52,67668,67669],{"class":54,"line":35643},[52,67670,116],{"emptyLinePlaceholder":115},[52,67672,67673],{"class":54,"line":35649},[52,67674,67675],{"class":332},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[52,67677,67678],{"class":54,"line":35655},[52,67679,67680],{"class":332},"        \u002F\u002F 干掉别人\n",[52,67682,67683,67685,67687,67689,67692,67694,67696,67698,67700],{"class":54,"line":35661},[52,67684,54856],{"class":622},[52,67686,57329],{"class":58},[52,67688,3121],{"class":622},[52,67690,67691],{"class":62},"'.tab-content .active'",[52,67693,59933],{"class":622},[52,67695,59936],{"class":58},[52,67697,3121],{"class":622},[52,67699,67643],{"class":62},[52,67701,170],{"class":622},[52,67703,67704],{"class":54,"line":35667},[52,67705,67706],{"class":332},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[52,67708,67709,67711,67713,67715,67718,67720,67722,67724,67726,67728,67730,67732,67734],{"class":54,"line":35673},[52,67710,54856],{"class":622},[52,67712,57329],{"class":58},[52,67714,3121],{"class":622},[52,67716,67717],{"class":62},"`.tab-content .item:nth-child(${",[52,67719,3554],{"class":622},[52,67721,48498],{"class":160},[52,67723,28064],{"class":90},[52,67725,59962],{"class":62},[52,67727,59933],{"class":622},[52,67729,8290],{"class":58},[52,67731,3121],{"class":622},[52,67733,67643],{"class":62},[52,67735,170],{"class":622},[52,67737,67738],{"class":54,"line":35679},[52,67739,116],{"emptyLinePlaceholder":115},[52,67741,67742],{"class":54,"line":35685},[52,67743,67744],{"class":622},"      })\n",[52,67746,67747],{"class":54,"line":35705},[52,67748,5149],{"class":622},[52,67750,67751,67753,67755],{"class":54,"line":35711},[52,67752,55347],{"class":622},[52,67754,54744],{"class":54231},[52,67756,54238],{"class":622},[52,67758,67759,67761,67763],{"class":54,"line":35727},[52,67760,54716],{"class":622},[52,67762,54731],{"class":54231},[52,67764,54238],{"class":622},[52,67766,67767],{"class":54,"line":35733},[52,67768,116],{"emptyLinePlaceholder":115},[52,67770,67771,67773,67775],{"class":54,"line":35747},[52,67772,54716],{"class":622},[52,67774,53566],{"class":54231},[52,67776,54238],{"class":622},[274,67778,67779],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[274,67781,67782],{},"在监听事件中，this指向的就是他的调用者",[274,67784,67785],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[274,67787,56650],{},[274,67789,67790],{},"(function () {",[274,67792,67793],{},"const list = document.querySelector('.xtx-elevator-list')",[274,67795,67796],{},"list.addEventListener('click', function (e) {",[274,67798,67799],{},"if (e.target.tagName === 'A') {",[274,67801,67802],{},"\u002F\u002F 排他思想",[274,67804,67805],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[274,67807,67808],{},"const old = document.querySelector('.xtx-elevator-list .active')",[274,67810,67811],{},"\u002F\u002F console.log(old);",[274,67813,67814],{},"\u002F\u002F 判断",[274,67816,67817],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[274,67819,67820],{},"if (old) old.classList.remove('active')",[274,67822,67823],{},"e.target.classList.add('active')",[274,67825,4058],{},[274,67827,55394],{},[274,67829,67830],{},"})();",[30,67832,67834],{"id":67833},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[19,67836,67838],{"className":53564,"code":67837,"language":53566,"meta":28,"style":28},"\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",[26,67839,67840,67850,67854,67862,67866,67880,67894,67906,67914,67920,67930,67940,67944,67948,67955,67967,67978,67995,68008,68022,68032,68036,68040,68047,68058,68076,68086,68098,68102,68106,68113,68130,68141,68153,68157,68161,68168,68180,68184,68192,68200,68204,68212,68220,68228,68243,68287,68295,68308,68321,68334,68342,68350,68358,68386,68394,68406,68419,68432,68440,68448,68456,68482,68490,68503,68515,68528,68536,68544,68552,68578,68586,68599,68611,68624,68632,68640,68648,68653,68673,68678,68698,68703,68720,68725,68733,68738,68767,68780,68784,68788,68793,68797,68825,68830,68847,68852,68857,68862,68867,68893,68897,68901,68909,68917,68921],{"__ignoreMap":28},[52,67841,67842,67844,67846,67848],{"class":54,"line":55},[52,67843,54228],{"class":622},[52,67845,54232],{"class":54231},[52,67847,54235],{"class":58},[52,67849,54238],{"class":622},[52,67851,67852],{"class":54,"line":69},[52,67853,116],{"emptyLinePlaceholder":115},[52,67855,67856,67858,67860],{"class":54,"line":82},[52,67857,4022],{"class":622},[52,67859,53566],{"class":54231},[52,67861,54238],{"class":622},[52,67863,67864],{"class":54,"line":97},[52,67865,116],{"emptyLinePlaceholder":115},[52,67867,67868,67870,67872,67874,67876,67878],{"class":54,"line":112},[52,67869,4022],{"class":622},[52,67871,54265],{"class":54231},[52,67873,54247],{"class":58},[52,67875,2099],{"class":622},[52,67877,54252],{"class":62},[52,67879,54238],{"class":622},[52,67881,67882,67884,67886,67888,67890,67892],{"class":54,"line":119},[52,67883,55075],{"class":622},[52,67885,54275],{"class":54231},[52,67887,54278],{"class":58},[52,67889,2099],{"class":622},[52,67891,54283],{"class":62},[52,67893,54238],{"class":622},[52,67895,67896,67898,67900,67902,67904],{"class":54,"line":130},[52,67897,55075],{"class":622},[52,67899,54338],{"class":54231},[52,67901,58244],{"class":622},[52,67903,54338],{"class":54231},[52,67905,54238],{"class":622},[52,67907,67908,67910,67912],{"class":54,"line":136},[52,67909,55075],{"class":622},[52,67911,3015],{"class":54231},[52,67913,54238],{"class":622},[52,67915,67916,67918],{"class":54,"line":141},[52,67917,9359],{"class":54231},[52,67919,18528],{"class":622},[52,67921,67922,67924,67926,67928],{"class":54,"line":146},[52,67923,57636],{"class":90},[52,67925,54368],{"class":622},[52,67927,3306],{"class":90},[52,67929,4272],{"class":622},[52,67931,67932,67934,67936,67938],{"class":54,"line":152},[52,67933,57625],{"class":90},[52,67935,54368],{"class":622},[52,67937,3306],{"class":90},[52,67939,4272],{"class":622},[52,67941,67942],{"class":54,"line":157},[52,67943,5149],{"class":622},[52,67945,67946],{"class":54,"line":173},[52,67947,116],{"emptyLinePlaceholder":115},[52,67949,67950,67953],{"class":54,"line":178},[52,67951,67952],{"class":54231},"    table",[52,67954,18528],{"class":622},[52,67956,67957,67960,67962,67965],{"class":54,"line":184},[52,67958,67959],{"class":90},"      border-collapse",[52,67961,54368],{"class":622},[52,67963,67964],{"class":90},"collapse",[52,67966,4272],{"class":622},[52,67968,67969,67972,67974,67976],{"class":54,"line":189},[52,67970,67971],{"class":90},"      border-spacing",[52,67973,54368],{"class":622},[52,67975,3306],{"class":90},[52,67977,4272],{"class":622},[52,67979,67980,67982,67984,67986,67988,67990,67993],{"class":54,"line":201},[52,67981,64907],{"class":90},[52,67983,54368],{"class":622},[52,67985,3332],{"class":90},[52,67987,54423],{"class":160},[52,67989,54452],{"class":90},[52,67991,67992],{"class":90}," #c0c0c0",[52,67994,4272],{"class":622},[52,67996,67997,67999,68001,68004,68006],{"class":54,"line":206},[52,67998,57701],{"class":90},[52,68000,54368],{"class":622},[52,68002,68003],{"class":90},"500",[52,68005,54423],{"class":160},[52,68007,4272],{"class":622},[52,68009,68010,68012,68014,68016,68018,68020],{"class":54,"line":224},[52,68011,57636],{"class":90},[52,68013,54368],{"class":622},[52,68015,3424],{"class":90},[52,68017,54423],{"class":160},[52,68019,54487],{"class":90},[52,68021,4272],{"class":622},[52,68023,68024,68026,68028,68030],{"class":54,"line":229},[52,68025,60216],{"class":90},[52,68027,54368],{"class":622},[52,68029,54523],{"class":90},[52,68031,4272],{"class":622},[52,68033,68034],{"class":54,"line":241},[52,68035,5149],{"class":622},[52,68037,68038],{"class":54,"line":246},[52,68039,116],{"emptyLinePlaceholder":115},[52,68041,68042,68045],{"class":54,"line":252},[52,68043,68044],{"class":54231},"    th",[52,68046,18528],{"class":622},[52,68048,68049,68051,68053,68056],{"class":54,"line":257},[52,68050,57814],{"class":90},[52,68052,54368],{"class":622},[52,68054,68055],{"class":90},"#09c",[52,68057,4272],{"class":622},[52,68059,68060,68063,68065,68067,68069,68071,68074],{"class":54,"line":266},[52,68061,68062],{"class":90},"      font",[52,68064,54368],{"class":622},[52,68066,65269],{"class":90},[52,68068,67003],{"class":90},[52,68070,54423],{"class":160},[52,68072,68073],{"class":62}," \"微软雅黑\"",[52,68075,4272],{"class":622},[52,68077,68078,68080,68082,68084],{"class":54,"line":4722},[52,68079,60346],{"class":90},[52,68081,54368],{"class":622},[52,68083,63772],{"class":90},[52,68085,4272],{"class":622},[52,68087,68088,68090,68092,68094,68096],{"class":54,"line":4727},[52,68089,57715],{"class":90},[52,68091,54368],{"class":622},[52,68093,3912],{"class":90},[52,68095,54423],{"class":160},[52,68097,4272],{"class":622},[52,68099,68100],{"class":54,"line":4741},[52,68101,5149],{"class":622},[52,68103,68104],{"class":54,"line":4746},[52,68105,116],{"emptyLinePlaceholder":115},[52,68107,68108,68111],{"class":54,"line":5538},[52,68109,68110],{"class":54231},"    td",[52,68112,18528],{"class":622},[52,68114,68115,68117,68119,68121,68123,68125,68128],{"class":54,"line":5552},[52,68116,64907],{"class":90},[52,68118,54368],{"class":622},[52,68120,3332],{"class":90},[52,68122,54423],{"class":160},[52,68124,54452],{"class":90},[52,68126,68127],{"class":90}," #d0d0d0",[52,68129,4272],{"class":622},[52,68131,68132,68134,68136,68139],{"class":54,"line":5560},[52,68133,60346],{"class":90},[52,68135,54368],{"class":622},[52,68137,68138],{"class":90},"#404060",[52,68140,4272],{"class":622},[52,68142,68143,68145,68147,68149,68151],{"class":54,"line":5565},[52,68144,57625],{"class":90},[52,68146,54368],{"class":622},[52,68148,3559],{"class":90},[52,68150,54423],{"class":160},[52,68152,4272],{"class":622},[52,68154,68155],{"class":54,"line":5571},[52,68156,5149],{"class":622},[52,68158,68159],{"class":54,"line":5577},[52,68160,116],{"emptyLinePlaceholder":115},[52,68162,68163,68166],{"class":54,"line":5582},[52,68164,68165],{"class":58},"    .allCheck",[52,68167,18528],{"class":622},[52,68169,68170,68172,68174,68176,68178],{"class":54,"line":10904},[52,68171,57701],{"class":90},[52,68173,54368],{"class":622},[52,68175,3724],{"class":90},[52,68177,54423],{"class":160},[52,68179,4272],{"class":622},[52,68181,68182],{"class":54,"line":10928},[52,68183,5149],{"class":622},[52,68185,68186,68188,68190],{"class":54,"line":10933},[52,68187,55347],{"class":622},[52,68189,3015],{"class":54231},[52,68191,54238],{"class":622},[52,68193,68194,68196,68198],{"class":54,"line":10939},[52,68195,54716],{"class":622},[52,68197,54265],{"class":54231},[52,68199,54238],{"class":622},[52,68201,68202],{"class":54,"line":10966},[52,68203,116],{"emptyLinePlaceholder":115},[52,68205,68206,68208,68210],{"class":54,"line":10971},[52,68207,4022],{"class":622},[52,68209,54731],{"class":54231},[52,68211,54238],{"class":622},[52,68213,68214,68216,68218],{"class":54,"line":10977},[52,68215,55075],{"class":622},[52,68217,3253],{"class":54231},[52,68219,54238],{"class":622},[52,68221,68222,68224,68226],{"class":54,"line":10989},[52,68223,54272],{"class":622},[52,68225,3259],{"class":54231},[52,68227,54238],{"class":622},[52,68229,68230,68232,68234,68236,68238,68241],{"class":54,"line":11001},[52,68231,58164],{"class":622},[52,68233,3262],{"class":54231},[52,68235,56416],{"class":58},[52,68237,2099],{"class":622},[52,68239,68240],{"class":62},"\"allCheck\"",[52,68242,54238],{"class":622},[52,68244,68245,68247,68249,68251,68253,68255,68257,68259,68261,68263,68265,68268,68271,68273,68275,68277,68280,68283,68285],{"class":54,"line":11013},[52,68246,58232],{"class":622},[52,68248,56751],{"class":54231},[52,68250,56754],{"class":58},[52,68252,2099],{"class":622},[52,68254,56759],{"class":62},[52,68256,17876],{"class":58},[52,68258,2099],{"class":622},[52,68260,10608],{"class":62},[52,68262,17915],{"class":58},[52,68264,2099],{"class":622},[52,68266,68267],{"class":62},"\"checkAll\"",[52,68269,68270],{"class":622},"> \u003C",[52,68272,52],{"class":54231},[52,68274,56416],{"class":58},[52,68276,2099],{"class":622},[52,68278,68279],{"class":62},"\"all\"",[52,68281,68282],{"class":622},">全选\u003C\u002F",[52,68284,52],{"class":54231},[52,68286,54238],{"class":622},[52,68288,68289,68291,68293],{"class":54,"line":12672},[52,68290,58337],{"class":622},[52,68292,3262],{"class":54231},[52,68294,54238],{"class":622},[52,68296,68297,68299,68301,68304,68306],{"class":54,"line":12697},[52,68298,58164],{"class":622},[52,68300,3262],{"class":54231},[52,68302,68303],{"class":622},">商品\u003C\u002F",[52,68305,3262],{"class":54231},[52,68307,54238],{"class":622},[52,68309,68310,68312,68314,68317,68319],{"class":54,"line":12720},[52,68311,58164],{"class":622},[52,68313,3262],{"class":54231},[52,68315,68316],{"class":622},">商家\u003C\u002F",[52,68318,3262],{"class":54231},[52,68320,54238],{"class":622},[52,68322,68323,68325,68327,68330,68332],{"class":54,"line":12744},[52,68324,58164],{"class":622},[52,68326,3262],{"class":54231},[52,68328,68329],{"class":622},">价格\u003C\u002F",[52,68331,3262],{"class":54231},[52,68333,54238],{"class":622},[52,68335,68336,68338,68340],{"class":54,"line":12749},[52,68337,54707],{"class":622},[52,68339,3259],{"class":54231},[52,68341,54238],{"class":622},[52,68343,68344,68346,68348],{"class":54,"line":12754},[52,68345,54272],{"class":622},[52,68347,3259],{"class":54231},[52,68349,54238],{"class":622},[52,68351,68352,68354,68356],{"class":54,"line":12759},[52,68353,58164],{"class":622},[52,68355,3304],{"class":54231},[52,68357,54238],{"class":622},[52,68359,68360,68362,68364,68366,68368,68370,68372,68374,68377,68379,68381,68384],{"class":54,"line":12768},[52,68361,58232],{"class":622},[52,68363,56751],{"class":54231},[52,68365,56754],{"class":58},[52,68367,2099],{"class":622},[52,68369,56759],{"class":62},[52,68371,17876],{"class":58},[52,68373,2099],{"class":622},[52,68375,68376],{"class":62},"\"check\"",[52,68378,56416],{"class":58},[52,68380,2099],{"class":622},[52,68382,68383],{"class":62},"\"ck\"",[52,68385,54238],{"class":622},[52,68387,68388,68390,68392],{"class":54,"line":12773},[52,68389,58337],{"class":622},[52,68391,3304],{"class":54231},[52,68393,54238],{"class":622},[52,68395,68396,68398,68400,68402,68404],{"class":54,"line":12779},[52,68397,58164],{"class":622},[52,68399,3304],{"class":54231},[52,68401,64103],{"class":622},[52,68403,3304],{"class":54231},[52,68405,54238],{"class":622},[52,68407,68408,68410,68412,68415,68417],{"class":54,"line":12800},[52,68409,58164],{"class":622},[52,68411,3304],{"class":54231},[52,68413,68414],{"class":622},">小米\u003C\u002F",[52,68416,3304],{"class":54231},[52,68418,54238],{"class":622},[52,68420,68421,68423,68425,68428,68430],{"class":54,"line":12806},[52,68422,58164],{"class":622},[52,68424,3304],{"class":54231},[52,68426,68427],{"class":622},">￥1999\u003C\u002F",[52,68429,3304],{"class":54231},[52,68431,54238],{"class":622},[52,68433,68434,68436,68438],{"class":54,"line":12820},[52,68435,54707],{"class":622},[52,68437,3259],{"class":54231},[52,68439,54238],{"class":622},[52,68441,68442,68444,68446],{"class":54,"line":12826},[52,68443,54272],{"class":622},[52,68445,3259],{"class":54231},[52,68447,54238],{"class":622},[52,68449,68450,68452,68454],{"class":54,"line":12853},[52,68451,58164],{"class":622},[52,68453,3304],{"class":54231},[52,68455,54238],{"class":622},[52,68457,68458,68460,68462,68464,68466,68468,68470,68472,68474,68476,68478,68480],{"class":54,"line":12862},[52,68459,58232],{"class":622},[52,68461,56751],{"class":54231},[52,68463,56754],{"class":58},[52,68465,2099],{"class":622},[52,68467,56759],{"class":62},[52,68469,17876],{"class":58},[52,68471,2099],{"class":622},[52,68473,68376],{"class":62},[52,68475,56416],{"class":58},[52,68477,2099],{"class":622},[52,68479,68383],{"class":62},[52,68481,54238],{"class":622},[52,68483,68484,68486,68488],{"class":54,"line":12868},[52,68485,58337],{"class":622},[52,68487,3304],{"class":54231},[52,68489,54238],{"class":622},[52,68491,68492,68494,68496,68499,68501],{"class":54,"line":12876},[52,68493,58164],{"class":622},[52,68495,3304],{"class":54231},[52,68497,68498],{"class":622},">小米净水器\u003C\u002F",[52,68500,3304],{"class":54231},[52,68502,54238],{"class":622},[52,68504,68505,68507,68509,68511,68513],{"class":54,"line":12881},[52,68506,58164],{"class":622},[52,68508,3304],{"class":54231},[52,68510,68414],{"class":622},[52,68512,3304],{"class":54231},[52,68514,54238],{"class":622},[52,68516,68517,68519,68521,68524,68526],{"class":54,"line":19560},[52,68518,58164],{"class":622},[52,68520,3304],{"class":54231},[52,68522,68523],{"class":622},">￥4999\u003C\u002F",[52,68525,3304],{"class":54231},[52,68527,54238],{"class":622},[52,68529,68530,68532,68534],{"class":54,"line":19566},[52,68531,54707],{"class":622},[52,68533,3259],{"class":54231},[52,68535,54238],{"class":622},[52,68537,68538,68540,68542],{"class":54,"line":19589},[52,68539,54272],{"class":622},[52,68541,3259],{"class":54231},[52,68543,54238],{"class":622},[52,68545,68546,68548,68550],{"class":54,"line":19595},[52,68547,58164],{"class":622},[52,68549,3304],{"class":54231},[52,68551,54238],{"class":622},[52,68553,68554,68556,68558,68560,68562,68564,68566,68568,68570,68572,68574,68576],{"class":54,"line":19618},[52,68555,58232],{"class":622},[52,68557,56751],{"class":54231},[52,68559,56754],{"class":58},[52,68561,2099],{"class":622},[52,68563,56759],{"class":62},[52,68565,17876],{"class":58},[52,68567,2099],{"class":622},[52,68569,68376],{"class":62},[52,68571,56416],{"class":58},[52,68573,2099],{"class":622},[52,68575,68383],{"class":62},[52,68577,54238],{"class":622},[52,68579,68580,68582,68584],{"class":54,"line":19632},[52,68581,58337],{"class":622},[52,68583,3304],{"class":54231},[52,68585,54238],{"class":622},[52,68587,68588,68590,68592,68595,68597],{"class":54,"line":19652},[52,68589,58164],{"class":622},[52,68591,3304],{"class":54231},[52,68593,68594],{"class":622},">小米电视\u003C\u002F",[52,68596,3304],{"class":54231},[52,68598,54238],{"class":622},[52,68600,68601,68603,68605,68607,68609],{"class":54,"line":19658},[52,68602,58164],{"class":622},[52,68604,3304],{"class":54231},[52,68606,68414],{"class":622},[52,68608,3304],{"class":54231},[52,68610,54238],{"class":622},[52,68612,68613,68615,68617,68620,68622],{"class":54,"line":19669},[52,68614,58164],{"class":622},[52,68616,3304],{"class":54231},[52,68618,68619],{"class":622},">￥5999\u003C\u002F",[52,68621,3304],{"class":54231},[52,68623,54238],{"class":622},[52,68625,68626,68628,68630],{"class":54,"line":19692},[52,68627,54707],{"class":622},[52,68629,3259],{"class":54231},[52,68631,54238],{"class":622},[52,68633,68634,68636,68638],{"class":54,"line":19714},[52,68635,55347],{"class":622},[52,68637,3253],{"class":54231},[52,68639,54238],{"class":622},[52,68641,68642,68644,68646],{"class":54,"line":19719},[52,68643,55075],{"class":622},[52,68645,54744],{"class":54231},[52,68647,54238],{"class":622},[52,68649,68650],{"class":54,"line":19725},[52,68651,68652],{"class":332},"    \u002F\u002F 1. 获取大复选框\n",[52,68654,68655,68657,68660,68662,68664,68666,68668,68671],{"class":54,"line":19739},[52,68656,14177],{"class":160},[52,68658,68659],{"class":90}," checkAll",[52,68661,16520],{"class":160},[52,68663,57326],{"class":622},[52,68665,57329],{"class":58},[52,68667,3121],{"class":622},[52,68669,68670],{"class":62},"'#checkAll'",[52,68672,170],{"class":622},[52,68674,68675],{"class":54,"line":19752},[52,68676,68677],{"class":332},"    \u002F\u002F 2. 获取所有的小复选框\n",[52,68679,68680,68682,68685,68687,68689,68691,68693,68696],{"class":54,"line":19757},[52,68681,14177],{"class":160},[52,68683,68684],{"class":90}," cks",[52,68686,16520],{"class":160},[52,68688,57326],{"class":622},[52,68690,58611],{"class":58},[52,68692,3121],{"class":622},[52,68694,68695],{"class":62},"'.ck'",[52,68697,170],{"class":622},[52,68699,68700],{"class":54,"line":19771},[52,68701,68702],{"class":332},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[52,68704,68705,68708,68710,68712,68714,68716,68718],{"class":54,"line":19776},[52,68706,68707],{"class":622},"    checkAll.",[52,68709,60743],{"class":58},[52,68711,3121],{"class":622},[52,68713,60748],{"class":62},[52,68715,15391],{"class":622},[52,68717,57379],{"class":160},[52,68719,57382],{"class":622},[52,68721,68722],{"class":54,"line":19782},[52,68723,68724],{"class":332},"      \u002F\u002F 得到当前大复选框的选中状态\n",[52,68726,68727,68730],{"class":54,"line":19787},[52,68728,68729],{"class":332},"      \u002F\u002F console.log(checkAll.checked)",[52,68731,68732],{"class":332},"  \u002F\u002F 得到 是 true 或者是 false\n",[52,68734,68735],{"class":54,"line":19801},[52,68736,68737],{"class":332},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[52,68739,68740,68742,68744,68746,68748,68750,68752,68754,68756,68759,68761,68763,68765],{"class":54,"line":19806},[52,68741,55214],{"class":160},[52,68743,4629],{"class":622},[52,68745,54778],{"class":160},[52,68747,12394],{"class":622},[52,68749,2099],{"class":160},[52,68751,7052],{"class":90},[52,68753,12401],{"class":622},[52,68755,4022],{"class":160},[52,68757,68758],{"class":622}," cks.",[52,68760,54899],{"class":90},[52,68762,6173],{"class":622},[52,68764,5254],{"class":160},[52,68766,15398],{"class":622},[52,68768,68769,68772,68774,68777],{"class":54,"line":19811},[52,68770,68771],{"class":622},"        cks[i].checked ",[52,68773,2099],{"class":160},[52,68775,68776],{"class":90}," this",[52,68778,68779],{"class":622},".checked\n",[52,68781,68782],{"class":54,"line":19825},[52,68783,55328],{"class":622},[52,68785,68786],{"class":54,"line":19837},[52,68787,36393],{"class":622},[52,68789,68790],{"class":54,"line":19842},[52,68791,68792],{"class":332},"    \u002F\u002F 5. 小复选框控制大复选框\n",[52,68794,68795],{"class":54,"line":19855},[52,68796,116],{"emptyLinePlaceholder":115},[52,68798,68799,68801,68803,68805,68807,68809,68811,68813,68815,68817,68819,68821,68823],{"class":54,"line":19860},[52,68800,6160],{"class":160},[52,68802,4629],{"class":622},[52,68804,54778],{"class":160},[52,68806,12394],{"class":622},[52,68808,2099],{"class":160},[52,68810,7052],{"class":90},[52,68812,12401],{"class":622},[52,68814,4022],{"class":160},[52,68816,68758],{"class":622},[52,68818,54899],{"class":90},[52,68820,6173],{"class":622},[52,68822,5254],{"class":160},[52,68824,15398],{"class":622},[52,68826,68827],{"class":54,"line":19865},[52,68828,68829],{"class":332},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[52,68831,68832,68835,68837,68839,68841,68843,68845],{"class":54,"line":19870},[52,68833,68834],{"class":622},"      cks[i].",[52,68836,60743],{"class":58},[52,68838,3121],{"class":622},[52,68840,60748],{"class":62},[52,68842,15391],{"class":622},[52,68844,57379],{"class":160},[52,68846,57382],{"class":622},[52,68848,68849],{"class":54,"line":19883},[52,68850,68851],{"class":332},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[52,68853,68854],{"class":54,"line":19888},[52,68855,68856],{"class":332},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[52,68858,68859],{"class":54,"line":35565},[52,68860,68861],{"class":332},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[52,68863,68864],{"class":54,"line":35571},[52,68865,68866],{"class":332},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[52,68868,68869,68872,68874,68876,68878,68880,68883,68885,68887,68889,68891],{"class":54,"line":35577},[52,68870,68871],{"class":622},"        checkAll.checked ",[52,68873,2099],{"class":160},[52,68875,57326],{"class":622},[52,68877,58611],{"class":58},[52,68879,3121],{"class":622},[52,68881,68882],{"class":62},"'.ck:checked'",[52,68884,33758],{"class":622},[52,68886,54899],{"class":90},[52,68888,60836],{"class":160},[52,68890,68758],{"class":622},[52,68892,58761],{"class":90},[52,68894,68895],{"class":54,"line":35583},[52,68896,67744],{"class":622},[52,68898,68899],{"class":54,"line":35589},[52,68900,5149],{"class":622},[52,68902,68903,68905,68907],{"class":54,"line":35600},[52,68904,55347],{"class":622},[52,68906,54744],{"class":54231},[52,68908,54238],{"class":622},[52,68910,68911,68913,68915],{"class":54,"line":35606},[52,68912,54716],{"class":622},[52,68914,54731],{"class":54231},[52,68916,54238],{"class":622},[52,68918,68919],{"class":54,"line":35626},[52,68920,116],{"emptyLinePlaceholder":115},[52,68922,68923,68925,68927],{"class":54,"line":35632},[52,68924,54716],{"class":622},[52,68926,53566],{"class":54231},[52,68928,54238],{"class":622},[274,68930,68931],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[274,68933,68934],{},"用好之间比较得到的布尔值！！！",[274,68936,68937,68938,68941,68942,4629,68945,3696,68947,68950],{},"在 JS 里访问的时候，",[26,68939,68940],{},"checkbox.checked"," 是一个 ",[538,68943,68944],{},"布尔值",[26,68946,4341],{},[26,68948,68949],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[274,68952,68953,68954,68957,68958],{},"HTML 的 ",[26,68955,68956],{},"checked=\"checked\""," 只是 ",[538,68959,68960,68961,68964],{},"初始值；JS 的 ",[26,68962,68963],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[274,68966,68967],{},"：checked是一个伪类选择器",[274,68969,68970],{},[280,68971],{"alt":28,"src":68972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[274,68974,68975,68978],{},[68976,68977],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[274,68980,68981],{},[280,68982],{"alt":28,"src":68983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68985,68987],{"id":68986},"_33-dom事件进阶","3.3 DOM事件进阶",[30,68989,68991],{"id":68990},"_331-事件流","3.3.1 事件流",[274,68993,68994],{},[280,68995],{"alt":28,"src":68996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[1486,68998,69000],{"id":68999},"_3311-事件捕获","3.3.1.1 事件捕获",[274,69002,69003],{},[280,69004],{"alt":28,"src":69005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[19,69007,69009],{"className":53564,"code":69008,"language":53566,"meta":28,"style":28},"\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",[26,69010,69011,69021,69035,69039,69047,69061,69081,69093,69101,69108,69120,69132,69142,69146,69150,69157,69169,69181,69191,69195,69203,69211,69215,69223,69238,69257,69265,69273,69293,69313,69329,69340,69348,69365,69376,69384,69401,69412,69420,69428,69436,69440],{"__ignoreMap":28},[52,69012,69013,69015,69017,69019],{"class":54,"line":55},[52,69014,54228],{"class":622},[52,69016,54232],{"class":54231},[52,69018,54235],{"class":58},[52,69020,54238],{"class":622},[52,69022,69023,69025,69027,69029,69031,69033],{"class":54,"line":69},[52,69024,4022],{"class":622},[52,69026,53566],{"class":54231},[52,69028,54247],{"class":58},[52,69030,2099],{"class":622},[52,69032,54252],{"class":62},[52,69034,54238],{"class":622},[52,69036,69037],{"class":54,"line":82},[52,69038,116],{"emptyLinePlaceholder":115},[52,69040,69041,69043,69045],{"class":54,"line":97},[52,69042,4022],{"class":622},[52,69044,54265],{"class":54231},[52,69046,54238],{"class":622},[52,69048,69049,69051,69053,69055,69057,69059],{"class":54,"line":112},[52,69050,55075],{"class":622},[52,69052,54275],{"class":54231},[52,69054,54278],{"class":58},[52,69056,2099],{"class":622},[52,69058,54283],{"class":62},[52,69060,54238],{"class":622},[52,69062,69063,69065,69067,69069,69071,69073,69075,69077,69079],{"class":54,"line":119},[52,69064,55075],{"class":622},[52,69066,54275],{"class":54231},[52,69068,17876],{"class":58},[52,69070,2099],{"class":622},[52,69072,54322],{"class":62},[52,69074,54302],{"class":58},[52,69076,2099],{"class":622},[52,69078,54329],{"class":62},[52,69080,54238],{"class":622},[52,69082,69083,69085,69087,69089,69091],{"class":54,"line":130},[52,69084,55075],{"class":622},[52,69086,54338],{"class":54231},[52,69088,54341],{"class":622},[52,69090,54338],{"class":54231},[52,69092,54238],{"class":622},[52,69094,69095,69097,69099],{"class":54,"line":136},[52,69096,55075],{"class":622},[52,69098,3015],{"class":54231},[52,69100,54238],{"class":622},[52,69102,69103,69106],{"class":54,"line":141},[52,69104,69105],{"class":58},"    .father",[52,69107,18528],{"class":622},[52,69109,69110,69112,69114,69116,69118],{"class":54,"line":146},[52,69111,57701],{"class":90},[52,69113,54368],{"class":622},[52,69115,68003],{"class":90},[52,69117,54423],{"class":160},[52,69119,4272],{"class":622},[52,69121,69122,69124,69126,69128,69130],{"class":54,"line":152},[52,69123,57715],{"class":90},[52,69125,54368],{"class":622},[52,69127,68003],{"class":90},[52,69129,54423],{"class":160},[52,69131,4272],{"class":622},[52,69133,69134,69136,69138,69140],{"class":54,"line":157},[52,69135,57814],{"class":90},[52,69137,54368],{"class":622},[52,69139,54576],{"class":90},[52,69141,4272],{"class":622},[52,69143,69144],{"class":54,"line":173},[52,69145,5149],{"class":622},[52,69147,69148],{"class":54,"line":178},[52,69149,116],{"emptyLinePlaceholder":115},[52,69151,69152,69155],{"class":54,"line":184},[52,69153,69154],{"class":58},"    .son",[52,69156,18528],{"class":622},[52,69158,69159,69161,69163,69165,69167],{"class":54,"line":189},[52,69160,57701],{"class":90},[52,69162,54368],{"class":622},[52,69164,4689],{"class":90},[52,69166,54423],{"class":160},[52,69168,4272],{"class":622},[52,69170,69171,69173,69175,69177,69179],{"class":54,"line":201},[52,69172,57715],{"class":90},[52,69174,54368],{"class":622},[52,69176,4689],{"class":90},[52,69178,54423],{"class":160},[52,69180,4272],{"class":622},[52,69182,69183,69185,69187,69189],{"class":54,"line":206},[52,69184,57814],{"class":90},[52,69186,54368],{"class":622},[52,69188,57819],{"class":90},[52,69190,4272],{"class":622},[52,69192,69193],{"class":54,"line":224},[52,69194,5149],{"class":622},[52,69196,69197,69199,69201],{"class":54,"line":229},[52,69198,55347],{"class":622},[52,69200,3015],{"class":54231},[52,69202,54238],{"class":622},[52,69204,69205,69207,69209],{"class":54,"line":241},[52,69206,54716],{"class":622},[52,69208,54265],{"class":54231},[52,69210,54238],{"class":622},[52,69212,69213],{"class":54,"line":246},[52,69214,116],{"emptyLinePlaceholder":115},[52,69216,69217,69219,69221],{"class":54,"line":252},[52,69218,4022],{"class":622},[52,69220,54731],{"class":54231},[52,69222,54238],{"class":622},[52,69224,69225,69227,69229,69231,69233,69236],{"class":54,"line":257},[52,69226,55075],{"class":622},[52,69228,54542],{"class":54231},[52,69230,56416],{"class":58},[52,69232,2099],{"class":622},[52,69234,69235],{"class":62},"\"father\"",[52,69237,54238],{"class":622},[52,69239,69240,69242,69244,69246,69248,69251,69253,69255],{"class":54,"line":266},[52,69241,54272],{"class":622},[52,69243,54542],{"class":54231},[52,69245,56416],{"class":58},[52,69247,2099],{"class":622},[52,69249,69250],{"class":62},"\"son\"",[52,69252,58244],{"class":622},[52,69254,54542],{"class":54231},[52,69256,54238],{"class":622},[52,69258,69259,69261,69263],{"class":54,"line":4722},[52,69260,55347],{"class":622},[52,69262,54542],{"class":54231},[52,69264,54238],{"class":622},[52,69266,69267,69269,69271],{"class":54,"line":4727},[52,69268,55075],{"class":622},[52,69270,54744],{"class":54231},[52,69272,54238],{"class":622},[52,69274,69275,69277,69280,69282,69284,69286,69288,69291],{"class":54,"line":4741},[52,69276,14177],{"class":160},[52,69278,69279],{"class":90}," fa",[52,69281,16520],{"class":160},[52,69283,57326],{"class":622},[52,69285,57329],{"class":58},[52,69287,3121],{"class":622},[52,69289,69290],{"class":62},"'.father'",[52,69292,170],{"class":622},[52,69294,69295,69297,69300,69302,69304,69306,69308,69311],{"class":54,"line":4746},[52,69296,14177],{"class":160},[52,69298,69299],{"class":90}," son",[52,69301,16520],{"class":160},[52,69303,57326],{"class":622},[52,69305,57329],{"class":58},[52,69307,3121],{"class":622},[52,69309,69310],{"class":62},"'.son'",[52,69312,170],{"class":622},[52,69314,69315,69317,69319,69321,69323,69325,69327],{"class":54,"line":5538},[52,69316,55337],{"class":622},[52,69318,60743],{"class":58},[52,69320,3121],{"class":622},[52,69322,60748],{"class":62},[52,69324,15391],{"class":622},[52,69326,57379],{"class":160},[52,69328,57382],{"class":622},[52,69330,69331,69333,69335,69338],{"class":54,"line":5552},[52,69332,61855],{"class":58},[52,69334,3121],{"class":622},[52,69336,69337],{"class":62},"'woshiu1'",[52,69339,170],{"class":622},[52,69341,69342,69344,69346],{"class":54,"line":5560},[52,69343,57465],{"class":622},[52,69345,4341],{"class":90},[52,69347,170],{"class":622},[52,69349,69350,69353,69355,69357,69359,69361,69363],{"class":54,"line":5565},[52,69351,69352],{"class":622},"    fa.",[52,69354,60743],{"class":58},[52,69356,3121],{"class":622},[52,69358,60748],{"class":62},[52,69360,15391],{"class":622},[52,69362,57379],{"class":160},[52,69364,57382],{"class":622},[52,69366,69367,69369,69371,69374],{"class":54,"line":5571},[52,69368,61855],{"class":58},[52,69370,3121],{"class":622},[52,69372,69373],{"class":62},"'1'",[52,69375,170],{"class":622},[52,69377,69378,69380,69382],{"class":54,"line":5577},[52,69379,57465],{"class":622},[52,69381,4341],{"class":90},[52,69383,170],{"class":622},[52,69385,69386,69389,69391,69393,69395,69397,69399],{"class":54,"line":5582},[52,69387,69388],{"class":622},"    son.",[52,69390,60743],{"class":58},[52,69392,3121],{"class":622},[52,69394,60748],{"class":62},[52,69396,15391],{"class":622},[52,69398,57379],{"class":160},[52,69400,57382],{"class":622},[52,69402,69403,69405,69407,69410],{"class":54,"line":10904},[52,69404,61855],{"class":58},[52,69406,3121],{"class":622},[52,69408,69409],{"class":62},"'2'",[52,69411,170],{"class":622},[52,69413,69414,69416,69418],{"class":54,"line":10928},[52,69415,57465],{"class":622},[52,69417,4341],{"class":90},[52,69419,170],{"class":622},[52,69421,69422,69424,69426],{"class":54,"line":10933},[52,69423,55347],{"class":622},[52,69425,54744],{"class":54231},[52,69427,54238],{"class":622},[52,69429,69430,69432,69434],{"class":54,"line":10939},[52,69431,54716],{"class":622},[52,69433,54731],{"class":54231},[52,69435,54238],{"class":622},[52,69437,69438],{"class":54,"line":10966},[52,69439,116],{"emptyLinePlaceholder":115},[52,69441,69442,69444,69446],{"class":54,"line":10971},[52,69443,54716],{"class":622},[52,69445,53566],{"class":54231},[52,69447,54238],{"class":622},[274,69449,69450],{},[280,69451],{"alt":28,"src":69452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[274,69454,69455],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[1486,69457,69459],{"id":69458},"_3312-事件冒泡","3.3.1.2 事件冒泡",[274,69461,69462],{},[280,69463],{"alt":28,"src":69464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[274,69466,69467],{},"反着来",[274,69469,69470],{},"注意是同名事件，比如都是‘click’",[1486,69472,69474],{"id":69473},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[274,69476,69477],{},[280,69478],{"alt":28,"src":69479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[1486,69481,69483],{"id":69482},"_3314-解绑事件","3.3.1.4 解绑事件",[274,69485,69486],{},[280,69487],{"alt":28,"src":69488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[274,69490,69491],{},[280,69492],{"alt":28,"src":69493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[1486,69495,69497],{"id":69496},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1070,69499,69500],{},[1073,69501,69502],{},"事件类型的区别",[274,69504,69505],{},[280,69506],{"alt":28,"src":69507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[274,69509,69510],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1070,69512,69513],{"start":69},[1073,69514,69515],{},"注册事件的区别",[274,69517,69518],{},[280,69519],{"alt":28,"src":69520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[1486,69522,69524],{"id":69523},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[274,69526,69527],{},[280,69528],{"alt":28,"src":69529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[274,69531,69532],{},[280,69533],{"alt":28,"src":69534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[19,69536,69538],{"className":55997,"code":69537,"language":55999,"meta":28,"style":28},"\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",[26,69539,69540,69548,69565,69588,69596,69601,69606,69611,69615,69623,69631],{"__ignoreMap":28},[52,69541,69542,69544,69546],{"class":54,"line":55},[52,69543,4022],{"class":622},[52,69545,54731],{"class":54231},[52,69547,54238],{"class":622},[52,69549,69550,69552,69555,69558,69560,69563],{"class":54,"line":69},[52,69551,55075],{"class":622},[52,69553,69554],{"class":54231},"form",[52,69556,69557],{"class":58}," action",[52,69559,2099],{"class":622},[52,69561,69562],{"class":62},"\"http:\u002F\u002Fwww.itcast.cn\"",[52,69564,54238],{"class":622},[52,69566,69567,69569,69571,69573,69575,69578,69581,69583,69586],{"class":54,"line":82},[52,69568,54272],{"class":622},[52,69570,56751],{"class":54231},[52,69572,56754],{"class":58},[52,69574,2099],{"class":622},[52,69576,69577],{"class":62},"\"submit\"",[52,69579,69580],{"class":58}," value",[52,69582,2099],{"class":622},[52,69584,69585],{"class":62},"\"免费注册\"",[52,69587,54238],{"class":622},[52,69589,69590,69592,69594],{"class":54,"line":97},[52,69591,54272],{"class":622},[52,69593,54744],{"class":54231},[52,69595,54238],{"class":622},[52,69597,69598],{"class":54,"line":112},[52,69599,69600],{"class":622},"      const form = document.querySelector('form')\n",[52,69602,69603],{"class":54,"line":119},[52,69604,69605],{"class":622},"      form.addEventListener('submit', function (e) {\n",[52,69607,69608],{"class":54,"line":130},[52,69609,69610],{"class":622},"        e.preventDefault()\n",[52,69612,69613],{"class":54,"line":136},[52,69614,67744],{"class":622},[52,69616,69617,69619,69621],{"class":54,"line":141},[52,69618,54707],{"class":622},[52,69620,54744],{"class":54231},[52,69622,54238],{"class":622},[52,69624,69625,69627,69629],{"class":54,"line":146},[52,69626,55347],{"class":622},[52,69628,69554],{"class":54231},[52,69630,54238],{"class":622},[52,69632,69633,69635,69637],{"class":54,"line":152},[52,69634,54716],{"class":622},[52,69636,54731],{"class":54231},[52,69638,54238],{"class":622},[274,69640,69641],{},"点击不在跳转！！！",[30,69643,69645],{"id":69644},"_332-事件委托","3.3.2 事件委托",[274,69647,69648],{},[280,69649],{"alt":28,"src":69650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[19,69652,69654],{"className":53564,"code":69653,"language":53566,"meta":28,"style":28},"\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",[26,69655,69656,69666,69680,69684,69692,69706,69726,69738,69746,69750,69758,69766,69778,69790,69802,69814,69826,69839,69847,69855,69860,69879,69900,69905,69910,69915,69920,69929,69933,69943,69947,69952,69957,69971,69981,69985,69989,69997,70005,70009],{"__ignoreMap":28},[52,69657,69658,69660,69662,69664],{"class":54,"line":55},[52,69659,54228],{"class":622},[52,69661,54232],{"class":54231},[52,69663,54235],{"class":58},[52,69665,54238],{"class":622},[52,69667,69668,69670,69672,69674,69676,69678],{"class":54,"line":69},[52,69669,4022],{"class":622},[52,69671,53566],{"class":54231},[52,69673,54247],{"class":58},[52,69675,2099],{"class":622},[52,69677,54252],{"class":62},[52,69679,54238],{"class":622},[52,69681,69682],{"class":54,"line":82},[52,69683,116],{"emptyLinePlaceholder":115},[52,69685,69686,69688,69690],{"class":54,"line":97},[52,69687,4022],{"class":622},[52,69689,54265],{"class":54231},[52,69691,54238],{"class":622},[52,69693,69694,69696,69698,69700,69702,69704],{"class":54,"line":112},[52,69695,55075],{"class":622},[52,69697,54275],{"class":54231},[52,69699,54278],{"class":58},[52,69701,2099],{"class":622},[52,69703,54283],{"class":62},[52,69705,54238],{"class":622},[52,69707,69708,69710,69712,69714,69716,69718,69720,69722,69724],{"class":54,"line":119},[52,69709,55075],{"class":622},[52,69711,54275],{"class":54231},[52,69713,17876],{"class":58},[52,69715,2099],{"class":622},[52,69717,54322],{"class":62},[52,69719,54302],{"class":58},[52,69721,2099],{"class":622},[52,69723,54329],{"class":62},[52,69725,54238],{"class":622},[52,69727,69728,69730,69732,69734,69736],{"class":54,"line":130},[52,69729,55075],{"class":622},[52,69731,54338],{"class":54231},[52,69733,54341],{"class":622},[52,69735,54338],{"class":54231},[52,69737,54238],{"class":622},[52,69739,69740,69742,69744],{"class":54,"line":136},[52,69741,54716],{"class":622},[52,69743,54265],{"class":54231},[52,69745,54238],{"class":622},[52,69747,69748],{"class":54,"line":141},[52,69749,116],{"emptyLinePlaceholder":115},[52,69751,69752,69754,69756],{"class":54,"line":146},[52,69753,4022],{"class":622},[52,69755,54731],{"class":54231},[52,69757,54238],{"class":622},[52,69759,69760,69762,69764],{"class":54,"line":152},[52,69761,55075],{"class":622},[52,69763,4118],{"class":54231},[52,69765,54238],{"class":622},[52,69767,69768,69770,69772,69774,69776],{"class":54,"line":157},[52,69769,54272],{"class":622},[52,69771,1073],{"class":54231},[52,69773,56896],{"class":622},[52,69775,1073],{"class":54231},[52,69777,54238],{"class":622},[52,69779,69780,69782,69784,69786,69788],{"class":54,"line":173},[52,69781,54272],{"class":622},[52,69783,1073],{"class":54231},[52,69785,56915],{"class":622},[52,69787,1073],{"class":54231},[52,69789,54238],{"class":622},[52,69791,69792,69794,69796,69798,69800],{"class":54,"line":178},[52,69793,54272],{"class":622},[52,69795,1073],{"class":54231},[52,69797,56934],{"class":622},[52,69799,1073],{"class":54231},[52,69801,54238],{"class":622},[52,69803,69804,69806,69808,69810,69812],{"class":54,"line":184},[52,69805,54272],{"class":622},[52,69807,1073],{"class":54231},[52,69809,56953],{"class":622},[52,69811,1073],{"class":54231},[52,69813,54238],{"class":622},[52,69815,69816,69818,69820,69822,69824],{"class":54,"line":189},[52,69817,54272],{"class":622},[52,69819,1073],{"class":54231},[52,69821,56972],{"class":622},[52,69823,1073],{"class":54231},[52,69825,54238],{"class":622},[52,69827,69828,69830,69832,69835,69837],{"class":54,"line":201},[52,69829,54272],{"class":622},[52,69831,274],{"class":54231},[52,69833,69834],{"class":622},">我不需要变色\u003C\u002F",[52,69836,274],{"class":54231},[52,69838,54238],{"class":622},[52,69840,69841,69843,69845],{"class":54,"line":206},[52,69842,55347],{"class":622},[52,69844,4118],{"class":54231},[52,69846,54238],{"class":622},[52,69848,69849,69851,69853],{"class":54,"line":224},[52,69850,55075],{"class":622},[52,69852,54744],{"class":54231},[52,69854,54238],{"class":622},[52,69856,69857],{"class":54,"line":229},[52,69858,69859],{"class":332},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[52,69861,69862,69864,69866,69868,69870,69872,69874,69877],{"class":54,"line":241},[52,69863,14177],{"class":160},[52,69865,64222],{"class":90},[52,69867,16520],{"class":160},[52,69869,57326],{"class":622},[52,69871,57329],{"class":58},[52,69873,3121],{"class":622},[52,69875,69876],{"class":62},"'ul'",[52,69878,170],{"class":622},[52,69880,69881,69884,69886,69888,69890,69892,69894,69896,69898],{"class":54,"line":246},[52,69882,69883],{"class":622},"    ul.",[52,69885,60743],{"class":58},[52,69887,3121],{"class":622},[52,69889,60748],{"class":62},[52,69891,15391],{"class":622},[52,69893,57379],{"class":160},[52,69895,4629],{"class":622},[52,69897,3191],{"class":8172},[52,69899,15398],{"class":622},[52,69901,69902],{"class":54,"line":252},[52,69903,69904],{"class":332},"      \u002F\u002F alert(1)\n",[52,69906,69907],{"class":54,"line":257},[52,69908,69909],{"class":332},"      \u002F\u002F e.target就是我们点击的对象\n",[52,69911,69912],{"class":54,"line":266},[52,69913,69914],{"class":332},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[52,69916,69917],{"class":54,"line":4722},[52,69918,69919],{"class":332},"      \u002F\u002F e.target.style.color = 'red'\n",[52,69921,69922,69924,69926],{"class":54,"line":4727},[52,69923,61174],{"class":622},[52,69925,61177],{"class":58},[52,69927,69928],{"class":622},"(e)\n",[52,69930,69931],{"class":54,"line":4741},[52,69932,116],{"emptyLinePlaceholder":115},[52,69934,69935,69937,69940],{"class":54,"line":4746},[52,69936,61174],{"class":622},[52,69938,69939],{"class":58},"dir",[52,69941,69942],{"class":622},"(e.target)\n",[52,69944,69945],{"class":54,"line":5538},[52,69946,116],{"emptyLinePlaceholder":115},[52,69948,69949],{"class":54,"line":5552},[52,69950,69951],{"class":332},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[52,69953,69954],{"class":54,"line":5560},[52,69955,69956],{"class":332},"      \u002F\u002F 通过tagName来进行判断\n",[52,69958,69959,69961,69964,69966,69969],{"class":54,"line":5565},[52,69960,57410],{"class":160},[52,69962,69963],{"class":622}," (e.target.tagName ",[52,69965,57416],{"class":160},[52,69967,69968],{"class":62}," 'LI'",[52,69970,15398],{"class":622},[52,69972,69973,69976,69978],{"class":54,"line":5571},[52,69974,69975],{"class":622},"        e.target.style.color ",[52,69977,2099],{"class":160},[52,69979,69980],{"class":62}," 'red'\n",[52,69982,69983],{"class":54,"line":5577},[52,69984,55328],{"class":622},[52,69986,69987],{"class":54,"line":5582},[52,69988,36393],{"class":622},[52,69990,69991,69993,69995],{"class":54,"line":10904},[52,69992,55347],{"class":622},[52,69994,54744],{"class":54231},[52,69996,54238],{"class":622},[52,69998,69999,70001,70003],{"class":54,"line":10928},[52,70000,54716],{"class":622},[52,70002,54731],{"class":54231},[52,70004,54238],{"class":622},[52,70006,70007],{"class":54,"line":10933},[52,70008,116],{"emptyLinePlaceholder":115},[52,70010,70011,70013,70015],{"class":54,"line":10939},[52,70012,54716],{"class":622},[52,70014,53566],{"class":54231},[52,70016,54238],{"class":622},[274,70018,70019],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[274,70021,70022],{},"if(e.target.ragName==='P') {}",[274,70024,70025],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[274,70027,70028],{},"通过事件委托的方式实现tab栏切换改造：",[274,70030,70031],{},"一定要记住自定义属性！！！！！！",[274,70033,70034],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[274,70036,70037],{},"id是自定义的属性名",[274,70039,70040],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[19,70042,70044],{"className":53564,"code":70043,"language":53566,"meta":28,"style":28},"\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",[26,70045,70046,70056,70070,70074,70082,70096,70116,70136,70148,70156,70162,70172,70182,70186,70190,70196,70208,70220,70232,70248,70252,70256,70262,70274,70286,70298,70308,70318,70322,70326,70334,70346,70356,70368,70372,70376,70384,70394,70404,70414,70418,70422,70432,70446,70458,70462,70466,70478,70488,70504,70514,70518,70522,70536,70546,70556,70560,70564,70570,70584,70588,70592,70600,70610,70614,70618,70627,70637,70641,70649,70657,70661,70669,70683,70697,70709,70717,70756,70788,70820,70852,70884,70892,70900,70914,70948,70982,71016,71050,71084,71092,71100,71108,71113,71118,71137,71142,71162,71170,71175,71188,71209,71222,71226,71231,71236,71249,71269,71297,71301,71305,71309,71317,71325,71329],{"__ignoreMap":28},[52,70047,70048,70050,70052,70054],{"class":54,"line":55},[52,70049,54228],{"class":622},[52,70051,54232],{"class":54231},[52,70053,54235],{"class":58},[52,70055,54238],{"class":622},[52,70057,70058,70060,70062,70064,70066,70068],{"class":54,"line":69},[52,70059,4022],{"class":622},[52,70061,53566],{"class":54231},[52,70063,54247],{"class":58},[52,70065,2099],{"class":622},[52,70067,54252],{"class":62},[52,70069,54238],{"class":622},[52,70071,70072],{"class":54,"line":82},[52,70073,116],{"emptyLinePlaceholder":115},[52,70075,70076,70078,70080],{"class":54,"line":97},[52,70077,4022],{"class":622},[52,70079,54265],{"class":54231},[52,70081,54238],{"class":622},[52,70083,70084,70086,70088,70090,70092,70094],{"class":54,"line":112},[52,70085,55075],{"class":622},[52,70087,54275],{"class":54231},[52,70089,54278],{"class":58},[52,70091,2099],{"class":622},[52,70093,54283],{"class":62},[52,70095,62057],{"class":622},[52,70097,70098,70100,70102,70104,70106,70108,70110,70112,70114],{"class":54,"line":119},[52,70099,55075],{"class":622},[52,70101,54275],{"class":54231},[52,70103,54294],{"class":58},[52,70105,2099],{"class":622},[52,70107,54299],{"class":62},[52,70109,54302],{"class":58},[52,70111,2099],{"class":622},[52,70113,54307],{"class":62},[52,70115,62057],{"class":622},[52,70117,70118,70120,70122,70124,70126,70128,70130,70132,70134],{"class":54,"line":130},[52,70119,55075],{"class":622},[52,70121,54275],{"class":54231},[52,70123,17876],{"class":58},[52,70125,2099],{"class":622},[52,70127,54322],{"class":62},[52,70129,54302],{"class":58},[52,70131,2099],{"class":622},[52,70133,54329],{"class":62},[52,70135,62057],{"class":622},[52,70137,70138,70140,70142,70144,70146],{"class":54,"line":136},[52,70139,55075],{"class":622},[52,70141,54338],{"class":54231},[52,70143,66555],{"class":622},[52,70145,54338],{"class":54231},[52,70147,54238],{"class":622},[52,70149,70150,70152,70154],{"class":54,"line":141},[52,70151,55075],{"class":622},[52,70153,3015],{"class":54231},[52,70155,54238],{"class":622},[52,70157,70158,70160],{"class":54,"line":146},[52,70159,9359],{"class":54231},[52,70161,18528],{"class":622},[52,70163,70164,70166,70168,70170],{"class":54,"line":152},[52,70165,57636],{"class":90},[52,70167,54368],{"class":622},[52,70169,3306],{"class":90},[52,70171,4272],{"class":622},[52,70173,70174,70176,70178,70180],{"class":54,"line":157},[52,70175,57625],{"class":90},[52,70177,54368],{"class":622},[52,70179,3306],{"class":90},[52,70181,4272],{"class":622},[52,70183,70184],{"class":54,"line":173},[52,70185,5149],{"class":622},[52,70187,70188],{"class":54,"line":178},[52,70189,116],{"emptyLinePlaceholder":115},[52,70191,70192,70194],{"class":54,"line":184},[52,70193,66606],{"class":58},[52,70195,18528],{"class":622},[52,70197,70198,70200,70202,70204,70206],{"class":54,"line":189},[52,70199,57701],{"class":90},[52,70201,54368],{"class":622},[52,70203,66617],{"class":90},[52,70205,54423],{"class":160},[52,70207,4272],{"class":622},[52,70209,70210,70212,70214,70216,70218],{"class":54,"line":201},[52,70211,57715],{"class":90},[52,70213,54368],{"class":622},[52,70215,66630],{"class":90},[52,70217,54423],{"class":160},[52,70219,4272],{"class":622},[52,70221,70222,70224,70226,70228,70230],{"class":54,"line":206},[52,70223,57636],{"class":90},[52,70225,54368],{"class":622},[52,70227,3812],{"class":90},[52,70229,54423],{"class":160},[52,70231,4272],{"class":622},[52,70233,70234,70236,70238,70240,70242,70244,70246],{"class":54,"line":224},[52,70235,64907],{"class":90},[52,70237,54368],{"class":622},[52,70239,3332],{"class":90},[52,70241,54423],{"class":160},[52,70243,54452],{"class":90},[52,70245,65174],{"class":90},[52,70247,4272],{"class":622},[52,70249,70250],{"class":54,"line":229},[52,70251,5149],{"class":622},[52,70253,70254],{"class":54,"line":241},[52,70255,116],{"emptyLinePlaceholder":115},[52,70257,70258,70260],{"class":54,"line":246},[52,70259,66675],{"class":58},[52,70261,18528],{"class":622},[52,70263,70264,70266,70268,70270,70272],{"class":54,"line":252},[52,70265,57701],{"class":90},[52,70267,54368],{"class":622},[52,70269,3424],{"class":90},[52,70271,3441],{"class":160},[52,70273,4272],{"class":622},[52,70275,70276,70278,70280,70282,70284],{"class":54,"line":257},[52,70277,57715],{"class":90},[52,70279,54368],{"class":622},[52,70281,4019],{"class":90},[52,70283,54423],{"class":160},[52,70285,4272],{"class":622},[52,70287,70288,70290,70292,70294,70296],{"class":54,"line":266},[52,70289,60289],{"class":90},[52,70291,54368],{"class":622},[52,70293,4019],{"class":90},[52,70295,54423],{"class":160},[52,70297,4272],{"class":622},[52,70299,70300,70302,70304,70306],{"class":54,"line":4722},[52,70301,57939],{"class":90},[52,70303,54368],{"class":622},[52,70305,54408],{"class":90},[52,70307,4272],{"class":622},[52,70309,70310,70312,70314,70316],{"class":54,"line":4727},[52,70311,57950],{"class":90},[52,70313,54368],{"class":622},[52,70315,54599],{"class":90},[52,70317,4272],{"class":622},[52,70319,70320],{"class":54,"line":4741},[52,70321,5149],{"class":622},[52,70323,70324],{"class":54,"line":4746},[52,70325,116],{"emptyLinePlaceholder":115},[52,70327,70328,70330,70332],{"class":54,"line":5538},[52,70329,66675],{"class":58},[52,70331,66748],{"class":54231},[52,70333,18528],{"class":622},[52,70335,70336,70338,70340,70342,70344],{"class":54,"line":5552},[52,70337,57852],{"class":90},[52,70339,54368],{"class":622},[52,70341,3912],{"class":90},[52,70343,54423],{"class":160},[52,70345,4272],{"class":622},[52,70347,70348,70350,70352,70354],{"class":54,"line":5560},[52,70349,65264],{"class":90},[52,70351,54368],{"class":622},[52,70353,66771],{"class":90},[52,70355,4272],{"class":622},[52,70357,70358,70360,70362,70364,70366],{"class":54,"line":5565},[52,70359,64930],{"class":90},[52,70361,54368],{"class":622},[52,70363,3812],{"class":90},[52,70365,54423],{"class":160},[52,70367,4272],{"class":622},[52,70369,70370],{"class":54,"line":5571},[52,70371,5149],{"class":622},[52,70373,70374],{"class":54,"line":5577},[52,70375,116],{"emptyLinePlaceholder":115},[52,70377,70378,70380,70382],{"class":54,"line":5582},[52,70379,66675],{"class":58},[52,70381,64222],{"class":54231},[52,70383,18528],{"class":622},[52,70385,70386,70388,70390,70392],{"class":54,"line":10904},[52,70387,57662],{"class":90},[52,70389,54368],{"class":622},[52,70391,57667],{"class":90},[52,70393,4272],{"class":622},[52,70395,70396,70398,70400,70402],{"class":54,"line":10928},[52,70397,57939],{"class":90},[52,70399,54368],{"class":622},[52,70401,54408],{"class":90},[52,70403,4272],{"class":622},[52,70405,70406,70408,70410,70412],{"class":54,"line":10933},[52,70407,57950],{"class":90},[52,70409,54368],{"class":622},[52,70411,54511],{"class":90},[52,70413,4272],{"class":622},[52,70415,70416],{"class":54,"line":10939},[52,70417,5149],{"class":622},[52,70419,70420],{"class":54,"line":10966},[52,70421,116],{"emptyLinePlaceholder":115},[52,70423,70424,70426,70428,70430],{"class":54,"line":10971},[52,70425,66675],{"class":58},[52,70427,64222],{"class":54231},[52,70429,58005],{"class":54231},[52,70431,18528],{"class":622},[52,70433,70434,70436,70438,70440,70442,70444],{"class":54,"line":10977},[52,70435,57636],{"class":90},[52,70437,54368],{"class":622},[52,70439,3306],{"class":90},[52,70441,11906],{"class":90},[52,70443,54423],{"class":160},[52,70445,4272],{"class":622},[52,70447,70448,70450,70452,70454,70456],{"class":54,"line":10989},[52,70449,57852],{"class":90},[52,70451,54368],{"class":622},[52,70453,3661],{"class":90},[52,70455,54423],{"class":160},[52,70457,4272],{"class":622},[52,70459,70460],{"class":54,"line":11001},[52,70461,5149],{"class":622},[52,70463,70464],{"class":54,"line":11013},[52,70465,116],{"emptyLinePlaceholder":115},[52,70467,70468,70470,70472,70474,70476],{"class":54,"line":12672},[52,70469,66675],{"class":58},[52,70471,64222],{"class":54231},[52,70473,58005],{"class":54231},[52,70475,4377],{"class":54231},[52,70477,18528],{"class":622},[52,70479,70480,70482,70484,70486],{"class":54,"line":12697},[52,70481,66900],{"class":90},[52,70483,54368],{"class":622},[52,70485,57667],{"class":90},[52,70487,4272],{"class":622},[52,70489,70490,70492,70494,70496,70498,70500,70502],{"class":54,"line":12720},[52,70491,65162],{"class":90},[52,70493,54368],{"class":622},[52,70495,3194],{"class":90},[52,70497,54423],{"class":160},[52,70499,54452],{"class":90},[52,70501,66921],{"class":90},[52,70503,4272],{"class":622},[52,70505,70506,70508,70510,70512],{"class":54,"line":12744},[52,70507,60346],{"class":90},[52,70509,54368],{"class":622},[52,70511,65299],{"class":90},[52,70513,4272],{"class":622},[52,70515,70516],{"class":54,"line":12749},[52,70517,5149],{"class":622},[52,70519,70520],{"class":54,"line":12754},[52,70521,116],{"emptyLinePlaceholder":115},[52,70523,70524,70526,70528,70530,70532,70534],{"class":54,"line":12759},[52,70525,66675],{"class":58},[52,70527,64222],{"class":54231},[52,70529,58005],{"class":54231},[52,70531,4377],{"class":54231},[52,70533,66954],{"class":58},[52,70535,18528],{"class":622},[52,70537,70538,70540,70542,70544],{"class":54,"line":12768},[52,70539,64721],{"class":90},[52,70541,54368],{"class":622},[52,70543,66965],{"class":90},[52,70545,4272],{"class":622},[52,70547,70548,70550,70552,70554],{"class":54,"line":12773},[52,70549,60346],{"class":90},[52,70551,54368],{"class":622},[52,70553,66965],{"class":90},[52,70555,4272],{"class":622},[52,70557,70558],{"class":54,"line":12779},[52,70559,5149],{"class":622},[52,70561,70562],{"class":54,"line":12800},[52,70563,116],{"emptyLinePlaceholder":115},[52,70565,70566,70568],{"class":54,"line":12806},[52,70567,66990],{"class":58},[52,70569,18528],{"class":622},[52,70571,70572,70574,70576,70578,70580,70582],{"class":54,"line":12820},[52,70573,57625],{"class":90},[52,70575,54368],{"class":622},[52,70577,3306],{"class":90},[52,70579,67003],{"class":90},[52,70581,54423],{"class":160},[52,70583,4272],{"class":622},[52,70585,70586],{"class":54,"line":12826},[52,70587,5149],{"class":622},[52,70589,70590],{"class":54,"line":12853},[52,70591,116],{"emptyLinePlaceholder":115},[52,70593,70594,70596,70598],{"class":54,"line":12862},[52,70595,66990],{"class":58},[52,70597,65104],{"class":58},[52,70599,18528],{"class":622},[52,70601,70602,70604,70606,70608],{"class":54,"line":12868},[52,70603,57939],{"class":90},[52,70605,54368],{"class":622},[52,70607,57667],{"class":90},[52,70609,4272],{"class":622},[52,70611,70612],{"class":54,"line":12876},[52,70613,5149],{"class":622},[52,70615,70616],{"class":54,"line":12881},[52,70617,116],{"emptyLinePlaceholder":115},[52,70619,70620,70622,70625],{"class":54,"line":19560},[52,70621,66990],{"class":58},[52,70623,70624],{"class":58}," .active",[52,70626,18528],{"class":622},[52,70628,70629,70631,70633,70635],{"class":54,"line":19566},[52,70630,57939],{"class":90},[52,70632,54368],{"class":622},[52,70634,63799],{"class":90},[52,70636,4272],{"class":622},[52,70638,70639],{"class":54,"line":19589},[52,70640,5149],{"class":622},[52,70642,70643,70645,70647],{"class":54,"line":19595},[52,70644,55347],{"class":622},[52,70646,3015],{"class":54231},[52,70648,54238],{"class":622},[52,70650,70651,70653,70655],{"class":54,"line":19618},[52,70652,54716],{"class":622},[52,70654,54265],{"class":54231},[52,70656,54238],{"class":622},[52,70658,70659],{"class":54,"line":19632},[52,70660,116],{"emptyLinePlaceholder":115},[52,70662,70663,70665,70667],{"class":54,"line":19652},[52,70664,4022],{"class":622},[52,70666,54731],{"class":54231},[52,70668,54238],{"class":622},[52,70670,70671,70673,70675,70677,70679,70681],{"class":54,"line":19658},[52,70672,55075],{"class":622},[52,70674,54542],{"class":54231},[52,70676,56416],{"class":58},[52,70678,2099],{"class":622},[52,70680,67105],{"class":62},[52,70682,54238],{"class":622},[52,70684,70685,70687,70689,70691,70693,70695],{"class":54,"line":19669},[52,70686,54272],{"class":622},[52,70688,54542],{"class":54231},[52,70690,56416],{"class":58},[52,70692,2099],{"class":622},[52,70694,67120],{"class":62},[52,70696,54238],{"class":622},[52,70698,70699,70701,70703,70705,70707],{"class":54,"line":19692},[52,70700,58164],{"class":622},[52,70702,30],{"class":54231},[52,70704,67131],{"class":622},[52,70706,30],{"class":54231},[52,70708,54238],{"class":622},[52,70710,70711,70713,70715],{"class":54,"line":19714},[52,70712,58164],{"class":622},[52,70714,4118],{"class":54231},[52,70716,54238],{"class":622},[52,70718,70719,70721,70723,70725,70727,70729,70731,70733,70735,70737,70739,70741,70743,70746,70748,70750,70752,70754],{"class":54,"line":19719},[52,70720,58232],{"class":622},[52,70722,1073],{"class":54231},[52,70724,63982],{"class":622},[52,70726,300],{"class":54231},[52,70728,56416],{"class":58},[52,70730,2099],{"class":622},[52,70732,62636],{"class":62},[52,70734,63987],{"class":58},[52,70736,2099],{"class":622},[52,70738,67166],{"class":62},[52,70740,56881],{"class":58},[52,70742,2099],{"class":622},[52,70744,70745],{"class":62},"\"0\"",[52,70747,67169],{"class":622},[52,70749,300],{"class":54231},[52,70751,58244],{"class":622},[52,70753,1073],{"class":54231},[52,70755,54238],{"class":622},[52,70757,70758,70760,70762,70764,70766,70768,70770,70772,70774,70776,70778,70780,70782,70784,70786],{"class":54,"line":19725},[52,70759,58232],{"class":622},[52,70761,1073],{"class":54231},[52,70763,63982],{"class":622},[52,70765,300],{"class":54231},[52,70767,63987],{"class":58},[52,70769,2099],{"class":622},[52,70771,67166],{"class":62},[52,70773,56881],{"class":58},[52,70775,2099],{"class":622},[52,70777,6637],{"class":62},[52,70779,67196],{"class":622},[52,70781,300],{"class":54231},[52,70783,58244],{"class":622},[52,70785,1073],{"class":54231},[52,70787,54238],{"class":622},[52,70789,70790,70792,70794,70796,70798,70800,70802,70804,70806,70808,70810,70812,70814,70816,70818],{"class":54,"line":19739},[52,70791,58232],{"class":622},[52,70793,1073],{"class":54231},[52,70795,63982],{"class":622},[52,70797,300],{"class":54231},[52,70799,63987],{"class":58},[52,70801,2099],{"class":622},[52,70803,67166],{"class":62},[52,70805,56881],{"class":58},[52,70807,2099],{"class":622},[52,70809,6660],{"class":62},[52,70811,67223],{"class":622},[52,70813,300],{"class":54231},[52,70815,58244],{"class":622},[52,70817,1073],{"class":54231},[52,70819,54238],{"class":622},[52,70821,70822,70824,70826,70828,70830,70832,70834,70836,70838,70840,70842,70844,70846,70848,70850],{"class":54,"line":19752},[52,70823,58232],{"class":622},[52,70825,1073],{"class":54231},[52,70827,63982],{"class":622},[52,70829,300],{"class":54231},[52,70831,63987],{"class":58},[52,70833,2099],{"class":622},[52,70835,67166],{"class":62},[52,70837,56881],{"class":58},[52,70839,2099],{"class":622},[52,70841,6673],{"class":62},[52,70843,67250],{"class":622},[52,70845,300],{"class":54231},[52,70847,58244],{"class":622},[52,70849,1073],{"class":54231},[52,70851,54238],{"class":622},[52,70853,70854,70856,70858,70860,70862,70864,70866,70868,70870,70872,70874,70876,70878,70880,70882],{"class":54,"line":19757},[52,70855,58232],{"class":622},[52,70857,1073],{"class":54231},[52,70859,63982],{"class":622},[52,70861,300],{"class":54231},[52,70863,63987],{"class":58},[52,70865,2099],{"class":622},[52,70867,67166],{"class":62},[52,70869,56881],{"class":58},[52,70871,2099],{"class":622},[52,70873,6686],{"class":62},[52,70875,67277],{"class":622},[52,70877,300],{"class":54231},[52,70879,58244],{"class":622},[52,70881,1073],{"class":54231},[52,70883,54238],{"class":622},[52,70885,70886,70888,70890],{"class":54,"line":19771},[52,70887,58337],{"class":622},[52,70889,4118],{"class":54231},[52,70891,54238],{"class":622},[52,70893,70894,70896,70898],{"class":54,"line":19776},[52,70895,54707],{"class":622},[52,70897,54542],{"class":54231},[52,70899,54238],{"class":622},[52,70901,70902,70904,70906,70908,70910,70912],{"class":54,"line":19782},[52,70903,54272],{"class":622},[52,70905,54542],{"class":54231},[52,70907,56416],{"class":58},[52,70909,2099],{"class":622},[52,70911,67314],{"class":62},[52,70913,54238],{"class":622},[52,70915,70916,70918,70920,70922,70924,70926,70928,70930,70932,70934,70936,70938,70940,70942,70944,70946],{"class":54,"line":19787},[52,70917,58164],{"class":622},[52,70919,54542],{"class":54231},[52,70921,56416],{"class":58},[52,70923,2099],{"class":622},[52,70925,67329],{"class":62},[52,70927,63982],{"class":622},[52,70929,280],{"class":54231},[52,70931,58169],{"class":58},[52,70933,2099],{"class":622},[52,70935,67340],{"class":62},[52,70937,58177],{"class":58},[52,70939,2099],{"class":622},[52,70941,10608],{"class":62},[52,70943,67349],{"class":622},[52,70945,54542],{"class":54231},[52,70947,54238],{"class":622},[52,70949,70950,70952,70954,70956,70958,70960,70962,70964,70966,70968,70970,70972,70974,70976,70978,70980],{"class":54,"line":19801},[52,70951,58164],{"class":622},[52,70953,54542],{"class":54231},[52,70955,56416],{"class":58},[52,70957,2099],{"class":622},[52,70959,65553],{"class":62},[52,70961,63982],{"class":622},[52,70963,280],{"class":54231},[52,70965,58169],{"class":58},[52,70967,2099],{"class":622},[52,70969,67376],{"class":62},[52,70971,58177],{"class":58},[52,70973,2099],{"class":622},[52,70975,10608],{"class":62},[52,70977,67349],{"class":622},[52,70979,54542],{"class":54231},[52,70981,54238],{"class":622},[52,70983,70984,70986,70988,70990,70992,70994,70996,70998,71000,71002,71004,71006,71008,71010,71012,71014],{"class":54,"line":19806},[52,70985,58164],{"class":622},[52,70987,54542],{"class":54231},[52,70989,56416],{"class":58},[52,70991,2099],{"class":622},[52,70993,65553],{"class":62},[52,70995,63982],{"class":622},[52,70997,280],{"class":54231},[52,70999,58169],{"class":58},[52,71001,2099],{"class":622},[52,71003,67411],{"class":62},[52,71005,58177],{"class":58},[52,71007,2099],{"class":622},[52,71009,10608],{"class":62},[52,71011,67349],{"class":622},[52,71013,54542],{"class":54231},[52,71015,54238],{"class":622},[52,71017,71018,71020,71022,71024,71026,71028,71030,71032,71034,71036,71038,71040,71042,71044,71046,71048],{"class":54,"line":19811},[52,71019,58164],{"class":622},[52,71021,54542],{"class":54231},[52,71023,56416],{"class":58},[52,71025,2099],{"class":622},[52,71027,65553],{"class":62},[52,71029,63982],{"class":622},[52,71031,280],{"class":54231},[52,71033,58169],{"class":58},[52,71035,2099],{"class":622},[52,71037,67446],{"class":62},[52,71039,58177],{"class":58},[52,71041,2099],{"class":622},[52,71043,10608],{"class":62},[52,71045,67349],{"class":622},[52,71047,54542],{"class":54231},[52,71049,54238],{"class":622},[52,71051,71052,71054,71056,71058,71060,71062,71064,71066,71068,71070,71072,71074,71076,71078,71080,71082],{"class":54,"line":19825},[52,71053,58164],{"class":622},[52,71055,54542],{"class":54231},[52,71057,56416],{"class":58},[52,71059,2099],{"class":622},[52,71061,65553],{"class":62},[52,71063,63982],{"class":622},[52,71065,280],{"class":54231},[52,71067,58169],{"class":58},[52,71069,2099],{"class":622},[52,71071,67481],{"class":62},[52,71073,58177],{"class":58},[52,71075,2099],{"class":622},[52,71077,10608],{"class":62},[52,71079,67349],{"class":622},[52,71081,54542],{"class":54231},[52,71083,54238],{"class":622},[52,71085,71086,71088,71090],{"class":54,"line":19837},[52,71087,54707],{"class":622},[52,71089,54542],{"class":54231},[52,71091,54238],{"class":622},[52,71093,71094,71096,71098],{"class":54,"line":19842},[52,71095,55347],{"class":622},[52,71097,54542],{"class":54231},[52,71099,54238],{"class":622},[52,71101,71102,71104,71106],{"class":54,"line":19855},[52,71103,55075],{"class":622},[52,71105,54744],{"class":54231},[52,71107,54238],{"class":622},[52,71109,71110],{"class":54,"line":19860},[52,71111,71112],{"class":332},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[52,71114,71115],{"class":54,"line":19865},[52,71116,71117],{"class":332},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[52,71119,71120,71122,71124,71126,71128,71130,71132,71135],{"class":54,"line":19870},[52,71121,14177],{"class":160},[52,71123,64222],{"class":90},[52,71125,16520],{"class":160},[52,71127,57326],{"class":622},[52,71129,57329],{"class":58},[52,71131,3121],{"class":622},[52,71133,71134],{"class":62},"'.tab-nav ul'",[52,71136,170],{"class":622},[52,71138,71139],{"class":54,"line":19883},[52,71140,71141],{"class":332},"    \u002F\u002F 2.添加事件\n",[52,71143,71144,71146,71148,71150,71152,71154,71156,71158,71160],{"class":54,"line":19888},[52,71145,69883],{"class":622},[52,71147,60743],{"class":58},[52,71149,3121],{"class":622},[52,71151,60748],{"class":62},[52,71153,15391],{"class":622},[52,71155,57379],{"class":160},[52,71157,4629],{"class":622},[52,71159,3191],{"class":8172},[52,71161,15398],{"class":622},[52,71163,71164,71166,71168],{"class":54,"line":35565},[52,71165,61174],{"class":622},[52,71167,69939],{"class":58},[52,71169,69942],{"class":622},[52,71171,71172],{"class":54,"line":35571},[52,71173,71174],{"class":332},"      \u002F\u002Fe.targer是我们点击的对象\n",[52,71176,71177,71179,71181,71183,71186],{"class":54,"line":35577},[52,71178,57410],{"class":160},[52,71180,69963],{"class":622},[52,71182,57416],{"class":160},[52,71184,71185],{"class":62}," 'A'",[52,71187,15398],{"class":622},[52,71189,71190,71192,71194,71196,71199,71201,71203,71205,71207],{"class":54,"line":35583},[52,71191,54856],{"class":622},[52,71193,57329],{"class":58},[52,71195,3121],{"class":622},[52,71197,71198],{"class":62},"'.active'",[52,71200,59933],{"class":622},[52,71202,59936],{"class":58},[52,71204,3121],{"class":622},[52,71206,67643],{"class":62},[52,71208,170],{"class":622},[52,71210,71211,71214,71216,71218,71220],{"class":54,"line":35589},[52,71212,71213],{"class":622},"        e.target.classList.",[52,71215,8290],{"class":58},[52,71217,3121],{"class":622},[52,71219,67643],{"class":62},[52,71221,170],{"class":622},[52,71223,71224],{"class":54,"line":35600},[52,71225,116],{"emptyLinePlaceholder":115},[52,71227,71228],{"class":54,"line":35606},[52,71229,71230],{"class":332},"        \u002F\u002F 下面大盒子模块\n",[52,71232,71233],{"class":54,"line":35626},[52,71234,71235],{"class":332},"        \u002F\u002F console.log(e.target.dataset.id)\n",[52,71237,71238,71240,71242,71244,71246],{"class":54,"line":35632},[52,71239,64200],{"class":160},[52,71241,5992],{"class":90},[52,71243,16520],{"class":160},[52,71245,48498],{"class":160},[52,71247,71248],{"class":622},"e.target.dataset.id\n",[52,71250,71251,71253,71255,71257,71259,71261,71263,71265,71267],{"class":54,"line":35643},[52,71252,54856],{"class":622},[52,71254,57329],{"class":58},[52,71256,3121],{"class":622},[52,71258,67691],{"class":62},[52,71260,59933],{"class":622},[52,71262,59936],{"class":58},[52,71264,3121],{"class":622},[52,71266,67643],{"class":62},[52,71268,170],{"class":622},[52,71270,71271,71273,71275,71277,71279,71281,71283,71285,71287,71289,71291,71293,71295],{"class":54,"line":35649},[52,71272,54856],{"class":622},[52,71274,57329],{"class":58},[52,71276,3121],{"class":622},[52,71278,67717],{"class":62},[52,71280,3554],{"class":622},[52,71282,48498],{"class":160},[52,71284,28064],{"class":90},[52,71286,59962],{"class":62},[52,71288,59933],{"class":622},[52,71290,8290],{"class":58},[52,71292,3121],{"class":622},[52,71294,67643],{"class":62},[52,71296,170],{"class":622},[52,71298,71299],{"class":54,"line":35655},[52,71300,116],{"emptyLinePlaceholder":115},[52,71302,71303],{"class":54,"line":35661},[52,71304,55328],{"class":622},[52,71306,71307],{"class":54,"line":35667},[52,71308,36393],{"class":622},[52,71310,71311,71313,71315],{"class":54,"line":35673},[52,71312,55347],{"class":622},[52,71314,54744],{"class":54231},[52,71316,54238],{"class":622},[52,71318,71319,71321,71323],{"class":54,"line":35679},[52,71320,54716],{"class":622},[52,71322,54731],{"class":54231},[52,71324,54238],{"class":622},[52,71326,71327],{"class":54,"line":35685},[52,71328,116],{"emptyLinePlaceholder":115},[52,71330,71331,71333,71335],{"class":54,"line":35705},[52,71332,54716],{"class":622},[52,71334,53566],{"class":54231},[52,71336,54238],{"class":622},[30,71338,71340],{"id":71339},"_333-页面加载事件","3.3.3 页面加载事件",[1070,71342,71343],{},[1073,71344,71345],{},"load",[274,71347,71348],{},[280,71349],{"alt":28,"src":71350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[274,71352,71353],{},"window代表整个窗口，比document还要大",[274,71355,71356],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[274,71358,71359],{},"img.addEventListener('load', function () {",[274,71361,71362],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[274,71364,55394],{},[1070,71366,71367],{"start":69},[1073,71368,71369],{},"DOMContentLoaded",[274,71371,71372],{},[280,71373],{"alt":28,"src":71374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[274,71376,71377],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[30,71379,71381],{"id":71380},"_334-元素滚动事件","3.3.4 元素滚动事件",[274,71383,71384],{},[280,71385],{"alt":28,"src":71386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[274,71388,71389],{},[280,71390],{"alt":28,"src":71391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[274,71393,71394],{},[280,71395],{"alt":28,"src":71396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[274,71398,71399],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[274,71401,71402],{},"获得的是数字型数据，不带单位",[274,71404,71405],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[274,71407,71408],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[274,71410,71411],{},"它是通过document.documentElement来获取",[274,71413,71414],{},[280,71415],{"alt":28,"src":71416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[274,71418,71419],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[30,71421,71423],{"id":71422},"_335-页面缩放事件","3.3.5 页面缩放事件",[274,71425,71426],{},[280,71427],{"alt":28,"src":71428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[274,71430,71431],{},[280,71432],{"alt":28,"src":71433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[30,71435,71437],{"id":71436},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[274,71439,71440],{},[280,71441],{"alt":28,"src":71442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[274,71444,71445],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[274,71447,71448],{},[280,71449],{"alt":28,"src":71450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[274,71452,71453],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[274,71455,71456],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[274,71458,71459],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[274,71461,71462],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[274,71464,71465],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[274,71467,71468],{},[280,71469],{"alt":28,"src":71470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[274,71472,71473],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[274,71475,71476],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[274,71478,71479],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[274,71481,71482],{},"e.pageX-box.getBoundingClientRect()",[30,71484,71486],{"id":71485},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[274,71488,71489],{},[280,71490],{"alt":28,"src":71491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[274,71493,71494],{},"这个是相对于视口来说的，它是个方法，不是属性值",[30,71496,71498],{"id":71497},"_338-总结","3.3.8 总结",[274,71500,71501],{},[280,71502],{"alt":28,"src":71503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[274,71505,71506],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[274,71508,71509],{},"修改盒子的宽高只能通过width和height来实现",[30,71511,71513],{"id":71512},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[19,71515,71517],{"className":53564,"code":71516,"language":53566,"meta":28,"style":28},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[26,71518,71519,71524,71529,71534,71539],{"__ignoreMap":28},[52,71520,71521],{"class":54,"line":55},[52,71522,71523],{"class":622},"\u002F* 页面滑动 *\u002F\n",[52,71525,71526],{"class":54,"line":69},[52,71527,71528],{"class":622},"html {\n",[52,71530,71531],{"class":54,"line":82},[52,71532,71533],{"class":622},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[52,71535,71536],{"class":54,"line":97},[52,71537,71538],{"class":622},"  scroll-behavior: smooth;\n",[52,71540,71541],{"class":54,"line":112},[52,71542,4543],{"class":622},[274,71544,71545],{},"默认是auto",[30,71547,71549],{"id":71548},"_3310-日期对象","3.3.10 日期对象",[1486,71551,71553],{"id":71552},"_33101-实例化","3.3.10.1 实例化",[274,71555,71556],{},[280,71557],{"alt":28,"src":71558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[1486,71560,71562],{"id":71561},"_33102-时期对象方法","3.3.10.2 时期对象方法",[274,71564,71565],{},[280,71566],{"alt":28,"src":71567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[274,71569,71570],{},"月份+1",[274,71572,71573],{},"老外认为第一天为0，星期天",[274,71575,71576],{},"方法使用的时候必须要跟括号",[274,71578,71579],{},"快速获得日期",[274,71581,71582],{},"\u002F\u002F 得到年月日",[274,71584,71585],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[274,71587,71588],{},"\u002F\u002F 得到当地日期",[274,71590,71591],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[274,71593,71594],{},"\u002F\u002F 得到当地时间",[274,71596,71597],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[274,71599,71600],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[274,71602,71603],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54744,71605,71606],{},"\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",[274,71608,71609],{},"学会去封装函数！",[1486,71611,71613],{"id":71612},"_33103-时间戳","3.3.10.3 时间戳",[274,71615,71616],{},[280,71617],{"alt":28,"src":71618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[274,71620,71621],{},[280,71622],{"alt":28,"src":71623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[274,71625,71626],{},"三种方法记住一个就可以",[30,71628,71630],{"id":71629},"_3311-节点操作","3.3.11 节点操作",[1486,71632,71634],{"id":71633},"_33111-dom节点","3.3.11.1 DOM节点",[274,71636,71637],{},[280,71638],{"alt":28,"src":71639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[274,71641,71642],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[1486,71644,71646],{"id":71645},"_33112-查找节点","3.3.11.2 查找节点",[274,71648,71649],{},"前边的document.querySelector()是获取的元素",[274,71651,71652],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[274,71654,71655],{},[280,71656],{"alt":28,"src":71657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1070,71659,71660],{},[1073,71661,71662],{},"父节点",[274,71664,71665],{},[280,71666],{"alt":28,"src":71667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1070,71669,71670],{"start":69},[1073,71671,71672],{},"子节点",[274,71674,71675],{},[280,71676],{"alt":28,"src":71677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[274,71679,71680],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[274,71682,71683],{},"children获得的是伪数组，是亲儿子",[1070,71685,71686],{"start":82},[1073,71687,71688],{},"兄弟节点",[274,71690,71691],{},[280,71692],{"alt":28,"src":71693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[1486,71695,71697],{"id":71696},"_33113-增加节点","3.3.11.3 增加节点",[274,71699,71700],{},[280,71701],{"alt":28,"src":71702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[274,71704,71705],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[274,71707,71708],{},[280,71709],{"alt":28,"src":71710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[274,71712,71713],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[274,71715,71716],{},"下面是写法的部分展示，就按照下边的格式来写",[274,71718,71719],{},"例：",[54744,71721,71722],{},"\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",[274,71724,71725],{},[280,71726],{"alt":28,"src":71727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[274,71729,71730],{},"false只克隆标签，里边的内容不会克隆过来",[19,71732,71734],{"className":53564,"code":71733,"language":53566,"meta":28,"style":28},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[26,71735,71736],{"__ignoreMap":28},[52,71737,71738],{"class":54,"line":55},[52,71739,71733],{"class":622},[1486,71741,71743],{"id":71742},"_33114-删除节点","3.3.11.4 删除节点",[274,71745,71746],{},[280,71747],{"alt":28,"src":71748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[274,71750,71751],{},"父亲删儿子",[274,71753,71754],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[30,71756,71758],{"id":71757},"_3312-m端事件","3.3.12 M端事件",[274,71760,71761],{},"M端就是移动端",[274,71763,71764],{},[280,71765],{"alt":28,"src":71766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[30,71768,71770],{"id":71769},"_3313-插件","3.3.13 插件",[274,71772,71773],{},"要熟悉官网！！！",[274,71775,71776],{},[300,71777,71778],{"href":71778,"rel":71779},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[304],[274,71781,71782],{},[300,71783,71784],{"href":71784,"rel":71785},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[304],[30,71787,71789],{"id":71788},"_3314-学生信息表","3.3.14 学生信息表",[1070,71791,71792,71795,71798,71801,71804,71807,71810,71813],{},[1073,71793,71794],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[1073,71796,71797],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[1073,71799,71800],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[1073,71802,71803],{},"用好表单元素自带的属性，value,name等",[1073,71805,71806],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[1073,71808,71809],{},"不要忘记事件对象",[1073,71811,71812],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[1073,71814,71815],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[274,71817,71818],{},"结构：",[19,71820,71822],{"className":53564,"code":71821,"language":53566,"meta":28,"style":28},"\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",[26,71823,71824,71834,71848,71852,71860,71874,71894,71915,71928,71952,71960,71964,71972,71985,72006,72034,72062,72067,72089,72109,72128,72136,72164,72186,72206,72226,72246,72266,72286,72294,72314,72322,72326,72339,72347,72355,72363,72376,72389,72402,72415,72428,72441,72454,72462,72470,72478,72483,72488,72493,72498,72503,72508,72513,72518,72523,72528,72533,72538,72543,72551,72559,72567,72571,72591,72610,72630,72650,72670,72690,72694,72699,72719,72724,72734,72739,72744,72764,72786,72791,72801,72805,72809,72814,72819,72848,72862,72877,72881,72885,72889,72894,72905,72918,72923,72928,72933,72938,72943,72947,72952,72957,72966,72971,72976,72988,72993,73000,73004,73009,73019,73024,73034,73039,73067,73088,73098,73118,73135,73152,73169,73186,73203,73207,73217,73222,73227,73232,73243,73247,73251,73255,73260,73265,73286,73298,73303,73308,73313,73327,73332,73339,73343,73347,73355,73359,73367,73371],{"__ignoreMap":28},[52,71825,71826,71828,71830,71832],{"class":54,"line":55},[52,71827,54228],{"class":622},[52,71829,54232],{"class":54231},[52,71831,54235],{"class":58},[52,71833,54238],{"class":622},[52,71835,71836,71838,71840,71842,71844,71846],{"class":54,"line":69},[52,71837,4022],{"class":622},[52,71839,53566],{"class":54231},[52,71841,54247],{"class":58},[52,71843,2099],{"class":622},[52,71845,54252],{"class":62},[52,71847,54238],{"class":622},[52,71849,71850],{"class":54,"line":82},[52,71851,116],{"emptyLinePlaceholder":115},[52,71853,71854,71856,71858],{"class":54,"line":97},[52,71855,4022],{"class":622},[52,71857,54265],{"class":54231},[52,71859,54238],{"class":622},[52,71861,71862,71864,71866,71868,71870,71872],{"class":54,"line":112},[52,71863,55075],{"class":622},[52,71865,54275],{"class":54231},[52,71867,54278],{"class":58},[52,71869,2099],{"class":622},[52,71871,54283],{"class":62},[52,71873,62057],{"class":622},[52,71875,71876,71878,71880,71882,71884,71886,71888,71890,71892],{"class":54,"line":119},[52,71877,55075],{"class":622},[52,71879,54275],{"class":54231},[52,71881,17876],{"class":58},[52,71883,2099],{"class":622},[52,71885,54322],{"class":62},[52,71887,54302],{"class":58},[52,71889,2099],{"class":622},[52,71891,54329],{"class":62},[52,71893,62057],{"class":622},[52,71895,71896,71898,71900,71902,71904,71906,71908,71910,71913],{"class":54,"line":130},[52,71897,55075],{"class":622},[52,71899,54275],{"class":54231},[52,71901,54294],{"class":58},[52,71903,2099],{"class":622},[52,71905,54299],{"class":62},[52,71907,54302],{"class":58},[52,71909,2099],{"class":622},[52,71911,71912],{"class":62},"\"ie=edge\"",[52,71914,62057],{"class":622},[52,71916,71917,71919,71921,71924,71926],{"class":54,"line":136},[52,71918,55075],{"class":622},[52,71920,54338],{"class":54231},[52,71922,71923],{"class":622},">学生信息管理\u003C\u002F",[52,71925,54338],{"class":54231},[52,71927,54238],{"class":622},[52,71929,71930,71932,71935,71938,71940,71943,71945,71947,71950],{"class":54,"line":141},[52,71931,55075],{"class":622},[52,71933,71934],{"class":54231},"link",[52,71936,71937],{"class":58}," rel",[52,71939,2099],{"class":622},[52,71941,71942],{"class":62},"\"stylesheet\"",[52,71944,63987],{"class":58},[52,71946,2099],{"class":622},[52,71948,71949],{"class":62},"\"css\u002Findex.css\"",[52,71951,62057],{"class":622},[52,71953,71954,71956,71958],{"class":54,"line":146},[52,71955,54716],{"class":622},[52,71957,54265],{"class":54231},[52,71959,54238],{"class":622},[52,71961,71962],{"class":54,"line":152},[52,71963,116],{"emptyLinePlaceholder":115},[52,71965,71966,71968,71970],{"class":54,"line":157},[52,71967,4022],{"class":622},[52,71969,54731],{"class":54231},[52,71971,54238],{"class":622},[52,71973,71974,71976,71978,71981,71983],{"class":54,"line":173},[52,71975,55075],{"class":622},[52,71977,10],{"class":54231},[52,71979,71980],{"class":622},">新增学员\u003C\u002F",[52,71982,10],{"class":54231},[52,71984,54238],{"class":622},[52,71986,71987,71989,71991,71993,71995,71997,72000,72002,72004],{"class":54,"line":178},[52,71988,55075],{"class":622},[52,71990,69554],{"class":54231},[52,71992,56416],{"class":58},[52,71994,2099],{"class":622},[52,71996,65594],{"class":62},[52,71998,71999],{"class":58}," autocomplete",[52,72001,2099],{"class":622},[52,72003,34708],{"class":62},[52,72005,54238],{"class":622},[52,72007,72008,72011,72013,72015,72017,72019,72021,72023,72026,72028,72030,72032],{"class":54,"line":184},[52,72009,72010],{"class":622},"    姓名：\u003C",[52,72012,56751],{"class":54231},[52,72014,56754],{"class":58},[52,72016,2099],{"class":622},[52,72018,65629],{"class":62},[52,72020,56416],{"class":58},[52,72022,2099],{"class":622},[52,72024,72025],{"class":62},"\"uname\"",[52,72027,17876],{"class":58},[52,72029,2099],{"class":622},[52,72031,72025],{"class":62},[52,72033,62057],{"class":622},[52,72035,72036,72039,72041,72043,72045,72047,72049,72051,72054,72056,72058,72060],{"class":54,"line":189},[52,72037,72038],{"class":622},"    年龄：\u003C",[52,72040,56751],{"class":54231},[52,72042,56754],{"class":58},[52,72044,2099],{"class":622},[52,72046,65629],{"class":62},[52,72048,56416],{"class":58},[52,72050,2099],{"class":622},[52,72052,72053],{"class":62},"\"age\"",[52,72055,17876],{"class":58},[52,72057,2099],{"class":622},[52,72059,72053],{"class":62},[52,72061,62057],{"class":622},[52,72063,72064],{"class":54,"line":201},[52,72065,72066],{"class":622},"    性别:\n",[52,72068,72069,72071,72074,72076,72078,72081,72083,72085,72087],{"class":54,"line":206},[52,72070,54272],{"class":622},[52,72072,72073],{"class":54231},"select",[52,72075,17876],{"class":58},[52,72077,2099],{"class":622},[52,72079,72080],{"class":62},"\"gender\"",[52,72082,56416],{"class":58},[52,72084,2099],{"class":622},[52,72086,72080],{"class":62},[52,72088,54238],{"class":622},[52,72090,72091,72093,72096,72098,72100,72102,72105,72107],{"class":54,"line":224},[52,72092,58164],{"class":622},[52,72094,72095],{"class":54231},"option",[52,72097,69580],{"class":58},[52,72099,2099],{"class":622},[52,72101,12917],{"class":62},[52,72103,72104],{"class":622},">男\u003C\u002F",[52,72106,72095],{"class":54231},[52,72108,54238],{"class":622},[52,72110,72111,72113,72115,72117,72119,72121,72124,72126],{"class":54,"line":229},[52,72112,58164],{"class":622},[52,72114,72095],{"class":54231},[52,72116,69580],{"class":58},[52,72118,2099],{"class":622},[52,72120,12986],{"class":62},[52,72122,72123],{"class":622},">女\u003C\u002F",[52,72125,72095],{"class":54231},[52,72127,54238],{"class":622},[52,72129,72130,72132,72134],{"class":54,"line":241},[52,72131,54707],{"class":622},[52,72133,72073],{"class":54231},[52,72135,54238],{"class":622},[52,72137,72138,72141,72143,72145,72147,72149,72151,72153,72156,72158,72160,72162],{"class":54,"line":246},[52,72139,72140],{"class":622},"    薪资：\u003C",[52,72142,56751],{"class":54231},[52,72144,56754],{"class":58},[52,72146,2099],{"class":622},[52,72148,65629],{"class":62},[52,72150,56416],{"class":58},[52,72152,2099],{"class":622},[52,72154,72155],{"class":62},"\"salary\"",[52,72157,17876],{"class":58},[52,72159,2099],{"class":622},[52,72161,72155],{"class":62},[52,72163,62057],{"class":622},[52,72165,72166,72169,72171,72173,72175,72178,72180,72182,72184],{"class":54,"line":252},[52,72167,72168],{"class":622},"    就业城市：\u003C",[52,72170,72073],{"class":54231},[52,72172,17876],{"class":58},[52,72174,2099],{"class":622},[52,72176,72177],{"class":62},"\"city\"",[52,72179,56416],{"class":58},[52,72181,2099],{"class":622},[52,72183,72177],{"class":62},[52,72185,54238],{"class":622},[52,72187,72188,72190,72192,72194,72196,72199,72202,72204],{"class":54,"line":257},[52,72189,58164],{"class":622},[52,72191,72095],{"class":54231},[52,72193,69580],{"class":58},[52,72195,2099],{"class":622},[52,72197,72198],{"class":62},"\"北京\"",[52,72200,72201],{"class":622},">北京\u003C\u002F",[52,72203,72095],{"class":54231},[52,72205,54238],{"class":622},[52,72207,72208,72210,72212,72214,72216,72219,72222,72224],{"class":54,"line":266},[52,72209,58164],{"class":622},[52,72211,72095],{"class":54231},[52,72213,69580],{"class":58},[52,72215,2099],{"class":622},[52,72217,72218],{"class":62},"\"上海\"",[52,72220,72221],{"class":622},">上海\u003C\u002F",[52,72223,72095],{"class":54231},[52,72225,54238],{"class":622},[52,72227,72228,72230,72232,72234,72236,72239,72242,72244],{"class":54,"line":4722},[52,72229,58164],{"class":622},[52,72231,72095],{"class":54231},[52,72233,69580],{"class":58},[52,72235,2099],{"class":622},[52,72237,72238],{"class":62},"\"广州\"",[52,72240,72241],{"class":622},">广州\u003C\u002F",[52,72243,72095],{"class":54231},[52,72245,54238],{"class":622},[52,72247,72248,72250,72252,72254,72256,72259,72262,72264],{"class":54,"line":4727},[52,72249,58164],{"class":622},[52,72251,72095],{"class":54231},[52,72253,69580],{"class":58},[52,72255,2099],{"class":622},[52,72257,72258],{"class":62},"\"深圳\"",[52,72260,72261],{"class":622},">深圳\u003C\u002F",[52,72263,72095],{"class":54231},[52,72265,54238],{"class":622},[52,72267,72268,72270,72272,72274,72276,72279,72282,72284],{"class":54,"line":4741},[52,72269,58164],{"class":622},[52,72271,72095],{"class":54231},[52,72273,69580],{"class":58},[52,72275,2099],{"class":622},[52,72277,72278],{"class":62},"\"曹县\"",[52,72280,72281],{"class":622},">曹县\u003C\u002F",[52,72283,72095],{"class":54231},[52,72285,54238],{"class":622},[52,72287,72288,72290,72292],{"class":54,"line":4746},[52,72289,54707],{"class":622},[52,72291,72073],{"class":54231},[52,72293,54238],{"class":622},[52,72295,72296,72298,72300,72302,72304,72307,72310,72312],{"class":54,"line":5538},[52,72297,54272],{"class":622},[52,72299,56817],{"class":54231},[52,72301,56416],{"class":58},[52,72303,2099],{"class":622},[52,72305,72306],{"class":62},"\"add\"",[52,72308,72309],{"class":622},">录入\u003C\u002F",[52,72311,56817],{"class":54231},[52,72313,54238],{"class":622},[52,72315,72316,72318,72320],{"class":54,"line":5552},[52,72317,55347],{"class":622},[52,72319,69554],{"class":54231},[52,72321,54238],{"class":622},[52,72323,72324],{"class":54,"line":5560},[52,72325,116],{"emptyLinePlaceholder":115},[52,72327,72328,72330,72332,72335,72337],{"class":54,"line":5565},[52,72329,55075],{"class":622},[52,72331,10],{"class":54231},[52,72333,72334],{"class":622},">就业榜\u003C\u002F",[52,72336,10],{"class":54231},[52,72338,54238],{"class":622},[52,72340,72341,72343,72345],{"class":54,"line":5571},[52,72342,55075],{"class":622},[52,72344,3253],{"class":54231},[52,72346,54238],{"class":622},[52,72348,72349,72351,72353],{"class":54,"line":5577},[52,72350,54272],{"class":622},[52,72352,3256],{"class":54231},[52,72354,54238],{"class":622},[52,72356,72357,72359,72361],{"class":54,"line":5582},[52,72358,58164],{"class":622},[52,72360,3259],{"class":54231},[52,72362,54238],{"class":622},[52,72364,72365,72367,72369,72372,72374],{"class":54,"line":10904},[52,72366,58232],{"class":622},[52,72368,3262],{"class":54231},[52,72370,72371],{"class":622},">序号\u003C\u002F",[52,72373,3262],{"class":54231},[52,72375,54238],{"class":622},[52,72377,72378,72380,72382,72385,72387],{"class":54,"line":10928},[52,72379,58232],{"class":622},[52,72381,3262],{"class":54231},[52,72383,72384],{"class":622},">姓名\u003C\u002F",[52,72386,3262],{"class":54231},[52,72388,54238],{"class":622},[52,72390,72391,72393,72395,72398,72400],{"class":54,"line":10933},[52,72392,58232],{"class":622},[52,72394,3262],{"class":54231},[52,72396,72397],{"class":622},">年龄\u003C\u002F",[52,72399,3262],{"class":54231},[52,72401,54238],{"class":622},[52,72403,72404,72406,72408,72411,72413],{"class":54,"line":10939},[52,72405,58232],{"class":622},[52,72407,3262],{"class":54231},[52,72409,72410],{"class":622},">性别\u003C\u002F",[52,72412,3262],{"class":54231},[52,72414,54238],{"class":622},[52,72416,72417,72419,72421,72424,72426],{"class":54,"line":10966},[52,72418,58232],{"class":622},[52,72420,3262],{"class":54231},[52,72422,72423],{"class":622},">薪资\u003C\u002F",[52,72425,3262],{"class":54231},[52,72427,54238],{"class":622},[52,72429,72430,72432,72434,72437,72439],{"class":54,"line":10971},[52,72431,58232],{"class":622},[52,72433,3262],{"class":54231},[52,72435,72436],{"class":622},">就业城市\u003C\u002F",[52,72438,3262],{"class":54231},[52,72440,54238],{"class":622},[52,72442,72443,72445,72447,72450,72452],{"class":54,"line":10977},[52,72444,58232],{"class":622},[52,72446,3262],{"class":54231},[52,72448,72449],{"class":622},">操作\u003C\u002F",[52,72451,3262],{"class":54231},[52,72453,54238],{"class":622},[52,72455,72456,72458,72460],{"class":54,"line":10989},[52,72457,58337],{"class":622},[52,72459,3259],{"class":54231},[52,72461,54238],{"class":622},[52,72463,72464,72466,72468],{"class":54,"line":11001},[52,72465,54707],{"class":622},[52,72467,3256],{"class":54231},[52,72469,54238],{"class":622},[52,72471,72472,72474,72476],{"class":54,"line":11013},[52,72473,54272],{"class":622},[52,72475,3299],{"class":54231},[52,72477,54238],{"class":622},[52,72479,72480],{"class":54,"line":12672},[52,72481,72482],{"class":332},"      \u003C!-- \n",[52,72484,72485],{"class":54,"line":12697},[52,72486,72487],{"class":332},"        \u003Ctr>\n",[52,72489,72490],{"class":54,"line":12720},[52,72491,72492],{"class":332},"          \u003Ctd>1001\u003C\u002Ftd>\n",[52,72494,72495],{"class":54,"line":12744},[52,72496,72497],{"class":332},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[52,72499,72500],{"class":54,"line":12749},[52,72501,72502],{"class":332},"          \u003Ctd>19\u003C\u002Ftd>\n",[52,72504,72505],{"class":54,"line":12754},[52,72506,72507],{"class":332},"          \u003Ctd>男\u003C\u002Ftd>\n",[52,72509,72510],{"class":54,"line":12759},[52,72511,72512],{"class":332},"          \u003Ctd>15000\u003C\u002Ftd>\n",[52,72514,72515],{"class":54,"line":12768},[52,72516,72517],{"class":332},"          \u003Ctd>上海\u003C\u002Ftd>\n",[52,72519,72520],{"class":54,"line":12773},[52,72521,72522],{"class":332},"          \u003Ctd>\n",[52,72524,72525],{"class":54,"line":12779},[52,72526,72527],{"class":332},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[52,72529,72530],{"class":54,"line":12800},[52,72531,72532],{"class":332},"          \u003C\u002Ftd>\n",[52,72534,72535],{"class":54,"line":12806},[52,72536,72537],{"class":332},"        \u003C\u002Ftr> \n",[52,72539,72540],{"class":54,"line":12820},[52,72541,72542],{"class":332},"        -->\n",[52,72544,72545,72547,72549],{"class":54,"line":12826},[52,72546,54707],{"class":622},[52,72548,3299],{"class":54231},[52,72550,54238],{"class":622},[52,72552,72553,72555,72557],{"class":54,"line":12853},[52,72554,55347],{"class":622},[52,72556,3253],{"class":54231},[52,72558,54238],{"class":622},[52,72560,72561,72563,72565],{"class":54,"line":12862},[52,72562,55075],{"class":622},[52,72564,54744],{"class":54231},[52,72566,54238],{"class":622},[52,72568,72569],{"class":54,"line":12868},[52,72570,62888],{"class":332},[52,72572,72573,72575,72578,72580,72582,72584,72586,72589],{"class":54,"line":12876},[52,72574,14177],{"class":160},[52,72576,72577],{"class":90}," uname",[52,72579,16520],{"class":160},[52,72581,57326],{"class":622},[52,72583,57329],{"class":58},[52,72585,3121],{"class":622},[52,72587,72588],{"class":62},"'.uname'",[52,72590,170],{"class":622},[52,72592,72593,72595,72597,72599,72601,72603,72605,72608],{"class":54,"line":12881},[52,72594,14177],{"class":160},[52,72596,18645],{"class":90},[52,72598,16520],{"class":160},[52,72600,57326],{"class":622},[52,72602,57329],{"class":58},[52,72604,3121],{"class":622},[52,72606,72607],{"class":62},"'.age'",[52,72609,170],{"class":622},[52,72611,72612,72614,72617,72619,72621,72623,72625,72628],{"class":54,"line":19560},[52,72613,14177],{"class":160},[52,72615,72616],{"class":90}," gender",[52,72618,16520],{"class":160},[52,72620,57326],{"class":622},[52,72622,57329],{"class":58},[52,72624,3121],{"class":622},[52,72626,72627],{"class":62},"'.gender'",[52,72629,170],{"class":622},[52,72631,72632,72634,72637,72639,72641,72643,72645,72648],{"class":54,"line":19566},[52,72633,14177],{"class":160},[52,72635,72636],{"class":90}," salary",[52,72638,16520],{"class":160},[52,72640,57326],{"class":622},[52,72642,57329],{"class":58},[52,72644,3121],{"class":622},[52,72646,72647],{"class":62},"'.salary'",[52,72649,170],{"class":622},[52,72651,72652,72654,72657,72659,72661,72663,72665,72668],{"class":54,"line":19589},[52,72653,14177],{"class":160},[52,72655,72656],{"class":90}," city",[52,72658,16520],{"class":160},[52,72660,57326],{"class":622},[52,72662,57329],{"class":58},[52,72664,3121],{"class":622},[52,72666,72667],{"class":62},"'.city'",[52,72669,170],{"class":622},[52,72671,72672,72674,72677,72679,72681,72683,72685,72688],{"class":54,"line":19595},[52,72673,14177],{"class":160},[52,72675,72676],{"class":90}," tbody",[52,72678,16520],{"class":160},[52,72680,57326],{"class":622},[52,72682,57329],{"class":58},[52,72684,3121],{"class":622},[52,72686,72687],{"class":62},"'tbody'",[52,72689,170],{"class":622},[52,72691,72692],{"class":54,"line":19618},[52,72693,116],{"emptyLinePlaceholder":115},[52,72695,72696],{"class":54,"line":19632},[52,72697,72698],{"class":332},"    \u002F\u002F 获取所有带有name属性的元素\n",[52,72700,72701,72703,72706,72708,72710,72712,72714,72717],{"class":54,"line":19652},[52,72702,14177],{"class":160},[52,72704,72705],{"class":90}," items",[52,72707,16520],{"class":160},[52,72709,57326],{"class":622},[52,72711,58611],{"class":58},[52,72713,3121],{"class":622},[52,72715,72716],{"class":62},"'[name]'",[52,72718,170],{"class":622},[52,72720,72721],{"class":54,"line":19658},[52,72722,72723],{"class":332},"    \u002F\u002F 声明一个空的数组\n",[52,72725,72726,72728,72730,72732],{"class":54,"line":19669},[52,72727,14177],{"class":160},[52,72729,60625],{"class":90},[52,72731,16520],{"class":160},[52,72733,54769],{"class":622},[52,72735,72736],{"class":54,"line":19692},[52,72737,72738],{"class":332},"    \u002F\u002F 1.录入模块\n",[52,72740,72741],{"class":54,"line":19714},[52,72742,72743],{"class":332},"    \u002F\u002F 1.1这是一个表单提交事件\n",[52,72745,72746,72748,72751,72753,72755,72757,72759,72762],{"class":54,"line":19719},[52,72747,14177],{"class":160},[52,72749,72750],{"class":90}," info",[52,72752,16520],{"class":160},[52,72754,57326],{"class":622},[52,72756,57329],{"class":58},[52,72758,3121],{"class":622},[52,72760,72761],{"class":62},"'.info'",[52,72763,170],{"class":622},[52,72765,72766,72769,72771,72773,72776,72778,72780,72782,72784],{"class":54,"line":19725},[52,72767,72768],{"class":622},"    info.",[52,72770,60743],{"class":58},[52,72772,3121],{"class":622},[52,72774,72775],{"class":62},"'submit'",[52,72777,15391],{"class":622},[52,72779,57379],{"class":160},[52,72781,4629],{"class":622},[52,72783,3191],{"class":8172},[52,72785,15398],{"class":622},[52,72787,72788],{"class":54,"line":19739},[52,72789,72790],{"class":332},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[52,72792,72793,72796,72799],{"class":54,"line":19752},[52,72794,72795],{"class":622},"      e.",[52,72797,72798],{"class":58},"preventDefault",[52,72800,4938],{"class":622},[52,72802,72803],{"class":54,"line":19757},[52,72804,62942],{"class":332},[52,72806,72807],{"class":54,"line":19771},[52,72808,116],{"emptyLinePlaceholder":115},[52,72810,72811],{"class":54,"line":19776},[52,72812,72813],{"class":332},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[52,72815,72816],{"class":54,"line":19782},[52,72817,72818],{"class":332},"      \u002F\u002F 先遍历循环\n",[52,72820,72821,72823,72825,72827,72829,72831,72833,72835,72837,72840,72842,72844,72846],{"class":54,"line":19787},[52,72822,55214],{"class":160},[52,72824,4629],{"class":622},[52,72826,54778],{"class":160},[52,72828,12394],{"class":622},[52,72830,2099],{"class":160},[52,72832,7052],{"class":90},[52,72834,12401],{"class":622},[52,72836,4022],{"class":160},[52,72838,72839],{"class":622}," items.",[52,72841,54899],{"class":90},[52,72843,6173],{"class":622},[52,72845,5254],{"class":160},[52,72847,15398],{"class":622},[52,72849,72850,72852,72855,72857,72860],{"class":54,"line":19801},[52,72851,5458],{"class":160},[52,72853,72854],{"class":622}," (items[i].value ",[52,72856,57416],{"class":160},[52,72858,72859],{"class":62}," ''",[52,72861,15398],{"class":622},[52,72863,72864,72867,72870,72872,72875],{"class":54,"line":19806},[52,72865,72866],{"class":160},"          return",[52,72868,72869],{"class":58}," alert",[52,72871,3121],{"class":622},[52,72873,72874],{"class":62},"'输入内容不能为空'",[52,72876,170],{"class":622},[52,72878,72879],{"class":54,"line":19811},[52,72880,5490],{"class":622},[52,72882,72883],{"class":54,"line":19825},[52,72884,55328],{"class":622},[52,72886,72887],{"class":54,"line":19837},[52,72888,116],{"emptyLinePlaceholder":115},[52,72890,72891],{"class":54,"line":19842},[52,72892,72893],{"class":332},"      \u002F\u002F 创建新的对象\n",[52,72895,72896,72898,72901,72903],{"class":54,"line":19855},[52,72897,61158],{"class":160},[52,72899,72900],{"class":90}," obj",[52,72902,16520],{"class":160},[52,72904,18528],{"class":622},[52,72906,72907,72910,72912,72914,72916],{"class":54,"line":19860},[52,72908,72909],{"class":622},"        stuID: arr.",[52,72911,54899],{"class":90},[52,72913,48498],{"class":160},[52,72915,28064],{"class":90},[52,72917,34398],{"class":622},[52,72919,72920],{"class":54,"line":19865},[52,72921,72922],{"class":622},"        uname: uname.value,\n",[52,72924,72925],{"class":54,"line":19870},[52,72926,72927],{"class":622},"        age: age.value,\n",[52,72929,72930],{"class":54,"line":19883},[52,72931,72932],{"class":622},"        gender: gender.value,\n",[52,72934,72935],{"class":54,"line":19888},[52,72936,72937],{"class":622},"        salary: salary.value,\n",[52,72939,72940],{"class":54,"line":35565},[52,72941,72942],{"class":622},"        city: city.value\n",[52,72944,72945],{"class":54,"line":35571},[52,72946,55328],{"class":622},[52,72948,72949],{"class":54,"line":35577},[52,72950,72951],{"class":332},"      \u002F\u002F console.log(obj);\n",[52,72953,72954],{"class":54,"line":35583},[52,72955,72956],{"class":332},"      \u002F\u002F 追加到数组里面\n",[52,72958,72959,72961,72963],{"class":54,"line":35589},[52,72960,60937],{"class":622},[52,72962,54815],{"class":58},[52,72964,72965],{"class":622},"(obj)\n",[52,72967,72968],{"class":54,"line":35600},[52,72969,72970],{"class":332},"      \u002F\u002F console.log(arr);\n",[52,72972,72973],{"class":54,"line":35606},[52,72974,72975],{"class":332},"      \u002F\u002F 清空表单  reset重置表单\n",[52,72977,72978,72981,72983,72986],{"class":54,"line":35626},[52,72979,72980],{"class":90},"      this",[52,72982,3670],{"class":622},[52,72984,72985],{"class":58},"reset",[52,72987,4938],{"class":622},[52,72989,72990],{"class":54,"line":35632},[52,72991,72992],{"class":332},"      \u002F\u002F 调用渲染函数\n",[52,72994,72995,72998],{"class":54,"line":35643},[52,72996,72997],{"class":58},"      render",[52,72999,4938],{"class":622},[52,73001,73002],{"class":54,"line":35649},[52,73003,36393],{"class":622},[52,73005,73006],{"class":54,"line":35655},[52,73007,73008],{"class":332},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[52,73010,73011,73014,73017],{"class":54,"line":35661},[52,73012,73013],{"class":160},"    function",[52,73015,73016],{"class":58}," render",[52,73018,13809],{"class":622},[52,73020,73021],{"class":54,"line":35667},[52,73022,73023],{"class":332},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[52,73025,73026,73029,73031],{"class":54,"line":35673},[52,73027,73028],{"class":622},"      tbody.innerHTML ",[52,73030,2099],{"class":160},[52,73032,73033],{"class":62}," ''\n",[52,73035,73036],{"class":54,"line":35679},[52,73037,73038],{"class":332},"      \u002F\u002F 遍历数组\n",[52,73040,73041,73043,73045,73047,73049,73051,73053,73055,73057,73059,73061,73063,73065],{"class":54,"line":35685},[52,73042,55214],{"class":160},[52,73044,4629],{"class":622},[52,73046,54778],{"class":160},[52,73048,12394],{"class":622},[52,73050,2099],{"class":160},[52,73052,7052],{"class":90},[52,73054,12401],{"class":622},[52,73056,4022],{"class":160},[52,73058,54896],{"class":622},[52,73060,54899],{"class":90},[52,73062,6173],{"class":622},[52,73064,5254],{"class":160},[52,73066,15398],{"class":622},[52,73068,73069,73071,73074,73076,73078,73081,73083,73086],{"class":54,"line":35705},[52,73070,64200],{"class":160},[52,73072,73073],{"class":90}," tr",[52,73075,16520],{"class":160},[52,73077,57326],{"class":622},[52,73079,73080],{"class":58},"createElement",[52,73082,3121],{"class":622},[52,73084,73085],{"class":62},"'tr'",[52,73087,170],{"class":622},[52,73089,73090,73093,73095],{"class":54,"line":35711},[52,73091,73092],{"class":622},"        tr.innerHTML ",[52,73094,2099],{"class":160},[52,73096,73097],{"class":62}," `\n",[52,73099,73100,73103,73105,73107,73109,73112,73115],{"class":54,"line":35727},[52,73101,73102],{"class":62},"        \u003Ctd>${",[52,73104,6839],{"class":622},[52,73106,4002],{"class":62},[52,73108,3554],{"class":622},[52,73110,73111],{"class":62},"].",[52,73113,73114],{"class":622},"stuID",[52,73116,73117],{"class":62},"}\u003C\u002Ftd>\n",[52,73119,73120,73123,73125,73127,73129,73131,73133],{"class":54,"line":35733},[52,73121,73122],{"class":62},"          \u003Ctd>${",[52,73124,6839],{"class":622},[52,73126,4002],{"class":62},[52,73128,3554],{"class":622},[52,73130,73111],{"class":62},[52,73132,2911],{"class":622},[52,73134,73117],{"class":62},[52,73136,73137,73139,73141,73143,73145,73147,73150],{"class":54,"line":35747},[52,73138,73122],{"class":62},[52,73140,6839],{"class":622},[52,73142,4002],{"class":62},[52,73144,3554],{"class":622},[52,73146,73111],{"class":62},[52,73148,73149],{"class":622},"age",[52,73151,73117],{"class":62},[52,73153,73154,73156,73158,73160,73162,73164,73167],{"class":54,"line":35753},[52,73155,73122],{"class":62},[52,73157,6839],{"class":622},[52,73159,4002],{"class":62},[52,73161,3554],{"class":622},[52,73163,73111],{"class":62},[52,73165,73166],{"class":622},"gender",[52,73168,73117],{"class":62},[52,73170,73171,73173,73175,73177,73179,73181,73184],{"class":54,"line":35768},[52,73172,73122],{"class":62},[52,73174,6839],{"class":622},[52,73176,4002],{"class":62},[52,73178,3554],{"class":622},[52,73180,73111],{"class":62},[52,73182,73183],{"class":622},"salary",[52,73185,73117],{"class":62},[52,73187,73188,73190,73192,73194,73196,73198,73201],{"class":54,"line":35774},[52,73189,73122],{"class":62},[52,73191,6839],{"class":622},[52,73193,4002],{"class":62},[52,73195,3554],{"class":622},[52,73197,73111],{"class":62},[52,73199,73200],{"class":622},"city",[52,73202,73117],{"class":62},[52,73204,73205],{"class":54,"line":35783},[52,73206,72522],{"class":62},[52,73208,73209,73212,73214],{"class":54,"line":35789},[52,73210,73211],{"class":62},"            \u003Ca href=\"javascript:\" data-id=${",[52,73213,3554],{"class":622},[52,73215,73216],{"class":62},"}>删除\u003C\u002Fa>\n",[52,73218,73219],{"class":54,"line":35798},[52,73220,73221],{"class":62},"          \u003C\u002Ftd> \n",[52,73223,73224],{"class":54,"line":35804},[52,73225,73226],{"class":62},"          `\n",[52,73228,73229],{"class":54,"line":35810},[52,73230,73231],{"class":332},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[52,73233,73234,73237,73240],{"class":54,"line":35819},[52,73235,73236],{"class":622},"        tbody.",[52,73238,73239],{"class":58},"appendChild",[52,73241,73242],{"class":622},"(tr)\n",[52,73244,73245],{"class":54,"line":35825},[52,73246,55328],{"class":622},[52,73248,73249],{"class":54,"line":35836},[52,73250,5149],{"class":622},[52,73252,73253],{"class":54,"line":35842},[52,73254,116],{"emptyLinePlaceholder":115},[52,73256,73257],{"class":54,"line":35861},[52,73258,73259],{"class":332},"    \u002F\u002F 3.删除委托\n",[52,73261,73262],{"class":54,"line":35867},[52,73263,73264],{"class":332},"    \u002F\u002F 3.1 事件委托 tbody\n",[52,73266,73267,73270,73272,73274,73276,73278,73280,73282,73284],{"class":54,"line":35878},[52,73268,73269],{"class":622},"    tbody.",[52,73271,60743],{"class":58},[52,73273,3121],{"class":622},[52,73275,60748],{"class":62},[52,73277,15391],{"class":622},[52,73279,57379],{"class":160},[52,73281,4629],{"class":622},[52,73283,3191],{"class":8172},[52,73285,15398],{"class":622},[52,73287,73288,73290,73292,73294,73296],{"class":54,"line":35884},[52,73289,57410],{"class":160},[52,73291,69963],{"class":622},[52,73293,57416],{"class":160},[52,73295,71185],{"class":62},[52,73297,15398],{"class":622},[52,73299,73300],{"class":54,"line":35904},[52,73301,73302],{"class":332},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[52,73304,73305],{"class":54,"line":35920},[52,73306,73307],{"class":332},"        \u002F\u002F console.log(e.target.dataset.id);\n",[52,73309,73310],{"class":54,"line":35926},[52,73311,73312],{"class":332},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[52,73314,73315,73318,73320,73323,73325],{"class":54,"line":35940},[52,73316,73317],{"class":622},"        arr.",[52,73319,60940],{"class":58},[52,73321,73322],{"class":622},"(e.target.dataset.id, ",[52,73324,3332],{"class":90},[52,73326,170],{"class":622},[52,73328,73329],{"class":54,"line":35946},[52,73330,73331],{"class":332},"        \u002F\u002F 重新渲染一次\n",[52,73333,73334,73337],{"class":54,"line":35952},[52,73335,73336],{"class":58},"        render",[52,73338,4938],{"class":622},[52,73340,73341],{"class":54,"line":35963},[52,73342,55328],{"class":622},[52,73344,73345],{"class":54,"line":35969},[52,73346,36393],{"class":622},[52,73348,73349,73351,73353],{"class":54,"line":35975},[52,73350,55347],{"class":622},[52,73352,54744],{"class":54231},[52,73354,54238],{"class":622},[52,73356,73357],{"class":54,"line":35985},[52,73358,116],{"emptyLinePlaceholder":115},[52,73360,73361,73363,73365],{"class":54,"line":35991},[52,73362,54716],{"class":622},[52,73364,54731],{"class":54231},[52,73366,54238],{"class":622},[52,73368,73369],{"class":54,"line":36002},[52,73370,116],{"emptyLinePlaceholder":115},[52,73372,73373,73375,73377],{"class":54,"line":36008},[52,73374,54716],{"class":622},[52,73376,53566],{"class":54231},[52,73378,54238],{"class":622},[274,73380,73381],{},"样式：",[19,73383,73387],{"className":73384,"code":73385,"language":73386,"meta":28,"style":28},"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",[26,73388,73389,73394,73404,73413,73417,73421,73426,73436,73441,73445,73450,73460,73465,73474,73478,73482,73487,73492,73502,73512,73517,73521,73526,73535,73545,73550,73560,73570,73574,73579,73587,73591,73596,73601,73606,73614,73623,73627,73632,73641,73645,73650,73659,73663,73668,73677,73686,73694,73698,73703,73712,73722,73731,73741,73747,73756,73766,73776,73780,73785,73794,73802,73812,73820,73829,73838,73848,73856,73860,73865,73874],{"__ignoreMap":28},[52,73390,73391],{"class":54,"line":55},[52,73392,73393],{"class":622},"* {\n",[52,73395,73396,73399,73401],{"class":54,"line":69},[52,73397,73398],{"class":54231},"  margin",[52,73400,54368],{"class":622},[52,73402,73403],{"class":62},"0;\n",[52,73405,73406,73409,73411],{"class":54,"line":82},[52,73407,73408],{"class":62},"  padding",[52,73410,54368],{"class":622},[52,73412,73403],{"class":62},[52,73414,73415],{"class":54,"line":97},[52,73416,4543],{"class":622},[52,73418,73419],{"class":54,"line":112},[52,73420,116],{"emptyLinePlaceholder":115},[52,73422,73423],{"class":54,"line":119},[52,73424,73425],{"class":62},"a {\n",[52,73427,73428,73431,73433],{"class":54,"line":130},[52,73429,73430],{"class":54231},"  text-decoration",[52,73432,54368],{"class":622},[52,73434,73435],{"class":62},"none;\n",[52,73437,73438],{"class":54,"line":136},[52,73439,73440],{"class":62},"  color:#721c24;\n",[52,73442,73443],{"class":54,"line":141},[52,73444,4543],{"class":622},[52,73446,73447],{"class":54,"line":146},[52,73448,73449],{"class":62},"h1 {\n",[52,73451,73452,73455,73457],{"class":54,"line":152},[52,73453,73454],{"class":54231},"  text-align",[52,73456,54368],{"class":622},[52,73458,73459],{"class":62},"center;\n",[52,73461,73462],{"class":54,"line":157},[52,73463,73464],{"class":62},"  color:#333;\n",[52,73466,73467,73469,73471],{"class":54,"line":173},[52,73468,73398],{"class":54231},[52,73470,54368],{"class":622},[52,73472,73473],{"class":62},"20px 0;\n",[52,73475,73476],{"class":54,"line":178},[52,73477,623],{"class":622},[52,73479,73480],{"class":54,"line":184},[52,73481,4543],{"class":622},[52,73483,73484],{"class":54,"line":189},[52,73485,73486],{"class":62},"table {\n",[52,73488,73489],{"class":54,"line":201},[52,73490,73491],{"class":62},"  margin:0 auto;\n",[52,73493,73494,73497,73499],{"class":54,"line":206},[52,73495,73496],{"class":54231},"  width",[52,73498,54368],{"class":622},[52,73500,73501],{"class":62},"800px;\n",[52,73503,73504,73507,73509],{"class":54,"line":224},[52,73505,73506],{"class":54231},"  border-collapse",[52,73508,54368],{"class":622},[52,73510,73511],{"class":62},"collapse;\n",[52,73513,73514],{"class":54,"line":229},[52,73515,73516],{"class":62},"  color:#004085;\n",[52,73518,73519],{"class":54,"line":241},[52,73520,4543],{"class":622},[52,73522,73523],{"class":54,"line":246},[52,73524,73525],{"class":62},"th {\n",[52,73527,73528,73530,73532],{"class":54,"line":252},[52,73529,73408],{"class":54231},[52,73531,54368],{"class":622},[52,73533,73534],{"class":62},"10px;\n",[52,73536,73537,73540,73542],{"class":54,"line":257},[52,73538,73539],{"class":54231},"  background",[52,73541,54368],{"class":622},[52,73543,73544],{"class":332},"#cfe5ff;\n",[52,73546,73547],{"class":54,"line":266},[52,73548,73549],{"class":622},"  \n",[52,73551,73552,73555,73557],{"class":54,"line":4722},[52,73553,73554],{"class":54231},"  font-size",[52,73556,54368],{"class":622},[52,73558,73559],{"class":62},"20px;\n",[52,73561,73562,73565,73567],{"class":54,"line":4727},[52,73563,73564],{"class":54231},"  font-weight",[52,73566,54368],{"class":622},[52,73568,73569],{"class":62},"400;\n",[52,73571,73572],{"class":54,"line":4741},[52,73573,4543],{"class":622},[52,73575,73576],{"class":54,"line":4746},[52,73577,73578],{"class":62},"td,th {\n",[52,73580,73581,73584],{"class":54,"line":5538},[52,73582,73583],{"class":62},"  border:1px solid",[52,73585,73586],{"class":332}," #b8daff;\n",[52,73588,73589],{"class":54,"line":5552},[52,73590,4543],{"class":622},[52,73592,73593],{"class":54,"line":5560},[52,73594,73595],{"class":62},"td {\n",[52,73597,73598],{"class":54,"line":5565},[52,73599,73600],{"class":62},"  padding:10px;\n",[52,73602,73603],{"class":54,"line":5571},[52,73604,73605],{"class":62},"  color:#666;\n",[52,73607,73608,73610,73612],{"class":54,"line":5577},[52,73609,73454],{"class":54231},[52,73611,54368],{"class":622},[52,73613,73459],{"class":62},[52,73615,73616,73618,73620],{"class":54,"line":5582},[52,73617,73554],{"class":54231},[52,73619,54368],{"class":622},[52,73621,73622],{"class":62},"16px;\n",[52,73624,73625],{"class":54,"line":10904},[52,73626,4543],{"class":622},[52,73628,73629],{"class":54,"line":10928},[52,73630,73631],{"class":62},"tbody tr {\n",[52,73633,73634,73636,73638],{"class":54,"line":10933},[52,73635,73539],{"class":54231},[52,73637,54368],{"class":622},[52,73639,73640],{"class":332},"#fff;\n",[52,73642,73643],{"class":54,"line":10939},[52,73644,4543],{"class":622},[52,73646,73647],{"class":54,"line":10966},[52,73648,73649],{"class":62},"tbody tr:hover {\n",[52,73651,73652,73654,73656],{"class":54,"line":10971},[52,73653,73539],{"class":54231},[52,73655,54368],{"class":622},[52,73657,73658],{"class":332},"#e1ecf8;\n",[52,73660,73661],{"class":54,"line":10977},[52,73662,4543],{"class":622},[52,73664,73665],{"class":54,"line":10989},[52,73666,73667],{"class":62},".info {\n",[52,73669,73670,73672,73674],{"class":54,"line":11001},[52,73671,73496],{"class":54231},[52,73673,54368],{"class":622},[52,73675,73676],{"class":62},"900px;\n",[52,73678,73679,73681,73683],{"class":54,"line":11013},[52,73680,73398],{"class":54231},[52,73682,54368],{"class":622},[52,73684,73685],{"class":62},"50px auto;\n",[52,73687,73688,73690,73692],{"class":54,"line":12672},[52,73689,73454],{"class":54231},[52,73691,54368],{"class":622},[52,73693,73459],{"class":62},[52,73695,73696],{"class":54,"line":12697},[52,73697,4543],{"class":622},[52,73699,73700],{"class":54,"line":12720},[52,73701,73702],{"class":62},".info  input, .info select {\n",[52,73704,73705,73707,73709],{"class":54,"line":12744},[52,73706,73496],{"class":54231},[52,73708,54368],{"class":622},[52,73710,73711],{"class":62},"80px;\n",[52,73713,73714,73717,73719],{"class":54,"line":12749},[52,73715,73716],{"class":54231},"  height",[52,73718,54368],{"class":622},[52,73720,73721],{"class":62},"27px;\n",[52,73723,73724,73727,73729],{"class":54,"line":12754},[52,73725,73726],{"class":54231},"  outline",[52,73728,54368],{"class":622},[52,73730,73435],{"class":62},[52,73732,73733,73736,73738],{"class":54,"line":12759},[52,73734,73735],{"class":54231},"  border-radius",[52,73737,54368],{"class":622},[52,73739,73740],{"class":62},"5px;\n",[52,73742,73743,73745],{"class":54,"line":12768},[52,73744,73583],{"class":62},[52,73746,73586],{"class":332},[52,73748,73749,73752,73754],{"class":54,"line":12773},[52,73750,73751],{"class":54231},"  padding-left",[52,73753,54368],{"class":622},[52,73755,73740],{"class":62},[52,73757,73758,73761,73763],{"class":54,"line":12779},[52,73759,73760],{"class":54231},"  box-sizing",[52,73762,54368],{"class":622},[52,73764,73765],{"class":62},"border-box;\n",[52,73767,73768,73771,73773],{"class":54,"line":12800},[52,73769,73770],{"class":54231},"  margin-right",[52,73772,54368],{"class":622},[52,73774,73775],{"class":62},"15px;\n",[52,73777,73778],{"class":54,"line":12806},[52,73779,4543],{"class":622},[52,73781,73782],{"class":54,"line":12820},[52,73783,73784],{"class":62},".info button {\n",[52,73786,73787,73789,73791],{"class":54,"line":12826},[52,73788,73496],{"class":54231},[52,73790,54368],{"class":622},[52,73792,73793],{"class":62},"60px;\n",[52,73795,73796,73798,73800],{"class":54,"line":12853},[52,73797,73716],{"class":54231},[52,73799,54368],{"class":622},[52,73801,73721],{"class":62},[52,73803,73804,73807,73809],{"class":54,"line":12862},[52,73805,73806],{"class":54231},"  background-color",[52,73808,54368],{"class":622},[52,73810,73811],{"class":332},"#004085;\n",[52,73813,73814,73816,73818],{"class":54,"line":12868},[52,73815,73726],{"class":54231},[52,73817,54368],{"class":622},[52,73819,73435],{"class":62},[52,73821,73822,73825,73827],{"class":54,"line":12876},[52,73823,73824],{"class":54231},"  border",[52,73826,54368],{"class":622},[52,73828,73403],{"class":62},[52,73830,73831,73834,73836],{"class":54,"line":12881},[52,73832,73833],{"class":54231},"  color",[52,73835,54368],{"class":622},[52,73837,73640],{"class":332},[52,73839,73840,73843,73845],{"class":54,"line":19560},[52,73841,73842],{"class":54231},"  cursor",[52,73844,54368],{"class":622},[52,73846,73847],{"class":62},"pointer;\n",[52,73849,73850,73852,73854],{"class":54,"line":19566},[52,73851,73735],{"class":54231},[52,73853,54368],{"class":622},[52,73855,73740],{"class":62},[52,73857,73858],{"class":54,"line":19589},[52,73859,4543],{"class":622},[52,73861,73862],{"class":54,"line":19595},[52,73863,73864],{"class":62},".info .age {\n",[52,73866,73867,73869,73871],{"class":54,"line":19618},[52,73868,73496],{"class":54231},[52,73870,54368],{"class":622},[52,73872,73873],{"class":62},"50px;\n",[52,73875,73876],{"class":54,"line":19632},[52,73877,4543],{"class":622},[274,73879,73880],{},"思路：",[274,73882,73883],{},[280,73884],{"alt":28,"src":73885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[274,73887,73888],{},[280,73889],{"alt":28,"src":73890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[274,73892,73893],{},[280,73894],{"alt":28,"src":73895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[30,73897,73899],{"id":73898},"_3315-重绘回流","3.3.15 重绘回流",[274,73901,73902],{},[280,73903],{"alt":28,"src":73904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[274,73906,73907],{},[280,73908],{"alt":28,"src":73909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[274,73911,73912],{},[280,73913],{"alt":28,"src":73914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73916,73918],{"id":73917},"_34-bom","3.4 BOM",[274,73920,73921],{},[280,73922],{"alt":28,"src":73923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[274,73925,73926],{},"平时写的document省略了window而已，实际上是window.document",[274,73928,73929],{},"函数也是这样，调用的时候实际为window.fn()",[274,73931,73932],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[274,73934,73935],{},"window大部分情况下可以省略",[30,73937,73939],{"id":73938},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[274,73941,73942],{},"只执行一次",[274,73944,73945],{},[280,73946],{"alt":28,"src":73947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[274,73949,73950],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[274,73952,73953],{},[280,73954],{"alt":28,"src":73955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[30,73957,73959],{"id":73958},"_342-js执行机制","3.4.2 JS执行机制",[274,73961,73962],{},[280,73963],{"alt":28,"src":73964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[274,73966,73967],{},"两个的结果都是1111 3333 2222",[274,73969,73970],{},[280,73971],{"alt":28,"src":73972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[274,73974,73975],{},[280,73976],{"alt":28,"src":73977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[274,73979,73980],{},[280,73981],{"alt":28,"src":73982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[274,73984,73985],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[274,73987,73988],{},"工作流程：",[274,73990,73991],{},[280,73992],{"alt":28,"src":73993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[274,73995,73996],{},[280,73997],{"alt":28,"src":73998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[274,74000,74001],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[274,74003,74004],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[30,74006,74008],{"id":74007},"_343-location对象","3.4.3 location对象",[274,74010,74011],{},"location对象属于window这个全局对象下的，可以 省略window",[274,74013,74014],{},[280,74015],{"alt":28,"src":74016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[274,74018,74019],{},"href可以跳转页面",[1070,74021,74022],{},[1073,74023,74024],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[274,74026,74027],{},"search得到提交信息之后网站后边的地址",[274,74029,74030],{},[280,74031],{"alt":28,"src":74032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[274,74034,74035],{},[280,74036],{"alt":28,"src":74037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1070,74039,74040],{"start":69},[1073,74041,74042],{},"hash:这个获取单页面应用#后边的地址",[274,74044,74045],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[274,74047,74048],{},[280,74049],{"alt":28,"src":74050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[19,74052,74054],{"className":55997,"code":74053,"language":55999,"meta":28,"style":28},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[26,74055,74056,74076,74096],{"__ignoreMap":28},[52,74057,74058,74060,74062,74064,74066,74069,74072,74074],{"class":54,"line":55},[52,74059,55075],{"class":622},[52,74061,300],{"class":54231},[52,74063,63987],{"class":58},[52,74065,2099],{"class":622},[52,74067,74068],{"class":62},"\"#\u002Fmy\"",[52,74070,74071],{"class":622},">我的\u003C\u002F",[52,74073,300],{"class":54231},[52,74075,54238],{"class":622},[52,74077,74078,74080,74082,74084,74086,74089,74092,74094],{"class":54,"line":69},[52,74079,55075],{"class":622},[52,74081,300],{"class":54231},[52,74083,63987],{"class":58},[52,74085,2099],{"class":622},[52,74087,74088],{"class":62},"\"#\u002Ffriend\"",[52,74090,74091],{"class":622},">关注\u003C\u002F",[52,74093,300],{"class":54231},[52,74095,54238],{"class":622},[52,74097,74098,74100,74102,74104,74106,74109,74112,74114],{"class":54,"line":82},[52,74099,55075],{"class":622},[52,74101,300],{"class":54231},[52,74103,63987],{"class":58},[52,74105,2099],{"class":622},[52,74107,74108],{"class":62},"\"#\u002Fdownload\"",[52,74110,74111],{"class":622},">下载\u003C\u002F",[52,74113,300],{"class":54231},[52,74115,54238],{"class":622},[274,74117,74118],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1070,74120,74121],{"start":82},[1073,74122,74123,74124,74126,74127,74129],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[56646,74125],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[56646,74128],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[30,74131,74133],{"id":74132},"_345-navigator对象","3.4.5 navigator对象",[274,74135,74136],{},[280,74137],{"alt":28,"src":74138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[19,74140,74144],{"className":74141,"code":74142,"language":74143,"meta":28,"style":28},"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",[26,74145,74146,74151,74162,74174,74179,74230,74271,74276,74289,74301,74306],{"__ignoreMap":28},[52,74147,74148],{"class":54,"line":55},[52,74149,74150],{"class":332},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[52,74152,74153,74155,74157,74159],{"class":54,"line":69},[52,74154,161],{"class":160},[52,74156,3121],{"class":622},[52,74158,57379],{"class":160},[52,74160,74161],{"class":622}," () { \n",[52,74163,74164,74166,74169,74171],{"class":54,"line":82},[52,74165,9748],{"class":160},[52,74167,74168],{"class":90}," userAgent",[52,74170,16520],{"class":160},[52,74172,74173],{"class":622}," navigator.userAgent \n",[52,74175,74176],{"class":54,"line":97},[52,74177,74178],{"class":332},"\u002F\u002F 验证是否为Android或iPhone \n",[52,74180,74181,74183,74186,74188,74191,74194,74196,74198,74201,74203,74206,74210,74212,74214,74216,74219,74221,74223,74225,74227],{"class":54,"line":112},[52,74182,9748],{"class":160},[52,74184,74185],{"class":90}," android",[52,74187,16520],{"class":160},[52,74189,74190],{"class":622}," userAgent.",[52,74192,74193],{"class":58},"match",[52,74195,3121],{"class":622},[52,74197,3696],{"class":62},[52,74199,74200],{"class":50908},"(Android);",[52,74202,4097],{"class":160},[52,74204,74205],{"class":90},"[\\s",[52,74207,74209],{"class":74208},"snhLl","\\\u002F",[52,74211,4052],{"class":90},[52,74213,3593],{"class":160},[52,74215,3121],{"class":50908},[52,74217,74218],{"class":90},"[\\d.]",[52,74220,3593],{"class":160},[52,74222,3542],{"class":50908},[52,74224,4097],{"class":160},[52,74226,3696],{"class":62},[52,74228,74229],{"class":622},") \n",[52,74231,74232,74234,74237,74239,74241,74243,74245,74247,74250,74253,74256,74258,74260,74263,74265,74267,74269],{"class":54,"line":119},[52,74233,9748],{"class":160},[52,74235,74236],{"class":90}," iphone",[52,74238,16520],{"class":160},[52,74240,74190],{"class":622},[52,74242,74193],{"class":58},[52,74244,3121],{"class":622},[52,74246,3696],{"class":62},[52,74248,74249],{"class":50908},"(iPhone",[52,74251,74252],{"class":90},"\\s",[52,74254,74255],{"class":50908},"OS)",[52,74257,74252],{"class":90},[52,74259,3121],{"class":50908},[52,74261,74262],{"class":90},"[\\d_]",[52,74264,3593],{"class":160},[52,74266,3542],{"class":50908},[52,74268,3696],{"class":62},[52,74270,74229],{"class":622},[52,74272,74273],{"class":54,"line":130},[52,74274,74275],{"class":332},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[52,74277,74278,74280,74283,74286],{"class":54,"line":136},[52,74279,4509],{"class":160},[52,74281,74282],{"class":622}," (android ",[52,74284,74285],{"class":160},"||",[52,74287,74288],{"class":622}," iphone) { \n",[52,74290,74291,74294,74296,74299],{"class":54,"line":141},[52,74292,74293],{"class":622},"location.href ",[52,74295,2099],{"class":160},[52,74297,74298],{"class":62}," 'http:\u002F\u002Fm.itcast.cn'",[52,74300,623],{"class":622},[52,74302,74303],{"class":54,"line":146},[52,74304,74305],{"class":622},"} \n",[52,74307,74308],{"class":54,"line":152},[52,74309,74310],{"class":622},"})()\n",[30,74312,74314],{"id":74313},"_346-histroy对象","3.4.6 histroy对象",[274,74316,74317],{},[280,74318],{"alt":28,"src":74319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[274,74321,74322],{},"浏览器地址的前进与后退!!!",[274,74324,74325],{},"history.back() 等效于 history.go(-1)",[274,74327,74328],{},"history.forward() 等效于 history.go(1)",[14,74330,74332],{"id":74331},"_35-本地存储","3.5 本地存储",[1070,74334,74335,74338,74341],{},[1073,74336,74337],{},"数据存储在用户浏览器中",[1073,74339,74340],{},"设置、读取方便、甚至页面刷新不丢失数据",[1073,74342,74343],{},"容量较大，sessionStorage和localStorage约 5M 左右",[30,74345,74347],{"id":74346},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[274,74349,74350],{},"只能存储字符串",[274,74352,74353],{},[280,74354],{"alt":28,"src":74355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[274,74357,74358],{},[280,74359],{"alt":28,"src":74360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[274,74362,74363],{},"键值对要加引号,不然就会当变量来看了",[274,74365,74366],{},"localStorage.setItem('uname', 'pink')",[274,74368,74369],{},"刷新之后信息不再丢失",[274,74371,74372],{},"操作key,value会跟着变",[274,74374,74375],{},"删除只删除键就可以,即名字",[274,74377,74366],{},[274,74379,74380],{},"改:",[274,74382,74383],{},"localStorage.setItem('uname','red')",[274,74385,74386],{},"有这个键就是改,没有这个键就是改",[274,74388,74389],{},[280,74390],{"alt":28,"src":74391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[274,74393,74394],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[274,74396,74397],{},[280,74398],{"alt":28,"src":74399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[274,74401,74402],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[30,74404,74406],{"id":74405},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[274,74408,74409],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[274,74411,74412],{},"特性:",[1070,74414,74415,74418,74421,74424],{},[1073,74416,74417],{},"生命周期为关闭浏览器窗口",[1073,74419,74420],{},"在同一个窗口(页面)下数据可以共享",[1073,74422,74423],{},"以键值对的形式存储使用",[1073,74425,74426],{},"用法跟localStorage 基本相同",[30,74428,74430],{"id":74429},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[274,74432,74433],{},"本地只能存储字符串,无法直接存储复杂数据类型",[19,74435,74437],{"className":55997,"code":74436,"language":55999,"meta":28,"style":28},"\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",[26,74438,74439,74447,74452,74457,74462,74467,74471,74476,74481],{"__ignoreMap":28},[52,74440,74441,74443,74445],{"class":54,"line":55},[52,74442,4022],{"class":622},[52,74444,54744],{"class":54231},[52,74446,54238],{"class":622},[52,74448,74449],{"class":54,"line":69},[52,74450,74451],{"class":622},"    const obj = {\n",[52,74453,74454],{"class":54,"line":82},[52,74455,74456],{"class":622},"      uname: 'pink老师',\n",[52,74458,74459],{"class":54,"line":97},[52,74460,74461],{"class":622},"      age: 18,\n",[52,74463,74464],{"class":54,"line":112},[52,74465,74466],{"class":622},"      gender: '女'\n",[52,74468,74469],{"class":54,"line":119},[52,74470,5149],{"class":622},[52,74472,74473],{"class":54,"line":130},[52,74474,74475],{"class":622},"    \u002F\u002F 存储复杂数据类型\n",[52,74477,74478],{"class":54,"line":136},[52,74479,74480],{"class":622},"    localStorage.setItem('obj', obj)\n",[52,74482,74483,74485,74487],{"class":54,"line":141},[52,74484,55347],{"class":622},[52,74486,54744],{"class":54231},[52,74488,54238],{"class":622},[274,74490,74491],{},[280,74492],{"alt":28,"src":74493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[274,74495,74496],{},"如果获取一下数据:",[274,74498,74499],{},"log(localStorage.getItem('obj'))",[274,74501,74502],{},[280,74503],{"alt":28,"src":74504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[274,74506,74507],{},"发现直接存对象是使用不了的!!!",[1486,74509,74511],{"id":74510},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[274,74513,74514],{},[280,74515],{"alt":28,"src":74516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[19,74518,74520],{"className":53564,"code":74519,"language":53566,"meta":28,"style":28},"\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",[26,74521,74522,74530,74540,74550,74559,74567,74571,74575,74601,74620,74628,74632,74637,74642],{"__ignoreMap":28},[52,74523,74524,74526,74528],{"class":54,"line":55},[52,74525,4022],{"class":622},[52,74527,54744],{"class":54231},[52,74529,54238],{"class":622},[52,74531,74532,74534,74536,74538],{"class":54,"line":69},[52,74533,14177],{"class":160},[52,74535,72900],{"class":90},[52,74537,16520],{"class":160},[52,74539,18528],{"class":622},[52,74541,74542,74545,74548],{"class":54,"line":82},[52,74543,74544],{"class":622},"      uname: ",[52,74546,74547],{"class":62},"'pink老师'",[52,74549,34398],{"class":622},[52,74551,74552,74555,74557],{"class":54,"line":97},[52,74553,74554],{"class":622},"      age: ",[52,74556,3762],{"class":90},[52,74558,34398],{"class":622},[52,74560,74561,74564],{"class":54,"line":112},[52,74562,74563],{"class":622},"      gender: ",[52,74565,74566],{"class":62},"'女'\n",[52,74568,74569],{"class":54,"line":119},[52,74570,5149],{"class":622},[52,74572,74573],{"class":54,"line":130},[52,74574,74475],{"class":332},[52,74576,74577,74580,74583,74585,74588,74590,74593,74595,74598],{"class":54,"line":136},[52,74578,74579],{"class":622},"  localStorage.",[52,74581,74582],{"class":58},"setItem",[52,74584,3121],{"class":622},[52,74586,74587],{"class":62},"'obj'",[52,74589,15391],{"class":622},[52,74591,74592],{"class":90},"JSON",[52,74594,3670],{"class":622},[52,74596,74597],{"class":58},"stringify",[52,74599,74600],{"class":622},"(obj))\n",[52,74602,74603,74606,74608,74611,74614,74616,74618],{"class":54,"line":141},[52,74604,74605],{"class":622},"  console.",[52,74607,61177],{"class":58},[52,74609,74610],{"class":622},"(localStorage.",[52,74612,74613],{"class":58},"getItem",[52,74615,3121],{"class":622},[52,74617,74587],{"class":62},[52,74619,33429],{"class":622},[52,74621,74622,74624,74626],{"class":54,"line":146},[52,74623,55347],{"class":622},[52,74625,54744],{"class":54231},[52,74627,54238],{"class":622},[52,74629,74630],{"class":54,"line":152},[52,74631,73549],{"class":622},[52,74633,74634],{"class":54,"line":157},[52,74635,74636],{"class":622},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[52,74638,74639],{"class":54,"line":173},[52,74640,74641],{"class":622},"  类型是字符串的\n",[52,74643,74644],{"class":54,"line":178},[52,74645,74646],{"class":622},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[1486,74648,74650],{"id":74649},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[274,74652,74653],{},[280,74654],{"alt":28,"src":74655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[274,74657,74658],{},[280,74659],{"alt":28,"src":74660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[19,74662,74664],{"className":55997,"code":74663,"language":55999,"meta":28,"style":28},"  \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",[26,74665,74666,74674,74678,74682,74686,74690,74694,74699,74704,74709,74714,74719,74724,74729,74734],{"__ignoreMap":28},[52,74667,74668,74670,74672],{"class":54,"line":55},[52,74669,55075],{"class":622},[52,74671,54744],{"class":54231},[52,74673,54238],{"class":622},[52,74675,74676],{"class":54,"line":69},[52,74677,74451],{"class":622},[52,74679,74680],{"class":54,"line":82},[52,74681,74456],{"class":622},[52,74683,74684],{"class":54,"line":97},[52,74685,74461],{"class":622},[52,74687,74688],{"class":54,"line":112},[52,74689,74466],{"class":622},[52,74691,74692],{"class":54,"line":119},[52,74693,5149],{"class":622},[52,74695,74696],{"class":54,"line":130},[52,74697,74698],{"class":622},"    \u002F\u002F 1.存储复杂数据类型\n",[52,74700,74701],{"class":54,"line":136},[52,74702,74703],{"class":622},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[52,74705,74706],{"class":54,"line":141},[52,74707,74708],{"class":622},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[52,74710,74711],{"class":54,"line":146},[52,74712,74713],{"class":622},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[52,74715,74716],{"class":54,"line":152},[52,74717,74718],{"class":622},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[52,74720,74721],{"class":54,"line":157},[52,74722,74723],{"class":622},"    \u002F\u002F 取\n",[52,74725,74726],{"class":54,"line":173},[52,74727,74728],{"class":622},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[52,74730,74731],{"class":54,"line":178},[52,74732,74733],{"class":622},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[52,74735,74736,74738,74740],{"class":54,"line":184},[52,74737,55347],{"class":622},[52,74739,54744],{"class":54231},[52,74741,54238],{"class":622},[274,74743,74744],{},[280,74745],{"alt":28,"src":74746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[30,74748,74750],{"id":74749},"_356-数组map方法","3.5.6 数组map方法",[274,74752,74753],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[274,74755,74756],{},[280,74757],{"alt":28,"src":74758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[274,74760,74761],{},[280,74762],{"alt":28,"src":74763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[274,74765,74766,74769],{},[538,74767,74768],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[274,74771,74772],{},"map有返回值，但是forEach没有返回值",[274,74774,74775],{},"map是个方法。用的时候要加 ()",[274,74777,74778],{},"map返回的是一个数组",[30,74780,74782],{"id":74781},"_357-数组中join方法","3.5.7 数组中join方法",[274,74784,74785],{},[280,74786],{"alt":28,"src":74787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[274,74789,74790],{},"类似于python中拼接字符串一样！",[1070,74792,74793,74796,74799],{},[1073,74794,74795],{},"小括号为空则逗号分开",[1073,74797,74798],{},"小括号为空字符串 ''，则元素之间没有分隔符",[1073,74800,74801],{},"小括号用啥符号就用进行分割",[30,74803,74805],{"id":74804},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1070,74807,74808,74811,74814,74817,74820],{},[1073,74809,74810],{},"记住本地时间获取快速方式：new Date().toDateString()",[1073,74812,74813],{},"尽量减少DOM操作，用好map+join的渲染方式",[1073,74815,74816],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[1073,74818,74819],{},"return可以实现函数的结束",[1073,74821,74822],{},"禁止跳转是 preventDefault() 不要忘记",[19,74824,74826],{"className":53564,"code":74825,"language":53566,"meta":28,"style":28},"\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",[26,74827,74828,74838,74852,74856,74864,74878,74898,74910,74918,74924,74934,74944,74948,74952,74958,74968,74980,74984,74988,74995,75007,75021,75031,75035,75039,75046,75053,75060,75072,75084,75094,75106,75110,75114,75121,75128,75140,75152,75162,75174,75204,75208,75212,75219,75231,75243,75267,75277,75287,75291,75295,75303,75314,75326,75338,75350,75367,75379,75391,75395,75399,75406,75418,75430,75442,75453,75471,75484,75496,75520,75531,75535,75539,75547,75557,75561,75565,75571,75583,75594,75604,75608,75612,75618,75640,75644,75648,75654,75660,75672,75682,75694,75724,75737,75754,75758,75762,75773,75795,75805,75809,75813,75826,75836,75848,75860,75872,75884,75894,75904,75914,75925,75938,75942,75950,75958,75962,75970,75983,76003,76036,76069,76102,76128,76146,76164,76172,76198,76216,76234,76252,76270,76288,76296,76304,76322,76330,76359,76367,76375,76383,76396,76408,76420,76432,76444,76456,76469,76481,76489,76497,76505,76510,76515,76519,76523,76527,76531,76535,76539,76544,76549,76554,76559,76567,76575,76583,76588,76593,76598,76603,76608,76613,76618,76623,76628,76633,76638,76643,76648,76653,76657,76662,76667,76677,76686,76690,76695,76704,76720,76762,76802,76841,76906,76914,76918,76923,76941,76949,76954,76959,76989,76995,77000,77013,77025,77037,77049,77061,77073,77085,77089,77099,77103,77108,77113,77117,77126,77130,77135,77140,77159,77164,77184,77188,77193,77197,77202,77220,77238,77256,77275,77294,77313,77318,77324,77345,77351,77360,77366,77372,77378,77405,77418,77423,77433,77439,77445,77451,77457,77462,77468,77474,77480,77486,77519,77524,77529,77534,77539,77545,77551,77557,77568,77573,77579,77586,77600,77606,77630,77635,77640,77646,77652,77673,77679,77692,77698,77704,77710,77716,77721,77727,77733,77739,77757,77771,77777,77785,77791,77813,77818,77823,77828,77833,77838,77847,77856,77861],{"__ignoreMap":28},[52,74829,74830,74832,74834,74836],{"class":54,"line":55},[52,74831,54228],{"class":622},[52,74833,54232],{"class":54231},[52,74835,54235],{"class":58},[52,74837,54238],{"class":622},[52,74839,74840,74842,74844,74846,74848,74850],{"class":54,"line":69},[52,74841,4022],{"class":622},[52,74843,53566],{"class":54231},[52,74845,54247],{"class":58},[52,74847,2099],{"class":622},[52,74849,54252],{"class":62},[52,74851,54238],{"class":622},[52,74853,74854],{"class":54,"line":82},[52,74855,116],{"emptyLinePlaceholder":115},[52,74857,74858,74860,74862],{"class":54,"line":97},[52,74859,4022],{"class":622},[52,74861,54265],{"class":54231},[52,74863,54238],{"class":622},[52,74865,74866,74868,74870,74872,74874,74876],{"class":54,"line":112},[52,74867,55075],{"class":622},[52,74869,54275],{"class":54231},[52,74871,54278],{"class":58},[52,74873,2099],{"class":622},[52,74875,54283],{"class":62},[52,74877,54238],{"class":622},[52,74879,74880,74882,74884,74886,74888,74890,74892,74894,74896],{"class":54,"line":119},[52,74881,55075],{"class":622},[52,74883,54275],{"class":54231},[52,74885,17876],{"class":58},[52,74887,2099],{"class":622},[52,74889,54322],{"class":62},[52,74891,54302],{"class":58},[52,74893,2099],{"class":622},[52,74895,54329],{"class":62},[52,74897,54238],{"class":622},[52,74899,74900,74902,74904,74906,74908],{"class":54,"line":130},[52,74901,55075],{"class":622},[52,74903,54338],{"class":54231},[52,74905,54341],{"class":622},[52,74907,54338],{"class":54231},[52,74909,54238],{"class":622},[52,74911,74912,74914,74916],{"class":54,"line":136},[52,74913,55075],{"class":622},[52,74915,3015],{"class":54231},[52,74917,54238],{"class":622},[52,74919,74920,74922],{"class":54,"line":141},[52,74921,9359],{"class":54231},[52,74923,18528],{"class":622},[52,74925,74926,74928,74930,74932],{"class":54,"line":146},[52,74927,57625],{"class":90},[52,74929,54368],{"class":622},[52,74931,3306],{"class":90},[52,74933,4272],{"class":622},[52,74935,74936,74938,74940,74942],{"class":54,"line":152},[52,74937,57636],{"class":90},[52,74939,54368],{"class":622},[52,74941,3306],{"class":90},[52,74943,4272],{"class":622},[52,74945,74946],{"class":54,"line":157},[52,74947,5149],{"class":622},[52,74949,74950],{"class":54,"line":173},[52,74951,116],{"emptyLinePlaceholder":115},[52,74953,74954,74956],{"class":54,"line":178},[52,74955,60209],{"class":54231},[52,74957,18528],{"class":622},[52,74959,74960,74962,74964,74966],{"class":54,"line":184},[52,74961,60216],{"class":90},[52,74963,54368],{"class":622},[52,74965,54523],{"class":90},[52,74967,4272],{"class":622},[52,74969,74970,74972,74974,74976,74978],{"class":54,"line":189},[52,74971,65007],{"class":90},[52,74973,54368],{"class":622},[52,74975,3812],{"class":90},[52,74977,54423],{"class":160},[52,74979,4272],{"class":622},[52,74981,74982],{"class":54,"line":201},[52,74983,5149],{"class":622},[52,74985,74986],{"class":54,"line":206},[52,74987,116],{"emptyLinePlaceholder":115},[52,74989,74990,74993],{"class":54,"line":224},[52,74991,74992],{"class":58},"    .info",[52,74994,18528],{"class":622},[52,74996,74997,74999,75001,75003,75005],{"class":54,"line":229},[52,74998,57701],{"class":90},[52,75000,54368],{"class":622},[52,75002,54420],{"class":90},[52,75004,54423],{"class":160},[52,75006,4272],{"class":622},[52,75008,75009,75011,75013,75015,75017,75019],{"class":54,"line":241},[52,75010,57636],{"class":90},[52,75012,54368],{"class":622},[52,75014,3559],{"class":90},[52,75016,54423],{"class":160},[52,75018,54487],{"class":90},[52,75020,4272],{"class":622},[52,75022,75023,75025,75027,75029],{"class":54,"line":246},[52,75024,60216],{"class":90},[52,75026,54368],{"class":622},[52,75028,54523],{"class":90},[52,75030,4272],{"class":622},[52,75032,75033],{"class":54,"line":252},[52,75034,5149],{"class":622},[52,75036,75037],{"class":54,"line":257},[52,75038,116],{"emptyLinePlaceholder":115},[52,75040,75041,75044],{"class":54,"line":266},[52,75042,75043],{"class":58},"    .uname",[52,75045,34398],{"class":622},[52,75047,75048,75051],{"class":54,"line":4722},[52,75049,75050],{"class":58},"    .age",[52,75052,34398],{"class":622},[52,75054,75055,75058],{"class":54,"line":4727},[52,75056,75057],{"class":58},"    .salary",[52,75059,18528],{"class":622},[52,75061,75062,75064,75066,75068,75070],{"class":54,"line":4741},[52,75063,57701],{"class":90},[52,75065,54368],{"class":622},[52,75067,3424],{"class":90},[52,75069,54423],{"class":160},[52,75071,4272],{"class":622},[52,75073,75074,75076,75078,75080,75082],{"class":54,"line":4746},[52,75075,57715],{"class":90},[52,75077,54368],{"class":622},[52,75079,3812],{"class":90},[52,75081,54423],{"class":160},[52,75083,4272],{"class":622},[52,75085,75086,75088,75090,75092],{"class":54,"line":5538},[52,75087,64710],{"class":90},[52,75089,54368],{"class":622},[52,75091,57667],{"class":90},[52,75093,4272],{"class":622},[52,75095,75096,75098,75100,75102,75104],{"class":54,"line":5552},[52,75097,64680],{"class":90},[52,75099,54368],{"class":622},[52,75101,3687],{"class":90},[52,75103,54423],{"class":160},[52,75105,4272],{"class":622},[52,75107,75108],{"class":54,"line":5560},[52,75109,5149],{"class":622},[52,75111,75112],{"class":54,"line":5565},[52,75113,116],{"emptyLinePlaceholder":115},[52,75115,75116,75119],{"class":54,"line":5571},[52,75117,75118],{"class":58},"    .gender",[52,75120,34398],{"class":622},[52,75122,75123,75126],{"class":54,"line":5577},[52,75124,75125],{"class":58},"    .city",[52,75127,18528],{"class":622},[52,75129,75130,75132,75134,75136,75138],{"class":54,"line":5582},[52,75131,57701],{"class":90},[52,75133,54368],{"class":622},[52,75135,3424],{"class":90},[52,75137,54423],{"class":160},[52,75139,4272],{"class":622},[52,75141,75142,75144,75146,75148,75150],{"class":54,"line":10904},[52,75143,57715],{"class":90},[52,75145,54368],{"class":622},[52,75147,3937],{"class":90},[52,75149,54423],{"class":160},[52,75151,4272],{"class":622},[52,75153,75154,75156,75158,75160],{"class":54,"line":10928},[52,75155,64710],{"class":90},[52,75157,54368],{"class":622},[52,75159,57667],{"class":90},[52,75161,4272],{"class":622},[52,75163,75164,75166,75168,75170,75172],{"class":54,"line":10933},[52,75165,64680],{"class":90},[52,75167,54368],{"class":622},[52,75169,3687],{"class":90},[52,75171,54423],{"class":160},[52,75173,4272],{"class":622},[52,75175,75176,75178,75180,75182,75184,75186,75189,75191,75193,75195,75198,75200,75202],{"class":54,"line":10939},[52,75177,64907],{"class":90},[52,75179,54368],{"class":622},[52,75181,3332],{"class":90},[52,75183,54423],{"class":160},[52,75185,54452],{"class":90},[52,75187,75188],{"class":90}," rgb",[52,75190,3121],{"class":622},[52,75192,4689],{"class":90},[52,75194,15391],{"class":622},[52,75196,75197],{"class":90},"197",[52,75199,15391],{"class":622},[52,75201,75197],{"class":90},[52,75203,5679],{"class":622},[52,75205,75206],{"class":54,"line":10966},[52,75207,5149],{"class":622},[52,75209,75210],{"class":54,"line":10971},[52,75211,116],{"emptyLinePlaceholder":115},[52,75213,75214,75217],{"class":54,"line":10977},[52,75215,75216],{"class":54231},"    button",[52,75218,18528],{"class":622},[52,75220,75221,75223,75225,75227,75229],{"class":54,"line":10989},[52,75222,57715],{"class":90},[52,75224,54368],{"class":622},[52,75226,3937],{"class":90},[52,75228,54423],{"class":160},[52,75230,4272],{"class":622},[52,75232,75233,75235,75237,75239,75241],{"class":54,"line":11001},[52,75234,57701],{"class":90},[52,75236,54368],{"class":622},[52,75238,3596],{"class":90},[52,75240,54423],{"class":160},[52,75242,4272],{"class":622},[52,75244,75245,75247,75249,75252,75254,75256,75258,75261,75263,75265],{"class":54,"line":11013},[52,75246,57814],{"class":90},[52,75248,54368],{"class":622},[52,75250,75251],{"class":90},"rgb",[52,75253,3121],{"class":622},[52,75255,4081],{"class":90},[52,75257,15391],{"class":622},[52,75259,75260],{"class":90},"187",[52,75262,15391],{"class":622},[52,75264,3412],{"class":90},[52,75266,5679],{"class":622},[52,75268,75269,75271,75273,75275],{"class":54,"line":12672},[52,75270,60346],{"class":90},[52,75272,54368],{"class":622},[52,75274,63772],{"class":90},[52,75276,4272],{"class":622},[52,75278,75279,75281,75283,75285],{"class":54,"line":12697},[52,75280,64907],{"class":90},[52,75282,54368],{"class":622},[52,75284,3306],{"class":90},[52,75286,4272],{"class":622},[52,75288,75289],{"class":54,"line":12720},[52,75290,5149],{"class":622},[52,75292,75293],{"class":54,"line":12744},[52,75294,116],{"emptyLinePlaceholder":115},[52,75296,75297,75299,75301],{"class":54,"line":12749},[52,75298,75216],{"class":54231},[52,75300,54619],{"class":54231},[52,75302,18528],{"class":622},[52,75304,75305,75307,75309,75312],{"class":54,"line":12754},[52,75306,57939],{"class":90},[52,75308,54368],{"class":622},[52,75310,75311],{"class":90},"inline-block",[52,75313,4272],{"class":622},[52,75315,75316,75318,75320,75322,75324],{"class":54,"line":12759},[52,75317,57701],{"class":90},[52,75319,54368],{"class":622},[52,75321,3559],{"class":90},[52,75323,54423],{"class":160},[52,75325,4272],{"class":622},[52,75327,75328,75330,75332,75334,75336],{"class":54,"line":12768},[52,75329,57715],{"class":90},[52,75331,54368],{"class":622},[52,75333,3559],{"class":90},[52,75335,54423],{"class":160},[52,75337,4272],{"class":622},[52,75339,75340,75342,75344,75346,75348],{"class":54,"line":12773},[52,75341,60289],{"class":90},[52,75343,54368],{"class":622},[52,75345,3584],{"class":90},[52,75347,54423],{"class":160},[52,75349,4272],{"class":622},[52,75351,75352,75354,75356,75358,75360,75362,75365],{"class":54,"line":12779},[52,75353,64907],{"class":90},[52,75355,54368],{"class":622},[52,75357,3332],{"class":90},[52,75359,54423],{"class":160},[52,75361,54452],{"class":90},[52,75363,75364],{"class":90}," #fff",[52,75366,4272],{"class":622},[52,75368,75369,75371,75373,75375,75377],{"class":54,"line":12800},[52,75370,58064],{"class":90},[52,75372,54368],{"class":622},[52,75374,3432],{"class":90},[52,75376,54423],{"class":160},[52,75378,4272],{"class":622},[52,75380,75381,75383,75385,75387,75389],{"class":54,"line":12806},[52,75382,64680],{"class":90},[52,75384,54368],{"class":622},[52,75386,3332],{"class":90},[52,75388,54423],{"class":160},[52,75390,4272],{"class":622},[52,75392,75393],{"class":54,"line":12820},[52,75394,5149],{"class":622},[52,75396,75397],{"class":54,"line":12826},[52,75398,116],{"emptyLinePlaceholder":115},[52,75400,75401,75404],{"class":54,"line":12853},[52,75402,75403],{"class":58},"    .total",[52,75405,18528],{"class":622},[52,75407,75408,75410,75412,75414,75416],{"class":54,"line":12862},[52,75409,57701],{"class":90},[52,75411,54368],{"class":622},[52,75413,64559],{"class":90},[52,75415,54423],{"class":160},[52,75417,4272],{"class":622},[52,75419,75420,75422,75424,75426,75428],{"class":54,"line":12868},[52,75421,57715],{"class":90},[52,75423,54368],{"class":622},[52,75425,3514],{"class":90},[52,75427,54423],{"class":160},[52,75429,4272],{"class":622},[52,75431,75432,75434,75436,75438,75440],{"class":54,"line":12876},[52,75433,60289],{"class":90},[52,75435,54368],{"class":622},[52,75437,3514],{"class":90},[52,75439,54423],{"class":160},[52,75441,4272],{"class":622},[52,75443,75444,75446,75448,75451],{"class":54,"line":12881},[52,75445,60216],{"class":90},[52,75447,54368],{"class":622},[52,75449,75450],{"class":90},"right",[52,75452,4272],{"class":622},[52,75454,75455,75457,75459,75461,75463,75465,75467,75469],{"class":54,"line":19560},[52,75456,57636],{"class":90},[52,75458,54368],{"class":622},[52,75460,3514],{"class":90},[52,75462,54423],{"class":160},[52,75464,54487],{"class":90},[52,75466,5000],{"class":90},[52,75468,54423],{"class":160},[52,75470,4272],{"class":622},[52,75472,75473,75476,75478,75480,75482],{"class":54,"line":19566},[52,75474,75475],{"class":90},"      padding-right",[52,75477,54368],{"class":622},[52,75479,3559],{"class":90},[52,75481,54423],{"class":160},[52,75483,4272],{"class":622},[52,75485,75486,75488,75490,75492,75494],{"class":54,"line":19589},[52,75487,57852],{"class":90},[52,75489,54368],{"class":622},[52,75491,3635],{"class":90},[52,75493,54423],{"class":160},[52,75495,4272],{"class":622},[52,75497,75498,75500,75502,75504,75506,75509,75511,75514,75516,75518],{"class":54,"line":19595},[52,75499,57814],{"class":90},[52,75501,54368],{"class":622},[52,75503,75251],{"class":90},[52,75505,3121],{"class":622},[52,75507,75508],{"class":90},"237",[52,75510,15391],{"class":622},[52,75512,75513],{"class":90},"235",[52,75515,15391],{"class":622},[52,75517,75513],{"class":90},[52,75519,5679],{"class":622},[52,75521,75522,75525,75527,75529],{"class":54,"line":19618},[52,75523,75524],{"class":90},"      box-sizing",[52,75526,54368],{"class":622},[52,75528,63435],{"class":90},[52,75530,4272],{"class":622},[52,75532,75533],{"class":54,"line":19632},[52,75534,5149],{"class":622},[52,75536,75537],{"class":54,"line":19652},[52,75538,116],{"emptyLinePlaceholder":115},[52,75540,75541,75543,75545],{"class":54,"line":19658},[52,75542,75403],{"class":58},[52,75544,54619],{"class":54231},[52,75546,18528],{"class":622},[52,75548,75549,75551,75553,75555],{"class":54,"line":19669},[52,75550,60346],{"class":90},[52,75552,54368],{"class":622},[52,75554,60351],{"class":90},[52,75556,4272],{"class":622},[52,75558,75559],{"class":54,"line":19692},[52,75560,5149],{"class":622},[52,75562,75563],{"class":54,"line":19714},[52,75564,116],{"emptyLinePlaceholder":115},[52,75566,75567,75569],{"class":54,"line":19719},[52,75568,67952],{"class":54231},[52,75570,18528],{"class":622},[52,75572,75573,75575,75577,75579,75581],{"class":54,"line":19725},[52,75574,57701],{"class":90},[52,75576,54368],{"class":622},[52,75578,64559],{"class":90},[52,75580,54423],{"class":160},[52,75582,4272],{"class":622},[52,75584,75585,75587,75589,75592],{"class":54,"line":19739},[52,75586,57636],{"class":90},[52,75588,54368],{"class":622},[52,75590,75591],{"class":90},"auto",[52,75593,4272],{"class":622},[52,75595,75596,75598,75600,75602],{"class":54,"line":19752},[52,75597,67959],{"class":90},[52,75599,54368],{"class":622},[52,75601,67964],{"class":90},[52,75603,4272],{"class":622},[52,75605,75606],{"class":54,"line":19757},[52,75607,5149],{"class":622},[52,75609,75610],{"class":54,"line":19771},[52,75611,116],{"emptyLinePlaceholder":115},[52,75613,75614,75616],{"class":54,"line":19776},[52,75615,68044],{"class":54231},[52,75617,18528],{"class":622},[52,75619,75620,75622,75624,75626,75628,75630,75632,75634,75636,75638],{"class":54,"line":19782},[52,75621,57814],{"class":90},[52,75623,54368],{"class":622},[52,75625,75251],{"class":90},[52,75627,3121],{"class":622},[52,75629,75508],{"class":90},[52,75631,15391],{"class":622},[52,75633,75513],{"class":90},[52,75635,15391],{"class":622},[52,75637,75513],{"class":90},[52,75639,5679],{"class":622},[52,75641,75642],{"class":54,"line":19787},[52,75643,5149],{"class":622},[52,75645,75646],{"class":54,"line":19801},[52,75647,116],{"emptyLinePlaceholder":115},[52,75649,75650,75652],{"class":54,"line":19806},[52,75651,68044],{"class":54231},[52,75653,34398],{"class":622},[52,75655,75656,75658],{"class":54,"line":19811},[52,75657,68110],{"class":54231},[52,75659,18528],{"class":622},[52,75661,75662,75664,75666,75668,75670],{"class":54,"line":19825},[52,75663,57715],{"class":90},[52,75665,54368],{"class":622},[52,75667,3386],{"class":90},[52,75669,54423],{"class":160},[52,75671,4272],{"class":622},[52,75673,75674,75676,75678,75680],{"class":54,"line":19837},[52,75675,60216],{"class":90},[52,75677,54368],{"class":622},[52,75679,26688],{"class":90},[52,75681,4272],{"class":622},[52,75683,75684,75686,75688,75690,75692],{"class":54,"line":19842},[52,75685,57852],{"class":90},[52,75687,54368],{"class":622},[52,75689,3661],{"class":90},[52,75691,54423],{"class":160},[52,75693,4272],{"class":622},[52,75695,75696,75698,75700,75702,75704,75706,75708,75710,75713,75715,75718,75720,75722],{"class":54,"line":19855},[52,75697,64907],{"class":90},[52,75699,54368],{"class":622},[52,75701,3332],{"class":90},[52,75703,54423],{"class":160},[52,75705,54452],{"class":90},[52,75707,75188],{"class":90},[52,75709,3121],{"class":622},[52,75711,75712],{"class":90},"228",[52,75714,15391],{"class":622},[52,75716,75717],{"class":90},"225",[52,75719,15391],{"class":622},[52,75721,75717],{"class":90},[52,75723,5679],{"class":622},[52,75725,75726,75729,75731,75733,75735],{"class":54,"line":19860},[52,75727,75728],{"class":90},"      padding-left",[52,75730,54368],{"class":622},[52,75732,3432],{"class":90},[52,75734,54423],{"class":160},[52,75736,4272],{"class":622},[52,75738,75739,75741,75743,75745,75748,75750,75752],{"class":54,"line":19865},[52,75740,64790],{"class":90},[52,75742,54368],{"class":622},[52,75744,31055],{"class":90},[52,75746,75747],{"class":90}," linear",[52,75749,64797],{"class":90},[52,75751,3807],{"class":160},[52,75753,4272],{"class":622},[52,75755,75756],{"class":54,"line":19870},[52,75757,5149],{"class":622},[52,75759,75760],{"class":54,"line":19883},[52,75761,116],{"emptyLinePlaceholder":115},[52,75763,75764,75767,75769,75771],{"class":54,"line":19888},[52,75765,75766],{"class":54231},"    tbody",[52,75768,73073],{"class":54231},[52,75770,63870],{"class":58},[52,75772,18528],{"class":622},[52,75774,75775,75777,75779,75781,75783,75785,75787,75789,75791,75793],{"class":54,"line":35565},[52,75776,57814],{"class":90},[52,75778,54368],{"class":622},[52,75780,75251],{"class":90},[52,75782,3121],{"class":622},[52,75784,75508],{"class":90},[52,75786,15391],{"class":622},[52,75788,75513],{"class":90},[52,75790,15391],{"class":622},[52,75792,75513],{"class":90},[52,75794,5679],{"class":622},[52,75796,75797,75799,75801,75803],{"class":54,"line":35571},[52,75798,64955],{"class":90},[52,75800,54368],{"class":622},[52,75802,64960],{"class":90},[52,75804,4272],{"class":622},[52,75806,75807],{"class":54,"line":35577},[52,75808,5149],{"class":622},[52,75810,75811],{"class":54,"line":35583},[52,75812,116],{"emptyLinePlaceholder":115},[52,75814,75815,75817,75819,75822,75824],{"class":54,"line":35589},[52,75816,75766],{"class":54231},[52,75818,73073],{"class":54231},[52,75820,75821],{"class":54231}," td",[52,75823,4377],{"class":54231},[52,75825,18528],{"class":622},[52,75827,75828,75830,75832,75834],{"class":54,"line":35600},[52,75829,57939],{"class":90},[52,75831,54368],{"class":622},[52,75833,63799],{"class":90},[52,75835,4272],{"class":622},[52,75837,75838,75840,75842,75844,75846],{"class":54,"line":35606},[52,75839,57701],{"class":90},[52,75841,54368],{"class":622},[52,75843,4019],{"class":90},[52,75845,54423],{"class":160},[52,75847,4272],{"class":622},[52,75849,75850,75852,75854,75856,75858],{"class":54,"line":35626},[52,75851,57715],{"class":90},[52,75853,54368],{"class":622},[52,75855,3937],{"class":90},[52,75857,54423],{"class":160},[52,75859,4272],{"class":622},[52,75861,75862,75864,75866,75868,75870],{"class":54,"line":35632},[52,75863,60289],{"class":90},[52,75865,54368],{"class":622},[52,75867,3937],{"class":90},[52,75869,54423],{"class":160},[52,75871,4272],{"class":622},[52,75873,75874,75876,75878,75880,75882],{"class":54,"line":35643},[52,75875,65007],{"class":90},[52,75877,54368],{"class":622},[52,75879,3194],{"class":90},[52,75881,54423],{"class":160},[52,75883,4272],{"class":622},[52,75885,75886,75888,75890,75892],{"class":54,"line":35649},[52,75887,60346],{"class":90},[52,75889,54368],{"class":622},[52,75891,63772],{"class":90},[52,75893,4272],{"class":622},[52,75895,75896,75898,75900,75902],{"class":54,"line":35655},[52,75897,60216],{"class":90},[52,75899,54368],{"class":622},[52,75901,54523],{"class":90},[52,75903,4272],{"class":622},[52,75905,75906,75908,75910,75912],{"class":54,"line":35661},[52,75907,66900],{"class":90},[52,75909,54368],{"class":622},[52,75911,57667],{"class":90},[52,75913,4272],{"class":622},[52,75915,75916,75918,75920,75923],{"class":54,"line":35667},[52,75917,57814],{"class":90},[52,75919,54368],{"class":622},[52,75921,75922],{"class":90},"orange",[52,75924,4272],{"class":622},[52,75926,75927,75929,75931,75934,75936],{"class":54,"line":35673},[52,75928,58064],{"class":90},[52,75930,54368],{"class":622},[52,75932,75933],{"class":90},"12.5",[52,75935,54423],{"class":160},[52,75937,4272],{"class":622},[52,75939,75940],{"class":54,"line":35679},[52,75941,5149],{"class":622},[52,75943,75944,75946,75948],{"class":54,"line":35685},[52,75945,55347],{"class":622},[52,75947,3015],{"class":54231},[52,75949,54238],{"class":622},[52,75951,75952,75954,75956],{"class":54,"line":35705},[52,75953,54716],{"class":622},[52,75955,54265],{"class":54231},[52,75957,54238],{"class":622},[52,75959,75960],{"class":54,"line":35711},[52,75961,116],{"emptyLinePlaceholder":115},[52,75963,75964,75966,75968],{"class":54,"line":35727},[52,75965,4022],{"class":622},[52,75967,54731],{"class":54231},[52,75969,54238],{"class":622},[52,75971,75972,75974,75976,75979,75981],{"class":54,"line":35733},[52,75973,55075],{"class":622},[52,75975,14],{"class":54231},[52,75977,75978],{"class":622},">学生就业统计表\u003C\u002F",[52,75980,14],{"class":54231},[52,75982,54238],{"class":622},[52,75984,75985,75987,75989,75991,75993,75995,75997,75999,76001],{"class":54,"line":35747},[52,75986,55075],{"class":622},[52,75988,69554],{"class":54231},[52,75990,56416],{"class":58},[52,75992,2099],{"class":622},[52,75994,65594],{"class":62},[52,75996,71999],{"class":58},[52,75998,2099],{"class":622},[52,76000,34708],{"class":62},[52,76002,54238],{"class":622},[52,76004,76005,76007,76009,76011,76013,76015,76017,76019,76021,76023,76025,76028,76030,76032,76034],{"class":54,"line":35753},[52,76006,54272],{"class":622},[52,76008,56751],{"class":54231},[52,76010,56754],{"class":58},[52,76012,2099],{"class":622},[52,76014,65629],{"class":62},[52,76016,17876],{"class":58},[52,76018,2099],{"class":622},[52,76020,72025],{"class":62},[52,76022,63950],{"class":58},[52,76024,2099],{"class":622},[52,76026,76027],{"class":62},"\"姓名\"",[52,76029,56416],{"class":58},[52,76031,2099],{"class":622},[52,76033,72025],{"class":62},[52,76035,54238],{"class":622},[52,76037,76038,76040,76042,76044,76046,76048,76050,76052,76054,76056,76058,76061,76063,76065,76067],{"class":54,"line":35768},[52,76039,54272],{"class":622},[52,76041,56751],{"class":54231},[52,76043,56754],{"class":58},[52,76045,2099],{"class":622},[52,76047,65629],{"class":62},[52,76049,17876],{"class":58},[52,76051,2099],{"class":622},[52,76053,72053],{"class":62},[52,76055,63950],{"class":58},[52,76057,2099],{"class":622},[52,76059,76060],{"class":62},"\"年龄\"",[52,76062,56416],{"class":58},[52,76064,2099],{"class":622},[52,76066,72053],{"class":62},[52,76068,54238],{"class":622},[52,76070,76071,76073,76075,76077,76079,76081,76083,76085,76087,76089,76091,76094,76096,76098,76100],{"class":54,"line":35774},[52,76072,54272],{"class":622},[52,76074,56751],{"class":54231},[52,76076,56754],{"class":58},[52,76078,2099],{"class":622},[52,76080,65629],{"class":62},[52,76082,17876],{"class":58},[52,76084,2099],{"class":622},[52,76086,72155],{"class":62},[52,76088,63950],{"class":58},[52,76090,2099],{"class":622},[52,76092,76093],{"class":62},"\"薪资\"",[52,76095,56416],{"class":58},[52,76097,2099],{"class":622},[52,76099,72155],{"class":62},[52,76101,54238],{"class":622},[52,76103,76104,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124,76126],{"class":54,"line":35783},[52,76105,54272],{"class":622},[52,76107,72073],{"class":54231},[52,76109,17876],{"class":58},[52,76111,2099],{"class":622},[52,76113,72080],{"class":62},[52,76115,17915],{"class":58},[52,76117,2099],{"class":622},[52,76119,10608],{"class":62},[52,76121,56416],{"class":58},[52,76123,2099],{"class":622},[52,76125,72080],{"class":62},[52,76127,54238],{"class":622},[52,76129,76130,76132,76134,76136,76138,76140,76142,76144],{"class":54,"line":35789},[52,76131,58164],{"class":622},[52,76133,72095],{"class":54231},[52,76135,69580],{"class":58},[52,76137,2099],{"class":622},[52,76139,12917],{"class":62},[52,76141,72104],{"class":622},[52,76143,72095],{"class":54231},[52,76145,54238],{"class":622},[52,76147,76148,76150,76152,76154,76156,76158,76160,76162],{"class":54,"line":35798},[52,76149,58164],{"class":622},[52,76151,72095],{"class":54231},[52,76153,69580],{"class":58},[52,76155,2099],{"class":622},[52,76157,12986],{"class":62},[52,76159,72123],{"class":622},[52,76161,72095],{"class":54231},[52,76163,54238],{"class":622},[52,76165,76166,76168,76170],{"class":54,"line":35804},[52,76167,54707],{"class":622},[52,76169,72073],{"class":54231},[52,76171,54238],{"class":622},[52,76173,76174,76176,76178,76180,76182,76184,76186,76188,76190,76192,76194,76196],{"class":54,"line":35810},[52,76175,54272],{"class":622},[52,76177,72073],{"class":54231},[52,76179,17876],{"class":58},[52,76181,2099],{"class":622},[52,76183,72177],{"class":62},[52,76185,17915],{"class":58},[52,76187,2099],{"class":622},[52,76189,10608],{"class":62},[52,76191,56416],{"class":58},[52,76193,2099],{"class":622},[52,76195,72177],{"class":62},[52,76197,54238],{"class":622},[52,76199,76200,76202,76204,76206,76208,76210,76212,76214],{"class":54,"line":35819},[52,76201,58164],{"class":622},[52,76203,72095],{"class":54231},[52,76205,69580],{"class":58},[52,76207,2099],{"class":622},[52,76209,72198],{"class":62},[52,76211,72201],{"class":622},[52,76213,72095],{"class":54231},[52,76215,54238],{"class":622},[52,76217,76218,76220,76222,76224,76226,76228,76230,76232],{"class":54,"line":35825},[52,76219,58164],{"class":622},[52,76221,72095],{"class":54231},[52,76223,69580],{"class":58},[52,76225,2099],{"class":622},[52,76227,72218],{"class":62},[52,76229,72221],{"class":622},[52,76231,72095],{"class":54231},[52,76233,54238],{"class":622},[52,76235,76236,76238,76240,76242,76244,76246,76248,76250],{"class":54,"line":35836},[52,76237,58164],{"class":622},[52,76239,72095],{"class":54231},[52,76241,69580],{"class":58},[52,76243,2099],{"class":622},[52,76245,72238],{"class":62},[52,76247,72241],{"class":622},[52,76249,72095],{"class":54231},[52,76251,54238],{"class":622},[52,76253,76254,76256,76258,76260,76262,76264,76266,76268],{"class":54,"line":35842},[52,76255,58164],{"class":622},[52,76257,72095],{"class":54231},[52,76259,69580],{"class":58},[52,76261,2099],{"class":622},[52,76263,72258],{"class":62},[52,76265,72261],{"class":622},[52,76267,72095],{"class":54231},[52,76269,54238],{"class":622},[52,76271,76272,76274,76276,76278,76280,76282,76284,76286],{"class":54,"line":35861},[52,76273,58164],{"class":622},[52,76275,72095],{"class":54231},[52,76277,69580],{"class":58},[52,76279,2099],{"class":622},[52,76281,72278],{"class":62},[52,76283,72281],{"class":622},[52,76285,72095],{"class":54231},[52,76287,54238],{"class":622},[52,76289,76290,76292,76294],{"class":54,"line":35867},[52,76291,54707],{"class":622},[52,76293,72073],{"class":54231},[52,76295,54238],{"class":622},[52,76297,76298,76300,76302],{"class":54,"line":35878},[52,76299,54272],{"class":622},[52,76301,56817],{"class":54231},[52,76303,54238],{"class":622},[52,76305,76306,76308,76310,76313,76315,76318,76320],{"class":54,"line":35884},[52,76307,58164],{"class":622},[52,76309,52],{"class":54231},[52,76311,76312],{"class":622},">+\u003C\u002F",[52,76314,52],{"class":54231},[52,76316,76317],{"class":622},">添加\u003C\u002F",[52,76319,56817],{"class":54231},[52,76321,54238],{"class":622},[52,76323,76324,76326,76328],{"class":54,"line":35904},[52,76325,55347],{"class":622},[52,76327,69554],{"class":54231},[52,76329,54238],{"class":622},[52,76331,76332,76334,76336,76338,76340,76342,76345,76347,76350,76352,76355,76357],{"class":54,"line":35920},[52,76333,55075],{"class":622},[52,76335,54542],{"class":54231},[52,76337,56416],{"class":58},[52,76339,2099],{"class":622},[52,76341,65510],{"class":62},[52,76343,76344],{"class":622},">共有数据 \u003C",[52,76346,52],{"class":54231},[52,76348,76349],{"class":622},">0\u003C\u002F",[52,76351,52],{"class":54231},[52,76353,76354],{"class":622},"> 条\u003C\u002F",[52,76356,54542],{"class":54231},[52,76358,54238],{"class":622},[52,76360,76361,76363,76365],{"class":54,"line":35926},[52,76362,55075],{"class":622},[52,76364,3253],{"class":54231},[52,76366,54238],{"class":622},[52,76368,76369,76371,76373],{"class":54,"line":35940},[52,76370,54272],{"class":622},[52,76372,3256],{"class":54231},[52,76374,54238],{"class":622},[52,76376,76377,76379,76381],{"class":54,"line":35946},[52,76378,58164],{"class":622},[52,76380,3259],{"class":54231},[52,76382,54238],{"class":622},[52,76384,76385,76387,76389,76392,76394],{"class":54,"line":35952},[52,76386,58232],{"class":622},[52,76388,3262],{"class":54231},[52,76390,76391],{"class":622},">ID\u003C\u002F",[52,76393,3262],{"class":54231},[52,76395,54238],{"class":622},[52,76397,76398,76400,76402,76404,76406],{"class":54,"line":35963},[52,76399,58232],{"class":622},[52,76401,3262],{"class":54231},[52,76403,72384],{"class":622},[52,76405,3262],{"class":54231},[52,76407,54238],{"class":622},[52,76409,76410,76412,76414,76416,76418],{"class":54,"line":35969},[52,76411,58232],{"class":622},[52,76413,3262],{"class":54231},[52,76415,72397],{"class":622},[52,76417,3262],{"class":54231},[52,76419,54238],{"class":622},[52,76421,76422,76424,76426,76428,76430],{"class":54,"line":35975},[52,76423,58232],{"class":622},[52,76425,3262],{"class":54231},[52,76427,72410],{"class":622},[52,76429,3262],{"class":54231},[52,76431,54238],{"class":622},[52,76433,76434,76436,76438,76440,76442],{"class":54,"line":35985},[52,76435,58232],{"class":622},[52,76437,3262],{"class":54231},[52,76439,72423],{"class":622},[52,76441,3262],{"class":54231},[52,76443,54238],{"class":622},[52,76445,76446,76448,76450,76452,76454],{"class":54,"line":35991},[52,76447,58232],{"class":622},[52,76449,3262],{"class":54231},[52,76451,72436],{"class":622},[52,76453,3262],{"class":54231},[52,76455,54238],{"class":622},[52,76457,76458,76460,76462,76465,76467],{"class":54,"line":36002},[52,76459,58232],{"class":622},[52,76461,3262],{"class":54231},[52,76463,76464],{"class":622},">录入时间\u003C\u002F",[52,76466,3262],{"class":54231},[52,76468,54238],{"class":622},[52,76470,76471,76473,76475,76477,76479],{"class":54,"line":36008},[52,76472,58232],{"class":622},[52,76474,3262],{"class":54231},[52,76476,72449],{"class":622},[52,76478,3262],{"class":54231},[52,76480,54238],{"class":622},[52,76482,76483,76485,76487],{"class":54,"line":36018},[52,76484,58337],{"class":622},[52,76486,3259],{"class":54231},[52,76488,54238],{"class":622},[52,76490,76491,76493,76495],{"class":54,"line":36023},[52,76492,54707],{"class":622},[52,76494,3256],{"class":54231},[52,76496,54238],{"class":622},[52,76498,76499,76501,76503],{"class":54,"line":36029},[52,76500,54272],{"class":622},[52,76502,3299],{"class":54231},[52,76504,54238],{"class":622},[52,76506,76507],{"class":54,"line":36078},[52,76508,76509],{"class":332},"      \u003C!-- \u003Ctr>\n",[52,76511,76512],{"class":54,"line":36125},[52,76513,76514],{"class":332},"        \u003Ctd>1\u003C\u002Ftd>\n",[52,76516,76517],{"class":54,"line":36130},[52,76518,76514],{"class":332},[52,76520,76521],{"class":54,"line":36136},[52,76522,76514],{"class":332},[52,76524,76525],{"class":54,"line":36155},[52,76526,76514],{"class":332},[52,76528,76529],{"class":54,"line":36161},[52,76530,76514],{"class":332},[52,76532,76533],{"class":54,"line":36181},[52,76534,76514],{"class":332},[52,76536,76537],{"class":54,"line":36187},[52,76538,76514],{"class":332},[52,76540,76541],{"class":54,"line":36193},[52,76542,76543],{"class":332},"        \u003Ctd>\n",[52,76545,76546],{"class":54,"line":36203},[52,76547,76548],{"class":332},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[52,76550,76551],{"class":54,"line":36208},[52,76552,76553],{"class":332},"        \u003C\u002Ftd>\n",[52,76555,76556],{"class":54,"line":36214},[52,76557,76558],{"class":332},"      \u003C\u002Ftr> -->\n",[52,76560,76561,76563,76565],{"class":54,"line":36230},[52,76562,54707],{"class":622},[52,76564,3299],{"class":54231},[52,76566,54238],{"class":622},[52,76568,76569,76571,76573],{"class":54,"line":36275},[52,76570,55347],{"class":622},[52,76572,3253],{"class":54231},[52,76574,54238],{"class":622},[52,76576,76577,76579,76581],{"class":54,"line":36281},[52,76578,55075],{"class":622},[52,76580,54744],{"class":54231},[52,76582,54238],{"class":622},[52,76584,76585],{"class":54,"line":36287},[52,76586,76587],{"class":332},"    \u002F\u002F const initData = [{\n",[52,76589,76590],{"class":54,"line":36293},[52,76591,76592],{"class":332},"    \u002F\u002F   unameId: 1,\n",[52,76594,76595],{"class":54,"line":36304},[52,76596,76597],{"class":332},"    \u002F\u002F   uname: '华晨宇',\n",[52,76599,76600],{"class":54,"line":36310},[52,76601,76602],{"class":332},"    \u002F\u002F   age: 22,\n",[52,76604,76605],{"class":54,"line":36316},[52,76606,76607],{"class":332},"    \u002F\u002F   salary: 12000,\n",[52,76609,76610],{"class":54,"line":36322},[52,76611,76612],{"class":332},"    \u002F\u002F   gender: '男',\n",[52,76614,76615],{"class":54,"line":36340},[52,76616,76617],{"class":332},"    \u002F\u002F   city: '北京',\n",[52,76619,76620],{"class":54,"line":36354},[52,76621,76622],{"class":332},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[52,76624,76625],{"class":54,"line":36363},[52,76626,76627],{"class":332},"    \u002F\u002F }]\n",[52,76629,76630],{"class":54,"line":36372},[52,76631,76632],{"class":332},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[52,76634,76635],{"class":54,"line":36381},[52,76636,76637],{"class":332},"    \u002F\u002F 1.渲染业务\n",[52,76639,76640],{"class":54,"line":36390},[52,76641,76642],{"class":332},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[52,76644,76645],{"class":54,"line":36396},[52,76646,76647],{"class":332},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[52,76649,76650],{"class":54,"line":36402},[52,76651,76652],{"class":332},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[52,76654,76655],{"class":54,"line":36410},[52,76656,116],{"emptyLinePlaceholder":115},[52,76658,76659],{"class":54,"line":36415},[52,76660,76661],{"class":332},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[52,76663,76664],{"class":54,"line":36421},[52,76665,76666],{"class":332},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[52,76668,76669,76671,76673,76675],{"class":54,"line":36432},[52,76670,14177],{"class":160},[52,76672,60625],{"class":90},[52,76674,16520],{"class":160},[52,76676,54769],{"class":622},[52,76678,76679,76682,76684],{"class":54,"line":36438},[52,76680,76681],{"class":622},"    console.",[52,76683,61177],{"class":58},[52,76685,55342],{"class":622},[52,76687,76688],{"class":54,"line":36458},[52,76689,116],{"emptyLinePlaceholder":115},[52,76691,76692],{"class":54,"line":36464},[52,76693,76694],{"class":332},"    \u002F\u002F 时间函数\n",[52,76696,76697,76699,76702],{"class":54,"line":36470},[52,76698,73013],{"class":160},[52,76700,76701],{"class":58}," getTime",[52,76703,13809],{"class":622},[52,76705,76706,76708,76711,76713,76715,76718],{"class":54,"line":36476},[52,76707,61158],{"class":160},[52,76709,76710],{"class":90}," date",[52,76712,16520],{"class":160},[52,76714,14534],{"class":160},[52,76716,76717],{"class":58}," Date",[52,76719,4938],{"class":622},[52,76721,76722,76724,76726,76728,76731,76734,76736,76738,76740,76743,76746,76748,76750,76752,76754,76756,76758,76760],{"class":54,"line":36493},[52,76723,61158],{"class":160},[52,76725,19047],{"class":90},[52,76727,16520],{"class":160},[52,76729,76730],{"class":622}," date.",[52,76732,76733],{"class":58},"getHours",[52,76735,16006],{"class":622},[52,76737,4022],{"class":160},[52,76739,5000],{"class":90},[52,76741,76742],{"class":160}," ?",[52,76744,76745],{"class":62}," '0'",[52,76747,48498],{"class":160},[52,76749,76730],{"class":622},[52,76751,76733],{"class":58},[52,76753,16006],{"class":622},[52,76755,3971],{"class":160},[52,76757,76730],{"class":622},[52,76759,76733],{"class":58},[52,76761,4938],{"class":622},[52,76763,76764,76766,76769,76771,76773,76776,76778,76780,76782,76784,76786,76788,76790,76792,76794,76796,76798,76800],{"class":54,"line":36499},[52,76765,61158],{"class":160},[52,76767,76768],{"class":90}," m",[52,76770,16520],{"class":160},[52,76772,76730],{"class":622},[52,76774,76775],{"class":58},"getMinutes",[52,76777,16006],{"class":622},[52,76779,4022],{"class":160},[52,76781,5000],{"class":90},[52,76783,76742],{"class":160},[52,76785,76745],{"class":62},[52,76787,48498],{"class":160},[52,76789,76730],{"class":622},[52,76791,76775],{"class":58},[52,76793,16006],{"class":622},[52,76795,3971],{"class":160},[52,76797,76730],{"class":622},[52,76799,76775],{"class":58},[52,76801,4938],{"class":622},[52,76803,76804,76806,76808,76810,76812,76815,76817,76819,76821,76823,76825,76827,76829,76831,76833,76835,76837,76839],{"class":54,"line":36505},[52,76805,61158],{"class":160},[52,76807,11384],{"class":90},[52,76809,16520],{"class":160},[52,76811,76730],{"class":622},[52,76813,76814],{"class":58},"getSeconds",[52,76816,16006],{"class":622},[52,76818,4022],{"class":160},[52,76820,5000],{"class":90},[52,76822,76742],{"class":160},[52,76824,76745],{"class":62},[52,76826,48498],{"class":160},[52,76828,76730],{"class":622},[52,76830,76814],{"class":58},[52,76832,16006],{"class":622},[52,76834,3971],{"class":160},[52,76836,76730],{"class":622},[52,76838,76814],{"class":58},[52,76840,4938],{"class":622},[52,76842,76843,76845,76848,76850,76852,76855,76857,76860,76862,76865,76867,76869,76872,76874,76876,76878,76880,76882,76884,76887,76889,76892,76894,76897,76899,76901,76903],{"class":54,"line":36511},[52,76844,61158],{"class":160},[52,76846,76847],{"class":90}," str",[52,76849,16520],{"class":160},[52,76851,65833],{"class":62},[52,76853,76854],{"class":622},"date",[52,76856,3670],{"class":62},[52,76858,76859],{"class":58},"getFullYear",[52,76861,5388],{"class":62},[52,76863,76864],{"class":62},"}\u002F${",[52,76866,76854],{"class":622},[52,76868,3670],{"class":62},[52,76870,76871],{"class":58},"getMonth",[52,76873,16006],{"class":62},[52,76875,3593],{"class":160},[52,76877,28064],{"class":90},[52,76879,76864],{"class":62},[52,76881,76854],{"class":622},[52,76883,3670],{"class":62},[52,76885,76886],{"class":58},"getDate",[52,76888,5388],{"class":62},[52,76890,76891],{"class":62},"} ${",[52,76893,3528],{"class":622},[52,76895,76896],{"class":62},"}:${",[52,76898,3656],{"class":622},[52,76900,76896],{"class":62},[52,76902,3807],{"class":622},[52,76904,76905],{"class":62},"}`\n",[52,76907,76908,76911],{"class":54,"line":36517},[52,76909,76910],{"class":160},"      return",[52,76912,76913],{"class":622}," str\n",[52,76915,76916],{"class":54,"line":36523},[52,76917,5149],{"class":622},[52,76919,76920],{"class":54,"line":36550},[52,76921,76922],{"class":332},"    \u002F\u002F 渲染函数\n",[52,76924,76925,76927,76929,76931,76933,76935,76937,76939],{"class":54,"line":36574},[52,76926,14177],{"class":160},[52,76928,72676],{"class":90},[52,76930,16520],{"class":160},[52,76932,57326],{"class":622},[52,76934,57329],{"class":58},[52,76936,3121],{"class":622},[52,76938,72687],{"class":62},[52,76940,170],{"class":622},[52,76942,76943,76945,76947],{"class":54,"line":36580},[52,76944,73013],{"class":160},[52,76946,73016],{"class":58},[52,76948,13809],{"class":622},[52,76950,76951],{"class":54,"line":36586},[52,76952,76953],{"class":332},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[52,76955,76956],{"class":54,"line":36592},[52,76957,76958],{"class":332},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[52,76960,76961,76963,76966,76968,76970,76973,76975,76977,76979,76982,76984,76987],{"class":54,"line":36603},[52,76962,61158],{"class":160},[52,76964,76965],{"class":90}," trArr",[52,76967,16520],{"class":160},[52,76969,54896],{"class":622},[52,76971,76972],{"class":58},"map",[52,76974,3121],{"class":622},[52,76976,57379],{"class":160},[52,76978,4629],{"class":622},[52,76980,76981],{"class":8172},"ele",[52,76983,15391],{"class":622},[52,76985,76986],{"class":8172},"index",[52,76988,15398],{"class":622},[52,76990,76991,76993],{"class":54,"line":36614},[52,76992,17708],{"class":160},[52,76994,73097],{"class":62},[52,76996,76997],{"class":54,"line":36620},[52,76998,76999],{"class":62},"      \u003Ctr>\n",[52,77001,77002,77004,77006,77008,77011],{"class":54,"line":36637},[52,77003,73102],{"class":62},[52,77005,76981],{"class":622},[52,77007,3670],{"class":62},[52,77009,77010],{"class":622},"unameId",[52,77012,73117],{"class":62},[52,77014,77015,77017,77019,77021,77023],{"class":54,"line":36660},[52,77016,73102],{"class":62},[52,77018,76981],{"class":622},[52,77020,3670],{"class":62},[52,77022,2911],{"class":622},[52,77024,73117],{"class":62},[52,77026,77027,77029,77031,77033,77035],{"class":54,"line":36683},[52,77028,73102],{"class":62},[52,77030,76981],{"class":622},[52,77032,3670],{"class":62},[52,77034,73149],{"class":622},[52,77036,73117],{"class":62},[52,77038,77039,77041,77043,77045,77047],{"class":54,"line":36689},[52,77040,73102],{"class":62},[52,77042,76981],{"class":622},[52,77044,3670],{"class":62},[52,77046,73166],{"class":622},[52,77048,73117],{"class":62},[52,77050,77051,77053,77055,77057,77059],{"class":54,"line":36694},[52,77052,73102],{"class":62},[52,77054,76981],{"class":622},[52,77056,3670],{"class":62},[52,77058,73183],{"class":622},[52,77060,73117],{"class":62},[52,77062,77063,77065,77067,77069,77071],{"class":54,"line":36703},[52,77064,73102],{"class":62},[52,77066,76981],{"class":622},[52,77068,3670],{"class":62},[52,77070,73200],{"class":622},[52,77072,73117],{"class":62},[52,77074,77075,77077,77079,77081,77083],{"class":54,"line":36713},[52,77076,73102],{"class":62},[52,77078,76981],{"class":622},[52,77080,3670],{"class":62},[52,77082,5349],{"class":622},[52,77084,73117],{"class":62},[52,77086,77087],{"class":54,"line":36719},[52,77088,76543],{"class":62},[52,77090,77091,77094,77096],{"class":54,"line":36724},[52,77092,77093],{"class":62},"          \u003Ca href=\"#\" data-id=\"${",[52,77095,76986],{"class":622},[52,77097,77098],{"class":62},"}\">删除\u003C\u002Fa>\n",[52,77100,77101],{"class":54,"line":36730},[52,77102,76553],{"class":62},[52,77104,77105],{"class":54,"line":36743},[52,77106,77107],{"class":62},"      \u003C\u002Ftr>\n",[52,77109,77110],{"class":54,"line":36749},[52,77111,77112],{"class":62},"  `\n",[52,77114,77115],{"class":54,"line":36760},[52,77116,67744],{"class":622},[52,77118,77119,77121,77123],{"class":54,"line":36771},[52,77120,61174],{"class":622},[52,77122,61177],{"class":58},[52,77124,77125],{"class":622},"(trArr)\n",[52,77127,77128],{"class":54,"line":36790},[52,77129,116],{"emptyLinePlaceholder":115},[52,77131,77132],{"class":54,"line":52449},[52,77133,77134],{"class":332},"      \u002F\u002F (2) 把数组转换为字符串join\n",[52,77136,77137],{"class":54,"line":52454},[52,77138,77139],{"class":332},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[52,77141,77142,77144,77146,77149,77152,77154,77157],{"class":54,"line":52463},[52,77143,73028],{"class":622},[52,77145,2099],{"class":160},[52,77147,77148],{"class":622}," trArr.",[52,77150,77151],{"class":58},"join",[52,77153,3121],{"class":622},[52,77155,77156],{"class":62},"''",[52,77158,170],{"class":622},[52,77160,77161],{"class":54,"line":52472},[52,77162,77163],{"class":332},"      \u002F\u002F 显示共有几条\n",[52,77165,77166,77168,77170,77172,77175,77178,77180,77182],{"class":54,"line":52477},[52,77167,58701],{"class":622},[52,77169,57329],{"class":58},[52,77171,3121],{"class":622},[52,77173,77174],{"class":62},"'.total span'",[52,77176,77177],{"class":622},").innerHTML ",[52,77179,2099],{"class":160},[52,77181,54896],{"class":622},[52,77183,58761],{"class":90},[52,77185,77186],{"class":54,"line":52482},[52,77187,5149],{"class":622},[52,77189,77190],{"class":54,"line":52487},[52,77191,77192],{"class":332},"    \u002F\u002F render()\n",[52,77194,77195],{"class":54,"line":52500},[52,77196,116],{"emptyLinePlaceholder":115},[52,77198,77199],{"class":54,"line":52505},[52,77200,77201],{"class":332},"    \u002F\u002F 获取DOM对象\n",[52,77203,77204,77206,77208,77210,77212,77214,77216,77218],{"class":54,"line":52514},[52,77205,14177],{"class":160},[52,77207,72750],{"class":90},[52,77209,16520],{"class":160},[52,77211,57326],{"class":622},[52,77213,57329],{"class":58},[52,77215,3121],{"class":622},[52,77217,72761],{"class":62},[52,77219,170],{"class":622},[52,77221,77222,77224,77226,77228,77230,77232,77234,77236],{"class":54,"line":52523},[52,77223,14177],{"class":160},[52,77225,72577],{"class":90},[52,77227,16520],{"class":160},[52,77229,57326],{"class":622},[52,77231,57329],{"class":58},[52,77233,3121],{"class":622},[52,77235,72588],{"class":62},[52,77237,170],{"class":622},[52,77239,77240,77242,77244,77246,77248,77250,77252,77254],{"class":54,"line":52540},[52,77241,14177],{"class":160},[52,77243,18645],{"class":90},[52,77245,16520],{"class":160},[52,77247,57326],{"class":622},[52,77249,57329],{"class":58},[52,77251,3121],{"class":622},[52,77253,72607],{"class":62},[52,77255,170],{"class":622},[52,77257,77259,77261,77263,77265,77267,77269,77271,77273],{"class":54,"line":77258},231,[52,77260,14177],{"class":160},[52,77262,72636],{"class":90},[52,77264,16520],{"class":160},[52,77266,57326],{"class":622},[52,77268,57329],{"class":58},[52,77270,3121],{"class":622},[52,77272,72647],{"class":62},[52,77274,170],{"class":622},[52,77276,77278,77280,77282,77284,77286,77288,77290,77292],{"class":54,"line":77277},232,[52,77279,14177],{"class":160},[52,77281,72616],{"class":90},[52,77283,16520],{"class":160},[52,77285,57326],{"class":622},[52,77287,57329],{"class":58},[52,77289,3121],{"class":622},[52,77291,72627],{"class":62},[52,77293,170],{"class":622},[52,77295,77297,77299,77301,77303,77305,77307,77309,77311],{"class":54,"line":77296},233,[52,77298,14177],{"class":160},[52,77300,72656],{"class":90},[52,77302,16520],{"class":160},[52,77304,57326],{"class":622},[52,77306,57329],{"class":58},[52,77308,3121],{"class":622},[52,77310,72667],{"class":62},[52,77312,170],{"class":622},[52,77314,77316],{"class":54,"line":77315},234,[52,77317,116],{"emptyLinePlaceholder":115},[52,77319,77321],{"class":54,"line":77320},235,[52,77322,77323],{"class":332},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[52,77325,77327,77329,77331,77333,77335,77337,77339,77341,77343],{"class":54,"line":77326},236,[52,77328,72768],{"class":622},[52,77330,60743],{"class":58},[52,77332,3121],{"class":622},[52,77334,72775],{"class":62},[52,77336,15391],{"class":622},[52,77338,57379],{"class":160},[52,77340,4629],{"class":622},[52,77342,3191],{"class":8172},[52,77344,15398],{"class":622},[52,77346,77348],{"class":54,"line":77347},237,[52,77349,77350],{"class":332},"      \u002F\u002F 禁止浏览器跳转\n",[52,77352,77354,77356,77358],{"class":54,"line":77353},238,[52,77355,72795],{"class":622},[52,77357,72798],{"class":58},[52,77359,4938],{"class":622},[52,77361,77363],{"class":54,"line":77362},239,[52,77364,77365],{"class":332},"      \u002F\u002F 非空判断\n",[52,77367,77369],{"class":54,"line":77368},240,[52,77370,77371],{"class":332},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[52,77373,77375],{"class":54,"line":77374},241,[52,77376,77377],{"class":332},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[52,77379,77381,77383,77385,77387,77390,77392,77395,77398,77400,77402],{"class":54,"line":77380},242,[52,77382,57410],{"class":160},[52,77384,4629],{"class":622},[52,77386,161],{"class":160},[52,77388,77389],{"class":622},"uname.value ",[52,77391,74285],{"class":160},[52,77393,77394],{"class":160}," !",[52,77396,77397],{"class":622},"age.value ",[52,77399,74285],{"class":160},[52,77401,77394],{"class":160},[52,77403,77404],{"class":622},"salary.value) {\n",[52,77406,77408,77410,77412,77414,77416],{"class":54,"line":77407},243,[52,77409,17708],{"class":160},[52,77411,72869],{"class":58},[52,77413,3121],{"class":622},[52,77415,72874],{"class":62},[52,77417,170],{"class":622},[52,77419,77421],{"class":54,"line":77420},244,[52,77422,55328],{"class":622},[52,77424,77426,77428,77430],{"class":54,"line":77425},245,[52,77427,60937],{"class":622},[52,77429,54815],{"class":58},[52,77431,77432],{"class":622},"({\n",[52,77434,77436],{"class":54,"line":77435},246,[52,77437,77438],{"class":332},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[52,77440,77442],{"class":54,"line":77441},247,[52,77443,77444],{"class":332},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[52,77446,77448],{"class":54,"line":77447},248,[52,77449,77450],{"class":332},"        \u002F\u002F 对象的序号应为数组长度+1\n",[52,77452,77454],{"class":54,"line":77453},249,[52,77455,77456],{"class":332},"        \u002F\u002F unameId: arr.length + 1,\n",[52,77458,77460],{"class":54,"line":77459},250,[52,77461,116],{"emptyLinePlaceholder":115},[52,77463,77465],{"class":54,"line":77464},251,[52,77466,77467],{"class":332},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[52,77469,77471],{"class":54,"line":77470},252,[52,77472,77473],{"class":332},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[52,77475,77477],{"class":54,"line":77476},253,[52,77478,77479],{"class":332},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[52,77481,77483],{"class":54,"line":77482},254,[52,77484,77485],{"class":332},"        \u002F\u002F 0当假看\n",[52,77487,77489,77492,77494,77496,77499,77501,77503,77505,77508,77510,77512,77515,77517],{"class":54,"line":77488},255,[52,77490,77491],{"class":622},"        unameId: arr.",[52,77493,54899],{"class":90},[52,77495,76742],{"class":160},[52,77497,77498],{"class":622}," arr[arr.",[52,77500,54899],{"class":90},[52,77502,1989],{"class":160},[52,77504,28064],{"class":90},[52,77506,77507],{"class":622},"].unameId ",[52,77509,3593],{"class":160},[52,77511,28064],{"class":90},[52,77513,77514],{"class":160}," :",[52,77516,28064],{"class":90},[52,77518,34398],{"class":622},[52,77520,77522],{"class":54,"line":77521},256,[52,77523,72922],{"class":622},[52,77525,77527],{"class":54,"line":77526},257,[52,77528,72927],{"class":622},[52,77530,77532],{"class":54,"line":77531},258,[52,77533,72937],{"class":622},[52,77535,77537],{"class":54,"line":77536},259,[52,77538,72932],{"class":622},[52,77540,77542],{"class":54,"line":77541},260,[52,77543,77544],{"class":622},"        city: city.value,\n",[52,77546,77548],{"class":54,"line":77547},261,[52,77549,77550],{"class":332},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[52,77552,77554],{"class":54,"line":77553},262,[52,77555,77556],{"class":332},"        \u002F\u002F time: new Date().toDateString()\n",[52,77558,77560,77563,77566],{"class":54,"line":77559},263,[52,77561,77562],{"class":622},"        time: ",[52,77564,77565],{"class":58},"getTime",[52,77567,4938],{"class":622},[52,77569,77571],{"class":54,"line":77570},264,[52,77572,67744],{"class":622},[52,77574,77576],{"class":54,"line":77575},265,[52,77577,77578],{"class":332},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[52,77580,77582,77584],{"class":54,"line":77581},266,[52,77583,72997],{"class":58},[52,77585,4938],{"class":622},[52,77587,77589,77591,77593,77595,77597],{"class":54,"line":77588},267,[52,77590,72980],{"class":90},[52,77592,3670],{"class":622},[52,77594,72985],{"class":58},[52,77596,16006],{"class":622},[52,77598,77599],{"class":332},"\u002F\u002F重置表单\n",[52,77601,77603],{"class":54,"line":77602},268,[52,77604,77605],{"class":332},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[52,77607,77609,77612,77614,77616,77619,77621,77623,77625,77627],{"class":54,"line":77608},269,[52,77610,77611],{"class":622},"      localStorage.",[52,77613,74582],{"class":58},[52,77615,3121],{"class":622},[52,77617,77618],{"class":62},"'data'",[52,77620,15391],{"class":622},[52,77622,74592],{"class":90},[52,77624,3670],{"class":622},[52,77626,74597],{"class":58},[52,77628,77629],{"class":622},"(arr))\n",[52,77631,77633],{"class":54,"line":77632},270,[52,77634,36393],{"class":622},[52,77636,77638],{"class":54,"line":77637},271,[52,77639,116],{"emptyLinePlaceholder":115},[52,77641,77643],{"class":54,"line":77642},272,[52,77644,77645],{"class":332},"    \u002F\u002F 3.删除业务\n",[52,77647,77649],{"class":54,"line":77648},273,[52,77650,77651],{"class":332},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[52,77653,77655,77657,77659,77661,77663,77665,77667,77669,77671],{"class":54,"line":77654},274,[52,77656,73269],{"class":622},[52,77658,60743],{"class":58},[52,77660,3121],{"class":622},[52,77662,60748],{"class":62},[52,77664,15391],{"class":622},[52,77666,57379],{"class":160},[52,77668,4629],{"class":622},[52,77670,3191],{"class":8172},[52,77672,15398],{"class":622},[52,77674,77676],{"class":54,"line":77675},275,[52,77677,77678],{"class":332},"      \u002F\u002F 判断是否点击的是删除按钮\n",[52,77680,77682,77684,77686,77688,77690],{"class":54,"line":77681},276,[52,77683,57410],{"class":160},[52,77685,69963],{"class":622},[52,77687,57416],{"class":160},[52,77689,71185],{"class":62},[52,77691,15398],{"class":622},[52,77693,77695],{"class":54,"line":77694},277,[52,77696,77697],{"class":332},"        \u002F\u002F alert(1)\n",[52,77699,77701],{"class":54,"line":77700},278,[52,77702,77703],{"class":332},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[52,77705,77707],{"class":54,"line":77706},279,[52,77708,77709],{"class":332},"        \u002F\u002F console.log(e.target)\n",[52,77711,77713],{"class":54,"line":77712},280,[52,77714,77715],{"class":332},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[52,77717,77719],{"class":54,"line":77718},281,[52,77720,116],{"emptyLinePlaceholder":115},[52,77722,77724],{"class":54,"line":77723},282,[52,77725,77726],{"class":332},"        \u002F\u002F 确认框，确然是否真的要删除\n",[52,77728,77730],{"class":54,"line":77729},283,[52,77731,77732],{"class":332},"        \u002F\u002F confirm()为确认框\n",[52,77734,77736],{"class":54,"line":77735},284,[52,77737,77738],{"class":332},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[52,77740,77742,77744,77746,77749,77751,77754],{"class":54,"line":77741},285,[52,77743,5458],{"class":160},[52,77745,4629],{"class":622},[52,77747,77748],{"class":58},"confirm",[52,77750,3121],{"class":622},[52,77752,77753],{"class":62},"'您确定要删除这条数据吗？'",[52,77755,77756],{"class":622},")) {\n",[52,77758,77760,77763,77765,77767,77769],{"class":54,"line":77759},286,[52,77761,77762],{"class":622},"          arr.",[52,77764,60940],{"class":58},[52,77766,73322],{"class":622},[52,77768,3332],{"class":90},[52,77770,170],{"class":622},[52,77772,77774],{"class":54,"line":77773},287,[52,77775,77776],{"class":332},"          \u002F\u002F 3.4 重新渲染页面\n",[52,77778,77780,77783],{"class":54,"line":77779},288,[52,77781,77782],{"class":58},"          render",[52,77784,4938],{"class":622},[52,77786,77788],{"class":54,"line":77787},289,[52,77789,77790],{"class":332},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[52,77792,77794,77797,77799,77801,77803,77805,77807,77809,77811],{"class":54,"line":77793},290,[52,77795,77796],{"class":622},"          localStorage.",[52,77798,74582],{"class":58},[52,77800,3121],{"class":622},[52,77802,77618],{"class":62},[52,77804,15391],{"class":622},[52,77806,74592],{"class":90},[52,77808,3670],{"class":622},[52,77810,74597],{"class":58},[52,77812,77629],{"class":622},[52,77814,77816],{"class":54,"line":77815},291,[52,77817,5490],{"class":622},[52,77819,77821],{"class":54,"line":77820},292,[52,77822,55328],{"class":622},[52,77824,77826],{"class":54,"line":77825},293,[52,77827,116],{"emptyLinePlaceholder":115},[52,77829,77831],{"class":54,"line":77830},294,[52,77832,36393],{"class":622},[52,77834,77836],{"class":54,"line":77835},295,[52,77837,116],{"emptyLinePlaceholder":115},[52,77839,77841,77843,77845],{"class":54,"line":77840},296,[52,77842,55347],{"class":622},[52,77844,54744],{"class":54231},[52,77846,54238],{"class":622},[52,77848,77850,77852,77854],{"class":54,"line":77849},297,[52,77851,54716],{"class":622},[52,77853,54731],{"class":54231},[52,77855,54238],{"class":622},[52,77857,77859],{"class":54,"line":77858},298,[52,77860,116],{"emptyLinePlaceholder":115},[52,77862,77864,77866,77868],{"class":54,"line":77863},299,[52,77865,54716],{"class":622},[52,77867,53566],{"class":54231},[52,77869,54238],{"class":622},[14,77871,77873],{"id":77872},"_36-正则表达式","3.6 正则表达式",[274,77875,77876],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[274,77878,77879],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[274,77881,77882],{},"正则表达式的作用：",[4118,77884,77885,77892,77898],{},[1073,77886,77887,77888,77891],{},"表单验证（ ",[538,77889,77890],{},"匹配"," ）",[1073,77893,77894,77895,77891],{},"过滤敏感词（ ",[538,77896,77897],{},"替换",[1073,77899,77900,77901,77891],{},"字符串中提取我们想要的部分（ ",[538,77902,77903],{},"提取",[30,77905,77907],{"id":77906},"_361-语法","3.6.1 语法",[274,77909,77910],{},"正则表达式使用步骤：",[1070,77912,77913,77916],{},[1073,77914,77915],{},"定义规则",[1073,77917,77918],{},"查找是否匹配",[274,77920,77921],{},"正则表达式里边不需要写引号",[274,77923,77924],{},[280,77925],{"alt":28,"src":77926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[274,77928,77929],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[274,77931,77932],{},"reg.test(str)",[274,77934,77935],{},[280,77936],{"alt":28,"src":77937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[274,77939,77940],{},[280,77941],{"alt":28,"src":77942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[30,77944,77946],{"id":77945},"_362-元字符","3.6.2 元字符",[1070,77948,77949,77952,77955,77958,77965],{},[1073,77950,77951],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[1073,77953,77954],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[1073,77956,77957],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[1073,77959,77960,77961],{},"正则验证工具：",[300,77962,77963],{"href":77963,"rel":77964},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[304],[1073,77966,77967],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[1486,77969,77971],{"id":77970},"_3621-边界符","3.6.2.1 边界符",[274,77973,77974],{},[280,77975],{"alt":28,"src":77976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[274,77978,77979],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[274,77981,77982],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[274,77984,77985],{},"只匹配一次",[274,77987,77988],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[1486,77990,77992],{"id":77991},"_3622-量词","3.6.2.2 量词",[274,77994,77995],{},[280,77996],{"alt":28,"src":77997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[274,77999,78000],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[1486,78002,78004],{"id":78003},"_3623-元字符","3.6.2.3 元字符",[274,78006,78007],{},[280,78008],{"alt":28,"src":78009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[274,78011,78012],{},"匹配的是a或b或c []只选一个",[274,78014,78015],{},[280,78016],{"alt":28,"src":78017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[274,78019,78020],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[274,78022,78023],{},[280,78024],{"alt":28,"src":78025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[274,78027,78028],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[274,78030,78031],{},[280,78032],{"alt":28,"src":78033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[19,78035,78037],{"className":53564,"code":78036,"language":53566,"meta":28,"style":28},"\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",[26,78038,78039,78049,78063,78067,78075,78089,78109,78121,78129,78133,78141,78149,78154,78185,78212,78240,78244,78249,78277,78308,78313,78318,78349,78381,78413,78417,78422,78453,78483,78513,78517,78522,78553,78584,78614,78644,78648,78653,78686,78690,78695,78726,78757,78761,78766,78797,78827,78858,78862,78867,78899,78930,78961,78988,79019,79051,79084,79115,79146,79178,79209,79217,79225,79229],{"__ignoreMap":28},[52,78040,78041,78043,78045,78047],{"class":54,"line":55},[52,78042,54228],{"class":622},[52,78044,54232],{"class":54231},[52,78046,54235],{"class":58},[52,78048,54238],{"class":622},[52,78050,78051,78053,78055,78057,78059,78061],{"class":54,"line":69},[52,78052,4022],{"class":622},[52,78054,53566],{"class":54231},[52,78056,54247],{"class":58},[52,78058,2099],{"class":622},[52,78060,54252],{"class":62},[52,78062,54238],{"class":622},[52,78064,78065],{"class":54,"line":82},[52,78066,116],{"emptyLinePlaceholder":115},[52,78068,78069,78071,78073],{"class":54,"line":97},[52,78070,4022],{"class":622},[52,78072,54265],{"class":54231},[52,78074,54238],{"class":622},[52,78076,78077,78079,78081,78083,78085,78087],{"class":54,"line":112},[52,78078,55075],{"class":622},[52,78080,54275],{"class":54231},[52,78082,54278],{"class":58},[52,78084,2099],{"class":622},[52,78086,54283],{"class":62},[52,78088,54238],{"class":622},[52,78090,78091,78093,78095,78097,78099,78101,78103,78105,78107],{"class":54,"line":119},[52,78092,55075],{"class":622},[52,78094,54275],{"class":54231},[52,78096,17876],{"class":58},[52,78098,2099],{"class":622},[52,78100,54322],{"class":62},[52,78102,54302],{"class":58},[52,78104,2099],{"class":622},[52,78106,54329],{"class":62},[52,78108,54238],{"class":622},[52,78110,78111,78113,78115,78117,78119],{"class":54,"line":130},[52,78112,55075],{"class":622},[52,78114,54338],{"class":54231},[52,78116,54341],{"class":622},[52,78118,54338],{"class":54231},[52,78120,54238],{"class":622},[52,78122,78123,78125,78127],{"class":54,"line":136},[52,78124,54716],{"class":622},[52,78126,54265],{"class":54231},[52,78128,54238],{"class":622},[52,78130,78131],{"class":54,"line":141},[52,78132,116],{"emptyLinePlaceholder":115},[52,78134,78135,78137,78139],{"class":54,"line":146},[52,78136,4022],{"class":622},[52,78138,54731],{"class":54231},[52,78140,54238],{"class":622},[52,78142,78143,78145,78147],{"class":54,"line":152},[52,78144,55075],{"class":622},[52,78146,54744],{"class":54231},[52,78148,54238],{"class":622},[52,78150,78151],{"class":54,"line":157},[52,78152,78153],{"class":332},"    \u002F\u002F 元字符中\n",[52,78155,78156,78158,78160,78162,78164,78167,78169,78171,78174,78176,78179,78182],{"class":54,"line":173},[52,78157,76681],{"class":622},[52,78159,61177],{"class":58},[52,78161,3121],{"class":622},[52,78163,3696],{"class":62},[52,78165,78166],{"class":50908},"哈",[52,78168,3696],{"class":62},[52,78170,3670],{"class":622},[52,78172,78173],{"class":58},"test",[52,78175,3121],{"class":622},[52,78177,78178],{"class":62},"'哈'",[52,78180,78181],{"class":622},"))  ",[52,78183,78184],{"class":332},"\u002F\u002Ftrue\n",[52,78186,78187,78189,78191,78193,78195,78197,78199,78201,78203,78205,78208,78210],{"class":54,"line":178},[52,78188,76681],{"class":622},[52,78190,61177],{"class":58},[52,78192,3121],{"class":622},[52,78194,3696],{"class":62},[52,78196,78166],{"class":50908},[52,78198,3696],{"class":62},[52,78200,3670],{"class":622},[52,78202,78173],{"class":58},[52,78204,3121],{"class":622},[52,78206,78207],{"class":62},"'哈哈'",[52,78209,78181],{"class":622},[52,78211,78184],{"class":332},[52,78213,78214,78216,78218,78220,78222,78224,78226,78228,78230,78232,78235,78238],{"class":54,"line":184},[52,78215,76681],{"class":622},[52,78217,61177],{"class":58},[52,78219,3121],{"class":622},[52,78221,3696],{"class":62},[52,78223,78166],{"class":50908},[52,78225,3696],{"class":62},[52,78227,3670],{"class":622},[52,78229,78173],{"class":58},[52,78231,3121],{"class":622},[52,78233,78234],{"class":62},"'二哈'",[52,78236,78237],{"class":622},"))   ",[52,78239,78184],{"class":332},[52,78241,78242],{"class":54,"line":189},[52,78243,116],{"emptyLinePlaceholder":115},[52,78245,78246],{"class":54,"line":201},[52,78247,78248],{"class":332},"    \u002F\u002F 1.边界符\n",[52,78250,78251,78253,78255,78257,78259,78261,78263,78265,78267,78269,78271,78273,78275],{"class":54,"line":206},[52,78252,76681],{"class":622},[52,78254,61177],{"class":58},[52,78256,3121],{"class":622},[52,78258,3696],{"class":62},[52,78260,4078],{"class":160},[52,78262,78166],{"class":50908},[52,78264,3696],{"class":62},[52,78266,3670],{"class":622},[52,78268,78173],{"class":58},[52,78270,3121],{"class":622},[52,78272,78178],{"class":62},[52,78274,78181],{"class":622},[52,78276,78184],{"class":332},[52,78278,78279,78281,78283,78285,78287,78289,78291,78293,78295,78297,78299,78301,78303,78305],{"class":54,"line":224},[52,78280,76681],{"class":622},[52,78282,61177],{"class":58},[52,78284,3121],{"class":622},[52,78286,3696],{"class":62},[52,78288,4078],{"class":160},[52,78290,78166],{"class":50908},[52,78292,3415],{"class":160},[52,78294,3696],{"class":62},[52,78296,3670],{"class":622},[52,78298,78173],{"class":58},[52,78300,3121],{"class":622},[52,78302,78207],{"class":62},[52,78304,78181],{"class":622},[52,78306,78307],{"class":332},"\u002F\u002Ffalse\n",[52,78309,78310],{"class":54,"line":229},[52,78311,78312],{"class":332},"    \u002F\u002F 2.量词\n",[52,78314,78315],{"class":54,"line":241},[52,78316,78317],{"class":332},"    \u002F\u002F 量词 * 类似于 >= 0\n",[52,78319,78320,78322,78324,78326,78328,78330,78332,78335,78337,78339,78341,78343,78345,78347],{"class":54,"line":246},[52,78321,76681],{"class":622},[52,78323,61177],{"class":58},[52,78325,3121],{"class":622},[52,78327,3696],{"class":62},[52,78329,4078],{"class":160},[52,78331,78166],{"class":50908},[52,78333,78334],{"class":160},"*$",[52,78336,3696],{"class":62},[52,78338,3670],{"class":622},[52,78340,78173],{"class":58},[52,78342,3121],{"class":622},[52,78344,78207],{"class":62},[52,78346,78181],{"class":622},[52,78348,78184],{"class":332},[52,78350,78351,78353,78355,78357,78359,78361,78363,78365,78367,78369,78371,78373,78376,78378],{"class":54,"line":252},[52,78352,76681],{"class":622},[52,78354,61177],{"class":58},[52,78356,3121],{"class":622},[52,78358,3696],{"class":62},[52,78360,4078],{"class":160},[52,78362,78166],{"class":50908},[52,78364,78334],{"class":160},[52,78366,3696],{"class":62},[52,78368,3670],{"class":622},[52,78370,78173],{"class":58},[52,78372,3121],{"class":622},[52,78374,78375],{"class":62},"'二哈好傻'",[52,78377,78181],{"class":622},[52,78379,78380],{"class":332},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[52,78382,78383,78385,78387,78389,78391,78393,78395,78397,78399,78401,78403,78405,78408,78410],{"class":54,"line":257},[52,78384,76681],{"class":622},[52,78386,61177],{"class":58},[52,78388,3121],{"class":622},[52,78390,3696],{"class":62},[52,78392,4078],{"class":160},[52,78394,78166],{"class":50908},[52,78396,78334],{"class":160},[52,78398,3696],{"class":62},[52,78400,3670],{"class":622},[52,78402,78173],{"class":58},[52,78404,3121],{"class":622},[52,78406,78407],{"class":62},"'哈好哈'",[52,78409,78237],{"class":622},[52,78411,78412],{"class":332},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[52,78414,78415],{"class":54,"line":266},[52,78416,116],{"emptyLinePlaceholder":115},[52,78418,78419],{"class":54,"line":4722},[52,78420,78421],{"class":332},"    \u002F\u002F +类似于>=1\n",[52,78423,78424,78426,78428,78430,78432,78434,78436,78439,78441,78443,78445,78447,78449,78451],{"class":54,"line":4727},[52,78425,76681],{"class":622},[52,78427,61177],{"class":58},[52,78429,3121],{"class":622},[52,78431,3696],{"class":62},[52,78433,4078],{"class":160},[52,78435,78166],{"class":50908},[52,78437,78438],{"class":160},"+$",[52,78440,3696],{"class":62},[52,78442,3670],{"class":622},[52,78444,78173],{"class":58},[52,78446,3121],{"class":622},[52,78448,78207],{"class":62},[52,78450,78181],{"class":622},[52,78452,78184],{"class":332},[52,78454,78455,78457,78459,78461,78463,78465,78467,78469,78471,78473,78475,78477,78479,78481],{"class":54,"line":4741},[52,78456,76681],{"class":622},[52,78458,61177],{"class":58},[52,78460,3121],{"class":622},[52,78462,3696],{"class":62},[52,78464,4078],{"class":160},[52,78466,78166],{"class":50908},[52,78468,78438],{"class":160},[52,78470,3696],{"class":62},[52,78472,3670],{"class":622},[52,78474,78173],{"class":58},[52,78476,3121],{"class":622},[52,78478,78375],{"class":62},[52,78480,78181],{"class":622},[52,78482,78380],{"class":332},[52,78484,78485,78487,78489,78491,78493,78495,78497,78499,78501,78503,78505,78507,78509,78511],{"class":54,"line":4746},[52,78486,76681],{"class":622},[52,78488,61177],{"class":58},[52,78490,3121],{"class":622},[52,78492,3696],{"class":62},[52,78494,4078],{"class":160},[52,78496,78166],{"class":50908},[52,78498,78438],{"class":160},[52,78500,3696],{"class":62},[52,78502,3670],{"class":622},[52,78504,78173],{"class":58},[52,78506,3121],{"class":622},[52,78508,78407],{"class":62},[52,78510,78237],{"class":622},[52,78512,78307],{"class":332},[52,78514,78515],{"class":54,"line":5538},[52,78516,116],{"emptyLinePlaceholder":115},[52,78518,78519],{"class":54,"line":5552},[52,78520,78521],{"class":332},"    \u002F\u002F ?类似于0次或一次\n",[52,78523,78524,78526,78528,78530,78532,78534,78537,78539,78541,78543,78545,78547,78549,78551],{"class":54,"line":5560},[52,78525,76681],{"class":622},[52,78527,61177],{"class":58},[52,78529,3121],{"class":622},[52,78531,3696],{"class":62},[52,78533,4078],{"class":160},[52,78535,78536],{"class":50908},"哈？",[52,78538,3415],{"class":160},[52,78540,3696],{"class":62},[52,78542,3670],{"class":622},[52,78544,78173],{"class":58},[52,78546,3121],{"class":622},[52,78548,77156],{"class":62},[52,78550,78237],{"class":622},[52,78552,78184],{"class":332},[52,78554,78555,78557,78559,78561,78563,78565,78567,78570,78572,78574,78576,78578,78580,78582],{"class":54,"line":5565},[52,78556,76681],{"class":622},[52,78558,61177],{"class":58},[52,78560,3121],{"class":622},[52,78562,3696],{"class":62},[52,78564,4078],{"class":160},[52,78566,78166],{"class":50908},[52,78568,78569],{"class":160},"?$",[52,78571,3696],{"class":62},[52,78573,3670],{"class":622},[52,78575,78173],{"class":58},[52,78577,3121],{"class":622},[52,78579,78207],{"class":62},[52,78581,78181],{"class":622},[52,78583,78307],{"class":332},[52,78585,78586,78588,78590,78592,78594,78596,78598,78600,78602,78604,78606,78608,78610,78612],{"class":54,"line":5571},[52,78587,76681],{"class":622},[52,78589,61177],{"class":58},[52,78591,3121],{"class":622},[52,78593,3696],{"class":62},[52,78595,4078],{"class":160},[52,78597,78166],{"class":50908},[52,78599,78569],{"class":160},[52,78601,3696],{"class":62},[52,78603,3670],{"class":622},[52,78605,78173],{"class":58},[52,78607,3121],{"class":622},[52,78609,78375],{"class":62},[52,78611,78181],{"class":622},[52,78613,78380],{"class":332},[52,78615,78616,78618,78620,78622,78624,78626,78628,78630,78632,78634,78636,78638,78640,78642],{"class":54,"line":5577},[52,78617,76681],{"class":622},[52,78619,61177],{"class":58},[52,78621,3121],{"class":622},[52,78623,3696],{"class":62},[52,78625,4078],{"class":160},[52,78627,78166],{"class":50908},[52,78629,78569],{"class":160},[52,78631,3696],{"class":62},[52,78633,3670],{"class":622},[52,78635,78173],{"class":58},[52,78637,3121],{"class":622},[52,78639,78407],{"class":62},[52,78641,78181],{"class":622},[52,78643,78307],{"class":332},[52,78645,78646],{"class":54,"line":5582},[52,78647,116],{"emptyLinePlaceholder":115},[52,78649,78650],{"class":54,"line":10904},[52,78651,78652],{"class":332},"    \u002F\u002F {n}写几，就必须出现几次\n",[52,78654,78655,78657,78659,78661,78663,78665,78667,78670,78672,78674,78676,78678,78681,78684],{"class":54,"line":10928},[52,78656,76681],{"class":622},[52,78658,61177],{"class":58},[52,78660,3121],{"class":622},[52,78662,3696],{"class":62},[52,78664,4078],{"class":160},[52,78666,78166],{"class":50908},[52,78668,78669],{"class":160},"{4}$",[52,78671,3696],{"class":62},[52,78673,3670],{"class":622},[52,78675,78173],{"class":58},[52,78677,3121],{"class":622},[52,78679,78680],{"class":62},"'哈哈哈哈'",[52,78682,78683],{"class":622},")) ",[52,78685,78184],{"class":332},[52,78687,78688],{"class":54,"line":10933},[52,78689,116],{"emptyLinePlaceholder":115},[52,78691,78692],{"class":54,"line":10939},[52,78693,78694],{"class":332},"    \u002F\u002F {n,}大于等于n次\n",[52,78696,78697,78699,78701,78703,78705,78707,78709,78712,78714,78716,78718,78720,78722,78724],{"class":54,"line":10966},[52,78698,76681],{"class":622},[52,78700,61177],{"class":58},[52,78702,3121],{"class":622},[52,78704,3696],{"class":62},[52,78706,4078],{"class":160},[52,78708,78166],{"class":50908},[52,78710,78711],{"class":160},"{4,}$",[52,78713,3696],{"class":62},[52,78715,3670],{"class":622},[52,78717,78173],{"class":58},[52,78719,3121],{"class":622},[52,78721,78680],{"class":62},[52,78723,78683],{"class":622},[52,78725,78184],{"class":332},[52,78727,78728,78730,78732,78734,78736,78738,78740,78742,78744,78746,78748,78750,78753,78755],{"class":54,"line":10971},[52,78729,76681],{"class":622},[52,78731,61177],{"class":58},[52,78733,3121],{"class":622},[52,78735,3696],{"class":62},[52,78737,4078],{"class":160},[52,78739,78166],{"class":50908},[52,78741,78711],{"class":160},[52,78743,3696],{"class":62},[52,78745,3670],{"class":622},[52,78747,78173],{"class":58},[52,78749,3121],{"class":622},[52,78751,78752],{"class":62},"'哈哈哈哈哈'",[52,78754,78683],{"class":622},[52,78756,78184],{"class":332},[52,78758,78759],{"class":54,"line":10977},[52,78760,116],{"emptyLinePlaceholder":115},[52,78762,78763],{"class":54,"line":10989},[52,78764,78765],{"class":332},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[52,78767,78768,78770,78772,78774,78776,78778,78780,78783,78785,78787,78789,78791,78793,78795],{"class":54,"line":11001},[52,78769,76681],{"class":622},[52,78771,61177],{"class":58},[52,78773,3121],{"class":622},[52,78775,3696],{"class":62},[52,78777,4078],{"class":160},[52,78779,78166],{"class":50908},[52,78781,78782],{"class":160},"{4,6}$",[52,78784,3696],{"class":62},[52,78786,3670],{"class":622},[52,78788,78173],{"class":58},[52,78790,3121],{"class":622},[52,78792,78680],{"class":62},[52,78794,78683],{"class":622},[52,78796,78184],{"class":332},[52,78798,78799,78801,78803,78805,78807,78809,78811,78813,78815,78817,78819,78821,78823,78825],{"class":54,"line":11013},[52,78800,76681],{"class":622},[52,78802,61177],{"class":58},[52,78804,3121],{"class":622},[52,78806,3696],{"class":62},[52,78808,4078],{"class":160},[52,78810,78166],{"class":50908},[52,78812,78782],{"class":160},[52,78814,3696],{"class":62},[52,78816,3670],{"class":622},[52,78818,78173],{"class":58},[52,78820,3121],{"class":622},[52,78822,78752],{"class":62},[52,78824,78683],{"class":622},[52,78826,78184],{"class":332},[52,78828,78829,78831,78833,78835,78837,78839,78841,78843,78845,78847,78849,78851,78854,78856],{"class":54,"line":12672},[52,78830,76681],{"class":622},[52,78832,61177],{"class":58},[52,78834,3121],{"class":622},[52,78836,3696],{"class":62},[52,78838,4078],{"class":160},[52,78840,78166],{"class":50908},[52,78842,78782],{"class":160},[52,78844,3696],{"class":62},[52,78846,3670],{"class":622},[52,78848,78173],{"class":58},[52,78850,3121],{"class":622},[52,78852,78853],{"class":62},"'哈哈哈哈哈哈哈'",[52,78855,78683],{"class":622},[52,78857,78307],{"class":332},[52,78859,78860],{"class":54,"line":12697},[52,78861,116],{"emptyLinePlaceholder":115},[52,78863,78864],{"class":54,"line":12720},[52,78865,78866],{"class":332},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[52,78868,78869,78871,78873,78875,78877,78879,78882,78884,78886,78888,78890,78892,78895,78897],{"class":54,"line":12744},[52,78870,76681],{"class":622},[52,78872,61177],{"class":58},[52,78874,3121],{"class":622},[52,78876,3696],{"class":62},[52,78878,4078],{"class":160},[52,78880,78881],{"class":90},"[abc]",[52,78883,3415],{"class":160},[52,78885,3696],{"class":62},[52,78887,3670],{"class":622},[52,78889,78173],{"class":58},[52,78891,3121],{"class":622},[52,78893,78894],{"class":62},"'a'",[52,78896,78181],{"class":622},[52,78898,78184],{"class":332},[52,78900,78901,78903,78905,78907,78909,78911,78913,78915,78917,78919,78921,78923,78926,78928],{"class":54,"line":12749},[52,78902,76681],{"class":622},[52,78904,61177],{"class":58},[52,78906,3121],{"class":622},[52,78908,3696],{"class":62},[52,78910,4078],{"class":160},[52,78912,78881],{"class":90},[52,78914,3415],{"class":160},[52,78916,3696],{"class":62},[52,78918,3670],{"class":622},[52,78920,78173],{"class":58},[52,78922,3121],{"class":622},[52,78924,78925],{"class":62},"'b'",[52,78927,78181],{"class":622},[52,78929,78184],{"class":332},[52,78931,78932,78934,78936,78938,78940,78942,78944,78946,78948,78950,78952,78954,78957,78959],{"class":54,"line":12754},[52,78933,76681],{"class":622},[52,78935,61177],{"class":58},[52,78937,3121],{"class":622},[52,78939,3696],{"class":62},[52,78941,4078],{"class":160},[52,78943,78881],{"class":90},[52,78945,3415],{"class":160},[52,78947,3696],{"class":62},[52,78949,3670],{"class":622},[52,78951,78173],{"class":58},[52,78953,3121],{"class":622},[52,78955,78956],{"class":62},"'c'",[52,78958,78181],{"class":622},[52,78960,78184],{"class":332},[52,78962,78963,78965,78967,78969,78971,78973,78975,78977,78979,78981,78984,78986],{"class":54,"line":12759},[52,78964,76681],{"class":622},[52,78966,61177],{"class":58},[52,78968,3121],{"class":622},[52,78970,3696],{"class":62},[52,78972,78881],{"class":90},[52,78974,3696],{"class":62},[52,78976,3670],{"class":622},[52,78978,78173],{"class":58},[52,78980,3121],{"class":622},[52,78982,78983],{"class":62},"'ab'",[52,78985,78181],{"class":622},[52,78987,78184],{"class":332},[52,78989,78990,78992,78994,78996,78998,79000,79002,79004,79006,79008,79010,79012,79014,79016],{"class":54,"line":12768},[52,78991,76681],{"class":622},[52,78993,61177],{"class":58},[52,78995,3121],{"class":622},[52,78997,3696],{"class":62},[52,78999,4078],{"class":160},[52,79001,78881],{"class":90},[52,79003,3415],{"class":160},[52,79005,3696],{"class":62},[52,79007,3670],{"class":622},[52,79009,78173],{"class":58},[52,79011,3121],{"class":622},[52,79013,78983],{"class":62},[52,79015,78181],{"class":622},[52,79017,79018],{"class":332},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[52,79020,79021,79023,79025,79027,79029,79031,79033,79036,79038,79040,79042,79044,79046,79048],{"class":54,"line":12773},[52,79022,76681],{"class":622},[52,79024,61177],{"class":58},[52,79026,3121],{"class":622},[52,79028,3696],{"class":62},[52,79030,4078],{"class":160},[52,79032,78881],{"class":90},[52,79034,79035],{"class":160},"{2}$",[52,79037,3696],{"class":62},[52,79039,3670],{"class":622},[52,79041,78173],{"class":58},[52,79043,3121],{"class":622},[52,79045,78983],{"class":62},[52,79047,78181],{"class":622},[52,79049,79050],{"class":332},"\u002F\u002Ftrue   可以选两个\n",[52,79052,79053,79055,79057,79059,79061,79063,79066,79068,79070,79072,79074,79076,79079,79081],{"class":54,"line":12779},[52,79054,76681],{"class":622},[52,79056,61177],{"class":58},[52,79058,3121],{"class":622},[52,79060,3696],{"class":62},[52,79062,4078],{"class":160},[52,79064,79065],{"class":90},"[a-z]",[52,79067,3415],{"class":160},[52,79069,3696],{"class":62},[52,79071,3670],{"class":622},[52,79073,78173],{"class":58},[52,79075,3121],{"class":622},[52,79077,79078],{"class":62},"'p'",[52,79080,78237],{"class":622},[52,79082,79083],{"class":332},"\u002F\u002Ftrue   依然只能选一个\n",[52,79085,79086,79088,79090,79092,79094,79096,79099,79101,79103,79105,79107,79109,79111,79113],{"class":54,"line":12800},[52,79087,76681],{"class":622},[52,79089,61177],{"class":58},[52,79091,3121],{"class":622},[52,79093,3696],{"class":62},[52,79095,4078],{"class":160},[52,79097,79098],{"class":90},"[A-Z]",[52,79100,3415],{"class":160},[52,79102,3696],{"class":62},[52,79104,3670],{"class":622},[52,79106,78173],{"class":58},[52,79108,3121],{"class":622},[52,79110,79078],{"class":62},[52,79112,78237],{"class":622},[52,79114,78307],{"class":332},[52,79116,79117,79119,79121,79123,79125,79127,79129,79131,79133,79135,79137,79139,79142,79144],{"class":54,"line":12806},[52,79118,76681],{"class":622},[52,79120,61177],{"class":58},[52,79122,3121],{"class":622},[52,79124,3696],{"class":62},[52,79126,4078],{"class":160},[52,79128,79098],{"class":90},[52,79130,3415],{"class":160},[52,79132,3696],{"class":62},[52,79134,3670],{"class":622},[52,79136,78173],{"class":58},[52,79138,3121],{"class":622},[52,79140,79141],{"class":62},"'P'",[52,79143,78237],{"class":622},[52,79145,78184],{"class":332},[52,79147,79148,79150,79152,79154,79156,79158,79161,79163,79165,79167,79169,79171,79174,79176],{"class":54,"line":12820},[52,79149,76681],{"class":622},[52,79151,61177],{"class":58},[52,79153,3121],{"class":622},[52,79155,3696],{"class":62},[52,79157,4078],{"class":160},[52,79159,79160],{"class":90},"[0-9]",[52,79162,3415],{"class":160},[52,79164,3696],{"class":62},[52,79166,3670],{"class":622},[52,79168,78173],{"class":58},[52,79170,3121],{"class":622},[52,79172,79173],{"class":62},"'0'",[52,79175,78237],{"class":622},[52,79177,78184],{"class":332},[52,79179,79180,79182,79184,79186,79188,79190,79193,79195,79197,79199,79201,79203,79205,79207],{"class":54,"line":12826},[52,79181,76681],{"class":622},[52,79183,61177],{"class":58},[52,79185,3121],{"class":622},[52,79187,3696],{"class":62},[52,79189,4078],{"class":160},[52,79191,79192],{"class":90},"[a-zA-Z0-9]",[52,79194,3415],{"class":160},[52,79196,3696],{"class":62},[52,79198,3670],{"class":622},[52,79200,78173],{"class":58},[52,79202,3121],{"class":622},[52,79204,79078],{"class":62},[52,79206,78181],{"class":622},[52,79208,78184],{"class":332},[52,79210,79211,79213,79215],{"class":54,"line":12853},[52,79212,55347],{"class":622},[52,79214,54744],{"class":54231},[52,79216,54238],{"class":622},[52,79218,79219,79221,79223],{"class":54,"line":12862},[52,79220,54716],{"class":622},[52,79222,54731],{"class":54231},[52,79224,54238],{"class":622},[52,79226,79227],{"class":54,"line":12868},[52,79228,116],{"emptyLinePlaceholder":115},[52,79230,79231,79233,79235],{"class":54,"line":12876},[52,79232,54716],{"class":622},[52,79234,53566],{"class":54231},[52,79236,54238],{"class":622},[1486,79238,79240],{"id":79239},"_3624-修饰符","3.6.2.4 修饰符",[274,79242,79243],{},[280,79244],{"alt":28,"src":79245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[274,79247,79248],{},"replace是个方法，使用的时候一定不要忘记括号()",[274,79250,79251],{},[280,79252],{"alt":28,"src":79253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[19,79255,79257],{"className":53564,"code":79256,"language":53566,"meta":28,"style":28},"\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",[26,79258,79259,79269,79283,79291,79305,79325,79337,79345,79353,79361,79393,79424,79429,79461,79472,79505,79514,79522,79530],{"__ignoreMap":28},[52,79260,79261,79263,79265,79267],{"class":54,"line":55},[52,79262,54228],{"class":622},[52,79264,54232],{"class":54231},[52,79266,54235],{"class":58},[52,79268,54238],{"class":622},[52,79270,79271,79273,79275,79277,79279,79281],{"class":54,"line":69},[52,79272,4022],{"class":622},[52,79274,53566],{"class":54231},[52,79276,54247],{"class":58},[52,79278,2099],{"class":622},[52,79280,54252],{"class":62},[52,79282,54238],{"class":622},[52,79284,79285,79287,79289],{"class":54,"line":82},[52,79286,4022],{"class":622},[52,79288,54265],{"class":54231},[52,79290,54238],{"class":622},[52,79292,79293,79295,79297,79299,79301,79303],{"class":54,"line":97},[52,79294,55075],{"class":622},[52,79296,54275],{"class":54231},[52,79298,54278],{"class":58},[52,79300,2099],{"class":622},[52,79302,54283],{"class":62},[52,79304,54238],{"class":622},[52,79306,79307,79309,79311,79313,79315,79317,79319,79321,79323],{"class":54,"line":112},[52,79308,55075],{"class":622},[52,79310,54275],{"class":54231},[52,79312,17876],{"class":58},[52,79314,2099],{"class":622},[52,79316,54322],{"class":62},[52,79318,54302],{"class":58},[52,79320,2099],{"class":622},[52,79322,54329],{"class":62},[52,79324,54238],{"class":622},[52,79326,79327,79329,79331,79333,79335],{"class":54,"line":119},[52,79328,55075],{"class":622},[52,79330,54338],{"class":54231},[52,79332,54341],{"class":622},[52,79334,54338],{"class":54231},[52,79336,54238],{"class":622},[52,79338,79339,79341,79343],{"class":54,"line":130},[52,79340,54716],{"class":622},[52,79342,54265],{"class":54231},[52,79344,54238],{"class":622},[52,79346,79347,79349,79351],{"class":54,"line":136},[52,79348,4022],{"class":622},[52,79350,54731],{"class":54231},[52,79352,54238],{"class":622},[52,79354,79355,79357,79359],{"class":54,"line":141},[52,79356,55075],{"class":622},[52,79358,54744],{"class":54231},[52,79360,54238],{"class":622},[52,79362,79363,79365,79367,79369,79371,79373,79376,79378,79380,79382,79384,79386,79389,79391],{"class":54,"line":146},[52,79364,76681],{"class":622},[52,79366,61177],{"class":58},[52,79368,3121],{"class":622},[52,79370,3696],{"class":62},[52,79372,4078],{"class":160},[52,79374,79375],{"class":50908},"java",[52,79377,3415],{"class":160},[52,79379,3696],{"class":62},[52,79381,3670],{"class":622},[52,79383,78173],{"class":58},[52,79385,3121],{"class":622},[52,79387,79388],{"class":62},"'java'",[52,79390,78683],{"class":622},[52,79392,78184],{"class":332},[52,79394,79395,79397,79399,79401,79403,79405,79407,79409,79411,79413,79415,79417,79420,79422],{"class":54,"line":152},[52,79396,76681],{"class":622},[52,79398,61177],{"class":58},[52,79400,3121],{"class":622},[52,79402,3696],{"class":62},[52,79404,4078],{"class":160},[52,79406,79375],{"class":50908},[52,79408,3415],{"class":160},[52,79410,3696],{"class":62},[52,79412,3670],{"class":622},[52,79414,78173],{"class":58},[52,79416,3121],{"class":622},[52,79418,79419],{"class":62},"'Java'",[52,79421,78683],{"class":622},[52,79423,78307],{"class":332},[52,79425,79426],{"class":54,"line":157},[52,79427,79428],{"class":332},"    \u002F\u002F 不区分大小写、\n",[52,79430,79431,79433,79435,79437,79439,79441,79443,79445,79447,79449,79451,79453,79455,79457,79459],{"class":54,"line":173},[52,79432,76681],{"class":622},[52,79434,61177],{"class":58},[52,79436,3121],{"class":622},[52,79438,3696],{"class":62},[52,79440,4078],{"class":160},[52,79442,79375],{"class":50908},[52,79444,3415],{"class":160},[52,79446,3696],{"class":62},[52,79448,3554],{"class":160},[52,79450,3670],{"class":622},[52,79452,78173],{"class":58},[52,79454,3121],{"class":622},[52,79456,79419],{"class":62},[52,79458,78683],{"class":622},[52,79460,78184],{"class":332},[52,79462,79463,79465,79467,79469],{"class":54,"line":178},[52,79464,14177],{"class":160},[52,79466,76847],{"class":90},[52,79468,16520],{"class":160},[52,79470,79471],{"class":62}," 'java是一门编程语言，学完java工资很高'\n",[52,79473,79474,79476,79479,79481,79484,79487,79489,79491,79493,79495,79498,79500,79503],{"class":54,"line":184},[52,79475,14177],{"class":160},[52,79477,79478],{"class":90}," result",[52,79480,16520],{"class":160},[52,79482,79483],{"class":622}," str.",[52,79485,79486],{"class":58},"replace",[52,79488,3121],{"class":622},[52,79490,3696],{"class":62},[52,79492,79375],{"class":50908},[52,79494,3696],{"class":62},[52,79496,79497],{"class":160},"ig",[52,79499,15391],{"class":622},[52,79501,79502],{"class":62},"'前端'",[52,79504,170],{"class":622},[52,79506,79507,79509,79511],{"class":54,"line":189},[52,79508,76681],{"class":622},[52,79510,61177],{"class":58},[52,79512,79513],{"class":622},"(result)\n",[52,79515,79516,79518,79520],{"class":54,"line":201},[52,79517,55347],{"class":622},[52,79519,54744],{"class":54231},[52,79521,54238],{"class":622},[52,79523,79524,79526,79528],{"class":54,"line":206},[52,79525,54716],{"class":622},[52,79527,54731],{"class":54231},[52,79529,54238],{"class":622},[52,79531,79532,79534,79536],{"class":54,"line":224},[52,79533,54716],{"class":622},[52,79535,53566],{"class":54231},[52,79537,54238],{"class":622},[3015,79539,79540],{},"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":28,"searchDepth":69,"depth":69,"links":79542},[79543,79553,79565,79582,79589,79597],{"id":56290,"depth":69,"text":56291,"children":79544},[79545,79546,79547,79548,79549,79550,79551,79552],{"id":56294,"depth":82,"text":56295},{"id":56327,"depth":82,"text":56328},{"id":56366,"depth":82,"text":56367},{"id":56524,"depth":82,"text":56525},{"id":56572,"depth":82,"text":56573},{"id":56709,"depth":82,"text":56710},{"id":57031,"depth":82,"text":57032},{"id":60019,"depth":82,"text":60020},{"id":60047,"depth":69,"text":60048,"children":79554},[79555,79556,79557,79558,79559,79560,79561,79562,79563,79564],{"id":60051,"depth":82,"text":60052},{"id":60074,"depth":82,"text":60075},{"id":60989,"depth":82,"text":60990},{"id":61679,"depth":82,"text":61680},{"id":61961,"depth":82,"text":61962},{"id":66122,"depth":82,"text":66123},{"id":66292,"depth":82,"text":66293},{"id":66420,"depth":82,"text":66421},{"id":66445,"depth":82,"text":66446},{"id":67833,"depth":82,"text":67834},{"id":68986,"depth":69,"text":68987,"children":79566},[79567,79568,79569,79570,79571,79572,79573,79574,79575,79576,79577,79578,79579,79580,79581],{"id":68990,"depth":82,"text":68991},{"id":69644,"depth":82,"text":69645},{"id":71339,"depth":82,"text":71340},{"id":71380,"depth":82,"text":71381},{"id":71422,"depth":82,"text":71423},{"id":71436,"depth":82,"text":71437},{"id":71485,"depth":82,"text":71486},{"id":71497,"depth":82,"text":71498},{"id":71512,"depth":82,"text":71513},{"id":71548,"depth":82,"text":71549},{"id":71629,"depth":82,"text":71630},{"id":71757,"depth":82,"text":71758},{"id":71769,"depth":82,"text":71770},{"id":71788,"depth":82,"text":71789},{"id":73898,"depth":82,"text":73899},{"id":73917,"depth":69,"text":73918,"children":79583},[79584,79585,79586,79587,79588],{"id":73938,"depth":82,"text":73939},{"id":73958,"depth":82,"text":73959},{"id":74007,"depth":82,"text":74008},{"id":74132,"depth":82,"text":74133},{"id":74313,"depth":82,"text":74314},{"id":74331,"depth":69,"text":74332,"children":79590},[79591,79592,79593,79594,79595,79596],{"id":74346,"depth":82,"text":74347},{"id":74405,"depth":82,"text":74406},{"id":74429,"depth":82,"text":74430},{"id":74749,"depth":82,"text":74750},{"id":74781,"depth":82,"text":74782},{"id":74804,"depth":82,"text":74805},{"id":77872,"depth":69,"text":77873,"children":79598},[79599,79600],{"id":77906,"depth":82,"text":77907},{"id":77945,"depth":82,"text":77946},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":56262,"description":3046},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":79607,"title":79608,"body":79609,"description":3046,"extension":3047,"meta":95746,"navigation":115,"path":95747,"seo":95748,"stem":95749,"__hash__":95750},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":79610,"toc":95682},[79611,79614,79617,79621,79625,79630,79635,79646,79650,79655,79658,79662,79665,79670,79674,79678,79681,79686,79689,79693,79696,79704,79707,79711,79716,79721,79724,79728,79733,79738,79741,79745,79750,79753,79758,79761,79766,79769,79774,79779,79782,79785,79789,79794,79799,79802,79806,79810,79813,79816,79819,79823,79827,79832,79837,79840,79844,79849,79854,79857,79860,79863,79866,79869,79872,79875,79878,79881,79886,79890,79895,79900,79903,79906,79909,79912,79915,79918,79921,79924,79928,79932,79935,79938,79941,79946,79948,79951,79954,79957,79960,79963,79966,79969,79972,79975,79978,79981,79984,79987,79992,79997,80002,80005,80009,80012,80017,80021,80023,80034,80039,80140,80143,80146,80149,80152,80155,80158,80161,80164,80166,80169,80172,80175,80178,80181,80183,80186,80189,80192,80195,80198,80201,80203,80206,80208,80210,80213,80217,80221,80224,80227,80230,80233,80236,80239,80242,80245,80248,80253,80373,80376,80379,80384,80387,80390,80393,80396,80401,80404,80407,80410,80413,80418,80421,80521,80586,80660,80664,80667,80670,80674,80677,80691,80720,80723,80726,80729,80732,80735,80738,80741,80743,80746,80749,80752,80755,80759,80764,80768,80773,80848,80851,81034,81037,81040,81043,81046,81049,81051,81054,81057,81060,81063,81066,81069,81071,81075,81078,81083,81086,81089,81092,81095,81097,81102,81105,81108,81111,81114,81116,81121,81124,81127,81129,81131,81134,81138,81141,81144,81149,81152,81155,81158,81208,81213,81217,81222,81225,81294,81297,81306,81310,81315,81318,81321,81329,81332,81349,83151,83155,83159,83164,83167,83171,83177,83183,83335,83340,83345,83348,83351,83354,83357,83360,83363,83366,83369,83372,83375,83378,83381,83386,83390,83393,83404,83408,83413,83416,83419,83422,83425,83428,83430,83433,83436,83439,83442,83444,83461,83464,83468,83471,83476,83481,83484,83487,83491,83494,83497,83506,83509,83513,83516,83521,83526,83593,83597,83600,83603,83608,83613,83699,83704,83708,83711,83714,83729,83732,83737,83741,83746,83855,83858,83869,84019,84023,84028,84137,84141,84146,84151,84156,84159,84166,84186,84222,84386,84391,84394,84399,84406,84409,84412,84415,84474,84530,84586,84590,84595,84910,84913,84917,84920,84925,85034,85039,85043,85048,85052,85123,85127,85129,85132,85135,85173,85449,85453,85470,85536,85570,85574,85577,85582,85611,85618,85627,85632,85647,85652,85661,85664,85801,85805,85867,85871,85876,86121,86125,86130,86133,86136,86139,86142,86146,86151,87732,87736,87740,87746,87749,87754,87758,87761,87766,87769,87780,87784,87789,87793,87798,87803,87806,87811,87815,87819,87822,87827,87832,87835,87838,87841,87963,87968,88070,88073,88076,88080,88085,88257,88262,88266,88269,88274,88340,88345,88348,88479,88482,88487,88490,88493,88584,88589,88592,88595,88598,88601,88606,88611,88614,88619,88624,88629,88633,88636,88639,88644,88649,88654,88659,88713,88716,88719,88724,88727,88730,88735,88740,88745,88749,88754,88768,88773,88776,88781,88785,88790,88795,88800,88805,88810,88815,88820,88825,88828,88832,88837,88840,88843,88846,88851,88856,88859,88862,88866,88869,88872,88877,88882,88887,88892,88895,88900,88905,88966,88971,88974,88979,90220,90225,90229,90233,90238,90241,90246,90251,90254,90259,90261,90266,90270,90273,90276,90287,90291,90296,90301,90356,90361,90366,90371,90582,90587,90591,90596,90599,90601,90604,90607,91054,91059,91066,91072,91075,91078,91342,91347,91351,91616,91621,91625,91630,91635,91640,91645,91976,91979,91984,91989,91992,91996,92000,92005,92010,92015,92020,92025,92030,92034,92037,92042,92047,92050,92124,92129,92134,92139,92141,92144,92514,92519,92524,92529,92532,92535,92637,92642,92647,92750,92754,92759,92763,92767,92772,92777,92780,92785,92788,92791,93184,93189,93192,93195,93198,93201,93721,93725,93730,93735,93740,93743,93748,93751,93754,94136,94141,94143,94145,94148,94151,94663,94667,94728,94731,94734,94737,94741,94744,94749,94754,95679],[10,79612,79608],{"id":79613},"_4js进阶",[274,79615,79616],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,79618,79620],{"id":79619},"_41-作用域","4.1 作用域",[30,79622,79624],{"id":79623},"_411-局部作用域","4.1.1 局部作用域",[274,79626,79627],{},[280,79628],{"alt":28,"src":79629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[274,79631,79632],{},[280,79633],{"alt":28,"src":79634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[4118,79636,79637,79640,79643],{},[1073,79638,79639],{},"函数作用域在函数内部",[1073,79641,79642],{},"块级作用域在{}",[1073,79644,79645],{},"对象的那个{}不是作用域，不是块作用域",[30,79647,79649],{"id":79648},"_412-全局作用域","4.1.2 全局作用域",[274,79651,79652],{},[280,79653],{"alt":28,"src":79654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[274,79656,79657],{},"window.a=10不要这样写",[30,79659,79661],{"id":79660},"_413-作用域链","4.1.3 作用域链",[274,79663,79664],{},"变量查找机制",[274,79666,79667],{},[280,79668],{"alt":28,"src":79669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,79671,79673],{"id":79672},"_42-垃圾回收机制","4.2 垃圾回收机制",[30,79675,79677],{"id":79676},"_421-大体介绍","4.2.1 大体介绍",[274,79679,79680],{},"垃圾回收机制(Garbage Collection) 简称 GC",[274,79682,79683],{},[280,79684],{"alt":28,"src":79685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[274,79687,79688],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[30,79690,79692],{"id":79691},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[274,79694,79695],{},"堆栈空间分配区别：",[1070,79697,79698,79701],{},[1073,79699,79700],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[1073,79702,79703],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[274,79705,79706],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[1486,79708,79710],{"id":79709},"_4221-引用计数","4.2.2.1 引用计数",[274,79712,79713],{},[280,79714],{"alt":28,"src":79715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[274,79717,79718],{},[280,79719],{"alt":28,"src":79720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[274,79722,79723],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[1486,79725,79727],{"id":79726},"_4222-标记清除法","4.2.2.2 标记清除法",[274,79729,79730],{},[280,79731],{"alt":28,"src":79732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[274,79734,79735],{},[280,79736],{"alt":28,"src":79737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[274,79739,79740],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79742,79744],{"id":79743},"_43-闭包","4.3 闭包",[274,79746,79747],{},[280,79748],{"alt":28,"src":79749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[274,79751,79752],{},"闭包：内层函数+外层函数的变量",[274,79754,79755],{},[280,79756],{"alt":28,"src":79757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[274,79759,79760],{},"closure就是闭包",[274,79762,79763],{},[280,79764],{"alt":28,"src":79765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[274,79767,79768],{},"内层函数必须包含外层函数的变量才是闭包",[274,79770,79771],{},[280,79772],{"alt":28,"src":79773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[274,79775,79776],{},[280,79777],{"alt":28,"src":79778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[274,79780,79781],{},"闭包可能会引起内存泄漏",[274,79783,79784],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79786,79788],{"id":79787},"_44-变量提升","4.4 变量提升",[274,79790,79791],{},[280,79792],{"alt":28,"src":79793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[274,79795,79796],{},[280,79797],{"alt":28,"src":79798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[274,79800,79801],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79803,79805],{"id":79804},"_45-函数进阶","4.5 函数进阶",[30,79807,79809],{"id":79808},"_451-函数提升","4.5.1 函数提升",[274,79811,79812],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[274,79814,79815],{},"只提升函数声明，不提升函数调用",[54744,79817,79818],{},"\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",[30,79820,79822],{"id":79821},"_452-函数参数","4.5.2 函数参数",[1486,79824,79826],{"id":79825},"_4521-动态参数","4.5.2.1 动态参数",[274,79828,79829],{},[280,79830],{"alt":28,"src":79831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[274,79833,79834],{},[280,79835],{"alt":28,"src":79836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[274,79838,79839],{},"箭头函数里边没有arguments",[1486,79841,79843],{"id":79842},"_4522-剩余参数","4.5.2.2 剩余参数",[274,79845,79846],{},[280,79847],{"alt":28,"src":79848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[274,79850,79851],{},[280,79852],{"alt":28,"src":79853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[274,79855,79856],{},"剩余参数使用的时候不需要写...",[274,79858,79859],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[274,79861,79862],{},"  function getSum(a,b,...arr) {",[274,79864,79865],{},"  console.log(11)",[274,79867,79868],{},"  }",[274,79870,79871],{},"  getSum(1,2,3,4)",[274,79873,79874],{},"  将1传给a，2传给b，剩下的传给剩余参数",[274,79876,79877],{},"  getSum(1,2)",[274,79879,79880],{},"  将1传给a，2传给b，剩余参数为一个空数组",[274,79882,79883],{},[280,79884],{"alt":28,"src":79885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[1486,79887,79889],{"id":79888},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[274,79891,79892],{},[280,79893],{"alt":28,"src":79894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[274,79896,79897],{},[280,79898],{"alt":28,"src":79899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[274,79901,79902],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[274,79904,79905],{},"展开运算符可以用于数组之间的合并：",[274,79907,79908],{},"const arr1 = [1, 2, 3]",[274,79910,79911],{},"const arr2 = [3, 4, 5]",[274,79913,79914],{},"const arr = [...arr1, ...arr2]",[274,79916,79917],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[274,79919,79920],{},"剩余参数：函数参数使用，得到真数组",[274,79922,79923],{},"展开运算符：数组中使用，数组展开",[30,79925,79927],{"id":79926},"_453-箭头函数","4.5.3 箭头函数",[1486,79929,79931],{"id":79930},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[274,79933,79934],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[274,79936,79937],{},"它不是万能的！！！",[274,79939,79940],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[274,79942,79943],{},[280,79944],{"alt":28,"src":79945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[274,79947,3149],{},[274,79949,79950],{},"① 只有一个形参的时候，可以省略小括号：",[274,79952,79953],{},"const fn=x=>{console.log(x)}",[274,79955,79956],{},"② 只有一行代码时可以省略大括号：",[274,79958,79959],{},"const fn=x=>console.log(11)",[274,79961,79962],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[274,79964,79965],{},"const fn=x=>x+x",[274,79967,79968],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[274,79970,79971],{},"⑤ 阻止表单默认提交：",[274,79973,79974],{},"const form = document.querySelector('form')",[274,79976,79977],{},"form.addEventListener('click', ev => ev.preventDefault())",[274,79979,79980],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[274,79982,79983],{},"const fn=uname=>({uname:uname})",[274,79985,79986],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[274,79988,79989],{},[280,79990],{"alt":28,"src":79991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[274,79993,79994],{},[280,79995],{"alt":28,"src":79996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[274,79998,79999],{},[280,80000],{"alt":28,"src":80001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[274,80003,80004],{},"一定不要忘记用()，有()就理解为自带return",[1486,80006,80008],{"id":80007},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[274,80010,80011],{},"箭头函数是没有动态参数的arguments",[274,80013,80014],{},[280,80015],{"alt":28,"src":80016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[1486,80018,80020],{"id":80019},"_4533-箭头函数this","4.5.3.3 箭头函数this",[274,80022,14288],{},[1070,80024,80025,80028,80031],{},[1073,80026,80027],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[1073,80029,80030],{},"事件回调函数使用箭头函数时，this 为全局的 window",[1073,80032,80033],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[274,80035,80036],{},[280,80037],{"alt":28,"src":80038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[19,80040,80042],{"className":55997,"code":80041,"language":55999,"meta":28,"style":28},"  \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",[26,80043,80044,80052,80057,80062,80067,80072,80077,80081,80086,80090,80094,80099,80104,80109,80113,80117,80122,80127,80132],{"__ignoreMap":28},[52,80045,80046,80048,80050],{"class":54,"line":55},[52,80047,55075],{"class":622},[52,80049,54744],{"class":54231},[52,80051,54238],{"class":622},[52,80053,80054],{"class":54,"line":69},[52,80055,80056],{"class":622},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[52,80058,80059],{"class":54,"line":82},[52,80060,80061],{"class":622},"    console.log(this) \u002F\u002F指向window\n",[52,80063,80064],{"class":54,"line":97},[52,80065,80066],{"class":622},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[52,80068,80069],{"class":54,"line":112},[52,80070,80071],{"class":622},"    function fn() {\n",[52,80073,80074],{"class":54,"line":119},[52,80075,80076],{"class":622},"      console.log(this)  \u002F\u002F指向window\n",[52,80078,80079],{"class":54,"line":130},[52,80080,5149],{"class":622},[52,80082,80083],{"class":54,"line":136},[52,80084,80085],{"class":622},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[52,80087,80088],{"class":54,"line":141},[52,80089,116],{"emptyLinePlaceholder":115},[52,80091,80092],{"class":54,"line":146},[52,80093,74451],{"class":622},[52,80095,80096],{"class":54,"line":152},[52,80097,80098],{"class":622},"      name: 'andy',\n",[52,80100,80101],{"class":54,"line":157},[52,80102,80103],{"class":622},"      sayHai: function () {\n",[52,80105,80106],{"class":54,"line":173},[52,80107,80108],{"class":622},"        console.log(this)\n",[52,80110,80111],{"class":54,"line":178},[52,80112,55328],{"class":622},[52,80114,80115],{"class":54,"line":184},[52,80116,5149],{"class":622},[52,80118,80119],{"class":54,"line":189},[52,80120,80121],{"class":622},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[52,80123,80124],{"class":54,"line":201},[52,80125,80126],{"class":622},"    \u002F\u002F 2.箭头函数的this\n",[52,80128,80129],{"class":54,"line":206},[52,80130,80131],{"class":622},"    const fn = () => console.log(this)\n",[52,80133,80134,80136,80138],{"class":54,"line":224},[52,80135,55347],{"class":622},[52,80137,54744],{"class":54231},[52,80139,54238],{"class":622},[274,80141,80142],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[274,80144,80145],{},"const fn = () => console.log(this)",[274,80147,80148],{},"fn() \u002F\u002F指向window",[274,80150,80151],{},"\u002F\u002F 3.对象方法箭头函数 this",[274,80153,80154],{},"①",[274,80156,80157],{},"const obj = {",[274,80159,80160],{},"uname: 'pink老师',",[274,80162,80163],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[274,80165,4058],{},[274,80167,80168],{},"调用对象里边的函数",[274,80170,80171],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[274,80173,80174],{},"obj.sayHai()",[274,80176,80177],{},"②",[274,80179,80180],{},"const obj1 = {",[274,80182,80160],{},[274,80184,80185],{},"sayHai: function () {",[274,80187,80188],{},"let i = 10",[274,80190,80191],{},"const count = () => {",[274,80193,80194],{},"console.log(this)",[274,80196,80197],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[274,80199,80200],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[274,80202,4058],{},[274,80204,80205],{},"count()",[274,80207,4058],{},[274,80209,4058],{},[274,80211,80212],{},"obj1.sayHai()",[14,80214,80216],{"id":80215},"_46-解构赋值","4.6 解构赋值",[30,80218,80220],{"id":80219},"_461-数组解构","4.6.1 数组解构",[274,80222,80223],{},"以前要是使用数组中的值的话：",[274,80225,80226],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[274,80228,80229],{},"const arr=[100,60,80]",[274,80231,80232],{},"const max=arr[0]",[274,80234,80235],{},"const min=arr[1]",[274,80237,80238],{},"const avg=arr[2]",[274,80240,80241],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[274,80243,80244],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[274,80246,80247],{},"这个写法就类似于上边的那种用很多const的方法",[274,80249,80250],{},[280,80251],{"alt":28,"src":80252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[19,80254,80256],{"className":53564,"code":80255,"language":53566,"meta":28,"style":28},"①变量之间交换值:\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",[26,80257,80258,80263,80268,80273,80278,80283,80287,80291,80296,80300,80305,80310,80314,80319,80324,80335,80345,80350,80355,80360,80364,80368],{"__ignoreMap":28},[52,80259,80260],{"class":54,"line":55},[52,80261,80262],{"class":622},"①变量之间交换值:\n",[52,80264,80265],{"class":54,"line":69},[52,80266,80267],{"class":622},"let a=1\n",[52,80269,80270],{"class":54,"line":82},[52,80271,80272],{"class":622},"let b=2;\n",[52,80274,80275],{"class":54,"line":97},[52,80276,80277],{"class":622},"必须加这行代码，不然就会报错\n",[52,80279,80280],{"class":54,"line":112},[52,80281,80282],{"class":622},"[b,a]=[a,b]\n",[52,80284,80285],{"class":54,"line":119},[52,80286,116],{"emptyLinePlaceholder":115},[52,80288,80289],{"class":54,"line":130},[52,80290,116],{"emptyLinePlaceholder":115},[52,80292,80293],{"class":54,"line":136},[52,80294,80295],{"class":622},"可以写成下面的方式：\n",[52,80297,80298],{"class":54,"line":141},[52,80299,80267],{"class":622},[52,80301,80302],{"class":54,"line":146},[52,80303,80304],{"class":622},"let b=2\n",[52,80306,80307],{"class":54,"line":152},[52,80308,80309],{"class":622},";[b,a]=[a,b]\n",[52,80311,80312],{"class":54,"line":157},[52,80313,116],{"emptyLinePlaceholder":115},[52,80315,80316],{"class":54,"line":173},[52,80317,80318],{"class":622},"②排序\n",[52,80320,80321],{"class":54,"line":178},[52,80322,80323],{"class":622},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[52,80325,80326,80329,80332],{"class":54,"line":184},[52,80327,80328],{"class":622},"for (let i = 0; i ",[52,80330,4022],{"class":80331},"s7hpK",[52,80333,80334],{"class":622}," arr1.length; i++) {\n",[52,80336,80337,80340,80342],{"class":54,"line":189},[52,80338,80339],{"class":622},"   for (let j = 0; j ",[52,80341,4022],{"class":80331},[52,80343,80344],{"class":622}," arr1.length - 1; j++) {\n",[52,80346,80347],{"class":54,"line":201},[52,80348,80349],{"class":622},"      if (arr1[j] > arr1[j + 1]) {\n",[52,80351,80352],{"class":54,"line":206},[52,80353,80354],{"class":622},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[52,80356,80357],{"class":54,"line":224},[52,80358,80359],{"class":622},"       }\n",[52,80361,80362],{"class":54,"line":229},[52,80363,7268],{"class":622},[52,80365,80366],{"class":54,"line":241},[52,80367,4543],{"class":622},[52,80369,80370],{"class":54,"line":246},[52,80371,80372],{"class":622},"console.log(arr1)\n",[274,80374,80375],{},"数组解构的细节：",[274,80377,80378],{},"①变量多，单元值少",[274,80380,80381],{},[280,80382],{"alt":28,"src":80383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[274,80385,80386],{},"防止出现undefined的方法：",[274,80388,80389],{},"const [a=0,b=0] =[1]",[274,80391,80392],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[274,80394,80395],{},"②变量少，单元值多",[274,80397,80398],{},[280,80399],{"alt":28,"src":80400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[274,80402,80403],{},"此时可以使用剩余参数来接收多余的值",[274,80405,80406],{},"const [a,b,...c]=[1,2,3,4]",[274,80408,80409],{},"console.log(c) 输出[3,4]",[274,80411,80412],{},"③可以按需导入，忽略某些返回值",[274,80414,80415],{},[280,80416],{"alt":28,"src":80417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[274,80419,80420],{},"④支持多维数组的结构",[19,80422,80426],{"className":80423,"code":80424,"language":80425,"meta":28,"style":28},"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",[26,80427,80428,80456,80472,80487,80502],{"__ignoreMap":28},[52,80429,80430,80432,80434,80436,80438,80440,80442,80444,80447,80449,80451,80453],{"class":54,"line":55},[52,80431,9748],{"class":160},[52,80433,54764],{"class":622},[52,80435,2099],{"class":160},[52,80437,55157],{"class":622},[52,80439,3332],{"class":90},[52,80441,15391],{"class":622},[52,80443,3194],{"class":90},[52,80445,80446],{"class":622},", [",[52,80448,3188],{"class":90},[52,80450,15391],{"class":622},[52,80452,3406],{"class":90},[52,80454,80455],{"class":622},"]]\n",[52,80457,80458,80461,80463,80465,80467,80469],{"class":54,"line":69},[52,80459,80460],{"class":622},"console.",[52,80462,61177],{"class":58},[52,80464,6810],{"class":622},[52,80466,3306],{"class":90},[52,80468,7175],{"class":622},[52,80470,80471],{"class":332},"  \u002F\u002F1\n",[52,80473,80474,80476,80478,80480,80482,80484],{"class":54,"line":82},[52,80475,80460],{"class":622},[52,80477,61177],{"class":58},[52,80479,6810],{"class":622},[52,80481,3332],{"class":90},[52,80483,7175],{"class":622},[52,80485,80486],{"class":332},"  \u002F\u002F2\n",[52,80488,80489,80491,80493,80495,80497,80499],{"class":54,"line":97},[52,80490,80460],{"class":622},[52,80492,61177],{"class":58},[52,80494,6810],{"class":622},[52,80496,3194],{"class":90},[52,80498,7175],{"class":622},[52,80500,80501],{"class":332},"  \u002F\u002F[3,4]\n",[52,80503,80504,80506,80508,80510,80512,80514,80516,80518],{"class":54,"line":112},[52,80505,80460],{"class":622},[52,80507,61177],{"class":58},[52,80509,6810],{"class":622},[52,80511,3194],{"class":90},[52,80513,7860],{"class":622},[52,80515,3306],{"class":90},[52,80517,7175],{"class":622},[52,80519,80520],{"class":332},"  \u002F\u002F3\n",[19,80522,80524],{"className":80423,"code":80523,"language":80425,"meta":28,"style":28},"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",[26,80525,80526,80553,80564,80575],{"__ignoreMap":28},[52,80527,80528,80530,80533,80535,80537,80539,80541,80543,80545,80547,80549,80551],{"class":54,"line":55},[52,80529,9748],{"class":160},[52,80531,80532],{"class":622}," [a, b, c] ",[52,80534,2099],{"class":160},[52,80536,55157],{"class":622},[52,80538,3332],{"class":90},[52,80540,15391],{"class":622},[52,80542,3194],{"class":90},[52,80544,80446],{"class":622},[52,80546,3188],{"class":90},[52,80548,15391],{"class":622},[52,80550,3406],{"class":90},[52,80552,80455],{"class":622},[52,80554,80555,80557,80559,80562],{"class":54,"line":69},[52,80556,80460],{"class":622},[52,80558,61177],{"class":58},[52,80560,80561],{"class":622},"(a)",[52,80563,80471],{"class":332},[52,80565,80566,80568,80570,80573],{"class":54,"line":82},[52,80567,80460],{"class":622},[52,80569,61177],{"class":58},[52,80571,80572],{"class":622},"(b)",[52,80574,80486],{"class":332},[52,80576,80577,80579,80581,80584],{"class":54,"line":97},[52,80578,80460],{"class":622},[52,80580,61177],{"class":58},[52,80582,80583],{"class":622},"(c)",[52,80585,80501],{"class":332},[19,80587,80589],{"className":80423,"code":80588,"language":80425,"meta":28,"style":28},"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",[26,80590,80591,80618,80628,80638,80648],{"__ignoreMap":28},[52,80592,80593,80595,80598,80600,80602,80604,80606,80608,80610,80612,80614,80616],{"class":54,"line":55},[52,80594,9748],{"class":160},[52,80596,80597],{"class":622}," [a, b, [c, d]] ",[52,80599,2099],{"class":160},[52,80601,55157],{"class":622},[52,80603,3332],{"class":90},[52,80605,15391],{"class":622},[52,80607,3194],{"class":90},[52,80609,80446],{"class":622},[52,80611,3188],{"class":90},[52,80613,15391],{"class":622},[52,80615,3406],{"class":90},[52,80617,80455],{"class":622},[52,80619,80620,80622,80624,80626],{"class":54,"line":69},[52,80621,80460],{"class":622},[52,80623,61177],{"class":58},[52,80625,80561],{"class":622},[52,80627,80471],{"class":332},[52,80629,80630,80632,80634,80636],{"class":54,"line":82},[52,80631,80460],{"class":622},[52,80633,61177],{"class":58},[52,80635,80572],{"class":622},[52,80637,80486],{"class":332},[52,80639,80640,80642,80644,80646],{"class":54,"line":97},[52,80641,80460],{"class":622},[52,80643,61177],{"class":58},[52,80645,80583],{"class":622},[52,80647,80520],{"class":332},[52,80649,80650,80652,80654,80657],{"class":54,"line":112},[52,80651,80460],{"class":622},[52,80653,61177],{"class":58},[52,80655,80656],{"class":622},"(d)",[52,80658,80659],{"class":332},"  \u002F\u002F4\n",[30,80661,80663],{"id":80662},"_462-对象解构","4.6.2 对象解构",[274,80665,80666],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[274,80668,80669],{},"用的非常非常多！！！！！！",[1486,80671,80673],{"id":80672},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[274,80675,80676],{},"基本语法：",[1070,80678,80679,80682,80685,80688],{},[1073,80680,80681],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[1073,80683,80684],{},"对象属性的值将被赋值给与属性名相同的变量",[1073,80686,80687],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[1073,80689,80690],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[19,80692,80694],{"className":53564,"code":80693,"language":53566,"meta":28,"style":28},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[26,80695,80696,80701,80706,80711,80715],{"__ignoreMap":28},[52,80697,80698],{"class":54,"line":55},[52,80699,80700],{"class":622},"const obj = {\n",[52,80702,80703],{"class":54,"line":69},[52,80704,80705],{"class":622},"   uname: 'pink老师',\n",[52,80707,80708],{"class":54,"line":82},[52,80709,80710],{"class":622},"   age: 18,\n",[52,80712,80713],{"class":54,"line":97},[52,80714,4543],{"class":622},[52,80716,80717],{"class":54,"line":112},[52,80718,80719],{"class":622},"const { uname, age } = obj\n",[274,80721,80722],{},"上方代码这样写等价于：",[274,80724,80725],{},"const uname等价于obj.uname",[274,80727,80728],{},"变量名可以重新改名：",[274,80730,80731],{},"const uname='red老师'",[274,80733,80734],{},"const user={",[274,80736,80737],{},"  uname:'pink老师',",[274,80739,80740],{},"  age:18",[274,80742,4058],{},[274,80744,80745],{},"const {uname,age}=user",[274,80747,80748],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[274,80750,80751],{},"const {旧变量名：新变量名}=对象",[274,80753,80754],{},"const {uname:username,age}=user",[1486,80756,80758],{"id":80757},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[274,80760,80761],{},[280,80762],{"alt":28,"src":80763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[1486,80765,80767],{"id":80766},"_4623-多级对象解构","4.6.2.3 多级对象解构",[274,80769,80770],{},[280,80771],{"alt":28,"src":80772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[19,80774,80776],{"className":55997,"code":80775,"language":55999,"meta":28,"style":28},"  \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",[26,80777,80778,80786,80791,80796,80801,80806,80811,80816,80821,80826,80830,80835,80840],{"__ignoreMap":28},[52,80779,80780,80782,80784],{"class":54,"line":55},[52,80781,55075],{"class":622},[52,80783,54744],{"class":54231},[52,80785,54238],{"class":622},[52,80787,80788],{"class":54,"line":69},[52,80789,80790],{"class":622},"    const pig = {\n",[52,80792,80793],{"class":54,"line":82},[52,80794,80795],{"class":622},"      name: '佩奇',\n",[52,80797,80798],{"class":54,"line":97},[52,80799,80800],{"class":622},"      family: {\n",[52,80802,80803],{"class":54,"line":112},[52,80804,80805],{"class":622},"        mother: '猪妈妈',\n",[52,80807,80808],{"class":54,"line":119},[52,80809,80810],{"class":622},"        father: '猪爸爸',\n",[52,80812,80813],{"class":54,"line":130},[52,80814,80815],{"class":622},"        sister: '乔治'\n",[52,80817,80818],{"class":54,"line":136},[52,80819,80820],{"class":622},"      },\n",[52,80822,80823],{"class":54,"line":141},[52,80824,80825],{"class":622},"      age: 6\n",[52,80827,80828],{"class":54,"line":146},[52,80829,5149],{"class":622},[52,80831,80832],{"class":54,"line":152},[52,80833,80834],{"class":622},"    \u002F\u002F 多级对象解构\n",[52,80836,80837],{"class":54,"line":157},[52,80838,80839],{"class":622},"    const { name, family: { mother, father, sister }, age } = pig\n",[52,80841,80842,80844,80846],{"class":54,"line":173},[52,80843,55347],{"class":622},[52,80845,54744],{"class":54231},[52,80847,54238],{"class":622},[274,80849,80850],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[19,80852,80855],{"className":80853,"code":80854,"language":79375,"meta":28,"style":28},"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",[26,80856,80857,80862,80873,80885,80897,80906,80910,80921,80933,80943,80948,80952,80962,80973,80982,80986,80990,81001,81012,81021,81025,81030],{"__ignoreMap":28},[52,80858,80859],{"class":54,"line":55},[52,80860,80861],{"class":332},"    \u002F\u002F 这是后台传递过来的数据\n",[52,80863,80864,80866,80869,80871],{"class":54,"line":69},[52,80865,14177],{"class":160},[52,80867,80868],{"class":622}," msg ",[52,80870,2099],{"class":160},[52,80872,18528],{"class":622},[52,80874,80875,80878,80880,80883],{"class":54,"line":82},[52,80876,80877],{"class":62},"      \"code\"",[52,80879,3971],{"class":160},[52,80881,80882],{"class":90}," 200",[52,80884,34398],{"class":622},[52,80886,80887,80890,80892,80895],{"class":54,"line":97},[52,80888,80889],{"class":62},"      \"msg\"",[52,80891,3971],{"class":160},[52,80893,80894],{"class":62}," \"获取新闻列表成功\"",[52,80896,34398],{"class":622},[52,80898,80899,80902,80904],{"class":54,"line":112},[52,80900,80901],{"class":62},"      \"data\"",[52,80903,3971],{"class":160},[52,80905,58377],{"class":622},[52,80907,80908],{"class":54,"line":119},[52,80909,5471],{"class":622},[52,80911,80912,80915,80917,80919],{"class":54,"line":130},[52,80913,80914],{"class":62},"          \"id\"",[52,80916,3971],{"class":160},[52,80918,28064],{"class":90},[52,80920,34398],{"class":622},[52,80922,80923,80926,80928,80931],{"class":54,"line":136},[52,80924,80925],{"class":62},"          \"title\"",[52,80927,3971],{"class":160},[52,80929,80930],{"class":62}," \"5G商用自己，三大运用商收入下降\"",[52,80932,34398],{"class":622},[52,80934,80935,80938,80940],{"class":54,"line":141},[52,80936,80937],{"class":62},"          \"count\"",[52,80939,3971],{"class":160},[52,80941,80942],{"class":90}," 58\n",[52,80944,80945],{"class":54,"line":146},[52,80946,80947],{"class":622},"        },\n",[52,80949,80950],{"class":54,"line":152},[52,80951,5471],{"class":622},[52,80953,80954,80956,80958,80960],{"class":54,"line":157},[52,80955,80914],{"class":62},[52,80957,3971],{"class":160},[52,80959,17711],{"class":90},[52,80961,34398],{"class":622},[52,80963,80964,80966,80968,80971],{"class":54,"line":173},[52,80965,80925],{"class":62},[52,80967,3971],{"class":160},[52,80969,80970],{"class":62}," \"国际媒体头条速览\"",[52,80972,34398],{"class":622},[52,80974,80975,80977,80979],{"class":54,"line":178},[52,80976,80937],{"class":62},[52,80978,3971],{"class":160},[52,80980,80981],{"class":90}," 56\n",[52,80983,80984],{"class":54,"line":184},[52,80985,80947],{"class":622},[52,80987,80988],{"class":54,"line":189},[52,80989,5471],{"class":622},[52,80991,80992,80994,80996,80999],{"class":54,"line":201},[52,80993,80914],{"class":62},[52,80995,3971],{"class":160},[52,80997,80998],{"class":90}," 3",[52,81000,34398],{"class":622},[52,81002,81003,81005,81007,81010],{"class":54,"line":206},[52,81004,80925],{"class":62},[52,81006,3971],{"class":160},[52,81008,81009],{"class":62}," \"乌克兰和俄罗斯持续冲突\"",[52,81011,34398],{"class":622},[52,81013,81014,81016,81018],{"class":54,"line":224},[52,81015,80937],{"class":62},[52,81017,3971],{"class":160},[52,81019,81020],{"class":90}," 1669\n",[52,81022,81023],{"class":54,"line":229},[52,81024,80947],{"class":622},[52,81026,81027],{"class":54,"line":241},[52,81028,81029],{"class":622},"      ]\n",[52,81031,81032],{"class":54,"line":246},[52,81033,5149],{"class":622},[274,81035,81036],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[274,81038,81039],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[274,81041,81042],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[274,81044,81045],{},"function({data}) {",[274,81047,81048],{},"console.log(data)",[274,81050,4058],{},[274,81052,81053],{},"render(msg)",[274,81055,81056],{},"实参传递给形参的时候解构了",[274,81058,81059],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[274,81061,81062],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[274,81064,81065],{},"function render({data:mydata}) {",[274,81067,81068],{},"  console.log(data)",[274,81070,4058],{},[30,81072,81074],{"id":81073},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[274,81076,81077],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1070,81079,81080],{},[1073,81081,81082],{},"如果对一个数组进行遍历，有两种方式：",[274,81084,81085],{},"①法1",[274,81087,81088],{},"const arr=[1,2,3]",[274,81090,81091],{},"arr.map(function(item,index) {",[274,81093,81094],{},"  console.log(item)",[274,81096,55394],{},[274,81098,81099],{},[280,81100],{"alt":28,"src":81101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[274,81103,81104],{},"②法2",[274,81106,81107],{},"const str='pink'",[274,81109,81110],{},"[1,2,3].map(function(item,index) {",[274,81112,81113],{},"console.log(item)",[274,81115,55394],{},[274,81117,81118],{},[280,81119],{"alt":28,"src":81120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[274,81122,81123],{},"此时会报错",[274,81125,81126],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[274,81128,81113],{},[274,81130,55394],{},[274,81132,81133],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,81135,81137],{"id":81136},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[274,81139,81140],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[274,81142,81143],{},"可以理解为加强版的for循环",[274,81145,81146],{},[280,81147],{"alt":28,"src":81148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[274,81150,81151],{},"里边不写return，不返回数组，只遍历不返回",[274,81153,81154],{},"map是返回数组",[274,81156,81157],{},"forEach主要用于遍历数组对象",[19,81159,81161],{"className":55997,"code":81160,"language":55999,"meta":28,"style":28},"  \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",[26,81162,81163,81171,81176,81181,81186,81191,81195,81200],{"__ignoreMap":28},[52,81164,81165,81167,81169],{"class":54,"line":55},[52,81166,55075],{"class":622},[52,81168,54744],{"class":54231},[52,81170,54238],{"class":622},[52,81172,81173],{"class":54,"line":69},[52,81174,81175],{"class":622},"    const arr = ['red', 'green', 'pink']\n",[52,81177,81178],{"class":54,"line":82},[52,81179,81180],{"class":622},"    const result = arr.forEach(function (item, index) {\n",[52,81182,81183],{"class":54,"line":97},[52,81184,81185],{"class":622},"      console.log(item)\n",[52,81187,81188],{"class":54,"line":112},[52,81189,81190],{"class":622},"      console.log(index)\n",[52,81192,81193],{"class":54,"line":119},[52,81194,36393],{"class":622},[52,81196,81197],{"class":54,"line":130},[52,81198,81199],{"class":622},"    console.log(result)\n",[52,81201,81202,81204,81206],{"class":54,"line":136},[52,81203,55347],{"class":622},[52,81205,54744],{"class":54231},[52,81207,54238],{"class":622},[274,81209,81210],{},[280,81211],{"alt":28,"src":81212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,81214,81216],{"id":81215},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[274,81218,81219],{},[280,81220],{"alt":28,"src":81221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[274,81223,81224],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[19,81226,81228],{"className":55997,"code":81227,"language":55999,"meta":28,"style":28},"\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",[26,81229,81230,81238,81246,81251,81256,81260,81264,81269,81273,81278,81286],{"__ignoreMap":28},[52,81231,81232,81234,81236],{"class":54,"line":55},[52,81233,4022],{"class":622},[52,81235,54731],{"class":54231},[52,81237,54238],{"class":622},[52,81239,81240,81242,81244],{"class":54,"line":69},[52,81241,55075],{"class":622},[52,81243,54744],{"class":54231},[52,81245,54238],{"class":622},[52,81247,81248],{"class":54,"line":82},[52,81249,81250],{"class":622},"    const arr = [10, 20, 30]\n",[52,81252,81253],{"class":54,"line":97},[52,81254,81255],{"class":622},"    const newArr = arr.filter(function (item, index) {\n",[52,81257,81258],{"class":54,"line":112},[52,81259,81185],{"class":622},[52,81261,81262],{"class":54,"line":119},[52,81263,81190],{"class":622},[52,81265,81266],{"class":54,"line":130},[52,81267,81268],{"class":622},"      return item >= 20\n",[52,81270,81271],{"class":54,"line":136},[52,81272,36393],{"class":622},[52,81274,81275],{"class":54,"line":141},[52,81276,81277],{"class":622},"    console.log(newArr)\n",[52,81279,81280,81282,81284],{"class":54,"line":146},[52,81281,55347],{"class":622},[52,81283,54744],{"class":54231},[52,81285,54238],{"class":622},[52,81287,81288,81290,81292],{"class":54,"line":152},[52,81289,54716],{"class":622},[52,81291,54731],{"class":54231},[52,81293,54238],{"class":622},[274,81295,81296],{},"这个也可以写成箭头函数：",[19,81298,81300],{"className":53564,"code":81299,"language":53566,"meta":28,"style":28},"const newArr = arr.filter(item => item >= 20)\n",[26,81301,81302],{"__ignoreMap":28},[52,81303,81304],{"class":54,"line":55},[52,81305,81299],{"class":622},[14,81307,81309],{"id":81308},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[274,81311,81312],{},[280,81313],{"alt":28,"src":81314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[274,81316,81317],{},"步骤：",[274,81319,81320],{},"①：渲染页面模块",[4118,81322,81323,81326],{},[1073,81324,81325],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[1073,81327,81328],{},"用forEach+字符串的形式",[274,81330,81331],{},"②：点击不同需求，显示不同页面内容",[4118,81333,81334,81337,81340,81343,81346],{},[1073,81335,81336],{},"点击采取事件委托方式 .filter",[1073,81338,81339],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[1073,81341,81342],{},"筛选条件是根据点击的 data-index 来判断",[1073,81344,81345],{},"可以使用对象解构，把事件对象解构",[1073,81347,81348],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[19,81350,81352],{"className":53564,"code":81351,"language":53566,"meta":28,"style":28},"\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",[26,81353,81354,81364,81378,81382,81390,81404,81424,81436,81444,81450,81460,81470,81480,81484,81488,81494,81507,81519,81529,81541,81545,81549,81556,81569,81581,81598,81616,81629,81633,81637,81649,81659,81663,81667,81674,81715,81742,81752,81756,81760,81768,81780,81784,81788,81796,81808,81820,81831,81835,81839,81848,81860,81871,81875,81879,81888,81900,81912,81916,81920,81927,81937,81949,81961,81976,81980,81984,81992,82008,82018,82028,82038,82050,82054,82058,82068,82079,82089,82093,82101,82109,82113,82121,82136,82162,82187,82212,82231,82239,82253,82258,82263,82268,82273,82278,82286,82294,82299,82310,82315,82325,82335,82345,82355,82359,82363,82372,82381,82390,82399,82403,82407,82416,82425,82434,82443,82447,82451,82460,82469,82478,82487,82491,82495,82504,82513,82522,82531,82535,82539,82548,82557,82566,82575,82579,82583,82592,82601,82610,82619,82623,82627,82636,82645,82653,82662,82666,82670,82674,82679,82691,82696,82708,82712,82729,82757,82766,82771,82781,82791,82800,82805,82810,82814,82819,82836,82840,82845,82853,82858,82885,82890,82910,82915,82927,82932,82937,82942,82953,82967,83004,83022,83055,83072,83096,83100,83105,83111,83115,83119,83123,83131,83139,83143],{"__ignoreMap":28},[52,81355,81356,81358,81360,81362],{"class":54,"line":55},[52,81357,54228],{"class":622},[52,81359,54232],{"class":54231},[52,81361,54235],{"class":58},[52,81363,54238],{"class":622},[52,81365,81366,81368,81370,81372,81374,81376],{"class":54,"line":69},[52,81367,4022],{"class":622},[52,81369,53566],{"class":54231},[52,81371,54247],{"class":58},[52,81373,2099],{"class":622},[52,81375,54252],{"class":62},[52,81377,54238],{"class":622},[52,81379,81380],{"class":54,"line":82},[52,81381,116],{"emptyLinePlaceholder":115},[52,81383,81384,81386,81388],{"class":54,"line":97},[52,81385,4022],{"class":622},[52,81387,54265],{"class":54231},[52,81389,54238],{"class":622},[52,81391,81392,81394,81396,81398,81400,81402],{"class":54,"line":112},[52,81393,55075],{"class":622},[52,81395,54275],{"class":54231},[52,81397,54278],{"class":58},[52,81399,2099],{"class":622},[52,81401,54283],{"class":62},[52,81403,54238],{"class":622},[52,81405,81406,81408,81410,81412,81414,81416,81418,81420,81422],{"class":54,"line":119},[52,81407,55075],{"class":622},[52,81409,54275],{"class":54231},[52,81411,17876],{"class":58},[52,81413,2099],{"class":622},[52,81415,54322],{"class":62},[52,81417,54302],{"class":58},[52,81419,2099],{"class":622},[52,81421,54329],{"class":62},[52,81423,54238],{"class":622},[52,81425,81426,81428,81430,81432,81434],{"class":54,"line":130},[52,81427,55075],{"class":622},[52,81429,54338],{"class":54231},[52,81431,54341],{"class":622},[52,81433,54338],{"class":54231},[52,81435,54238],{"class":622},[52,81437,81438,81440,81442],{"class":54,"line":136},[52,81439,55075],{"class":622},[52,81441,3015],{"class":54231},[52,81443,54238],{"class":622},[52,81445,81446,81448],{"class":54,"line":141},[52,81447,9359],{"class":54231},[52,81449,18528],{"class":622},[52,81451,81452,81454,81456,81458],{"class":54,"line":146},[52,81453,57625],{"class":90},[52,81455,54368],{"class":622},[52,81457,3306],{"class":90},[52,81459,4272],{"class":622},[52,81461,81462,81464,81466,81468],{"class":54,"line":152},[52,81463,57636],{"class":90},[52,81465,54368],{"class":622},[52,81467,3306],{"class":90},[52,81469,4272],{"class":622},[52,81471,81472,81474,81476,81478],{"class":54,"line":157},[52,81473,75524],{"class":90},[52,81475,54368],{"class":622},[52,81477,63435],{"class":90},[52,81479,4272],{"class":622},[52,81481,81482],{"class":54,"line":173},[52,81483,5149],{"class":622},[52,81485,81486],{"class":54,"line":178},[52,81487,116],{"emptyLinePlaceholder":115},[52,81489,81490,81492],{"class":54,"line":184},[52,81491,65053],{"class":58},[52,81493,18528],{"class":622},[52,81495,81496,81498,81500,81503,81505],{"class":54,"line":189},[52,81497,57701],{"class":90},[52,81499,54368],{"class":622},[52,81501,81502],{"class":90},"990",[52,81504,54423],{"class":160},[52,81506,4272],{"class":622},[52,81508,81509,81511,81513,81515,81517],{"class":54,"line":201},[52,81510,57636],{"class":90},[52,81512,54368],{"class":622},[52,81514,3306],{"class":90},[52,81516,54487],{"class":90},[52,81518,4272],{"class":622},[52,81520,81521,81523,81525,81527],{"class":54,"line":206},[52,81522,57939],{"class":90},[52,81524,54368],{"class":622},[52,81526,54408],{"class":90},[52,81528,4272],{"class":622},[52,81530,81531,81534,81536,81539],{"class":54,"line":224},[52,81532,81533],{"class":90},"      flex-wrap",[52,81535,54368],{"class":622},[52,81537,81538],{"class":90},"wrap",[52,81540,4272],{"class":622},[52,81542,81543],{"class":54,"line":229},[52,81544,5149],{"class":622},[52,81546,81547],{"class":54,"line":241},[52,81548,116],{"emptyLinePlaceholder":115},[52,81550,81551,81554],{"class":54,"line":246},[52,81552,81553],{"class":58},"    .item",[52,81555,18528],{"class":622},[52,81557,81558,81560,81562,81565,81567],{"class":54,"line":252},[52,81559,57701],{"class":90},[52,81561,54368],{"class":622},[52,81563,81564],{"class":90},"240",[52,81566,54423],{"class":160},[52,81568,4272],{"class":622},[52,81570,81571,81573,81575,81577,81579],{"class":54,"line":257},[52,81572,64930],{"class":90},[52,81574,54368],{"class":622},[52,81576,3559],{"class":90},[52,81578,54423],{"class":160},[52,81580,4272],{"class":622},[52,81582,81583,81585,81587,81589,81591,81594,81596],{"class":54,"line":266},[52,81584,57625],{"class":90},[52,81586,54368],{"class":622},[52,81588,3812],{"class":90},[52,81590,54423],{"class":160},[52,81592,81593],{"class":90}," 30",[52,81595,54423],{"class":160},[52,81597,4272],{"class":622},[52,81599,81600,81602,81604,81606,81609,81612,81614],{"class":54,"line":4722},[52,81601,64790],{"class":90},[52,81603,54368],{"class":622},[52,81605,31055],{"class":90},[52,81607,81608],{"class":90}," ease",[52,81610,81611],{"class":90}," .5",[52,81613,3807],{"class":160},[52,81615,4272],{"class":622},[52,81617,81618,81621,81623,81625,81627],{"class":54,"line":4727},[52,81619,81620],{"class":90},"      margin-bottom",[52,81622,54368],{"class":622},[52,81624,3812],{"class":90},[52,81626,54423],{"class":160},[52,81628,4272],{"class":622},[52,81630,81631],{"class":54,"line":4741},[52,81632,5149],{"class":622},[52,81634,81635],{"class":54,"line":4746},[52,81636,116],{"emptyLinePlaceholder":115},[52,81638,81639,81642,81644,81647],{"class":54,"line":5538},[52,81640,81641],{"class":58},"    .item:nth-child",[52,81643,3121],{"class":622},[52,81645,81646],{"class":90},"4n",[52,81648,15398],{"class":622},[52,81650,81651,81653,81655,81657],{"class":54,"line":5552},[52,81652,64930],{"class":90},[52,81654,54368],{"class":622},[52,81656,3306],{"class":90},[52,81658,4272],{"class":622},[52,81660,81661],{"class":54,"line":5560},[52,81662,5149],{"class":622},[52,81664,81665],{"class":54,"line":5565},[52,81666,116],{"emptyLinePlaceholder":115},[52,81668,81669,81672],{"class":54,"line":5571},[52,81670,81671],{"class":58},"    .item:hover",[52,81673,18528],{"class":622},[52,81675,81676,81679,81681,81683,81685,81687,81689,81691,81693,81696,81698,81700,81702,81704,81706,81708,81710,81713],{"class":54,"line":5577},[52,81677,81678],{"class":90},"      box-shadow",[52,81680,54368],{"class":622},[52,81682,3306],{"class":90},[52,81684,54423],{"class":160},[52,81686,7052],{"class":90},[52,81688,54423],{"class":160},[52,81690,5110],{"class":90},[52,81692,54423],{"class":160},[52,81694,81695],{"class":90}," rgba",[52,81697,3121],{"class":622},[52,81699,3306],{"class":90},[52,81701,15391],{"class":622},[52,81703,3306],{"class":90},[52,81705,15391],{"class":622},[52,81707,3306],{"class":90},[52,81709,15391],{"class":622},[52,81711,81712],{"class":90},".2",[52,81714,5679],{"class":622},[52,81716,81717,81720,81722,81725,81727,81729,81731,81734,81736,81738,81740],{"class":54,"line":5582},[52,81718,81719],{"class":90},"      transform",[52,81721,54368],{"class":622},[52,81723,81724],{"class":90},"translate3d",[52,81726,3121],{"class":622},[52,81728,3306],{"class":90},[52,81730,15391],{"class":622},[52,81732,81733],{"class":90},"-4",[52,81735,54423],{"class":160},[52,81737,15391],{"class":622},[52,81739,3306],{"class":90},[52,81741,5679],{"class":622},[52,81743,81744,81746,81748,81750],{"class":54,"line":10904},[52,81745,64955],{"class":90},[52,81747,54368],{"class":622},[52,81749,64960],{"class":90},[52,81751,4272],{"class":622},[52,81753,81754],{"class":54,"line":10928},[52,81755,5149],{"class":622},[52,81757,81758],{"class":54,"line":10933},[52,81759,116],{"emptyLinePlaceholder":115},[52,81761,81762,81764,81766],{"class":54,"line":10939},[52,81763,81553],{"class":58},[52,81765,58545],{"class":54231},[52,81767,18528],{"class":622},[52,81769,81770,81772,81774,81776,81778],{"class":54,"line":10966},[52,81771,57701],{"class":90},[52,81773,54368],{"class":622},[52,81775,3424],{"class":90},[52,81777,3441],{"class":160},[52,81779,4272],{"class":622},[52,81781,81782],{"class":54,"line":10971},[52,81783,5149],{"class":622},[52,81785,81786],{"class":54,"line":10977},[52,81787,116],{"emptyLinePlaceholder":115},[52,81789,81790,81792,81794],{"class":54,"line":10989},[52,81791,81553],{"class":58},[52,81793,65234],{"class":58},[52,81795,18528],{"class":622},[52,81797,81798,81800,81802,81804,81806],{"class":54,"line":11001},[52,81799,57852],{"class":90},[52,81801,54368],{"class":622},[52,81803,3762],{"class":90},[52,81805,54423],{"class":160},[52,81807,4272],{"class":622},[52,81809,81810,81812,81814,81816,81818],{"class":54,"line":11013},[52,81811,81620],{"class":90},[52,81813,54368],{"class":622},[52,81815,3559],{"class":90},[52,81817,54423],{"class":160},[52,81819,4272],{"class":622},[52,81821,81822,81824,81826,81829],{"class":54,"line":12672},[52,81823,60346],{"class":90},[52,81825,54368],{"class":622},[52,81827,81828],{"class":90},"#666",[52,81830,4272],{"class":622},[52,81832,81833],{"class":54,"line":12697},[52,81834,5149],{"class":622},[52,81836,81837],{"class":54,"line":12720},[52,81838,116],{"emptyLinePlaceholder":115},[52,81840,81841,81843,81846],{"class":54,"line":12744},[52,81842,81553],{"class":58},[52,81844,81845],{"class":58}," .price",[52,81847,18528],{"class":622},[52,81849,81850,81852,81854,81856,81858],{"class":54,"line":12749},[52,81851,57852],{"class":90},[52,81853,54368],{"class":622},[52,81855,3862],{"class":90},[52,81857,54423],{"class":160},[52,81859,4272],{"class":622},[52,81861,81862,81864,81866,81869],{"class":54,"line":12754},[52,81863,60346],{"class":90},[52,81865,54368],{"class":622},[52,81867,81868],{"class":90},"firebrick",[52,81870,4272],{"class":622},[52,81872,81873],{"class":54,"line":12759},[52,81874,5149],{"class":622},[52,81876,81877],{"class":54,"line":12768},[52,81878,116],{"emptyLinePlaceholder":115},[52,81880,81881,81883,81886],{"class":54,"line":12773},[52,81882,81553],{"class":58},[52,81884,81885],{"class":58}," .price::before",[52,81887,18528],{"class":622},[52,81889,81890,81893,81895,81898],{"class":54,"line":12779},[52,81891,81892],{"class":90},"      content",[52,81894,54368],{"class":622},[52,81896,81897],{"class":62},"'￥'",[52,81899,4272],{"class":622},[52,81901,81902,81904,81906,81908,81910],{"class":54,"line":12800},[52,81903,57852],{"class":90},[52,81905,54368],{"class":622},[52,81907,3661],{"class":90},[52,81909,54423],{"class":160},[52,81911,4272],{"class":622},[52,81913,81914],{"class":54,"line":12806},[52,81915,5149],{"class":622},[52,81917,81918],{"class":54,"line":12820},[52,81919,116],{"emptyLinePlaceholder":115},[52,81921,81922,81925],{"class":54,"line":12826},[52,81923,81924],{"class":58},"    .filter",[52,81926,18528],{"class":622},[52,81928,81929,81931,81933,81935],{"class":54,"line":12853},[52,81930,57939],{"class":90},[52,81932,54368],{"class":622},[52,81934,54408],{"class":90},[52,81936,4272],{"class":622},[52,81938,81939,81941,81943,81945,81947],{"class":54,"line":12862},[52,81940,57701],{"class":90},[52,81942,54368],{"class":622},[52,81944,81502],{"class":90},[52,81946,54423],{"class":160},[52,81948,4272],{"class":622},[52,81950,81951,81953,81955,81957,81959],{"class":54,"line":12868},[52,81952,57636],{"class":90},[52,81954,54368],{"class":622},[52,81956,3306],{"class":90},[52,81958,54487],{"class":90},[52,81960,4272],{"class":622},[52,81962,81963,81965,81967,81969,81971,81973],{"class":54,"line":12876},[52,81964,57625],{"class":90},[52,81966,54368],{"class":622},[52,81968,3768],{"class":90},[52,81970,54423],{"class":160},[52,81972,81593],{"class":90},[52,81974,81975],{"class":160},"px\n",[52,81977,81978],{"class":54,"line":12881},[52,81979,5149],{"class":622},[52,81981,81982],{"class":54,"line":19560},[52,81983,116],{"emptyLinePlaceholder":115},[52,81985,81986,81988,81990],{"class":54,"line":19566},[52,81987,81924],{"class":58},[52,81989,4377],{"class":54231},[52,81991,18528],{"class":622},[52,81993,81994,81996,81998,82000,82002,82004,82006],{"class":54,"line":19589},[52,81995,57625],{"class":90},[52,81997,54368],{"class":622},[52,81999,3559],{"class":90},[52,82001,54423],{"class":160},[52,82003,11906],{"class":90},[52,82005,54423],{"class":160},[52,82007,4272],{"class":622},[52,82009,82010,82012,82014,82016],{"class":54,"line":19595},[52,82011,64651],{"class":90},[52,82013,54368],{"class":622},[52,82015,64748],{"class":90},[52,82017,4272],{"class":622},[52,82019,82020,82022,82024,82026],{"class":54,"line":19618},[52,82021,60346],{"class":90},[52,82023,54368],{"class":622},[52,82025,81828],{"class":90},[52,82027,4272],{"class":622},[52,82029,82030,82032,82034,82036],{"class":54,"line":19632},[52,82031,66900],{"class":90},[52,82033,54368],{"class":622},[52,82035,57667],{"class":90},[52,82037,4272],{"class":622},[52,82039,82040,82042,82044,82046,82048],{"class":54,"line":19652},[52,82041,64680],{"class":90},[52,82043,54368],{"class":622},[52,82045,3812],{"class":90},[52,82047,54423],{"class":160},[52,82049,4272],{"class":622},[52,82051,82052],{"class":54,"line":19658},[52,82053,5149],{"class":622},[52,82055,82056],{"class":54,"line":19669},[52,82057,116],{"emptyLinePlaceholder":115},[52,82059,82060,82062,82064,82066],{"class":54,"line":19692},[52,82061,81924],{"class":58},[52,82063,4377],{"class":54231},[52,82065,64830],{"class":58},[52,82067,18528],{"class":622},[52,82069,82070,82072,82074,82077],{"class":54,"line":19714},[52,82071,57814],{"class":90},[52,82073,54368],{"class":622},[52,82075,82076],{"class":90},"#05943c",[52,82078,4272],{"class":622},[52,82080,82081,82083,82085,82087],{"class":54,"line":19719},[52,82082,60346],{"class":90},[52,82084,54368],{"class":622},[52,82086,63772],{"class":90},[52,82088,4272],{"class":622},[52,82090,82091],{"class":54,"line":19725},[52,82092,5149],{"class":622},[52,82094,82095,82097,82099],{"class":54,"line":19739},[52,82096,55347],{"class":622},[52,82098,3015],{"class":54231},[52,82100,54238],{"class":622},[52,82102,82103,82105,82107],{"class":54,"line":19752},[52,82104,54716],{"class":622},[52,82106,54265],{"class":54231},[52,82108,54238],{"class":622},[52,82110,82111],{"class":54,"line":19757},[52,82112,116],{"emptyLinePlaceholder":115},[52,82114,82115,82117,82119],{"class":54,"line":19771},[52,82116,4022],{"class":622},[52,82118,54731],{"class":54231},[52,82120,54238],{"class":622},[52,82122,82123,82125,82127,82129,82131,82134],{"class":54,"line":19776},[52,82124,55075],{"class":622},[52,82126,54542],{"class":54231},[52,82128,56416],{"class":58},[52,82130,2099],{"class":622},[52,82132,82133],{"class":62},"\"filter\"",[52,82135,54238],{"class":622},[52,82137,82138,82140,82142,82144,82146,82148,82151,82153,82155,82158,82160],{"class":54,"line":19782},[52,82139,54272],{"class":622},[52,82141,300],{"class":54231},[52,82143,63987],{"class":58},[52,82145,2099],{"class":622},[52,82147,63992],{"class":62},[52,82149,82150],{"class":58}," data-index",[52,82152,2099],{"class":622},[52,82154,6637],{"class":62},[52,82156,82157],{"class":622},">0-100元\u003C\u002F",[52,82159,300],{"class":54231},[52,82161,54238],{"class":622},[52,82163,82164,82166,82168,82170,82172,82174,82176,82178,82180,82183,82185],{"class":54,"line":19787},[52,82165,54272],{"class":622},[52,82167,300],{"class":54231},[52,82169,63987],{"class":58},[52,82171,2099],{"class":622},[52,82173,63992],{"class":62},[52,82175,82150],{"class":58},[52,82177,2099],{"class":622},[52,82179,6660],{"class":62},[52,82181,82182],{"class":622},">100-300元\u003C\u002F",[52,82184,300],{"class":54231},[52,82186,54238],{"class":622},[52,82188,82189,82191,82193,82195,82197,82199,82201,82203,82205,82208,82210],{"class":54,"line":19801},[52,82190,54272],{"class":622},[52,82192,300],{"class":54231},[52,82194,63987],{"class":58},[52,82196,2099],{"class":622},[52,82198,63992],{"class":62},[52,82200,82150],{"class":58},[52,82202,2099],{"class":622},[52,82204,6673],{"class":62},[52,82206,82207],{"class":622},">300元以上\u003C\u002F",[52,82209,300],{"class":54231},[52,82211,54238],{"class":622},[52,82213,82214,82216,82218,82220,82222,82224,82227,82229],{"class":54,"line":19806},[52,82215,54272],{"class":622},[52,82217,300],{"class":54231},[52,82219,63987],{"class":58},[52,82221,2099],{"class":622},[52,82223,63992],{"class":62},[52,82225,82226],{"class":622},">全部区间\u003C\u002F",[52,82228,300],{"class":54231},[52,82230,54238],{"class":622},[52,82232,82233,82235,82237],{"class":54,"line":19811},[52,82234,55347],{"class":622},[52,82236,54542],{"class":54231},[52,82238,54238],{"class":622},[52,82240,82241,82243,82245,82247,82249,82251],{"class":54,"line":19825},[52,82242,55075],{"class":622},[52,82244,54542],{"class":54231},[52,82246,56416],{"class":58},[52,82248,2099],{"class":622},[52,82250,65538],{"class":62},[52,82252,54238],{"class":622},[52,82254,82255],{"class":54,"line":19837},[52,82256,82257],{"class":332},"    \u003C!-- \u003Cdiv class=\"item\">\n",[52,82259,82260],{"class":54,"line":19842},[52,82261,82262],{"class":332},"      \u003Cimg src=\"\" alt=\"\">\n",[52,82264,82265],{"class":54,"line":19855},[52,82266,82267],{"class":332},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[52,82269,82270],{"class":54,"line":19860},[52,82271,82272],{"class":332},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[52,82274,82275],{"class":54,"line":19865},[52,82276,82277],{"class":332},"    \u003C\u002Fdiv> -->\n",[52,82279,82280,82282,82284],{"class":54,"line":19870},[52,82281,55347],{"class":622},[52,82283,54542],{"class":54231},[52,82285,54238],{"class":622},[52,82287,82288,82290,82292],{"class":54,"line":19883},[52,82289,55075],{"class":622},[52,82291,54744],{"class":54231},[52,82293,54238],{"class":622},[52,82295,82296],{"class":54,"line":19888},[52,82297,82298],{"class":332},"    \u002F\u002F 2. 初始化数据\n",[52,82300,82301,82303,82306,82308],{"class":54,"line":35565},[52,82302,14177],{"class":160},[52,82304,82305],{"class":90}," goodsList",[52,82307,16520],{"class":160},[52,82309,58377],{"class":622},[52,82311,82312],{"class":54,"line":35571},[52,82313,82314],{"class":622},"      {\n",[52,82316,82317,82320,82323],{"class":54,"line":35577},[52,82318,82319],{"class":622},"        id: ",[52,82321,82322],{"class":62},"'4001172'",[52,82324,34398],{"class":622},[52,82326,82327,82330,82333],{"class":54,"line":35583},[52,82328,82329],{"class":622},"        name: ",[52,82331,82332],{"class":62},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[52,82334,34398],{"class":622},[52,82336,82337,82340,82343],{"class":54,"line":35589},[52,82338,82339],{"class":622},"        price: ",[52,82341,82342],{"class":62},"'289.00'",[52,82344,34398],{"class":622},[52,82346,82347,82350,82353],{"class":54,"line":35600},[52,82348,82349],{"class":622},"        picture: ",[52,82351,82352],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[52,82354,34398],{"class":622},[52,82356,82357],{"class":54,"line":35606},[52,82358,80820],{"class":622},[52,82360,82361],{"class":54,"line":35626},[52,82362,82314],{"class":622},[52,82364,82365,82367,82370],{"class":54,"line":35632},[52,82366,82319],{"class":622},[52,82368,82369],{"class":62},"'4001594'",[52,82371,34398],{"class":622},[52,82373,82374,82376,82379],{"class":54,"line":35643},[52,82375,82329],{"class":622},[52,82377,82378],{"class":62},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[52,82380,34398],{"class":622},[52,82382,82383,82385,82388],{"class":54,"line":35649},[52,82384,82339],{"class":622},[52,82386,82387],{"class":62},"'288.00'",[52,82389,34398],{"class":622},[52,82391,82392,82394,82397],{"class":54,"line":35655},[52,82393,82349],{"class":622},[52,82395,82396],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[52,82398,34398],{"class":622},[52,82400,82401],{"class":54,"line":35661},[52,82402,80820],{"class":622},[52,82404,82405],{"class":54,"line":35667},[52,82406,82314],{"class":622},[52,82408,82409,82411,82414],{"class":54,"line":35673},[52,82410,82319],{"class":622},[52,82412,82413],{"class":62},"'4001009'",[52,82415,34398],{"class":622},[52,82417,82418,82420,82423],{"class":54,"line":35679},[52,82419,82329],{"class":622},[52,82421,82422],{"class":62},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[52,82424,34398],{"class":622},[52,82426,82427,82429,82432],{"class":54,"line":35685},[52,82428,82339],{"class":622},[52,82430,82431],{"class":62},"'109.00'",[52,82433,34398],{"class":622},[52,82435,82436,82438,82441],{"class":54,"line":35705},[52,82437,82349],{"class":622},[52,82439,82440],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[52,82442,34398],{"class":622},[52,82444,82445],{"class":54,"line":35711},[52,82446,80820],{"class":622},[52,82448,82449],{"class":54,"line":35727},[52,82450,82314],{"class":622},[52,82452,82453,82455,82458],{"class":54,"line":35733},[52,82454,82319],{"class":622},[52,82456,82457],{"class":62},"'4001874'",[52,82459,34398],{"class":622},[52,82461,82462,82464,82467],{"class":54,"line":35747},[52,82463,82329],{"class":622},[52,82465,82466],{"class":62},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[52,82468,34398],{"class":622},[52,82470,82471,82473,82476],{"class":54,"line":35753},[52,82472,82339],{"class":622},[52,82474,82475],{"class":62},"'488.00'",[52,82477,34398],{"class":622},[52,82479,82480,82482,82485],{"class":54,"line":35768},[52,82481,82349],{"class":622},[52,82483,82484],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[52,82486,34398],{"class":622},[52,82488,82489],{"class":54,"line":35774},[52,82490,80820],{"class":622},[52,82492,82493],{"class":54,"line":35783},[52,82494,82314],{"class":622},[52,82496,82497,82499,82502],{"class":54,"line":35789},[52,82498,82319],{"class":622},[52,82500,82501],{"class":62},"'4001649'",[52,82503,34398],{"class":622},[52,82505,82506,82508,82511],{"class":54,"line":35798},[52,82507,82329],{"class":622},[52,82509,82510],{"class":62},"'大师监制龙泉青瓷茶叶罐'",[52,82512,34398],{"class":622},[52,82514,82515,82517,82520],{"class":54,"line":35804},[52,82516,82339],{"class":622},[52,82518,82519],{"class":62},"'139.00'",[52,82521,34398],{"class":622},[52,82523,82524,82526,82529],{"class":54,"line":35810},[52,82525,82349],{"class":622},[52,82527,82528],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[52,82530,34398],{"class":622},[52,82532,82533],{"class":54,"line":35819},[52,82534,80820],{"class":622},[52,82536,82537],{"class":54,"line":35825},[52,82538,82314],{"class":622},[52,82540,82541,82543,82546],{"class":54,"line":35836},[52,82542,82319],{"class":622},[52,82544,82545],{"class":62},"'3997185'",[52,82547,34398],{"class":622},[52,82549,82550,82552,82555],{"class":54,"line":35842},[52,82551,82329],{"class":622},[52,82553,82554],{"class":62},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[52,82556,34398],{"class":622},[52,82558,82559,82561,82564],{"class":54,"line":35861},[52,82560,82339],{"class":622},[52,82562,82563],{"class":62},"'108.00'",[52,82565,34398],{"class":622},[52,82567,82568,82570,82573],{"class":54,"line":35867},[52,82569,82349],{"class":622},[52,82571,82572],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[52,82574,34398],{"class":622},[52,82576,82577],{"class":54,"line":35878},[52,82578,80820],{"class":622},[52,82580,82581],{"class":54,"line":35884},[52,82582,82314],{"class":622},[52,82584,82585,82587,82590],{"class":54,"line":35904},[52,82586,82319],{"class":622},[52,82588,82589],{"class":62},"'3997403'",[52,82591,34398],{"class":622},[52,82593,82594,82596,82599],{"class":54,"line":35920},[52,82595,82329],{"class":622},[52,82597,82598],{"class":62},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[52,82600,34398],{"class":622},[52,82602,82603,82605,82608],{"class":54,"line":35926},[52,82604,82339],{"class":622},[52,82606,82607],{"class":62},"'100.00'",[52,82609,34398],{"class":622},[52,82611,82612,82614,82617],{"class":54,"line":35940},[52,82613,82349],{"class":622},[52,82615,82616],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[52,82618,34398],{"class":622},[52,82620,82621],{"class":54,"line":35946},[52,82622,80820],{"class":622},[52,82624,82625],{"class":54,"line":35952},[52,82626,82314],{"class":622},[52,82628,82629,82631,82634],{"class":54,"line":35963},[52,82630,82319],{"class":622},[52,82632,82633],{"class":62},"'3998274'",[52,82635,34398],{"class":622},[52,82637,82638,82640,82643],{"class":54,"line":35969},[52,82639,82329],{"class":622},[52,82641,82642],{"class":62},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[52,82644,34398],{"class":622},[52,82646,82647,82649,82651],{"class":54,"line":35975},[52,82648,82339],{"class":622},[52,82650,82519],{"class":62},[52,82652,34398],{"class":622},[52,82654,82655,82657,82660],{"class":54,"line":35985},[52,82656,82349],{"class":622},[52,82658,82659],{"class":62},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[52,82661,34398],{"class":622},[52,82663,82664],{"class":54,"line":35991},[52,82665,80820],{"class":622},[52,82667,82668],{"class":54,"line":36002},[52,82669,56039],{"class":622},[52,82671,82672],{"class":54,"line":36008},[52,82673,116],{"emptyLinePlaceholder":115},[52,82675,82676],{"class":54,"line":36018},[52,82677,82678],{"class":332},"    \u002F\u002F 1.渲染函数\n",[52,82680,82681,82683,82685,82687,82689],{"class":54,"line":36023},[52,82682,73013],{"class":160},[52,82684,73016],{"class":58},[52,82686,3121],{"class":622},[52,82688,6839],{"class":8172},[52,82690,15398],{"class":622},[52,82692,82693],{"class":54,"line":36029},[52,82694,82695],{"class":332},"      \u002F\u002F 声明空字符串\n",[52,82697,82698,82701,82704,82706],{"class":54,"line":36078},[52,82699,82700],{"class":160},"      let",[52,82702,82703],{"class":622}," str ",[52,82705,2099],{"class":160},[52,82707,73033],{"class":62},[52,82709,82710],{"class":54,"line":36125},[52,82711,73038],{"class":332},[52,82713,82714,82716,82719,82721,82724,82727],{"class":54,"line":36130},[52,82715,60937],{"class":622},[52,82717,82718],{"class":58},"forEach",[52,82720,3121],{"class":622},[52,82722,82723],{"class":8172},"item",[52,82725,82726],{"class":160}," =>",[52,82728,18528],{"class":622},[52,82730,82731,82733,82736,82739,82741,82744,82746,82749,82752,82754],{"class":54,"line":36136},[52,82732,64200],{"class":160},[52,82734,82735],{"class":622}," { ",[52,82737,82738],{"class":90},"name",[52,82740,15391],{"class":622},[52,82742,82743],{"class":90},"price",[52,82745,15391],{"class":622},[52,82747,82748],{"class":90},"picture",[52,82750,82751],{"class":622}," } ",[52,82753,2099],{"class":160},[52,82755,82756],{"class":622}," item\n",[52,82758,82759,82762,82764],{"class":54,"line":36155},[52,82760,82761],{"class":622},"        str ",[52,82763,12433],{"class":160},[52,82765,73097],{"class":62},[52,82767,82768],{"class":54,"line":36161},[52,82769,82770],{"class":62},"          \u003Cdiv class=\"item\">\n",[52,82772,82773,82776,82778],{"class":54,"line":36181},[52,82774,82775],{"class":62},"            \u003Cimg src=\"${",[52,82777,82748],{"class":622},[52,82779,82780],{"class":62},"}\" alt=\"\">\n",[52,82782,82783,82786,82788],{"class":54,"line":36187},[52,82784,82785],{"class":62},"            \u003Cp class=\"name\">${",[52,82787,82738],{"class":622},[52,82789,82790],{"class":62},"}\u003C\u002Fp>\n",[52,82792,82793,82796,82798],{"class":54,"line":36193},[52,82794,82795],{"class":62},"            \u003Cp class=\"price\">${",[52,82797,82743],{"class":622},[52,82799,82790],{"class":62},[52,82801,82802],{"class":54,"line":36203},[52,82803,82804],{"class":62},"          \u003C\u002Fdiv>\n",[52,82806,82807],{"class":54,"line":36208},[52,82808,82809],{"class":62},"        `\n",[52,82811,82812],{"class":54,"line":36214},[52,82813,67744],{"class":622},[52,82815,82816],{"class":54,"line":36230},[52,82817,82818],{"class":332},"      \u002F\u002F 追加给List\n",[52,82820,82821,82823,82825,82827,82830,82832,82834],{"class":54,"line":36275},[52,82822,58701],{"class":622},[52,82824,57329],{"class":58},[52,82826,3121],{"class":622},[52,82828,82829],{"class":62},"'.list'",[52,82831,77177],{"class":622},[52,82833,2099],{"class":160},[52,82835,76913],{"class":622},[52,82837,82838],{"class":54,"line":36281},[52,82839,5149],{"class":622},[52,82841,82842],{"class":54,"line":36287},[52,82843,82844],{"class":332},"    \u002F\u002F 页面一打开就需要渲染\n",[52,82846,82847,82850],{"class":54,"line":36293},[52,82848,82849],{"class":58},"    render",[52,82851,82852],{"class":622},"(goodsList)\n",[52,82854,82855],{"class":54,"line":36304},[52,82856,82857],{"class":332},"    \u002F\u002F 2.过滤筛选\n",[52,82859,82860,82862,82864,82866,82869,82871,82873,82875,82877,82879,82881,82883],{"class":54,"line":36310},[52,82861,55337],{"class":622},[52,82863,57329],{"class":58},[52,82865,3121],{"class":622},[52,82867,82868],{"class":62},"'.filter'",[52,82870,33758],{"class":622},[52,82872,60743],{"class":58},[52,82874,3121],{"class":622},[52,82876,60748],{"class":62},[52,82878,15391],{"class":622},[52,82880,3191],{"class":8172},[52,82882,82726],{"class":160},[52,82884,18528],{"class":622},[52,82886,82887],{"class":54,"line":36316},[52,82888,82889],{"class":332},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[52,82891,82892,82894,82896,82899,82901,82903,82905,82907],{"class":54,"line":36322},[52,82893,61158],{"class":160},[52,82895,82735],{"class":622},[52,82897,82898],{"class":90},"tagName",[52,82900,15391],{"class":622},[52,82902,34469],{"class":90},[52,82904,82751],{"class":622},[52,82906,2099],{"class":160},[52,82908,82909],{"class":622}," e.target\n",[52,82911,82912],{"class":54,"line":36340},[52,82913,82914],{"class":332},"      \u002F\u002F 判断\n",[52,82916,82917,82919,82921,82923,82925],{"class":54,"line":36354},[52,82918,57410],{"class":160},[52,82920,69963],{"class":622},[52,82922,57416],{"class":160},[52,82924,71185],{"class":62},[52,82926,15398],{"class":622},[52,82928,82929],{"class":54,"line":36363},[52,82930,82931],{"class":332},"        \u002F\u002F console.log(11)\n",[52,82933,82934],{"class":54,"line":36372},[52,82935,82936],{"class":332},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[52,82938,82939],{"class":54,"line":36381},[52,82940,82941],{"class":332},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[52,82943,82944,82946,82948,82950],{"class":54,"line":36390},[52,82945,54761],{"class":160},[52,82947,54764],{"class":622},[52,82949,2099],{"class":160},[52,82951,82952],{"class":622}," goodsList\n",[52,82954,82955,82957,82960,82962,82965],{"class":54,"line":36396},[52,82956,5458],{"class":160},[52,82958,82959],{"class":622}," (dataset.index ",[52,82961,57416],{"class":160},[52,82963,82964],{"class":62}," '1'",[52,82966,15398],{"class":622},[52,82968,82969,82972,82974,82977,82980,82982,82984,82986,82989,82991,82993,82996,82998,83000,83002],{"class":54,"line":36402},[52,82970,82971],{"class":622},"          arr ",[52,82973,2099],{"class":160},[52,82975,82976],{"class":622}," goodsList.",[52,82978,82979],{"class":58},"filter",[52,82981,3121],{"class":622},[52,82983,82723],{"class":8172},[52,82985,82726],{"class":160},[52,82987,82988],{"class":622}," item.price ",[52,82990,4677],{"class":160},[52,82992,7052],{"class":90},[52,82994,82995],{"class":160}," &&",[52,82997,82988],{"class":622},[52,82999,4566],{"class":160},[52,83001,8710],{"class":90},[52,83003,170],{"class":622},[52,83005,83006,83009,83011,83013,83015,83017,83020],{"class":54,"line":36410},[52,83007,83008],{"class":622},"        } ",[52,83010,4668],{"class":160},[52,83012,4671],{"class":160},[52,83014,82959],{"class":622},[52,83016,57416],{"class":160},[52,83018,83019],{"class":62}," '2'",[52,83021,15398],{"class":622},[52,83023,83024,83026,83028,83030,83032,83034,83036,83038,83040,83042,83044,83046,83048,83050,83053],{"class":54,"line":36415},[52,83025,82971],{"class":622},[52,83027,2099],{"class":160},[52,83029,82976],{"class":622},[52,83031,82979],{"class":58},[52,83033,3121],{"class":622},[52,83035,82723],{"class":8172},[52,83037,82726],{"class":160},[52,83039,82988],{"class":622},[52,83041,4677],{"class":160},[52,83043,8710],{"class":90},[52,83045,82995],{"class":160},[52,83047,82988],{"class":622},[52,83049,4566],{"class":160},[52,83051,83052],{"class":90}," 300",[52,83054,170],{"class":622},[52,83056,83057,83059,83061,83063,83065,83067,83070],{"class":54,"line":36421},[52,83058,83008],{"class":622},[52,83060,4668],{"class":160},[52,83062,4671],{"class":160},[52,83064,82959],{"class":622},[52,83066,57416],{"class":160},[52,83068,83069],{"class":62}," '3'",[52,83071,15398],{"class":622},[52,83073,83074,83076,83078,83080,83082,83084,83086,83088,83090,83092,83094],{"class":54,"line":36432},[52,83075,82971],{"class":622},[52,83077,2099],{"class":160},[52,83079,82976],{"class":622},[52,83081,82979],{"class":58},[52,83083,3121],{"class":622},[52,83085,82723],{"class":8172},[52,83087,82726],{"class":160},[52,83089,82988],{"class":622},[52,83091,4677],{"class":160},[52,83093,83052],{"class":90},[52,83095,170],{"class":622},[52,83097,83098],{"class":54,"line":36438},[52,83099,5490],{"class":622},[52,83101,83102],{"class":54,"line":36458},[52,83103,83104],{"class":332},"        \u002F\u002F 渲染函数\n",[52,83106,83107,83109],{"class":54,"line":36464},[52,83108,73336],{"class":58},[52,83110,55342],{"class":622},[52,83112,83113],{"class":54,"line":36470},[52,83114,55328],{"class":622},[52,83116,83117],{"class":54,"line":36476},[52,83118,116],{"emptyLinePlaceholder":115},[52,83120,83121],{"class":54,"line":36493},[52,83122,36393],{"class":622},[52,83124,83125,83127,83129],{"class":54,"line":36499},[52,83126,55347],{"class":622},[52,83128,54744],{"class":54231},[52,83130,54238],{"class":622},[52,83132,83133,83135,83137],{"class":54,"line":36505},[52,83134,54716],{"class":622},[52,83136,54731],{"class":54231},[52,83138,54238],{"class":622},[52,83140,83141],{"class":54,"line":36511},[52,83142,116],{"emptyLinePlaceholder":115},[52,83144,83145,83147,83149],{"class":54,"line":36517},[52,83146,54716],{"class":622},[52,83148,53566],{"class":54231},[52,83150,54238],{"class":622},[14,83152,83154],{"id":83153},"_410-深入了解对象","4.10 深入了解对象",[30,83156,83158],{"id":83157},"_4101-创建对象","4.10.1 创建对象",[274,83160,83161],{},[280,83162],{"alt":28,"src":83163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[274,83165,83166],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[30,83168,83170],{"id":83169},"_4102-构造函数","4.10.2 构造函数",[274,83172,83173,83176],{},[538,83174,83175],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[274,83178,83179,83182],{},[538,83180,83181],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[19,83184,83186],{"className":53564,"code":83185,"language":53566,"meta":28,"style":28},"\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",[26,83187,83188,83196,83201,83222,83235,83247,83259,83263,83268,83295,83300,83327],{"__ignoreMap":28},[52,83189,83190,83192,83194],{"class":54,"line":55},[52,83191,4022],{"class":622},[52,83193,54744],{"class":54231},[52,83195,54238],{"class":622},[52,83197,83198],{"class":54,"line":69},[52,83199,83200],{"class":332},"\u002F\u002F例：\n",[52,83202,83203,83205,83208,83210,83212,83214,83216,83218,83220],{"class":54,"line":82},[52,83204,57379],{"class":160},[52,83206,83207],{"class":58}," Pig",[52,83209,3121],{"class":622},[52,83211,82738],{"class":8172},[52,83213,3491],{"class":622},[52,83215,73149],{"class":8172},[52,83217,3491],{"class":622},[52,83219,73166],{"class":8172},[52,83221,15398],{"class":622},[52,83223,83224,83227,83230,83232],{"class":54,"line":97},[52,83225,83226],{"class":90},"    this",[52,83228,83229],{"class":622},".name",[52,83231,2099],{"class":160},[52,83233,83234],{"class":622},"name\n",[52,83236,83237,83239,83242,83244],{"class":54,"line":112},[52,83238,83226],{"class":90},[52,83240,83241],{"class":622},".age",[52,83243,2099],{"class":160},[52,83245,83246],{"class":622},"age\n",[52,83248,83249,83251,83254,83256],{"class":54,"line":119},[52,83250,83226],{"class":90},[52,83252,83253],{"class":622},".gender",[52,83255,2099],{"class":160},[52,83257,83258],{"class":622},"gender    \n",[52,83260,83261],{"class":54,"line":130},[52,83262,4543],{"class":622},[52,83264,83265],{"class":54,"line":136},[52,83266,83267],{"class":332},"\u002F\u002F创建佩奇对象\n",[52,83269,83270,83272,83275,83277,83279,83281,83284,83286,83288,83290,83293],{"class":54,"line":141},[52,83271,9748],{"class":160},[52,83273,83274],{"class":90}," Peppa",[52,83276,14673],{"class":160},[52,83278,83207],{"class":58},[52,83280,3121],{"class":622},[52,83282,83283],{"class":62},"'佩奇'",[52,83285,3491],{"class":622},[52,83287,3457],{"class":90},[52,83289,3491],{"class":622},[52,83291,83292],{"class":62},"'女'",[52,83294,170],{"class":622},[52,83296,83297],{"class":54,"line":146},[52,83298,83299],{"class":332},"\u002F\u002F创建乔治对象\n",[52,83301,83302,83304,83307,83309,83311,83313,83316,83318,83320,83322,83325],{"class":54,"line":152},[52,83303,9748],{"class":160},[52,83305,83306],{"class":90}," George",[52,83308,14673],{"class":160},[52,83310,83207],{"class":58},[52,83312,3121],{"class":622},[52,83314,83315],{"class":62},"'乔治'",[52,83317,3491],{"class":622},[52,83319,3188],{"class":90},[52,83321,3491],{"class":622},[52,83323,83324],{"class":62},"'男'",[52,83326,170],{"class":622},[52,83328,83329,83331,83333],{"class":54,"line":157},[52,83330,54716],{"class":622},[52,83332,54744],{"class":54231},[52,83334,54238],{"class":622},[274,83336,83337],{},[280,83338],{"alt":28,"src":83339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[274,83341,83342],{},[280,83343],{"alt":28,"src":83344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[274,83346,83347],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[274,83349,83350],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[274,83352,83353],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[274,83355,83356],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[274,83358,83359],{},"这里用等号是因为：对象.属性=值",[274,83361,83362],{},"①利用对象字面量创建对象",[274,83364,83365],{},"const o={",[274,83367,83368],{},"name:'pink'",[274,83370,83371],{},"} ②利用new Object创建对象",[274,83373,83374],{},"const o=new Object({name:'pink'})",[274,83376,83377],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[274,83379,83380],{},"构造函数创建对象的执行过程：",[274,83382,83383],{},[280,83384],{"alt":28,"src":83385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[30,83387,83389],{"id":83388},"_4103-实例成员","4.10.3 实例成员",[274,83391,83392],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1070,83394,83395,83398,83401],{},[1073,83396,83397],{},"实例对象的属性和方法即为实例成员",[1073,83399,83400],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[1073,83402,83403],{},"构造函数创建的实例对象彼此独立互不影响",[30,83405,83407],{"id":83406},"_4104-静态成员","4.10.4 静态成员",[274,83409,83410],{},[280,83411],{"alt":28,"src":83412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[274,83414,83415],{},"静态成员有Date.now() Math.PI Math.random()",[274,83417,83418],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[274,83420,83421],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[274,83423,83424],{},"function Pig(name) n {",[274,83426,83427],{},"this.name=name",[274,83429,4058],{},[274,83431,83432],{},"Pig.eyes=2",[274,83434,83435],{},"Pig.sayHai=function () { console.log(this) }",[274,83437,83438],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[274,83440,83441],{},"console.log(Pig.eyes) \u002F\u002F2",[274,83443,14288],{},[1070,83445,83446,83449,83452,83455,83458],{},[1073,83447,83448],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[1073,83450,83451],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[1073,83453,83454],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[1073,83456,83457],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[1073,83459,83460],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[274,83462,83463],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[30,83465,83467],{"id":83466},"_4105-内置构造函数","4.10.5 内置构造函数",[274,83469,83470],{},"内置构造函数包含：",[274,83472,83473],{},[280,83474],{"alt":28,"src":83475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[274,83477,83478],{},[280,83479],{"alt":28,"src":83480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[274,83482,83483],{},"这些基本数据类型，js对他们进行了包装",[54744,83485,83486],{},"\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",[1486,83488,83490],{"id":83489},"_41051-object","4.10.5.1 Object",[274,83492,83493],{},"Object 是内置的构造函数，用于创建普通对象",[274,83495,83496],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[19,83498,83500],{"className":53564,"code":83499,"language":53566,"meta":28,"style":28},"const user=new Object({name:'小明',age:15})\n",[26,83501,83502],{"__ignoreMap":28},[52,83503,83504],{"class":54,"line":55},[52,83505,83499],{"class":622},[274,83507,83508],{},"三个常用的静态方法：",[1491,83510,83512],{"id":83511},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[274,83514,83515],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[274,83517,83518],{},[280,83519],{"alt":28,"src":83520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[274,83522,83523],{},[280,83524],{"alt":28,"src":83525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[19,83527,83529],{"className":55997,"code":83528,"language":55999,"meta":28,"style":28},"\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",[26,83530,83531,83539,83547,83552,83557,83562,83567,83572,83577,83585],{"__ignoreMap":28},[52,83532,83533,83535,83537],{"class":54,"line":55},[52,83534,4022],{"class":622},[52,83536,54731],{"class":54231},[52,83538,54238],{"class":622},[52,83540,83541,83543,83545],{"class":54,"line":69},[52,83542,55075],{"class":622},[52,83544,54744],{"class":54231},[52,83546,54238],{"class":622},[52,83548,83549],{"class":54,"line":82},[52,83550,83551],{"class":622},"    const o = { name: 'pink', age: 6 }\n",[52,83553,83554],{"class":54,"line":97},[52,83555,83556],{"class":622},"    \u002F\u002F 获得所有属性名\n",[52,83558,83559],{"class":54,"line":112},[52,83560,83561],{"class":622},"    const arr = Object.keys(o)\n",[52,83563,83564],{"class":54,"line":119},[52,83565,83566],{"class":622},"    console.log(arr)\n",[52,83568,83569],{"class":54,"line":130},[52,83570,83571],{"class":622},"    \u002F\u002F 获得所有属性值\n",[52,83573,83574],{"class":54,"line":136},[52,83575,83576],{"class":622},"    console.log(Object.values(o))\n",[52,83578,83579,83581,83583],{"class":54,"line":141},[52,83580,55347],{"class":622},[52,83582,54744],{"class":54231},[52,83584,54238],{"class":622},[52,83586,83587,83589,83591],{"class":54,"line":146},[52,83588,54716],{"class":622},[52,83590,54731],{"class":54231},[52,83592,54238],{"class":622},[1491,83594,83596],{"id":83595},"_410512-object-assign","4.10.5.1.2 Object. assign",[274,83598,83599],{},"Object.assign(oo,o)",[274,83601,83602],{},"后的东西添加给前 是追加",[274,83604,83605],{},[280,83606],{"alt":28,"src":83607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[274,83609,83610],{},[280,83611],{"alt":28,"src":83612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[19,83614,83616],{"className":55997,"code":83615,"language":55999,"meta":28,"style":28},"\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",[26,83617,83618,83626,83634,83638,83642,83646,83650,83654,83658,83663,83668,83673,83678,83683,83691],{"__ignoreMap":28},[52,83619,83620,83622,83624],{"class":54,"line":55},[52,83621,4022],{"class":622},[52,83623,54731],{"class":54231},[52,83625,54238],{"class":622},[52,83627,83628,83630,83632],{"class":54,"line":69},[52,83629,55075],{"class":622},[52,83631,54744],{"class":54231},[52,83633,54238],{"class":622},[52,83635,83636],{"class":54,"line":82},[52,83637,83551],{"class":622},[52,83639,83640],{"class":54,"line":97},[52,83641,83556],{"class":622},[52,83643,83644],{"class":54,"line":112},[52,83645,83561],{"class":622},[52,83647,83648],{"class":54,"line":119},[52,83649,83566],{"class":622},[52,83651,83652],{"class":54,"line":130},[52,83653,83571],{"class":622},[52,83655,83656],{"class":54,"line":136},[52,83657,83576],{"class":622},[52,83659,83660],{"class":54,"line":141},[52,83661,83662],{"class":622},"    const oo = {}\n",[52,83664,83665],{"class":54,"line":146},[52,83666,83667],{"class":622},"    Object.assign(oo, o)\n",[52,83669,83670],{"class":54,"line":152},[52,83671,83672],{"class":622},"    console.log(oo)\n",[52,83674,83675],{"class":54,"line":157},[52,83676,83677],{"class":622},"    Object.assign(o, { gender: '女' })\n",[52,83679,83680],{"class":54,"line":173},[52,83681,83682],{"class":622},"    console.log(o)\n",[52,83684,83685,83687,83689],{"class":54,"line":178},[52,83686,55347],{"class":622},[52,83688,54744],{"class":54231},[52,83690,54238],{"class":622},[52,83692,83693,83695,83697],{"class":54,"line":184},[52,83694,54716],{"class":622},[52,83696,54731],{"class":54231},[52,83698,54238],{"class":622},[274,83700,83701],{},[280,83702],{"alt":28,"src":83703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[1486,83705,83707],{"id":83706},"_41052-array","4.10.5.2 Array",[274,83709,83710],{},"Array 是内置的构造函数，用于创建数组",[274,83712,83713],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[19,83715,83717],{"className":53564,"code":83716,"language":53566,"meta":28,"style":28},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[26,83718,83719,83724],{"__ignoreMap":28},[52,83720,83721],{"class":54,"line":55},[52,83722,83723],{"class":622},"const arr=new Array(3,5)\n",[52,83725,83726],{"class":54,"line":69},[52,83727,83728],{"class":622},"console.log(arr)  \u002F\u002F[3,5]\n",[274,83730,83731],{},"Array的实例方法，这个方法是实例成员",[274,83733,83734],{},[280,83735],{"alt":28,"src":83736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[1491,83738,83740],{"id":83739},"_410521-reduce","4.10.5.2.1 reduce",[274,83742,83743],{},[280,83744],{"alt":28,"src":83745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[19,83747,83749],{"className":55997,"code":83748,"language":55999,"meta":28,"style":28},"\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",[26,83750,83751,83759,83767,83772,83777,83782,83787,83791,83796,83801,83806,83810,83815,83820,83824,83829,83834,83839,83847],{"__ignoreMap":28},[52,83752,83753,83755,83757],{"class":54,"line":55},[52,83754,4022],{"class":622},[52,83756,54731],{"class":54231},[52,83758,54238],{"class":622},[52,83760,83761,83763,83765],{"class":54,"line":69},[52,83762,55075],{"class":622},[52,83764,54744],{"class":54231},[52,83766,54238],{"class":622},[52,83768,83769],{"class":54,"line":82},[52,83770,83771],{"class":622},"    const arr = [1, 5, 8]\n",[52,83773,83774],{"class":54,"line":97},[52,83775,83776],{"class":622},"    \u002F\u002F 1.没有初始值\n",[52,83778,83779],{"class":54,"line":112},[52,83780,83781],{"class":622},"    const total = arr.reduce(function (prev, current) {\n",[52,83783,83784],{"class":54,"line":119},[52,83785,83786],{"class":622},"      return prev + current\n",[52,83788,83789],{"class":54,"line":130},[52,83790,36393],{"class":622},[52,83792,83793],{"class":54,"line":136},[52,83794,83795],{"class":622},"    console.log(total)   \u002F\u002F14\n",[52,83797,83798],{"class":54,"line":141},[52,83799,83800],{"class":622},"    \u002F\u002F 2.有初始值\n",[52,83802,83803],{"class":54,"line":146},[52,83804,83805],{"class":622},"    const total1 = arr.reduce(function (prev, current) {\n",[52,83807,83808],{"class":54,"line":152},[52,83809,83786],{"class":622},[52,83811,83812],{"class":54,"line":157},[52,83813,83814],{"class":622},"    }, 10)\n",[52,83816,83817],{"class":54,"line":173},[52,83818,83819],{"class":622},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[52,83821,83822],{"class":54,"line":178},[52,83823,116],{"emptyLinePlaceholder":115},[52,83825,83826],{"class":54,"line":184},[52,83827,83828],{"class":622},"    \u002F\u002F 3.箭头函数写法\n",[52,83830,83831],{"class":54,"line":189},[52,83832,83833],{"class":622},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[52,83835,83836],{"class":54,"line":201},[52,83837,83838],{"class":622},"    console.log(total2)   \u002F\u002F24\n",[52,83840,83841,83843,83845],{"class":54,"line":206},[52,83842,55347],{"class":622},[52,83844,54744],{"class":54231},[52,83846,54238],{"class":622},[52,83848,83849,83851,83853],{"class":54,"line":224},[52,83850,54716],{"class":622},[52,83852,54731],{"class":54231},[52,83854,54238],{"class":622},[274,83856,83857],{},"执行过程：",[1070,83859,83860,83863,83866],{},[1073,83861,83862],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[1073,83864,83865],{},"每一次循环，把返回值给作为下一次循环的上一次值",[1073,83867,83868],{},"如果有起始值，则起始值作为上一次值",[19,83870,83872],{"className":55997,"code":83871,"language":55999,"meta":28,"style":28},"\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",[26,83873,83874,83882,83890,83894,83898,83902,83906,83910,83914,83919,83924,83929,83934,83939,83943,83947,83951,83955,83959,83963,83968,83972,83977,83981,83986,83991,83995,83999,84003,84011],{"__ignoreMap":28},[52,83875,83876,83878,83880],{"class":54,"line":55},[52,83877,4022],{"class":622},[52,83879,54731],{"class":54231},[52,83881,54238],{"class":622},[52,83883,83884,83886,83888],{"class":54,"line":69},[52,83885,55075],{"class":622},[52,83887,54744],{"class":54231},[52,83889,54238],{"class":622},[52,83891,83892],{"class":54,"line":82},[52,83893,83771],{"class":622},[52,83895,83896],{"class":54,"line":97},[52,83897,83776],{"class":622},[52,83899,83900],{"class":54,"line":112},[52,83901,83781],{"class":622},[52,83903,83904],{"class":54,"line":119},[52,83905,83786],{"class":622},[52,83907,83908],{"class":54,"line":130},[52,83909,36393],{"class":622},[52,83911,83912],{"class":54,"line":136},[52,83913,83795],{"class":622},[52,83915,83916],{"class":54,"line":141},[52,83917,83918],{"class":622},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[52,83920,83921],{"class":54,"line":146},[52,83922,83923],{"class":622},"    \u002F\u002F     1              5                    6\n",[52,83925,83926],{"class":54,"line":152},[52,83927,83928],{"class":622},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[52,83930,83931],{"class":54,"line":157},[52,83932,83933],{"class":622},"    \u002F\u002F     6              8                    14\n",[52,83935,83936],{"class":54,"line":173},[52,83937,83938],{"class":622},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[52,83940,83941],{"class":54,"line":178},[52,83942,83800],{"class":622},[52,83944,83945],{"class":54,"line":184},[52,83946,83805],{"class":622},[52,83948,83949],{"class":54,"line":189},[52,83950,83786],{"class":622},[52,83952,83953],{"class":54,"line":201},[52,83954,83814],{"class":622},[52,83956,83957],{"class":54,"line":206},[52,83958,83819],{"class":622},[52,83960,83961],{"class":54,"line":224},[52,83962,83918],{"class":622},[52,83964,83965],{"class":54,"line":229},[52,83966,83967],{"class":622},"    \u002F\u002F     10             1                     11\n",[52,83969,83970],{"class":54,"line":241},[52,83971,83928],{"class":622},[52,83973,83974],{"class":54,"line":246},[52,83975,83976],{"class":622},"    \u002F\u002F     11             5                    16\n",[52,83978,83979],{"class":54,"line":252},[52,83980,83928],{"class":622},[52,83982,83983],{"class":54,"line":257},[52,83984,83985],{"class":622},"    \u002F\u002F     16             8                    24\n",[52,83987,83988],{"class":54,"line":266},[52,83989,83990],{"class":622},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[52,83992,83993],{"class":54,"line":4722},[52,83994,83828],{"class":622},[52,83996,83997],{"class":54,"line":4727},[52,83998,83833],{"class":622},[52,84000,84001],{"class":54,"line":4741},[52,84002,83838],{"class":622},[52,84004,84005,84007,84009],{"class":54,"line":4746},[52,84006,55347],{"class":622},[52,84008,54744],{"class":54231},[52,84010,54238],{"class":622},[52,84012,84013,84015,84017],{"class":54,"line":5538},[52,84014,54716],{"class":622},[52,84016,54731],{"class":54231},[52,84018,54238],{"class":622},[1491,84020,84022],{"id":84021},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[274,84024,84025],{},[280,84026],{"alt":28,"src":84027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[19,84029,84031],{"className":55997,"code":84030,"language":55999,"meta":28,"style":28},"\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",[26,84032,84033,84041,84049,84054,84059,84064,84069,84073,84078,84083,84088,84093,84098,84103,84107,84112,84116,84121,84129],{"__ignoreMap":28},[52,84034,84035,84037,84039],{"class":54,"line":55},[52,84036,4022],{"class":622},[52,84038,54731],{"class":54231},[52,84040,54238],{"class":622},[52,84042,84043,84045,84047],{"class":54,"line":69},[52,84044,55075],{"class":622},[52,84046,54744],{"class":54231},[52,84048,54238],{"class":622},[52,84050,84051],{"class":54,"line":82},[52,84052,84053],{"class":622},"    const arr = [\n",[52,84055,84056],{"class":54,"line":97},[52,84057,84058],{"class":622},"      { name: '张三', salary: 10000 },\n",[52,84060,84061],{"class":54,"line":112},[52,84062,84063],{"class":622},"      { name: '李四', salary: 10000 },\n",[52,84065,84066],{"class":54,"line":119},[52,84067,84068],{"class":622},"      { name: '王五', salary: 10000 }\n",[52,84070,84071],{"class":54,"line":130},[52,84072,56039],{"class":622},[52,84074,84075],{"class":54,"line":136},[52,84076,84077],{"class":622},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[52,84079,84080],{"class":54,"line":141},[52,84081,84082],{"class":622},"    \u002F\u002F prev是累计值\n",[52,84084,84085],{"class":54,"line":146},[52,84086,84087],{"class":622},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[52,84089,84090],{"class":54,"line":152},[52,84091,84092],{"class":622},"    console.log(total)\n",[52,84094,84095],{"class":54,"line":157},[52,84096,84097],{"class":622},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[52,84099,84100],{"class":54,"line":173},[52,84101,84102],{"class":622},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[52,84104,84105],{"class":54,"line":178},[52,84106,84097],{"class":622},[52,84108,84109],{"class":54,"line":184},[52,84110,84111],{"class":622},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[52,84113,84114],{"class":54,"line":189},[52,84115,84097],{"class":622},[52,84117,84118],{"class":54,"line":201},[52,84119,84120],{"class":622},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[52,84122,84123,84125,84127],{"class":54,"line":206},[52,84124,55347],{"class":622},[52,84126,54744],{"class":54231},[52,84128,54238],{"class":622},[52,84130,84131,84133,84135],{"class":54,"line":224},[52,84132,54716],{"class":622},[52,84134,54731],{"class":54231},[52,84136,54238],{"class":622},[1491,84138,84140],{"id":84139},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[274,84142,84143],{},[280,84144],{"alt":28,"src":84145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[274,84147,84148],{},[280,84149],{"alt":28,"src":84150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1070,84152,84153],{},[1073,84154,84155],{},"find()",[274,84157,84158],{},"循环查找，找到第一个就ok",[274,84160,84161],{},[300,84162,84165],{"href":84163,"rel":84164},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[304],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[19,84167,84169],{"className":53564,"code":84168,"language":53566,"meta":28,"style":28},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[26,84170,84171,84176,84181],{"__ignoreMap":28},[52,84172,84173],{"class":54,"line":55},[52,84174,84175],{"class":622},"const array1 = [5, 12, 8, 130, 44]\n",[52,84177,84178],{"class":54,"line":69},[52,84179,84180],{"class":622},"const found = array1.find((element) => element > 10)\n",[52,84182,84183],{"class":54,"line":82},[52,84184,84185],{"class":622},"console.log(found)  \u002F\u002F12\n",[274,84187,84188,84190,84191,84196,84197,84200,84201,84203,84204,84209,84210,84212,84213,84215,84216,84218,84219],{},[26,84189,84155],{}," 方法是一个",[300,84192,84195],{"href":84193,"rel":84194},"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",[304],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[26,84198,84199],{},"callbackFn"," 函数，直到 ",[26,84202,84199],{}," 返回一个",[300,84205,84208],{"href":84206,"rel":84207},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[304],"真值","。然后 ",[26,84211,84155],{}," 返回该元素并停止迭代数组。如果 ",[26,84214,84199],{}," 从未返回真值，则 ",[26,84217,84155],{}," 返回 ",[26,84220,84221],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[19,84223,84225],{"className":55997,"code":84224,"language":55999,"meta":28,"style":28},"\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",[26,84226,84227,84235,84243,84248,84253,84258,84262,84267,84272,84276,84281,84286,84290,84294,84299,84304,84308,84312,84317,84322,84327,84332,84337,84341,84346,84351,84356,84361,84365,84370,84378],{"__ignoreMap":28},[52,84228,84229,84231,84233],{"class":54,"line":55},[52,84230,4022],{"class":622},[52,84232,54731],{"class":54231},[52,84234,54238],{"class":622},[52,84236,84237,84239,84241],{"class":54,"line":69},[52,84238,55075],{"class":622},[52,84240,54744],{"class":54231},[52,84242,54238],{"class":622},[52,84244,84245],{"class":54,"line":82},[52,84246,84247],{"class":622},"    const arr = ['red', 'blue', 'green']\n",[52,84249,84250],{"class":54,"line":97},[52,84251,84252],{"class":622},"    const found = arr.find(item => item === 'pink')\n",[52,84254,84255],{"class":54,"line":112},[52,84256,84257],{"class":622},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[52,84259,84260],{"class":54,"line":119},[52,84261,116],{"emptyLinePlaceholder":115},[52,84263,84264],{"class":54,"line":130},[52,84265,84266],{"class":622},"    \u002F\u002F 使用场景，用于查找数据\n",[52,84268,84269],{"class":54,"line":136},[52,84270,84271],{"class":622},"    const arr1 = [\n",[52,84273,84274],{"class":54,"line":141},[52,84275,82314],{"class":622},[52,84277,84278],{"class":54,"line":146},[52,84279,84280],{"class":622},"        name: '小米',\n",[52,84282,84283],{"class":54,"line":152},[52,84284,84285],{"class":622},"        price: 1999\n",[52,84287,84288],{"class":54,"line":157},[52,84289,80820],{"class":622},[52,84291,84292],{"class":54,"line":173},[52,84293,82314],{"class":622},[52,84295,84296],{"class":54,"line":178},[52,84297,84298],{"class":622},"        name: '华为',\n",[52,84300,84301],{"class":54,"line":184},[52,84302,84303],{"class":622},"        price: 3999\n",[52,84305,84306],{"class":54,"line":189},[52,84307,55328],{"class":622},[52,84309,84310],{"class":54,"line":201},[52,84311,56039],{"class":622},[52,84313,84314],{"class":54,"line":206},[52,84315,84316],{"class":622},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[52,84318,84319],{"class":54,"line":224},[52,84320,84321],{"class":622},"    \u002F\u002F const found1 = arr1.find(item => {\n",[52,84323,84324],{"class":54,"line":229},[52,84325,84326],{"class":622},"    \u002F\u002F   if (item.name === '小米') {\n",[52,84328,84329],{"class":54,"line":241},[52,84330,84331],{"class":622},"    \u002F\u002F     return item\n",[52,84333,84334],{"class":54,"line":246},[52,84335,84336],{"class":622},"    \u002F\u002F   }\n",[52,84338,84339],{"class":54,"line":252},[52,84340,66220],{"class":622},[52,84342,84343],{"class":54,"line":257},[52,84344,84345],{"class":622},"    \u002F\u002F 另一种写法\n",[52,84347,84348],{"class":54,"line":266},[52,84349,84350],{"class":622},"    const found1 = arr1.find(item => {\n",[52,84352,84353],{"class":54,"line":4722},[52,84354,84355],{"class":622},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[52,84357,84358],{"class":54,"line":4727},[52,84359,84360],{"class":622},"      return item.name = '小米'\n",[52,84362,84363],{"class":54,"line":4741},[52,84364,36393],{"class":622},[52,84366,84367],{"class":54,"line":4746},[52,84368,84369],{"class":622},"    console.log(found1)\n",[52,84371,84372,84374,84376],{"class":54,"line":5538},[52,84373,55347],{"class":622},[52,84375,54744],{"class":54231},[52,84377,54238],{"class":622},[52,84379,84380,84382,84384],{"class":54,"line":5552},[52,84381,54716],{"class":622},[52,84383,54731],{"class":54231},[52,84385,54238],{"class":622},[274,84387,84388],{},[280,84389],{"alt":28,"src":84390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[274,84392,84393],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1070,84395,84396],{"start":69},[1073,84397,84398],{},"every()返回的是布尔值",[274,84400,84401],{},[300,84402,84405],{"href":84403,"rel":84404},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[304],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[274,84407,84408],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[274,84410,84411],{},"some是只有有一个就没问题",[274,84413,84414],{},"every是必须全是才行",[19,84416,84420],{"className":84417,"code":84418,"language":84419,"meta":28,"style":28},"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",[26,84421,84422,84438,84452,84456,84465],{"__ignoreMap":28},[52,84423,84424,84426,84429,84431,84433,84436],{"class":54,"line":55},[52,84425,57379],{"class":160},[52,84427,84428],{"class":622}," isBigEnough(element, ",[52,84430,76986],{"class":160},[52,84432,15391],{"class":622},[52,84434,84435],{"class":160},"array",[52,84437,15398],{"class":622},[52,84439,84440,84443,84446,84448,84450],{"class":54,"line":69},[52,84441,84442],{"class":160},"  return",[52,84444,84445],{"class":622}," element ",[52,84447,4677],{"class":160},[52,84449,5000],{"class":90},[52,84451,4272],{"class":622},[52,84453,84454],{"class":54,"line":82},[52,84455,4543],{"class":622},[52,84457,84458,84461,84463],{"class":54,"line":97},[52,84459,84460],{"class":622},"[12, 5, 8, 130, 44].every(isBigEnough); ",[52,84462,36261],{"class":160},[52,84464,57446],{"class":622},[52,84466,84467,84470,84472],{"class":54,"line":112},[52,84468,84469],{"class":622},"[12, 54, 18, 130, 44].every(isBigEnough); ",[52,84471,36261],{"class":160},[52,84473,60870],{"class":622},[19,84475,84477],{"className":55997,"code":84476,"language":55999,"meta":28,"style":28},"\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",[26,84478,84479,84487,84495,84500,84504,84509,84514,84522],{"__ignoreMap":28},[52,84480,84481,84483,84485],{"class":54,"line":55},[52,84482,4022],{"class":622},[52,84484,54731],{"class":54231},[52,84486,54238],{"class":622},[52,84488,84489,84491,84493],{"class":54,"line":69},[52,84490,55075],{"class":622},[52,84492,54744],{"class":54231},[52,84494,54238],{"class":622},[52,84496,84497],{"class":54,"line":82},[52,84498,84499],{"class":622},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[52,84501,84502],{"class":54,"line":97},[52,84503,81250],{"class":622},[52,84505,84506],{"class":54,"line":112},[52,84507,84508],{"class":622},"    const flag = arr.every(item => item >= 10)\n",[52,84510,84511],{"class":54,"line":119},[52,84512,84513],{"class":622},"    console.log(flag)    \u002F\u002Ftrue\n",[52,84515,84516,84518,84520],{"class":54,"line":130},[52,84517,55347],{"class":622},[52,84519,54744],{"class":54231},[52,84521,54238],{"class":622},[52,84523,84524,84526,84528],{"class":54,"line":136},[52,84525,54716],{"class":622},[52,84527,54731],{"class":54231},[52,84529,54238],{"class":622},[19,84531,84533],{"className":55997,"code":84532,"language":55999,"meta":28,"style":28},"\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",[26,84534,84535,84543,84551,84555,84560,84565,84570,84578],{"__ignoreMap":28},[52,84536,84537,84539,84541],{"class":54,"line":55},[52,84538,4022],{"class":622},[52,84540,54731],{"class":54231},[52,84542,54238],{"class":622},[52,84544,84545,84547,84549],{"class":54,"line":69},[52,84546,55075],{"class":622},[52,84548,54744],{"class":54231},[52,84550,54238],{"class":622},[52,84552,84553],{"class":54,"line":82},[52,84554,84499],{"class":622},[52,84556,84557],{"class":54,"line":97},[52,84558,84559],{"class":622},"    const arr = [10, 0, 5]\n",[52,84561,84562],{"class":54,"line":112},[52,84563,84564],{"class":622},"    const flag = arr.some(item => item >= 10)\n",[52,84566,84567],{"class":54,"line":119},[52,84568,84569],{"class":622},"    console.log(flag)   \u002F\u002Ftrue\n",[52,84571,84572,84574,84576],{"class":54,"line":130},[52,84573,55347],{"class":622},[52,84575,54744],{"class":54231},[52,84577,54238],{"class":622},[52,84579,84580,84582,84584],{"class":54,"line":136},[52,84581,54716],{"class":622},[52,84583,54731],{"class":54231},[52,84585,54238],{"class":622},[1491,84587,84589],{"id":84588},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[274,84591,84592],{},[280,84593],{"alt":28,"src":84594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[19,84596,84598],{"className":53564,"code":84597,"language":53566,"meta":28,"style":28},"\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",[26,84599,84600,84610,84624,84628,84636,84650,84670,84682,84690,84697,84709,84721,84733,84745,84755,84765,84769,84777,84785,84789,84797,84809,84817,84839,84844,84849,84882,84890,84898,84902],{"__ignoreMap":28},[52,84601,84602,84604,84606,84608],{"class":54,"line":55},[52,84603,54228],{"class":622},[52,84605,54232],{"class":54231},[52,84607,54235],{"class":58},[52,84609,54238],{"class":622},[52,84611,84612,84614,84616,84618,84620,84622],{"class":54,"line":69},[52,84613,4022],{"class":622},[52,84615,53566],{"class":54231},[52,84617,54247],{"class":58},[52,84619,2099],{"class":622},[52,84621,54252],{"class":62},[52,84623,54238],{"class":622},[52,84625,84626],{"class":54,"line":82},[52,84627,116],{"emptyLinePlaceholder":115},[52,84629,84630,84632,84634],{"class":54,"line":97},[52,84631,4022],{"class":622},[52,84633,54265],{"class":54231},[52,84635,54238],{"class":622},[52,84637,84638,84640,84642,84644,84646,84648],{"class":54,"line":112},[52,84639,55075],{"class":622},[52,84641,54275],{"class":54231},[52,84643,54278],{"class":58},[52,84645,2099],{"class":622},[52,84647,54283],{"class":62},[52,84649,54238],{"class":622},[52,84651,84652,84654,84656,84658,84660,84662,84664,84666,84668],{"class":54,"line":119},[52,84653,55075],{"class":622},[52,84655,54275],{"class":54231},[52,84657,17876],{"class":58},[52,84659,2099],{"class":622},[52,84661,54322],{"class":62},[52,84663,54302],{"class":58},[52,84665,2099],{"class":622},[52,84667,54329],{"class":62},[52,84669,54238],{"class":622},[52,84671,84672,84674,84676,84678,84680],{"class":54,"line":130},[52,84673,55075],{"class":622},[52,84675,54338],{"class":54231},[52,84677,54341],{"class":622},[52,84679,54338],{"class":54231},[52,84681,54238],{"class":622},[52,84683,84684,84686,84688],{"class":54,"line":136},[52,84685,55075],{"class":622},[52,84687,3015],{"class":54231},[52,84689,54238],{"class":622},[52,84691,84692,84695],{"class":54,"line":141},[52,84693,84694],{"class":54231},"    div",[52,84696,18528],{"class":622},[52,84698,84699,84701,84703,84705,84707],{"class":54,"line":146},[52,84700,57701],{"class":90},[52,84702,54368],{"class":622},[52,84704,4689],{"class":90},[52,84706,54423],{"class":160},[52,84708,4272],{"class":622},[52,84710,84711,84713,84715,84717,84719],{"class":54,"line":152},[52,84712,57715],{"class":90},[52,84714,54368],{"class":622},[52,84716,3514],{"class":90},[52,84718,54423],{"class":160},[52,84720,4272],{"class":622},[52,84722,84723,84725,84727,84729,84731],{"class":54,"line":157},[52,84724,60289],{"class":90},[52,84726,54368],{"class":622},[52,84728,3514],{"class":90},[52,84730,54423],{"class":160},[52,84732,4272],{"class":622},[52,84734,84735,84737,84739,84741,84743],{"class":54,"line":173},[52,84736,68062],{"class":90},[52,84738,54368],{"class":622},[52,84740,3610],{"class":90},[52,84742,54423],{"class":160},[52,84744,4272],{"class":622},[52,84746,84747,84749,84751,84753],{"class":54,"line":178},[52,84748,60216],{"class":90},[52,84750,54368],{"class":622},[52,84752,54523],{"class":90},[52,84754,4272],{"class":622},[52,84756,84757,84759,84761,84763],{"class":54,"line":184},[52,84758,57814],{"class":90},[52,84760,54368],{"class":622},[52,84762,54576],{"class":90},[52,84764,4272],{"class":622},[52,84766,84767],{"class":54,"line":189},[52,84768,5149],{"class":622},[52,84770,84771,84773,84775],{"class":54,"line":201},[52,84772,55347],{"class":622},[52,84774,3015],{"class":54231},[52,84776,54238],{"class":622},[52,84778,84779,84781,84783],{"class":54,"line":206},[52,84780,54716],{"class":622},[52,84782,54265],{"class":54231},[52,84784,54238],{"class":622},[52,84786,84787],{"class":54,"line":224},[52,84788,116],{"emptyLinePlaceholder":115},[52,84790,84791,84793,84795],{"class":54,"line":229},[52,84792,4022],{"class":622},[52,84794,54731],{"class":54231},[52,84796,54238],{"class":622},[52,84798,84799,84801,84803,84805,84807],{"class":54,"line":241},[52,84800,55075],{"class":622},[52,84802,54542],{"class":54231},[52,84804,58244],{"class":622},[52,84806,54542],{"class":54231},[52,84808,54238],{"class":622},[52,84810,84811,84813,84815],{"class":54,"line":246},[52,84812,55075],{"class":622},[52,84814,54744],{"class":54231},[52,84816,54238],{"class":622},[52,84818,84819,84821,84824,84826,84829,84832,84834,84837],{"class":54,"line":252},[52,84820,14177],{"class":160},[52,84822,84823],{"class":90}," spec",[52,84825,16520],{"class":160},[52,84827,84828],{"class":622}," { size: ",[52,84830,84831],{"class":62},"'40cm*40cm'",[52,84833,58394],{"class":622},[52,84835,84836],{"class":62},"'黑色'",[52,84838,58534],{"class":622},[52,84840,84841],{"class":54,"line":257},[52,84842,84843],{"class":332},"    \u002F\u002F const arr = Object.values(spec)\n",[52,84845,84846],{"class":54,"line":266},[52,84847,84848],{"class":332},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[52,84850,84851,84853,84855,84857,84860,84862,84864,84867,84870,84873,84875,84877,84880],{"class":54,"line":4722},[52,84852,55337],{"class":622},[52,84854,57329],{"class":58},[52,84856,3121],{"class":622},[52,84858,84859],{"class":62},"'div'",[52,84861,77177],{"class":622},[52,84863,2099],{"class":160},[52,84865,84866],{"class":622}," Object.",[52,84868,84869],{"class":58},"values",[52,84871,84872],{"class":622},"(spec).",[52,84874,77151],{"class":58},[52,84876,3121],{"class":622},[52,84878,84879],{"class":62},"'\u002F'",[52,84881,170],{"class":622},[52,84883,84884,84886,84888],{"class":54,"line":4727},[52,84885,55347],{"class":622},[52,84887,54744],{"class":54231},[52,84889,54238],{"class":622},[52,84891,84892,84894,84896],{"class":54,"line":4741},[52,84893,54716],{"class":622},[52,84895,54731],{"class":54231},[52,84897,54238],{"class":622},[52,84899,84900],{"class":54,"line":4746},[52,84901,116],{"emptyLinePlaceholder":115},[52,84903,84904,84906,84908],{"class":54,"line":5538},[52,84905,54716],{"class":622},[52,84907,53566],{"class":54231},[52,84909,54238],{"class":622},[274,84911,84912],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[1491,84914,84916],{"id":84915},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[274,84918,84919],{},"静态方法，将伪数组转换为真数组",[274,84921,84922],{},[280,84923],{"alt":28,"src":84924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[19,84926,84928],{"className":55997,"code":84927,"language":55999,"meta":28,"style":28},"\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",[26,84929,84930,84938,84946,84958,84970,84982,84990,84998,85003,85008,85013,85018,85026],{"__ignoreMap":28},[52,84931,84932,84934,84936],{"class":54,"line":55},[52,84933,4022],{"class":622},[52,84935,54731],{"class":54231},[52,84937,54238],{"class":622},[52,84939,84940,84942,84944],{"class":54,"line":69},[52,84941,55075],{"class":622},[52,84943,4118],{"class":54231},[52,84945,54238],{"class":622},[52,84947,84948,84950,84952,84954,84956],{"class":54,"line":82},[52,84949,54272],{"class":622},[52,84951,1073],{"class":54231},[52,84953,58244],{"class":622},[52,84955,1073],{"class":54231},[52,84957,54238],{"class":622},[52,84959,84960,84962,84964,84966,84968],{"class":54,"line":97},[52,84961,54272],{"class":622},[52,84963,1073],{"class":54231},[52,84965,58244],{"class":622},[52,84967,1073],{"class":54231},[52,84969,54238],{"class":622},[52,84971,84972,84974,84976,84978,84980],{"class":54,"line":112},[52,84973,54272],{"class":622},[52,84975,1073],{"class":54231},[52,84977,58244],{"class":622},[52,84979,1073],{"class":54231},[52,84981,54238],{"class":622},[52,84983,84984,84986,84988],{"class":54,"line":119},[52,84985,55347],{"class":622},[52,84987,4118],{"class":54231},[52,84989,54238],{"class":622},[52,84991,84992,84994,84996],{"class":54,"line":130},[52,84993,55075],{"class":622},[52,84995,54744],{"class":54231},[52,84997,54238],{"class":622},[52,84999,85000],{"class":54,"line":136},[52,85001,85002],{"class":622},"    const lis = document.querySelectorAll('li')\n",[52,85004,85005],{"class":54,"line":141},[52,85006,85007],{"class":622},"    const liss = Array.from(lis)\n",[52,85009,85010],{"class":54,"line":146},[52,85011,85012],{"class":622},"    liss.pop()\n",[52,85014,85015],{"class":54,"line":152},[52,85016,85017],{"class":622},"    console.log(liss)\n",[52,85019,85020,85022,85024],{"class":54,"line":157},[52,85021,55347],{"class":622},[52,85023,54744],{"class":54231},[52,85025,54238],{"class":622},[52,85027,85028,85030,85032],{"class":54,"line":173},[52,85029,54716],{"class":622},[52,85031,54731],{"class":54231},[52,85033,54238],{"class":622},[274,85035,85036],{},[280,85037],{"alt":28,"src":85038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[1486,85040,85042],{"id":85041},"_41053-string","4.10.5.3 String",[274,85044,85045],{},[280,85046],{"alt":28,"src":85047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[1491,85049,85051],{"id":85050},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[19,85053,85055],{"className":55997,"code":85054,"language":55999,"meta":28,"style":28},"\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",[26,85056,85057,85065,85073,85078,85083,85088,85092,85097,85102,85107,85115],{"__ignoreMap":28},[52,85058,85059,85061,85063],{"class":54,"line":55},[52,85060,4022],{"class":622},[52,85062,54731],{"class":54231},[52,85064,54238],{"class":622},[52,85066,85067,85069,85071],{"class":54,"line":69},[52,85068,55075],{"class":622},[52,85070,54744],{"class":54231},[52,85072,54238],{"class":622},[52,85074,85075],{"class":54,"line":82},[52,85076,85077],{"class":622},"    \u002F\u002F 把字符串转化为数组\n",[52,85079,85080],{"class":54,"line":97},[52,85081,85082],{"class":622},"    const str = 'pink,red'\n",[52,85084,85085],{"class":54,"line":112},[52,85086,85087],{"class":622},"    const arr = str.split(',')\n",[52,85089,85090],{"class":54,"line":119},[52,85091,83566],{"class":622},[52,85093,85094],{"class":54,"line":130},[52,85095,85096],{"class":622},"    const str1 = '2025-8-25'\n",[52,85098,85099],{"class":54,"line":136},[52,85100,85101],{"class":622},"    const arr1 = str1.split('-')\n",[52,85103,85104],{"class":54,"line":141},[52,85105,85106],{"class":622},"    console.log(arr1)\n",[52,85108,85109,85111,85113],{"class":54,"line":146},[52,85110,55347],{"class":622},[52,85112,54744],{"class":54231},[52,85114,54238],{"class":622},[52,85116,85117,85119,85121],{"class":54,"line":152},[52,85118,54716],{"class":622},[52,85120,54731],{"class":54231},[52,85122,54238],{"class":622},[1491,85124,85126],{"id":85125},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[274,85128,8140],{},[274,85130,85131],{},"substring(indexStart)",[274,85133,85134],{},"substring(indexStart, indexEnd)",[4118,85136,85137,85148,85160,85170],{},[1073,85138,85139,85140,85143,85144,85147],{},"如果省略了 ",[26,85141,85142],{},"indexEnd","，则 ",[26,85145,85146],{},"substring()"," 提取字符直到字符串的末尾",[1073,85149,85150,85151,85154,85155,85143,85157,85159],{},"如果 ",[26,85152,85153],{},"indexStart"," 等于 ",[26,85156,85142],{},[26,85158,85146],{}," 返回一个空字符串",[1073,85161,85150,85162,85164,85165,85143,85167,85169],{},[26,85163,85153],{}," 大于 ",[26,85166,85142],{},[26,85168,85146],{}," 的效果就像交换了这两个参数一样",[1073,85171,85172],{},"结束的索引号不包含想要截取的部分",[19,85174,85176],{"className":84417,"code":85175,"language":84419,"meta":28,"style":28},"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",[26,85177,85178,85190,85194,85228,85258,85262,85293,85297,85324,85354,85384,85388,85419],{"__ignoreMap":28},[52,85179,85180,85183,85185,85188],{"class":54,"line":55},[52,85181,85182],{"class":622},"const anyString ",[52,85184,2099],{"class":160},[52,85186,85187],{"class":62}," \"Mozilla\"",[52,85189,4272],{"class":622},[52,85191,85192],{"class":54,"line":69},[52,85193,116],{"emptyLinePlaceholder":115},[52,85195,85196,85199,85201,85203,85205,85208,85210,85213,85215,85217,85219,85221,85223,85225],{"class":54,"line":82},[52,85197,85198],{"class":90},"console",[52,85200,3670],{"class":622},[52,85202,61177],{"class":90},[52,85204,3121],{"class":622},[52,85206,85207],{"class":90},"anyString",[52,85209,3670],{"class":622},[52,85211,85212],{"class":90},"substring",[52,85214,3121],{"class":622},[52,85216,3306],{"class":90},[52,85218,15391],{"class":622},[52,85220,3332],{"class":90},[52,85222,78181],{"class":622},[52,85224,36261],{"class":160},[52,85226,85227],{"class":62}," 'M'\n",[52,85229,85230,85232,85234,85236,85238,85240,85242,85244,85246,85248,85250,85252,85254,85256],{"class":54,"line":97},[52,85231,85198],{"class":90},[52,85233,3670],{"class":622},[52,85235,61177],{"class":90},[52,85237,3121],{"class":622},[52,85239,85207],{"class":90},[52,85241,3670],{"class":622},[52,85243,85212],{"class":90},[52,85245,3121],{"class":622},[52,85247,3332],{"class":90},[52,85249,15391],{"class":622},[52,85251,3306],{"class":90},[52,85253,78181],{"class":622},[52,85255,36261],{"class":160},[52,85257,85227],{"class":62},[52,85259,85260],{"class":54,"line":112},[52,85261,116],{"emptyLinePlaceholder":115},[52,85263,85264,85266,85268,85270,85272,85274,85276,85278,85280,85282,85284,85286,85288,85290],{"class":54,"line":119},[52,85265,85198],{"class":90},[52,85267,3670],{"class":622},[52,85269,61177],{"class":90},[52,85271,3121],{"class":622},[52,85273,85207],{"class":90},[52,85275,3670],{"class":622},[52,85277,85212],{"class":90},[52,85279,3121],{"class":622},[52,85281,3306],{"class":90},[52,85283,15391],{"class":622},[52,85285,3457],{"class":90},[52,85287,78181],{"class":622},[52,85289,36261],{"class":160},[52,85291,85292],{"class":62}," 'Mozill'\n",[52,85294,85295],{"class":54,"line":130},[52,85296,116],{"emptyLinePlaceholder":115},[52,85298,85299,85301,85303,85305,85307,85309,85311,85313,85315,85317,85319,85321],{"class":54,"line":136},[52,85300,85198],{"class":90},[52,85302,3670],{"class":622},[52,85304,61177],{"class":90},[52,85306,3121],{"class":622},[52,85308,85207],{"class":90},[52,85310,3670],{"class":622},[52,85312,85212],{"class":90},[52,85314,3121],{"class":622},[52,85316,3406],{"class":90},[52,85318,78181],{"class":622},[52,85320,36261],{"class":160},[52,85322,85323],{"class":62}," 'lla'\n",[52,85325,85326,85328,85330,85332,85334,85336,85338,85340,85342,85344,85346,85348,85350,85352],{"class":54,"line":141},[52,85327,85198],{"class":90},[52,85329,3670],{"class":622},[52,85331,61177],{"class":90},[52,85333,3121],{"class":622},[52,85335,85207],{"class":90},[52,85337,3670],{"class":622},[52,85339,85212],{"class":90},[52,85341,3121],{"class":622},[52,85343,3406],{"class":90},[52,85345,15391],{"class":622},[52,85347,3482],{"class":90},[52,85349,78237],{"class":622},[52,85351,36261],{"class":160},[52,85353,85323],{"class":62},[52,85355,85356,85358,85360,85362,85364,85366,85368,85370,85372,85374,85376,85378,85380,85382],{"class":54,"line":146},[52,85357,85198],{"class":90},[52,85359,3670],{"class":622},[52,85361,61177],{"class":90},[52,85363,3121],{"class":622},[52,85365,85207],{"class":90},[52,85367,3670],{"class":622},[52,85369,85212],{"class":90},[52,85371,3121],{"class":622},[52,85373,3482],{"class":90},[52,85375,15391],{"class":622},[52,85377,3406],{"class":90},[52,85379,78181],{"class":622},[52,85381,36261],{"class":160},[52,85383,85323],{"class":62},[52,85385,85386],{"class":54,"line":152},[52,85387,116],{"emptyLinePlaceholder":115},[52,85389,85390,85392,85394,85396,85398,85400,85402,85404,85406,85408,85410,85412,85414,85416],{"class":54,"line":157},[52,85391,85198],{"class":90},[52,85393,3670],{"class":622},[52,85395,61177],{"class":90},[52,85397,3121],{"class":622},[52,85399,85207],{"class":90},[52,85401,3670],{"class":622},[52,85403,85212],{"class":90},[52,85405,3121],{"class":622},[52,85407,3306],{"class":90},[52,85409,15391],{"class":622},[52,85411,3482],{"class":90},[52,85413,78181],{"class":622},[52,85415,36261],{"class":160},[52,85417,85418],{"class":62}," 'Mozilla'\n",[52,85420,85421,85423,85425,85427,85429,85431,85433,85435,85437,85439,85441,85443,85445,85447],{"class":54,"line":173},[52,85422,85198],{"class":90},[52,85424,3670],{"class":622},[52,85426,61177],{"class":90},[52,85428,3121],{"class":622},[52,85430,85207],{"class":90},[52,85432,3670],{"class":622},[52,85434,85212],{"class":90},[52,85436,3121],{"class":622},[52,85438,3306],{"class":90},[52,85440,15391],{"class":622},[52,85442,3559],{"class":90},[52,85444,78181],{"class":622},[52,85446,36261],{"class":160},[52,85448,85418],{"class":62},[1491,85450,85452],{"id":85451},"_410533-startswith","4.10.5.3.3 startsWith",[274,85454,85455,85458,85459,85464,85465,85467,85468],{},[26,85456,85457],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[538,85460,85461],{},[26,85462,85463],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[26,85466,4341],{}," 或 ",[26,85469,68949],{},[19,85471,85473],{"className":80423,"code":85472,"language":80425,"meta":28,"style":28},"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",[26,85474,85475,85487,85506,85511,85531],{"__ignoreMap":28},[52,85476,85477,85479,85482,85484],{"class":54,"line":55},[52,85478,9748],{"class":160},[52,85480,85481],{"class":622}," str1 ",[52,85483,2099],{"class":160},[52,85485,85486],{"class":62}," \"Saturday night plans\"\n",[52,85488,85489,85491,85493,85496,85499,85501,85504],{"class":54,"line":69},[52,85490,80460],{"class":622},[52,85492,61177],{"class":58},[52,85494,85495],{"class":622},"(str1.",[52,85497,85498],{"class":58},"startsWith",[52,85500,3121],{"class":622},[52,85502,85503],{"class":62},"\"Sat\"",[52,85505,33429],{"class":622},[52,85507,85508],{"class":54,"line":82},[52,85509,85510],{"class":332},"\u002F\u002F Expected output: true\n",[52,85512,85513,85515,85517,85519,85521,85523,85525,85527,85529],{"class":54,"line":97},[52,85514,80460],{"class":622},[52,85516,61177],{"class":58},[52,85518,85495],{"class":622},[52,85520,85498],{"class":58},[52,85522,3121],{"class":622},[52,85524,85503],{"class":62},[52,85526,15391],{"class":622},[52,85528,3188],{"class":90},[52,85530,33429],{"class":622},[52,85532,85533],{"class":54,"line":112},[52,85534,85535],{"class":332},"\u002F\u002F Expected output: false\n",[19,85537,85539],{"className":53564,"code":85538,"language":53566,"meta":28,"style":28},"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",[26,85540,85541,85546,85551,85555,85560,85565],{"__ignoreMap":28},[52,85542,85543],{"class":54,"line":55},[52,85544,85545],{"class":622},"startsWith(searchString)\n",[52,85547,85548],{"class":54,"line":69},[52,85549,85550],{"class":622},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[52,85552,85553],{"class":54,"line":82},[52,85554,116],{"emptyLinePlaceholder":115},[52,85556,85557],{"class":54,"line":97},[52,85558,85559],{"class":622},"const str3 = 'pink老师上课中'\n",[52,85561,85562],{"class":54,"line":112},[52,85563,85564],{"class":622},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[52,85566,85567],{"class":54,"line":119},[52,85568,85569],{"class":622},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[1491,85571,85573],{"id":85572},"_410534-includes","4.10.5.3.4 includes",[274,85575,85576],{},"includes(searchString) includes(searchString, position)",[1070,85578,85579],{},[1073,85580,85581],{},"searchString:",[274,85583,85584,85585,85587,85588,85593,85594,85599,85600,24455,85603,85606,85607,85610],{},"一个要在 ",[26,85586,4281],{}," 中查找的字符串。",[300,85589,85592],{"href":85590,"rel":85591},"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",[304],"不能是正则表达式","。所有非正则表达式的值都会被",[300,85595,85598],{"href":85596,"rel":85597},"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",[304],"强制转换为字符串","，因此如果该参数被省略或传入 ",[26,85601,85602],{},"undefined",[26,85604,85605],{},"includes()"," 方法会在字符串中搜索 ",[26,85608,85609],{},"\"undefined\"","，这通常不是你想要的",[1070,85612,85613],{"start":69},[1073,85614,85615,3971],{},[26,85616,85617],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[274,85619,85620,85621,85624,85625],{},"在字符串中开始搜索 ",[26,85622,85623],{},"searchString"," 的位置。默认值为 ",[26,85626,3306],{},[1070,85628,85629],{"start":82},[1073,85630,85631],{},"返回值：",[274,85633,85634,85635,85637,85638,85642,85643],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[26,85636,85623],{}," 为空字符串的情况），则返回 ",[538,85639,85640],{},[26,85641,4341],{}," ，否则返回 ",[538,85644,85645],{},[26,85646,68949],{},[1070,85648,85649],{"start":97},[1073,85650,85651],{},"异常：",[274,85653,85150,85654,16751,85656,85660],{},[26,85655,85623],{},[300,85657,85659],{"href":85590,"rel":85658},[304],"是一个正则表达式","，则会抛出",[274,85662,85663],{},"只要是有就是true，不需要非得以谁开头结尾",[19,85665,85667],{"className":80423,"code":85666,"language":80425,"meta":28,"style":28},"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",[26,85668,85669,85680,85703,85722,85742,85764,85783],{"__ignoreMap":28},[52,85670,85671,85673,85675,85677],{"class":54,"line":55},[52,85672,9748],{"class":160},[52,85674,82703],{"class":622},[52,85676,2099],{"class":160},[52,85678,85679],{"class":62}," \"To be, or not to be, that is the question.\"\n",[52,85681,85682,85684,85686,85689,85692,85694,85697,85700],{"class":54,"line":69},[52,85683,80460],{"class":622},[52,85685,61177],{"class":58},[52,85687,85688],{"class":622},"(str.",[52,85690,85691],{"class":58},"includes",[52,85693,3121],{"class":622},[52,85695,85696],{"class":62},"\"To be\"",[52,85698,85699],{"class":622},"))",[52,85701,85702],{"class":332},"  \u002F\u002F true\n",[52,85704,85705,85707,85709,85711,85713,85715,85718,85720],{"class":54,"line":82},[52,85706,80460],{"class":622},[52,85708,61177],{"class":58},[52,85710,85688],{"class":622},[52,85712,85691],{"class":58},[52,85714,3121],{"class":622},[52,85716,85717],{"class":62},"\"question\"",[52,85719,85699],{"class":622},[52,85721,85702],{"class":332},[52,85723,85724,85726,85728,85730,85732,85734,85737,85739],{"class":54,"line":97},[52,85725,80460],{"class":622},[52,85727,61177],{"class":58},[52,85729,85688],{"class":622},[52,85731,85691],{"class":58},[52,85733,3121],{"class":622},[52,85735,85736],{"class":62},"\"nonexistent\"",[52,85738,85699],{"class":622},[52,85740,85741],{"class":332},"  \u002F\u002F false\n",[52,85743,85744,85746,85748,85750,85752,85754,85756,85758,85760,85762],{"class":54,"line":112},[52,85745,80460],{"class":622},[52,85747,61177],{"class":58},[52,85749,85688],{"class":622},[52,85751,85691],{"class":58},[52,85753,3121],{"class":622},[52,85755,85696],{"class":62},[52,85757,15391],{"class":622},[52,85759,3332],{"class":90},[52,85761,85699],{"class":622},[52,85763,85741],{"class":332},[52,85765,85766,85768,85770,85772,85774,85776,85779,85781],{"class":54,"line":119},[52,85767,80460],{"class":622},[52,85769,61177],{"class":58},[52,85771,85688],{"class":622},[52,85773,85691],{"class":58},[52,85775,3121],{"class":622},[52,85777,85778],{"class":62},"\"TO BE\"",[52,85780,85699],{"class":622},[52,85782,85741],{"class":332},[52,85784,85785,85787,85789,85791,85793,85795,85797,85799],{"class":54,"line":130},[52,85786,80460],{"class":622},[52,85788,61177],{"class":58},[52,85790,85688],{"class":622},[52,85792,85691],{"class":58},[52,85794,3121],{"class":622},[52,85796,10608],{"class":62},[52,85798,85699],{"class":622},[52,85800,85702],{"class":332},[1491,85802,85804],{"id":85803},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[19,85806,85808],{"className":55997,"code":85807,"language":55999,"meta":28,"style":28},"\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",[26,85809,85810,85818,85826,85831,85836,85841,85846,85851,85859],{"__ignoreMap":28},[52,85811,85812,85814,85816],{"class":54,"line":55},[52,85813,4022],{"class":622},[52,85815,54731],{"class":54231},[52,85817,54238],{"class":622},[52,85819,85820,85822,85824],{"class":54,"line":69},[52,85821,55075],{"class":622},[52,85823,54744],{"class":54231},[52,85825,54238],{"class":622},[52,85827,85828],{"class":54,"line":82},[52,85829,85830],{"class":622},"    const num = 10\n",[52,85832,85833],{"class":54,"line":97},[52,85834,85835],{"class":622},"    \u002F\u002F 强制转换\n",[52,85837,85838],{"class":54,"line":112},[52,85839,85840],{"class":622},"    console.log(String(num))\n",[52,85842,85843],{"class":54,"line":119},[52,85844,85845],{"class":622},"    \u002F\u002F toString()方法转换\n",[52,85847,85848],{"class":54,"line":130},[52,85849,85850],{"class":622},"    console.log(num.toString())\n",[52,85852,85853,85855,85857],{"class":54,"line":136},[52,85854,55347],{"class":622},[52,85856,54744],{"class":54231},[52,85858,54238],{"class":622},[52,85860,85861,85863,85865],{"class":54,"line":141},[52,85862,54716],{"class":622},[52,85864,54731],{"class":54231},[52,85866,54238],{"class":622},[1491,85868,85870],{"id":85869},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[274,85872,85873],{},[280,85874],{"alt":28,"src":85875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[19,85877,85879],{"className":53564,"code":85878,"language":53566,"meta":28,"style":28},"\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",[26,85880,85881,85891,85905,85909,85917,85931,85951,85963,85971,85975,85983,85995,86003,86015,86020,86025,86030,86077,86093,86101,86109,86113],{"__ignoreMap":28},[52,85882,85883,85885,85887,85889],{"class":54,"line":55},[52,85884,54228],{"class":622},[52,85886,54232],{"class":54231},[52,85888,54235],{"class":58},[52,85890,54238],{"class":622},[52,85892,85893,85895,85897,85899,85901,85903],{"class":54,"line":69},[52,85894,4022],{"class":622},[52,85896,53566],{"class":54231},[52,85898,54247],{"class":58},[52,85900,2099],{"class":622},[52,85902,54252],{"class":62},[52,85904,54238],{"class":622},[52,85906,85907],{"class":54,"line":82},[52,85908,116],{"emptyLinePlaceholder":115},[52,85910,85911,85913,85915],{"class":54,"line":97},[52,85912,4022],{"class":622},[52,85914,54265],{"class":54231},[52,85916,54238],{"class":622},[52,85918,85919,85921,85923,85925,85927,85929],{"class":54,"line":112},[52,85920,55075],{"class":622},[52,85922,54275],{"class":54231},[52,85924,54278],{"class":58},[52,85926,2099],{"class":622},[52,85928,54283],{"class":62},[52,85930,54238],{"class":622},[52,85932,85933,85935,85937,85939,85941,85943,85945,85947,85949],{"class":54,"line":119},[52,85934,55075],{"class":622},[52,85936,54275],{"class":54231},[52,85938,17876],{"class":58},[52,85940,2099],{"class":622},[52,85942,54322],{"class":62},[52,85944,54302],{"class":58},[52,85946,2099],{"class":622},[52,85948,54329],{"class":62},[52,85950,54238],{"class":622},[52,85952,85953,85955,85957,85959,85961],{"class":54,"line":130},[52,85954,55075],{"class":622},[52,85956,54338],{"class":54231},[52,85958,54341],{"class":622},[52,85960,54338],{"class":54231},[52,85962,54238],{"class":622},[52,85964,85965,85967,85969],{"class":54,"line":136},[52,85966,54716],{"class":622},[52,85968,54265],{"class":54231},[52,85970,54238],{"class":622},[52,85972,85973],{"class":54,"line":141},[52,85974,116],{"emptyLinePlaceholder":115},[52,85976,85977,85979,85981],{"class":54,"line":146},[52,85978,4022],{"class":622},[52,85980,54731],{"class":54231},[52,85982,54238],{"class":622},[52,85984,85985,85987,85989,85991,85993],{"class":54,"line":152},[52,85986,55075],{"class":622},[52,85988,54542],{"class":54231},[52,85990,58244],{"class":622},[52,85992,54542],{"class":54231},[52,85994,54238],{"class":622},[52,85996,85997,85999,86001],{"class":54,"line":157},[52,85998,55075],{"class":622},[52,86000,54744],{"class":54231},[52,86002,54238],{"class":622},[52,86004,86005,86007,86010,86012],{"class":54,"line":173},[52,86006,14177],{"class":160},[52,86008,86009],{"class":90}," gift",[52,86011,16520],{"class":160},[52,86013,86014],{"class":62}," '50g的茶叶，清洗球'\n",[52,86016,86017],{"class":54,"line":178},[52,86018,86019],{"class":332},"    \u002F\u002F 1.把字符串拆分为数组\n",[52,86021,86022],{"class":54,"line":184},[52,86023,86024],{"class":332},"    \u002F\u002F console.log(gift.split(','))\n",[52,86026,86027],{"class":54,"line":189},[52,86028,86029],{"class":332},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[52,86031,86032,86034,86036,86038,86041,86044,86046,86049,86051,86053,86055,86057,86059,86062,86064,86067,86069,86071,86073,86075],{"class":54,"line":201},[52,86033,14177],{"class":160},[52,86035,76847],{"class":90},[52,86037,16520],{"class":160},[52,86039,86040],{"class":622}," gift.",[52,86042,86043],{"class":58},"split",[52,86045,3121],{"class":622},[52,86047,86048],{"class":62},"'，'",[52,86050,33758],{"class":622},[52,86052,76972],{"class":58},[52,86054,3121],{"class":622},[52,86056,82723],{"class":8172},[52,86058,82726],{"class":160},[52,86060,86061],{"class":62}," `\u003Cspan>【赠品】${",[52,86063,82723],{"class":622},[52,86065,86066],{"class":62},"}\u003C\u002Fspan>\u003Cbr>`",[52,86068,33758],{"class":622},[52,86070,77151],{"class":58},[52,86072,3121],{"class":622},[52,86074,77156],{"class":62},[52,86076,170],{"class":622},[52,86078,86079,86081,86083,86085,86087,86089,86091],{"class":54,"line":206},[52,86080,55337],{"class":622},[52,86082,57329],{"class":58},[52,86084,3121],{"class":622},[52,86086,84859],{"class":62},[52,86088,77177],{"class":622},[52,86090,2099],{"class":160},[52,86092,76913],{"class":622},[52,86094,86095,86097,86099],{"class":54,"line":224},[52,86096,55347],{"class":622},[52,86098,54744],{"class":54231},[52,86100,54238],{"class":622},[52,86102,86103,86105,86107],{"class":54,"line":229},[52,86104,54716],{"class":622},[52,86106,54731],{"class":54231},[52,86108,54238],{"class":622},[52,86110,86111],{"class":54,"line":241},[52,86112,116],{"emptyLinePlaceholder":115},[52,86114,86115,86117,86119],{"class":54,"line":246},[52,86116,54716],{"class":622},[52,86118,53566],{"class":54231},[52,86120,54238],{"class":622},[1486,86122,86124],{"id":86123},"_41054-number","4.10.5.4 Number",[274,86126,86127],{},[280,86128],{"alt":28,"src":86129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[274,86131,86132],{},"整数也可以进行toFixed来保留小数",[274,86134,86135],{},"比如：",[274,86137,86138],{},"const price=10",[274,86140,86141],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[1486,86143,86145],{"id":86144},"_41055-购物车展示","4.10.5.5 购物车展示",[274,86147,86148],{},[280,86149],{"alt":28,"src":86150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[19,86152,86154],{"className":53564,"code":86153,"language":53566,"meta":28,"style":28},"\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",[26,86155,86156,86166,86180,86184,86192,86206,86226,86238,86246,86252,86262,86272,86282,86286,86290,86296,86308,86322,86326,86330,86336,86348,86364,86374,86390,86394,86398,86404,86414,86424,86428,86432,86440,86452,86464,86476,86480,86484,86492,86504,86508,86512,86523,86533,86545,86557,86567,86571,86575,86583,86592,86604,86614,86624,86628,86632,86640,86649,86656,86666,86678,86682,86686,86695,86705,86716,86728,86740,86744,86748,86757,86767,86778,86782,86786,86792,86804,86816,86826,86836,86854,86866,86870,86874,86883,86895,86905,86915,86927,86931,86939,86947,86951,86959,86973,86981,86995,87023,87031,87039,87049,87053,87061,87069,87078,87086,87095,87105,87109,87113,87121,87129,87138,87146,87154,87167,87171,87175,87183,87191,87200,87208,87216,87231,87235,87239,87247,87255,87264,87272,87280,87294,87302,87306,87310,87315,87341,87346,87383,87388,87411,87416,87470,87475,87511,87515,87521,87526,87535,87549,87558,87577,87586,87596,87601,87606,87619,87624,87678,87704,87712,87720,87724],{"__ignoreMap":28},[52,86157,86158,86160,86162,86164],{"class":54,"line":55},[52,86159,54228],{"class":622},[52,86161,54232],{"class":54231},[52,86163,54235],{"class":58},[52,86165,54238],{"class":622},[52,86167,86168,86170,86172,86174,86176,86178],{"class":54,"line":69},[52,86169,4022],{"class":622},[52,86171,53566],{"class":54231},[52,86173,54247],{"class":58},[52,86175,2099],{"class":622},[52,86177,54252],{"class":62},[52,86179,54238],{"class":622},[52,86181,86182],{"class":54,"line":82},[52,86183,116],{"emptyLinePlaceholder":115},[52,86185,86186,86188,86190],{"class":54,"line":97},[52,86187,4022],{"class":622},[52,86189,54265],{"class":54231},[52,86191,54238],{"class":622},[52,86193,86194,86196,86198,86200,86202,86204],{"class":54,"line":112},[52,86195,55075],{"class":622},[52,86197,54275],{"class":54231},[52,86199,54278],{"class":58},[52,86201,2099],{"class":622},[52,86203,54283],{"class":62},[52,86205,54238],{"class":622},[52,86207,86208,86210,86212,86214,86216,86218,86220,86222,86224],{"class":54,"line":119},[52,86209,55075],{"class":622},[52,86211,54275],{"class":54231},[52,86213,17876],{"class":58},[52,86215,2099],{"class":622},[52,86217,54322],{"class":62},[52,86219,54302],{"class":58},[52,86221,2099],{"class":622},[52,86223,54329],{"class":62},[52,86225,54238],{"class":622},[52,86227,86228,86230,86232,86234,86236],{"class":54,"line":130},[52,86229,55075],{"class":622},[52,86231,54338],{"class":54231},[52,86233,54341],{"class":622},[52,86235,54338],{"class":54231},[52,86237,54238],{"class":622},[52,86239,86240,86242,86244],{"class":54,"line":136},[52,86241,55075],{"class":622},[52,86243,3015],{"class":54231},[52,86245,54238],{"class":622},[52,86247,86248,86250],{"class":54,"line":141},[52,86249,9359],{"class":54231},[52,86251,18528],{"class":622},[52,86253,86254,86256,86258,86260],{"class":54,"line":146},[52,86255,57625],{"class":90},[52,86257,54368],{"class":622},[52,86259,3306],{"class":90},[52,86261,4272],{"class":622},[52,86263,86264,86266,86268,86270],{"class":54,"line":152},[52,86265,57636],{"class":90},[52,86267,54368],{"class":622},[52,86269,3306],{"class":90},[52,86271,4272],{"class":622},[52,86273,86274,86276,86278,86280],{"class":54,"line":157},[52,86275,75524],{"class":90},[52,86277,54368],{"class":622},[52,86279,63435],{"class":90},[52,86281,4272],{"class":622},[52,86283,86284],{"class":54,"line":173},[52,86285,5149],{"class":622},[52,86287,86288],{"class":54,"line":178},[52,86289,116],{"emptyLinePlaceholder":115},[52,86291,86292,86294],{"class":54,"line":184},[52,86293,65053],{"class":58},[52,86295,18528],{"class":622},[52,86297,86298,86300,86302,86304,86306],{"class":54,"line":189},[52,86299,57701],{"class":90},[52,86301,54368],{"class":622},[52,86303,81502],{"class":90},[52,86305,54423],{"class":160},[52,86307,4272],{"class":622},[52,86309,86310,86312,86314,86316,86318,86320],{"class":54,"line":201},[52,86311,57636],{"class":90},[52,86313,54368],{"class":622},[52,86315,3424],{"class":90},[52,86317,54423],{"class":160},[52,86319,54487],{"class":90},[52,86321,4272],{"class":622},[52,86323,86324],{"class":54,"line":206},[52,86325,5149],{"class":622},[52,86327,86328],{"class":54,"line":224},[52,86329,116],{"emptyLinePlaceholder":115},[52,86331,86332,86334],{"class":54,"line":229},[52,86333,81553],{"class":58},[52,86335,18528],{"class":622},[52,86337,86338,86340,86342,86344,86346],{"class":54,"line":241},[52,86339,57625],{"class":90},[52,86341,54368],{"class":622},[52,86343,3687],{"class":90},[52,86345,54423],{"class":160},[52,86347,4272],{"class":622},[52,86349,86350,86352,86354,86356,86358,86360,86362],{"class":54,"line":246},[52,86351,64790],{"class":90},[52,86353,54368],{"class":622},[52,86355,31055],{"class":90},[52,86357,81608],{"class":90},[52,86359,81611],{"class":90},[52,86361,3807],{"class":160},[52,86363,4272],{"class":622},[52,86365,86366,86368,86370,86372],{"class":54,"line":252},[52,86367,57939],{"class":90},[52,86369,54368],{"class":622},[52,86371,54408],{"class":90},[52,86373,4272],{"class":622},[52,86375,86376,86378,86380,86382,86384,86386,86388],{"class":54,"line":257},[52,86377,64907],{"class":90},[52,86379,54368],{"class":622},[52,86381,3332],{"class":90},[52,86383,54423],{"class":160},[52,86385,54452],{"class":90},[52,86387,65174],{"class":90},[52,86389,4272],{"class":622},[52,86391,86392],{"class":54,"line":266},[52,86393,5149],{"class":622},[52,86395,86396],{"class":54,"line":4722},[52,86397,116],{"emptyLinePlaceholder":115},[52,86399,86400,86402],{"class":54,"line":4727},[52,86401,81671],{"class":58},[52,86403,18528],{"class":622},[52,86405,86406,86408,86410,86412],{"class":54,"line":4741},[52,86407,64955],{"class":90},[52,86409,54368],{"class":622},[52,86411,64960],{"class":90},[52,86413,4272],{"class":622},[52,86415,86416,86418,86420,86422],{"class":54,"line":4746},[52,86417,57814],{"class":90},[52,86419,54368],{"class":622},[52,86421,64748],{"class":90},[52,86423,4272],{"class":622},[52,86425,86426],{"class":54,"line":5538},[52,86427,5149],{"class":622},[52,86429,86430],{"class":54,"line":5552},[52,86431,116],{"emptyLinePlaceholder":115},[52,86433,86434,86436,86438],{"class":54,"line":5560},[52,86435,81553],{"class":58},[52,86437,58545],{"class":54231},[52,86439,18528],{"class":622},[52,86441,86442,86444,86446,86448,86450],{"class":54,"line":5565},[52,86443,57701],{"class":90},[52,86445,54368],{"class":622},[52,86447,3724],{"class":90},[52,86449,54423],{"class":160},[52,86451,4272],{"class":622},[52,86453,86454,86456,86458,86460,86462],{"class":54,"line":5571},[52,86455,57715],{"class":90},[52,86457,54368],{"class":622},[52,86459,3724],{"class":90},[52,86461,54423],{"class":160},[52,86463,4272],{"class":622},[52,86465,86466,86468,86470,86472,86474],{"class":54,"line":5577},[52,86467,64680],{"class":90},[52,86469,54368],{"class":622},[52,86471,3432],{"class":90},[52,86473,54423],{"class":160},[52,86475,4272],{"class":622},[52,86477,86478],{"class":54,"line":5582},[52,86479,5149],{"class":622},[52,86481,86482],{"class":54,"line":10904},[52,86483,116],{"emptyLinePlaceholder":115},[52,86485,86486,86488,86490],{"class":54,"line":10928},[52,86487,81553],{"class":58},[52,86489,65234],{"class":58},[52,86491,18528],{"class":622},[52,86493,86494,86496,86498,86500,86502],{"class":54,"line":10933},[52,86495,57701],{"class":90},[52,86497,54368],{"class":622},[52,86499,4689],{"class":90},[52,86501,54423],{"class":160},[52,86503,4272],{"class":622},[52,86505,86506],{"class":54,"line":10939},[52,86507,5149],{"class":622},[52,86509,86510],{"class":54,"line":10966},[52,86511,116],{"emptyLinePlaceholder":115},[52,86513,86514,86516,86518,86521],{"class":54,"line":10971},[52,86515,81553],{"class":58},[52,86517,65234],{"class":58},[52,86519,86520],{"class":58}," .tag",[52,86522,18528],{"class":622},[52,86524,86525,86527,86529,86531],{"class":54,"line":10977},[52,86526,57939],{"class":90},[52,86528,54368],{"class":622},[52,86530,63799],{"class":90},[52,86532,4272],{"class":622},[52,86534,86535,86537,86539,86541,86543],{"class":54,"line":10989},[52,86536,57625],{"class":90},[52,86538,54368],{"class":622},[52,86540,3194],{"class":90},[52,86542,54423],{"class":160},[52,86544,4272],{"class":622},[52,86546,86547,86549,86551,86553,86555],{"class":54,"line":11001},[52,86548,57852],{"class":90},[52,86550,54368],{"class":622},[52,86552,3610],{"class":90},[52,86554,54423],{"class":160},[52,86556,4272],{"class":622},[52,86558,86559,86561,86563,86565],{"class":54,"line":11013},[52,86560,60346],{"class":90},[52,86562,54368],{"class":622},[52,86564,65000],{"class":90},[52,86566,4272],{"class":622},[52,86568,86569],{"class":54,"line":12672},[52,86570,5149],{"class":622},[52,86572,86573],{"class":54,"line":12697},[52,86574,116],{"emptyLinePlaceholder":115},[52,86576,86577,86579,86581],{"class":54,"line":12720},[52,86578,81553],{"class":58},[52,86580,81845],{"class":58},[52,86582,34398],{"class":622},[52,86584,86585,86587,86590],{"class":54,"line":12744},[52,86586,81553],{"class":58},[52,86588,86589],{"class":58}," .sub-total",[52,86591,18528],{"class":622},[52,86593,86594,86596,86598,86600,86602],{"class":54,"line":12749},[52,86595,57852],{"class":90},[52,86597,54368],{"class":622},[52,86599,3762],{"class":90},[52,86601,54423],{"class":160},[52,86603,4272],{"class":622},[52,86605,86606,86608,86610,86612],{"class":54,"line":12754},[52,86607,60346],{"class":90},[52,86609,54368],{"class":622},[52,86611,81868],{"class":90},[52,86613,4272],{"class":622},[52,86615,86616,86618,86620,86622],{"class":54,"line":12759},[52,86617,64767],{"class":90},[52,86619,54368],{"class":622},[52,86621,3332],{"class":90},[52,86623,4272],{"class":622},[52,86625,86626],{"class":54,"line":12768},[52,86627,5149],{"class":622},[52,86629,86630],{"class":54,"line":12773},[52,86631,116],{"emptyLinePlaceholder":115},[52,86633,86634,86636,86638],{"class":54,"line":12779},[52,86635,81553],{"class":58},[52,86637,81885],{"class":58},[52,86639,34398],{"class":622},[52,86641,86642,86644,86647],{"class":54,"line":12800},[52,86643,81553],{"class":58},[52,86645,86646],{"class":58}," .sub-total::before",[52,86648,34398],{"class":622},[52,86650,86651,86654],{"class":54,"line":12806},[52,86652,86653],{"class":58},"    .amount::before",[52,86655,18528],{"class":622},[52,86657,86658,86660,86662,86664],{"class":54,"line":12820},[52,86659,81892],{"class":90},[52,86661,54368],{"class":622},[52,86663,81897],{"class":62},[52,86665,4272],{"class":622},[52,86667,86668,86670,86672,86674,86676],{"class":54,"line":12826},[52,86669,57852],{"class":90},[52,86671,54368],{"class":622},[52,86673,3610],{"class":90},[52,86675,54423],{"class":160},[52,86677,4272],{"class":622},[52,86679,86680],{"class":54,"line":12853},[52,86681,5149],{"class":622},[52,86683,86684],{"class":54,"line":12862},[52,86685,116],{"emptyLinePlaceholder":115},[52,86687,86688,86690,86693],{"class":54,"line":12868},[52,86689,81553],{"class":58},[52,86691,86692],{"class":58}," .spec",[52,86694,18528],{"class":622},[52,86696,86697,86699,86701,86703],{"class":54,"line":12876},[52,86698,64767],{"class":90},[52,86700,54368],{"class":622},[52,86702,3194],{"class":90},[52,86704,4272],{"class":622},[52,86706,86707,86709,86711,86714],{"class":54,"line":12881},[52,86708,60346],{"class":90},[52,86710,54368],{"class":622},[52,86712,86713],{"class":90},"#888",[52,86715,4272],{"class":622},[52,86717,86718,86720,86722,86724,86726],{"class":54,"line":19560},[52,86719,57852],{"class":90},[52,86721,54368],{"class":622},[52,86723,3661],{"class":90},[52,86725,54423],{"class":160},[52,86727,4272],{"class":622},[52,86729,86730,86732,86734,86736,86738],{"class":54,"line":19566},[52,86731,64930],{"class":90},[52,86733,54368],{"class":622},[52,86735,3812],{"class":90},[52,86737,54423],{"class":160},[52,86739,4272],{"class":622},[52,86741,86742],{"class":54,"line":19589},[52,86743,5149],{"class":622},[52,86745,86746],{"class":54,"line":19595},[52,86747,116],{"emptyLinePlaceholder":115},[52,86749,86750,86752,86755],{"class":54,"line":19618},[52,86751,81553],{"class":58},[52,86753,86754],{"class":58}," .count",[52,86756,18528],{"class":622},[52,86758,86759,86761,86763,86765],{"class":54,"line":19632},[52,86760,64767],{"class":90},[52,86762,54368],{"class":622},[52,86764,3332],{"class":90},[52,86766,4272],{"class":622},[52,86768,86769,86771,86773,86776],{"class":54,"line":19652},[52,86770,60346],{"class":90},[52,86772,54368],{"class":622},[52,86774,86775],{"class":90},"#aaa",[52,86777,4272],{"class":622},[52,86779,86780],{"class":54,"line":19658},[52,86781,5149],{"class":622},[52,86783,86784],{"class":54,"line":19669},[52,86785,116],{"emptyLinePlaceholder":115},[52,86787,86788,86790],{"class":54,"line":19692},[52,86789,75403],{"class":58},[52,86791,18528],{"class":622},[52,86793,86794,86796,86798,86800,86802],{"class":54,"line":19714},[52,86795,57701],{"class":90},[52,86797,54368],{"class":622},[52,86799,81502],{"class":90},[52,86801,54423],{"class":160},[52,86803,4272],{"class":622},[52,86805,86806,86808,86810,86812,86814],{"class":54,"line":19719},[52,86807,57636],{"class":90},[52,86809,54368],{"class":622},[52,86811,3306],{"class":90},[52,86813,54487],{"class":90},[52,86815,4272],{"class":622},[52,86817,86818,86820,86822,86824],{"class":54,"line":19725},[52,86819,57939],{"class":90},[52,86821,54368],{"class":622},[52,86823,54408],{"class":90},[52,86825,4272],{"class":622},[52,86827,86828,86830,86832,86834],{"class":54,"line":19739},[52,86829,57950],{"class":90},[52,86831,54368],{"class":622},[52,86833,54511],{"class":90},[52,86835,4272],{"class":622},[52,86837,86838,86841,86843,86845,86847,86849,86852],{"class":54,"line":19752},[52,86839,86840],{"class":90},"      border-top",[52,86842,54368],{"class":622},[52,86844,3332],{"class":90},[52,86846,54423],{"class":160},[52,86848,54452],{"class":90},[52,86850,86851],{"class":90}," #4e4e4e",[52,86853,4272],{"class":622},[52,86855,86856,86858,86860,86862,86864],{"class":54,"line":19757},[52,86857,57625],{"class":90},[52,86859,54368],{"class":622},[52,86861,3812],{"class":90},[52,86863,54423],{"class":160},[52,86865,4272],{"class":622},[52,86867,86868],{"class":54,"line":19771},[52,86869,5149],{"class":622},[52,86871,86872],{"class":54,"line":19776},[52,86873,116],{"emptyLinePlaceholder":115},[52,86875,86876,86878,86881],{"class":54,"line":19782},[52,86877,75403],{"class":58},[52,86879,86880],{"class":58}," .amount",[52,86882,18528],{"class":622},[52,86884,86885,86887,86889,86891,86893],{"class":54,"line":19787},[52,86886,57852],{"class":90},[52,86888,54368],{"class":622},[52,86890,3762],{"class":90},[52,86892,54423],{"class":160},[52,86894,4272],{"class":622},[52,86896,86897,86899,86901,86903],{"class":54,"line":19801},[52,86898,60346],{"class":90},[52,86900,54368],{"class":622},[52,86902,81868],{"class":90},[52,86904,4272],{"class":622},[52,86906,86907,86909,86911,86913],{"class":54,"line":19806},[52,86908,65264],{"class":90},[52,86910,54368],{"class":622},[52,86912,54420],{"class":90},[52,86914,4272],{"class":622},[52,86916,86917,86919,86921,86923,86925],{"class":54,"line":19811},[52,86918,64680],{"class":90},[52,86920,54368],{"class":622},[52,86922,3768],{"class":90},[52,86924,54423],{"class":160},[52,86926,4272],{"class":622},[52,86928,86929],{"class":54,"line":19825},[52,86930,5149],{"class":622},[52,86932,86933,86935,86937],{"class":54,"line":19837},[52,86934,55347],{"class":622},[52,86936,3015],{"class":54231},[52,86938,54238],{"class":622},[52,86940,86941,86943,86945],{"class":54,"line":19842},[52,86942,54716],{"class":622},[52,86944,54265],{"class":54231},[52,86946,54238],{"class":622},[52,86948,86949],{"class":54,"line":19855},[52,86950,116],{"emptyLinePlaceholder":115},[52,86952,86953,86955,86957],{"class":54,"line":19860},[52,86954,4022],{"class":622},[52,86956,54731],{"class":54231},[52,86958,54238],{"class":622},[52,86960,86961,86963,86965,86967,86969,86971],{"class":54,"line":19865},[52,86962,55075],{"class":622},[52,86964,54542],{"class":54231},[52,86966,56416],{"class":58},[52,86968,2099],{"class":622},[52,86970,65538],{"class":62},[52,86972,54238],{"class":622},[52,86974,86975,86977,86979],{"class":54,"line":19870},[52,86976,55347],{"class":622},[52,86978,54542],{"class":54231},[52,86980,54238],{"class":622},[52,86982,86983,86985,86987,86989,86991,86993],{"class":54,"line":19883},[52,86984,55075],{"class":622},[52,86986,54542],{"class":54231},[52,86988,56416],{"class":58},[52,86990,2099],{"class":622},[52,86992,65510],{"class":62},[52,86994,54238],{"class":622},[52,86996,86997,86999,87001,87004,87006,87008,87010,87013,87015,87017,87019,87021],{"class":54,"line":19888},[52,86998,54272],{"class":622},[52,87000,54542],{"class":54231},[52,87002,87003],{"class":622},">合计：\u003C",[52,87005,52],{"class":54231},[52,87007,56416],{"class":58},[52,87009,2099],{"class":622},[52,87011,87012],{"class":62},"\"amount\"",[52,87014,58244],{"class":622},[52,87016,52],{"class":54231},[52,87018,58244],{"class":622},[52,87020,54542],{"class":54231},[52,87022,54238],{"class":622},[52,87024,87025,87027,87029],{"class":54,"line":35565},[52,87026,55347],{"class":622},[52,87028,54542],{"class":54231},[52,87030,54238],{"class":622},[52,87032,87033,87035,87037],{"class":54,"line":35571},[52,87034,55075],{"class":622},[52,87036,54744],{"class":54231},[52,87038,54238],{"class":622},[52,87040,87041,87043,87045,87047],{"class":54,"line":35577},[52,87042,14177],{"class":160},[52,87044,82305],{"class":90},[52,87046,16520],{"class":160},[52,87048,58377],{"class":622},[52,87050,87051],{"class":54,"line":35583},[52,87052,82314],{"class":622},[52,87054,87055,87057,87059],{"class":54,"line":35589},[52,87056,82319],{"class":622},[52,87058,82322],{"class":62},[52,87060,34398],{"class":622},[52,87062,87063,87065,87067],{"class":54,"line":35600},[52,87064,82329],{"class":622},[52,87066,82332],{"class":62},[52,87068,34398],{"class":622},[52,87070,87071,87073,87076],{"class":54,"line":35606},[52,87072,82339],{"class":622},[52,87074,87075],{"class":90},"289.9",[52,87077,34398],{"class":622},[52,87079,87080,87082,87084],{"class":54,"line":35626},[52,87081,82349],{"class":622},[52,87083,82352],{"class":62},[52,87085,34398],{"class":622},[52,87087,87088,87091,87093],{"class":54,"line":35632},[52,87089,87090],{"class":622},"        count: ",[52,87092,3194],{"class":90},[52,87094,34398],{"class":622},[52,87096,87097,87100,87103],{"class":54,"line":35643},[52,87098,87099],{"class":622},"        spec: { color: ",[52,87101,87102],{"class":62},"'白色'",[52,87104,58534],{"class":622},[52,87106,87107],{"class":54,"line":35649},[52,87108,80820],{"class":622},[52,87110,87111],{"class":54,"line":35655},[52,87112,82314],{"class":622},[52,87114,87115,87117,87119],{"class":54,"line":35661},[52,87116,82319],{"class":622},[52,87118,82413],{"class":62},[52,87120,34398],{"class":622},[52,87122,87123,87125,87127],{"class":54,"line":35667},[52,87124,82329],{"class":622},[52,87126,82422],{"class":62},[52,87128,34398],{"class":622},[52,87130,87131,87133,87136],{"class":54,"line":35673},[52,87132,82339],{"class":622},[52,87134,87135],{"class":90},"109.8",[52,87137,34398],{"class":622},[52,87139,87140,87142,87144],{"class":54,"line":35679},[52,87141,82349],{"class":622},[52,87143,82440],{"class":62},[52,87145,34398],{"class":622},[52,87147,87148,87150,87152],{"class":54,"line":35685},[52,87149,87090],{"class":622},[52,87151,3188],{"class":90},[52,87153,34398],{"class":622},[52,87155,87156,87159,87161,87163,87165],{"class":54,"line":35705},[52,87157,87158],{"class":622},"        spec: { size: ",[52,87160,84831],{"class":62},[52,87162,58394],{"class":622},[52,87164,84836],{"class":62},[52,87166,58534],{"class":622},[52,87168,87169],{"class":54,"line":35711},[52,87170,80820],{"class":622},[52,87172,87173],{"class":54,"line":35727},[52,87174,82314],{"class":622},[52,87176,87177,87179,87181],{"class":54,"line":35733},[52,87178,82319],{"class":622},[52,87180,82457],{"class":62},[52,87182,34398],{"class":622},[52,87184,87185,87187,87189],{"class":54,"line":35747},[52,87186,82329],{"class":622},[52,87188,82466],{"class":62},[52,87190,34398],{"class":622},[52,87192,87193,87195,87198],{"class":54,"line":35753},[52,87194,82339],{"class":622},[52,87196,87197],{"class":90},"488",[52,87199,34398],{"class":622},[52,87201,87202,87204,87206],{"class":54,"line":35768},[52,87203,82349],{"class":622},[52,87205,82484],{"class":62},[52,87207,34398],{"class":622},[52,87209,87210,87212,87214],{"class":54,"line":35774},[52,87211,87090],{"class":622},[52,87213,3332],{"class":90},[52,87215,34398],{"class":622},[52,87217,87218,87220,87223,87226,87229],{"class":54,"line":35783},[52,87219,87099],{"class":622},[52,87221,87222],{"class":62},"'青色'",[52,87224,87225],{"class":622},", sum: ",[52,87227,87228],{"class":62},"'一大四小'",[52,87230,58534],{"class":622},[52,87232,87233],{"class":54,"line":35789},[52,87234,80820],{"class":622},[52,87236,87237],{"class":54,"line":35798},[52,87238,82314],{"class":622},[52,87240,87241,87243,87245],{"class":54,"line":35804},[52,87242,82319],{"class":622},[52,87244,82501],{"class":62},[52,87246,34398],{"class":622},[52,87248,87249,87251,87253],{"class":54,"line":35810},[52,87250,82329],{"class":622},[52,87252,82510],{"class":62},[52,87254,34398],{"class":622},[52,87256,87257,87259,87262],{"class":54,"line":35819},[52,87258,82339],{"class":622},[52,87260,87261],{"class":90},"139",[52,87263,34398],{"class":622},[52,87265,87266,87268,87270],{"class":54,"line":35825},[52,87267,82349],{"class":622},[52,87269,82528],{"class":62},[52,87271,34398],{"class":622},[52,87273,87274,87276,87278],{"class":54,"line":35836},[52,87275,87090],{"class":622},[52,87277,3332],{"class":90},[52,87279,34398],{"class":622},[52,87281,87282,87284,87287,87289,87292],{"class":54,"line":35842},[52,87283,87158],{"class":622},[52,87285,87286],{"class":62},"'小号'",[52,87288,58394],{"class":622},[52,87290,87291],{"class":62},"'紫色'",[52,87293,58400],{"class":622},[52,87295,87296,87299],{"class":54,"line":35861},[52,87297,87298],{"class":622},"        gift: ",[52,87300,87301],{"class":62},"'50g茶叶,清洗球'\n",[52,87303,87304],{"class":54,"line":35867},[52,87305,55328],{"class":622},[52,87307,87308],{"class":54,"line":35878},[52,87309,56039],{"class":622},[52,87311,87312],{"class":54,"line":35884},[52,87313,87314],{"class":332},"    \u002F\u002F  1.根据数据渲染页面\n",[52,87316,87317,87319,87321,87323,87325,87327,87329,87331,87333,87335,87337,87339],{"class":54,"line":35904},[52,87318,55337],{"class":622},[52,87320,57329],{"class":58},[52,87322,3121],{"class":622},[52,87324,82829],{"class":62},[52,87326,77177],{"class":622},[52,87328,2099],{"class":160},[52,87330,82976],{"class":622},[52,87332,76972],{"class":58},[52,87334,3121],{"class":622},[52,87336,82723],{"class":8172},[52,87338,82726],{"class":160},[52,87340,18528],{"class":622},[52,87342,87343],{"class":54,"line":35920},[52,87344,87345],{"class":332},"      \u002F\u002F 对象解构\n",[52,87347,87348,87350,87352,87354,87356,87358,87360,87363,87365,87367,87369,87372,87374,87377,87379,87381],{"class":54,"line":35926},[52,87349,61158],{"class":160},[52,87351,82735],{"class":622},[52,87353,82748],{"class":90},[52,87355,15391],{"class":622},[52,87357,82738],{"class":90},[52,87359,15391],{"class":622},[52,87361,87362],{"class":90},"count",[52,87364,15391],{"class":622},[52,87366,82743],{"class":90},[52,87368,15391],{"class":622},[52,87370,87371],{"class":90},"spec",[52,87373,15391],{"class":622},[52,87375,87376],{"class":90},"gift",[52,87378,82751],{"class":622},[52,87380,2099],{"class":160},[52,87382,82756],{"class":622},[52,87384,87385],{"class":54,"line":35940},[52,87386,87387],{"class":332},"      \u002F\u002F 规格文字模块处理\n",[52,87389,87390,87392,87395,87397,87399,87401,87403,87405,87407,87409],{"class":54,"line":35946},[52,87391,61158],{"class":160},[52,87393,87394],{"class":90}," text",[52,87396,16520],{"class":160},[52,87398,84866],{"class":622},[52,87400,84869],{"class":58},[52,87402,84872],{"class":622},[52,87404,77151],{"class":58},[52,87406,3121],{"class":622},[52,87408,84879],{"class":62},[52,87410,170],{"class":622},[52,87412,87413],{"class":54,"line":35952},[52,87414,87415],{"class":332},"      \u002F\u002F 处理赠品模块\n",[52,87417,87418,87420,87422,87424,87427,87429,87431,87433,87435,87438,87440,87442,87444,87446,87448,87451,87453,87456,87458,87460,87462,87464,87466,87468],{"class":54,"line":35963},[52,87419,61158],{"class":160},[52,87421,76847],{"class":90},[52,87423,16520],{"class":160},[52,87425,87426],{"class":622}," gift ",[52,87428,4097],{"class":160},[52,87430,86040],{"class":622},[52,87432,86043],{"class":58},[52,87434,3121],{"class":622},[52,87436,87437],{"class":62},"','",[52,87439,33758],{"class":622},[52,87441,76972],{"class":58},[52,87443,3121],{"class":622},[52,87445,82723],{"class":8172},[52,87447,82726],{"class":160},[52,87449,87450],{"class":62}," `\u003Cspan class=\"tag\">【赠品】${",[52,87452,82723],{"class":622},[52,87454,87455],{"class":62},"}\u003C\u002Fspan>`",[52,87457,33758],{"class":622},[52,87459,77151],{"class":58},[52,87461,3121],{"class":622},[52,87463,77156],{"class":62},[52,87465,16670],{"class":622},[52,87467,3971],{"class":160},[52,87469,73033],{"class":62},[52,87471,87472],{"class":54,"line":35969},[52,87473,87474],{"class":332},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[52,87476,87477,87479,87482,87484,87487,87489,87491,87493,87496,87498,87500,87502,87505,87507,87509],{"class":54,"line":35975},[52,87478,61158],{"class":160},[52,87480,87481],{"class":90}," subtotal",[52,87483,16520],{"class":160},[52,87485,87486],{"class":622}," ((price ",[52,87488,1095],{"class":160},[52,87490,8710],{"class":90},[52,87492,9474],{"class":160},[52,87494,87495],{"class":622}," count) ",[52,87497,3696],{"class":160},[52,87499,8710],{"class":90},[52,87501,33758],{"class":622},[52,87503,87504],{"class":58},"toFixed",[52,87506,3121],{"class":622},[52,87508,3194],{"class":90},[52,87510,170],{"class":622},[52,87512,87513],{"class":54,"line":35985},[52,87514,116],{"emptyLinePlaceholder":115},[52,87516,87517,87519],{"class":54,"line":35991},[52,87518,76910],{"class":160},[52,87520,73097],{"class":62},[52,87522,87523],{"class":54,"line":36002},[52,87524,87525],{"class":62},"        \u003Cdiv class=\"item\">\n",[52,87527,87528,87531,87533],{"class":54,"line":36008},[52,87529,87530],{"class":62},"          \u003Cimg src=\"${",[52,87532,82748],{"class":622},[52,87534,82780],{"class":62},[52,87536,87537,87540,87542,87545,87547],{"class":54,"line":36018},[52,87538,87539],{"class":62},"          \u003Cp class=\"name\">${",[52,87541,82738],{"class":622},[52,87543,87544],{"class":62},"}${",[52,87546,4281],{"class":622},[52,87548,82790],{"class":62},[52,87550,87551,87554,87556],{"class":54,"line":36023},[52,87552,87553],{"class":62},"          \u003Cp class=\"spec\">${",[52,87555,24],{"class":622},[52,87557,82790],{"class":62},[52,87559,87560,87563,87565,87567,87569,87571,87573,87575],{"class":54,"line":36029},[52,87561,87562],{"class":62},"          \u003Cp class=\"price\">${",[52,87564,82743],{"class":622},[52,87566,3670],{"class":62},[52,87568,87504],{"class":58},[52,87570,3121],{"class":62},[52,87572,3194],{"class":90},[52,87574,3542],{"class":62},[52,87576,82790],{"class":62},[52,87578,87579,87582,87584],{"class":54,"line":36078},[52,87580,87581],{"class":62},"          \u003Cp class=\"count\">x${",[52,87583,87362],{"class":622},[52,87585,82790],{"class":62},[52,87587,87588,87591,87594],{"class":54,"line":36125},[52,87589,87590],{"class":62},"          \u003Cp class=\"sub-total\">${",[52,87592,87593],{"class":622},"subtotal",[52,87595,82790],{"class":62},[52,87597,87598],{"class":54,"line":36130},[52,87599,87600],{"class":62},"        \u003C\u002Fdiv> \n",[52,87602,87603],{"class":54,"line":36136},[52,87604,87605],{"class":62},"             `\n",[52,87607,87608,87611,87613,87615,87617],{"class":54,"line":36155},[52,87609,87610],{"class":622},"    }).",[52,87612,77151],{"class":58},[52,87614,3121],{"class":622},[52,87616,77156],{"class":62},[52,87618,170],{"class":622},[52,87620,87621],{"class":54,"line":36161},[52,87622,87623],{"class":332},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[52,87625,87626,87628,87630,87632,87634,87637,87639,87642,87644,87646,87648,87651,87654,87656,87659,87661,87663,87665,87668,87670,87672,87674,87676],{"class":54,"line":36181},[52,87627,14177],{"class":160},[52,87629,65715],{"class":90},[52,87631,16520],{"class":160},[52,87633,82976],{"class":622},[52,87635,87636],{"class":58},"reduce",[52,87638,5338],{"class":622},[52,87640,87641],{"class":8172},"prev",[52,87643,15391],{"class":622},[52,87645,82723],{"class":8172},[52,87647,16670],{"class":622},[52,87649,87650],{"class":160},"=>",[52,87652,87653],{"class":622}," prev ",[52,87655,3593],{"class":160},[52,87657,87658],{"class":622}," (item.price ",[52,87660,1095],{"class":160},[52,87662,8710],{"class":90},[52,87664,9474],{"class":160},[52,87666,87667],{"class":622}," item.count) ",[52,87669,3696],{"class":160},[52,87671,8710],{"class":90},[52,87673,15391],{"class":622},[52,87675,3306],{"class":90},[52,87677,170],{"class":622},[52,87679,87680,87682,87684,87686,87689,87691,87693,87696,87698,87700,87702],{"class":54,"line":36187},[52,87681,55337],{"class":622},[52,87683,57329],{"class":58},[52,87685,3121],{"class":622},[52,87687,87688],{"class":62},"'.amount'",[52,87690,77177],{"class":622},[52,87692,2099],{"class":160},[52,87694,87695],{"class":622}," total.",[52,87697,87504],{"class":58},[52,87699,3121],{"class":622},[52,87701,3194],{"class":90},[52,87703,170],{"class":622},[52,87705,87706,87708,87710],{"class":54,"line":36193},[52,87707,55347],{"class":622},[52,87709,54744],{"class":54231},[52,87711,54238],{"class":622},[52,87713,87714,87716,87718],{"class":54,"line":36203},[52,87715,54716],{"class":622},[52,87717,54731],{"class":54231},[52,87719,54238],{"class":622},[52,87721,87722],{"class":54,"line":36208},[52,87723,116],{"emptyLinePlaceholder":115},[52,87725,87726,87728,87730],{"class":54,"line":36214},[52,87727,54716],{"class":622},[52,87729,53566],{"class":54231},[52,87731,54238],{"class":622},[14,87733,87735],{"id":87734},"_411-编程思想","4.11 编程思想",[30,87737,87739],{"id":87738},"_4111-面向过程介绍","4.11.1 面向过程介绍",[274,87741,87742,87745],{},[538,87743,87744],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[274,87747,87748],{},"调用就可以了",[274,87750,87751],{},[280,87752],{"alt":28,"src":87753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[30,87755,87757],{"id":87756},"_4112-面向对象","4.11.2 面向对象",[274,87759,87760],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[274,87762,87763],{},[280,87764],{"alt":28,"src":87765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[274,87767,87768],{},"面向对象的特性：",[4118,87770,87771,87774,87777],{},[1073,87772,87773],{},"封装性",[1073,87775,87776],{},"继承性",[1073,87778,87779],{},"多态性",[30,87781,87783],{"id":87782},"_4113-两者比较","4.11.3 两者比较",[274,87785,87786],{},[280,87787],{"alt":28,"src":87788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87790,87792],{"id":87791},"_412-构造函数回顾","4.12 构造函数回顾",[274,87794,87795],{},[280,87796],{"alt":28,"src":87797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[274,87799,87800],{},[280,87801],{"alt":28,"src":87802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[274,87804,87805],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[274,87807,87808],{},[280,87809],{"alt":28,"src":87810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87812,87814],{"id":87813},"_413-原型","4.13 原型",[30,87816,87818],{"id":87817},"_4131-原型对象的认识","4.13.1 原型对象的认识",[274,87820,87821],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[274,87823,87824],{},[280,87825],{"alt":28,"src":87826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[274,87828,87829],{},[280,87830],{"alt":28,"src":87831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[274,87833,87834],{},"原型是构造函数的属性，它也是一个对象",[274,87836,87837],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[274,87839,87840],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[19,87842,87844],{"className":55997,"code":87843,"language":55999,"meta":28,"style":28},"\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",[26,87845,87846,87854,87859,87867,87872,87877,87882,87887,87892,87896,87900,87904,87909,87914,87918,87923,87928,87933,87938,87943,87947,87955],{"__ignoreMap":28},[52,87847,87848,87850,87852],{"class":54,"line":55},[52,87849,4022],{"class":622},[52,87851,54731],{"class":54231},[52,87853,54238],{"class":622},[52,87855,87856],{"class":54,"line":69},[52,87857,87858],{"class":332},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[52,87860,87861,87863,87865],{"class":54,"line":82},[52,87862,55075],{"class":622},[52,87864,54744],{"class":54231},[52,87866,54238],{"class":622},[52,87868,87869],{"class":54,"line":97},[52,87870,87871],{"class":622},"    function Star(uname, age) {\n",[52,87873,87874],{"class":54,"line":112},[52,87875,87876],{"class":622},"      this.uname = uname,\n",[52,87878,87879],{"class":54,"line":119},[52,87880,87881],{"class":622},"        this.age = age\n",[52,87883,87884],{"class":54,"line":130},[52,87885,87886],{"class":622},"      \u002F\u002F this.sing = function () {\n",[52,87888,87889],{"class":54,"line":136},[52,87890,87891],{"class":622},"      \u002F\u002F   console.log('唱歌')\n",[52,87893,87894],{"class":54,"line":141},[52,87895,116],{"emptyLinePlaceholder":115},[52,87897,87898],{"class":54,"line":146},[52,87899,62967],{"class":622},[52,87901,87902],{"class":54,"line":152},[52,87903,5149],{"class":622},[52,87905,87906],{"class":54,"line":157},[52,87907,87908],{"class":622},"    Star.prototype.sing = function () {\n",[52,87910,87911],{"class":54,"line":173},[52,87912,87913],{"class":622},"      console.log('唱歌')\n",[52,87915,87916],{"class":54,"line":178},[52,87917,5149],{"class":622},[52,87919,87920],{"class":54,"line":184},[52,87921,87922],{"class":622},"    \u002F\u002F console.dir(Star.prototype)\n",[52,87924,87925],{"class":54,"line":189},[52,87926,87927],{"class":622},"    const pink = new Star('pink', 18)\n",[52,87929,87930],{"class":54,"line":201},[52,87931,87932],{"class":622},"    const red = new Star('red', 20)\n",[52,87934,87935],{"class":54,"line":206},[52,87936,87937],{"class":622},"    pink.sing()\n",[52,87939,87940],{"class":54,"line":224},[52,87941,87942],{"class":622},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[52,87944,87945],{"class":54,"line":229},[52,87946,116],{"emptyLinePlaceholder":115},[52,87948,87949,87951,87953],{"class":54,"line":241},[52,87950,55347],{"class":622},[52,87952,54744],{"class":54231},[52,87954,54238],{"class":622},[52,87956,87957,87959,87961],{"class":54,"line":246},[52,87958,54716],{"class":622},[52,87960,54731],{"class":54231},[52,87962,54238],{"class":622},[274,87964,87965],{},[280,87966],{"alt":28,"src":87967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[19,87969,87971],{"className":55997,"code":87970,"language":55999,"meta":28,"style":28},"\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",[26,87972,87973,87981,87989,87994,87999,88004,88009,88013,88018,88023,88028,88032,88037,88041,88045,88050,88054,88062],{"__ignoreMap":28},[52,87974,87975,87977,87979],{"class":54,"line":55},[52,87976,4022],{"class":622},[52,87978,54731],{"class":54231},[52,87980,54238],{"class":622},[52,87982,87983,87985,87987],{"class":54,"line":69},[52,87984,55075],{"class":622},[52,87986,54744],{"class":54231},[52,87988,54238],{"class":622},[52,87990,87991],{"class":54,"line":82},[52,87992,87993],{"class":622},"    let that\n",[52,87995,87996],{"class":54,"line":97},[52,87997,87998],{"class":622},"    function Star(uname) {\n",[52,88000,88001],{"class":54,"line":112},[52,88002,88003],{"class":622},"      this.uname = uname\n",[52,88005,88006],{"class":54,"line":119},[52,88007,88008],{"class":622},"      that = this\n",[52,88010,88011],{"class":54,"line":130},[52,88012,5149],{"class":622},[52,88014,88015],{"class":54,"line":136},[52,88016,88017],{"class":622},"    \u002F\u002F 实例对象是 ldh\n",[52,88019,88020],{"class":54,"line":141},[52,88021,88022],{"class":622},"    const ldh = new Star('刘德华')\n",[52,88024,88025],{"class":54,"line":146},[52,88026,88027],{"class":622},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[52,88029,88030],{"class":54,"line":152},[52,88031,116],{"emptyLinePlaceholder":115},[52,88033,88034],{"class":54,"line":157},[52,88035,88036],{"class":622},"    Star.sing = function () {\n",[52,88038,88039],{"class":54,"line":173},[52,88040,87913],{"class":622},[52,88042,88043],{"class":54,"line":178},[52,88044,5149],{"class":622},[52,88046,88047],{"class":54,"line":184},[52,88048,88049],{"class":622},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[52,88051,88052],{"class":54,"line":189},[52,88053,116],{"emptyLinePlaceholder":115},[52,88055,88056,88058,88060],{"class":54,"line":201},[52,88057,55347],{"class":622},[52,88059,54744],{"class":54231},[52,88061,54238],{"class":622},[52,88063,88064,88066,88068],{"class":54,"line":206},[52,88065,54716],{"class":622},[52,88067,54731],{"class":54231},[52,88069,54238],{"class":622},[274,88071,88072],{},"构造函数的this指向的是实例对象；",[274,88074,88075],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[30,88077,88079],{"id":88078},"_4132-数组扩展方法","4.13.2 数组扩展方法",[274,88081,88082],{},[280,88083],{"alt":28,"src":88084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[19,88086,88088],{"className":55997,"code":88087,"language":55999,"meta":28,"style":28},"\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",[26,88089,88090,88098,88106,88111,88116,88121,88126,88131,88136,88141,88146,88151,88156,88160,88165,88170,88175,88180,88184,88189,88194,88199,88204,88208,88213,88218,88223,88228,88232,88237,88241,88249],{"__ignoreMap":28},[52,88091,88092,88094,88096],{"class":54,"line":55},[52,88093,4022],{"class":622},[52,88095,54731],{"class":54231},[52,88097,54238],{"class":622},[52,88099,88100,88102,88104],{"class":54,"line":69},[52,88101,55075],{"class":622},[52,88103,54744],{"class":54231},[52,88105,54238],{"class":622},[52,88107,88108],{"class":54,"line":82},[52,88109,88110],{"class":622},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[52,88112,88113],{"class":54,"line":97},[52,88114,88115],{"class":622},"    const arr = [1, 2, 3]\n",[52,88117,88118],{"class":54,"line":112},[52,88119,88120],{"class":622},"    \u002F\u002F 自己定义数组的扩展方法\n",[52,88122,88123],{"class":54,"line":119},[52,88124,88125],{"class":622},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[52,88127,88128],{"class":54,"line":130},[52,88129,88130],{"class":622},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[52,88132,88133],{"class":54,"line":136},[52,88134,88135],{"class":622},"    \u002F\u002F ①.最大值\n",[52,88137,88138],{"class":54,"line":141},[52,88139,88140],{"class":622},"    Array.prototype.max = function () {\n",[52,88142,88143],{"class":54,"line":146},[52,88144,88145],{"class":622},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[52,88147,88148],{"class":54,"line":152},[52,88149,88150],{"class":622},"      return Math.max(...this)\n",[52,88152,88153],{"class":54,"line":157},[52,88154,88155],{"class":622},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[52,88157,88158],{"class":54,"line":173},[52,88159,5149],{"class":622},[52,88161,88162],{"class":54,"line":178},[52,88163,88164],{"class":622},"    console.log(arr.max())\n",[52,88166,88167],{"class":54,"line":184},[52,88168,88169],{"class":622},"    \u002F\u002F ②最小值\n",[52,88171,88172],{"class":54,"line":189},[52,88173,88174],{"class":622},"    Array.prototype.min = function () {\n",[52,88176,88177],{"class":54,"line":201},[52,88178,88179],{"class":622},"      return Math.min(...this)\n",[52,88181,88182],{"class":54,"line":206},[52,88183,5149],{"class":622},[52,88185,88186],{"class":54,"line":224},[52,88187,88188],{"class":622},"    console.log(arr.min())\n",[52,88190,88191],{"class":54,"line":229},[52,88192,88193],{"class":622},"    \u002F\u002F③求和\n",[52,88195,88196],{"class":54,"line":241},[52,88197,88198],{"class":622},"    Array.prototype.sum = function () {\n",[52,88200,88201],{"class":54,"line":246},[52,88202,88203],{"class":622},"      return this.reduce((prev, current) => prev + current, 0)\n",[52,88205,88206],{"class":54,"line":252},[52,88207,5149],{"class":622},[52,88209,88210],{"class":54,"line":257},[52,88211,88212],{"class":622},"    console.log(arr.sum())\n",[52,88214,88215],{"class":54,"line":266},[52,88216,88217],{"class":622},"    \u002F\u002F ③排序\n",[52,88219,88220],{"class":54,"line":4722},[52,88221,88222],{"class":622},"    Array.prototype.rever = function () {\n",[52,88224,88225],{"class":54,"line":4727},[52,88226,88227],{"class":622},"      return this.reverse()\n",[52,88229,88230],{"class":54,"line":4741},[52,88231,5149],{"class":622},[52,88233,88234],{"class":54,"line":4746},[52,88235,88236],{"class":622},"    console.log(arr.rever())\n",[52,88238,88239],{"class":54,"line":5538},[52,88240,116],{"emptyLinePlaceholder":115},[52,88242,88243,88245,88247],{"class":54,"line":5552},[52,88244,55347],{"class":622},[52,88246,54744],{"class":54231},[52,88248,54238],{"class":622},[52,88250,88251,88253,88255],{"class":54,"line":5560},[52,88252,54716],{"class":622},[52,88254,54731],{"class":54231},[52,88256,54238],{"class":622},[274,88258,88259],{},[280,88260],{"alt":28,"src":88261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[30,88263,88265],{"id":88264},"_4133-constructor-属性","4.13.3 constructor 属性",[274,88267,88268],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[274,88270,88271],{},[280,88272],{"alt":28,"src":88273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[19,88275,88277],{"className":55997,"code":88276,"language":55999,"meta":28,"style":28},"\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",[26,88278,88279,88287,88295,88300,88305,88309,88314,88319,88324,88332],{"__ignoreMap":28},[52,88280,88281,88283,88285],{"class":54,"line":55},[52,88282,4022],{"class":622},[52,88284,54731],{"class":54231},[52,88286,54238],{"class":622},[52,88288,88289,88291,88293],{"class":54,"line":69},[52,88290,55075],{"class":622},[52,88292,54744],{"class":54231},[52,88294,54238],{"class":622},[52,88296,88297],{"class":54,"line":82},[52,88298,88299],{"class":622},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[52,88301,88302],{"class":54,"line":97},[52,88303,88304],{"class":622},"    function Star() {\n",[52,88306,88307],{"class":54,"line":112},[52,88308,5149],{"class":622},[52,88310,88311],{"class":54,"line":119},[52,88312,88313],{"class":622},"    const ldh = new Star()\n",[52,88315,88316],{"class":54,"line":130},[52,88317,88318],{"class":622},"    console.log(Star.prototype)\n",[52,88320,88321],{"class":54,"line":136},[52,88322,88323],{"class":622},"    console.log(Star.prototype.constructor === Star)\n",[52,88325,88326,88328,88330],{"class":54,"line":141},[52,88327,55347],{"class":622},[52,88329,54744],{"class":54231},[52,88331,54238],{"class":622},[52,88333,88334,88336,88338],{"class":54,"line":146},[52,88335,54716],{"class":622},[52,88337,54731],{"class":54231},[52,88339,54238],{"class":622},[274,88341,88342],{},[280,88343],{"alt":28,"src":88344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[274,88346,88347],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[19,88349,88351],{"className":55997,"code":88350,"language":55999,"meta":28,"style":28},"  \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",[26,88352,88353,88361,88365,88369,88373,88378,88383,88388,88392,88397,88402,88407,88412,88417,88422,88426,88430,88435,88440,88445,88449,88454,88459,88463,88467,88471],{"__ignoreMap":28},[52,88354,88355,88357,88359],{"class":54,"line":55},[52,88356,55075],{"class":622},[52,88358,54744],{"class":54231},[52,88360,54238],{"class":622},[52,88362,88363],{"class":54,"line":69},[52,88364,88299],{"class":622},[52,88366,88367],{"class":54,"line":82},[52,88368,88304],{"class":622},[52,88370,88371],{"class":54,"line":97},[52,88372,5149],{"class":622},[52,88374,88375],{"class":54,"line":112},[52,88376,88377],{"class":622},"    \u002F\u002F const ldh = new Star()\n",[52,88379,88380],{"class":54,"line":119},[52,88381,88382],{"class":622},"    \u002F\u002F console.log(Star.prototype)\n",[52,88384,88385],{"class":54,"line":130},[52,88386,88387],{"class":622},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[52,88389,88390],{"class":54,"line":136},[52,88391,116],{"emptyLinePlaceholder":115},[52,88393,88394],{"class":54,"line":141},[52,88395,88396],{"class":622},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[52,88398,88399],{"class":54,"line":146},[52,88400,88401],{"class":622},"    \u002F\u002F Star.prototype.sing = function () {\n",[52,88403,88404],{"class":54,"line":152},[52,88405,88406],{"class":622},"    \u002F\u002F   console.log('唱歌')\n",[52,88408,88409],{"class":54,"line":157},[52,88410,88411],{"class":622},"    \u002F\u002F }\n",[52,88413,88414],{"class":54,"line":173},[52,88415,88416],{"class":622},"    \u002F\u002F Star.prototype.dance = function () {\n",[52,88418,88419],{"class":54,"line":178},[52,88420,88421],{"class":622},"    \u002F\u002F   console.log('跳舞')\n",[52,88423,88424],{"class":54,"line":184},[52,88425,88411],{"class":622},[52,88427,88428],{"class":54,"line":189},[52,88429,88318],{"class":622},[52,88431,88432],{"class":54,"line":201},[52,88433,88434],{"class":622},"    Star.prototype = {\n",[52,88436,88437],{"class":54,"line":206},[52,88438,88439],{"class":622},"      sing: function () {\n",[52,88441,88442],{"class":54,"line":224},[52,88443,88444],{"class":622},"        console.log('唱歌')\n",[52,88446,88447],{"class":54,"line":229},[52,88448,80820],{"class":622},[52,88450,88451],{"class":54,"line":241},[52,88452,88453],{"class":622},"      dance: function () {\n",[52,88455,88456],{"class":54,"line":246},[52,88457,88458],{"class":622},"        console.log('跳舞')\n",[52,88460,88461],{"class":54,"line":252},[52,88462,55328],{"class":622},[52,88464,88465],{"class":54,"line":257},[52,88466,5149],{"class":622},[52,88468,88469],{"class":54,"line":266},[52,88470,88318],{"class":622},[52,88472,88473,88475,88477],{"class":54,"line":4722},[52,88474,55347],{"class":622},[52,88476,54744],{"class":54231},[52,88478,54238],{"class":622},[274,88480,88481],{},"进行输出结果后会发现：",[274,88483,88484],{},[280,88485],{"alt":28,"src":88486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[274,88488,88489],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[274,88491,88492],{},"所以，要重新指回创造这个原型对象的构造函数",[19,88494,88496],{"className":74141,"code":88495,"language":74143,"meta":28,"style":28},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[26,88497,88498,88512,88517,88522,88533,88546,88551,88562,88576,88580],{"__ignoreMap":28},[52,88499,88500,88503,88505,88508,88510],{"class":54,"line":55},[52,88501,88502],{"class":90},"Star",[52,88504,3670],{"class":622},[52,88506,88507],{"class":90},"prototype",[52,88509,16520],{"class":160},[52,88511,18528],{"class":622},[52,88513,88514],{"class":54,"line":69},[52,88515,88516],{"class":332},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[52,88518,88519],{"class":54,"line":82},[52,88520,88521],{"class":622},"  constructor: Star,\n",[52,88523,88524,88527,88529,88531],{"class":54,"line":97},[52,88525,88526],{"class":58},"  sing",[52,88528,54368],{"class":622},[52,88530,57379],{"class":160},[52,88532,57382],{"class":622},[52,88534,88535,88537,88539,88541,88544],{"class":54,"line":112},[52,88536,76681],{"class":622},[52,88538,61177],{"class":58},[52,88540,3121],{"class":622},[52,88542,88543],{"class":62},"'唱歌'",[52,88545,170],{"class":622},[52,88547,88548],{"class":54,"line":119},[52,88549,88550],{"class":622},"   },\n",[52,88552,88553,88556,88558,88560],{"class":54,"line":130},[52,88554,88555],{"class":58},"   dance",[52,88557,54368],{"class":622},[52,88559,57379],{"class":160},[52,88561,57382],{"class":622},[52,88563,88564,88567,88569,88571,88574],{"class":54,"line":136},[52,88565,88566],{"class":622},"     console.",[52,88568,61177],{"class":58},[52,88570,3121],{"class":622},[52,88572,88573],{"class":62},"'跳舞'",[52,88575,170],{"class":622},[52,88577,88578],{"class":54,"line":141},[52,88579,7268],{"class":622},[52,88581,88582],{"class":54,"line":146},[52,88583,4543],{"class":622},[274,88585,88586],{},[280,88587],{"alt":28,"src":88588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[274,88590,88591],{},"总结1：",[274,88593,88594],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[274,88596,88597],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[274,88599,88600],{},"constructor指的是他的来源",[274,88602,88603],{},[280,88604],{"alt":28,"src":88605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[274,88607,88608],{},[280,88609],{"alt":28,"src":88610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[274,88612,88613],{},"总结2：",[274,88615,88616],{},[280,88617],{"alt":28,"src":88618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[274,88620,88621],{},[280,88622],{"alt":28,"src":88623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[274,88625,88626],{},[280,88627],{"alt":28,"src":88628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[30,88630,88632],{"id":88631},"_4134-对象原型","4.13.4 对象原型",[274,88634,88635],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[274,88637,88638],{},"对象原型就是__proto__这个属性",[274,88640,88641],{},[280,88642],{"alt":28,"src":88643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[274,88645,88646],{},[280,88647],{"alt":28,"src":88648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[274,88650,88651],{},[280,88652],{"alt":28,"src":88653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[274,88655,88656],{},[280,88657],{"alt":28,"src":88658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[19,88660,88662],{"className":55997,"code":88661,"language":55999,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,88663,88664,88672,88680,88684,88688,88692,88697,88705],{"__ignoreMap":28},[52,88665,88666,88668,88670],{"class":54,"line":55},[52,88667,4022],{"class":622},[52,88669,54731],{"class":54231},[52,88671,54238],{"class":622},[52,88673,88674,88676,88678],{"class":54,"line":69},[52,88675,55075],{"class":622},[52,88677,54744],{"class":54231},[52,88679,54238],{"class":622},[52,88681,88682],{"class":54,"line":82},[52,88683,88304],{"class":622},[52,88685,88686],{"class":54,"line":97},[52,88687,5149],{"class":622},[52,88689,88690],{"class":54,"line":112},[52,88691,88313],{"class":622},[52,88693,88694],{"class":54,"line":119},[52,88695,88696],{"class":622},"    console.log(ldh)\n",[52,88698,88699,88701,88703],{"class":54,"line":130},[52,88700,55347],{"class":622},[52,88702,54744],{"class":54231},[52,88704,54238],{"class":622},[52,88706,88707,88709,88711],{"class":54,"line":136},[52,88708,54716],{"class":622},[52,88710,54731],{"class":54231},[52,88712,54238],{"class":622},[274,88714,88715],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[274,88717,88718],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[274,88720,88721],{},[280,88722],{"alt":28,"src":88723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[274,88725,88726],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[274,88728,88729],{},"对象原型指向原型对象",[274,88731,88732],{},[280,88733],{"alt":28,"src":88734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[274,88736,88737],{},[280,88738],{"alt":28,"src":88739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[274,88741,88742],{},[280,88743],{"alt":28,"src":88744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[30,88746,88748],{"id":88747},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[274,88750,88751],{},[280,88752],{"alt":28,"src":88753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1070,88755,88756,88759,88762,88765],{},[1073,88757,88758],{},"构造函数通过new的形式实例化得到实例对象",[1073,88760,88761],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[1073,88763,88764],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[1073,88766,88767],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[274,88769,88770],{},[280,88771],{"alt":28,"src":88772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[274,88774,88775],{},"题目梳理：",[274,88777,88778],{},[280,88779],{"alt":28,"src":88780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[30,88782,88784],{"id":88783},"_4136-原型继承","4.13.6 原型继承",[274,88786,88787],{},[280,88788],{"alt":28,"src":88789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[274,88791,88792],{},[280,88793],{"alt":28,"src":88794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[274,88796,88797],{},[280,88798],{"alt":28,"src":88799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[274,88801,88802],{},[280,88803],{"alt":28,"src":88804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[274,88806,88807],{},[280,88808],{"alt":28,"src":88809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[274,88811,88812],{},[280,88813],{"alt":28,"src":88814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[274,88816,88817],{},[280,88818],{"alt":28,"src":88819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[274,88821,88822],{},[280,88823],{"alt":28,"src":88824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[274,88826,88827],{},"回顾：构造函数每次new得到对象都是不同的",[30,88829,88831],{"id":88830},"_4137-原型链","4.13.7 原型链",[274,88833,88834],{},[280,88835],{"alt":28,"src":88836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[274,88838,88839],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[274,88841,88842],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[274,88844,88845],{},"大哥是Object",[274,88847,88848],{},[280,88849],{"alt":28,"src":88850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[274,88852,88853],{},[280,88854],{"alt":28,"src":88855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[274,88857,88858],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[274,88860,88861],{},"万物皆对象",[30,88863,88865],{"id":88864},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[274,88867,88868],{},"模态框",[274,88870,88871],{},"以后遇见这个效果直接使用这个就行",[274,88873,88874],{},[280,88875],{"alt":28,"src":88876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[274,88878,88879],{},[280,88880],{"alt":28,"src":88881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[274,88883,88884],{},[280,88885],{"alt":28,"src":88886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[274,88888,88889],{},[280,88890],{"alt":28,"src":88891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[274,88893,88894],{},"补充知识点：",[1070,88896,88897],{},[1073,88898,88899],{},"append()",[274,88901,88902],{},[280,88903],{"alt":28,"src":88904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[19,88906,88908],{"className":53564,"code":88907,"language":53566,"meta":28,"style":28},"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",[26,88909,88910,88915,88920,88925,88929,88933,88937,88942,88947,88952,88956],{"__ignoreMap":28},[52,88911,88912],{"class":54,"line":55},[52,88913,88914],{"class":622},"append(param1)\n",[52,88916,88917],{"class":54,"line":69},[52,88918,88919],{"class":622},"append(param1, param2)\n",[52,88921,88922],{"class":54,"line":82},[52,88923,88924],{"class":622},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[52,88926,88927],{"class":54,"line":97},[52,88928,116],{"emptyLinePlaceholder":115},[52,88930,88931],{"class":54,"line":112},[52,88932,116],{"emptyLinePlaceholder":115},[52,88934,88935],{"class":54,"line":119},[52,88936,116],{"emptyLinePlaceholder":115},[52,88938,88939],{"class":54,"line":130},[52,88940,88941],{"class":622},"let div = document.createElement(\"div\");\n",[52,88943,88944],{"class":54,"line":136},[52,88945,88946],{"class":622},"let p = document.createElement(\"p\");\n",[52,88948,88949],{"class":54,"line":141},[52,88950,88951],{"class":622},"div.append(p);\n",[52,88953,88954],{"class":54,"line":146},[52,88955,116],{"emptyLinePlaceholder":115},[52,88957,88958,88961,88963],{"class":54,"line":152},[52,88959,88960],{"class":622},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[52,88962,274],{"class":54231},[52,88964,88965],{"class":622},"> ]\n",[1070,88967,88968],{"start":69},[1073,88969,88970],{},"remove()",[274,88972,88973],{},"自己删自己",[274,88975,88976],{},[280,88977],{"alt":28,"src":88978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[19,88980,88982],{"className":53564,"code":88981,"language":53566,"meta":28,"style":28},"\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",[26,88983,88984,88994,89008,89012,89020,89034,89054,89066,89074,89081,89093,89106,89141,89153,89164,89176,89188,89200,89227,89237,89241,89245,89254,89266,89280,89290,89302,89306,89310,89320,89331,89341,89351,89364,89377,89387,89391,89395,89404,89414,89426,89430,89434,89443,89453,89463,89475,89479,89483,89493,89509,89520,89530,89540,89552,89564,89576,89580,89584,89597,89608,89612,89620,89628,89632,89640,89660,89680,89688,89693,89719,89724,89729,89748,89753,89765,89770,89781,89791,89801,89806,89811,89815,89820,89825,89830,89850,89855,89875,89880,89894,89899,89904,89909,89925,89929,89934,89963,89968,89973,89978,89989,89993,89997,90001,90006,90031,90036,90061,90066,90075,90079,90084,90109,90113,90138,90142,90151,90155,90160,90178,90188,90192,90200,90208,90212],{"__ignoreMap":28},[52,88985,88986,88988,88990,88992],{"class":54,"line":55},[52,88987,54228],{"class":622},[52,88989,54232],{"class":54231},[52,88991,54235],{"class":58},[52,88993,54238],{"class":622},[52,88995,88996,88998,89000,89002,89004,89006],{"class":54,"line":69},[52,88997,4022],{"class":622},[52,88999,53566],{"class":54231},[52,89001,54247],{"class":58},[52,89003,2099],{"class":622},[52,89005,54252],{"class":62},[52,89007,54238],{"class":622},[52,89009,89010],{"class":54,"line":82},[52,89011,116],{"emptyLinePlaceholder":115},[52,89013,89014,89016,89018],{"class":54,"line":97},[52,89015,4022],{"class":622},[52,89017,54265],{"class":54231},[52,89019,54238],{"class":622},[52,89021,89022,89024,89026,89028,89030,89032],{"class":54,"line":112},[52,89023,55075],{"class":622},[52,89025,54275],{"class":54231},[52,89027,54278],{"class":58},[52,89029,2099],{"class":622},[52,89031,54283],{"class":62},[52,89033,54238],{"class":622},[52,89035,89036,89038,89040,89042,89044,89046,89048,89050,89052],{"class":54,"line":119},[52,89037,55075],{"class":622},[52,89039,54275],{"class":54231},[52,89041,17876],{"class":58},[52,89043,2099],{"class":622},[52,89045,54322],{"class":62},[52,89047,54302],{"class":58},[52,89049,2099],{"class":622},[52,89051,54329],{"class":62},[52,89053,54238],{"class":622},[52,89055,89056,89058,89060,89062,89064],{"class":54,"line":130},[52,89057,55075],{"class":622},[52,89059,54338],{"class":54231},[52,89061,54341],{"class":622},[52,89063,54338],{"class":54231},[52,89065,54238],{"class":622},[52,89067,89068,89070,89072],{"class":54,"line":136},[52,89069,55075],{"class":622},[52,89071,3015],{"class":54231},[52,89073,54238],{"class":622},[52,89075,89076,89079],{"class":54,"line":141},[52,89077,89078],{"class":58},"    .modal",[52,89080,18528],{"class":622},[52,89082,89083,89085,89087,89089,89091],{"class":54,"line":146},[52,89084,57701],{"class":90},[52,89086,54368],{"class":622},[52,89088,6932],{"class":90},[52,89090,54423],{"class":160},[52,89092,4272],{"class":622},[52,89094,89095,89098,89100,89102,89104],{"class":54,"line":152},[52,89096,89097],{"class":90},"      min-height",[52,89099,54368],{"class":622},[52,89101,3424],{"class":90},[52,89103,54423],{"class":160},[52,89105,4272],{"class":622},[52,89107,89108,89110,89112,89114,89116,89118,89120,89122,89124,89126,89128,89130,89132,89134,89136,89139],{"class":54,"line":157},[52,89109,81678],{"class":90},[52,89111,54368],{"class":622},[52,89113,3306],{"class":90},[52,89115,7052],{"class":90},[52,89117,5000],{"class":90},[52,89119,54423],{"class":160},[52,89121,81695],{"class":90},[52,89123,3121],{"class":622},[52,89125,3306],{"class":90},[52,89127,15391],{"class":622},[52,89129,3306],{"class":90},[52,89131,15391],{"class":622},[52,89133,3306],{"class":90},[52,89135,15391],{"class":622},[52,89137,89138],{"class":90},"0.1",[52,89140,5679],{"class":622},[52,89142,89143,89145,89147,89149,89151],{"class":54,"line":173},[52,89144,58064],{"class":90},[52,89146,54368],{"class":622},[52,89148,3406],{"class":90},[52,89150,54423],{"class":160},[52,89152,4272],{"class":622},[52,89154,89155,89157,89159,89162],{"class":54,"line":178},[52,89156,57689],{"class":90},[52,89158,54368],{"class":622},[52,89160,89161],{"class":90},"fixed",[52,89163,4272],{"class":622},[52,89165,89166,89169,89171,89174],{"class":54,"line":184},[52,89167,89168],{"class":90},"      z-index",[52,89170,54368],{"class":622},[52,89172,89173],{"class":90},"999",[52,89175,4272],{"class":622},[52,89177,89178,89180,89182,89184,89186],{"class":54,"line":189},[52,89179,57768],{"class":90},[52,89181,54368],{"class":622},[52,89183,3768],{"class":90},[52,89185,3441],{"class":160},[52,89187,4272],{"class":622},[52,89189,89190,89192,89194,89196,89198],{"class":54,"line":201},[52,89191,57877],{"class":90},[52,89193,54368],{"class":622},[52,89195,3768],{"class":90},[52,89197,3441],{"class":160},[52,89199,4272],{"class":622},[52,89201,89202,89204,89206,89208,89210,89213,89215,89217,89219,89221,89223,89225],{"class":54,"line":206},[52,89203,81719],{"class":90},[52,89205,54368],{"class":622},[52,89207,81724],{"class":90},[52,89209,3121],{"class":622},[52,89211,89212],{"class":90},"-50",[52,89214,3441],{"class":160},[52,89216,15391],{"class":622},[52,89218,89212],{"class":90},[52,89220,3441],{"class":160},[52,89222,15391],{"class":622},[52,89224,3306],{"class":90},[52,89226,5679],{"class":622},[52,89228,89229,89231,89233,89235],{"class":54,"line":224},[52,89230,57814],{"class":90},[52,89232,54368],{"class":622},[52,89234,63772],{"class":90},[52,89236,4272],{"class":622},[52,89238,89239],{"class":54,"line":229},[52,89240,5149],{"class":622},[52,89242,89243],{"class":54,"line":241},[52,89244,116],{"emptyLinePlaceholder":115},[52,89246,89247,89249,89252],{"class":54,"line":246},[52,89248,89078],{"class":58},[52,89250,89251],{"class":58}," .header",[52,89253,18528],{"class":622},[52,89255,89256,89258,89260,89262,89264],{"class":54,"line":252},[52,89257,60289],{"class":90},[52,89259,54368],{"class":622},[52,89261,3514],{"class":90},[52,89263,54423],{"class":160},[52,89265,4272],{"class":622},[52,89267,89268,89270,89272,89274,89276,89278],{"class":54,"line":257},[52,89269,57625],{"class":90},[52,89271,54368],{"class":622},[52,89273,3306],{"class":90},[52,89275,5000],{"class":90},[52,89277,54423],{"class":160},[52,89279,4272],{"class":622},[52,89281,89282,89284,89286,89288],{"class":54,"line":266},[52,89283,57689],{"class":90},[52,89285,54368],{"class":622},[52,89287,57694],{"class":90},[52,89289,4272],{"class":622},[52,89291,89292,89294,89296,89298,89300],{"class":54,"line":4722},[52,89293,57852],{"class":90},[52,89295,54368],{"class":622},[52,89297,3812],{"class":90},[52,89299,54423],{"class":160},[52,89301,4272],{"class":622},[52,89303,89304],{"class":54,"line":4727},[52,89305,5149],{"class":622},[52,89307,89308],{"class":54,"line":4741},[52,89309,116],{"emptyLinePlaceholder":115},[52,89311,89312,89314,89316,89318],{"class":54,"line":4746},[52,89313,89078],{"class":58},[52,89315,89251],{"class":58},[52,89317,5992],{"class":54231},[52,89319,18528],{"class":622},[52,89321,89322,89325,89327,89329],{"class":54,"line":5538},[52,89323,89324],{"class":90},"      font-style",[52,89326,54368],{"class":622},[52,89328,66771],{"class":90},[52,89330,4272],{"class":622},[52,89332,89333,89335,89337,89339],{"class":54,"line":5552},[52,89334,60346],{"class":90},[52,89336,54368],{"class":622},[52,89338,65000],{"class":90},[52,89340,4272],{"class":622},[52,89342,89343,89345,89347,89349],{"class":54,"line":5560},[52,89344,57689],{"class":90},[52,89346,54368],{"class":622},[52,89348,57761],{"class":90},[52,89350,4272],{"class":622},[52,89352,89353,89356,89358,89360,89362],{"class":54,"line":5565},[52,89354,89355],{"class":90},"      right",[52,89357,54368],{"class":622},[52,89359,3687],{"class":90},[52,89361,54423],{"class":160},[52,89363,4272],{"class":622},[52,89365,89366,89368,89370,89373,89375],{"class":54,"line":5571},[52,89367,57877],{"class":90},[52,89369,54368],{"class":622},[52,89371,89372],{"class":90},"-2",[52,89374,54423],{"class":160},[52,89376,4272],{"class":622},[52,89378,89379,89381,89383,89385],{"class":54,"line":5577},[52,89380,64955],{"class":90},[52,89382,54368],{"class":622},[52,89384,64960],{"class":90},[52,89386,4272],{"class":622},[52,89388,89389],{"class":54,"line":5582},[52,89390,5149],{"class":622},[52,89392,89393],{"class":54,"line":10904},[52,89394,116],{"emptyLinePlaceholder":115},[52,89396,89397,89399,89402],{"class":54,"line":10928},[52,89398,89078],{"class":58},[52,89400,89401],{"class":58}," .body",[52,89403,18528],{"class":622},[52,89405,89406,89408,89410,89412],{"class":54,"line":10933},[52,89407,60216],{"class":90},[52,89409,54368],{"class":622},[52,89411,54523],{"class":90},[52,89413,4272],{"class":622},[52,89415,89416,89418,89420,89422,89424],{"class":54,"line":10939},[52,89417,57625],{"class":90},[52,89419,54368],{"class":622},[52,89421,3559],{"class":90},[52,89423,54423],{"class":160},[52,89425,4272],{"class":622},[52,89427,89428],{"class":54,"line":10966},[52,89429,5149],{"class":622},[52,89431,89432],{"class":54,"line":10971},[52,89433,116],{"emptyLinePlaceholder":115},[52,89435,89436,89438,89441],{"class":54,"line":10977},[52,89437,89078],{"class":58},[52,89439,89440],{"class":58}," .footer",[52,89442,18528],{"class":622},[52,89444,89445,89447,89449,89451],{"class":54,"line":10989},[52,89446,57939],{"class":90},[52,89448,54368],{"class":622},[52,89450,54408],{"class":90},[52,89452,4272],{"class":622},[52,89454,89455,89457,89459,89461],{"class":54,"line":11001},[52,89456,57950],{"class":90},[52,89458,54368],{"class":622},[52,89460,54511],{"class":90},[52,89462,4272],{"class":622},[52,89464,89465,89467,89469,89471,89473],{"class":54,"line":11013},[52,89466,57625],{"class":90},[52,89468,54368],{"class":622},[52,89470,3559],{"class":90},[52,89472,54423],{"class":160},[52,89474,4272],{"class":622},[52,89476,89477],{"class":54,"line":12672},[52,89478,5149],{"class":622},[52,89480,89481],{"class":54,"line":12697},[52,89482,116],{"emptyLinePlaceholder":115},[52,89484,89485,89487,89489,89491],{"class":54,"line":12720},[52,89486,89078],{"class":58},[52,89488,89440],{"class":58},[52,89490,4377],{"class":54231},[52,89492,18528],{"class":622},[52,89494,89495,89497,89499,89501,89503,89505,89507],{"class":54,"line":12744},[52,89496,57625],{"class":90},[52,89498,54368],{"class":622},[52,89500,3188],{"class":90},[52,89502,54423],{"class":160},[52,89504,5045],{"class":90},[52,89506,54423],{"class":160},[52,89508,4272],{"class":622},[52,89510,89511,89513,89515,89518],{"class":54,"line":12749},[52,89512,64651],{"class":90},[52,89514,54368],{"class":622},[52,89516,89517],{"class":90},"#ccc",[52,89519,4272],{"class":622},[52,89521,89522,89524,89526,89528],{"class":54,"line":12754},[52,89523,66900],{"class":90},[52,89525,54368],{"class":622},[52,89527,57667],{"class":90},[52,89529,4272],{"class":622},[52,89531,89532,89534,89536,89538],{"class":54,"line":12759},[52,89533,60346],{"class":90},[52,89535,54368],{"class":622},[52,89537,63772],{"class":90},[52,89539,4272],{"class":622},[52,89541,89542,89544,89546,89548,89550],{"class":54,"line":12768},[52,89543,58064],{"class":90},[52,89545,54368],{"class":622},[52,89547,3194],{"class":90},[52,89549,54423],{"class":160},[52,89551,4272],{"class":622},[52,89553,89554,89556,89558,89560,89562],{"class":54,"line":12773},[52,89555,64680],{"class":90},[52,89557,54368],{"class":622},[52,89559,3559],{"class":90},[52,89561,54423],{"class":160},[52,89563,4272],{"class":622},[52,89565,89566,89568,89570,89572,89574],{"class":54,"line":12779},[52,89567,57852],{"class":90},[52,89569,54368],{"class":622},[52,89571,3661],{"class":90},[52,89573,54423],{"class":160},[52,89575,4272],{"class":622},[52,89577,89578],{"class":54,"line":12800},[52,89579,5149],{"class":622},[52,89581,89582],{"class":54,"line":12806},[52,89583,116],{"emptyLinePlaceholder":115},[52,89585,89586,89588,89590,89592,89595],{"class":54,"line":12820},[52,89587,89078],{"class":58},[52,89589,89440],{"class":58},[52,89591,4377],{"class":54231},[52,89593,89594],{"class":58},".submit",[52,89596,18528],{"class":622},[52,89598,89599,89601,89603,89606],{"class":54,"line":12826},[52,89600,57814],{"class":90},[52,89602,54368],{"class":622},[52,89604,89605],{"class":90},"#369",[52,89607,4272],{"class":622},[52,89609,89610],{"class":54,"line":12853},[52,89611,5149],{"class":622},[52,89613,89614,89616,89618],{"class":54,"line":12862},[52,89615,55347],{"class":622},[52,89617,3015],{"class":54231},[52,89619,54238],{"class":622},[52,89621,89622,89624,89626],{"class":54,"line":12868},[52,89623,54716],{"class":622},[52,89625,54265],{"class":54231},[52,89627,54238],{"class":622},[52,89629,89630],{"class":54,"line":12876},[52,89631,116],{"emptyLinePlaceholder":115},[52,89633,89634,89636,89638],{"class":54,"line":12881},[52,89635,4022],{"class":622},[52,89637,54731],{"class":54231},[52,89639,54238],{"class":622},[52,89641,89642,89644,89646,89648,89650,89653,89656,89658],{"class":54,"line":19560},[52,89643,55075],{"class":622},[52,89645,56817],{"class":54231},[52,89647,17915],{"class":58},[52,89649,2099],{"class":622},[52,89651,89652],{"class":62},"\"delete\"",[52,89654,89655],{"class":622},">删除\u003C\u002F",[52,89657,56817],{"class":54231},[52,89659,54238],{"class":622},[52,89661,89662,89664,89666,89668,89670,89673,89676,89678],{"class":54,"line":19566},[52,89663,55075],{"class":622},[52,89665,56817],{"class":54231},[52,89667,17915],{"class":58},[52,89669,2099],{"class":622},[52,89671,89672],{"class":62},"\"login\"",[52,89674,89675],{"class":622},">登录\u003C\u002F",[52,89677,56817],{"class":54231},[52,89679,54238],{"class":622},[52,89681,89682,89684,89686],{"class":54,"line":19589},[52,89683,55075],{"class":622},[52,89685,54744],{"class":54231},[52,89687,54238],{"class":622},[52,89689,89690],{"class":54,"line":19595},[52,89691,89692],{"class":332},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[52,89694,89695,89697,89700,89702,89704,89706,89708,89710,89713,89715,89717],{"class":54,"line":19618},[52,89696,73013],{"class":160},[52,89698,89699],{"class":58}," Modal",[52,89701,3121],{"class":622},[52,89703,54338],{"class":8172},[52,89705,16520],{"class":160},[52,89707,72859],{"class":62},[52,89709,15391],{"class":622},[52,89711,89712],{"class":8172},"message",[52,89714,16520],{"class":160},[52,89716,72859],{"class":62},[52,89718,15398],{"class":622},[52,89720,89721],{"class":54,"line":19632},[52,89722,89723],{"class":332},"      \u002F\u002F 创建Model 模态框盒子\n",[52,89725,89726],{"class":54,"line":19652},[52,89727,89728],{"class":332},"      \u002F\u002F 1.1 创建div标签\n",[52,89730,89731,89733,89736,89738,89740,89742,89744,89746],{"class":54,"line":19658},[52,89732,72980],{"class":90},[52,89734,89735],{"class":622},".modalBox ",[52,89737,2099],{"class":160},[52,89739,57326],{"class":622},[52,89741,73080],{"class":58},[52,89743,3121],{"class":622},[52,89745,84859],{"class":62},[52,89747,170],{"class":622},[52,89749,89750],{"class":54,"line":19669},[52,89751,89752],{"class":332},"      \u002F\u002F 1.2 给div 添加类名为model\n",[52,89754,89755,89757,89760,89762],{"class":54,"line":19692},[52,89756,72980],{"class":90},[52,89758,89759],{"class":622},".modalBox.className ",[52,89761,2099],{"class":160},[52,89763,89764],{"class":62}," 'modal'\n",[52,89766,89767],{"class":54,"line":19714},[52,89768,89769],{"class":332},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[52,89771,89772,89774,89777,89779],{"class":54,"line":19719},[52,89773,72980],{"class":90},[52,89775,89776],{"class":622},".modalBox.innerHTML ",[52,89778,2099],{"class":160},[52,89780,73097],{"class":62},[52,89782,89783,89786,89788],{"class":54,"line":19725},[52,89784,89785],{"class":62},"        \u003Cdiv class=\"header\">${",[52,89787,54338],{"class":622},[52,89789,89790],{"class":62},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[52,89792,89793,89796,89798],{"class":54,"line":19739},[52,89794,89795],{"class":62},"        \u003Cdiv class=\"body\">${",[52,89797,89712],{"class":622},[52,89799,89800],{"class":62},"}\u003C\u002Fdiv>\n",[52,89802,89803],{"class":54,"line":19752},[52,89804,89805],{"class":62},"      `\n",[52,89807,89808],{"class":54,"line":19757},[52,89809,89810],{"class":332},"      \u002F\u002F console.log(this.modalBox)\n",[52,89812,89813],{"class":54,"line":19771},[52,89814,5149],{"class":622},[52,89816,89817],{"class":54,"line":19776},[52,89818,89819],{"class":332},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[52,89821,89822],{"class":54,"line":19782},[52,89823,89824],{"class":332},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[52,89826,89827],{"class":54,"line":19787},[52,89828,89829],{"class":332},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[52,89831,89832,89835,89837,89839,89841,89844,89846,89848],{"class":54,"line":19801},[52,89833,89834],{"class":90},"    Modal",[52,89836,3670],{"class":622},[52,89838,88507],{"class":90},[52,89840,3670],{"class":622},[52,89842,89843],{"class":58},"open",[52,89845,16520],{"class":160},[52,89847,61848],{"class":160},[52,89849,57382],{"class":622},[52,89851,89852],{"class":54,"line":19806},[52,89853,89854],{"class":332},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[52,89856,89857,89859,89862,89864,89866,89868,89870,89873],{"class":54,"line":19811},[52,89858,61158],{"class":160},[52,89860,89861],{"class":90}," box",[52,89863,16520],{"class":160},[52,89865,57326],{"class":622},[52,89867,57329],{"class":58},[52,89869,3121],{"class":622},[52,89871,89872],{"class":62},"'.modal'",[52,89874,170],{"class":622},[52,89876,89877],{"class":54,"line":19825},[52,89878,89879],{"class":332},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[52,89881,89882,89885,89887,89890,89892],{"class":54,"line":19837},[52,89883,89884],{"class":622},"      box ",[52,89886,4682],{"class":160},[52,89888,89889],{"class":622}," box.",[52,89891,59936],{"class":58},[52,89893,4938],{"class":622},[52,89895,89896],{"class":54,"line":19842},[52,89897,89898],{"class":332},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[52,89900,89901],{"class":54,"line":19855},[52,89902,89903],{"class":332},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[52,89905,89906],{"class":54,"line":19860},[52,89907,89908],{"class":332},"      \u002F\u002F append可以增加对象\n",[52,89910,89911,89914,89917,89919,89922],{"class":54,"line":19865},[52,89912,89913],{"class":622},"      document.body.",[52,89915,89916],{"class":58},"append",[52,89918,3121],{"class":622},[52,89920,89921],{"class":90},"this",[52,89923,89924],{"class":622},".modalBox)\n",[52,89926,89927],{"class":54,"line":19870},[52,89928,116],{"emptyLinePlaceholder":115},[52,89930,89931],{"class":54,"line":19883},[52,89932,89933],{"class":332},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[52,89935,89936,89938,89941,89943,89945,89948,89950,89952,89954,89956,89959,89961],{"class":54,"line":19888},[52,89937,72980],{"class":90},[52,89939,89940],{"class":622},".modalBox.",[52,89942,57329],{"class":58},[52,89944,3121],{"class":622},[52,89946,89947],{"class":62},"'i'",[52,89949,33758],{"class":622},[52,89951,60743],{"class":58},[52,89953,3121],{"class":622},[52,89955,60748],{"class":62},[52,89957,89958],{"class":622},", () ",[52,89960,87650],{"class":160},[52,89962,18528],{"class":622},[52,89964,89965],{"class":54,"line":35565},[52,89966,89967],{"class":332},"        \u002F\u002F 这个地方需要用到箭头函数\n",[52,89969,89970],{"class":54,"line":35571},[52,89971,89972],{"class":332},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[52,89974,89975],{"class":54,"line":35577},[52,89976,89977],{"class":332},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[52,89979,89980,89982,89984,89987],{"class":54,"line":35583},[52,89981,67655],{"class":90},[52,89983,3670],{"class":622},[52,89985,89986],{"class":58},"close",[52,89988,4938],{"class":622},[52,89990,89991],{"class":54,"line":35589},[52,89992,67744],{"class":622},[52,89994,89995],{"class":54,"line":35600},[52,89996,5149],{"class":622},[52,89998,89999],{"class":54,"line":35606},[52,90000,116],{"emptyLinePlaceholder":115},[52,90002,90003],{"class":54,"line":35626},[52,90004,90005],{"class":332},"    \u002F\u002F 测试一下 点击 删除按钮\n",[52,90007,90008,90010,90012,90014,90017,90019,90021,90023,90025,90027,90029],{"class":54,"line":35632},[52,90009,55337],{"class":622},[52,90011,57329],{"class":58},[52,90013,3121],{"class":622},[52,90015,90016],{"class":62},"'#delete'",[52,90018,33758],{"class":622},[52,90020,60743],{"class":58},[52,90022,3121],{"class":622},[52,90024,60748],{"class":62},[52,90026,89958],{"class":622},[52,90028,87650],{"class":160},[52,90030,18528],{"class":622},[52,90032,90033],{"class":54,"line":35643},[52,90034,90035],{"class":332},"      \u002F\u002F 先调用Model构造函数\n",[52,90037,90038,90040,90043,90045,90047,90049,90051,90054,90056,90059],{"class":54,"line":35649},[52,90039,61158],{"class":160},[52,90041,90042],{"class":90}," del",[52,90044,16520],{"class":160},[52,90046,14534],{"class":160},[52,90048,89699],{"class":58},[52,90050,3121],{"class":622},[52,90052,90053],{"class":62},"'温馨的提示'",[52,90055,15391],{"class":622},[52,90057,90058],{"class":62},"'您没有删除权限操作'",[52,90060,170],{"class":622},[52,90062,90063],{"class":54,"line":35655},[52,90064,90065],{"class":332},"      \u002F\u002F 实例对象调用open方法\n",[52,90067,90068,90071,90073],{"class":54,"line":35661},[52,90069,90070],{"class":622},"      del.",[52,90072,89843],{"class":58},[52,90074,4938],{"class":622},[52,90076,90077],{"class":54,"line":35667},[52,90078,36393],{"class":622},[52,90080,90081],{"class":54,"line":35673},[52,90082,90083],{"class":332},"    \u002F\u002F 测试一下 点击 登录按钮\n",[52,90085,90086,90088,90090,90092,90095,90097,90099,90101,90103,90105,90107],{"class":54,"line":35679},[52,90087,55337],{"class":622},[52,90089,57329],{"class":58},[52,90091,3121],{"class":622},[52,90093,90094],{"class":62},"'#login'",[52,90096,33758],{"class":622},[52,90098,60743],{"class":58},[52,90100,3121],{"class":622},[52,90102,60748],{"class":62},[52,90104,89958],{"class":622},[52,90106,87650],{"class":160},[52,90108,18528],{"class":622},[52,90110,90111],{"class":54,"line":35685},[52,90112,90035],{"class":332},[52,90114,90115,90117,90120,90122,90124,90126,90128,90131,90133,90136],{"class":54,"line":35705},[52,90116,61158],{"class":160},[52,90118,90119],{"class":90}," log",[52,90121,16520],{"class":160},[52,90123,14534],{"class":160},[52,90125,89699],{"class":58},[52,90127,3121],{"class":622},[52,90129,90130],{"class":62},"'友情提示'",[52,90132,15391],{"class":622},[52,90134,90135],{"class":62},"'您还没有登录呢'",[52,90137,170],{"class":622},[52,90139,90140],{"class":54,"line":35711},[52,90141,90065],{"class":332},[52,90143,90144,90147,90149],{"class":54,"line":35727},[52,90145,90146],{"class":622},"      log.",[52,90148,89843],{"class":58},[52,90150,4938],{"class":622},[52,90152,90153],{"class":54,"line":35733},[52,90154,36393],{"class":622},[52,90156,90157],{"class":54,"line":35747},[52,90158,90159],{"class":332},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[52,90161,90162,90164,90166,90168,90170,90172,90174,90176],{"class":54,"line":35753},[52,90163,89834],{"class":90},[52,90165,3670],{"class":622},[52,90167,88507],{"class":90},[52,90169,3670],{"class":622},[52,90171,89986],{"class":58},[52,90173,16520],{"class":160},[52,90175,61848],{"class":160},[52,90177,57382],{"class":622},[52,90179,90180,90182,90184,90186],{"class":54,"line":35768},[52,90181,72980],{"class":90},[52,90183,89940],{"class":622},[52,90185,59936],{"class":58},[52,90187,4938],{"class":622},[52,90189,90190],{"class":54,"line":35774},[52,90191,5149],{"class":622},[52,90193,90194,90196,90198],{"class":54,"line":35783},[52,90195,55347],{"class":622},[52,90197,54744],{"class":54231},[52,90199,54238],{"class":622},[52,90201,90202,90204,90206],{"class":54,"line":35789},[52,90203,54716],{"class":622},[52,90205,54731],{"class":54231},[52,90207,54238],{"class":622},[52,90209,90210],{"class":54,"line":35798},[52,90211,116],{"emptyLinePlaceholder":115},[52,90213,90214,90216,90218],{"class":54,"line":35804},[52,90215,54716],{"class":622},[52,90217,53566],{"class":54231},[52,90219,54238],{"class":622},[274,90221,90222],{},[280,90223],{"alt":28,"src":90224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,90226,90228],{"id":90227},"_414-深浅拷贝","4.14 深浅拷贝",[30,90230,90232],{"id":90231},"_4141-浅拷贝","4.14.1 浅拷贝",[274,90234,90235],{},[280,90236],{"alt":28,"src":90237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[274,90239,90240],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[274,90242,90243],{},[280,90244],{"alt":28,"src":90245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[274,90247,90248],{},[280,90249],{"alt":28,"src":90250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[274,90252,90253],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[274,90255,90256],{},[280,90257],{"alt":28,"src":90258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[274,90260,14288],{},[274,90262,90263],{},[280,90264],{"alt":28,"src":90265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[30,90267,90269],{"id":90268},"_4142-深拷贝","4.14.2 深拷贝",[274,90271,90272],{},"深拷贝：拷贝的是对象，不是地址",[274,90274,90275],{},"常用的三种方法：",[1070,90277,90278,90281,90284],{},[1073,90279,90280],{},"通过递归实现深拷贝",[1073,90282,90283],{},"lodash\u002FcloneDeep",[1073,90285,90286],{},"通过JSON.stringify()实现",[1486,90288,90290],{"id":90289},"_41421-递归函数","4.14.2.1 递归函数",[274,90292,90293],{},[280,90294],{"alt":28,"src":90295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1070,90297,90298],{},[1073,90299,90300],{},"死递归占溢出：",[19,90302,90304],{"className":55997,"code":90303,"language":55999,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[26,90305,90306,90314,90322,90326,90331,90335,90340,90348],{"__ignoreMap":28},[52,90307,90308,90310,90312],{"class":54,"line":55},[52,90309,4022],{"class":622},[52,90311,54731],{"class":54231},[52,90313,54238],{"class":622},[52,90315,90316,90318,90320],{"class":54,"line":69},[52,90317,55075],{"class":622},[52,90319,54744],{"class":54231},[52,90321,54238],{"class":622},[52,90323,90324],{"class":54,"line":82},[52,90325,80071],{"class":622},[52,90327,90328],{"class":54,"line":97},[52,90329,90330],{"class":622},"      fn()\n",[52,90332,90333],{"class":54,"line":112},[52,90334,5149],{"class":622},[52,90336,90337],{"class":54,"line":119},[52,90338,90339],{"class":622},"    fn()\n",[52,90341,90342,90344,90346],{"class":54,"line":130},[52,90343,55347],{"class":622},[52,90345,54744],{"class":54231},[52,90347,54238],{"class":622},[52,90349,90350,90352,90354],{"class":54,"line":136},[52,90351,54716],{"class":622},[52,90353,54731],{"class":54231},[52,90355,54238],{"class":622},[1070,90357,90358],{"start":69},[1073,90359,90360],{},"递归函数要加判断条件：",[274,90362,90363],{},[280,90364],{"alt":28,"src":90365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1070,90367,90368],{"start":82},[1073,90369,90370],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[19,90372,90374],{"className":53564,"code":90373,"language":53566,"meta":28,"style":28},"\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",[26,90375,90376,90386,90400,90404,90412,90426,90446,90458,90466,90470,90478,90490,90498,90506,90531,90543,90547,90554,90562,90570,90574],{"__ignoreMap":28},[52,90377,90378,90380,90382,90384],{"class":54,"line":55},[52,90379,54228],{"class":622},[52,90381,54232],{"class":54231},[52,90383,54235],{"class":58},[52,90385,54238],{"class":622},[52,90387,90388,90390,90392,90394,90396,90398],{"class":54,"line":69},[52,90389,4022],{"class":622},[52,90391,53566],{"class":54231},[52,90393,54247],{"class":58},[52,90395,2099],{"class":622},[52,90397,54252],{"class":62},[52,90399,54238],{"class":622},[52,90401,90402],{"class":54,"line":82},[52,90403,116],{"emptyLinePlaceholder":115},[52,90405,90406,90408,90410],{"class":54,"line":97},[52,90407,4022],{"class":622},[52,90409,54265],{"class":54231},[52,90411,54238],{"class":622},[52,90413,90414,90416,90418,90420,90422,90424],{"class":54,"line":112},[52,90415,55075],{"class":622},[52,90417,54275],{"class":54231},[52,90419,54278],{"class":58},[52,90421,2099],{"class":622},[52,90423,54283],{"class":62},[52,90425,54238],{"class":622},[52,90427,90428,90430,90432,90434,90436,90438,90440,90442,90444],{"class":54,"line":119},[52,90429,55075],{"class":622},[52,90431,54275],{"class":54231},[52,90433,17876],{"class":58},[52,90435,2099],{"class":622},[52,90437,54322],{"class":62},[52,90439,54302],{"class":58},[52,90441,2099],{"class":622},[52,90443,54329],{"class":62},[52,90445,54238],{"class":622},[52,90447,90448,90450,90452,90454,90456],{"class":54,"line":130},[52,90449,55075],{"class":622},[52,90451,54338],{"class":54231},[52,90453,54341],{"class":622},[52,90455,54338],{"class":54231},[52,90457,54238],{"class":622},[52,90459,90460,90462,90464],{"class":54,"line":136},[52,90461,54716],{"class":622},[52,90463,54265],{"class":54231},[52,90465,54238],{"class":622},[52,90467,90468],{"class":54,"line":141},[52,90469,116],{"emptyLinePlaceholder":115},[52,90471,90472,90474,90476],{"class":54,"line":146},[52,90473,4022],{"class":622},[52,90475,54731],{"class":54231},[52,90477,54238],{"class":622},[52,90479,90480,90482,90484,90486,90488],{"class":54,"line":152},[52,90481,55075],{"class":622},[52,90483,54542],{"class":54231},[52,90485,58244],{"class":622},[52,90487,54542],{"class":54231},[52,90489,54238],{"class":622},[52,90491,90492,90494,90496],{"class":54,"line":157},[52,90493,55075],{"class":622},[52,90495,54744],{"class":54231},[52,90497,54238],{"class":622},[52,90499,90500,90502,90504],{"class":54,"line":173},[52,90501,73013],{"class":160},[52,90503,76701],{"class":58},[52,90505,13809],{"class":622},[52,90507,90508,90510,90512,90514,90516,90518,90520,90522,90524,90526,90529],{"class":54,"line":178},[52,90509,58701],{"class":622},[52,90511,57329],{"class":58},[52,90513,3121],{"class":622},[52,90515,84859],{"class":62},[52,90517,77177],{"class":622},[52,90519,2099],{"class":160},[52,90521,14534],{"class":160},[52,90523,76717],{"class":58},[52,90525,20217],{"class":622},[52,90527,90528],{"class":58},"toLocaleString",[52,90530,4938],{"class":622},[52,90532,90533,90536,90539,90541],{"class":54,"line":184},[52,90534,90535],{"class":58},"      setTimeout",[52,90537,90538],{"class":622},"(getTime, ",[52,90540,9366],{"class":90},[52,90542,170],{"class":622},[52,90544,90545],{"class":54,"line":189},[52,90546,5149],{"class":622},[52,90548,90549,90552],{"class":54,"line":201},[52,90550,90551],{"class":58},"    getTime",[52,90553,4938],{"class":622},[52,90555,90556,90558,90560],{"class":54,"line":206},[52,90557,55347],{"class":622},[52,90559,54744],{"class":54231},[52,90561,54238],{"class":622},[52,90563,90564,90566,90568],{"class":54,"line":224},[52,90565,54716],{"class":622},[52,90567,54731],{"class":54231},[52,90569,54238],{"class":622},[52,90571,90572],{"class":54,"line":229},[52,90573,116],{"emptyLinePlaceholder":115},[52,90575,90576,90578,90580],{"class":54,"line":241},[52,90577,54716],{"class":622},[52,90579,53566],{"class":54231},[52,90581,54238],{"class":622},[274,90583,90584],{},[280,90585],{"alt":28,"src":90586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1070,90588,90589],{"start":97},[1073,90590,90280],{},[274,90592,90593],{},[280,90594],{"alt":28,"src":90595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[274,90597,90598],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[274,90600,42121],{},[274,90602,90603],{},"这个是简易版的递归函数深拷贝",[274,90605,90606],{},"一定要注意先数组再对象，因为万物皆可对象",[19,90608,90610],{"className":53564,"code":90609,"language":53566,"meta":28,"style":28},"\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",[26,90611,90612,90622,90636,90640,90648,90662,90682,90694,90702,90706,90714,90722,90732,90741,90749,90765,90769,90777,90781,90785,90797,90802,90821,90837,90842,90847,90852,90867,90872,90877,90886,90894,90911,90919,90925,90933,90938,90943,90952,90956,90960,90964,90975,90984,90994,91008,91018,91026,91034,91042,91046],{"__ignoreMap":28},[52,90613,90614,90616,90618,90620],{"class":54,"line":55},[52,90615,54228],{"class":622},[52,90617,54232],{"class":54231},[52,90619,54235],{"class":58},[52,90621,54238],{"class":622},[52,90623,90624,90626,90628,90630,90632,90634],{"class":54,"line":69},[52,90625,4022],{"class":622},[52,90627,53566],{"class":54231},[52,90629,54247],{"class":58},[52,90631,2099],{"class":622},[52,90633,54252],{"class":62},[52,90635,54238],{"class":622},[52,90637,90638],{"class":54,"line":82},[52,90639,116],{"emptyLinePlaceholder":115},[52,90641,90642,90644,90646],{"class":54,"line":97},[52,90643,4022],{"class":622},[52,90645,54265],{"class":54231},[52,90647,54238],{"class":622},[52,90649,90650,90652,90654,90656,90658,90660],{"class":54,"line":112},[52,90651,55075],{"class":622},[52,90653,54275],{"class":54231},[52,90655,54278],{"class":58},[52,90657,2099],{"class":622},[52,90659,54283],{"class":62},[52,90661,54238],{"class":622},[52,90663,90664,90666,90668,90670,90672,90674,90676,90678,90680],{"class":54,"line":119},[52,90665,55075],{"class":622},[52,90667,54275],{"class":54231},[52,90669,17876],{"class":58},[52,90671,2099],{"class":622},[52,90673,54322],{"class":62},[52,90675,54302],{"class":58},[52,90677,2099],{"class":622},[52,90679,54329],{"class":62},[52,90681,54238],{"class":622},[52,90683,90684,90686,90688,90690,90692],{"class":54,"line":130},[52,90685,55075],{"class":622},[52,90687,54338],{"class":54231},[52,90689,54341],{"class":622},[52,90691,54338],{"class":54231},[52,90693,54238],{"class":622},[52,90695,90696,90698,90700],{"class":54,"line":136},[52,90697,54716],{"class":622},[52,90699,54265],{"class":54231},[52,90701,54238],{"class":622},[52,90703,90704],{"class":54,"line":141},[52,90705,116],{"emptyLinePlaceholder":115},[52,90707,90708,90710,90712],{"class":54,"line":146},[52,90709,4022],{"class":622},[52,90711,54731],{"class":54231},[52,90713,54238],{"class":622},[52,90715,90716,90718,90720],{"class":54,"line":152},[52,90717,55075],{"class":622},[52,90719,54744],{"class":54231},[52,90721,54238],{"class":622},[52,90723,90724,90726,90728,90730],{"class":54,"line":157},[52,90725,14177],{"class":160},[52,90727,72900],{"class":90},[52,90729,16520],{"class":160},[52,90731,18528],{"class":622},[52,90733,90734,90736,90739],{"class":54,"line":173},[52,90735,74544],{"class":622},[52,90737,90738],{"class":62},"'pink'",[52,90740,34398],{"class":622},[52,90742,90743,90745,90747],{"class":54,"line":178},[52,90744,74554],{"class":622},[52,90746,3762],{"class":90},[52,90748,34398],{"class":622},[52,90750,90751,90754,90757,90759,90762],{"class":54,"line":184},[52,90752,90753],{"class":622},"      hobby: [",[52,90755,90756],{"class":62},"'乒乓球'",[52,90758,15391],{"class":622},[52,90760,90761],{"class":62},"'足球'",[52,90763,90764],{"class":622},"],\n",[52,90766,90767],{"class":54,"line":189},[52,90768,80800],{"class":622},[52,90770,90771,90774],{"class":54,"line":201},[52,90772,90773],{"class":622},"        baby: ",[52,90775,90776],{"class":62},"'小pink'\n",[52,90778,90779],{"class":54,"line":206},[52,90780,55328],{"class":622},[52,90782,90783],{"class":54,"line":224},[52,90784,5149],{"class":622},[52,90786,90787,90789,90792,90794],{"class":54,"line":229},[52,90788,14177],{"class":160},[52,90790,90791],{"class":90}," o",[52,90793,16520],{"class":160},[52,90795,90796],{"class":622}," {}\n",[52,90798,90799],{"class":54,"line":241},[52,90800,90801],{"class":332},"    \u002F\u002F 拷贝函数\n",[52,90803,90804,90806,90809,90811,90814,90816,90819],{"class":54,"line":246},[52,90805,73013],{"class":160},[52,90807,90808],{"class":58}," deepCopy",[52,90810,3121],{"class":622},[52,90812,90813],{"class":8172},"newObj",[52,90815,15391],{"class":622},[52,90817,90818],{"class":8172},"oldObj",[52,90820,15398],{"class":622},[52,90822,90823,90825,90827,90829,90832,90834],{"class":54,"line":252},[52,90824,55214],{"class":160},[52,90826,4629],{"class":622},[52,90828,54778],{"class":160},[52,90830,90831],{"class":622}," k ",[52,90833,28988],{"class":160},[52,90835,90836],{"class":622}," oldObj) {\n",[52,90838,90839],{"class":54,"line":257},[52,90840,90841],{"class":332},"        \u002F\u002F 处理数组的问题\n",[52,90843,90844],{"class":54,"line":266},[52,90845,90846],{"class":332},"        \u002F\u002F 判断是否属于数组\n",[52,90848,90849],{"class":54,"line":4722},[52,90850,90851],{"class":332},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[52,90853,90854,90856,90859,90862,90865],{"class":54,"line":4727},[52,90855,5458],{"class":160},[52,90857,90858],{"class":622}," (oldObj[k] ",[52,90860,90861],{"class":160},"instanceof",[52,90863,90864],{"class":58}," Array",[52,90866,15398],{"class":622},[52,90868,90869],{"class":54,"line":4741},[52,90870,90871],{"class":332},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[52,90873,90874],{"class":54,"line":4746},[52,90875,90876],{"class":332},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[52,90878,90879,90882,90884],{"class":54,"line":5538},[52,90880,90881],{"class":622},"          newObj[k] ",[52,90883,2099],{"class":160},[52,90885,54769],{"class":622},[52,90887,90888,90891],{"class":54,"line":5552},[52,90889,90890],{"class":58},"          deepCopy",[52,90892,90893],{"class":622},"(newObj[k], oldObj[k])\n",[52,90895,90896,90898,90900,90902,90904,90906,90909],{"class":54,"line":5560},[52,90897,83008],{"class":622},[52,90899,4668],{"class":160},[52,90901,4671],{"class":160},[52,90903,90858],{"class":622},[52,90905,90861],{"class":160},[52,90907,90908],{"class":58}," Object",[52,90910,15398],{"class":622},[52,90912,90913,90915,90917],{"class":54,"line":5565},[52,90914,90881],{"class":622},[52,90916,2099],{"class":160},[52,90918,90796],{"class":622},[52,90920,90921,90923],{"class":54,"line":5571},[52,90922,90890],{"class":58},[52,90924,90893],{"class":622},[52,90926,90927,90929,90931],{"class":54,"line":5577},[52,90928,83008],{"class":622},[52,90930,4668],{"class":160},[52,90932,18528],{"class":622},[52,90934,90935],{"class":54,"line":5582},[52,90936,90937],{"class":332},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[52,90939,90940],{"class":54,"line":10904},[52,90941,90942],{"class":332},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[52,90944,90945,90947,90949],{"class":54,"line":10928},[52,90946,90881],{"class":622},[52,90948,2099],{"class":160},[52,90950,90951],{"class":622}," oldObj[k]\n",[52,90953,90954],{"class":54,"line":10933},[52,90955,5490],{"class":622},[52,90957,90958],{"class":54,"line":10939},[52,90959,55328],{"class":622},[52,90961,90962],{"class":54,"line":10966},[52,90963,5149],{"class":622},[52,90965,90966,90969,90972],{"class":54,"line":10971},[52,90967,90968],{"class":58},"    deepCopy",[52,90970,90971],{"class":622},"(o, obj) ",[52,90973,90974],{"class":332},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[52,90976,90977,90979,90981],{"class":54,"line":10977},[52,90978,76681],{"class":622},[52,90980,61177],{"class":58},[52,90982,90983],{"class":622},"(o)\n",[52,90985,90986,90989,90991],{"class":54,"line":10989},[52,90987,90988],{"class":622},"    o.age ",[52,90990,2099],{"class":160},[52,90992,90993],{"class":90}," 20\n",[52,90995,90996,90999,91001,91003,91005],{"class":54,"line":11001},[52,90997,90998],{"class":622},"    o.hobby[",[52,91000,3306],{"class":90},[52,91002,7402],{"class":622},[52,91004,2099],{"class":160},[52,91006,91007],{"class":62}," '篮球'\n",[52,91009,91010,91013,91015],{"class":54,"line":11013},[52,91011,91012],{"class":622},"    o.family ",[52,91014,2099],{"class":160},[52,91016,91017],{"class":62}," '老pink'\n",[52,91019,91020,91022,91024],{"class":54,"line":12672},[52,91021,76681],{"class":622},[52,91023,61177],{"class":58},[52,91025,72965],{"class":622},[52,91027,91028,91030,91032],{"class":54,"line":12697},[52,91029,55347],{"class":622},[52,91031,54744],{"class":54231},[52,91033,54238],{"class":622},[52,91035,91036,91038,91040],{"class":54,"line":12720},[52,91037,54716],{"class":622},[52,91039,54731],{"class":54231},[52,91041,54238],{"class":622},[52,91043,91044],{"class":54,"line":12744},[52,91045,116],{"emptyLinePlaceholder":115},[52,91047,91048,91050,91052],{"class":54,"line":12749},[52,91049,54716],{"class":622},[52,91051,53566],{"class":54231},[52,91053,54238],{"class":622},[274,91055,91056],{},[280,91057],{"alt":28,"src":91058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[1486,91060,91062,91063],{"id":91061},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[538,91064,91065],{},"js库lodash里面cloneDeep内部实现了深拷贝",[274,91067,91068],{},[300,91069,91070],{"href":91070,"rel":91071},"https:\u002F\u002Fwww.lodashjs.com\u002F",[304],[274,91073,91074],{},"lodash里边的方法都要加上一个下划线_",[274,91076,91077],{},"_.cloneDeep()",[19,91079,91081],{"className":53564,"code":91080,"language":53566,"meta":28,"style":28},"\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",[26,91082,91083,91093,91107,91111,91119,91133,91153,91165,91173,91177,91185,91190,91209,91217,91227,91235,91243,91255,91259,91265,91269,91273,91289,91297,91306,91314,91322,91330,91334],{"__ignoreMap":28},[52,91084,91085,91087,91089,91091],{"class":54,"line":55},[52,91086,54228],{"class":622},[52,91088,54232],{"class":54231},[52,91090,54235],{"class":58},[52,91092,54238],{"class":622},[52,91094,91095,91097,91099,91101,91103,91105],{"class":54,"line":69},[52,91096,4022],{"class":622},[52,91098,53566],{"class":54231},[52,91100,54247],{"class":58},[52,91102,2099],{"class":622},[52,91104,54252],{"class":62},[52,91106,54238],{"class":622},[52,91108,91109],{"class":54,"line":82},[52,91110,116],{"emptyLinePlaceholder":115},[52,91112,91113,91115,91117],{"class":54,"line":97},[52,91114,4022],{"class":622},[52,91116,54265],{"class":54231},[52,91118,54238],{"class":622},[52,91120,91121,91123,91125,91127,91129,91131],{"class":54,"line":112},[52,91122,55075],{"class":622},[52,91124,54275],{"class":54231},[52,91126,54278],{"class":58},[52,91128,2099],{"class":622},[52,91130,54283],{"class":62},[52,91132,54238],{"class":622},[52,91134,91135,91137,91139,91141,91143,91145,91147,91149,91151],{"class":54,"line":119},[52,91136,55075],{"class":622},[52,91138,54275],{"class":54231},[52,91140,17876],{"class":58},[52,91142,2099],{"class":622},[52,91144,54322],{"class":62},[52,91146,54302],{"class":58},[52,91148,2099],{"class":622},[52,91150,54329],{"class":62},[52,91152,54238],{"class":622},[52,91154,91155,91157,91159,91161,91163],{"class":54,"line":130},[52,91156,55075],{"class":622},[52,91158,54338],{"class":54231},[52,91160,54341],{"class":622},[52,91162,54338],{"class":54231},[52,91164,54238],{"class":622},[52,91166,91167,91169,91171],{"class":54,"line":136},[52,91168,54716],{"class":622},[52,91170,54265],{"class":54231},[52,91172,54238],{"class":622},[52,91174,91175],{"class":54,"line":141},[52,91176,116],{"emptyLinePlaceholder":115},[52,91178,91179,91181,91183],{"class":54,"line":146},[52,91180,4022],{"class":622},[52,91182,54731],{"class":54231},[52,91184,54238],{"class":622},[52,91186,91187],{"class":54,"line":152},[52,91188,91189],{"class":332},"  \u003C!-- 先引用这个库 -->\n",[52,91191,91192,91194,91196,91198,91200,91203,91205,91207],{"class":54,"line":157},[52,91193,55075],{"class":622},[52,91195,54744],{"class":54231},[52,91197,58169],{"class":58},[52,91199,2099],{"class":622},[52,91201,91202],{"class":62},"\"lodash.min.js\"",[52,91204,58244],{"class":622},[52,91206,54744],{"class":54231},[52,91208,54238],{"class":622},[52,91210,91211,91213,91215],{"class":54,"line":173},[52,91212,55075],{"class":622},[52,91214,54744],{"class":54231},[52,91216,54238],{"class":622},[52,91218,91219,91221,91223,91225],{"class":54,"line":178},[52,91220,14177],{"class":160},[52,91222,72900],{"class":90},[52,91224,16520],{"class":160},[52,91226,18528],{"class":622},[52,91228,91229,91231,91233],{"class":54,"line":184},[52,91230,74544],{"class":622},[52,91232,90738],{"class":62},[52,91234,34398],{"class":622},[52,91236,91237,91239,91241],{"class":54,"line":189},[52,91238,74554],{"class":622},[52,91240,3762],{"class":90},[52,91242,34398],{"class":622},[52,91244,91245,91247,91249,91251,91253],{"class":54,"line":201},[52,91246,90753],{"class":622},[52,91248,90756],{"class":62},[52,91250,15391],{"class":622},[52,91252,90761],{"class":62},[52,91254,90764],{"class":622},[52,91256,91257],{"class":54,"line":206},[52,91258,80800],{"class":622},[52,91260,91261,91263],{"class":54,"line":224},[52,91262,90773],{"class":622},[52,91264,90776],{"class":62},[52,91266,91267],{"class":54,"line":229},[52,91268,55328],{"class":622},[52,91270,91271],{"class":54,"line":241},[52,91272,5149],{"class":622},[52,91274,91275,91277,91279,91281,91284,91287],{"class":54,"line":246},[52,91276,14177],{"class":160},[52,91278,90791],{"class":90},[52,91280,16520],{"class":160},[52,91282,91283],{"class":622}," _.",[52,91285,91286],{"class":58},"cloneDeep",[52,91288,72965],{"class":622},[52,91290,91291,91293,91295],{"class":54,"line":252},[52,91292,76681],{"class":622},[52,91294,61177],{"class":58},[52,91296,90983],{"class":622},[52,91298,91299,91302,91304],{"class":54,"line":257},[52,91300,91301],{"class":622},"    o.family.baby ",[52,91303,2099],{"class":160},[52,91305,91017],{"class":62},[52,91307,91308,91310,91312],{"class":54,"line":266},[52,91309,76681],{"class":622},[52,91311,61177],{"class":58},[52,91313,72965],{"class":622},[52,91315,91316,91318,91320],{"class":54,"line":4722},[52,91317,55347],{"class":622},[52,91319,54744],{"class":54231},[52,91321,54238],{"class":622},[52,91323,91324,91326,91328],{"class":54,"line":4727},[52,91325,54716],{"class":622},[52,91327,54731],{"class":54231},[52,91329,54238],{"class":622},[52,91331,91332],{"class":54,"line":4741},[52,91333,116],{"emptyLinePlaceholder":115},[52,91335,91336,91338,91340],{"class":54,"line":4746},[52,91337,54716],{"class":622},[52,91339,53566],{"class":54231},[52,91341,54238],{"class":622},[274,91343,91344],{},[280,91345],{"alt":28,"src":91346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[1486,91348,91350],{"id":91349},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[19,91352,91354],{"className":53564,"code":91353,"language":53566,"meta":28,"style":28},"\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",[26,91355,91356,91366,91380,91384,91392,91406,91426,91438,91446,91450,91458,91466,91476,91484,91492,91504,91508,91514,91518,91522,91527,91532,91537,91563,91571,91580,91588,91596,91604,91608],{"__ignoreMap":28},[52,91357,91358,91360,91362,91364],{"class":54,"line":55},[52,91359,54228],{"class":622},[52,91361,54232],{"class":54231},[52,91363,54235],{"class":58},[52,91365,54238],{"class":622},[52,91367,91368,91370,91372,91374,91376,91378],{"class":54,"line":69},[52,91369,4022],{"class":622},[52,91371,53566],{"class":54231},[52,91373,54247],{"class":58},[52,91375,2099],{"class":622},[52,91377,54252],{"class":62},[52,91379,54238],{"class":622},[52,91381,91382],{"class":54,"line":82},[52,91383,116],{"emptyLinePlaceholder":115},[52,91385,91386,91388,91390],{"class":54,"line":97},[52,91387,4022],{"class":622},[52,91389,54265],{"class":54231},[52,91391,54238],{"class":622},[52,91393,91394,91396,91398,91400,91402,91404],{"class":54,"line":112},[52,91395,55075],{"class":622},[52,91397,54275],{"class":54231},[52,91399,54278],{"class":58},[52,91401,2099],{"class":622},[52,91403,54283],{"class":62},[52,91405,54238],{"class":622},[52,91407,91408,91410,91412,91414,91416,91418,91420,91422,91424],{"class":54,"line":119},[52,91409,55075],{"class":622},[52,91411,54275],{"class":54231},[52,91413,17876],{"class":58},[52,91415,2099],{"class":622},[52,91417,54322],{"class":62},[52,91419,54302],{"class":58},[52,91421,2099],{"class":622},[52,91423,54329],{"class":62},[52,91425,54238],{"class":622},[52,91427,91428,91430,91432,91434,91436],{"class":54,"line":130},[52,91429,55075],{"class":622},[52,91431,54338],{"class":54231},[52,91433,54341],{"class":622},[52,91435,54338],{"class":54231},[52,91437,54238],{"class":622},[52,91439,91440,91442,91444],{"class":54,"line":136},[52,91441,54716],{"class":622},[52,91443,54265],{"class":54231},[52,91445,54238],{"class":622},[52,91447,91448],{"class":54,"line":141},[52,91449,116],{"emptyLinePlaceholder":115},[52,91451,91452,91454,91456],{"class":54,"line":146},[52,91453,4022],{"class":622},[52,91455,54731],{"class":54231},[52,91457,54238],{"class":622},[52,91459,91460,91462,91464],{"class":54,"line":152},[52,91461,55075],{"class":622},[52,91463,54744],{"class":54231},[52,91465,54238],{"class":622},[52,91467,91468,91470,91472,91474],{"class":54,"line":157},[52,91469,14177],{"class":160},[52,91471,72900],{"class":90},[52,91473,16520],{"class":160},[52,91475,18528],{"class":622},[52,91477,91478,91480,91482],{"class":54,"line":173},[52,91479,74544],{"class":622},[52,91481,90738],{"class":62},[52,91483,34398],{"class":622},[52,91485,91486,91488,91490],{"class":54,"line":178},[52,91487,74554],{"class":622},[52,91489,3762],{"class":90},[52,91491,34398],{"class":622},[52,91493,91494,91496,91498,91500,91502],{"class":54,"line":184},[52,91495,90753],{"class":622},[52,91497,90756],{"class":62},[52,91499,15391],{"class":622},[52,91501,90761],{"class":62},[52,91503,90764],{"class":622},[52,91505,91506],{"class":54,"line":189},[52,91507,80800],{"class":622},[52,91509,91510,91512],{"class":54,"line":201},[52,91511,90773],{"class":622},[52,91513,90776],{"class":62},[52,91515,91516],{"class":54,"line":206},[52,91517,55328],{"class":622},[52,91519,91520],{"class":54,"line":224},[52,91521,5149],{"class":622},[52,91523,91524],{"class":54,"line":229},[52,91525,91526],{"class":332},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[52,91528,91529],{"class":54,"line":241},[52,91530,91531],{"class":332},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[52,91533,91534],{"class":54,"line":246},[52,91535,91536],{"class":332},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[52,91538,91539,91541,91543,91545,91548,91550,91553,91555,91557,91559,91561],{"class":54,"line":252},[52,91540,14177],{"class":160},[52,91542,90791],{"class":90},[52,91544,16520],{"class":160},[52,91546,91547],{"class":90}," JSON",[52,91549,3670],{"class":622},[52,91551,91552],{"class":58},"parse",[52,91554,3121],{"class":622},[52,91556,74592],{"class":90},[52,91558,3670],{"class":622},[52,91560,74597],{"class":58},[52,91562,74600],{"class":622},[52,91564,91565,91567,91569],{"class":54,"line":257},[52,91566,76681],{"class":622},[52,91568,61177],{"class":58},[52,91570,90983],{"class":622},[52,91572,91573,91575,91577],{"class":54,"line":266},[52,91574,91301],{"class":622},[52,91576,2099],{"class":160},[52,91578,91579],{"class":62}," '123'\n",[52,91581,91582,91584,91586],{"class":54,"line":4722},[52,91583,76681],{"class":622},[52,91585,61177],{"class":58},[52,91587,72965],{"class":622},[52,91589,91590,91592,91594],{"class":54,"line":4727},[52,91591,55347],{"class":622},[52,91593,54744],{"class":54231},[52,91595,54238],{"class":622},[52,91597,91598,91600,91602],{"class":54,"line":4741},[52,91599,54716],{"class":622},[52,91601,54731],{"class":54231},[52,91603,54238],{"class":622},[52,91605,91606],{"class":54,"line":4746},[52,91607,116],{"emptyLinePlaceholder":115},[52,91609,91610,91612,91614],{"class":54,"line":5538},[52,91611,54716],{"class":622},[52,91613,53566],{"class":54231},[52,91615,54238],{"class":622},[274,91617,91618],{},[280,91619],{"alt":28,"src":91620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,91622,91624],{"id":91623},"_415-异常处理","4.15 异常处理",[1070,91626,91627],{},[1073,91628,91629],{},"throw抛异常",[274,91631,91632],{},[280,91633],{"alt":28,"src":91634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1070,91636,91637],{"start":69},[1073,91638,91639],{},"try\u002Fcatch 捕获错误信息",[274,91641,91642],{},[280,91643],{"alt":28,"src":91644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[19,91646,91648],{"className":53564,"code":91647,"language":53566,"meta":28,"style":28},"\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",[26,91649,91650,91660,91674,91678,91686,91700,91720,91732,91740,91744,91752,91764,91772,91781,91788,91793,91812,91821,91832,91837,91847,91852,91857,91862,91879,91883,91888,91895,91907,91911,91923,91927,91931,91936,91941,91948,91956,91964,91968],{"__ignoreMap":28},[52,91651,91652,91654,91656,91658],{"class":54,"line":55},[52,91653,54228],{"class":622},[52,91655,54232],{"class":54231},[52,91657,54235],{"class":58},[52,91659,54238],{"class":622},[52,91661,91662,91664,91666,91668,91670,91672],{"class":54,"line":69},[52,91663,4022],{"class":622},[52,91665,53566],{"class":54231},[52,91667,54247],{"class":58},[52,91669,2099],{"class":622},[52,91671,54252],{"class":62},[52,91673,54238],{"class":622},[52,91675,91676],{"class":54,"line":82},[52,91677,116],{"emptyLinePlaceholder":115},[52,91679,91680,91682,91684],{"class":54,"line":97},[52,91681,4022],{"class":622},[52,91683,54265],{"class":54231},[52,91685,54238],{"class":622},[52,91687,91688,91690,91692,91694,91696,91698],{"class":54,"line":112},[52,91689,55075],{"class":622},[52,91691,54275],{"class":54231},[52,91693,54278],{"class":58},[52,91695,2099],{"class":622},[52,91697,54283],{"class":62},[52,91699,54238],{"class":622},[52,91701,91702,91704,91706,91708,91710,91712,91714,91716,91718],{"class":54,"line":119},[52,91703,55075],{"class":622},[52,91705,54275],{"class":54231},[52,91707,17876],{"class":58},[52,91709,2099],{"class":622},[52,91711,54322],{"class":62},[52,91713,54302],{"class":58},[52,91715,2099],{"class":622},[52,91717,54329],{"class":62},[52,91719,54238],{"class":622},[52,91721,91722,91724,91726,91728,91730],{"class":54,"line":130},[52,91723,55075],{"class":622},[52,91725,54338],{"class":54231},[52,91727,54341],{"class":622},[52,91729,54338],{"class":54231},[52,91731,54238],{"class":622},[52,91733,91734,91736,91738],{"class":54,"line":136},[52,91735,54716],{"class":622},[52,91737,54265],{"class":54231},[52,91739,54238],{"class":622},[52,91741,91742],{"class":54,"line":141},[52,91743,116],{"emptyLinePlaceholder":115},[52,91745,91746,91748,91750],{"class":54,"line":146},[52,91747,4022],{"class":622},[52,91749,54731],{"class":54231},[52,91751,54238],{"class":622},[52,91753,91754,91756,91758,91760,91762],{"class":54,"line":152},[52,91755,55075],{"class":622},[52,91757,274],{"class":54231},[52,91759,56424],{"class":622},[52,91761,274],{"class":54231},[52,91763,54238],{"class":622},[52,91765,91766,91768,91770],{"class":54,"line":157},[52,91767,55075],{"class":622},[52,91769,54744],{"class":54231},[52,91771,54238],{"class":622},[52,91773,91774,91776,91779],{"class":54,"line":173},[52,91775,73013],{"class":160},[52,91777,91778],{"class":58}," fn",[52,91780,13809],{"class":622},[52,91782,91783,91786],{"class":54,"line":178},[52,91784,91785],{"class":160},"      try",[52,91787,18528],{"class":622},[52,91789,91790],{"class":54,"line":184},[52,91791,91792],{"class":332},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[52,91794,91795,91797,91799,91801,91803,91805,91807,91810],{"class":54,"line":189},[52,91796,64200],{"class":160},[52,91798,9781],{"class":90},[52,91800,16520],{"class":160},[52,91802,57326],{"class":622},[52,91804,57329],{"class":58},[52,91806,3121],{"class":622},[52,91808,91809],{"class":62},"'.p'",[52,91811,170],{"class":622},[52,91813,91814,91817,91819],{"class":54,"line":201},[52,91815,91816],{"class":622},"        p.style.color ",[52,91818,2099],{"class":160},[52,91820,69980],{"class":62},[52,91822,91823,91826,91829],{"class":54,"line":206},[52,91824,91825],{"class":622},"      } ",[52,91827,91828],{"class":160},"catch",[52,91830,91831],{"class":622}," (err) {\n",[52,91833,91834],{"class":54,"line":224},[52,91835,91836],{"class":332},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[52,91838,91839,91842,91844],{"class":54,"line":229},[52,91840,91841],{"class":622},"        console.",[52,91843,61177],{"class":58},[52,91845,91846],{"class":622},"(err.message)\n",[52,91848,91849],{"class":54,"line":241},[52,91850,91851],{"class":332},"        \u002F\u002F 想要中断程序，需要加return\n",[52,91853,91854],{"class":54,"line":246},[52,91855,91856],{"class":332},"        \u002F\u002F return\n",[52,91858,91859],{"class":54,"line":252},[52,91860,91861],{"class":332},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[52,91863,91864,91867,91869,91872,91874,91877],{"class":54,"line":257},[52,91865,91866],{"class":160},"        throw",[52,91868,14534],{"class":160},[52,91870,91871],{"class":58}," Error",[52,91873,3121],{"class":622},[52,91875,91876],{"class":62},"'你看看，选择器错误了吧'",[52,91878,170],{"class":622},[52,91880,91881],{"class":54,"line":266},[52,91882,55328],{"class":622},[52,91884,91885],{"class":54,"line":4722},[52,91886,91887],{"class":332},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[52,91889,91890,91893],{"class":54,"line":4727},[52,91891,91892],{"class":160},"      finally",[52,91894,18528],{"class":622},[52,91896,91897,91900,91902,91905],{"class":54,"line":4741},[52,91898,91899],{"class":58},"        alert",[52,91901,3121],{"class":622},[52,91903,91904],{"class":62},"'弹出对话框'",[52,91906,170],{"class":622},[52,91908,91909],{"class":54,"line":4746},[52,91910,55328],{"class":622},[52,91912,91913,91915,91917,91919,91921],{"class":54,"line":5538},[52,91914,61174],{"class":622},[52,91916,61177],{"class":58},[52,91918,3121],{"class":622},[52,91920,3584],{"class":90},[52,91922,170],{"class":622},[52,91924,91925],{"class":54,"line":5552},[52,91926,116],{"emptyLinePlaceholder":115},[52,91928,91929],{"class":54,"line":5560},[52,91930,5149],{"class":622},[52,91932,91933],{"class":54,"line":5565},[52,91934,91935],{"class":332},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[52,91937,91938],{"class":54,"line":5571},[52,91939,91940],{"class":332},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[52,91942,91943,91946],{"class":54,"line":5577},[52,91944,91945],{"class":58},"    fn",[52,91947,4938],{"class":622},[52,91949,91950,91952,91954],{"class":54,"line":5582},[52,91951,55347],{"class":622},[52,91953,54744],{"class":54231},[52,91955,54238],{"class":622},[52,91957,91958,91960,91962],{"class":54,"line":10904},[52,91959,54716],{"class":622},[52,91961,54731],{"class":54231},[52,91963,54238],{"class":622},[52,91965,91966],{"class":54,"line":10928},[52,91967,116],{"emptyLinePlaceholder":115},[52,91969,91970,91972,91974],{"class":54,"line":10933},[52,91971,54716],{"class":622},[52,91973,53566],{"class":54231},[52,91975,54238],{"class":622},[274,91977,91978],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1070,91980,91981],{"start":82},[1073,91982,91983],{},"debugger",[274,91985,91986],{},[280,91987],{"alt":28,"src":91988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[274,91990,91991],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91993,91995],{"id":91994},"_416-处理this","4.16 处理this",[30,91997,91999],{"id":91998},"_4161-this的指向","4.16.1 this的指向",[1070,92001,92002],{},[1073,92003,92004],{},"普通函数的this",[274,92006,92007],{},[280,92008],{"alt":28,"src":92009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1070,92011,92012],{"start":69},[1073,92013,92014],{},"箭头函数的this",[274,92016,92017],{},[280,92018],{"alt":28,"src":92019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[274,92021,92022],{},[280,92023],{"alt":28,"src":92024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[274,92026,92027],{},[280,92028],{"alt":28,"src":92029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[30,92031,92033],{"id":92032},"_4162-this的改变","4.16.2 this的改变",[274,92035,92036],{},"call() apply() bind()",[1070,92038,92039],{},[1073,92040,92041],{},"call()",[274,92043,92044],{},[280,92045],{"alt":28,"src":92046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[274,92048,92049],{},"两个作用：①调用函数；②改变this指向",[19,92051,92053],{"className":55997,"code":92052,"language":55999,"meta":28,"style":28},"\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",[26,92054,92055,92063,92071,92075,92080,92084,92089,92094,92099,92103,92108,92116],{"__ignoreMap":28},[52,92056,92057,92059,92061],{"class":54,"line":55},[52,92058,4022],{"class":622},[52,92060,54731],{"class":54231},[52,92062,54238],{"class":622},[52,92064,92065,92067,92069],{"class":54,"line":69},[52,92066,55075],{"class":622},[52,92068,54744],{"class":54231},[52,92070,54238],{"class":622},[52,92072,92073],{"class":54,"line":82},[52,92074,74451],{"class":622},[52,92076,92077],{"class":54,"line":97},[52,92078,92079],{"class":622},"      uname: 'pink'\n",[52,92081,92082],{"class":54,"line":112},[52,92083,5149],{"class":622},[52,92085,92086],{"class":54,"line":119},[52,92087,92088],{"class":622},"    function fn(x, y) {\n",[52,92090,92091],{"class":54,"line":130},[52,92092,92093],{"class":622},"      console.log(this)  \u002F\u002Fwindow\n",[52,92095,92096],{"class":54,"line":136},[52,92097,92098],{"class":622},"      console.log(x + y)\n",[52,92100,92101],{"class":54,"line":141},[52,92102,5149],{"class":622},[52,92104,92105],{"class":54,"line":146},[52,92106,92107],{"class":622},"    fn.call(obj, 1, 2)\n",[52,92109,92110,92112,92114],{"class":54,"line":152},[52,92111,55347],{"class":622},[52,92113,54744],{"class":54231},[52,92115,54238],{"class":622},[52,92117,92118,92120,92122],{"class":54,"line":157},[52,92119,54716],{"class":622},[52,92121,54731],{"class":54231},[52,92123,54238],{"class":622},[274,92125,92126],{},[280,92127],{"alt":28,"src":92128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1070,92130,92131],{"start":69},[1073,92132,92133],{},"apply()",[274,92135,92136],{},[280,92137],{"alt":28,"src":92138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[274,92140,92049],{},[274,92142,92143],{},"call传递的是普通参数，而apply必须传递的是数组",[19,92145,92147],{"className":53564,"code":92146,"language":53566,"meta":28,"style":28},"\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",[26,92148,92149,92159,92173,92177,92185,92199,92219,92231,92239,92243,92251,92259,92269,92276,92280,92285,92301,92313,92327,92331,92336,92355,92360,92364,92369,92374,92382,92387,92409,92414,92430,92446,92458,92462,92467,92486,92494,92502,92506],{"__ignoreMap":28},[52,92150,92151,92153,92155,92157],{"class":54,"line":55},[52,92152,54228],{"class":622},[52,92154,54232],{"class":54231},[52,92156,54235],{"class":58},[52,92158,54238],{"class":622},[52,92160,92161,92163,92165,92167,92169,92171],{"class":54,"line":69},[52,92162,4022],{"class":622},[52,92164,53566],{"class":54231},[52,92166,54247],{"class":58},[52,92168,2099],{"class":622},[52,92170,54252],{"class":62},[52,92172,54238],{"class":622},[52,92174,92175],{"class":54,"line":82},[52,92176,116],{"emptyLinePlaceholder":115},[52,92178,92179,92181,92183],{"class":54,"line":97},[52,92180,4022],{"class":622},[52,92182,54265],{"class":54231},[52,92184,54238],{"class":622},[52,92186,92187,92189,92191,92193,92195,92197],{"class":54,"line":112},[52,92188,55075],{"class":622},[52,92190,54275],{"class":54231},[52,92192,54278],{"class":58},[52,92194,2099],{"class":622},[52,92196,54283],{"class":62},[52,92198,54238],{"class":622},[52,92200,92201,92203,92205,92207,92209,92211,92213,92215,92217],{"class":54,"line":119},[52,92202,55075],{"class":622},[52,92204,54275],{"class":54231},[52,92206,17876],{"class":58},[52,92208,2099],{"class":622},[52,92210,54322],{"class":62},[52,92212,54302],{"class":58},[52,92214,2099],{"class":622},[52,92216,54329],{"class":62},[52,92218,54238],{"class":622},[52,92220,92221,92223,92225,92227,92229],{"class":54,"line":130},[52,92222,55075],{"class":622},[52,92224,54338],{"class":54231},[52,92226,54341],{"class":622},[52,92228,54338],{"class":54231},[52,92230,54238],{"class":622},[52,92232,92233,92235,92237],{"class":54,"line":136},[52,92234,54716],{"class":622},[52,92236,54265],{"class":54231},[52,92238,54238],{"class":622},[52,92240,92241],{"class":54,"line":141},[52,92242,116],{"emptyLinePlaceholder":115},[52,92244,92245,92247,92249],{"class":54,"line":146},[52,92246,4022],{"class":622},[52,92248,54731],{"class":54231},[52,92250,54238],{"class":622},[52,92252,92253,92255,92257],{"class":54,"line":152},[52,92254,55075],{"class":622},[52,92256,54744],{"class":54231},[52,92258,54238],{"class":622},[52,92260,92261,92263,92265,92267],{"class":54,"line":157},[52,92262,14177],{"class":160},[52,92264,72900],{"class":90},[52,92266,16520],{"class":160},[52,92268,18528],{"class":622},[52,92270,92271,92273],{"class":54,"line":173},[52,92272,74554],{"class":622},[52,92274,92275],{"class":90},"18\n",[52,92277,92278],{"class":54,"line":178},[52,92279,5149],{"class":622},[52,92281,92282],{"class":54,"line":184},[52,92283,92284],{"class":332},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[52,92286,92287,92289,92291,92293,92295,92297,92299],{"class":54,"line":189},[52,92288,73013],{"class":160},[52,92290,91778],{"class":58},[52,92292,3121],{"class":622},[52,92294,3932],{"class":8172},[52,92296,15391],{"class":622},[52,92298,3957],{"class":8172},[52,92300,15398],{"class":622},[52,92302,92303,92305,92307,92309,92311],{"class":54,"line":201},[52,92304,61174],{"class":622},[52,92306,61177],{"class":58},[52,92308,3121],{"class":622},[52,92310,89921],{"class":90},[52,92312,170],{"class":622},[52,92314,92315,92317,92319,92322,92324],{"class":54,"line":206},[52,92316,61174],{"class":622},[52,92318,61177],{"class":58},[52,92320,92321],{"class":622},"(x ",[52,92323,3593],{"class":160},[52,92325,92326],{"class":622}," y)\n",[52,92328,92329],{"class":54,"line":224},[52,92330,5149],{"class":622},[52,92332,92333],{"class":54,"line":229},[52,92334,92335],{"class":332},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[52,92337,92338,92341,92344,92347,92349,92351,92353],{"class":54,"line":241},[52,92339,92340],{"class":622},"    fn.",[52,92342,92343],{"class":58},"apply",[52,92345,92346],{"class":622},"(obj, [",[52,92348,3332],{"class":90},[52,92350,15391],{"class":622},[52,92352,3194],{"class":90},[52,92354,7616],{"class":622},[52,92356,92357],{"class":54,"line":246},[52,92358,92359],{"class":332},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[52,92361,92362],{"class":54,"line":252},[52,92363,116],{"emptyLinePlaceholder":115},[52,92365,92366],{"class":54,"line":257},[52,92367,92368],{"class":332},"    \u002F\u002F 使用场景：求数组最大值\n",[52,92370,92371],{"class":54,"line":266},[52,92372,92373],{"class":332},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[52,92375,92376,92379],{"class":54,"line":4722},[52,92377,92378],{"class":332},"    \u002F\u002F console.log(max)",[52,92380,92381],{"class":332},"   \u002F\u002F3\n",[52,92383,92384],{"class":54,"line":4727},[52,92385,92386],{"class":332},"    \u002F\u002F 指向空或者Math都是可以的\n",[52,92388,92389,92391,92393,92395,92397,92399,92401,92403,92405,92407],{"class":54,"line":4741},[52,92390,14177],{"class":160},[52,92392,60625],{"class":90},[52,92394,16520],{"class":160},[52,92396,55157],{"class":622},[52,92398,3424],{"class":90},[52,92400,15391],{"class":622},[52,92402,3616],{"class":90},[52,92404,15391],{"class":622},[52,92406,3647],{"class":90},[52,92408,36178],{"class":622},[52,92410,92411],{"class":54,"line":4746},[52,92412,92413],{"class":332},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[52,92415,92416,92418,92420,92422,92425,92427],{"class":54,"line":5538},[52,92417,14177],{"class":160},[52,92419,8907],{"class":90},[52,92421,16520],{"class":160},[52,92423,92424],{"class":622}," Math.max.",[52,92426,92343],{"class":58},[52,92428,92429],{"class":622},"(Math, arr)\n",[52,92431,92432,92434,92437,92439,92442,92444],{"class":54,"line":5552},[52,92433,14177],{"class":160},[52,92435,92436],{"class":90}," min",[52,92438,16520],{"class":160},[52,92440,92441],{"class":622}," Math.min.",[52,92443,92343],{"class":58},[52,92445,92429],{"class":622},[52,92447,92448,92450,92452,92455],{"class":54,"line":5560},[52,92449,76681],{"class":622},[52,92451,61177],{"class":58},[52,92453,92454],{"class":622},"(max, min)     ",[52,92456,92457],{"class":332},"\u002F\u002F100,4\n",[52,92459,92460],{"class":54,"line":5565},[52,92461,116],{"emptyLinePlaceholder":115},[52,92463,92464],{"class":54,"line":5571},[52,92465,92466],{"class":332},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[52,92468,92469,92471,92473,92476,92478,92480,92483],{"class":54,"line":5577},[52,92470,76681],{"class":622},[52,92472,61177],{"class":58},[52,92474,92475],{"class":622},"(Max.",[52,92477,8971],{"class":58},[52,92479,3121],{"class":622},[52,92481,92482],{"class":160},"...",[52,92484,92485],{"class":622},"arr))\n",[52,92487,92488,92490,92492],{"class":54,"line":5582},[52,92489,55347],{"class":622},[52,92491,54744],{"class":54231},[52,92493,54238],{"class":622},[52,92495,92496,92498,92500],{"class":54,"line":10904},[52,92497,54716],{"class":622},[52,92499,54731],{"class":54231},[52,92501,54238],{"class":622},[52,92503,92504],{"class":54,"line":10928},[52,92505,116],{"emptyLinePlaceholder":115},[52,92507,92508,92510,92512],{"class":54,"line":10933},[52,92509,54716],{"class":622},[52,92511,53566],{"class":54231},[52,92513,54238],{"class":622},[274,92515,92516],{},[280,92517],{"alt":28,"src":92518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1070,92520,92521],{"start":82},[1073,92522,92523],{},"bind()",[274,92525,92526],{},[280,92527],{"alt":28,"src":92528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[274,92530,92531],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[274,92533,92534],{},"bind的语法跟call很相似",[19,92536,92538],{"className":55997,"code":92537,"language":55999,"meta":28,"style":28},"\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",[26,92539,92540,92548,92556,92560,92565,92569,92573,92578,92582,92587,92592,92597,92602,92607,92612,92617,92621,92629],{"__ignoreMap":28},[52,92541,92542,92544,92546],{"class":54,"line":55},[52,92543,4022],{"class":622},[52,92545,54731],{"class":54231},[52,92547,54238],{"class":622},[52,92549,92550,92552,92554],{"class":54,"line":69},[52,92551,55075],{"class":622},[52,92553,54744],{"class":54231},[52,92555,54238],{"class":622},[52,92557,92558],{"class":54,"line":82},[52,92559,74451],{"class":622},[52,92561,92562],{"class":54,"line":97},[52,92563,92564],{"class":622},"      age: 18\n",[52,92566,92567],{"class":54,"line":112},[52,92568,5149],{"class":622},[52,92570,92571],{"class":54,"line":119},[52,92572,80071],{"class":622},[52,92574,92575],{"class":54,"line":130},[52,92576,92577],{"class":622},"      console.log(this)\n",[52,92579,92580],{"class":54,"line":136},[52,92581,5149],{"class":622},[52,92583,92584],{"class":54,"line":141},[52,92585,92586],{"class":622},"    \u002F\u002F 1.bind 不会调用函数\n",[52,92588,92589],{"class":54,"line":146},[52,92590,92591],{"class":622},"    \u002F\u002F 2.bind能改变this的指向\n",[52,92593,92594],{"class":54,"line":152},[52,92595,92596],{"class":622},"    fn.bind()\n",[52,92598,92599],{"class":54,"line":157},[52,92600,92601],{"class":622},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[52,92603,92604],{"class":54,"line":173},[52,92605,92606],{"class":622},"    const fun = fn.bind(obj)\n",[52,92608,92609],{"class":54,"line":178},[52,92610,92611],{"class":622},"    \u002F\u002F console.log(fun)\n",[52,92613,92614],{"class":54,"line":184},[52,92615,92616],{"class":622},"    \u002F\u002F 调用,查看this的指向\n",[52,92618,92619],{"class":54,"line":189},[52,92620,55581],{"class":622},[52,92622,92623,92625,92627],{"class":54,"line":201},[52,92624,55347],{"class":622},[52,92626,54744],{"class":54231},[52,92628,54238],{"class":622},[52,92630,92631,92633,92635],{"class":54,"line":206},[52,92632,54716],{"class":622},[52,92634,54731],{"class":54231},[52,92636,54238],{"class":622},[274,92638,92639],{},[280,92640],{"alt":28,"src":92641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1070,92643,92644],{"start":97},[1073,92645,92646],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[19,92648,92650],{"className":55997,"code":92649,"language":55999,"meta":28,"style":28},"\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",[26,92651,92652,92660,92673,92681,92686,92690,92695,92700,92705,92710,92715,92720,92725,92730,92734,92742],{"__ignoreMap":28},[52,92653,92654,92656,92658],{"class":54,"line":55},[52,92655,4022],{"class":622},[52,92657,54731],{"class":54231},[52,92659,54238],{"class":622},[52,92661,92662,92664,92666,92669,92671],{"class":54,"line":69},[52,92663,55075],{"class":622},[52,92665,56817],{"class":54231},[52,92667,92668],{"class":622},">禁用\u003C\u002F",[52,92670,56817],{"class":54231},[52,92672,54238],{"class":622},[52,92674,92675,92677,92679],{"class":54,"line":82},[52,92676,55075],{"class":622},[52,92678,54744],{"class":54231},[52,92680,54238],{"class":622},[52,92682,92683],{"class":54,"line":97},[52,92684,92685],{"class":622},"    const btn = document.querySelector('button')\n",[52,92687,92688],{"class":54,"line":112},[52,92689,61946],{"class":622},[52,92691,92692],{"class":54,"line":119},[52,92693,92694],{"class":622},"      this.disabled = true\n",[52,92696,92697],{"class":54,"line":130},[52,92698,92699],{"class":622},"      \u002F\u002F 定时器是window进行调用的\n",[52,92701,92702],{"class":54,"line":136},[52,92703,92704],{"class":622},"      setTimeout(function () {\n",[52,92706,92707],{"class":54,"line":141},[52,92708,92709],{"class":622},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[52,92711,92712],{"class":54,"line":146},[52,92713,92714],{"class":622},"        this.disabled = false\n",[52,92716,92717],{"class":54,"line":152},[52,92718,92719],{"class":622},"      }.bind(this), 2000)\n",[52,92721,92722],{"class":54,"line":157},[52,92723,92724],{"class":622},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[52,92726,92727],{"class":54,"line":173},[52,92728,92729],{"class":622},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[52,92731,92732],{"class":54,"line":178},[52,92733,36393],{"class":622},[52,92735,92736,92738,92740],{"class":54,"line":184},[52,92737,55347],{"class":622},[52,92739,54744],{"class":54231},[52,92741,54238],{"class":622},[52,92743,92744,92746,92748],{"class":54,"line":189},[52,92745,54716],{"class":622},[52,92747,54731],{"class":54231},[52,92749,54238],{"class":622},[1070,92751,92752],{"start":112},[1073,92753,24908],{},[274,92755,92756],{},[280,92757],{"alt":28,"src":92758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92760,92762],{"id":92761},"_417-性能优化","4.17 性能优化",[30,92764,92766],{"id":92765},"_4171-防抖","4.17.1 防抖",[274,92768,92769],{},[280,92770],{"alt":28,"src":92771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[274,92773,92774],{},[538,92775,92776],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[274,92778,92779],{},"防抖实现方式：",[4118,92781,92782],{},[1073,92783,92784],{},"lodash 提供了防抖处理",[274,92786,92787],{},"_.debounce(func,[wait=0],[options={}])",[274,92789,92790],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[19,92792,92794],{"className":53564,"code":92793,"language":53566,"meta":28,"style":28},"\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",[26,92795,92796,92806,92820,92824,92832,92846,92866,92878,92886,92892,92902,92914,92926,92937,92949,92959,92969,92982,92986,92994,93002,93006,93014,93032,93050,93058,93077,93087,93096,93107,93112,93116,93121,93126,93131,93156,93164,93172,93176],{"__ignoreMap":28},[52,92797,92798,92800,92802,92804],{"class":54,"line":55},[52,92799,54228],{"class":622},[52,92801,54232],{"class":54231},[52,92803,54235],{"class":58},[52,92805,54238],{"class":622},[52,92807,92808,92810,92812,92814,92816,92818],{"class":54,"line":69},[52,92809,4022],{"class":622},[52,92811,53566],{"class":54231},[52,92813,54247],{"class":58},[52,92815,2099],{"class":622},[52,92817,54252],{"class":62},[52,92819,54238],{"class":622},[52,92821,92822],{"class":54,"line":82},[52,92823,116],{"emptyLinePlaceholder":115},[52,92825,92826,92828,92830],{"class":54,"line":97},[52,92827,4022],{"class":622},[52,92829,54265],{"class":54231},[52,92831,54238],{"class":622},[52,92833,92834,92836,92838,92840,92842,92844],{"class":54,"line":112},[52,92835,55075],{"class":622},[52,92837,54275],{"class":54231},[52,92839,54278],{"class":58},[52,92841,2099],{"class":622},[52,92843,54283],{"class":62},[52,92845,54238],{"class":622},[52,92847,92848,92850,92852,92854,92856,92858,92860,92862,92864],{"class":54,"line":119},[52,92849,55075],{"class":622},[52,92851,54275],{"class":54231},[52,92853,17876],{"class":58},[52,92855,2099],{"class":622},[52,92857,54322],{"class":62},[52,92859,54302],{"class":58},[52,92861,2099],{"class":622},[52,92863,54329],{"class":62},[52,92865,54238],{"class":622},[52,92867,92868,92870,92872,92874,92876],{"class":54,"line":130},[52,92869,55075],{"class":622},[52,92871,54338],{"class":54231},[52,92873,54341],{"class":622},[52,92875,54338],{"class":54231},[52,92877,54238],{"class":622},[52,92879,92880,92882,92884],{"class":54,"line":136},[52,92881,55075],{"class":622},[52,92883,3015],{"class":54231},[52,92885,54238],{"class":622},[52,92887,92888,92890],{"class":54,"line":141},[52,92889,57682],{"class":58},[52,92891,18528],{"class":622},[52,92893,92894,92896,92898,92900],{"class":54,"line":146},[52,92895,75524],{"class":90},[52,92897,54368],{"class":622},[52,92899,63435],{"class":90},[52,92901,4272],{"class":622},[52,92903,92904,92906,92908,92910,92912],{"class":54,"line":152},[52,92905,57701],{"class":90},[52,92907,54368],{"class":622},[52,92909,4689],{"class":90},[52,92911,54423],{"class":160},[52,92913,4272],{"class":622},[52,92915,92916,92918,92920,92922,92924],{"class":54,"line":157},[52,92917,57715],{"class":90},[52,92919,54368],{"class":622},[52,92921,4689],{"class":90},[52,92923,54423],{"class":160},[52,92925,4272],{"class":622},[52,92927,92928,92930,92932,92935],{"class":54,"line":173},[52,92929,57814],{"class":90},[52,92931,54368],{"class":622},[52,92933,92934],{"class":90},"gray",[52,92936,4272],{"class":622},[52,92938,92939,92941,92943,92945,92947],{"class":54,"line":178},[52,92940,57852],{"class":90},[52,92942,54368],{"class":622},[52,92944,3937],{"class":90},[52,92946,54423],{"class":160},[52,92948,4272],{"class":622},[52,92950,92951,92953,92955,92957],{"class":54,"line":184},[52,92952,60346],{"class":90},[52,92954,54368],{"class":622},[52,92956,63772],{"class":90},[52,92958,4272],{"class":622},[52,92960,92961,92963,92965,92967],{"class":54,"line":189},[52,92962,60216],{"class":90},[52,92964,54368],{"class":622},[52,92966,54523],{"class":90},[52,92968,4272],{"class":622},[52,92970,92971,92974,92976,92978,92980],{"class":54,"line":201},[52,92972,92973],{"class":90},"      padding-top",[52,92975,54368],{"class":622},[52,92977,3432],{"class":90},[52,92979,54423],{"class":160},[52,92981,4272],{"class":622},[52,92983,92984],{"class":54,"line":206},[52,92985,5149],{"class":622},[52,92987,92988,92990,92992],{"class":54,"line":224},[52,92989,55347],{"class":622},[52,92991,3015],{"class":54231},[52,92993,54238],{"class":622},[52,92995,92996,92998,93000],{"class":54,"line":229},[52,92997,54716],{"class":622},[52,92999,54265],{"class":54231},[52,93001,54238],{"class":622},[52,93003,93004],{"class":54,"line":241},[52,93005,116],{"emptyLinePlaceholder":115},[52,93007,93008,93010,93012],{"class":54,"line":246},[52,93009,4022],{"class":622},[52,93011,54731],{"class":54231},[52,93013,54238],{"class":622},[52,93015,93016,93018,93020,93022,93024,93026,93028,93030],{"class":54,"line":252},[52,93017,55075],{"class":622},[52,93019,54542],{"class":54231},[52,93021,56416],{"class":58},[52,93023,2099],{"class":622},[52,93025,56421],{"class":62},[52,93027,58244],{"class":622},[52,93029,54542],{"class":54231},[52,93031,54238],{"class":622},[52,93033,93034,93036,93038,93040,93042,93044,93046,93048],{"class":54,"line":257},[52,93035,55075],{"class":622},[52,93037,54744],{"class":54231},[52,93039,58169],{"class":58},[52,93041,2099],{"class":622},[52,93043,91202],{"class":62},[52,93045,58244],{"class":622},[52,93047,54744],{"class":54231},[52,93049,54238],{"class":622},[52,93051,93052,93054,93056],{"class":54,"line":266},[52,93053,55075],{"class":622},[52,93055,54744],{"class":54231},[52,93057,54238],{"class":622},[52,93059,93060,93062,93064,93066,93068,93070,93072,93075],{"class":54,"line":4722},[52,93061,14177],{"class":160},[52,93063,89861],{"class":90},[52,93065,16520],{"class":160},[52,93067,57326],{"class":622},[52,93069,57329],{"class":58},[52,93071,3121],{"class":622},[52,93073,93074],{"class":62},"'.box'",[52,93076,170],{"class":622},[52,93078,93079,93081,93083,93085],{"class":54,"line":4727},[52,93080,55150],{"class":160},[52,93082,12394],{"class":622},[52,93084,2099],{"class":160},[52,93086,50265],{"class":90},[52,93088,93089,93091,93094],{"class":54,"line":4741},[52,93090,73013],{"class":160},[52,93092,93093],{"class":58}," mouseMove",[52,93095,13809],{"class":622},[52,93097,93098,93101,93103,93105],{"class":54,"line":4746},[52,93099,93100],{"class":622},"      box.innerHTML ",[52,93102,2099],{"class":160},[52,93104,5992],{"class":622},[52,93106,5662],{"class":160},[52,93108,93109],{"class":54,"line":5538},[52,93110,93111],{"class":332},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[52,93113,93114],{"class":54,"line":5552},[52,93115,5149],{"class":622},[52,93117,93118],{"class":54,"line":5560},[52,93119,93120],{"class":332},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[52,93122,93123],{"class":54,"line":5565},[52,93124,93125],{"class":332},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[52,93127,93128],{"class":54,"line":5571},[52,93129,93130],{"class":332},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[52,93132,93133,93136,93138,93140,93143,93146,93149,93152,93154],{"class":54,"line":5577},[52,93134,93135],{"class":622},"    box.",[52,93137,60743],{"class":58},[52,93139,3121],{"class":622},[52,93141,93142],{"class":62},"'mousemove'",[52,93144,93145],{"class":622},", _.",[52,93147,93148],{"class":58},"debounce",[52,93150,93151],{"class":622},"(mouseMove, ",[52,93153,68003],{"class":90},[52,93155,33429],{"class":622},[52,93157,93158,93160,93162],{"class":54,"line":5582},[52,93159,55347],{"class":622},[52,93161,54744],{"class":54231},[52,93163,54238],{"class":622},[52,93165,93166,93168,93170],{"class":54,"line":10904},[52,93167,54716],{"class":622},[52,93169,54731],{"class":54231},[52,93171,54238],{"class":622},[52,93173,93174],{"class":54,"line":10928},[52,93175,116],{"emptyLinePlaceholder":115},[52,93177,93178,93180,93182],{"class":54,"line":10933},[52,93179,54716],{"class":622},[52,93181,53566],{"class":54231},[52,93183,54238],{"class":622},[4118,93185,93186],{},[1073,93187,93188],{},"手写一个防抖函数来处理",[274,93190,93191],{},"防抖的核心就是利用定时器来实现的：",[274,93193,93194],{},"①声明一个定时器变量",[274,93196,93197],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[274,93199,93200],{},"③如果没有定时器则开启定时器，记得存到变量里面",[19,93202,93204],{"className":53564,"code":93203,"language":53566,"meta":28,"style":28},"\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",[26,93205,93206,93216,93230,93234,93242,93256,93276,93288,93296,93302,93312,93324,93336,93346,93358,93368,93378,93390,93394,93402,93410,93414,93422,93440,93458,93466,93484,93494,93502,93512,93516,93520,93524,93529,93534,93539,93544,93549,93554,93572,93579,93584,93592,93597,93610,93626,93636,93641,93645,93649,93669,93673,93678,93683,93688,93693,93701,93709,93713],{"__ignoreMap":28},[52,93207,93208,93210,93212,93214],{"class":54,"line":55},[52,93209,54228],{"class":622},[52,93211,54232],{"class":54231},[52,93213,54235],{"class":58},[52,93215,54238],{"class":622},[52,93217,93218,93220,93222,93224,93226,93228],{"class":54,"line":69},[52,93219,4022],{"class":622},[52,93221,53566],{"class":54231},[52,93223,54247],{"class":58},[52,93225,2099],{"class":622},[52,93227,54252],{"class":62},[52,93229,54238],{"class":622},[52,93231,93232],{"class":54,"line":82},[52,93233,116],{"emptyLinePlaceholder":115},[52,93235,93236,93238,93240],{"class":54,"line":97},[52,93237,4022],{"class":622},[52,93239,54265],{"class":54231},[52,93241,54238],{"class":622},[52,93243,93244,93246,93248,93250,93252,93254],{"class":54,"line":112},[52,93245,55075],{"class":622},[52,93247,54275],{"class":54231},[52,93249,54278],{"class":58},[52,93251,2099],{"class":622},[52,93253,54283],{"class":62},[52,93255,54238],{"class":622},[52,93257,93258,93260,93262,93264,93266,93268,93270,93272,93274],{"class":54,"line":119},[52,93259,55075],{"class":622},[52,93261,54275],{"class":54231},[52,93263,17876],{"class":58},[52,93265,2099],{"class":622},[52,93267,54322],{"class":62},[52,93269,54302],{"class":58},[52,93271,2099],{"class":622},[52,93273,54329],{"class":62},[52,93275,54238],{"class":622},[52,93277,93278,93280,93282,93284,93286],{"class":54,"line":130},[52,93279,55075],{"class":622},[52,93281,54338],{"class":54231},[52,93283,54341],{"class":622},[52,93285,54338],{"class":54231},[52,93287,54238],{"class":622},[52,93289,93290,93292,93294],{"class":54,"line":136},[52,93291,55075],{"class":622},[52,93293,3015],{"class":54231},[52,93295,54238],{"class":622},[52,93297,93298,93300],{"class":54,"line":141},[52,93299,57682],{"class":58},[52,93301,18528],{"class":622},[52,93303,93304,93306,93308,93310],{"class":54,"line":146},[52,93305,75524],{"class":90},[52,93307,54368],{"class":622},[52,93309,63435],{"class":90},[52,93311,4272],{"class":622},[52,93313,93314,93316,93318,93320,93322],{"class":54,"line":152},[52,93315,57701],{"class":90},[52,93317,54368],{"class":622},[52,93319,4689],{"class":90},[52,93321,54423],{"class":160},[52,93323,4272],{"class":622},[52,93325,93326,93328,93330,93332,93334],{"class":54,"line":157},[52,93327,57715],{"class":90},[52,93329,54368],{"class":622},[52,93331,4689],{"class":90},[52,93333,54423],{"class":160},[52,93335,4272],{"class":622},[52,93337,93338,93340,93342,93344],{"class":54,"line":173},[52,93339,57814],{"class":90},[52,93341,54368],{"class":622},[52,93343,92934],{"class":90},[52,93345,4272],{"class":622},[52,93347,93348,93350,93352,93354,93356],{"class":54,"line":178},[52,93349,57852],{"class":90},[52,93351,54368],{"class":622},[52,93353,3937],{"class":90},[52,93355,54423],{"class":160},[52,93357,4272],{"class":622},[52,93359,93360,93362,93364,93366],{"class":54,"line":184},[52,93361,60346],{"class":90},[52,93363,54368],{"class":622},[52,93365,63772],{"class":90},[52,93367,4272],{"class":622},[52,93369,93370,93372,93374,93376],{"class":54,"line":189},[52,93371,60216],{"class":90},[52,93373,54368],{"class":622},[52,93375,54523],{"class":90},[52,93377,4272],{"class":622},[52,93379,93380,93382,93384,93386,93388],{"class":54,"line":201},[52,93381,92973],{"class":90},[52,93383,54368],{"class":622},[52,93385,3432],{"class":90},[52,93387,54423],{"class":160},[52,93389,4272],{"class":622},[52,93391,93392],{"class":54,"line":206},[52,93393,5149],{"class":622},[52,93395,93396,93398,93400],{"class":54,"line":224},[52,93397,55347],{"class":622},[52,93399,3015],{"class":54231},[52,93401,54238],{"class":622},[52,93403,93404,93406,93408],{"class":54,"line":229},[52,93405,54716],{"class":622},[52,93407,54265],{"class":54231},[52,93409,54238],{"class":622},[52,93411,93412],{"class":54,"line":241},[52,93413,116],{"emptyLinePlaceholder":115},[52,93415,93416,93418,93420],{"class":54,"line":246},[52,93417,4022],{"class":622},[52,93419,54731],{"class":54231},[52,93421,54238],{"class":622},[52,93423,93424,93426,93428,93430,93432,93434,93436,93438],{"class":54,"line":252},[52,93425,55075],{"class":622},[52,93427,54542],{"class":54231},[52,93429,56416],{"class":58},[52,93431,2099],{"class":622},[52,93433,56421],{"class":62},[52,93435,58244],{"class":622},[52,93437,54542],{"class":54231},[52,93439,54238],{"class":622},[52,93441,93442,93444,93446,93448,93450,93452,93454,93456],{"class":54,"line":257},[52,93443,55075],{"class":622},[52,93445,54744],{"class":54231},[52,93447,58169],{"class":58},[52,93449,2099],{"class":622},[52,93451,91202],{"class":62},[52,93453,58244],{"class":622},[52,93455,54744],{"class":54231},[52,93457,54238],{"class":622},[52,93459,93460,93462,93464],{"class":54,"line":266},[52,93461,55075],{"class":622},[52,93463,54744],{"class":54231},[52,93465,54238],{"class":622},[52,93467,93468,93470,93472,93474,93476,93478,93480,93482],{"class":54,"line":4722},[52,93469,14177],{"class":160},[52,93471,89861],{"class":90},[52,93473,16520],{"class":160},[52,93475,57326],{"class":622},[52,93477,57329],{"class":58},[52,93479,3121],{"class":622},[52,93481,93074],{"class":62},[52,93483,170],{"class":622},[52,93485,93486,93488,93490,93492],{"class":54,"line":4727},[52,93487,55150],{"class":160},[52,93489,12394],{"class":622},[52,93491,2099],{"class":160},[52,93493,50265],{"class":90},[52,93495,93496,93498,93500],{"class":54,"line":4741},[52,93497,73013],{"class":160},[52,93499,93093],{"class":58},[52,93501,13809],{"class":622},[52,93503,93504,93506,93508,93510],{"class":54,"line":4746},[52,93505,93100],{"class":622},[52,93507,2099],{"class":160},[52,93509,5992],{"class":622},[52,93511,5662],{"class":160},[52,93513,93514],{"class":54,"line":5538},[52,93515,93111],{"class":332},[52,93517,93518],{"class":54,"line":5552},[52,93519,5149],{"class":622},[52,93521,93522],{"class":54,"line":5560},[52,93523,93120],{"class":332},[52,93525,93526],{"class":54,"line":5565},[52,93527,93528],{"class":332},"    \u002F\u002F 手写防抖函数\n",[52,93530,93531],{"class":54,"line":5571},[52,93532,93533],{"class":332},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[52,93535,93536],{"class":54,"line":5577},[52,93537,93538],{"class":332},"    \u002F\u002F 1.声明定时器变量\n",[52,93540,93541],{"class":54,"line":5582},[52,93542,93543],{"class":332},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[52,93545,93546],{"class":54,"line":10904},[52,93547,93548],{"class":332},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[52,93550,93551],{"class":54,"line":10928},[52,93552,93553],{"class":332},"    \u002F\u002F 4.定时器里面写函数调用\n",[52,93555,93556,93558,93561,93563,93566,93568,93570],{"class":54,"line":10933},[52,93557,73013],{"class":160},[52,93559,93560],{"class":58}," debounce",[52,93562,3121],{"class":622},[52,93564,93565],{"class":8172},"fn",[52,93567,15391],{"class":622},[52,93569,3832],{"class":8172},[52,93571,15398],{"class":622},[52,93573,93574,93576],{"class":54,"line":10939},[52,93575,82700],{"class":160},[52,93577,93578],{"class":622}," timer\n",[52,93580,93581],{"class":54,"line":10966},[52,93582,93583],{"class":332},"      \u002F\u002F return 返回一个匿名函数\n",[52,93585,93586,93588,93590],{"class":54,"line":10971},[52,93587,76910],{"class":160},[52,93589,61848],{"class":160},[52,93591,57382],{"class":622},[52,93593,93594],{"class":54,"line":10977},[52,93595,93596],{"class":332},"        \u002F\u002F 这里边写第二三四步\n",[52,93598,93599,93601,93604,93607],{"class":54,"line":10989},[52,93600,5458],{"class":160},[52,93602,93603],{"class":622}," (timer) ",[52,93605,93606],{"class":58},"clearTimeout",[52,93608,93609],{"class":622},"(timer)\n",[52,93611,93612,93615,93617,93620,93622,93624],{"class":54,"line":11001},[52,93613,93614],{"class":622},"        timer ",[52,93616,2099],{"class":160},[52,93618,93619],{"class":58}," setTimeout",[52,93621,3121],{"class":622},[52,93623,57379],{"class":160},[52,93625,57382],{"class":622},[52,93627,93628,93631,93633],{"class":54,"line":11013},[52,93629,93630],{"class":58},"          fn",[52,93632,16006],{"class":622},[52,93634,93635],{"class":332},"\u002F\u002F加小括号调用fn }, t)\n",[52,93637,93638],{"class":54,"line":12672},[52,93639,93640],{"class":622},"        }, t)\n",[52,93642,93643],{"class":54,"line":12697},[52,93644,55328],{"class":622},[52,93646,93647],{"class":54,"line":12720},[52,93648,5149],{"class":622},[52,93650,93651,93653,93655,93657,93659,93661,93663,93665,93667],{"class":54,"line":12744},[52,93652,93135],{"class":622},[52,93654,60743],{"class":58},[52,93656,3121],{"class":622},[52,93658,93142],{"class":62},[52,93660,15391],{"class":622},[52,93662,93148],{"class":58},[52,93664,93151],{"class":622},[52,93666,68003],{"class":90},[52,93668,33429],{"class":622},[52,93670,93671],{"class":54,"line":12749},[52,93672,116],{"emptyLinePlaceholder":115},[52,93674,93675],{"class":54,"line":12754},[52,93676,93677],{"class":332},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[52,93679,93680],{"class":54,"line":12759},[52,93681,93682],{"class":332},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[52,93684,93685],{"class":54,"line":12768},[52,93686,93687],{"class":332},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[52,93689,93690],{"class":54,"line":12773},[52,93691,93692],{"class":332},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[52,93694,93695,93697,93699],{"class":54,"line":12779},[52,93696,55347],{"class":622},[52,93698,54744],{"class":54231},[52,93700,54238],{"class":622},[52,93702,93703,93705,93707],{"class":54,"line":12800},[52,93704,54716],{"class":622},[52,93706,54731],{"class":54231},[52,93708,54238],{"class":622},[52,93710,93711],{"class":54,"line":12806},[52,93712,116],{"emptyLinePlaceholder":115},[52,93714,93715,93717,93719],{"class":54,"line":12820},[52,93716,54716],{"class":622},[52,93718,53566],{"class":54231},[52,93720,54238],{"class":622},[30,93722,93724],{"id":93723},"_4172-节流","4.17.2 节流",[274,93726,93727],{},[280,93728],{"alt":28,"src":93729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[274,93731,93732],{},[280,93733],{"alt":28,"src":93734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[274,93736,93737],{},[538,93738,93739],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[274,93741,93742],{},"实现方式：",[4118,93744,93745],{},[1073,93746,93747],{},"lodash 提供的节流函数来处理",[274,93749,93750],{},"_.throttle(func,[wait=0],[options=])",[274,93752,93753],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[19,93755,93757],{"className":53564,"code":93756,"language":53566,"meta":28,"style":28},"\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",[26,93758,93759,93769,93783,93787,93795,93809,93829,93841,93849,93855,93865,93877,93889,93899,93911,93921,93931,93943,93947,93955,93963,93967,93975,93993,94011,94019,94037,94047,94055,94065,94069,94073,94077,94082,94087,94108,94116,94124,94128],{"__ignoreMap":28},[52,93760,93761,93763,93765,93767],{"class":54,"line":55},[52,93762,54228],{"class":622},[52,93764,54232],{"class":54231},[52,93766,54235],{"class":58},[52,93768,54238],{"class":622},[52,93770,93771,93773,93775,93777,93779,93781],{"class":54,"line":69},[52,93772,4022],{"class":622},[52,93774,53566],{"class":54231},[52,93776,54247],{"class":58},[52,93778,2099],{"class":622},[52,93780,54252],{"class":62},[52,93782,54238],{"class":622},[52,93784,93785],{"class":54,"line":82},[52,93786,116],{"emptyLinePlaceholder":115},[52,93788,93789,93791,93793],{"class":54,"line":97},[52,93790,4022],{"class":622},[52,93792,54265],{"class":54231},[52,93794,54238],{"class":622},[52,93796,93797,93799,93801,93803,93805,93807],{"class":54,"line":112},[52,93798,55075],{"class":622},[52,93800,54275],{"class":54231},[52,93802,54278],{"class":58},[52,93804,2099],{"class":622},[52,93806,54283],{"class":62},[52,93808,54238],{"class":622},[52,93810,93811,93813,93815,93817,93819,93821,93823,93825,93827],{"class":54,"line":119},[52,93812,55075],{"class":622},[52,93814,54275],{"class":54231},[52,93816,17876],{"class":58},[52,93818,2099],{"class":622},[52,93820,54322],{"class":62},[52,93822,54302],{"class":58},[52,93824,2099],{"class":622},[52,93826,54329],{"class":62},[52,93828,54238],{"class":622},[52,93830,93831,93833,93835,93837,93839],{"class":54,"line":130},[52,93832,55075],{"class":622},[52,93834,54338],{"class":54231},[52,93836,54341],{"class":622},[52,93838,54338],{"class":54231},[52,93840,54238],{"class":622},[52,93842,93843,93845,93847],{"class":54,"line":136},[52,93844,55075],{"class":622},[52,93846,3015],{"class":54231},[52,93848,54238],{"class":622},[52,93850,93851,93853],{"class":54,"line":141},[52,93852,57682],{"class":58},[52,93854,18528],{"class":622},[52,93856,93857,93859,93861,93863],{"class":54,"line":146},[52,93858,75524],{"class":90},[52,93860,54368],{"class":622},[52,93862,63435],{"class":90},[52,93864,4272],{"class":622},[52,93866,93867,93869,93871,93873,93875],{"class":54,"line":152},[52,93868,57701],{"class":90},[52,93870,54368],{"class":622},[52,93872,4689],{"class":90},[52,93874,54423],{"class":160},[52,93876,4272],{"class":622},[52,93878,93879,93881,93883,93885,93887],{"class":54,"line":157},[52,93880,57715],{"class":90},[52,93882,54368],{"class":622},[52,93884,4689],{"class":90},[52,93886,54423],{"class":160},[52,93888,4272],{"class":622},[52,93890,93891,93893,93895,93897],{"class":54,"line":173},[52,93892,57814],{"class":90},[52,93894,54368],{"class":622},[52,93896,92934],{"class":90},[52,93898,4272],{"class":622},[52,93900,93901,93903,93905,93907,93909],{"class":54,"line":178},[52,93902,57852],{"class":90},[52,93904,54368],{"class":622},[52,93906,3937],{"class":90},[52,93908,54423],{"class":160},[52,93910,4272],{"class":622},[52,93912,93913,93915,93917,93919],{"class":54,"line":184},[52,93914,60346],{"class":90},[52,93916,54368],{"class":622},[52,93918,63772],{"class":90},[52,93920,4272],{"class":622},[52,93922,93923,93925,93927,93929],{"class":54,"line":189},[52,93924,60216],{"class":90},[52,93926,54368],{"class":622},[52,93928,54523],{"class":90},[52,93930,4272],{"class":622},[52,93932,93933,93935,93937,93939,93941],{"class":54,"line":201},[52,93934,92973],{"class":90},[52,93936,54368],{"class":622},[52,93938,3432],{"class":90},[52,93940,54423],{"class":160},[52,93942,4272],{"class":622},[52,93944,93945],{"class":54,"line":206},[52,93946,5149],{"class":622},[52,93948,93949,93951,93953],{"class":54,"line":224},[52,93950,55347],{"class":622},[52,93952,3015],{"class":54231},[52,93954,54238],{"class":622},[52,93956,93957,93959,93961],{"class":54,"line":229},[52,93958,54716],{"class":622},[52,93960,54265],{"class":54231},[52,93962,54238],{"class":622},[52,93964,93965],{"class":54,"line":241},[52,93966,116],{"emptyLinePlaceholder":115},[52,93968,93969,93971,93973],{"class":54,"line":246},[52,93970,4022],{"class":622},[52,93972,54731],{"class":54231},[52,93974,54238],{"class":622},[52,93976,93977,93979,93981,93983,93985,93987,93989,93991],{"class":54,"line":252},[52,93978,55075],{"class":622},[52,93980,54542],{"class":54231},[52,93982,56416],{"class":58},[52,93984,2099],{"class":622},[52,93986,56421],{"class":62},[52,93988,58244],{"class":622},[52,93990,54542],{"class":54231},[52,93992,54238],{"class":622},[52,93994,93995,93997,93999,94001,94003,94005,94007,94009],{"class":54,"line":257},[52,93996,55075],{"class":622},[52,93998,54744],{"class":54231},[52,94000,58169],{"class":58},[52,94002,2099],{"class":622},[52,94004,91202],{"class":62},[52,94006,58244],{"class":622},[52,94008,54744],{"class":54231},[52,94010,54238],{"class":622},[52,94012,94013,94015,94017],{"class":54,"line":266},[52,94014,55075],{"class":622},[52,94016,54744],{"class":54231},[52,94018,54238],{"class":622},[52,94020,94021,94023,94025,94027,94029,94031,94033,94035],{"class":54,"line":4722},[52,94022,14177],{"class":160},[52,94024,89861],{"class":90},[52,94026,16520],{"class":160},[52,94028,57326],{"class":622},[52,94030,57329],{"class":58},[52,94032,3121],{"class":622},[52,94034,93074],{"class":62},[52,94036,170],{"class":622},[52,94038,94039,94041,94043,94045],{"class":54,"line":4727},[52,94040,55150],{"class":160},[52,94042,12394],{"class":622},[52,94044,2099],{"class":160},[52,94046,50265],{"class":90},[52,94048,94049,94051,94053],{"class":54,"line":4741},[52,94050,73013],{"class":160},[52,94052,93093],{"class":58},[52,94054,13809],{"class":622},[52,94056,94057,94059,94061,94063],{"class":54,"line":4746},[52,94058,93100],{"class":622},[52,94060,2099],{"class":160},[52,94062,5992],{"class":622},[52,94064,5662],{"class":160},[52,94066,94067],{"class":54,"line":5538},[52,94068,93111],{"class":332},[52,94070,94071],{"class":54,"line":5552},[52,94072,5149],{"class":622},[52,94074,94075],{"class":54,"line":5560},[52,94076,93120],{"class":332},[52,94078,94079],{"class":54,"line":5565},[52,94080,94081],{"class":332},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[52,94083,94084],{"class":54,"line":5571},[52,94085,94086],{"class":332},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[52,94088,94089,94091,94093,94095,94097,94099,94102,94104,94106],{"class":54,"line":5577},[52,94090,93135],{"class":622},[52,94092,60743],{"class":58},[52,94094,3121],{"class":622},[52,94096,93142],{"class":62},[52,94098,93145],{"class":622},[52,94100,94101],{"class":58},"throttle",[52,94103,93151],{"class":622},[52,94105,68003],{"class":90},[52,94107,33429],{"class":622},[52,94109,94110,94112,94114],{"class":54,"line":5582},[52,94111,55347],{"class":622},[52,94113,54744],{"class":54231},[52,94115,54238],{"class":622},[52,94117,94118,94120,94122],{"class":54,"line":10904},[52,94119,54716],{"class":622},[52,94121,54731],{"class":54231},[52,94123,54238],{"class":622},[52,94125,94126],{"class":54,"line":10928},[52,94127,116],{"emptyLinePlaceholder":115},[52,94129,94130,94132,94134],{"class":54,"line":10933},[52,94131,54716],{"class":622},[52,94133,53566],{"class":54231},[52,94135,54238],{"class":622},[4118,94137,94138],{},[1073,94139,94140],{},"手写一个节流函数来处理",[274,94142,73880],{},[274,94144,93194],{},[274,94146,94147],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[274,94149,94150],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[19,94152,94154],{"className":53564,"code":94153,"language":53566,"meta":28,"style":28},"\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",[26,94155,94156,94166,94180,94184,94192,94206,94226,94238,94246,94252,94262,94274,94286,94296,94308,94318,94328,94340,94344,94352,94360,94364,94372,94390,94408,94416,94434,94444,94452,94462,94466,94470,94474,94479,94484,94489,94494,94499,94504,94521,94527,94535,94546,94561,94568,94573,94578,94588,94593,94598,94603,94607,94611,94615,94635,94643,94651,94655],{"__ignoreMap":28},[52,94157,94158,94160,94162,94164],{"class":54,"line":55},[52,94159,54228],{"class":622},[52,94161,54232],{"class":54231},[52,94163,54235],{"class":58},[52,94165,54238],{"class":622},[52,94167,94168,94170,94172,94174,94176,94178],{"class":54,"line":69},[52,94169,4022],{"class":622},[52,94171,53566],{"class":54231},[52,94173,54247],{"class":58},[52,94175,2099],{"class":622},[52,94177,54252],{"class":62},[52,94179,54238],{"class":622},[52,94181,94182],{"class":54,"line":82},[52,94183,116],{"emptyLinePlaceholder":115},[52,94185,94186,94188,94190],{"class":54,"line":97},[52,94187,4022],{"class":622},[52,94189,54265],{"class":54231},[52,94191,54238],{"class":622},[52,94193,94194,94196,94198,94200,94202,94204],{"class":54,"line":112},[52,94195,55075],{"class":622},[52,94197,54275],{"class":54231},[52,94199,54278],{"class":58},[52,94201,2099],{"class":622},[52,94203,54283],{"class":62},[52,94205,54238],{"class":622},[52,94207,94208,94210,94212,94214,94216,94218,94220,94222,94224],{"class":54,"line":119},[52,94209,55075],{"class":622},[52,94211,54275],{"class":54231},[52,94213,17876],{"class":58},[52,94215,2099],{"class":622},[52,94217,54322],{"class":62},[52,94219,54302],{"class":58},[52,94221,2099],{"class":622},[52,94223,54329],{"class":62},[52,94225,54238],{"class":622},[52,94227,94228,94230,94232,94234,94236],{"class":54,"line":130},[52,94229,55075],{"class":622},[52,94231,54338],{"class":54231},[52,94233,54341],{"class":622},[52,94235,54338],{"class":54231},[52,94237,54238],{"class":622},[52,94239,94240,94242,94244],{"class":54,"line":136},[52,94241,55075],{"class":622},[52,94243,3015],{"class":54231},[52,94245,54238],{"class":622},[52,94247,94248,94250],{"class":54,"line":141},[52,94249,57682],{"class":58},[52,94251,18528],{"class":622},[52,94253,94254,94256,94258,94260],{"class":54,"line":146},[52,94255,75524],{"class":90},[52,94257,54368],{"class":622},[52,94259,63435],{"class":90},[52,94261,4272],{"class":622},[52,94263,94264,94266,94268,94270,94272],{"class":54,"line":152},[52,94265,57701],{"class":90},[52,94267,54368],{"class":622},[52,94269,4689],{"class":90},[52,94271,54423],{"class":160},[52,94273,4272],{"class":622},[52,94275,94276,94278,94280,94282,94284],{"class":54,"line":157},[52,94277,57715],{"class":90},[52,94279,54368],{"class":622},[52,94281,4689],{"class":90},[52,94283,54423],{"class":160},[52,94285,4272],{"class":622},[52,94287,94288,94290,94292,94294],{"class":54,"line":173},[52,94289,57814],{"class":90},[52,94291,54368],{"class":622},[52,94293,92934],{"class":90},[52,94295,4272],{"class":622},[52,94297,94298,94300,94302,94304,94306],{"class":54,"line":178},[52,94299,57852],{"class":90},[52,94301,54368],{"class":622},[52,94303,3937],{"class":90},[52,94305,54423],{"class":160},[52,94307,4272],{"class":622},[52,94309,94310,94312,94314,94316],{"class":54,"line":184},[52,94311,60346],{"class":90},[52,94313,54368],{"class":622},[52,94315,63772],{"class":90},[52,94317,4272],{"class":622},[52,94319,94320,94322,94324,94326],{"class":54,"line":189},[52,94321,60216],{"class":90},[52,94323,54368],{"class":622},[52,94325,54523],{"class":90},[52,94327,4272],{"class":622},[52,94329,94330,94332,94334,94336,94338],{"class":54,"line":201},[52,94331,92973],{"class":90},[52,94333,54368],{"class":622},[52,94335,3432],{"class":90},[52,94337,54423],{"class":160},[52,94339,4272],{"class":622},[52,94341,94342],{"class":54,"line":206},[52,94343,5149],{"class":622},[52,94345,94346,94348,94350],{"class":54,"line":224},[52,94347,55347],{"class":622},[52,94349,3015],{"class":54231},[52,94351,54238],{"class":622},[52,94353,94354,94356,94358],{"class":54,"line":229},[52,94355,54716],{"class":622},[52,94357,54265],{"class":54231},[52,94359,54238],{"class":622},[52,94361,94362],{"class":54,"line":241},[52,94363,116],{"emptyLinePlaceholder":115},[52,94365,94366,94368,94370],{"class":54,"line":246},[52,94367,4022],{"class":622},[52,94369,54731],{"class":54231},[52,94371,54238],{"class":622},[52,94373,94374,94376,94378,94380,94382,94384,94386,94388],{"class":54,"line":252},[52,94375,55075],{"class":622},[52,94377,54542],{"class":54231},[52,94379,56416],{"class":58},[52,94381,2099],{"class":622},[52,94383,56421],{"class":62},[52,94385,58244],{"class":622},[52,94387,54542],{"class":54231},[52,94389,54238],{"class":622},[52,94391,94392,94394,94396,94398,94400,94402,94404,94406],{"class":54,"line":257},[52,94393,55075],{"class":622},[52,94395,54744],{"class":54231},[52,94397,58169],{"class":58},[52,94399,2099],{"class":622},[52,94401,91202],{"class":62},[52,94403,58244],{"class":622},[52,94405,54744],{"class":54231},[52,94407,54238],{"class":622},[52,94409,94410,94412,94414],{"class":54,"line":266},[52,94411,55075],{"class":622},[52,94413,54744],{"class":54231},[52,94415,54238],{"class":622},[52,94417,94418,94420,94422,94424,94426,94428,94430,94432],{"class":54,"line":4722},[52,94419,14177],{"class":160},[52,94421,89861],{"class":90},[52,94423,16520],{"class":160},[52,94425,57326],{"class":622},[52,94427,57329],{"class":58},[52,94429,3121],{"class":622},[52,94431,93074],{"class":62},[52,94433,170],{"class":622},[52,94435,94436,94438,94440,94442],{"class":54,"line":4727},[52,94437,55150],{"class":160},[52,94439,12394],{"class":622},[52,94441,2099],{"class":160},[52,94443,50265],{"class":90},[52,94445,94446,94448,94450],{"class":54,"line":4741},[52,94447,73013],{"class":160},[52,94449,93093],{"class":58},[52,94451,13809],{"class":622},[52,94453,94454,94456,94458,94460],{"class":54,"line":4746},[52,94455,93100],{"class":622},[52,94457,2099],{"class":160},[52,94459,5992],{"class":622},[52,94461,5662],{"class":160},[52,94463,94464],{"class":54,"line":5538},[52,94465,93111],{"class":332},[52,94467,94468],{"class":54,"line":5552},[52,94469,5149],{"class":622},[52,94471,94472],{"class":54,"line":5560},[52,94473,93120],{"class":332},[52,94475,94476],{"class":54,"line":5565},[52,94477,94478],{"class":332},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[52,94480,94481],{"class":54,"line":5571},[52,94482,94483],{"class":332},"    \u002F\u002F 1.声明一个定时器变量\n",[52,94485,94486],{"class":54,"line":5577},[52,94487,94488],{"class":332},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[52,94490,94491],{"class":54,"line":5582},[52,94492,94493],{"class":332},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[52,94495,94496],{"class":54,"line":10904},[52,94497,94498],{"class":332},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[52,94500,94501],{"class":54,"line":10928},[52,94502,94503],{"class":332},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[52,94505,94506,94508,94511,94513,94515,94517,94519],{"class":54,"line":10933},[52,94507,73013],{"class":160},[52,94509,94510],{"class":58}," throttle",[52,94512,3121],{"class":622},[52,94514,93565],{"class":8172},[52,94516,15391],{"class":622},[52,94518,3832],{"class":8172},[52,94520,15398],{"class":622},[52,94522,94523,94525],{"class":54,"line":10939},[52,94524,82700],{"class":160},[52,94526,93578],{"class":622},[52,94528,94529,94531,94533],{"class":54,"line":10966},[52,94530,76910],{"class":160},[52,94532,61848],{"class":160},[52,94534,57382],{"class":622},[52,94536,94537,94539,94541,94543],{"class":54,"line":10971},[52,94538,5458],{"class":160},[52,94540,4629],{"class":622},[52,94542,161],{"class":160},[52,94544,94545],{"class":622},"timer) {\n",[52,94547,94548,94551,94553,94555,94557,94559],{"class":54,"line":10977},[52,94549,94550],{"class":622},"          timer ",[52,94552,2099],{"class":160},[52,94554,93619],{"class":58},[52,94556,3121],{"class":622},[52,94558,57379],{"class":160},[52,94560,57382],{"class":622},[52,94562,94563,94566],{"class":54,"line":10989},[52,94564,94565],{"class":58},"            fn",[52,94567,4938],{"class":622},[52,94569,94570],{"class":54,"line":11001},[52,94571,94572],{"class":332},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[52,94574,94575],{"class":54,"line":11013},[52,94576,94577],{"class":332},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[52,94579,94580,94583,94585],{"class":54,"line":12672},[52,94581,94582],{"class":622},"            timer ",[52,94584,2099],{"class":160},[52,94586,94587],{"class":90}," null\n",[52,94589,94590],{"class":54,"line":12697},[52,94591,94592],{"class":332},"            \u002F\u002F 不能用clearTimeout(timer)\n",[52,94594,94595],{"class":54,"line":12720},[52,94596,94597],{"class":332},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[52,94599,94600],{"class":54,"line":12744},[52,94601,94602],{"class":622},"          }, t)\n",[52,94604,94605],{"class":54,"line":12749},[52,94606,5490],{"class":622},[52,94608,94609],{"class":54,"line":12754},[52,94610,55328],{"class":622},[52,94612,94613],{"class":54,"line":12759},[52,94614,5149],{"class":622},[52,94616,94617,94619,94621,94623,94625,94627,94629,94631,94633],{"class":54,"line":12768},[52,94618,93135],{"class":622},[52,94620,60743],{"class":58},[52,94622,3121],{"class":622},[52,94624,93142],{"class":62},[52,94626,15391],{"class":622},[52,94628,94101],{"class":58},[52,94630,93151],{"class":622},[52,94632,68003],{"class":90},[52,94634,33429],{"class":622},[52,94636,94637,94639,94641],{"class":54,"line":12773},[52,94638,55347],{"class":622},[52,94640,54744],{"class":54231},[52,94642,54238],{"class":622},[52,94644,94645,94647,94649],{"class":54,"line":12779},[52,94646,54716],{"class":622},[52,94648,54731],{"class":54231},[52,94650,54238],{"class":622},[52,94652,94653],{"class":54,"line":12800},[52,94654,116],{"emptyLinePlaceholder":115},[52,94656,94657,94659,94661],{"class":54,"line":12806},[52,94658,54716],{"class":622},[52,94660,53566],{"class":54231},[52,94662,54238],{"class":622},[30,94664,94666],{"id":94665},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[19,94668,94670],{"className":55997,"code":94669,"language":55999,"meta":28,"style":28},"\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",[26,94671,94672,94680,94688,94693,94698,94703,94708,94712,94720],{"__ignoreMap":28},[52,94673,94674,94676,94678],{"class":54,"line":55},[52,94675,4022],{"class":622},[52,94677,54731],{"class":54231},[52,94679,54238],{"class":622},[52,94681,94682,94684,94686],{"class":54,"line":69},[52,94683,55075],{"class":622},[52,94685,54744],{"class":54231},[52,94687,54238],{"class":622},[52,94689,94690],{"class":54,"line":82},[52,94691,94692],{"class":622},"    let timer = null\n",[52,94694,94695],{"class":54,"line":97},[52,94696,94697],{"class":622},"    timer = setTimeout(() => {\n",[52,94699,94700],{"class":54,"line":112},[52,94701,94702],{"class":622},"      clearTimeout(timer)\n",[52,94704,94705],{"class":54,"line":119},[52,94706,94707],{"class":622},"      console.log(timer)\n",[52,94709,94710],{"class":54,"line":130},[52,94711,63155],{"class":622},[52,94713,94714,94716,94718],{"class":54,"line":136},[52,94715,55347],{"class":622},[52,94717,54744],{"class":54231},[52,94719,54238],{"class":622},[52,94721,94722,94724,94726],{"class":54,"line":141},[52,94723,54716],{"class":622},[52,94725,54731],{"class":54231},[52,94727,54238],{"class":622},[274,94729,94730],{},"输出为1",[274,94732,94733],{},"在开启的定时器里边写清除定时器",[274,94735,94736],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[30,94738,94740],{"id":94739},"_4174-节流综合案例","4.17.4 节流综合案例",[274,94742,94743],{},"页面打开，可以记录上一次的视频播放位置",[274,94745,94746],{},[280,94747],{"alt":28,"src":94748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[274,94750,94751],{},[280,94752],{"alt":28,"src":94753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[19,94755,94757],{"className":53564,"code":94756,"language":53566,"meta":28,"style":28},"\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",[26,94758,94759,94769,94783,94787,94795,94809,94829,94849,94871,94884,94892,94898,94908,94918,94928,94932,94936,94943,94956,94968,94972,94976,94986,94998,95012,95016,95020,95027,95037,95050,95062,95072,95082,95098,95110,95114,95118,95126,95136,95148,95158,95168,95178,95182,95186,95196,95207,95211,95219,95227,95231,95239,95254,95269,95284,95305,95313,95321,95336,95358,95366,95381,95407,95433,95459,95467,95475,95494,95502,95507,95526,95531,95549,95554,95559,95567,95572,95586,95594,95599,95616,95620,95625,95647,95651,95659,95667,95671],{"__ignoreMap":28},[52,94760,94761,94763,94765,94767],{"class":54,"line":55},[52,94762,54228],{"class":622},[52,94764,54232],{"class":54231},[52,94766,54235],{"class":58},[52,94768,54238],{"class":622},[52,94770,94771,94773,94775,94777,94779,94781],{"class":54,"line":69},[52,94772,4022],{"class":622},[52,94774,53566],{"class":54231},[52,94776,54247],{"class":58},[52,94778,2099],{"class":622},[52,94780,54252],{"class":62},[52,94782,54238],{"class":622},[52,94784,94785],{"class":54,"line":82},[52,94786,116],{"emptyLinePlaceholder":115},[52,94788,94789,94791,94793],{"class":54,"line":97},[52,94790,4022],{"class":622},[52,94792,54265],{"class":54231},[52,94794,54238],{"class":622},[52,94796,94797,94799,94801,94803,94805,94807],{"class":54,"line":112},[52,94798,55075],{"class":622},[52,94800,54275],{"class":54231},[52,94802,54278],{"class":58},[52,94804,2099],{"class":622},[52,94806,54283],{"class":62},[52,94808,62057],{"class":622},[52,94810,94811,94813,94815,94817,94819,94821,94823,94825,94827],{"class":54,"line":119},[52,94812,55075],{"class":622},[52,94814,54275],{"class":54231},[52,94816,54294],{"class":58},[52,94818,2099],{"class":622},[52,94820,54299],{"class":62},[52,94822,54302],{"class":58},[52,94824,2099],{"class":622},[52,94826,54307],{"class":62},[52,94828,62057],{"class":622},[52,94830,94831,94833,94835,94837,94839,94841,94843,94845,94847],{"class":54,"line":130},[52,94832,55075],{"class":622},[52,94834,54275],{"class":54231},[52,94836,17876],{"class":58},[52,94838,2099],{"class":622},[52,94840,54322],{"class":62},[52,94842,54302],{"class":58},[52,94844,2099],{"class":622},[52,94846,54329],{"class":62},[52,94848,62057],{"class":622},[52,94850,94851,94853,94855,94857,94859,94862,94864,94866,94869],{"class":54,"line":136},[52,94852,55075],{"class":622},[52,94854,54275],{"class":54231},[52,94856,17876],{"class":58},[52,94858,2099],{"class":622},[52,94860,94861],{"class":62},"\"referrer\"",[52,94863,54302],{"class":58},[52,94865,2099],{"class":622},[52,94867,94868],{"class":62},"\"never\"",[52,94870,62057],{"class":622},[52,94872,94873,94875,94877,94880,94882],{"class":54,"line":141},[52,94874,55075],{"class":622},[52,94876,54338],{"class":54231},[52,94878,94879],{"class":622},">综合案例\u003C\u002F",[52,94881,54338],{"class":54231},[52,94883,54238],{"class":622},[52,94885,94886,94888,94890],{"class":54,"line":146},[52,94887,55075],{"class":622},[52,94889,3015],{"class":54231},[52,94891,54238],{"class":622},[52,94893,94894,94896],{"class":54,"line":152},[52,94895,9359],{"class":54231},[52,94897,18528],{"class":622},[52,94899,94900,94902,94904,94906],{"class":54,"line":157},[52,94901,57625],{"class":90},[52,94903,54368],{"class":622},[52,94905,3306],{"class":90},[52,94907,4272],{"class":622},[52,94909,94910,94912,94914,94916],{"class":54,"line":173},[52,94911,57636],{"class":90},[52,94913,54368],{"class":622},[52,94915,3306],{"class":90},[52,94917,4272],{"class":622},[52,94919,94920,94922,94924,94926],{"class":54,"line":178},[52,94921,75524],{"class":90},[52,94923,54368],{"class":622},[52,94925,63435],{"class":90},[52,94927,4272],{"class":622},[52,94929,94930],{"class":54,"line":184},[52,94931,5149],{"class":622},[52,94933,94934],{"class":54,"line":189},[52,94935,116],{"emptyLinePlaceholder":115},[52,94937,94938,94941],{"class":54,"line":201},[52,94939,94940],{"class":58},"    .container",[52,94942,18528],{"class":622},[52,94944,94945,94947,94949,94952,94954],{"class":54,"line":206},[52,94946,57701],{"class":90},[52,94948,54368],{"class":622},[52,94950,94951],{"class":90},"1200",[52,94953,54423],{"class":160},[52,94955,4272],{"class":622},[52,94957,94958,94960,94962,94964,94966],{"class":54,"line":224},[52,94959,57636],{"class":90},[52,94961,54368],{"class":622},[52,94963,3306],{"class":90},[52,94965,54487],{"class":90},[52,94967,4272],{"class":622},[52,94969,94970],{"class":54,"line":229},[52,94971,5149],{"class":622},[52,94973,94974],{"class":54,"line":241},[52,94975,116],{"emptyLinePlaceholder":115},[52,94977,94978,94981,94984],{"class":54,"line":246},[52,94979,94980],{"class":58},"    .video",[52,94982,94983],{"class":54231}," video",[52,94985,18528],{"class":622},[52,94987,94988,94990,94992,94994,94996],{"class":54,"line":252},[52,94989,57701],{"class":90},[52,94991,54368],{"class":622},[52,94993,3424],{"class":90},[52,94995,3441],{"class":160},[52,94997,4272],{"class":622},[52,94999,95000,95002,95004,95006,95008,95010],{"class":54,"line":257},[52,95001,57625],{"class":90},[52,95003,54368],{"class":622},[52,95005,3812],{"class":90},[52,95007,54423],{"class":160},[52,95009,7052],{"class":90},[52,95011,4272],{"class":622},[52,95013,95014],{"class":54,"line":266},[52,95015,5149],{"class":622},[52,95017,95018],{"class":54,"line":4722},[52,95019,116],{"emptyLinePlaceholder":115},[52,95021,95022,95025],{"class":54,"line":4727},[52,95023,95024],{"class":58},"    .elevator",[52,95026,18528],{"class":622},[52,95028,95029,95031,95033,95035],{"class":54,"line":4741},[52,95030,57689],{"class":90},[52,95032,54368],{"class":622},[52,95034,89161],{"class":90},[52,95036,4272],{"class":622},[52,95038,95039,95041,95043,95046,95048],{"class":54,"line":4746},[52,95040,57877],{"class":90},[52,95042,54368],{"class":622},[52,95044,95045],{"class":90},"280",[52,95047,54423],{"class":160},[52,95049,4272],{"class":622},[52,95051,95052,95054,95056,95058,95060],{"class":54,"line":5538},[52,95053,89355],{"class":90},[52,95055,54368],{"class":622},[52,95057,3812],{"class":90},[52,95059,54423],{"class":160},[52,95061,4272],{"class":622},[52,95063,95064,95066,95068,95070],{"class":54,"line":5552},[52,95065,89168],{"class":90},[52,95067,54368],{"class":622},[52,95069,89173],{"class":90},[52,95071,4272],{"class":622},[52,95073,95074,95076,95078,95080],{"class":54,"line":5560},[52,95075,64651],{"class":90},[52,95077,54368],{"class":622},[52,95079,63772],{"class":90},[52,95081,4272],{"class":622},[52,95083,95084,95086,95088,95090,95092,95094,95096],{"class":54,"line":5565},[52,95085,64907],{"class":90},[52,95087,54368],{"class":622},[52,95089,3332],{"class":90},[52,95091,54423],{"class":160},[52,95093,54452],{"class":90},[52,95095,65174],{"class":90},[52,95097,4272],{"class":622},[52,95099,95100,95102,95104,95106,95108],{"class":54,"line":5571},[52,95101,57701],{"class":90},[52,95103,54368],{"class":622},[52,95105,4019],{"class":90},[52,95107,54423],{"class":160},[52,95109,4272],{"class":622},[52,95111,95112],{"class":54,"line":5577},[52,95113,5149],{"class":622},[52,95115,95116],{"class":54,"line":5582},[52,95117,116],{"emptyLinePlaceholder":115},[52,95119,95120,95122,95124],{"class":54,"line":10904},[52,95121,95024],{"class":58},[52,95123,4377],{"class":54231},[52,95125,18528],{"class":622},[52,95127,95128,95130,95132,95134],{"class":54,"line":10928},[52,95129,57939],{"class":90},[52,95131,54368],{"class":622},[52,95133,63799],{"class":90},[52,95135,4272],{"class":622},[52,95137,95138,95140,95142,95144,95146],{"class":54,"line":10933},[52,95139,57625],{"class":90},[52,95141,54368],{"class":622},[52,95143,3559],{"class":90},[52,95145,54423],{"class":160},[52,95147,4272],{"class":622},[52,95149,95150,95152,95154,95156],{"class":54,"line":10939},[52,95151,66900],{"class":90},[52,95153,54368],{"class":622},[52,95155,57667],{"class":90},[52,95157,4272],{"class":622},[52,95159,95160,95162,95164,95166],{"class":54,"line":10966},[52,95161,60216],{"class":90},[52,95163,54368],{"class":622},[52,95165,54523],{"class":90},[52,95167,4272],{"class":622},[52,95169,95170,95172,95174,95176],{"class":54,"line":10971},[52,95171,60346],{"class":90},[52,95173,54368],{"class":622},[52,95175,65000],{"class":90},[52,95177,4272],{"class":622},[52,95179,95180],{"class":54,"line":10977},[52,95181,5149],{"class":622},[52,95183,95184],{"class":54,"line":10989},[52,95185,116],{"emptyLinePlaceholder":115},[52,95187,95188,95190,95192,95194],{"class":54,"line":11001},[52,95189,95024],{"class":58},[52,95191,4377],{"class":54231},[52,95193,66954],{"class":58},[52,95195,18528],{"class":622},[52,95197,95198,95200,95202,95205],{"class":54,"line":11013},[52,95199,60346],{"class":90},[52,95201,54368],{"class":622},[52,95203,95204],{"class":90},"#1286ff",[52,95206,4272],{"class":622},[52,95208,95209],{"class":54,"line":12672},[52,95210,5149],{"class":622},[52,95212,95213,95215,95217],{"class":54,"line":12697},[52,95214,55347],{"class":622},[52,95216,3015],{"class":54231},[52,95218,54238],{"class":622},[52,95220,95221,95223,95225],{"class":54,"line":12720},[52,95222,54716],{"class":622},[52,95224,54265],{"class":54231},[52,95226,54238],{"class":622},[52,95228,95229],{"class":54,"line":12744},[52,95230,116],{"emptyLinePlaceholder":115},[52,95232,95233,95235,95237],{"class":54,"line":12749},[52,95234,4022],{"class":622},[52,95236,54731],{"class":54231},[52,95238,54238],{"class":622},[52,95240,95241,95243,95245,95247,95249,95252],{"class":54,"line":12754},[52,95242,55075],{"class":622},[52,95244,54542],{"class":54231},[52,95246,56416],{"class":58},[52,95248,2099],{"class":622},[52,95250,95251],{"class":62},"\"container\"",[52,95253,54238],{"class":622},[52,95255,95256,95258,95260,95262,95264,95267],{"class":54,"line":12759},[52,95257,54272],{"class":622},[52,95259,54542],{"class":54231},[52,95261,56416],{"class":58},[52,95263,2099],{"class":622},[52,95265,95266],{"class":62},"\"header\"",[52,95268,54238],{"class":622},[52,95270,95271,95273,95275,95277,95279,95282],{"class":54,"line":12768},[52,95272,58164],{"class":622},[52,95274,300],{"class":54231},[52,95276,63987],{"class":58},[52,95278,2099],{"class":622},[52,95280,95281],{"class":62},"\"http:\u002F\u002Fpip.itcast.cn\"",[52,95283,54238],{"class":622},[52,95285,95286,95288,95290,95292,95294,95297,95299,95301,95303],{"class":54,"line":12773},[52,95287,58232],{"class":622},[52,95289,280],{"class":54231},[52,95291,58169],{"class":58},[52,95293,2099],{"class":622},[52,95295,95296],{"class":62},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[52,95298,58177],{"class":58},[52,95300,2099],{"class":622},[52,95302,10608],{"class":62},[52,95304,62057],{"class":622},[52,95306,95307,95309,95311],{"class":54,"line":12779},[52,95308,58337],{"class":622},[52,95310,300],{"class":54231},[52,95312,54238],{"class":622},[52,95314,95315,95317,95319],{"class":54,"line":12800},[52,95316,54707],{"class":622},[52,95318,54542],{"class":54231},[52,95320,54238],{"class":622},[52,95322,95323,95325,95327,95329,95331,95334],{"class":54,"line":12806},[52,95324,54272],{"class":622},[52,95326,54542],{"class":54231},[52,95328,56416],{"class":58},[52,95330,2099],{"class":622},[52,95332,95333],{"class":62},"\"video\"",[52,95335,54238],{"class":622},[52,95337,95338,95340,95342,95344,95346,95349,95352,95354,95356],{"class":54,"line":12820},[52,95339,58164],{"class":622},[52,95341,31117],{"class":54231},[52,95343,58169],{"class":58},[52,95345,2099],{"class":622},[52,95347,95348],{"class":62},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[52,95350,95351],{"class":58}," controls",[52,95353,58244],{"class":622},[52,95355,31117],{"class":54231},[52,95357,54238],{"class":622},[52,95359,95360,95362,95364],{"class":54,"line":12826},[52,95361,54707],{"class":622},[52,95363,54542],{"class":54231},[52,95365,54238],{"class":622},[52,95367,95368,95370,95372,95374,95376,95379],{"class":54,"line":12853},[52,95369,54272],{"class":622},[52,95371,54542],{"class":54231},[52,95373,56416],{"class":58},[52,95375,2099],{"class":622},[52,95377,95378],{"class":62},"\"elevator\"",[52,95380,54238],{"class":622},[52,95382,95383,95385,95387,95389,95391,95393,95396,95398,95400,95403,95405],{"class":54,"line":12862},[52,95384,58164],{"class":622},[52,95386,300],{"class":54231},[52,95388,63987],{"class":58},[52,95390,2099],{"class":622},[52,95392,67166],{"class":62},[52,95394,95395],{"class":58}," data-ref",[52,95397,2099],{"class":622},[52,95399,95333],{"class":62},[52,95401,95402],{"class":622},">视频介绍\u003C\u002F",[52,95404,300],{"class":54231},[52,95406,54238],{"class":622},[52,95408,95409,95411,95413,95415,95417,95419,95421,95423,95426,95429,95431],{"class":54,"line":12868},[52,95410,58164],{"class":622},[52,95412,300],{"class":54231},[52,95414,63987],{"class":58},[52,95416,2099],{"class":622},[52,95418,67166],{"class":62},[52,95420,95395],{"class":58},[52,95422,2099],{"class":622},[52,95424,95425],{"class":62},"\"intro\"",[52,95427,95428],{"class":622},">课程简介\u003C\u002F",[52,95430,300],{"class":54231},[52,95432,54238],{"class":622},[52,95434,95435,95437,95439,95441,95443,95445,95447,95449,95452,95455,95457],{"class":54,"line":12876},[52,95436,58164],{"class":622},[52,95438,300],{"class":54231},[52,95440,63987],{"class":58},[52,95442,2099],{"class":622},[52,95444,67166],{"class":62},[52,95446,95395],{"class":58},[52,95448,2099],{"class":622},[52,95450,95451],{"class":62},"\"outline\"",[52,95453,95454],{"class":622},">评论列表\u003C\u002F",[52,95456,300],{"class":54231},[52,95458,54238],{"class":622},[52,95460,95461,95463,95465],{"class":54,"line":12881},[52,95462,54707],{"class":622},[52,95464,54542],{"class":54231},[52,95466,54238],{"class":622},[52,95468,95469,95471,95473],{"class":54,"line":19560},[52,95470,55347],{"class":622},[52,95472,54542],{"class":54231},[52,95474,54238],{"class":622},[52,95476,95477,95479,95481,95483,95485,95488,95490,95492],{"class":54,"line":19566},[52,95478,55075],{"class":622},[52,95480,54744],{"class":54231},[52,95482,58169],{"class":58},[52,95484,2099],{"class":622},[52,95486,95487],{"class":62},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[52,95489,58244],{"class":622},[52,95491,54744],{"class":54231},[52,95493,54238],{"class":622},[52,95495,95496,95498,95500],{"class":54,"line":19589},[52,95497,55075],{"class":622},[52,95499,54744],{"class":54231},[52,95501,54238],{"class":622},[52,95503,95504],{"class":54,"line":19595},[52,95505,95506],{"class":332},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[52,95508,95509,95511,95513,95515,95517,95519,95521,95524],{"class":54,"line":19618},[52,95510,14177],{"class":160},[52,95512,94983],{"class":90},[52,95514,16520],{"class":160},[52,95516,57326],{"class":622},[52,95518,57329],{"class":58},[52,95520,3121],{"class":622},[52,95522,95523],{"class":62},"'video'",[52,95525,170],{"class":622},[52,95527,95528],{"class":54,"line":19632},[52,95529,95530],{"class":332},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[52,95532,95533,95536,95538,95540,95542,95545,95547],{"class":54,"line":19652},[52,95534,95535],{"class":622},"    video.ontimeupdate ",[52,95537,2099],{"class":160},[52,95539,91283],{"class":622},[52,95541,94101],{"class":58},[52,95543,95544],{"class":622},"(() ",[52,95546,87650],{"class":160},[52,95548,18528],{"class":622},[52,95550,95551],{"class":54,"line":19658},[52,95552,95553],{"class":332},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[52,95555,95556],{"class":54,"line":19669},[52,95557,95558],{"class":332},"      \u002F\u002F 控制台输出当前的时间\n",[52,95560,95561,95564],{"class":54,"line":19692},[52,95562,95563],{"class":332},"      \u002F\u002F console.log(video.currentTime)",[52,95565,95566],{"class":332},"  \u002F\u002F获得当前的视频时间\n",[52,95568,95569],{"class":54,"line":19714},[52,95570,95571],{"class":332},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[52,95573,95574,95576,95578,95580,95583],{"class":54,"line":19719},[52,95575,77611],{"class":622},[52,95577,74582],{"class":58},[52,95579,3121],{"class":622},[52,95581,95582],{"class":62},"'currentTime'",[52,95584,95585],{"class":622},", video.currentTime)\n",[52,95587,95588,95590,95592],{"class":54,"line":19725},[52,95589,57465],{"class":622},[52,95591,9366],{"class":90},[52,95593,170],{"class":622},[52,95595,95596],{"class":54,"line":19739},[52,95597,95598],{"class":332},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[52,95600,95601,95604,95607,95609,95612,95614],{"class":54,"line":19752},[52,95602,95603],{"class":622},"    video.",[52,95605,95606],{"class":58},"onloadeddata",[52,95608,16520],{"class":160},[52,95610,95611],{"class":622}," () ",[52,95613,87650],{"class":160},[52,95615,18528],{"class":622},[52,95617,95618],{"class":54,"line":19757},[52,95619,62942],{"class":332},[52,95621,95622],{"class":54,"line":19771},[52,95623,95624],{"class":332},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[52,95626,95627,95630,95632,95635,95637,95639,95641,95643,95645],{"class":54,"line":19776},[52,95628,95629],{"class":622},"      video.currentTime ",[52,95631,2099],{"class":160},[52,95633,95634],{"class":622}," localStorage.",[52,95636,74613],{"class":58},[52,95638,3121],{"class":622},[52,95640,95582],{"class":62},[52,95642,16670],{"class":622},[52,95644,74285],{"class":160},[52,95646,50265],{"class":90},[52,95648,95649],{"class":54,"line":19782},[52,95650,5149],{"class":622},[52,95652,95653,95655,95657],{"class":54,"line":19787},[52,95654,55347],{"class":622},[52,95656,54744],{"class":54231},[52,95658,54238],{"class":622},[52,95660,95661,95663,95665],{"class":54,"line":19801},[52,95662,54716],{"class":622},[52,95664,54731],{"class":54231},[52,95666,54238],{"class":622},[52,95668,95669],{"class":54,"line":19806},[52,95670,116],{"emptyLinePlaceholder":115},[52,95672,95673,95675,95677],{"class":54,"line":19811},[52,95674,54716],{"class":622},[52,95676,53566],{"class":54231},[52,95678,54238],{"class":622},[3015,95680,95681],{},"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":28,"searchDepth":69,"depth":69,"links":95683},[95684,95689,95693,95694,95695,95700,95705,95706,95707,95708,95715,95720,95721,95731,95735,95736,95740],{"id":79619,"depth":69,"text":79620,"children":95685},[95686,95687,95688],{"id":79623,"depth":82,"text":79624},{"id":79648,"depth":82,"text":79649},{"id":79660,"depth":82,"text":79661},{"id":79672,"depth":69,"text":79673,"children":95690},[95691,95692],{"id":79676,"depth":82,"text":79677},{"id":79691,"depth":82,"text":79692},{"id":79743,"depth":69,"text":79744},{"id":79787,"depth":69,"text":79788},{"id":79804,"depth":69,"text":79805,"children":95696},[95697,95698,95699],{"id":79808,"depth":82,"text":79809},{"id":79821,"depth":82,"text":79822},{"id":79926,"depth":82,"text":79927},{"id":80215,"depth":69,"text":80216,"children":95701},[95702,95703,95704],{"id":80219,"depth":82,"text":80220},{"id":80662,"depth":82,"text":80663},{"id":81073,"depth":82,"text":81074},{"id":81136,"depth":69,"text":81137},{"id":81215,"depth":69,"text":81216},{"id":81308,"depth":69,"text":81309},{"id":83153,"depth":69,"text":83154,"children":95709},[95710,95711,95712,95713,95714],{"id":83157,"depth":82,"text":83158},{"id":83169,"depth":82,"text":83170},{"id":83388,"depth":82,"text":83389},{"id":83406,"depth":82,"text":83407},{"id":83466,"depth":82,"text":83467},{"id":87734,"depth":69,"text":87735,"children":95716},[95717,95718,95719],{"id":87738,"depth":82,"text":87739},{"id":87756,"depth":82,"text":87757},{"id":87782,"depth":82,"text":87783},{"id":87791,"depth":69,"text":87792},{"id":87813,"depth":69,"text":87814,"children":95722},[95723,95724,95725,95726,95727,95728,95729,95730],{"id":87817,"depth":82,"text":87818},{"id":88078,"depth":82,"text":88079},{"id":88264,"depth":82,"text":88265},{"id":88631,"depth":82,"text":88632},{"id":88747,"depth":82,"text":88748},{"id":88783,"depth":82,"text":88784},{"id":88830,"depth":82,"text":88831},{"id":88864,"depth":82,"text":88865},{"id":90227,"depth":69,"text":90228,"children":95732},[95733,95734],{"id":90231,"depth":82,"text":90232},{"id":90268,"depth":82,"text":90269},{"id":91623,"depth":69,"text":91624},{"id":91994,"depth":69,"text":91995,"children":95737},[95738,95739],{"id":91998,"depth":82,"text":91999},{"id":92032,"depth":82,"text":92033},{"id":92761,"depth":69,"text":92762,"children":95741},[95742,95743,95744,95745],{"id":92765,"depth":82,"text":92766},{"id":93723,"depth":82,"text":93724},{"id":94665,"depth":82,"text":94666},{"id":94739,"depth":82,"text":94740},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":79608,"description":3046},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95752,"title":95753,"body":95754,"description":95765,"extension":3047,"meta":95766,"navigation":115,"path":95768,"seo":95769,"stem":95770,"__hash__":95771},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95755,"toc":95763},[95756],[274,95757,95758,95759],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[300,95760,95761],{"href":95761,"rel":95762},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[304],{"title":28,"searchDepth":69,"depth":69,"links":95764},[],"三件套第三套学习",{"category":95767},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95753,"description":95765},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95773,"title":95774,"body":95775,"description":3046,"extension":3047,"meta":95880,"navigation":115,"path":95881,"seo":95882,"stem":95883,"__hash__":95884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95776,"toc":95875},[95777,95784,95787,95790,95793,95797,95806,95809,95812,95816,95825,95828,95832,95835,95855,95858,95872],[274,95778,95779],{},[300,95780,95783],{"href":95781,"rel":95782},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[304],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95785,95774],{"id":95786},"_1安装",[274,95788,95789],{},"numpy是科学计算基础库,底层是C语言",[274,95791,95792],{},"三种方式：",[14,95794,95796],{"id":95795},"_11-通过pip安装","1.1 通过pip安装",[19,95798,95800],{"className":33310,"code":95799,"language":33312,"meta":28,"style":28},"pip install numpy\n",[26,95801,95802],{"__ignoreMap":28},[52,95803,95804],{"class":54,"line":55},[52,95805,95799],{"class":622},[274,95807,95808],{},"首选方式，自动处理依赖项",[274,95810,95811],{},"在提示系统命令符中使用cmd",[14,95813,95815],{"id":95814},"_12-通过anaconda安装","1.2 通过Anaconda安装",[19,95817,95819],{"className":33310,"code":95818,"language":33312,"meta":28,"style":28},"conda install numpy\n",[26,95820,95821],{"__ignoreMap":28},[52,95822,95823],{"class":54,"line":55},[52,95824,95818],{"class":622},[274,95826,95827],{},"自动解决环境依赖",[14,95829,95831],{"id":95830},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[274,95833,95834],{},"对于Debian\u002FUbuntu",[19,95836,95838],{"className":33310,"code":95837,"language":33312,"meta":28,"style":28},"sudo apt-get install python3-numpy\n",[26,95839,95840],{"__ignoreMap":28},[52,95841,95842,95845,95847,95850,95852],{"class":54,"line":55},[52,95843,95844],{"class":622},"sudo apt",[52,95846,3644],{"class":160},[52,95848,95849],{"class":622},"get install python3",[52,95851,3644],{"class":160},[52,95853,95854],{"class":622},"numpy\n",[274,95856,95857],{},"对于Fedora:",[19,95859,95861],{"className":33310,"code":95860,"language":33312,"meta":28,"style":28},"sudo dnf install python3-numpy\n",[26,95862,95863],{"__ignoreMap":28},[52,95864,95865,95868,95870],{"class":54,"line":55},[52,95866,95867],{"class":622},"sudo dnf install python3",[52,95869,3644],{"class":160},[52,95871,95854],{"class":622},[3015,95873,95874],{},"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":28,"searchDepth":69,"depth":69,"links":95876},[95877,95878,95879],{"id":95795,"depth":69,"text":95796},{"id":95814,"depth":69,"text":95815},{"id":95830,"depth":69,"text":95831},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95774,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95886,"title":95887,"body":95888,"description":3046,"extension":3047,"meta":96001,"navigation":115,"path":96002,"seo":96003,"stem":96004,"__hash__":96005},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95889,"toc":95999},[95890,95893,95896,95899,95902,95905,95908,95911,95914,95917,95993,95996],[10,95891,95887],{"id":95892},"_10算数函数",[274,95894,95895],{},"加减乘除运算跟python基础语法没区别",[274,95897,95898],{},"除了python那种方法外还可以使用函数",[274,95900,95901],{},"加：np.add(a,b)",[274,95903,95904],{},"减：np.subtract(a,b)",[274,95906,95907],{},"乘：np.multiply(a,b)",[274,95909,95910],{},"除：np.divide(a,b) == a\u002Fb",[274,95912,95913],{},"取余：np.mod(a,b) == a%b",[274,95915,95916],{},"必须会的用法：",[19,95918,95920],{"className":33310,"code":95919,"language":33312,"meta":28,"style":28},"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",[26,95921,95922,95944,95965,95975,95988],{"__ignoreMap":28},[52,95923,95924,95926,95928,95931,95933,95936,95938,95940,95942],{"class":54,"line":55},[52,95925,300],{"class":622},[52,95927,2099],{"class":160},[52,95929,95930],{"class":622},"np.arange(",[52,95932,3533],{"class":90},[52,95934,95935],{"class":622},").reshape(",[52,95937,3188],{"class":90},[52,95939,3491],{"class":622},[52,95941,3188],{"class":90},[52,95943,170],{"class":622},[52,95945,95946,95948,95950,95953,95955,95957,95959,95961,95963],{"class":54,"line":69},[52,95947,3376],{"class":622},[52,95949,2099],{"class":160},[52,95951,95952],{"class":622},"np.array([",[52,95954,3559],{"class":90},[52,95956,3491],{"class":622},[52,95958,3559],{"class":90},[52,95960,3491],{"class":622},[52,95962,3559],{"class":90},[52,95964,7616],{"class":622},[52,95966,95967,95970,95972],{"class":54,"line":82},[52,95968,95969],{"class":622},"result",[52,95971,2099],{"class":160},[52,95973,95974],{"class":622},"np.empty_like(a)\n",[52,95976,95977,95980,95983,95985],{"class":54,"line":97},[52,95978,95979],{"class":622},"np.add(a,b,",[52,95981,95982],{"class":8172},"out",[52,95984,2099],{"class":160},[52,95986,95987],{"class":622},"result)\n",[52,95989,95990],{"class":54,"line":112},[52,95991,95992],{"class":622},"result\n",[274,95994,95995],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[3015,95997,95998],{},"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":28,"searchDepth":69,"depth":69,"links":96000},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95887,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":96007,"title":96008,"body":96009,"description":3046,"extension":3047,"meta":96771,"navigation":115,"path":96772,"seo":96773,"stem":96774,"__hash__":96775},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":96010,"toc":96758},[96011,96014,96017,96020,96024,96063,96067,96111,96171,96175,96178,96217,96220,96265,96269,96305,96309,96378,96382,96446,96450,96453,96456,96459,96462,96498,96502,96542,96546,96618,96621,96625,96688,96692,96755],[10,96012,96008],{"id":96013},"_11统计函数",[274,96015,96016],{},"sum max min mean",[274,96018,96019],{},"这些有axis参数，可以指定方向",[14,96021,96023],{"id":96022},"_111-sum求和函数","11.1 sum()求和函数",[19,96025,96027],{"className":33310,"code":96026,"language":33312,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[26,96028,96029,96034,96055],{"__ignoreMap":28},[52,96030,96031],{"class":54,"line":55},[52,96032,96033],{"class":332},"#创建一维数组\n",[52,96035,96036,96038,96040,96043,96045,96047,96049,96051,96053],{"class":54,"line":69},[52,96037,300],{"class":622},[52,96039,2099],{"class":160},[52,96041,96042],{"class":622},"np.random.randint(",[52,96044,3332],{"class":90},[52,96046,3491],{"class":622},[52,96048,3424],{"class":90},[52,96050,3491],{"class":622},[52,96052,3812],{"class":90},[52,96054,170],{"class":622},[52,96056,96057,96060],{"class":54,"line":82},[52,96058,96059],{"class":622},"np.sum(a)",[52,96061,96062],{"class":332},"#求和\n",[14,96064,96066],{"id":96065},"_112-max求最大值函数","11.2 max()求最大值函数",[19,96068,96070],{"className":33310,"code":96069,"language":33312,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[26,96071,96072,96076,96096,96101,96106],{"__ignoreMap":28},[52,96073,96074],{"class":54,"line":55},[52,96075,96033],{"class":332},[52,96077,96078,96080,96082,96084,96086,96088,96090,96092,96094],{"class":54,"line":69},[52,96079,300],{"class":622},[52,96081,2099],{"class":160},[52,96083,96042],{"class":622},[52,96085,3332],{"class":90},[52,96087,3491],{"class":622},[52,96089,3424],{"class":90},[52,96091,3491],{"class":622},[52,96093,3812],{"class":90},[52,96095,170],{"class":622},[52,96097,96098],{"class":54,"line":82},[52,96099,96100],{"class":622},"np.max(a)\n",[52,96102,96103],{"class":54,"line":97},[52,96104,96105],{"class":332},"#最大索引(求最大元素的索引)arg\n",[52,96107,96108],{"class":54,"line":112},[52,96109,96110],{"class":622},"np.argmax(a)\n",[19,96112,96114],{"className":33310,"code":96113,"language":33312,"meta":28,"style":28},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[26,96115,96116,96137,96157,96161],{"__ignoreMap":28},[52,96117,96118,96120,96122,96125,96127,96129,96131,96133,96135],{"class":54,"line":55},[52,96119,13875],{"class":622},[52,96121,2099],{"class":160},[52,96123,96124],{"class":622}," np.array([",[52,96126,3332],{"class":90},[52,96128,15391],{"class":622},[52,96130,3432],{"class":90},[52,96132,15391],{"class":622},[52,96134,3188],{"class":90},[52,96136,7616],{"class":622},[52,96138,96139,96141,96143,96145,96147,96149,96151,96153,96155],{"class":54,"line":69},[52,96140,13901],{"class":622},[52,96142,2099],{"class":160},[52,96144,96124],{"class":622},[52,96146,3188],{"class":90},[52,96148,15391],{"class":622},[52,96150,3194],{"class":90},[52,96152,15391],{"class":622},[52,96154,3406],{"class":90},[52,96156,7616],{"class":622},[52,96158,96159],{"class":54,"line":82},[52,96160,116],{"emptyLinePlaceholder":115},[52,96162,96163,96165,96168],{"class":54,"line":97},[52,96164,33347],{"class":90},[52,96166,96167],{"class":622},"(np.maximum(a, b))   ",[52,96169,96170],{"class":332},"# [3 5 4]，每个位置上取较大值\n",[14,96172,96174],{"id":96173},"_113-mean求平均值函数","11.3 mean()求平均值函数",[274,96176,96177],{},"①一维数组：",[19,96179,96181],{"className":33310,"code":96180,"language":33312,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[26,96182,96183,96187,96207,96212],{"__ignoreMap":28},[52,96184,96185],{"class":54,"line":55},[52,96186,96033],{"class":332},[52,96188,96189,96191,96193,96195,96197,96199,96201,96203,96205],{"class":54,"line":69},[52,96190,300],{"class":622},[52,96192,2099],{"class":160},[52,96194,96042],{"class":622},[52,96196,3332],{"class":90},[52,96198,3491],{"class":622},[52,96200,3424],{"class":90},[52,96202,3491],{"class":622},[52,96204,3812],{"class":90},[52,96206,170],{"class":622},[52,96208,96209],{"class":54,"line":82},[52,96210,96211],{"class":332},"#求平均值\n",[52,96213,96214],{"class":54,"line":97},[52,96215,96216],{"class":622},"np.mean(a)\n",[274,96218,96219],{},"②二维数组",[19,96221,96223],{"className":33310,"code":96222,"language":33312,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[26,96224,96225,96230,96255,96260],{"__ignoreMap":28},[52,96226,96227],{"class":54,"line":55},[52,96228,96229],{"class":332},"#二维数组\n",[52,96231,96232,96235,96237,96239,96241,96243,96245,96247,96249,96251,96253],{"class":54,"line":69},[52,96233,96234],{"class":622},"aa",[52,96236,2099],{"class":160},[52,96238,95930],{"class":622},[52,96240,3332],{"class":90},[52,96242,3491],{"class":622},[52,96244,3635],{"class":90},[52,96246,95935],{"class":622},[52,96248,3188],{"class":90},[52,96250,3491],{"class":622},[52,96252,3406],{"class":90},[52,96254,170],{"class":622},[52,96256,96257],{"class":54,"line":82},[52,96258,96259],{"class":332},"#对数组中的所有数求平均\n",[52,96261,96262],{"class":54,"line":97},[52,96263,96264],{"class":622},"np.mean(aa)\n",[14,96266,96268],{"id":96267},"_114-median求中位数函数","11.4 median()求中位数函数",[19,96270,96272],{"className":33310,"code":96271,"language":33312,"meta":28,"style":28},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[26,96273,96274,96279,96295,96300],{"__ignoreMap":28},[52,96275,96276],{"class":54,"line":55},[52,96277,96278],{"class":332},"#求中位数\n",[52,96280,96281,96283,96285,96287,96289,96291,96293],{"class":54,"line":69},[52,96282,3376],{"class":622},[52,96284,2099],{"class":160},[52,96286,95930],{"class":622},[52,96288,3332],{"class":90},[52,96290,3491],{"class":622},[52,96292,3559],{"class":90},[52,96294,170],{"class":622},[52,96296,96297],{"class":54,"line":82},[52,96298,96299],{"class":622},"np.median(b)\n",[52,96301,96302],{"class":54,"line":97},[52,96303,96304],{"class":332},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,96306,96308],{"id":96307},"_115-power求幂运算函数","11.5 power()求幂运算函数",[19,96310,96312],{"className":33310,"code":96311,"language":33312,"meta":28,"style":28},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[26,96313,96314,96330,96335,96340,96349,96354,96363],{"__ignoreMap":28},[52,96315,96316,96318,96320,96322,96324,96326,96328],{"class":54,"line":55},[52,96317,3376],{"class":622},[52,96319,2099],{"class":160},[52,96321,95930],{"class":622},[52,96323,3332],{"class":90},[52,96325,3491],{"class":622},[52,96327,3559],{"class":90},[52,96329,170],{"class":622},[52,96331,96332],{"class":54,"line":69},[52,96333,96334],{"class":332},"#幂运算\n",[52,96336,96337],{"class":54,"line":82},[52,96338,96339],{"class":332},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[52,96341,96342,96345,96347],{"class":54,"line":97},[52,96343,96344],{"class":622},"np.power(b,",[52,96346,3194],{"class":90},[52,96348,170],{"class":622},[52,96350,96351],{"class":54,"line":112},[52,96352,96353],{"class":332},"#或者以下代码，将数据存储起来\n",[52,96355,96356,96358,96360],{"class":54,"line":119},[52,96357,3957],{"class":622},[52,96359,2099],{"class":160},[52,96361,96362],{"class":622},"np.empty_like(b)\n",[52,96364,96365,96367,96369,96371,96373,96375],{"class":54,"line":130},[52,96366,96344],{"class":622},[52,96368,3194],{"class":90},[52,96370,3491],{"class":622},[52,96372,95982],{"class":8172},[52,96374,2099],{"class":160},[52,96376,96377],{"class":622},"y)\n",[14,96379,96381],{"id":96380},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[19,96383,96385],{"className":33310,"code":96384,"language":33312,"meta":28,"style":28},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[26,96386,96387,96403,96408,96413,96417,96435],{"__ignoreMap":28},[52,96388,96389,96391,96393,96395,96397,96399,96401],{"class":54,"line":55},[52,96390,3376],{"class":622},[52,96392,2099],{"class":160},[52,96394,95930],{"class":622},[52,96396,3332],{"class":90},[52,96398,3491],{"class":622},[52,96400,3559],{"class":90},[52,96402,170],{"class":622},[52,96404,96405],{"class":54,"line":69},[52,96406,96407],{"class":332},"#开方\n",[52,96409,96410],{"class":54,"line":82},[52,96411,96412],{"class":622},"np.sqrt(b)\n",[52,96414,96415],{"class":54,"line":97},[52,96416,96353],{"class":332},[52,96418,96419,96421,96423,96426,96429,96431,96433],{"class":54,"line":112},[52,96420,3957],{"class":622},[52,96422,2099],{"class":160},[52,96424,96425],{"class":622},"np.empty_like(b,",[52,96427,96428],{"class":8172},"dtype",[52,96430,2099],{"class":160},[52,96432,3159],{"class":90},[52,96434,170],{"class":622},[52,96436,96437,96440,96442,96444],{"class":54,"line":119},[52,96438,96439],{"class":622},"np.sqrt(b,",[52,96441,95982],{"class":8172},[52,96443,2099],{"class":160},[52,96445,96377],{"class":622},[14,96447,96449],{"id":96448},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[274,96451,96452],{},"对数组中的元素累计求和，可指定轴",[274,96454,96455],{},"#累计求和的意思是：",[274,96457,96458],{},"a = np.array([1, 2, 3, 4])",[274,96460,96461],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[19,96463,96465],{"className":33310,"code":96464,"language":33312,"meta":28,"style":28},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[26,96466,96467,96483,96488,96493],{"__ignoreMap":28},[52,96468,96469,96471,96473,96475,96477,96479,96481],{"class":54,"line":55},[52,96470,3376],{"class":622},[52,96472,2099],{"class":160},[52,96474,95930],{"class":622},[52,96476,3332],{"class":90},[52,96478,3491],{"class":622},[52,96480,3559],{"class":90},[52,96482,170],{"class":622},[52,96484,96485],{"class":54,"line":69},[52,96486,96487],{"class":622},"np.cumsum(b)\n",[52,96489,96490],{"class":54,"line":82},[52,96491,96492],{"class":332},"#结果：\n",[52,96494,96495],{"class":54,"line":97},[52,96496,96497],{"class":332},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,96499,96501],{"id":96500},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[19,96503,96505],{"className":33310,"code":96504,"language":33312,"meta":28,"style":28},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[26,96506,96507,96523,96528,96533,96537],{"__ignoreMap":28},[52,96508,96509,96511,96513,96515,96517,96519,96521],{"class":54,"line":55},[52,96510,3376],{"class":622},[52,96512,2099],{"class":160},[52,96514,95930],{"class":622},[52,96516,3332],{"class":90},[52,96518,3491],{"class":622},[52,96520,3559],{"class":90},[52,96522,170],{"class":622},[52,96524,96525],{"class":54,"line":69},[52,96526,96527],{"class":332},"#对数组中的元素累计求积，可指定轴\n",[52,96529,96530],{"class":54,"line":82},[52,96531,96532],{"class":622},"np.cumprod(b)\n",[52,96534,96535],{"class":54,"line":97},[52,96536,96492],{"class":332},[52,96538,96539],{"class":54,"line":112},[52,96540,96541],{"class":332},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,96543,96545],{"id":96544},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[19,96547,96549],{"className":33310,"code":96548,"language":33312,"meta":28,"style":28},"#删除数组中的重复数据，并对数据进行排序\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",[26,96550,96551,96556,96604,96609,96613],{"__ignoreMap":28},[52,96552,96553],{"class":54,"line":55},[52,96554,96555],{"class":332},"#删除数组中的重复数据，并对数据进行排序\n",[52,96557,96558,96560,96562,96564,96566,96568,96570,96572,96574,96576,96578,96580,96582,96584,96586,96588,96590,96592,96594,96596,96598,96600,96602],{"class":54,"line":69},[52,96559,300],{"class":622},[52,96561,2099],{"class":160},[52,96563,95952],{"class":622},[52,96565,3332],{"class":90},[52,96567,3491],{"class":622},[52,96569,3194],{"class":90},[52,96571,3491],{"class":622},[52,96573,3188],{"class":90},[52,96575,3491],{"class":622},[52,96577,3610],{"class":90},[52,96579,3491],{"class":622},[52,96581,3188],{"class":90},[52,96583,3491],{"class":622},[52,96585,3559],{"class":90},[52,96587,3491],{"class":622},[52,96589,3312],{"class":90},[52,96591,3491],{"class":622},[52,96593,3306],{"class":90},[52,96595,3491],{"class":622},[52,96597,3887],{"class":90},[52,96599,3491],{"class":622},[52,96601,3406],{"class":90},[52,96603,7616],{"class":622},[52,96605,96606],{"class":54,"line":82},[52,96607,96608],{"class":622},"np.unique(a)\n",[52,96610,96611],{"class":54,"line":97},[52,96612,96492],{"class":332},[52,96614,96615],{"class":54,"line":112},[52,96616,96617],{"class":332},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[274,96619,96620],{},"升序形式排序",[14,96622,96624],{"id":96623},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[19,96626,96628],{"className":33310,"code":96627,"language":33312,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[26,96629,96630,96678,96683],{"__ignoreMap":28},[52,96631,96632,96634,96636,96638,96640,96642,96644,96646,96648,96650,96652,96654,96656,96658,96660,96662,96664,96666,96668,96670,96672,96674,96676],{"class":54,"line":55},[52,96633,300],{"class":622},[52,96635,2099],{"class":160},[52,96637,95952],{"class":622},[52,96639,3332],{"class":90},[52,96641,3491],{"class":622},[52,96643,3194],{"class":90},[52,96645,3491],{"class":622},[52,96647,3188],{"class":90},[52,96649,3491],{"class":622},[52,96651,3610],{"class":90},[52,96653,3491],{"class":622},[52,96655,3188],{"class":90},[52,96657,3491],{"class":622},[52,96659,3559],{"class":90},[52,96661,3491],{"class":622},[52,96663,3312],{"class":90},[52,96665,3491],{"class":622},[52,96667,3306],{"class":90},[52,96669,3491],{"class":622},[52,96671,3887],{"class":90},[52,96673,3491],{"class":622},[52,96675,3406],{"class":90},[52,96677,7616],{"class":622},[52,96679,96680],{"class":54,"line":69},[52,96681,96682],{"class":332},"#返回数组中非零元素的索引\n",[52,96684,96685],{"class":54,"line":82},[52,96686,96687],{"class":622},"np.nonzero(a)\n",[14,96689,96691],{"id":96690},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[19,96693,96695],{"className":33310,"code":96694,"language":33312,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[26,96696,96697,96745,96750],{"__ignoreMap":28},[52,96698,96699,96701,96703,96705,96707,96709,96711,96713,96715,96717,96719,96721,96723,96725,96727,96729,96731,96733,96735,96737,96739,96741,96743],{"class":54,"line":55},[52,96700,300],{"class":622},[52,96702,2099],{"class":160},[52,96704,95952],{"class":622},[52,96706,3332],{"class":90},[52,96708,3491],{"class":622},[52,96710,3194],{"class":90},[52,96712,3491],{"class":622},[52,96714,3188],{"class":90},[52,96716,3491],{"class":622},[52,96718,3610],{"class":90},[52,96720,3491],{"class":622},[52,96722,3188],{"class":90},[52,96724,3491],{"class":622},[52,96726,3559],{"class":90},[52,96728,3491],{"class":622},[52,96730,3312],{"class":90},[52,96732,3491],{"class":622},[52,96734,3306],{"class":90},[52,96736,3491],{"class":622},[52,96738,3887],{"class":90},[52,96740,3491],{"class":622},[52,96742,3406],{"class":90},[52,96744,7616],{"class":622},[52,96746,96747],{"class":54,"line":69},[52,96748,96749],{"class":332},"#计算一组数中最大值与最小值的差，可指定轴\n",[52,96751,96752],{"class":54,"line":82},[52,96753,96754],{"class":622},"np.ptp(a)\n",[3015,96756,96757],{},"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":28,"searchDepth":69,"depth":69,"links":96759},[96760,96761,96762,96763,96764,96765,96766,96767,96768,96769,96770],{"id":96022,"depth":69,"text":96023},{"id":96065,"depth":69,"text":96066},{"id":96173,"depth":69,"text":96174},{"id":96267,"depth":69,"text":96268},{"id":96307,"depth":69,"text":96308},{"id":96380,"depth":69,"text":96381},{"id":96448,"depth":69,"text":96449},{"id":96500,"depth":69,"text":96501},{"id":96544,"depth":69,"text":96545},{"id":96623,"depth":69,"text":96624},{"id":96690,"depth":69,"text":96691},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":96008,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96777,"title":96778,"body":96779,"description":3046,"extension":3047,"meta":97434,"navigation":115,"path":97435,"seo":97436,"stem":97437,"__hash__":97438},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96780,"toc":97422},[96781,96784,96788,96791,97007,97011,97014,97223,97227,97293,97298,97302,97305,97308,97346,97350,97353,97358,97362,97365,97368,97373,97377,97380,97384,97387,97390,97395,97399,97402,97405,97410,97414,97419],[10,96782,96778],{"id":96783},"_12其他常用函数",[14,96785,96787],{"id":96786},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[274,96789,96790],{},"将数组的数据按照行列复制扩展",[19,96792,96794],{"className":33310,"code":96793,"language":33312,"meta":28,"style":28},"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",[26,96795,96796,96812,96821,96825,96830,96835,96848,96852,96857,96862,96867,96871,96876,96900,96912,96916,96920,96925,96930,96935,96940,96944,96957,96961,96965,96970,96975,96980,96985,96990,96994,96998,97003],{"__ignoreMap":28},[52,96797,96798,96800,96802,96804,96806,96808,96810],{"class":54,"line":55},[52,96799,300],{"class":622},[52,96801,2099],{"class":160},[52,96803,95930],{"class":622},[52,96805,3332],{"class":90},[52,96807,3491],{"class":622},[52,96809,3432],{"class":90},[52,96811,170],{"class":622},[52,96813,96814,96817,96819],{"class":54,"line":69},[52,96815,96816],{"class":622},"np.tile(a,",[52,96818,3194],{"class":90},[52,96820,170],{"class":622},[52,96822,96823],{"class":54,"line":82},[52,96824,96492],{"class":332},[52,96826,96827],{"class":54,"line":97},[52,96828,96829],{"class":332},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[52,96831,96832],{"class":54,"line":112},[52,96833,96834],{"class":332},"#行复制两次，列复制三次\n",[52,96836,96837,96840,96842,96844,96846],{"class":54,"line":119},[52,96838,96839],{"class":622},"np.tile(a,(",[52,96841,3194],{"class":90},[52,96843,3491],{"class":622},[52,96845,3188],{"class":90},[52,96847,33429],{"class":622},[52,96849,96850],{"class":54,"line":130},[52,96851,96492],{"class":332},[52,96853,96854],{"class":54,"line":136},[52,96855,96856],{"class":62},"'''\n",[52,96858,96859],{"class":54,"line":141},[52,96860,96861],{"class":62},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[52,96863,96864],{"class":54,"line":146},[52,96865,96866],{"class":62},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[52,96868,96869],{"class":54,"line":152},[52,96870,96856],{"class":62},[52,96872,96873],{"class":54,"line":157},[52,96874,96875],{"class":332},"#创建二维数组\n",[52,96877,96878,96880,96882,96884,96886,96888,96890,96892,96894,96896,96898],{"class":54,"line":173},[52,96879,96234],{"class":622},[52,96881,2099],{"class":160},[52,96883,95930],{"class":622},[52,96885,3332],{"class":90},[52,96887,3491],{"class":622},[52,96889,3635],{"class":90},[52,96891,95935],{"class":622},[52,96893,3406],{"class":90},[52,96895,3491],{"class":622},[52,96897,3188],{"class":90},[52,96899,170],{"class":622},[52,96901,96902,96905,96907,96909],{"class":54,"line":178},[52,96903,96904],{"class":622},"np.tile(aa,",[52,96906,3194],{"class":90},[52,96908,3542],{"class":622},[52,96910,96911],{"class":332},"#一个数的时候就是行\n",[52,96913,96914],{"class":54,"line":184},[52,96915,96492],{"class":332},[52,96917,96918],{"class":54,"line":189},[52,96919,96856],{"class":62},[52,96921,96922],{"class":54,"line":201},[52,96923,96924],{"class":62},"array([[ 1,  2,  3,  1,  2,  3],\n",[52,96926,96927],{"class":54,"line":206},[52,96928,96929],{"class":62},"       [ 4,  5,  6,  4,  5,  6],\n",[52,96931,96932],{"class":54,"line":224},[52,96933,96934],{"class":62},"       [ 7,  8,  9,  7,  8,  9],\n",[52,96936,96937],{"class":54,"line":229},[52,96938,96939],{"class":62},"       [10, 11, 12, 10, 11, 12]])\n",[52,96941,96942],{"class":54,"line":241},[52,96943,96856],{"class":62},[52,96945,96946,96949,96951,96953,96955],{"class":54,"line":246},[52,96947,96948],{"class":622},"np.tile(aa,(",[52,96950,3194],{"class":90},[52,96952,3491],{"class":622},[52,96954,3188],{"class":90},[52,96956,33429],{"class":622},[52,96958,96959],{"class":54,"line":252},[52,96960,96492],{"class":332},[52,96962,96963],{"class":54,"line":257},[52,96964,96856],{"class":62},[52,96966,96967],{"class":54,"line":266},[52,96968,96969],{"class":62},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[52,96971,96972],{"class":54,"line":4722},[52,96973,96974],{"class":62},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[52,96976,96977],{"class":54,"line":4727},[52,96978,96979],{"class":62},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[52,96981,96982],{"class":54,"line":4741},[52,96983,96984],{"class":62},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[52,96986,96987],{"class":54,"line":4746},[52,96988,96989],{"class":62},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[52,96991,96992],{"class":54,"line":5538},[52,96993,96974],{"class":62},[52,96995,96996],{"class":54,"line":5552},[52,96997,96979],{"class":62},[52,96999,97000],{"class":54,"line":5560},[52,97001,97002],{"class":62},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[52,97004,97005],{"class":54,"line":5565},[52,97006,96856],{"class":62},[14,97008,97010],{"id":97009},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[274,97012,97013],{},"repeat()将数组中的每个元素重复若干次",[19,97015,97017],{"className":33310,"code":97016,"language":33312,"meta":28,"style":28},"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",[26,97018,97019,97035,97044,97048,97053,97077,97082,97091,97095,97100,97104,97109,97125,97129,97133,97138,97143,97148,97152,97157,97161,97166,97171,97175,97191,97195,97199,97204,97209,97214,97219],{"__ignoreMap":28},[52,97020,97021,97023,97025,97027,97029,97031,97033],{"class":54,"line":55},[52,97022,300],{"class":622},[52,97024,2099],{"class":160},[52,97026,95930],{"class":622},[52,97028,3332],{"class":90},[52,97030,3491],{"class":622},[52,97032,3432],{"class":90},[52,97034,170],{"class":622},[52,97036,97037,97040,97042],{"class":54,"line":69},[52,97038,97039],{"class":622},"np.repeat(a,",[52,97041,3188],{"class":90},[52,97043,170],{"class":622},[52,97045,97046],{"class":54,"line":82},[52,97047,96492],{"class":332},[52,97049,97050],{"class":54,"line":97},[52,97051,97052],{"class":332},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[52,97054,97055,97057,97059,97061,97063,97065,97067,97069,97071,97073,97075],{"class":54,"line":112},[52,97056,96234],{"class":622},[52,97058,2099],{"class":160},[52,97060,95930],{"class":622},[52,97062,3332],{"class":90},[52,97064,3491],{"class":622},[52,97066,3635],{"class":90},[52,97068,95935],{"class":622},[52,97070,3406],{"class":90},[52,97072,3491],{"class":622},[52,97074,3188],{"class":90},[52,97076,170],{"class":622},[52,97078,97079],{"class":54,"line":119},[52,97080,97081],{"class":332},"#这个重复之后二维变成一维\n",[52,97083,97084,97087,97089],{"class":54,"line":130},[52,97085,97086],{"class":622},"np.repeat(aa,",[52,97088,3194],{"class":90},[52,97090,170],{"class":622},[52,97092,97093],{"class":54,"line":136},[52,97094,96856],{"class":62},[52,97096,97097],{"class":54,"line":141},[52,97098,97099],{"class":62},"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",[52,97101,97102],{"class":54,"line":146},[52,97103,96856],{"class":62},[52,97105,97106],{"class":54,"line":152},[52,97107,97108],{"class":332},"#指定axis\n",[52,97110,97111,97113,97115,97117,97119,97121,97123],{"class":54,"line":157},[52,97112,97086],{"class":622},[52,97114,3194],{"class":90},[52,97116,3491],{"class":622},[52,97118,50446],{"class":8172},[52,97120,2099],{"class":160},[52,97122,3306],{"class":90},[52,97124,170],{"class":622},[52,97126,97127],{"class":54,"line":173},[52,97128,96492],{"class":332},[52,97130,97131],{"class":54,"line":178},[52,97132,96856],{"class":62},[52,97134,97135],{"class":54,"line":184},[52,97136,97137],{"class":62},"array([[ 1,  2,  3],\n",[52,97139,97140],{"class":54,"line":189},[52,97141,97142],{"class":62},"       [ 1,  2,  3],\n",[52,97144,97145],{"class":54,"line":201},[52,97146,97147],{"class":62},"       [ 4,  5,  6],\n",[52,97149,97150],{"class":54,"line":206},[52,97151,97147],{"class":62},[52,97153,97154],{"class":54,"line":224},[52,97155,97156],{"class":62},"       [ 7,  8,  9],\n",[52,97158,97159],{"class":54,"line":229},[52,97160,97156],{"class":62},[52,97162,97163],{"class":54,"line":241},[52,97164,97165],{"class":62},"       [10, 11, 12],\n",[52,97167,97168],{"class":54,"line":246},[52,97169,97170],{"class":62},"       [10, 11, 12]])\n",[52,97172,97173],{"class":54,"line":252},[52,97174,96856],{"class":62},[52,97176,97177,97179,97181,97183,97185,97187,97189],{"class":54,"line":257},[52,97178,97086],{"class":622},[52,97180,3194],{"class":90},[52,97182,3491],{"class":622},[52,97184,50446],{"class":8172},[52,97186,2099],{"class":160},[52,97188,3332],{"class":90},[52,97190,170],{"class":622},[52,97192,97193],{"class":54,"line":266},[52,97194,96492],{"class":332},[52,97196,97197],{"class":54,"line":4722},[52,97198,96856],{"class":62},[52,97200,97201],{"class":54,"line":4727},[52,97202,97203],{"class":62},"array([[ 1,  1,  2,  2,  3,  3],\n",[52,97205,97206],{"class":54,"line":4741},[52,97207,97208],{"class":62},"       [ 4,  4,  5,  5,  6,  6],\n",[52,97210,97211],{"class":54,"line":4746},[52,97212,97213],{"class":62},"       [ 7,  7,  8,  8,  9,  9],\n",[52,97215,97216],{"class":54,"line":5538},[52,97217,97218],{"class":62},"       [10, 10, 11, 11, 12, 12]])\n",[52,97220,97221],{"class":54,"line":5552},[52,97222,96856],{"class":62},[14,97224,97226],{"id":97225},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[19,97228,97230],{"className":33310,"code":97229,"language":33312,"meta":28,"style":28},"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",[26,97231,97232,97248,97253,97265,97269,97274,97284,97288],{"__ignoreMap":28},[52,97233,97234,97236,97238,97240,97242,97244,97246],{"class":54,"line":55},[52,97235,300],{"class":622},[52,97237,2099],{"class":160},[52,97239,95930],{"class":622},[52,97241,3332],{"class":90},[52,97243,3491],{"class":622},[52,97245,3432],{"class":90},[52,97247,170],{"class":622},[52,97249,97250],{"class":54,"line":69},[52,97251,97252],{"class":332},"#array([，2，3，4])\n",[52,97254,97255,97258,97260,97262],{"class":54,"line":82},[52,97256,97257],{"class":622},"np.roll(a,",[52,97259,3194],{"class":90},[52,97261,3542],{"class":622},[52,97263,97264],{"class":332},"#传正数向后调多少位，传负数向前调多少位\n",[52,97266,97267],{"class":54,"line":97},[52,97268,96492],{"class":332},[52,97270,97271],{"class":54,"line":112},[52,97272,97273],{"class":332},"#array([3, 4, 1, 2])\n",[52,97275,97276,97278,97280,97282],{"class":54,"line":119},[52,97277,97257],{"class":622},[52,97279,3644],{"class":160},[52,97281,3332],{"class":90},[52,97283,170],{"class":622},[52,97285,97286],{"class":54,"line":130},[52,97287,96492],{"class":332},[52,97289,97290],{"class":54,"line":136},[52,97291,97292],{"class":332},"#array([2, 3, 4, 1])\n",[274,97294,97295],{},[280,97296],{"alt":28,"src":97297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,97299,97301],{"id":97300},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[274,97303,97304],{},"resize()重新调整数组的大小",[274,97306,97307],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[19,97309,97311],{"className":33310,"code":97310,"language":33312,"meta":28,"style":28},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[26,97312,97313,97318,97331],{"__ignoreMap":28},[52,97314,97315],{"class":54,"line":55},[52,97316,97317],{"class":332},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[52,97319,97320,97323,97325,97327,97329],{"class":54,"line":69},[52,97321,97322],{"class":622},"np.resize(aa,(",[52,97324,3194],{"class":90},[52,97326,3491],{"class":622},[52,97328,3457],{"class":90},[52,97330,33429],{"class":622},[52,97332,97333,97335,97337,97339,97341,97343],{"class":54,"line":82},[52,97334,97322],{"class":622},[52,97336,3194],{"class":90},[52,97338,3491],{"class":622},[52,97340,3533],{"class":90},[52,97342,85699],{"class":622},[52,97344,97345],{"class":332},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,97347,97349],{"id":97348},"_125-placeput函数","12.5 place()\u002Fput()函数",[274,97351,97352],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[274,97354,97355],{},[280,97356],{"alt":28,"src":97357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,97359,97361],{"id":97360},"_126-保存加载文件","12.6 保存加载文件",[274,97363,97364],{},"savetxt():将数据保存到txt文件中",[274,97366,97367],{},"loadtxt():从文件加载数据",[274,97369,97370],{},[280,97371],{"alt":28,"src":97372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,97374,97376],{"id":97375},"_127-genfromtxt函数","12.7 genfromtxt()函数",[274,97378,97379],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,97381,97383],{"id":97382},"_128-anyall函数","12.8 any()\u002Fall()函数",[274,97385,97386],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[274,97388,97389],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[274,97391,97392],{},[280,97393],{"alt":28,"src":97394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,97396,97398],{"id":97397},"_129-where语句","12.9 where语句",[274,97400,97401],{},"np.where(条件,x,y)",[274,97403,97404],{},"如果条件为True,对应值为x,否则对应值为y",[274,97406,97407],{},[280,97408],{"alt":28,"src":97409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,97411,97413],{"id":97412},"_1210-dot矩阵","12.10 dot()矩阵",[274,97415,97416],{},[280,97417],{"alt":28,"src":97418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[3015,97420,97421],{},"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":28,"searchDepth":69,"depth":69,"links":97423},[97424,97425,97426,97427,97428,97429,97430,97431,97432,97433],{"id":96786,"depth":69,"text":96787},{"id":97009,"depth":69,"text":97010},{"id":97225,"depth":69,"text":97226},{"id":97300,"depth":69,"text":97301},{"id":97348,"depth":69,"text":97349},{"id":97360,"depth":69,"text":97361},{"id":97375,"depth":69,"text":97376},{"id":97382,"depth":69,"text":97383},{"id":97397,"depth":69,"text":97398},{"id":97412,"depth":69,"text":97413},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96778,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":97440,"title":97441,"body":97442,"description":3046,"extension":3047,"meta":97795,"navigation":115,"path":97796,"seo":97797,"stem":97798,"__hash__":97799},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":97443,"toc":97793},[97444,97447,97450,97453,97456,97459,97524,97526,97790],[10,97445,97441],{"id":97446},"_13数组排序",[274,97448,97449],{},"排序主要用到的方法是np.sort和np.argsort",[274,97451,97452],{},"其中np.sort()对数组直接排序",[274,97454,97455],{},"而np.argsort()是返回排序后的原始索引",[274,97457,97458],{},"①一维数组",[19,97460,97462],{"className":33310,"code":97461,"language":33312,"meta":28,"style":28},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[26,97463,97464,97468,97508,97516],{"__ignoreMap":28},[52,97465,97466],{"class":54,"line":55},[52,97467,96033],{"class":332},[52,97469,97470,97472,97474,97476,97478,97480,97482,97484,97486,97488,97490,97492,97494,97496,97498,97500,97502,97504,97506],{"class":54,"line":69},[52,97471,300],{"class":622},[52,97473,2099],{"class":160},[52,97475,95952],{"class":622},[52,97477,3188],{"class":90},[52,97479,3491],{"class":622},[52,97481,3610],{"class":90},[52,97483,3491],{"class":622},[52,97485,3508],{"class":90},[52,97487,3491],{"class":622},[52,97489,3887],{"class":90},[52,97491,3491],{"class":622},[52,97493,3392],{"class":90},[52,97495,3491],{"class":622},[52,97497,4005],{"class":90},[52,97499,3491],{"class":622},[52,97501,3457],{"class":90},[52,97503,3491],{"class":622},[52,97505,3559],{"class":90},[52,97507,7616],{"class":622},[52,97509,97510,97513],{"class":54,"line":82},[52,97511,97512],{"class":622},"np.sort(a)",[52,97514,97515],{"class":332},"#升序排序\n",[52,97517,97518,97521],{"class":54,"line":97},[52,97519,97520],{"class":622},"np.argsort(a)",[52,97522,97523],{"class":332},"#按照元素大小来索引排序\n",[274,97525,96219],{},[19,97527,97529],{"className":33310,"code":97528,"language":33312,"meta":28,"style":28},"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",[26,97530,97531,97543,97569,97574,97578,97583,97588,97593,97598,97602,97610,97614,97619,97624,97629,97634,97638,97643,97656,97660,97665,97670,97675,97680,97684,97689,97701,97705,97709,97713,97717,97721,97725,97730,97745,97750,97759,97764,97768,97772,97777,97781,97786],{"__ignoreMap":28},[52,97532,97533,97536,97538,97540],{"class":54,"line":55},[52,97534,97535],{"class":622},"np.random.seed(",[52,97537,3306],{"class":90},[52,97539,3542],{"class":622},[52,97541,97542],{"class":332},"#保证每次值一样\n",[52,97544,97545,97547,97549,97551,97553,97555,97557,97559,97561,97563,97565,97567],{"class":54,"line":69},[52,97546,96234],{"class":622},[52,97548,2099],{"class":160},[52,97550,96042],{"class":622},[52,97552,3424],{"class":90},[52,97554,3491],{"class":622},[52,97556,34428],{"class":8172},[52,97558,2099],{"class":160},[52,97560,3121],{"class":622},[52,97562,3406],{"class":90},[52,97564,3491],{"class":622},[52,97566,3457],{"class":90},[52,97568,33429],{"class":622},[52,97570,97571],{"class":54,"line":82},[52,97572,97573],{"class":332},"#原数组：\n",[52,97575,97576],{"class":54,"line":97},[52,97577,96856],{"class":62},[52,97579,97580],{"class":54,"line":112},[52,97581,97582],{"class":62},"array([[44, 47, 64, 67, 67,  9],\n",[52,97584,97585],{"class":54,"line":119},[52,97586,97587],{"class":62},"       [83, 21, 36, 87, 70, 88],\n",[52,97589,97590],{"class":54,"line":130},[52,97591,97592],{"class":62},"       [88, 12, 58, 65, 39, 87],\n",[52,97594,97595],{"class":54,"line":136},[52,97596,97597],{"class":62},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[52,97599,97600],{"class":54,"line":141},[52,97601,96856],{"class":62},[52,97603,97604,97607],{"class":54,"line":146},[52,97605,97606],{"class":622},"np.sort(aa)",[52,97608,97609],{"class":332},"#每行进行了排序\n",[52,97611,97612],{"class":54,"line":152},[52,97613,96856],{"class":62},[52,97615,97616],{"class":54,"line":157},[52,97617,97618],{"class":62},"array([[ 9, 44, 47, 64, 67, 67],\n",[52,97620,97621],{"class":54,"line":173},[52,97622,97623],{"class":62},"       [21, 36, 70, 83, 87, 88],\n",[52,97625,97626],{"class":54,"line":178},[52,97627,97628],{"class":62},"       [12, 39, 58, 65, 87, 88],\n",[52,97630,97631],{"class":54,"line":184},[52,97632,97633],{"class":62},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[52,97635,97636],{"class":54,"line":189},[52,97637,96856],{"class":62},[52,97639,97640],{"class":54,"line":201},[52,97641,97642],{"class":332},"#axis=0时\n",[52,97644,97645,97648,97650,97652,97654],{"class":54,"line":206},[52,97646,97647],{"class":622},"np.sort(aa,",[52,97649,50446],{"class":8172},[52,97651,2099],{"class":160},[52,97653,3306],{"class":90},[52,97655,170],{"class":622},[52,97657,97658],{"class":54,"line":224},[52,97659,96856],{"class":62},[52,97661,97662],{"class":54,"line":229},[52,97663,97664],{"class":62},"array([[44, 12, 36, 37, 25,  9],\n",[52,97666,97667],{"class":54,"line":241},[52,97668,97669],{"class":62},"       [46, 21, 58, 65, 39, 77],\n",[52,97671,97672],{"class":54,"line":246},[52,97673,97674],{"class":62},"       [83, 47, 64, 67, 67, 87],\n",[52,97676,97677],{"class":54,"line":252},[52,97678,97679],{"class":62},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[52,97681,97682],{"class":54,"line":257},[52,97683,96856],{"class":62},[52,97685,97686],{"class":54,"line":266},[52,97687,97688],{"class":332},"#axis=1时,为默认值\n",[52,97690,97691,97693,97695,97697,97699],{"class":54,"line":4722},[52,97692,97647],{"class":622},[52,97694,50446],{"class":8172},[52,97696,2099],{"class":160},[52,97698,3332],{"class":90},[52,97700,170],{"class":622},[52,97702,97703],{"class":54,"line":4727},[52,97704,96856],{"class":62},[52,97706,97707],{"class":54,"line":4741},[52,97708,97618],{"class":62},[52,97710,97711],{"class":54,"line":4746},[52,97712,97623],{"class":62},[52,97714,97715],{"class":54,"line":5538},[52,97716,97628],{"class":62},[52,97718,97719],{"class":54,"line":5552},[52,97720,97633],{"class":62},[52,97722,97723],{"class":54,"line":5560},[52,97724,96856],{"class":62},[52,97726,97727],{"class":54,"line":5565},[52,97728,97729],{"class":332},"#按最后一列排序\n",[52,97731,97732,97734,97736,97739,97741,97743],{"class":54,"line":5571},[52,97733,3376],{"class":622},[52,97735,2099],{"class":160},[52,97737,97738],{"class":622},"aa[:,",[52,97740,3644],{"class":160},[52,97742,3332],{"class":90},[52,97744,36178],{"class":622},[52,97746,97747],{"class":54,"line":5577},[52,97748,97749],{"class":332},"#获取最后一列排好序的索引\n",[52,97751,97752,97754,97756],{"class":54,"line":5582},[52,97753,76986],{"class":622},[52,97755,2099],{"class":160},[52,97757,97758],{"class":622},"np.argsort(b)\n",[52,97760,97761],{"class":54,"line":10904},[52,97762,97763],{"class":622},"aa[index]\n",[52,97765,97766],{"class":54,"line":10928},[52,97767,96856],{"class":62},[52,97769,97770],{"class":54,"line":10933},[52,97771,97582],{"class":62},[52,97773,97774],{"class":54,"line":10939},[52,97775,97776],{"class":62},"       [46, 88, 81, 37, 25, 77],\n",[52,97778,97779],{"class":54,"line":10966},[52,97780,97592],{"class":62},[52,97782,97783],{"class":54,"line":10971},[52,97784,97785],{"class":62},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[52,97787,97788],{"class":54,"line":10977},[52,97789,96856],{"class":62},[3015,97791,97792],{},"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":28,"searchDepth":69,"depth":69,"links":97794},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":97441,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97801,"title":97802,"body":97803,"description":3046,"extension":3047,"meta":97833,"navigation":115,"path":97834,"seo":97835,"stem":97836,"__hash__":97837},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97804,"toc":97831},[97805,97808,97811,97814,97817,97820,97823,97826],[10,97806,97802],{"id":97807},"_14广播机制",[274,97809,97810],{},"广播的规则：",[274,97812,97813],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[274,97815,97816],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[274,97818,97819],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[274,97821,97822],{},"3.如果没有维度形状为1，则会引发异常",[274,97824,97825],{},"也就是只有维度或者个数为1才可以进行广播操作",[274,97827,97828],{},[280,97829],{"alt":28,"src":97830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":28,"searchDepth":69,"depth":69,"links":97832},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97802,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97839,"title":97840,"body":97841,"description":3046,"extension":3047,"meta":97939,"navigation":115,"path":97940,"seo":97941,"stem":97942,"__hash__":97943},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97842,"toc":97937},[97843,97846,97849,97934],[10,97844,97840],{"id":97845},"_15比较掩码",[274,97847,97848],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[19,97850,97852],{"className":33310,"code":97851,"language":33312,"meta":28,"style":28},"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",[26,97853,97854,97900,97911,97925,97929],{"__ignoreMap":28},[52,97855,97856,97858,97860,97863,97865,97867,97869,97871,97873,97875,97877,97879,97881,97883,97885,97887,97889,97891,97893,97895,97897],{"class":54,"line":55},[52,97857,300],{"class":622},[52,97859,2099],{"class":160},[52,97861,97862],{"class":622},"np.array([[",[52,97864,3332],{"class":90},[52,97866,3491],{"class":622},[52,97868,3194],{"class":90},[52,97870,3491],{"class":622},[52,97872,3188],{"class":90},[52,97874,50961],{"class":622},[52,97876,3584],{"class":90},[52,97878,3491],{"class":622},[52,97880,3610],{"class":90},[52,97882,3491],{"class":622},[52,97884,3635],{"class":90},[52,97886,50961],{"class":622},[52,97888,3837],{"class":90},[52,97890,3491],{"class":622},[52,97892,3862],{"class":90},[52,97894,3491],{"class":622},[52,97896,3887],{"class":90},[52,97898,97899],{"class":622},"]])\n",[52,97901,97902,97904,97906,97908],{"class":54,"line":69},[52,97903,300],{"class":622},[52,97905,4022],{"class":160},[52,97907,3812],{"class":90},[52,97909,97910],{"class":332},"#结果是一个由True,False组成的数组\n",[52,97912,97913,97916,97918,97920,97922],{"class":54,"line":82},[52,97914,97915],{"class":622},"a[a",[52,97917,4022],{"class":160},[52,97919,3812],{"class":90},[52,97921,4052],{"class":622},[52,97923,97924],{"class":332},"#小于20的元素会存到这个数组中\n",[52,97926,97927],{"class":54,"line":97},[52,97928,96492],{"class":332},[52,97930,97931],{"class":54,"line":112},[52,97932,97933],{"class":332},"#array([ 1,  2,  3, 11, 12, 13])\n",[3015,97935,97936],{},"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":28,"searchDepth":69,"depth":69,"links":97938},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97840,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97945,"title":97946,"body":97947,"description":3046,"extension":3047,"meta":98039,"navigation":115,"path":98040,"seo":98041,"stem":98042,"__hash__":98043},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97948,"toc":98037},[97949,97952,97955,97958,97961,97964,98029,98034],[10,97950,97946],{"id":97951},"_16魔法命令time",[274,97953,97954],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[274,97956,97957],{},"%:行模式",[274,97959,97960],{},"%%:单元格模式",[274,97962,97963],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[19,97965,97967],{"className":33310,"code":97966,"language":33312,"meta":28,"style":28},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[26,97968,97969,97974,97981,97986,97995,98008,98012,98020],{"__ignoreMap":28},[52,97970,97971],{"class":54,"line":55},[52,97972,97973],{"class":332},"#程序执行时间\n",[52,97975,97976,97978],{"class":54,"line":69},[52,97977,33324],{"class":160},[52,97979,97980],{"class":622}," time \n",[52,97982,97983],{"class":54,"line":82},[52,97984,97985],{"class":332},"#获取时间\n",[52,97987,97988,97991,97993],{"class":54,"line":97},[52,97989,97990],{"class":622},"start",[52,97992,2099],{"class":160},[52,97994,35350],{"class":622},[52,97996,97997,98000,98003,98005],{"class":54,"line":112},[52,97998,97999],{"class":622},"time.sleep(",[52,98001,98002],{"class":90},"0.4",[52,98004,3542],{"class":622},[52,98006,98007],{"class":332},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[52,98009,98010],{"class":54,"line":119},[52,98011,97985],{"class":332},[52,98013,98014,98016,98018],{"class":54,"line":130},[52,98015,48733],{"class":622},[52,98017,2099],{"class":160},[52,98019,35350],{"class":622},[52,98021,98022,98024,98026],{"class":54,"line":136},[52,98023,48733],{"class":622},[52,98025,3644],{"class":160},[52,98027,98028],{"class":622},"start\n",[274,98030,98031],{},[280,98032],{"alt":28,"src":98033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[3015,98035,98036],{},"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":28,"searchDepth":69,"depth":69,"links":98038},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97946,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":98045,"title":98046,"body":98047,"description":3046,"extension":3047,"meta":98082,"navigation":115,"path":98083,"seo":98084,"stem":98085,"__hash__":98086},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":98048,"toc":98080},[98049,98052,98055,98058,98061,98064,98067,98070,98075],[10,98050,98046],{"id":98051},"_17魔法命令timeit",[274,98053,98054],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[274,98056,98057],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[274,98059,98060],{},"单元格模式：",[274,98062,98063],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[274,98065,98066],{},"初始化语句执行次数由轮数来决定",[274,98068,98069],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[274,98071,98072],{},[280,98073],{"alt":28,"src":98074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[274,98076,98077],{},[280,98078],{"alt":28,"src":98079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":28,"searchDepth":69,"depth":69,"links":98081},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":98046,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":98088,"title":98089,"body":98090,"description":3046,"extension":3047,"meta":98108,"navigation":115,"path":98109,"seo":98110,"stem":98111,"__hash__":98112},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":98091,"toc":98106},[98092,98095,98098,98101],[10,98093,98089],{"id":98094},"_18魔法命令writefile和run",[274,98096,98097],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[274,98099,98100],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[274,98102,98103],{},[280,98104],{"alt":28,"src":98105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":28,"searchDepth":69,"depth":69,"links":98107},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":98089,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":98114,"title":98115,"body":98116,"description":3046,"extension":3047,"meta":98169,"navigation":115,"path":98170,"seo":98171,"stem":98172,"__hash__":98173},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":98117,"toc":98167},[98118,98121,98124,98126,98129,98132,98137,98140,98143,98146,98149,98152,98155,98158,98161,98164],[10,98119,98115],{"id":98120},"_19魔法命令memit",[274,98122,98123],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[274,98125,27548],{},[274,98127,98128],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[274,98130,98131],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[274,98133,98134],{},[280,98135],{"alt":28,"src":98136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[274,98138,98139],{},"补充：",[274,98141,98142],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[274,98144,98145],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[274,98147,98148],{},"解决方法：",[274,98150,98151],{},"1.cmd",[274,98153,98154],{},"2.依次输入以下代码：",[274,98156,98157],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[274,98159,98160],{},"pip install --upgrade ipython",[274,98162,98163],{},"#升级 memory_profiler 和 setuptools",[274,98165,98166],{},"pip install --upgrade memory_profiler setuptools",{"title":28,"searchDepth":69,"depth":69,"links":98168},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":98115,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":98175,"title":98176,"body":98177,"description":3046,"extension":3047,"meta":99823,"navigation":115,"path":99824,"seo":99825,"stem":99826,"__hash__":99827},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":98178,"toc":99793},[98179,98182,98186,98190,98251,98254,98259,98263,98268,98273,98278,98283,98286,98291,98295,98299,98332,98335,98338,98341,98393,98396,98432,98435,98477,98481,98502,98504,98541,98543,98548,98550,98555,98559,98562,98590,98594,98598,98651,98655,98747,98751,98755,98758,98763,98767,98792,98797,98801,98804,98807,98810,98813,98816,98819,98822,98834,98838,98842,98845,98877,98880,98903,98906,98932,98935,98961,98964,98998,99001,99063,99067,99070,99074,99077,99103,99106,99109,99114,99117,99186,99188,99193,99254,99257,99268,99274,99279,99283,99286,99299,99303,99318,99320,99343,99345,99371,99374,99377,99380,99428,99430,99435,99439,99443,99470,99474,99501,99504,99509,99514,99604,99608,99666,99671,99674,99677,99719,99723,99779,99784,99787,99790],[10,98180,98176],{"id":98181},"_2创建数组",[14,98183,98185],{"id":98184},"_21-array函数创建数组","2.1 array()函数创建数组",[30,98187,98189],{"id":98188},"_221-函数语句","2.2.1 函数语句",[19,98191,98193],{"className":33310,"code":98192,"language":33312,"meta":28,"style":28},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[26,98194,98195],{"__ignoreMap":28},[52,98196,98197,98200,98203,98205,98207,98209,98211,98213,98216,98218,98221,98223,98226,98228,98230,98232,98235,98237,98240,98242,98245,98247,98249],{"class":54,"line":55},[52,98198,98199],{"class":622},"numpy.array(",[52,98201,98202],{"class":90},"object",[52,98204,15391],{"class":622},[52,98206,96428],{"class":8172},[52,98208,16520],{"class":160},[52,98210,41865],{"class":90},[52,98212,15391],{"class":622},[52,98214,98215],{"class":8172},"copy",[52,98217,16520],{"class":160},[52,98219,98220],{"class":90}," True",[52,98222,15391],{"class":622},[52,98224,98225],{"class":8172},"order",[52,98227,16520],{"class":160},[52,98229,41865],{"class":90},[52,98231,15391],{"class":622},[52,98233,98234],{"class":8172},"subok",[52,98236,16520],{"class":160},[52,98238,98239],{"class":90}," False",[52,98241,15391],{"class":622},[52,98243,98244],{"class":8172},"ndmin",[52,98246,16520],{"class":160},[52,98248,7052],{"class":90},[52,98250,170],{"class":622},[274,98252,98253],{},"参数：",[274,98255,98256],{},[280,98257],{"alt":28,"src":98258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[30,98260,98262],{"id":98261},"_222-实例","2.2.2 实例",[274,98264,98265],{},[280,98266],{"alt":28,"src":98267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[274,98269,98270],{},[280,98271],{"alt":28,"src":98272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[274,98274,98275],{},[280,98276],{"alt":28,"src":98277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[274,98279,98280],{},[280,98281],{"alt":28,"src":98282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[274,98284,98285],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[274,98287,98288],{},[280,98289],{"alt":28,"src":98290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,98292,98294],{"id":98293},"_22-随机数创建数组","2.2 随机数创建数组",[30,98296,98298],{"id":98297},"_221-random语句","2.2.1 random语句",[19,98300,98302],{"className":33310,"code":98301,"language":33312,"meta":28,"style":28},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[26,98303,98304,98309,98314,98322,98327],{"__ignoreMap":28},[52,98305,98306],{"class":54,"line":55},[52,98307,98308],{"class":332},"#random.random()\n",[52,98310,98311],{"class":54,"line":69},[52,98312,98313],{"class":332},"#确定随机种子,就是每次运行结果是相同的\n",[52,98315,98316,98318,98320],{"class":54,"line":82},[52,98317,97535],{"class":622},[52,98319,3306],{"class":90},[52,98321,170],{"class":622},[52,98323,98324],{"class":54,"line":97},[52,98325,98326],{"class":622},"np.random.random()\n",[52,98328,98329],{"class":54,"line":112},[52,98330,98331],{"class":332},"#生成一个随机的数目\n",[274,98333,98334],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[274,98336,98337],{},"可以指定数组形状 size",[274,98339,98340],{},"①生成一维数组",[19,98342,98344],{"className":33310,"code":98343,"language":33312,"meta":28,"style":28},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[26,98345,98346,98351,98364,98369,98385],{"__ignoreMap":28},[52,98347,98348],{"class":54,"line":55},[52,98349,98350],{"class":332},"#random.random(size())\n",[52,98352,98353,98356,98358,98360,98362],{"class":54,"line":69},[52,98354,98355],{"class":622},"np.random.random(",[52,98357,34428],{"class":8172},[52,98359,2099],{"class":160},[52,98361,3432],{"class":90},[52,98363,170],{"class":622},[52,98365,98366],{"class":54,"line":82},[52,98367,98368],{"class":332},"#生成一位的五个元素\n",[52,98370,98371,98373,98375,98377,98379,98381,98383],{"class":54,"line":97},[52,98372,300],{"class":622},[52,98374,2099],{"class":160},[52,98376,98355],{"class":622},[52,98378,34428],{"class":8172},[52,98380,2099],{"class":160},[52,98382,3406],{"class":90},[52,98384,170],{"class":622},[52,98386,98387,98390],{"class":54,"line":112},[52,98388,98389],{"class":622},"a.shape ",[52,98391,98392],{"class":332},"#输出数组形状\n",[274,98394,98395],{},"②生成二维数组",[19,98397,98399],{"className":33310,"code":98398,"language":33312,"meta":28,"style":28},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[26,98400,98401,98405,98427],{"__ignoreMap":28},[52,98402,98403],{"class":54,"line":55},[52,98404,96229],{"class":332},[52,98406,98407,98409,98411,98413,98415,98417,98419,98421,98423,98425],{"class":54,"line":69},[52,98408,96234],{"class":622},[52,98410,2099],{"class":160},[52,98412,98355],{"class":622},[52,98414,34428],{"class":8172},[52,98416,2099],{"class":160},[52,98418,3121],{"class":622},[52,98420,3406],{"class":90},[52,98422,3491],{"class":622},[52,98424,3432],{"class":90},[52,98426,33429],{"class":622},[52,98428,98429],{"class":54,"line":82},[52,98430,98431],{"class":332},"#生成四行五列的数组\n",[274,98433,98434],{},"③生成三维数组",[19,98436,98438],{"className":33310,"code":98437,"language":33312,"meta":28,"style":28},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[26,98439,98440,98445,98472],{"__ignoreMap":28},[52,98441,98442],{"class":54,"line":55},[52,98443,98444],{"class":332},"#三维数组\n",[52,98446,98447,98450,98452,98454,98456,98458,98460,98462,98464,98466,98468,98470],{"class":54,"line":69},[52,98448,98449],{"class":622},"aaa",[52,98451,2099],{"class":160},[52,98453,98355],{"class":622},[52,98455,34428],{"class":8172},[52,98457,2099],{"class":160},[52,98459,3121],{"class":622},[52,98461,3194],{"class":90},[52,98463,3491],{"class":622},[52,98465,3188],{"class":90},[52,98467,3491],{"class":622},[52,98469,3406],{"class":90},[52,98471,33429],{"class":622},[52,98473,98474],{"class":54,"line":82},[52,98475,98476],{"class":622},"aaa.shape\n",[30,98478,98480],{"id":98479},"_222-randint语句","2.2.2 randint语句",[19,98482,98484],{"className":33310,"code":98483,"language":33312,"meta":28,"style":28},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[26,98485,98486,98491],{"__ignoreMap":28},[52,98487,98488],{"class":54,"line":55},[52,98489,98490],{"class":332},"#生成随机的整数 random.randint(low,high,size)\n",[52,98492,98493,98495,98497,98499],{"class":54,"line":69},[52,98494,96042],{"class":622},[52,98496,3432],{"class":90},[52,98498,16670],{"class":622},[52,98500,98501],{"class":332},"#0~5中的随机一个数\n",[274,98503,98340],{},[19,98505,98507],{"className":33310,"code":98506,"language":33312,"meta":28,"style":28},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[26,98508,98509,98514,98536],{"__ignoreMap":28},[52,98510,98511],{"class":54,"line":55},[52,98512,98513],{"class":332},"#一维\n",[52,98515,98516,98518,98520,98522,98524,98526,98528,98530,98532,98534],{"class":54,"line":69},[52,98517,96042],{"class":622},[52,98519,3332],{"class":90},[52,98521,3491],{"class":622},[52,98523,3584],{"class":90},[52,98525,3491],{"class":622},[52,98527,34428],{"class":8172},[52,98529,2099],{"class":160},[52,98531,3121],{"class":622},[52,98533,3559],{"class":90},[52,98535,33429],{"class":622},[52,98537,98538],{"class":54,"line":82},[52,98539,98540],{"class":332},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[274,98542,98395],{},[274,98544,98545],{},[280,98546],{"alt":28,"src":98547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[274,98549,98434],{},[274,98551,98552],{},[280,98553],{"alt":28,"src":98554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[30,98556,98558],{"id":98557},"_222-rand语句","2.2.2 rand语句",[274,98560,98561],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[19,98563,98565],{"className":33310,"code":98564,"language":33312,"meta":28,"style":28},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[26,98566,98567,98580,98585],{"__ignoreMap":28},[52,98568,98569,98572,98574,98576,98578],{"class":54,"line":55},[52,98570,98571],{"class":622},"np.random.rand(",[52,98573,3424],{"class":90},[52,98575,3491],{"class":622},[52,98577,3559],{"class":90},[52,98579,170],{"class":622},[52,98581,98582],{"class":54,"line":69},[52,98583,98584],{"class":332},"#第一个参数100：行数，表示有100个样本\n",[52,98586,98587],{"class":54,"line":82},[52,98588,98589],{"class":332},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,98591,98593],{"id":98592},"_23-arange创建数组","2.3 arange()创建数组",[30,98595,98597],{"id":98596},"_231-函数语句","2.3.1 函数语句",[19,98599,98601],{"className":33310,"code":98600,"language":33312,"meta":28,"style":28},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[26,98602,98603,98617,98622,98627,98632,98637,98642,98647],{"__ignoreMap":28},[52,98604,98605,98608,98610,98612,98615],{"class":54,"line":55},[52,98606,98607],{"class":622},"numpy.arange([start,] stop[, step], ",[52,98609,96428],{"class":8172},[52,98611,2099],{"class":160},[52,98613,98614],{"class":90},"None",[52,98616,170],{"class":622},[52,98618,98619],{"class":54,"line":69},[52,98620,98621],{"class":332},"#参数\n",[52,98623,98624],{"class":54,"line":82},[52,98625,98626],{"class":62},"\"\"\"\n",[52,98628,98629],{"class":54,"line":97},[52,98630,98631],{"class":62},"start:起始值，可选，默认从 0 开始。\n",[52,98633,98634],{"class":54,"line":112},[52,98635,98636],{"class":62},"stop:结束值（不包含该值）。\n",[52,98638,98639],{"class":54,"line":119},[52,98640,98641],{"class":62},"step:步长，可选，默认是 1。可以为浮点数。\n",[52,98643,98644],{"class":54,"line":130},[52,98645,98646],{"class":62},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[52,98648,98649],{"class":54,"line":136},[52,98650,98626],{"class":62},[30,98652,98654],{"id":98653},"_232-实例","2.3.2 实例",[19,98656,98658],{"className":33310,"code":98657,"language":33312,"meta":28,"style":28},"#创建一维数组\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",[26,98659,98660,98664,98688,98693,98698,98702,98725,98729,98733,98738,98743],{"__ignoreMap":28},[52,98661,98662],{"class":54,"line":55},[52,98663,96033],{"class":332},[52,98665,98666,98668,98670,98672,98674,98676,98678,98680,98682,98684,98686],{"class":54,"line":69},[52,98667,95930],{"class":622},[52,98669,3332],{"class":90},[52,98671,3491],{"class":622},[52,98673,3837],{"class":90},[52,98675,3491],{"class":622},[52,98677,3332],{"class":90},[52,98679,3491],{"class":622},[52,98681,96428],{"class":8172},[52,98683,2099],{"class":160},[52,98685,3124],{"class":90},[52,98687,170],{"class":622},[52,98689,98690],{"class":54,"line":82},[52,98691,98692],{"class":332},"#输出结果：\n",[52,98694,98695],{"class":54,"line":97},[52,98696,98697],{"class":332},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[52,98699,98700],{"class":54,"line":112},[52,98701,96875],{"class":332},[52,98703,98704,98707,98709,98711,98713,98716,98718,98720,98722],{"class":54,"line":119},[52,98705,98706],{"class":622},"np.array([np.arange(",[52,98708,3332],{"class":90},[52,98710,3491],{"class":622},[52,98712,3406],{"class":90},[52,98714,98715],{"class":622},"),np.arange(",[52,98717,3406],{"class":90},[52,98719,3491],{"class":622},[52,98721,3482],{"class":90},[52,98723,98724],{"class":622},")])\n",[52,98726,98727],{"class":54,"line":130},[52,98728,96492],{"class":332},[52,98730,98731],{"class":54,"line":136},[52,98732,98626],{"class":62},[52,98734,98735],{"class":54,"line":141},[52,98736,98737],{"class":62},"array([[1, 2, 3],\n",[52,98739,98740],{"class":54,"line":146},[52,98741,98742],{"class":62},"       [4, 5, 6]])\n",[52,98744,98745],{"class":54,"line":152},[52,98746,98626],{"class":62},[14,98748,98750],{"id":98749},"_24-生态分布","2.4 生态分布",[30,98752,98754],{"id":98753},"_241-标准正态分布","2.4.1 标准正态分布",[274,98756,98757],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[274,98759,98760],{},[280,98761],{"alt":28,"src":98762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[30,98764,98766],{"id":98765},"_242-常规正态分布","2.4.2 常规正态分布",[19,98768,98770],{"className":33310,"code":98769,"language":33312,"meta":28,"style":28},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[26,98771,98772,98777,98782,98787],{"__ignoreMap":28},[52,98773,98774],{"class":54,"line":55},[52,98775,98776],{"class":622},"random.normal(loc,scale,size)也可以生成正态分布\n",[52,98778,98779],{"class":54,"line":69},[52,98780,98781],{"class":332},"#loc:期望\n",[52,98783,98784],{"class":54,"line":82},[52,98785,98786],{"class":332},"#scale:方差\n",[52,98788,98789],{"class":54,"line":97},[52,98790,98791],{"class":332},"#size:用于确定是几维的数列\n",[274,98793,98794],{},[280,98795],{"alt":28,"src":98796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98798,98800],{"id":98799},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[274,98802,98803],{},"ndim:秩，维度个数",[274,98805,98806],{},"size:数组元素的个数",[274,98808,98809],{},"shape:数组的形状",[274,98811,98812],{},"dtype:数组元素的类型",[274,98814,98815],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[274,98817,98818],{},"他们都是属性，通过数组.属性的形式来确定",[274,98820,98821],{},"如果需要输出多个可以通过以下方式：",[19,98823,98825],{"className":33310,"code":98824,"language":33312,"meta":28,"style":28},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[26,98826,98827],{"__ignoreMap":28},[52,98828,98829,98831],{"class":54,"line":55},[52,98830,33347],{"class":90},[52,98832,98833],{"class":622},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98835,98837],{"id":98836},"_26-其他方式创建数组","2.6 其他方式创建数组",[30,98839,98841],{"id":98840},"_261-zeros创建数组","2.6.1 zeros()创建数组",[274,98843,98844],{},"①创建一维数组",[19,98846,98848],{"className":33310,"code":98847,"language":33312,"meta":28,"style":28},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[26,98849,98850,98859,98863,98868,98873],{"__ignoreMap":28},[52,98851,98852,98855,98857],{"class":54,"line":55},[52,98853,98854],{"class":622},"np.zeros(",[52,98856,3559],{"class":90},[52,98858,170],{"class":622},[52,98860,98861],{"class":54,"line":69},[52,98862,98626],{"class":62},[52,98864,98865],{"class":54,"line":82},[52,98866,98867],{"class":62},"输出结果：\n",[52,98869,98870],{"class":54,"line":97},[52,98871,98872],{"class":62},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[52,98874,98875],{"class":54,"line":112},[52,98876,98626],{"class":62},[274,98878,98879],{},"上方代码等价于：",[19,98881,98883],{"className":33310,"code":98882,"language":33312,"meta":28,"style":28},"np.zeros(shape=(10))#创建10个元素的0数组\n",[26,98884,98885],{"__ignoreMap":28},[52,98886,98887,98889,98892,98894,98896,98898,98900],{"class":54,"line":55},[52,98888,98854],{"class":622},[52,98890,98891],{"class":8172},"shape",[52,98893,2099],{"class":160},[52,98895,3121],{"class":622},[52,98897,3559],{"class":90},[52,98899,85699],{"class":622},[52,98901,98902],{"class":332},"#创建10个元素的0数组\n",[274,98904,98905],{},"也可以指定类型",[19,98907,98909],{"className":33310,"code":98908,"language":33312,"meta":28,"style":28},"#指定类型\nnp.zeros(5,dtype=int)\n",[26,98910,98911,98916],{"__ignoreMap":28},[52,98912,98913],{"class":54,"line":55},[52,98914,98915],{"class":332},"#指定类型\n",[52,98917,98918,98920,98922,98924,98926,98928,98930],{"class":54,"line":69},[52,98919,98854],{"class":622},[52,98921,3432],{"class":90},[52,98923,3491],{"class":622},[52,98925,96428],{"class":8172},[52,98927,2099],{"class":160},[52,98929,3124],{"class":90},[52,98931,170],{"class":622},[274,98933,98934],{},"②创建二维数组",[19,98936,98938],{"className":33310,"code":98937,"language":33312,"meta":28,"style":28},"np.zeros((3,4),dtype=int)\n",[26,98939,98940],{"__ignoreMap":28},[52,98941,98942,98945,98947,98949,98951,98953,98955,98957,98959],{"class":54,"line":55},[52,98943,98944],{"class":622},"np.zeros((",[52,98946,3188],{"class":90},[52,98948,3491],{"class":622},[52,98950,3406],{"class":90},[52,98952,45188],{"class":622},[52,98954,96428],{"class":8172},[52,98956,2099],{"class":160},[52,98958,3124],{"class":90},[52,98960,170],{"class":622},[274,98962,98963],{},"③创建三维数组",[19,98965,98967],{"className":33310,"code":98966,"language":33312,"meta":28,"style":28},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[26,98968,98969,98974],{"__ignoreMap":28},[52,98970,98971],{"class":54,"line":55},[52,98972,98973],{"class":332},"#创建三维数组\n",[52,98975,98976,98978,98980,98982,98984,98986,98988,98990,98992,98994,98996],{"class":54,"line":69},[52,98977,98944],{"class":622},[52,98979,3188],{"class":90},[52,98981,3491],{"class":622},[52,98983,3406],{"class":90},[52,98985,3491],{"class":622},[52,98987,3432],{"class":90},[52,98989,45188],{"class":622},[52,98991,96428],{"class":8172},[52,98993,2099],{"class":160},[52,98995,3124],{"class":90},[52,98997,170],{"class":622},[274,98999,99000],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[19,99002,99004],{"className":33310,"code":99003,"language":33312,"meta":28,"style":28},"#使用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",[26,99005,99006,99011,99026,99031,99036,99058],{"__ignoreMap":28},[52,99007,99008],{"class":54,"line":55},[52,99009,99010],{"class":332},"#使用zeros_like将创建的一维数组变成全0的数组\n",[52,99012,99013,99015,99017,99019,99021,99023],{"class":54,"line":69},[52,99014,300],{"class":622},[52,99016,2099],{"class":160},[52,99018,95930],{"class":622},[52,99020,3406],{"class":90},[52,99022,3542],{"class":622},[52,99024,99025],{"class":332},"#这个得到的结果：一维数组0，1，2，3\n",[52,99027,99028],{"class":54,"line":82},[52,99029,99030],{"class":622},"np.zeros_like(a)\n",[52,99032,99033],{"class":54,"line":97},[52,99034,99035],{"class":332},"#使用zeros_like将创建的二维数组变成全0的数组\n",[52,99037,99038,99040,99042,99044,99046,99048,99050,99052,99054,99056],{"class":54,"line":112},[52,99039,96234],{"class":622},[52,99041,2099],{"class":160},[52,99043,98355],{"class":622},[52,99045,34428],{"class":8172},[52,99047,2099],{"class":160},[52,99049,3121],{"class":622},[52,99051,3406],{"class":90},[52,99053,3491],{"class":622},[52,99055,3432],{"class":90},[52,99057,33429],{"class":622},[52,99059,99060],{"class":54,"line":119},[52,99061,99062],{"class":622},"np.zeros_like(aa)\n",[30,99064,99066],{"id":99065},"_262-ones创建数组","2.6.2 ones()创建数组",[274,99068,99069],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[30,99071,99073],{"id":99072},"_263-empty创建数组","2.6.3 empty()创建数组",[274,99075,99076],{},"①empty()用法",[19,99078,99080],{"className":33310,"code":99079,"language":33312,"meta":28,"style":28},"numpy.empty(shape,dtype=float,order='c')\n",[26,99081,99082],{"__ignoreMap":28},[52,99083,99084,99087,99089,99091,99093,99095,99097,99099,99101],{"class":54,"line":55},[52,99085,99086],{"class":622},"numpy.empty(shape,",[52,99088,96428],{"class":8172},[52,99090,2099],{"class":160},[52,99092,3159],{"class":90},[52,99094,3491],{"class":622},[52,99096,98225],{"class":8172},[52,99098,2099],{"class":160},[52,99100,78956],{"class":62},[52,99102,170],{"class":622},[274,99104,99105],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[274,99107,99108],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[274,99110,99111],{},[280,99112],{"alt":28,"src":99113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[274,99115,99116],{},"②empty()用法",[19,99118,99120],{"className":33310,"code":99119,"language":33312,"meta":28,"style":28},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[26,99121,99122,99143,99155,99176,99181],{"__ignoreMap":28},[52,99123,99124,99126,99128,99131,99133,99135,99137,99139,99141],{"class":54,"line":55},[52,99125,3957],{"class":622},[52,99127,2099],{"class":160},[52,99129,99130],{"class":622},"np.empty(",[52,99132,3559],{"class":90},[52,99134,3491],{"class":622},[52,99136,96428],{"class":8172},[52,99138,2099],{"class":160},[52,99140,3124],{"class":90},[52,99142,170],{"class":622},[52,99144,99145,99147,99149,99151,99153],{"class":54,"line":69},[52,99146,3932],{"class":622},[52,99148,2099],{"class":160},[52,99150,95930],{"class":622},[52,99152,3432],{"class":90},[52,99154,170],{"class":622},[52,99156,99157,99160,99162,99165,99167,99169,99172,99174],{"class":54,"line":82},[52,99158,99159],{"class":622},"np.add(",[52,99161,3194],{"class":90},[52,99163,99164],{"class":622},",x,",[52,99166,95982],{"class":8172},[52,99168,2099],{"class":160},[52,99170,99171],{"class":622},"y[:",[52,99173,3432],{"class":90},[52,99175,7616],{"class":622},[52,99177,99178],{"class":54,"line":97},[52,99179,99180],{"class":332},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[52,99182,99183],{"class":54,"line":112},[52,99184,99185],{"class":622},"y\n",[274,99187,14470],{},[274,99189,99190],{},[280,99191],{"alt":28,"src":99192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[19,99194,99196],{"className":33310,"code":99195,"language":33312,"meta":28,"style":28},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[26,99197,99198,99214,99234,99249],{"__ignoreMap":28},[52,99199,99200,99202,99204,99206,99208,99210,99212],{"class":54,"line":55},[52,99201,3932],{"class":622},[52,99203,2099],{"class":160},[52,99205,95930],{"class":622},[52,99207,3332],{"class":90},[52,99209,3491],{"class":622},[52,99211,3457],{"class":90},[52,99213,170],{"class":622},[52,99215,99216,99218,99220,99222,99224,99226,99228,99230,99232],{"class":54,"line":69},[52,99217,3957],{"class":622},[52,99219,2099],{"class":160},[52,99221,99130],{"class":622},[52,99223,3432],{"class":90},[52,99225,3491],{"class":622},[52,99227,96428],{"class":8172},[52,99229,2099],{"class":160},[52,99231,3124],{"class":90},[52,99233,170],{"class":622},[52,99235,99236,99239,99241,99243,99245,99247],{"class":54,"line":82},[52,99237,99238],{"class":622},"np.add(x,",[52,99240,3194],{"class":90},[52,99242,3491],{"class":622},[52,99244,95982],{"class":8172},[52,99246,2099],{"class":160},[52,99248,96377],{"class":622},[52,99250,99251],{"class":54,"line":97},[52,99252,99253],{"class":332},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[274,99255,99256],{},"③empty_like()",[274,99258,99259],{},[538,99260,99261,99262,99267],{},"创建一个",[538,99263,99264],{},[538,99265,99266],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[274,99269,99270,99273],{},[26,99271,99272],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[274,99275,99276],{},[280,99277],{"alt":28,"src":99278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[30,99280,99282],{"id":99281},"_264-用法","2.6.4 ？？用法",[274,99284,99285],{},"当想查看一个函数的参数时，可以通过？？来实现",[19,99287,99289],{"className":33310,"code":99288,"language":33312,"meta":28,"style":28},"np.full??\n",[26,99290,99291],{"__ignoreMap":28},[52,99292,99293,99296],{"class":54,"line":55},[52,99294,99295],{"class":622},"np.full",[52,99297,99298],{"class":80331},"??\n",[30,99300,99302],{"id":99301},"_265-full创建数组","2.6.5 full()创建数组",[19,99304,99306],{"className":33310,"code":99305,"language":33312,"meta":28,"style":28},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[26,99307,99308,99313],{"__ignoreMap":28},[52,99309,99310],{"class":54,"line":55},[52,99311,99312],{"class":622},"full(shape,fill_value)\n",[52,99314,99315],{"class":54,"line":69},[52,99316,99317],{"class":622},"创建全为某个指定值的数组\n",[274,99319,97458],{},[19,99321,99323],{"className":33310,"code":99322,"language":33312,"meta":28,"style":28},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[26,99324,99325,99330],{"__ignoreMap":28},[52,99326,99327],{"class":54,"line":55},[52,99328,99329],{"class":332},"#创建一个一维数组,以20进行填充\n",[52,99331,99332,99335,99337,99339,99341],{"class":54,"line":69},[52,99333,99334],{"class":622},"np.full(",[52,99336,3559],{"class":90},[52,99338,3491],{"class":622},[52,99340,3812],{"class":90},[52,99342,170],{"class":622},[274,99344,96219],{},[19,99346,99348],{"className":33310,"code":99347,"language":33312,"meta":28,"style":28},"#创建二维数组\nnp.full((3,5),11)\n",[26,99349,99350,99354],{"__ignoreMap":28},[52,99351,99352],{"class":54,"line":55},[52,99353,96875],{"class":332},[52,99355,99356,99359,99361,99363,99365,99367,99369],{"class":54,"line":69},[52,99357,99358],{"class":622},"np.full((",[52,99360,3188],{"class":90},[52,99362,3491],{"class":622},[52,99364,3432],{"class":90},[52,99366,45188],{"class":622},[52,99368,3584],{"class":90},[52,99370,170],{"class":622},[274,99372,99373],{},"③full_like用法",[274,99375,99376],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[274,99378,99379],{},"这里是指定填充而已",[19,99381,99383],{"className":33310,"code":99382,"language":33312,"meta":28,"style":28},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[26,99384,99385,99390,99414,99419],{"__ignoreMap":28},[52,99386,99387],{"class":54,"line":55},[52,99388,99389],{"class":332},"#创建一个指定形状数组\n",[52,99391,99392,99394,99396,99398,99400,99402,99404,99406,99408,99410,99412],{"class":54,"line":69},[52,99393,300],{"class":622},[52,99395,2099],{"class":160},[52,99397,95930],{"class":622},[52,99399,3332],{"class":90},[52,99401,3491],{"class":622},[52,99403,3438],{"class":90},[52,99405,95935],{"class":622},[52,99407,3406],{"class":90},[52,99409,3491],{"class":622},[52,99411,3533],{"class":90},[52,99413,170],{"class":622},[52,99415,99416],{"class":54,"line":82},[52,99417,99418],{"class":332},"#进行指定填充\n",[52,99420,99421,99424,99426],{"class":54,"line":97},[52,99422,99423],{"class":622},"np.full_like(a,",[52,99425,3559],{"class":90},[52,99427,170],{"class":622},[274,99429,14470],{},[274,99431,99432],{},[280,99433],{"alt":28,"src":99434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[30,99436,99438],{"id":99437},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[1486,99440,99442],{"id":99441},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[19,99444,99446],{"className":33310,"code":99445,"language":33312,"meta":28,"style":28},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[26,99447,99448,99465],{"__ignoreMap":28},[52,99449,99450,99453,99455,99457,99459,99461,99463],{"class":54,"line":55},[52,99451,99452],{"class":622},"np.eye(",[52,99454,3406],{"class":90},[52,99456,3491],{"class":622},[52,99458,96428],{"class":8172},[52,99460,2099],{"class":160},[52,99462,3124],{"class":90},[52,99464,170],{"class":622},[52,99466,99467],{"class":54,"line":69},[52,99468,99469],{"class":332},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[1486,99471,99473],{"id":99472},"_2662-法2identity","2.6.6.2 法2：identity()",[19,99475,99477],{"className":33310,"code":99476,"language":33312,"meta":28,"style":28},"#identity()\nnp.identity(5,dtype=int)\n",[26,99478,99479,99484],{"__ignoreMap":28},[52,99480,99481],{"class":54,"line":55},[52,99482,99483],{"class":332},"#identity()\n",[52,99485,99486,99489,99491,99493,99495,99497,99499],{"class":54,"line":69},[52,99487,99488],{"class":622},"np.identity(",[52,99490,3432],{"class":90},[52,99492,3491],{"class":622},[52,99494,96428],{"class":8172},[52,99496,2099],{"class":160},[52,99498,3124],{"class":90},[52,99500,170],{"class":622},[274,99502,99503],{},"两个函数是有区别的",[274,99505,99506],{},[280,99507],{"alt":28,"src":99508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[274,99510,99511],{},[280,99512],{"alt":28,"src":99513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[19,99515,99517],{"className":33310,"code":99516,"language":33312,"meta":28,"style":28},"# 创建一个 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",[26,99518,99519,99524,99536,99541,99546,99551,99556,99560,99565,99585,99589,99594,99599],{"__ignoreMap":28},[52,99520,99521],{"class":54,"line":55},[52,99522,99523],{"class":332},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[52,99525,99526,99528,99530,99532,99534],{"class":54,"line":69},[52,99527,99452],{"class":622},[52,99529,3188],{"class":90},[52,99531,15391],{"class":622},[52,99533,3406],{"class":90},[52,99535,170],{"class":622},[52,99537,99538],{"class":54,"line":82},[52,99539,99540],{"class":332},"# 输出:\n",[52,99542,99543],{"class":54,"line":97},[52,99544,99545],{"class":332},"# [[1. 0. 0. 0.]\n",[52,99547,99548],{"class":54,"line":112},[52,99549,99550],{"class":332},"#  [0. 1. 0. 0.]\n",[52,99552,99553],{"class":54,"line":119},[52,99554,99555],{"class":332},"#  [0. 0. 1. 0.]]\n",[52,99557,99558],{"class":54,"line":130},[52,99559,116],{"emptyLinePlaceholder":115},[52,99561,99562],{"class":54,"line":136},[52,99563,99564],{"class":332},"# 对角线向上偏移1\n",[52,99566,99567,99569,99571,99573,99575,99577,99579,99581,99583],{"class":54,"line":141},[52,99568,99452],{"class":622},[52,99570,3188],{"class":90},[52,99572,15391],{"class":622},[52,99574,3406],{"class":90},[52,99576,15391],{"class":622},[52,99578,3605],{"class":8172},[52,99580,2099],{"class":160},[52,99582,3332],{"class":90},[52,99584,170],{"class":622},[52,99586,99587],{"class":54,"line":146},[52,99588,99540],{"class":332},[52,99590,99591],{"class":54,"line":152},[52,99592,99593],{"class":332},"# [[0. 1. 0. 0.]\n",[52,99595,99596],{"class":54,"line":157},[52,99597,99598],{"class":332},"#  [0. 0. 1. 0.]\n",[52,99600,99601],{"class":54,"line":173},[52,99602,99603],{"class":332},"#  [0. 0. 0. 1.]]\n",[30,99605,99607],{"id":99606},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[19,99609,99611],{"className":33310,"code":99610,"language":33312,"meta":28,"style":28},"#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",[26,99612,99613,99618,99622,99627,99632,99637,99642,99647,99652,99657,99662],{"__ignoreMap":28},[52,99614,99615],{"class":54,"line":55},[52,99616,99617],{"class":332},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[52,99619,99620],{"class":54,"line":69},[52,99621,98626],{"class":62},[52,99623,99624],{"class":54,"line":82},[52,99625,99626],{"class":62},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[52,99628,99629],{"class":54,"line":97},[52,99630,99631],{"class":62},"参数介绍：\n",[52,99633,99634],{"class":54,"line":112},[52,99635,99636],{"class":62},"start：序列的起始值\n",[52,99638,99639],{"class":54,"line":119},[52,99640,99641],{"class":62},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[52,99643,99644],{"class":54,"line":130},[52,99645,99646],{"class":62},"num：要生长的等步长的样本数量，默认为50\n",[52,99648,99649],{"class":54,"line":136},[52,99650,99651],{"class":62},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[52,99653,99654],{"class":54,"line":141},[52,99655,99656],{"class":62},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[52,99658,99659],{"class":54,"line":146},[52,99660,99661],{"class":62},"dtype：ndarry的数据类型\n",[52,99663,99664],{"class":54,"line":152},[52,99665,98626],{"class":62},[274,99667,99668],{},[280,99669],{"alt":28,"src":99670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[274,99672,99673],{},"这里num=是可以省略的",[274,99675,99676],{},"也就是下方两行代码结果是一模一样的",[19,99678,99680],{"className":33310,"code":99679,"language":33312,"meta":28,"style":28},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[26,99681,99682,99699],{"__ignoreMap":28},[52,99683,99684,99687,99689,99691,99693,99695,99697],{"class":54,"line":55},[52,99685,99686],{"class":622},"np.linspace(",[52,99688,3332],{"class":90},[52,99690,3491],{"class":622},[52,99692,3432],{"class":90},[52,99694,3491],{"class":622},[52,99696,3432],{"class":90},[52,99698,170],{"class":622},[52,99700,99701,99703,99705,99707,99709,99711,99713,99715,99717],{"class":54,"line":69},[52,99702,99686],{"class":622},[52,99704,3332],{"class":90},[52,99706,3491],{"class":622},[52,99708,3432],{"class":90},[52,99710,3491],{"class":622},[52,99712,4636],{"class":8172},[52,99714,2099],{"class":160},[52,99716,3432],{"class":90},[52,99718,170],{"class":622},[30,99720,99722],{"id":99721},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[19,99724,99726],{"className":33310,"code":99725,"language":33312,"meta":28,"style":28},"#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",[26,99727,99728,99733,99737,99742,99747,99752,99757,99761,99766,99771,99775],{"__ignoreMap":28},[52,99729,99730],{"class":54,"line":55},[52,99731,99732],{"class":332},"#logspace函数用于创建一个等比数列，格式如下：\n",[52,99734,99735],{"class":54,"line":69},[52,99736,98626],{"class":62},[52,99738,99739],{"class":54,"line":82},[52,99740,99741],{"class":62},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[52,99743,99744],{"class":54,"line":97},[52,99745,99746],{"class":62},"参数为：\n",[52,99748,99749],{"class":54,"line":112},[52,99750,99751],{"class":62},"start:序列的起始位置为：base**start\n",[52,99753,99754],{"class":54,"line":119},[52,99755,99756],{"class":62},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[52,99758,99759],{"class":54,"line":130},[52,99760,99646],{"class":62},[52,99762,99763],{"class":54,"line":136},[52,99764,99765],{"class":62},"endpoint：是否包含 stop 这个值，默认是 True\n",[52,99767,99768],{"class":54,"line":141},[52,99769,99770],{"class":62},"base：对数的底数，默认是 10（常见对数）\n",[52,99772,99773],{"class":54,"line":146},[52,99774,99661],{"class":62},[52,99776,99777],{"class":54,"line":152},[52,99778,98626],{"class":62},[274,99780,99781],{},[280,99782],{"alt":28,"src":99783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[274,99785,99786],{},"logspace()函数中的num参数也是可以不写num=的",[274,99788,99789],{},"endpoint是不可以省略的",[3015,99791,99792],{},"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":28,"searchDepth":69,"depth":69,"links":99794},[99795,99799,99804,99808,99812,99813],{"id":98184,"depth":69,"text":98185,"children":99796},[99797,99798],{"id":98188,"depth":82,"text":98189},{"id":98261,"depth":82,"text":98262},{"id":98293,"depth":69,"text":98294,"children":99800},[99801,99802,99803],{"id":98297,"depth":82,"text":98298},{"id":98479,"depth":82,"text":98480},{"id":98557,"depth":82,"text":98558},{"id":98592,"depth":69,"text":98593,"children":99805},[99806,99807],{"id":98596,"depth":82,"text":98597},{"id":98653,"depth":82,"text":98654},{"id":98749,"depth":69,"text":98750,"children":99809},[99810,99811],{"id":98753,"depth":82,"text":98754},{"id":98765,"depth":82,"text":98766},{"id":98799,"depth":69,"text":98800},{"id":98836,"depth":69,"text":98837,"children":99814},[99815,99816,99817,99818,99819,99820,99821,99822],{"id":98840,"depth":82,"text":98841},{"id":99065,"depth":82,"text":99066},{"id":99072,"depth":82,"text":99073},{"id":99281,"depth":82,"text":99282},{"id":99301,"depth":82,"text":99302},{"id":99437,"depth":82,"text":99438},{"id":99606,"depth":82,"text":99607},{"id":99721,"depth":82,"text":99722},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":98176,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99829,"title":99830,"body":99831,"description":3046,"extension":3047,"meta":99924,"navigation":115,"path":99925,"seo":99926,"stem":99927,"__hash__":99928},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99832,"toc":99922},[99833,99836,99839,99842,99845,99848,99851,99854,99857,99860,99863,99866,99868,99871,99874,99879,99882,99885,99919],[10,99834,99830],{"id":99835},"_20魔法命令mprun",[274,99837,99838],{},"逐行分析数据内存的使用情况",[274,99840,99841],{},"语法格式：",[274,99843,99844],{},"%mprun -f 模块名.函数名 模块名.函数名()",[274,99846,99847],{},"分析结果列如下：",[274,99849,99850],{},"Line行号",[274,99852,99853],{},"Mem usage内存使用大小",[274,99855,99856],{},"increment内存增量",[274,99858,99859],{},"Line content代码内容",[274,99861,99862],{},"补充说明：",[274,99864,99865],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[274,99867,98131],{},[274,99869,99870],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[274,99872,99873],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[274,99875,99876],{},[280,99877],{"alt":28,"src":99878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[274,99880,99881],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[274,99883,99884],{},"这时候需要重新加载模块",[19,99886,99888],{"className":33310,"code":99887,"language":33312,"meta":28,"style":28},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[26,99889,99890,99895,99902,99907],{"__ignoreMap":28},[52,99891,99892],{"class":54,"line":55},[52,99893,99894],{"class":332},"#重新加载模块\n",[52,99896,99897,99899],{"class":54,"line":69},[52,99898,33324],{"class":160},[52,99900,99901],{"class":622}," importlib\n",[52,99903,99904],{"class":54,"line":82},[52,99905,99906],{"class":622},"importlib.reload(mprun_test)\n",[52,99908,99909,99911,99914,99916],{"class":54,"line":97},[52,99910,3441],{"class":160},[52,99912,99913],{"class":622},"mprun ",[52,99915,3644],{"class":160},[52,99917,99918],{"class":622},"f mprun_test.fun_test mprun_test.fun_test()\n",[3015,99920,99921],{},"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":28,"searchDepth":69,"depth":69,"links":99923},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99830,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99930,"title":99931,"body":99932,"description":3046,"extension":3047,"meta":99949,"navigation":115,"path":99950,"seo":99951,"stem":99952,"__hash__":99953},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99933,"toc":99947},[99934,99937,99942],[10,99935,99931],{"id":99936},"_3一维数组的索引和切片",[274,99938,99939],{},[280,99940],{"alt":28,"src":99941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[274,99943,99944],{},[280,99945],{"alt":28,"src":99946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":28,"searchDepth":69,"depth":69,"links":99948},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99931,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99955,"title":99956,"body":99957,"description":3046,"extension":3047,"meta":100440,"navigation":115,"path":100441,"seo":100442,"stem":100443,"__hash__":100444},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99958,"toc":100438},[99959,99962,99965,99970,100003,100006,100044,100047,100081,100084,100189,100192,100229,100232,100333,100336,100387,100390,100432,100435],[10,99960,99956],{"id":99961},"_4二维数组的索引与切片",[274,99963,99964],{},"①获取指定单个元素",[274,99966,99967],{},[280,99968],{"alt":28,"src":99969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[19,99971,99973],{"className":33310,"code":99972,"language":33312,"meta":28,"style":28},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[26,99974,99975,99980,99985,99990],{"__ignoreMap":28},[52,99976,99977],{"class":54,"line":55},[52,99978,99979],{"class":332},"#获取元素9\n",[52,99981,99982],{"class":54,"line":69},[52,99983,99984],{"class":332},"#先获取所在行，再获取所在列\n",[52,99986,99987],{"class":54,"line":82},[52,99988,99989],{"class":332},"#数组[行索引号，列索引号]\n",[52,99991,99992,99995,99997,99999,100001],{"class":54,"line":97},[52,99993,99994],{"class":622},"a[",[52,99996,3332],{"class":90},[52,99998,3491],{"class":622},[52,100000,3194],{"class":90},[52,100002,36178],{"class":622},[274,100004,100005],{},"②获取整行元素",[19,100007,100009],{"className":33310,"code":100008,"language":33312,"meta":28,"style":28},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[26,100010,100011,100016,100021,100029,100034],{"__ignoreMap":28},[52,100012,100013],{"class":54,"line":55},[52,100014,100015],{"class":332},"#获取整行 数组[行索引号]\n",[52,100017,100018],{"class":54,"line":69},[52,100019,100020],{"class":332},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[52,100022,100023,100025,100027],{"class":54,"line":82},[52,100024,99994],{"class":622},[52,100026,3194],{"class":90},[52,100028,36178],{"class":622},[52,100030,100031],{"class":54,"line":97},[52,100032,100033],{"class":332},"#也可以负索引获取一行\n",[52,100035,100036,100038,100040,100042],{"class":54,"line":112},[52,100037,99994],{"class":622},[52,100039,3644],{"class":160},[52,100041,3332],{"class":90},[52,100043,36178],{"class":622},[274,100045,100046],{},"③获取整列元素",[19,100048,100050],{"className":33310,"code":100049,"language":33312,"meta":28,"style":28},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[26,100051,100052,100057,100066,100071],{"__ignoreMap":28},[52,100053,100054],{"class":54,"line":55},[52,100055,100056],{"class":332},"#获取整列 数组名[:,列索引]\n",[52,100058,100059,100062,100064],{"class":54,"line":69},[52,100060,100061],{"class":622},"a[:,",[52,100063,3194],{"class":90},[52,100065,36178],{"class":622},[52,100067,100068],{"class":54,"line":82},[52,100069,100070],{"class":332},"#也可以负索引获取一列\n",[52,100072,100073,100075,100077,100079],{"class":54,"line":97},[52,100074,100061],{"class":622},[52,100076,3644],{"class":160},[52,100078,3332],{"class":90},[52,100080,36178],{"class":622},[274,100082,100083],{},"④部分行部分列的元素",[19,100085,100087],{"className":33310,"code":100086,"language":33312,"meta":28,"style":28},"#部分行部分列 数组名[行切片，列切片]\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",[26,100088,100089,100094,100104,100108,100112,100117,100122,100126,100138,100142,100146,100151,100156,100161,100166,100170,100175],{"__ignoreMap":28},[52,100090,100091],{"class":54,"line":55},[52,100092,100093],{"class":332},"#部分行部分列 数组名[行切片，列切片]\n",[52,100095,100096,100099,100101],{"class":54,"line":69},[52,100097,100098],{"class":622},"a[:",[52,100100,3194],{"class":90},[52,100102,100103],{"class":622},",:]\n",[52,100105,100106],{"class":54,"line":82},[52,100107,96492],{"class":332},[52,100109,100110],{"class":54,"line":97},[52,100111,96856],{"class":62},[52,100113,100114],{"class":54,"line":112},[52,100115,100116],{"class":62},"array([[ 1,  2,  3,  4,  5,  6],\n",[52,100118,100119],{"class":54,"line":119},[52,100120,100121],{"class":62},"       [ 7,  8,  9, 10, 11, 12]])\n",[52,100123,100124],{"class":54,"line":130},[52,100125,96856],{"class":62},[52,100127,100128,100130,100132,100134,100136],{"class":54,"line":136},[52,100129,100061],{"class":622},[52,100131,3332],{"class":90},[52,100133,3971],{"class":622},[52,100135,3406],{"class":90},[52,100137,36178],{"class":622},[52,100139,100140],{"class":54,"line":141},[52,100141,96492],{"class":332},[52,100143,100144],{"class":54,"line":146},[52,100145,96856],{"class":62},[52,100147,100148],{"class":54,"line":152},[52,100149,100150],{"class":62},"array([[ 2,  3,  4],\n",[52,100152,100153],{"class":54,"line":157},[52,100154,100155],{"class":62},"       [ 8,  9, 10],\n",[52,100157,100158],{"class":54,"line":173},[52,100159,100160],{"class":62},"       [14, 15, 16],\n",[52,100162,100163],{"class":54,"line":178},[52,100164,100165],{"class":62},"       [20, 21, 22]])\n",[52,100167,100168],{"class":54,"line":184},[52,100169,96856],{"class":62},[52,100171,100172],{"class":54,"line":189},[52,100173,100174],{"class":332},"#对列行同时进行切片，使用了step参数\n",[52,100176,100177,100180,100182,100185,100187],{"class":54,"line":201},[52,100178,100179],{"class":622},"a[::",[52,100181,3194],{"class":90},[52,100183,100184],{"class":622},",::",[52,100186,3194],{"class":90},[52,100188,36178],{"class":622},[274,100190,100191],{},"⑤同时获取两个元素",[19,100193,100195],{"className":33310,"code":100194,"language":33312,"meta":28,"style":28},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[26,100196,100197,100202,100207],{"__ignoreMap":28},[52,100198,100199],{"class":54,"line":55},[52,100200,100201],{"class":332},"#同时获取第三行第二列，第四行第一列\n",[52,100203,100204],{"class":54,"line":69},[52,100205,100206],{"class":332},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[52,100208,100209,100212,100214,100216,100218,100220,100222,100224,100226],{"class":54,"line":82},[52,100210,100211],{"class":622},"a[(",[52,100213,3194],{"class":90},[52,100215,3491],{"class":622},[52,100217,3188],{"class":90},[52,100219,45179],{"class":622},[52,100221,3332],{"class":90},[52,100223,3491],{"class":622},[52,100225,3306],{"class":90},[52,100227,100228],{"class":622},")]\n",[274,100230,100231],{},"⑥切片，对行进行反向获取",[19,100233,100235],{"className":33310,"code":100234,"language":33312,"meta":28,"style":28},"#切片 对所有行进行反向获取\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",[26,100236,100237,100242,100252,100256,100260,100265,100270,100275,100280,100284,100289,100305,100309,100314,100319,100324,100329],{"__ignoreMap":28},[52,100238,100239],{"class":54,"line":55},[52,100240,100241],{"class":332},"#切片 对所有行进行反向获取\n",[52,100243,100244,100246,100248,100250],{"class":54,"line":69},[52,100245,100179],{"class":622},[52,100247,3644],{"class":160},[52,100249,3332],{"class":90},[52,100251,36178],{"class":622},[52,100253,100254],{"class":54,"line":82},[52,100255,96492],{"class":332},[52,100257,100258],{"class":54,"line":97},[52,100259,96856],{"class":62},[52,100261,100262],{"class":54,"line":112},[52,100263,100264],{"class":62},"array([[19, 20, 21, 22, 23, 24],\n",[52,100266,100267],{"class":54,"line":119},[52,100268,100269],{"class":62},"       [13, 14, 15, 16, 17, 18],\n",[52,100271,100272],{"class":54,"line":130},[52,100273,100274],{"class":62},"       [ 7,  8,  9, 10, 11, 12],\n",[52,100276,100277],{"class":54,"line":136},[52,100278,100279],{"class":62},"       [ 1,  2,  3,  4,  5,  6]])\n",[52,100281,100282],{"class":54,"line":141},[52,100283,96856],{"class":62},[52,100285,100286],{"class":54,"line":146},[52,100287,100288],{"class":332},"#对行列都进行反向切片获取\n",[52,100290,100291,100293,100295,100297,100299,100301,100303],{"class":54,"line":152},[52,100292,100179],{"class":622},[52,100294,3644],{"class":160},[52,100296,3332],{"class":90},[52,100298,100184],{"class":622},[52,100300,3644],{"class":160},[52,100302,3332],{"class":90},[52,100304,36178],{"class":622},[52,100306,100307],{"class":54,"line":157},[52,100308,96856],{"class":62},[52,100310,100311],{"class":54,"line":173},[52,100312,100313],{"class":62},"array([[24, 23, 22, 21, 20, 19],\n",[52,100315,100316],{"class":54,"line":178},[52,100317,100318],{"class":62},"       [18, 17, 16, 15, 14, 13],\n",[52,100320,100321],{"class":54,"line":184},[52,100322,100323],{"class":62},"       [12, 11, 10,  9,  8,  7],\n",[52,100325,100326],{"class":54,"line":189},[52,100327,100328],{"class":62},"       [ 6,  5,  4,  3,  2,  1]])\n",[52,100330,100331],{"class":54,"line":201},[52,100332,96856],{"class":62},[274,100334,100335],{},"⑦修改元素",[19,100337,100339],{"className":33310,"code":100338,"language":33312,"meta":28,"style":28},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[26,100340,100341,100346,100364,100369],{"__ignoreMap":28},[52,100342,100343],{"class":54,"line":55},[52,100344,100345],{"class":332},"#获取前两行和前两列\n",[52,100347,100348,100351,100353,100355,100357,100360,100362],{"class":54,"line":69},[52,100349,100350],{"class":622},"sub_a",[52,100352,2099],{"class":160},[52,100354,100098],{"class":622},[52,100356,3194],{"class":90},[52,100358,100359],{"class":622},",:",[52,100361,3194],{"class":90},[52,100363,36178],{"class":622},[52,100365,100366],{"class":54,"line":82},[52,100367,100368],{"class":332},"#修改sub_a第一个元素的值\n",[52,100370,100371,100374,100376,100378,100380,100382,100384],{"class":54,"line":97},[52,100372,100373],{"class":622},"sub_a[",[52,100375,3306],{"class":90},[52,100377,3491],{"class":622},[52,100379,3306],{"class":90},[52,100381,4052],{"class":622},[52,100383,2099],{"class":160},[52,100385,100386],{"class":90},"100\n",[274,100388,100389],{},"⑧数组复制copy()",[19,100391,100393],{"className":33310,"code":100392,"language":33312,"meta":28,"style":28},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[26,100394,100395,100400,100410,100415],{"__ignoreMap":28},[52,100396,100397],{"class":54,"line":55},[52,100398,100399],{"class":332},"#数组复制\n",[52,100401,100402,100405,100407],{"class":54,"line":69},[52,100403,100404],{"class":622},"copy_a",[52,100406,2099],{"class":160},[52,100408,100409],{"class":622},"np.copy(sub_a)\n",[52,100411,100412],{"class":54,"line":82},[52,100413,100414],{"class":332},"#修改copy_a后不影响原数组\n",[52,100416,100417,100420,100422,100424,100426,100428,100430],{"class":54,"line":97},[52,100418,100419],{"class":622},"copy_a[",[52,100421,3306],{"class":90},[52,100423,3491],{"class":622},[52,100425,3306],{"class":90},[52,100427,4052],{"class":622},[52,100429,2099],{"class":160},[52,100431,100386],{"class":90},[274,100433,100434],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[3015,100436,100437],{},"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":28,"searchDepth":69,"depth":69,"links":100439},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99956,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":100446,"title":100447,"body":100448,"description":3046,"extension":3047,"meta":100940,"navigation":115,"path":100941,"seo":100942,"stem":100943,"__hash__":100944},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":100449,"toc":100932},[100450,100453,100457,100460,100463,100516,100519,100544,100547,100566,100586,100589,100605,100609,100655,100659,100701,100705,100708,100711,100714,100717,100720,100782,100842,100846,100849,100906,100910,100915,100924,100929],[10,100451,100447],{"id":100452},"_5改变数组的维度",[14,100454,100456],{"id":100455},"_51-使用reshape","5.1 使用reshape()",[274,100458,100459],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[274,100461,100462],{},"①一维数组转换为二维数组",[19,100464,100466],{"className":33310,"code":100465,"language":33312,"meta":28,"style":28},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[26,100467,100468,100484,100489,100494,100499],{"__ignoreMap":28},[52,100469,100470,100472,100474,100476,100478,100480,100482],{"class":54,"line":55},[52,100471,300],{"class":622},[52,100473,2099],{"class":160},[52,100475,95930],{"class":622},[52,100477,3332],{"class":90},[52,100479,3491],{"class":622},[52,100481,3635],{"class":90},[52,100483,170],{"class":622},[52,100485,100486],{"class":54,"line":69},[52,100487,100488],{"class":332},"#将一维数组进行转换\n",[52,100490,100491],{"class":54,"line":82},[52,100492,100493],{"class":332},"#注意点：元素个数不可以变\n",[52,100495,100496],{"class":54,"line":97},[52,100497,100498],{"class":332},"#转换维度要保持一致，不一致就异常！！！\n",[52,100500,100501,100503,100505,100508,100510,100512,100514],{"class":54,"line":112},[52,100502,96234],{"class":622},[52,100504,2099],{"class":160},[52,100506,100507],{"class":622},"a.reshape(",[52,100509,3194],{"class":90},[52,100511,3491],{"class":622},[52,100513,3457],{"class":90},[52,100515,170],{"class":622},[274,100517,100518],{},"②一维数组转换为三维数组",[19,100520,100522],{"className":33310,"code":100521,"language":33312,"meta":28,"style":28},"aaa=a.reshape(2,3,2)\n",[26,100523,100524],{"__ignoreMap":28},[52,100525,100526,100528,100530,100532,100534,100536,100538,100540,100542],{"class":54,"line":55},[52,100527,98449],{"class":622},[52,100529,2099],{"class":160},[52,100531,100507],{"class":622},[52,100533,3194],{"class":90},[52,100535,3491],{"class":622},[52,100537,3188],{"class":90},[52,100539,3491],{"class":622},[52,100541,3194],{"class":90},[52,100543,170],{"class":622},[274,100545,100546],{},"③二维数组转化为一维数组",[19,100548,100550],{"className":33310,"code":100549,"language":33312,"meta":28,"style":28},"#知道元素个数：\naa.reshape(12)\n",[26,100551,100552,100557],{"__ignoreMap":28},[52,100553,100554],{"class":54,"line":55},[52,100555,100556],{"class":332},"#知道元素个数：\n",[52,100558,100559,100562,100564],{"class":54,"line":69},[52,100560,100561],{"class":622},"aa.reshape(",[52,100563,3610],{"class":90},[52,100565,170],{"class":622},[19,100567,100569],{"className":33310,"code":100568,"language":33312,"meta":28,"style":28},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[26,100570,100571,100576],{"__ignoreMap":28},[52,100572,100573],{"class":54,"line":55},[52,100574,100575],{"class":332},"#不知道元素个数，参数传递-1\n",[52,100577,100578,100580,100582,100584],{"class":54,"line":69},[52,100579,100561],{"class":622},[52,100581,3644],{"class":160},[52,100583,3332],{"class":90},[52,100585,170],{"class":622},[274,100587,100588],{},"④三维数组转换为一维数组",[19,100590,100592],{"className":33310,"code":100591,"language":33312,"meta":28,"style":28},"aaa.reshape(-1)\n",[26,100593,100594],{"__ignoreMap":28},[52,100595,100596,100599,100601,100603],{"class":54,"line":55},[52,100597,100598],{"class":622},"aaa.reshape(",[52,100600,3644],{"class":160},[52,100602,3332],{"class":90},[52,100604,170],{"class":622},[14,100606,100608],{"id":100607},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[19,100610,100612],{"className":33310,"code":100611,"language":33312,"meta":28,"style":28},"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",[26,100613,100614,100641,100646,100650],{"__ignoreMap":28},[52,100615,100616,100618,100620,100622,100624,100626,100628,100630,100632,100634,100636,100638],{"class":54,"line":55},[52,100617,96234],{"class":622},[52,100619,2099],{"class":160},[52,100621,95930],{"class":622},[52,100623,3332],{"class":90},[52,100625,3491],{"class":622},[52,100627,3635],{"class":90},[52,100629,95935],{"class":622},[52,100631,3194],{"class":90},[52,100633,3491],{"class":622},[52,100635,3457],{"class":90},[52,100637,3542],{"class":622},[52,100639,100640],{"class":332},"#转换为2行6列的数组\n",[52,100642,100643],{"class":54,"line":69},[52,100644,100645],{"class":622},"aa.revel()\n",[52,100647,100648],{"class":54,"line":82},[52,100649,96492],{"class":332},[52,100651,100652],{"class":54,"line":97},[52,100653,100654],{"class":332},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,100656,100658],{"id":100657},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[19,100660,100662],{"className":33310,"code":100661,"language":33312,"meta":28,"style":28},"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",[26,100663,100664,100688,100693,100697],{"__ignoreMap":28},[52,100665,100666,100668,100670,100672,100674,100676,100678,100680,100682,100684,100686],{"class":54,"line":55},[52,100667,96234],{"class":622},[52,100669,2099],{"class":160},[52,100671,95930],{"class":622},[52,100673,3332],{"class":90},[52,100675,3491],{"class":622},[52,100677,3635],{"class":90},[52,100679,95935],{"class":622},[52,100681,3194],{"class":90},[52,100683,3491],{"class":622},[52,100685,3457],{"class":90},[52,100687,170],{"class":622},[52,100689,100690],{"class":54,"line":69},[52,100691,100692],{"class":622},"aa.flatten()\n",[52,100694,100695],{"class":54,"line":82},[52,100696,96492],{"class":332},[52,100698,100699],{"class":54,"line":97},[52,100700,100654],{"class":332},[14,100702,100704],{"id":100703},"_54-使用resize","5.4 使用resize()",[274,100706,100707],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[274,100709,100710],{},"通过resize方法可以改变数组的维度",[274,100712,100713],{},"#resize修改数组维度",[274,100715,100716],{},"#以元组的形式指定形状",[274,100718,100719],{},"#改变的是原数组",[19,100721,100723],{"className":33310,"code":100722,"language":33312,"meta":28,"style":28},"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",[26,100724,100725,100741,100761,100774,100778],{"__ignoreMap":28},[52,100726,100727,100729,100731,100733,100735,100737,100739],{"class":54,"line":55},[52,100728,300],{"class":622},[52,100730,2099],{"class":160},[52,100732,95930],{"class":622},[52,100734,3332],{"class":90},[52,100736,3491],{"class":622},[52,100738,3635],{"class":90},[52,100740,170],{"class":622},[52,100742,100743,100746,100748,100750,100752,100754,100756,100758],{"class":54,"line":69},[52,100744,100745],{"class":622},"a.shape",[52,100747,2099],{"class":160},[52,100749,3121],{"class":622},[52,100751,3194],{"class":90},[52,100753,3491],{"class":622},[52,100755,3457],{"class":90},[52,100757,3542],{"class":622},[52,100759,100760],{"class":332},"#改变了原数组\n",[52,100762,100763,100765,100767,100770,100772],{"class":54,"line":82},[52,100764,300],{"class":622},[52,100766,2099],{"class":160},[52,100768,100769],{"class":622},"resize((",[52,100771,3610],{"class":90},[52,100773,33429],{"class":622},[52,100775,100776],{"class":54,"line":97},[52,100777,96492],{"class":332},[52,100779,100780],{"class":54,"line":112},[52,100781,100654],{"class":332},[19,100783,100785],{"className":33310,"code":100784,"language":33312,"meta":28,"style":28},"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",[26,100786,100787,100800,100804,100808,100813,100818,100823,100828,100833,100838],{"__ignoreMap":28},[52,100788,100789,100792,100794,100796,100798],{"class":54,"line":55},[52,100790,100791],{"class":622},"a.resize((",[52,100793,3457],{"class":90},[52,100795,3491],{"class":622},[52,100797,3194],{"class":90},[52,100799,33429],{"class":622},[52,100801,100802],{"class":54,"line":69},[52,100803,96492],{"class":332},[52,100805,100806],{"class":54,"line":82},[52,100807,96856],{"class":62},[52,100809,100810],{"class":54,"line":97},[52,100811,100812],{"class":62},"array([[ 1,  2],\n",[52,100814,100815],{"class":54,"line":112},[52,100816,100817],{"class":62},"       [ 3,  4],\n",[52,100819,100820],{"class":54,"line":119},[52,100821,100822],{"class":62},"       [ 5,  6],\n",[52,100824,100825],{"class":54,"line":130},[52,100826,100827],{"class":62},"       [ 7,  8],\n",[52,100829,100830],{"class":54,"line":136},[52,100831,100832],{"class":62},"       [ 9, 10],\n",[52,100834,100835],{"class":54,"line":141},[52,100836,100837],{"class":62},"       [11, 12]])\n",[52,100839,100840],{"class":54,"line":146},[52,100841,96856],{"class":62},[14,100843,100845],{"id":100844},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[274,100847,100848],{},"改变了原数组",[19,100850,100852],{"className":33310,"code":100851,"language":33312,"meta":28,"style":28},"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",[26,100853,100854,100870,100886,100890,100894,100898,100902],{"__ignoreMap":28},[52,100855,100856,100858,100860,100862,100864,100866,100868],{"class":54,"line":55},[52,100857,300],{"class":622},[52,100859,2099],{"class":160},[52,100861,95930],{"class":622},[52,100863,3332],{"class":90},[52,100865,3491],{"class":622},[52,100867,3635],{"class":90},[52,100869,170],{"class":622},[52,100871,100872,100874,100876,100878,100880,100882,100884],{"class":54,"line":69},[52,100873,100745],{"class":622},[52,100875,2099],{"class":160},[52,100877,3121],{"class":622},[52,100879,3194],{"class":90},[52,100881,3491],{"class":622},[52,100883,3457],{"class":90},[52,100885,170],{"class":622},[52,100887,100888],{"class":54,"line":82},[52,100889,96492],{"class":332},[52,100891,100892],{"class":54,"line":97},[52,100893,96856],{"class":62},[52,100895,100896],{"class":54,"line":112},[52,100897,100116],{"class":62},[52,100899,100900],{"class":54,"line":119},[52,100901,100121],{"class":62},[52,100903,100904],{"class":54,"line":130},[52,100905,96856],{"class":62},[14,100907,100909],{"id":100908},"_56-重要比较","5.6 重要比较：",[274,100911,100912],{},[280,100913],{"alt":28,"src":100914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[274,100916,100917,100918,100920,100921,100923],{},"口诀：NumPy 函数要么用 ",[26,100919,98891],{},"，要么用 ",[26,100922,34428],{},"，创建结构用 shape，造数据用 size",[274,100925,100926],{},[280,100927],{"alt":28,"src":100928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[3015,100930,100931],{},"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":28,"searchDepth":69,"depth":69,"links":100933},[100934,100935,100936,100937,100938,100939],{"id":100455,"depth":69,"text":100456},{"id":100607,"depth":69,"text":100608},{"id":100657,"depth":69,"text":100658},{"id":100703,"depth":69,"text":100704},{"id":100844,"depth":69,"text":100845},{"id":100908,"depth":69,"text":100909},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":100447,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100946,"title":100947,"body":100948,"description":3046,"extension":3047,"meta":102020,"navigation":115,"path":102021,"seo":102022,"stem":102023,"__hash__":102024},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100949,"toc":102014},[100950,100953,100957,100960,100963,100966,101031,101034,101074,101077,101159,101162,101167,101189,101191,101196,101201,101204,101207,101362,101365,101567,101571,101574,101577,101645,101647,101652,101655,101658,101738,101742,101745,101747,101820,101822,101827,101829,101909,101913,101916,101919,101922,101925,101928,101931,102011],[10,100951,100947],{"id":100952},"_6数组的拼接",[14,100954,100956],{"id":100955},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[274,100958,100959],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[274,100961,100962],{},"函数内部传两个数列构成的数列或者元组",[274,100964,100965],{},"①一维数组的拼接",[19,100967,100969],{"className":33310,"code":100968,"language":33312,"meta":28,"style":28},"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",[26,100970,100971,100991,101011,101016,101021,101026],{"__ignoreMap":28},[52,100972,100973,100975,100977,100979,100981,100983,100985,100987,100989],{"class":54,"line":55},[52,100974,300],{"class":622},[52,100976,2099],{"class":160},[52,100978,95952],{"class":622},[52,100980,3332],{"class":90},[52,100982,3491],{"class":622},[52,100984,3194],{"class":90},[52,100986,3491],{"class":622},[52,100988,3188],{"class":90},[52,100990,7616],{"class":622},[52,100992,100993,100995,100997,100999,101001,101003,101005,101007,101009],{"class":54,"line":69},[52,100994,3376],{"class":622},[52,100996,2099],{"class":160},[52,100998,95952],{"class":622},[52,101000,3406],{"class":90},[52,101002,3491],{"class":622},[52,101004,3432],{"class":90},[52,101006,3491],{"class":622},[52,101008,3457],{"class":90},[52,101010,7616],{"class":622},[52,101012,101013],{"class":54,"line":82},[52,101014,101015],{"class":332},"#调用concatenate进行数组拼接\n",[52,101017,101018],{"class":54,"line":97},[52,101019,101020],{"class":622},"np.concatenate((a,b))\n",[52,101022,101023],{"class":54,"line":112},[52,101024,101025],{"class":332},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[52,101027,101028],{"class":54,"line":119},[52,101029,101030],{"class":332},"#np.concatenate([a,b])\n",[274,101032,101033],{},"②一维多个数组拼接",[19,101035,101037],{"className":33310,"code":101036,"language":33312,"meta":28,"style":28},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[26,101038,101039,101044,101064,101069],{"__ignoreMap":28},[52,101040,101041],{"class":54,"line":55},[52,101042,101043],{"class":332},"#也可以多个数组进行拼接\n",[52,101045,101046,101048,101050,101052,101054,101056,101058,101060,101062],{"class":54,"line":69},[52,101047,3401],{"class":622},[52,101049,2099],{"class":160},[52,101051,95952],{"class":622},[52,101053,3559],{"class":90},[52,101055,3491],{"class":622},[52,101057,3584],{"class":90},[52,101059,3491],{"class":622},[52,101061,3635],{"class":90},[52,101063,7616],{"class":622},[52,101065,101066],{"class":54,"line":82},[52,101067,101068],{"class":622},"c\n",[52,101070,101071],{"class":54,"line":97},[52,101072,101073],{"class":622},"np.concatenate((a,b,c))\n",[274,101075,101076],{},"③二维数组拼接",[19,101078,101080],{"className":33310,"code":101079,"language":33312,"meta":28,"style":28},"#二维数组使用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",[26,101081,101082,101087,101111,101136,101141,101146],{"__ignoreMap":28},[52,101083,101084],{"class":54,"line":55},[52,101085,101086],{"class":332},"#二维数组使用concatenate进行拼接\n",[52,101088,101089,101091,101093,101095,101097,101099,101101,101103,101105,101107,101109],{"class":54,"line":69},[52,101090,96234],{"class":622},[52,101092,2099],{"class":160},[52,101094,95930],{"class":622},[52,101096,3332],{"class":90},[52,101098,3491],{"class":622},[52,101100,3635],{"class":90},[52,101102,95935],{"class":622},[52,101104,3188],{"class":90},[52,101106,3491],{"class":622},[52,101108,3406],{"class":90},[52,101110,170],{"class":622},[52,101112,101113,101116,101118,101120,101122,101124,101126,101128,101130,101132,101134],{"class":54,"line":82},[52,101114,101115],{"class":622},"bb",[52,101117,2099],{"class":160},[52,101119,95930],{"class":622},[52,101121,3450],{"class":90},[52,101123,3491],{"class":622},[52,101125,3754],{"class":90},[52,101127,95935],{"class":622},[52,101129,3188],{"class":90},[52,101131,3491],{"class":622},[52,101133,3406],{"class":90},[52,101135,170],{"class":622},[52,101137,101138],{"class":54,"line":97},[52,101139,101140],{"class":332},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[52,101142,101143],{"class":54,"line":112},[52,101144,101145],{"class":332},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[52,101147,101148,101151,101153,101155,101157],{"class":54,"line":119},[52,101149,101150],{"class":622},"np.concatenate((aa,bb),",[52,101152,50446],{"class":8172},[52,101154,2099],{"class":160},[52,101156,3306],{"class":90},[52,101158,170],{"class":622},[274,101160,101161],{},"结果：",[274,101163,101164],{},[280,101165],{"alt":28,"src":101166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[19,101168,101170],{"className":33310,"code":101169,"language":33312,"meta":28,"style":28},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[26,101171,101172,101177],{"__ignoreMap":28},[52,101173,101174],{"class":54,"line":55},[52,101175,101176],{"class":332},"#指定axis为1进行拼接\n",[52,101178,101179,101181,101183,101185,101187],{"class":54,"line":69},[52,101180,101150],{"class":622},[52,101182,50446],{"class":8172},[52,101184,2099],{"class":160},[52,101186,3332],{"class":90},[52,101188,170],{"class":622},[274,101190,101161],{},[274,101192,101193],{},[280,101194],{"alt":28,"src":101195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[274,101197,101198],{},[538,101199,101200],{},"二维数组总结：0竖着方向，1横着方向",[274,101202,101203],{},"④三维数组拼接",[274,101205,101206],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[19,101208,101210],{"className":33310,"code":101209,"language":33312,"meta":28,"style":28},"#两个三行六列\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",[26,101211,101212,101217,101245,101275,101280,101297,101302,101307,101312,101329,101334,101339,101344,101357],{"__ignoreMap":28},[52,101213,101214],{"class":54,"line":55},[52,101215,101216],{"class":332},"#两个三行六列\n",[52,101218,101219,101221,101223,101225,101227,101229,101231,101233,101235,101237,101239,101241,101243],{"class":54,"line":69},[52,101220,98449],{"class":622},[52,101222,2099],{"class":160},[52,101224,95930],{"class":622},[52,101226,3332],{"class":90},[52,101228,3491],{"class":622},[52,101230,3438],{"class":90},[52,101232,95935],{"class":622},[52,101234,3194],{"class":90},[52,101236,3491],{"class":622},[52,101238,3188],{"class":90},[52,101240,3491],{"class":622},[52,101242,3457],{"class":90},[52,101244,170],{"class":622},[52,101246,101247,101250,101252,101254,101256,101258,101261,101263,101265,101267,101269,101271,101273],{"class":54,"line":82},[52,101248,101249],{"class":622},"bbb",[52,101251,2099],{"class":160},[52,101253,95930],{"class":622},[52,101255,3450],{"class":90},[52,101257,3491],{"class":622},[52,101259,101260],{"class":90},"137",[52,101262,95935],{"class":622},[52,101264,3194],{"class":90},[52,101266,3491],{"class":622},[52,101268,3188],{"class":90},[52,101270,3491],{"class":622},[52,101272,3457],{"class":90},[52,101274,170],{"class":622},[52,101276,101277],{"class":54,"line":97},[52,101278,101279],{"class":332},"#axis=0\n",[52,101281,101282,101284,101286,101289,101291,101293,101295],{"class":54,"line":112},[52,101283,3807],{"class":622},[52,101285,2099],{"class":160},[52,101287,101288],{"class":622},"np.concatenate((aaa,bbb),",[52,101290,50446],{"class":8172},[52,101292,2099],{"class":160},[52,101294,3306],{"class":90},[52,101296,170],{"class":622},[52,101298,101299],{"class":54,"line":119},[52,101300,101301],{"class":622},"s.shape\n",[52,101303,101304],{"class":54,"line":130},[52,101305,101306],{"class":332},"#输出：(4,3,6)\n",[52,101308,101309],{"class":54,"line":136},[52,101310,101311],{"class":332},"#axis=1\n",[52,101313,101314,101317,101319,101321,101323,101325,101327],{"class":54,"line":141},[52,101315,101316],{"class":622},"ss",[52,101318,2099],{"class":160},[52,101320,101288],{"class":622},[52,101322,50446],{"class":8172},[52,101324,2099],{"class":160},[52,101326,3332],{"class":90},[52,101328,170],{"class":622},[52,101330,101331],{"class":54,"line":146},[52,101332,101333],{"class":622},"ss.shape\n",[52,101335,101336],{"class":54,"line":152},[52,101337,101338],{"class":332},"#输出：(2,6,6)\n",[52,101340,101341],{"class":54,"line":157},[52,101342,101343],{"class":332},"#axis=2\n",[52,101345,101346,101348,101350,101352,101354],{"class":54,"line":173},[52,101347,101288],{"class":622},[52,101349,50446],{"class":8172},[52,101351,2099],{"class":160},[52,101353,3194],{"class":90},[52,101355,101356],{"class":622},").shape\n",[52,101358,101359],{"class":54,"line":178},[52,101360,101361],{"class":332},"#输出：（2，3，12）\n",[274,101363,101364],{},"⑤四维数组拼接",[19,101366,101368],{"className":33310,"code":101367,"language":33312,"meta":28,"style":28},"#两个三行六列\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",[26,101369,101370,101374,101402,101430,101455,101481,101485,101498,101503,101507,101519,101524,101528,101540,101545,101550,101562],{"__ignoreMap":28},[52,101371,101372],{"class":54,"line":55},[52,101373,101216],{"class":332},[52,101375,101376,101378,101380,101382,101384,101386,101388,101390,101392,101394,101396,101398,101400],{"class":54,"line":69},[52,101377,98449],{"class":622},[52,101379,2099],{"class":160},[52,101381,95930],{"class":622},[52,101383,3332],{"class":90},[52,101385,3491],{"class":622},[52,101387,3438],{"class":90},[52,101389,95935],{"class":622},[52,101391,3194],{"class":90},[52,101393,3491],{"class":622},[52,101395,3188],{"class":90},[52,101397,3491],{"class":622},[52,101399,3457],{"class":90},[52,101401,170],{"class":622},[52,101403,101404,101406,101408,101410,101412,101414,101416,101418,101420,101422,101424,101426,101428],{"class":54,"line":82},[52,101405,101249],{"class":622},[52,101407,2099],{"class":160},[52,101409,95930],{"class":622},[52,101411,3450],{"class":90},[52,101413,3491],{"class":622},[52,101415,101260],{"class":90},[52,101417,95935],{"class":622},[52,101419,3194],{"class":90},[52,101421,3491],{"class":622},[52,101423,3188],{"class":90},[52,101425,3491],{"class":622},[52,101427,3457],{"class":90},[52,101429,170],{"class":622},[52,101431,101432,101435,101437,101439,101441,101443,101445,101447,101449,101451,101453],{"class":54,"line":97},[52,101433,101434],{"class":622},"aaaa",[52,101436,2099],{"class":160},[52,101438,100598],{"class":622},[52,101440,3194],{"class":90},[52,101442,3491],{"class":622},[52,101444,3188],{"class":90},[52,101446,3491],{"class":622},[52,101448,3188],{"class":90},[52,101450,3491],{"class":622},[52,101452,3194],{"class":90},[52,101454,170],{"class":622},[52,101456,101457,101460,101462,101465,101467,101469,101471,101473,101475,101477,101479],{"class":54,"line":112},[52,101458,101459],{"class":622},"bbbb",[52,101461,2099],{"class":160},[52,101463,101464],{"class":622},"bbb.reshape(",[52,101466,3194],{"class":90},[52,101468,3491],{"class":622},[52,101470,3188],{"class":90},[52,101472,3491],{"class":622},[52,101474,3188],{"class":90},[52,101476,3491],{"class":622},[52,101478,3194],{"class":90},[52,101480,170],{"class":622},[52,101482,101483],{"class":54,"line":119},[52,101484,101279],{"class":332},[52,101486,101487,101490,101492,101494,101496],{"class":54,"line":130},[52,101488,101489],{"class":622},"np.concatenate((aaaa,bbbb),",[52,101491,50446],{"class":8172},[52,101493,2099],{"class":160},[52,101495,3306],{"class":90},[52,101497,101356],{"class":622},[52,101499,101500],{"class":54,"line":136},[52,101501,101502],{"class":332},"#结果：（4，3，3，2）\n",[52,101504,101505],{"class":54,"line":141},[52,101506,101311],{"class":332},[52,101508,101509,101511,101513,101515,101517],{"class":54,"line":146},[52,101510,101489],{"class":622},[52,101512,50446],{"class":8172},[52,101514,2099],{"class":160},[52,101516,3332],{"class":90},[52,101518,101356],{"class":622},[52,101520,101521],{"class":54,"line":152},[52,101522,101523],{"class":332},"#结果：（2，6，3，2）\n",[52,101525,101526],{"class":54,"line":157},[52,101527,101343],{"class":332},[52,101529,101530,101532,101534,101536,101538],{"class":54,"line":173},[52,101531,101489],{"class":622},[52,101533,50446],{"class":8172},[52,101535,2099],{"class":160},[52,101537,3194],{"class":90},[52,101539,101356],{"class":622},[52,101541,101542],{"class":54,"line":178},[52,101543,101544],{"class":332},"#结果：（2，3，6，2）\n",[52,101546,101547],{"class":54,"line":184},[52,101548,101549],{"class":332},"#axis=3\n",[52,101551,101552,101554,101556,101558,101560],{"class":54,"line":189},[52,101553,101489],{"class":622},[52,101555,50446],{"class":8172},[52,101557,2099],{"class":160},[52,101559,3188],{"class":90},[52,101561,101356],{"class":622},[52,101563,101564],{"class":54,"line":201},[52,101565,101566],{"class":332},"#结果：（2，3，3，4）\n",[14,101568,101570],{"id":101569},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[274,101572,101573],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[274,101575,101576],{},"①二维数组",[19,101578,101580],{"className":33310,"code":101579,"language":33312,"meta":28,"style":28},"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",[26,101581,101582,101606,101630,101635,101640],{"__ignoreMap":28},[52,101583,101584,101586,101588,101590,101592,101594,101596,101598,101600,101602,101604],{"class":54,"line":55},[52,101585,96234],{"class":622},[52,101587,2099],{"class":160},[52,101589,95930],{"class":622},[52,101591,3332],{"class":90},[52,101593,3491],{"class":622},[52,101595,3635],{"class":90},[52,101597,95935],{"class":622},[52,101599,3188],{"class":90},[52,101601,3491],{"class":622},[52,101603,3406],{"class":90},[52,101605,170],{"class":622},[52,101607,101608,101610,101612,101614,101616,101618,101620,101622,101624,101626,101628],{"class":54,"line":69},[52,101609,101115],{"class":622},[52,101611,2099],{"class":160},[52,101613,95930],{"class":622},[52,101615,3450],{"class":90},[52,101617,3491],{"class":622},[52,101619,3754],{"class":90},[52,101621,95935],{"class":622},[52,101623,3188],{"class":90},[52,101625,3491],{"class":622},[52,101627,3406],{"class":90},[52,101629,170],{"class":622},[52,101631,101632],{"class":54,"line":82},[52,101633,101634],{"class":622},"np.hstack((aa,bb))\n",[52,101636,101637],{"class":54,"line":97},[52,101638,101639],{"class":332},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[52,101641,101642],{"class":54,"line":112},[52,101643,101644],{"class":332},"#np.hstack([aa,bb])\n",[274,101646,101161],{},[274,101648,101649],{},[280,101650],{"alt":28,"src":101651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[274,101653,101654],{},"等效于concatenate()函数中axis=1时的情况",[274,101656,101657],{},"②三维数组",[19,101659,101661],{"className":33310,"code":101660,"language":33312,"meta":28,"style":28},"#两个三行六列\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",[26,101662,101663,101667,101695,101723,101728,101733],{"__ignoreMap":28},[52,101664,101665],{"class":54,"line":55},[52,101666,101216],{"class":332},[52,101668,101669,101671,101673,101675,101677,101679,101681,101683,101685,101687,101689,101691,101693],{"class":54,"line":69},[52,101670,98449],{"class":622},[52,101672,2099],{"class":160},[52,101674,95930],{"class":622},[52,101676,3332],{"class":90},[52,101678,3491],{"class":622},[52,101680,3438],{"class":90},[52,101682,95935],{"class":622},[52,101684,3194],{"class":90},[52,101686,3491],{"class":622},[52,101688,3188],{"class":90},[52,101690,3491],{"class":622},[52,101692,3457],{"class":90},[52,101694,170],{"class":622},[52,101696,101697,101699,101701,101703,101705,101707,101709,101711,101713,101715,101717,101719,101721],{"class":54,"line":82},[52,101698,101249],{"class":622},[52,101700,2099],{"class":160},[52,101702,95930],{"class":622},[52,101704,3450],{"class":90},[52,101706,3491],{"class":622},[52,101708,101260],{"class":90},[52,101710,95935],{"class":622},[52,101712,3194],{"class":90},[52,101714,3491],{"class":622},[52,101716,3188],{"class":90},[52,101718,3491],{"class":622},[52,101720,3457],{"class":90},[52,101722,170],{"class":622},[52,101724,101725],{"class":54,"line":97},[52,101726,101727],{"class":332},"#使用hstack\n",[52,101729,101730],{"class":54,"line":112},[52,101731,101732],{"class":622},"np.hstack((aaa,bbb)).shape\n",[52,101734,101735],{"class":54,"line":119},[52,101736,101737],{"class":332},"#输出：（2，6，6）\n",[14,101739,101741],{"id":101740},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[274,101743,101744],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[274,101746,101576],{},[19,101748,101750],{"className":33310,"code":101749,"language":33312,"meta":28,"style":28},"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",[26,101751,101752,101776,101800,101805,101810,101815],{"__ignoreMap":28},[52,101753,101754,101756,101758,101760,101762,101764,101766,101768,101770,101772,101774],{"class":54,"line":55},[52,101755,96234],{"class":622},[52,101757,2099],{"class":160},[52,101759,95930],{"class":622},[52,101761,3332],{"class":90},[52,101763,3491],{"class":622},[52,101765,3635],{"class":90},[52,101767,95935],{"class":622},[52,101769,3188],{"class":90},[52,101771,3491],{"class":622},[52,101773,3406],{"class":90},[52,101775,170],{"class":622},[52,101777,101778,101780,101782,101784,101786,101788,101790,101792,101794,101796,101798],{"class":54,"line":69},[52,101779,101115],{"class":622},[52,101781,2099],{"class":160},[52,101783,95930],{"class":622},[52,101785,3450],{"class":90},[52,101787,3491],{"class":622},[52,101789,3754],{"class":90},[52,101791,95935],{"class":622},[52,101793,3188],{"class":90},[52,101795,3491],{"class":622},[52,101797,3406],{"class":90},[52,101799,170],{"class":622},[52,101801,101802],{"class":54,"line":82},[52,101803,101804],{"class":332},"#vstack 垂直方向进行堆叠\n",[52,101806,101807],{"class":54,"line":97},[52,101808,101809],{"class":622},"np.vstack((aa,bb))\n",[52,101811,101812],{"class":54,"line":112},[52,101813,101814],{"class":332},"#与hstack传的参数类似，等价于：\n",[52,101816,101817],{"class":54,"line":119},[52,101818,101819],{"class":622},"np.vstack([aa,bb])\n",[274,101821,101161],{},[274,101823,101824],{},[280,101825],{"alt":28,"src":101826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[274,101828,101657],{},[19,101830,101832],{"className":33310,"code":101831,"language":33312,"meta":28,"style":28},"#两个三行六列\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",[26,101833,101834,101838,101866,101894,101899,101904],{"__ignoreMap":28},[52,101835,101836],{"class":54,"line":55},[52,101837,101216],{"class":332},[52,101839,101840,101842,101844,101846,101848,101850,101852,101854,101856,101858,101860,101862,101864],{"class":54,"line":69},[52,101841,98449],{"class":622},[52,101843,2099],{"class":160},[52,101845,95930],{"class":622},[52,101847,3332],{"class":90},[52,101849,3491],{"class":622},[52,101851,3438],{"class":90},[52,101853,95935],{"class":622},[52,101855,3194],{"class":90},[52,101857,3491],{"class":622},[52,101859,3188],{"class":90},[52,101861,3491],{"class":622},[52,101863,3457],{"class":90},[52,101865,170],{"class":622},[52,101867,101868,101870,101872,101874,101876,101878,101880,101882,101884,101886,101888,101890,101892],{"class":54,"line":82},[52,101869,101249],{"class":622},[52,101871,2099],{"class":160},[52,101873,95930],{"class":622},[52,101875,3450],{"class":90},[52,101877,3491],{"class":622},[52,101879,101260],{"class":90},[52,101881,95935],{"class":622},[52,101883,3194],{"class":90},[52,101885,3491],{"class":622},[52,101887,3188],{"class":90},[52,101889,3491],{"class":622},[52,101891,3457],{"class":90},[52,101893,170],{"class":622},[52,101895,101896],{"class":54,"line":97},[52,101897,101898],{"class":332},"#使用vstack\n",[52,101900,101901],{"class":54,"line":112},[52,101902,101903],{"class":622},"np.vstack((aaa,bbb)).shape\n",[52,101905,101906],{"class":54,"line":119},[52,101907,101908],{"class":332},"#输出：（4，3，6）\n",[14,101910,101912],{"id":101911},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[274,101914,101915],{},"该方法是三维数组特有的方法",[274,101917,101918],{},"也就是说",[274,101920,101921],{},"一维数组拼接方法用：concatenate()",[274,101923,101924],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[274,101926,101927],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[274,101929,101930],{},"四维数组及多维数组只能用concatenate进行拼接",[19,101932,101934],{"className":33310,"code":101933,"language":33312,"meta":28,"style":28},"#两个三行六列\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",[26,101935,101936,101940,101968,101996,102001,102006],{"__ignoreMap":28},[52,101937,101938],{"class":54,"line":55},[52,101939,101216],{"class":332},[52,101941,101942,101944,101946,101948,101950,101952,101954,101956,101958,101960,101962,101964,101966],{"class":54,"line":69},[52,101943,98449],{"class":622},[52,101945,2099],{"class":160},[52,101947,95930],{"class":622},[52,101949,3332],{"class":90},[52,101951,3491],{"class":622},[52,101953,3438],{"class":90},[52,101955,95935],{"class":622},[52,101957,3194],{"class":90},[52,101959,3491],{"class":622},[52,101961,3188],{"class":90},[52,101963,3491],{"class":622},[52,101965,3457],{"class":90},[52,101967,170],{"class":622},[52,101969,101970,101972,101974,101976,101978,101980,101982,101984,101986,101988,101990,101992,101994],{"class":54,"line":82},[52,101971,101249],{"class":622},[52,101973,2099],{"class":160},[52,101975,95930],{"class":622},[52,101977,3450],{"class":90},[52,101979,3491],{"class":622},[52,101981,101260],{"class":90},[52,101983,95935],{"class":622},[52,101985,3194],{"class":90},[52,101987,3491],{"class":622},[52,101989,3188],{"class":90},[52,101991,3491],{"class":622},[52,101993,3457],{"class":90},[52,101995,170],{"class":622},[52,101997,101998],{"class":54,"line":97},[52,101999,102000],{"class":332},"#使用dstack\n",[52,102002,102003],{"class":54,"line":112},[52,102004,102005],{"class":622},"np.dstack((aaa,bbb)).shape\n",[52,102007,102008],{"class":54,"line":119},[52,102009,102010],{"class":332},"#结果：（2，3，12）\n",[3015,102012,102013],{},"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":28,"searchDepth":69,"depth":69,"links":102015},[102016,102017,102018,102019],{"id":100955,"depth":69,"text":100956},{"id":101569,"depth":69,"text":101570},{"id":101740,"depth":69,"text":101741},{"id":101911,"depth":69,"text":101912},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100947,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":102026,"title":102027,"body":102028,"description":3046,"extension":3047,"meta":102303,"navigation":115,"path":102304,"seo":102305,"stem":102306,"__hash__":102307},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":102029,"toc":102301},[102030,102033,102036,102130,102133,102136,102139,102142,102145,102148,102151,102154,102298],[10,102031,102027],{"id":102032},"_7数组转置",[274,102034,102035],{},"使用transpose()函数",[19,102037,102039],{"className":33310,"code":102038,"language":33312,"meta":28,"style":28},"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",[26,102040,102041,102051,102075,102080,102085,102090,102095,102103,102107,102111,102116,102121,102126],{"__ignoreMap":28},[52,102042,102043,102045,102047,102049],{"class":54,"line":55},[52,102044,33324],{"class":160},[52,102046,34312],{"class":622},[52,102048,34315],{"class":160},[52,102050,34318],{"class":622},[52,102052,102053,102055,102057,102059,102061,102063,102065,102067,102069,102071,102073],{"class":54,"line":69},[52,102054,300],{"class":622},[52,102056,2099],{"class":160},[52,102058,34649],{"class":622},[52,102060,3332],{"class":90},[52,102062,3491],{"class":622},[52,102064,3635],{"class":90},[52,102066,95935],{"class":622},[52,102068,3406],{"class":90},[52,102070,3491],{"class":622},[52,102072,3188],{"class":90},[52,102074,170],{"class":622},[52,102076,102077],{"class":54,"line":82},[52,102078,102079],{"class":332},"#二维数组转置\n",[52,102081,102082],{"class":54,"line":97},[52,102083,102084],{"class":332},"#调用transpose()函数\n",[52,102086,102087],{"class":54,"line":112},[52,102088,102089],{"class":622},"a.transpose()\n",[52,102091,102092],{"class":54,"line":119},[52,102093,102094],{"class":332},"#对于二维数组也可以采用.T来实现\n",[52,102096,102097,102100],{"class":54,"line":130},[52,102098,102099],{"class":622},"a.T",[52,102101,102102],{"class":332},"#与上述代码一样\n",[52,102104,102105],{"class":54,"line":136},[52,102106,96492],{"class":332},[52,102108,102109],{"class":54,"line":141},[52,102110,96856],{"class":62},[52,102112,102113],{"class":54,"line":146},[52,102114,102115],{"class":62},"array([[ 1,  4,  7, 10],\n",[52,102117,102118],{"class":54,"line":152},[52,102119,102120],{"class":62},"       [ 2,  5,  8, 11],\n",[52,102122,102123],{"class":54,"line":157},[52,102124,102125],{"class":62},"       [ 3,  6,  9, 12]])\n",[52,102127,102128],{"class":54,"line":173},[52,102129,96856],{"class":62},[274,102131,102132],{},"也可以使用np.transpose()的形式",[274,102134,102135],{},"#多维数组进行转置 np.transpose()",[274,102137,102138],{},"#对二维数组也可以使用np.transpose()进行转置",[274,102140,102141],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[274,102143,102144],{},"第二个参数，维度可以理解为用axis中的数来理解",[274,102146,102147],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[274,102149,102150],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[274,102152,102153],{},"四维及以上的数组也是一样的道理",[19,102155,102157],{"className":33310,"code":102156,"language":33312,"meta":28,"style":28},"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",[26,102158,102159,102187,102192,102197,102202,102220,102225,102257,102262,102267,102272,102293],{"__ignoreMap":28},[52,102160,102161,102163,102165,102167,102169,102171,102173,102175,102177,102179,102181,102183,102185],{"class":54,"line":55},[52,102162,3932],{"class":622},[52,102164,2099],{"class":160},[52,102166,95930],{"class":622},[52,102168,3332],{"class":90},[52,102170,3491],{"class":622},[52,102172,3438],{"class":90},[52,102174,95935],{"class":622},[52,102176,3188],{"class":90},[52,102178,3491],{"class":622},[52,102180,3457],{"class":90},[52,102182,3491],{"class":622},[52,102184,3194],{"class":90},[52,102186,170],{"class":622},[52,102188,102189],{"class":54,"line":69},[52,102190,102191],{"class":622},"x.shape\n",[52,102193,102194],{"class":54,"line":82},[52,102195,102196],{"class":332},"#结果：（3,6,2）\n",[52,102198,102199],{"class":54,"line":97},[52,102200,102201],{"class":332},"#使用np.transpose()进行转置 变为(2,6,3)\n",[52,102203,102204,102207,102209,102211,102213,102215,102217],{"class":54,"line":112},[52,102205,102206],{"class":622},"np.transpose(x,(",[52,102208,3194],{"class":90},[52,102210,3491],{"class":622},[52,102212,3332],{"class":90},[52,102214,3491],{"class":622},[52,102216,3306],{"class":90},[52,102218,102219],{"class":622},")).shape\n",[52,102221,102222],{"class":54,"line":119},[52,102223,102224],{"class":332},"#结果：(2,6,3)\n",[52,102226,102227,102229,102231,102233,102235,102237,102239,102241,102243,102245,102247,102249,102251,102253,102255],{"class":54,"line":130},[52,102228,101434],{"class":622},[52,102230,2099],{"class":160},[52,102232,95930],{"class":622},[52,102234,3332],{"class":90},[52,102236,3491],{"class":622},[52,102238,3438],{"class":90},[52,102240,95935],{"class":622},[52,102242,3188],{"class":90},[52,102244,3491],{"class":622},[52,102246,3194],{"class":90},[52,102248,3491],{"class":622},[52,102250,3332],{"class":90},[52,102252,3491],{"class":622},[52,102254,3457],{"class":90},[52,102256,170],{"class":622},[52,102258,102259],{"class":54,"line":136},[52,102260,102261],{"class":622},"aaaa.shape\n",[52,102263,102264],{"class":54,"line":141},[52,102265,102266],{"class":332},"#结果：（3，2，1，6）\n",[52,102268,102269],{"class":54,"line":146},[52,102270,102271],{"class":332},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[52,102273,102274,102277,102279,102281,102283,102285,102287,102289,102291],{"class":54,"line":152},[52,102275,102276],{"class":622},"np.transpose(aaaa,(",[52,102278,3332],{"class":90},[52,102280,3491],{"class":622},[52,102282,3194],{"class":90},[52,102284,3491],{"class":622},[52,102286,3306],{"class":90},[52,102288,3491],{"class":622},[52,102290,3188],{"class":90},[52,102292,102219],{"class":622},[52,102294,102295],{"class":54,"line":157},[52,102296,102297],{"class":332},"#结果：(2,1,3,6)\n",[3015,102299,102300],{},"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":28,"searchDepth":69,"depth":69,"links":102302},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":102027,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":102309,"title":102310,"body":102311,"description":3046,"extension":3047,"meta":103045,"navigation":115,"path":103046,"seo":103047,"stem":103048,"__hash__":103049},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":102312,"toc":103043},[102313,102316,102319,102322,102325,102328,102331,102334,102337,102446,102449,102452,103040],[10,102314,102310],{"id":102315},"_8数组分割",[274,102317,102318],{},"split分割",[274,102320,102321],{},"numpy.split(ary,indics_or_sections,axis)",[274,102323,102324],{},"解释：",[274,102326,102327],{},"ary:被分割的数组",[274,102329,102330],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[274,102332,102333],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[274,102335,102336],{},"①一维数组的分割",[19,102338,102340],{"className":33310,"code":102339,"language":33312,"meta":28,"style":28},"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",[26,102341,102342,102358,102363,102372,102376,102381,102389,102393,102398,102403,102416,102420,102425,102437,102441],{"__ignoreMap":28},[52,102343,102344,102346,102348,102350,102352,102354,102356],{"class":54,"line":55},[52,102345,300],{"class":622},[52,102347,2099],{"class":160},[52,102349,95930],{"class":622},[52,102351,3332],{"class":90},[52,102353,3491],{"class":622},[52,102355,3533],{"class":90},[52,102357,170],{"class":622},[52,102359,102360],{"class":54,"line":69},[52,102361,102362],{"class":332},"#如果传入整数，必须能够平分，否则会报错\n",[52,102364,102365,102368,102370],{"class":54,"line":82},[52,102366,102367],{"class":622},"np.split(a,",[52,102369,3194],{"class":90},[52,102371,170],{"class":622},[52,102373,102374],{"class":54,"line":97},[52,102375,96492],{"class":332},[52,102377,102378],{"class":54,"line":112},[52,102379,102380],{"class":332},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[52,102382,102383,102385,102387],{"class":54,"line":119},[52,102384,102367],{"class":622},[52,102386,3406],{"class":90},[52,102388,170],{"class":622},[52,102390,102391],{"class":54,"line":130},[52,102392,96492],{"class":332},[52,102394,102395],{"class":54,"line":136},[52,102396,102397],{"class":332},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[52,102399,102400],{"class":54,"line":141},[52,102401,102402],{"class":332},"#传入数组\n",[52,102404,102405,102408,102410,102412,102414],{"class":54,"line":146},[52,102406,102407],{"class":622},"np.split(a,[",[52,102409,3188],{"class":90},[52,102411,3491],{"class":622},[52,102413,3432],{"class":90},[52,102415,7616],{"class":622},[52,102417,102418],{"class":54,"line":152},[52,102419,96492],{"class":332},[52,102421,102422],{"class":54,"line":157},[52,102423,102424],{"class":332},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[52,102426,102427,102429,102431,102433,102435],{"class":54,"line":173},[52,102428,102407],{"class":622},[52,102430,3432],{"class":90},[52,102432,3491],{"class":622},[52,102434,3482],{"class":90},[52,102436,7616],{"class":622},[52,102438,102439],{"class":54,"line":178},[52,102440,96492],{"class":332},[52,102442,102443],{"class":54,"line":184},[52,102444,102445],{"class":332},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[274,102447,102448],{},"②二维数组的分割",[274,102450,102451],{},"使用split()",[19,102453,102455],{"className":33310,"code":102454,"language":33312,"meta":28,"style":28},"#二维数组分割\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",[26,102456,102457,102462,102486,102491,102500,102504,102508,102513,102518,102523,102528,102533,102538,102543,102547,102560,102564,102568,102572,102576,102580,102585,102590,102595,102599,102604,102620,102624,102628,102633,102638,102643,102648,102653,102658,102663,102668,102673,102678,102683,102688,102693,102698,102703,102708,102713,102718,102722,102726,102746,102750,102754,102759,102764,102769,102774,102779,102784,102789,102794,102799,102804,102809,102814,102819,102824,102829,102834,102839,102844,102848,102853,102862,102866,102870,102874,102878,102882,102886,102890,102894,102898,102907,102911,102915,102919,102923,102927,102931,102935,102939,102943,102947,102951,102955,102959,102963,102967,102971,102975,102979,102983,102987,102991,103004,103008,103012,103016,103020,103024,103028,103032,103036],{"__ignoreMap":28},[52,102458,102459],{"class":54,"line":55},[52,102460,102461],{"class":332},"#二维数组分割\n",[52,102463,102464,102466,102468,102470,102472,102474,102476,102478,102480,102482,102484],{"class":54,"line":69},[52,102465,96234],{"class":622},[52,102467,2099],{"class":160},[52,102469,95930],{"class":622},[52,102471,3332],{"class":90},[52,102473,3491],{"class":622},[52,102475,3438],{"class":90},[52,102477,95935],{"class":622},[52,102479,3457],{"class":90},[52,102481,3491],{"class":622},[52,102483,3457],{"class":90},[52,102485,170],{"class":622},[52,102487,102488],{"class":54,"line":82},[52,102489,102490],{"class":332},"#默认axis=0  传入整数平均分,按行来的\n",[52,102492,102493,102496,102498],{"class":54,"line":97},[52,102494,102495],{"class":622},"np.split(aa,",[52,102497,3188],{"class":90},[52,102499,170],{"class":622},[52,102501,102502],{"class":54,"line":112},[52,102503,98692],{"class":332},[52,102505,102506],{"class":54,"line":119},[52,102507,96856],{"class":62},[52,102509,102510],{"class":54,"line":130},[52,102511,102512],{"class":62},"[array([[ 1,  2,  3,  4,  5,  6],\n",[52,102514,102515],{"class":54,"line":136},[52,102516,102517],{"class":62},"        [ 7,  8,  9, 10, 11, 12]]),\n",[52,102519,102520],{"class":54,"line":141},[52,102521,102522],{"class":62}," array([[13, 14, 15, 16, 17, 18],\n",[52,102524,102525],{"class":54,"line":146},[52,102526,102527],{"class":62},"        [19, 20, 21, 22, 23, 24]]),\n",[52,102529,102530],{"class":54,"line":152},[52,102531,102532],{"class":62}," array([[25, 26, 27, 28, 29, 30],\n",[52,102534,102535],{"class":54,"line":157},[52,102536,102537],{"class":62},"        [31, 32, 33, 34, 35, 36]])]\n",[52,102539,102540],{"class":54,"line":173},[52,102541,102542],{"class":62}," '''\n",[52,102544,102545],{"class":54,"line":178},[52,102546,102402],{"class":332},[52,102548,102549,102552,102554,102556,102558],{"class":54,"line":184},[52,102550,102551],{"class":622},"np.split(aa,[",[52,102553,3194],{"class":90},[52,102555,3491],{"class":622},[52,102557,3432],{"class":90},[52,102559,7616],{"class":622},[52,102561,102562],{"class":54,"line":189},[52,102563,98692],{"class":332},[52,102565,102566],{"class":54,"line":201},[52,102567,96856],{"class":62},[52,102569,102570],{"class":54,"line":206},[52,102571,102512],{"class":62},[52,102573,102574],{"class":54,"line":224},[52,102575,102517],{"class":62},[52,102577,102578],{"class":54,"line":229},[52,102579,102522],{"class":62},[52,102581,102582],{"class":54,"line":241},[52,102583,102584],{"class":62},"        [19, 20, 21, 22, 23, 24],\n",[52,102586,102587],{"class":54,"line":246},[52,102588,102589],{"class":62},"        [25, 26, 27, 28, 29, 30]]),\n",[52,102591,102592],{"class":54,"line":252},[52,102593,102594],{"class":62}," array([[31, 32, 33, 34, 35, 36]])]\n",[52,102596,102597],{"class":54,"line":257},[52,102598,96856],{"class":62},[52,102600,102601],{"class":54,"line":266},[52,102602,102603],{"class":332},"#axis=1 按照列来分\n",[52,102605,102606,102608,102610,102612,102614,102616,102618],{"class":54,"line":4722},[52,102607,102495],{"class":622},[52,102609,3188],{"class":90},[52,102611,3491],{"class":622},[52,102613,50446],{"class":8172},[52,102615,2099],{"class":160},[52,102617,3332],{"class":90},[52,102619,170],{"class":622},[52,102621,102622],{"class":54,"line":4727},[52,102623,98692],{"class":332},[52,102625,102626],{"class":54,"line":4741},[52,102627,96856],{"class":62},[52,102629,102630],{"class":54,"line":4746},[52,102631,102632],{"class":62},"[array([[ 1,  2],\n",[52,102634,102635],{"class":54,"line":5538},[52,102636,102637],{"class":62},"        [ 7,  8],\n",[52,102639,102640],{"class":54,"line":5552},[52,102641,102642],{"class":62},"        [13, 14],\n",[52,102644,102645],{"class":54,"line":5560},[52,102646,102647],{"class":62},"        [19, 20],\n",[52,102649,102650],{"class":54,"line":5565},[52,102651,102652],{"class":62},"        [25, 26],\n",[52,102654,102655],{"class":54,"line":5571},[52,102656,102657],{"class":62},"        [31, 32]]),\n",[52,102659,102660],{"class":54,"line":5577},[52,102661,102662],{"class":62}," array([[ 3,  4],\n",[52,102664,102665],{"class":54,"line":5582},[52,102666,102667],{"class":62},"        [ 9, 10],\n",[52,102669,102670],{"class":54,"line":10904},[52,102671,102672],{"class":62},"        [15, 16],\n",[52,102674,102675],{"class":54,"line":10928},[52,102676,102677],{"class":62},"        [21, 22],\n",[52,102679,102680],{"class":54,"line":10933},[52,102681,102682],{"class":62},"        [27, 28],\n",[52,102684,102685],{"class":54,"line":10939},[52,102686,102687],{"class":62},"        [33, 34]]),\n",[52,102689,102690],{"class":54,"line":10966},[52,102691,102692],{"class":62}," array([[ 5,  6],\n",[52,102694,102695],{"class":54,"line":10971},[52,102696,102697],{"class":62},"        [11, 12],\n",[52,102699,102700],{"class":54,"line":10977},[52,102701,102702],{"class":62},"        [17, 18],\n",[52,102704,102705],{"class":54,"line":10989},[52,102706,102707],{"class":62},"        [23, 24],\n",[52,102709,102710],{"class":54,"line":11001},[52,102711,102712],{"class":62},"        [29, 30],\n",[52,102714,102715],{"class":54,"line":11013},[52,102716,102717],{"class":62},"        [35, 36]])]\n",[52,102719,102720],{"class":54,"line":12672},[52,102721,102542],{"class":62},[52,102723,102724],{"class":54,"line":12697},[52,102725,102402],{"class":332},[52,102727,102728,102730,102732,102734,102736,102738,102740,102742,102744],{"class":54,"line":12720},[52,102729,102551],{"class":622},[52,102731,3332],{"class":90},[52,102733,3491],{"class":622},[52,102735,3194],{"class":90},[52,102737,44541],{"class":622},[52,102739,50446],{"class":8172},[52,102741,2099],{"class":160},[52,102743,3332],{"class":90},[52,102745,170],{"class":622},[52,102747,102748],{"class":54,"line":12744},[52,102749,96492],{"class":332},[52,102751,102752],{"class":54,"line":12749},[52,102753,96856],{"class":62},[52,102755,102756],{"class":54,"line":12754},[52,102757,102758],{"class":62},"[array([[ 1],\n",[52,102760,102761],{"class":54,"line":12759},[52,102762,102763],{"class":62},"        [ 7],\n",[52,102765,102766],{"class":54,"line":12768},[52,102767,102768],{"class":62},"        [13],\n",[52,102770,102771],{"class":54,"line":12773},[52,102772,102773],{"class":62},"        [19],\n",[52,102775,102776],{"class":54,"line":12779},[52,102777,102778],{"class":62},"        [25],\n",[52,102780,102781],{"class":54,"line":12800},[52,102782,102783],{"class":62},"        [31]]),\n",[52,102785,102786],{"class":54,"line":12806},[52,102787,102788],{"class":62}," array([[ 2],\n",[52,102790,102791],{"class":54,"line":12820},[52,102792,102793],{"class":62},"        [ 8],\n",[52,102795,102796],{"class":54,"line":12826},[52,102797,102798],{"class":62},"        [14],\n",[52,102800,102801],{"class":54,"line":12853},[52,102802,102803],{"class":62},"        [20],\n",[52,102805,102806],{"class":54,"line":12862},[52,102807,102808],{"class":62},"        [26],\n",[52,102810,102811],{"class":54,"line":12868},[52,102812,102813],{"class":62},"        [32]]),\n",[52,102815,102816],{"class":54,"line":12876},[52,102817,102818],{"class":62}," array([[ 3,  4,  5,  6],\n",[52,102820,102821],{"class":54,"line":12881},[52,102822,102823],{"class":62},"        [ 9, 10, 11, 12],\n",[52,102825,102826],{"class":54,"line":19560},[52,102827,102828],{"class":62},"        [15, 16, 17, 18],\n",[52,102830,102831],{"class":54,"line":19566},[52,102832,102833],{"class":62},"        [21, 22, 23, 24],\n",[52,102835,102836],{"class":54,"line":19589},[52,102837,102838],{"class":62},"        [27, 28, 29, 30],\n",[52,102840,102841],{"class":54,"line":19595},[52,102842,102843],{"class":62},"        [33, 34, 35, 36]])]\n",[52,102845,102846],{"class":54,"line":19618},[52,102847,96856],{"class":62},[52,102849,102850],{"class":54,"line":19632},[52,102851,102852],{"class":332},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[52,102854,102855,102858,102860],{"class":54,"line":19652},[52,102856,102857],{"class":622},"np.vsplit(aa,",[52,102859,3188],{"class":90},[52,102861,170],{"class":622},[52,102863,102864],{"class":54,"line":19658},[52,102865,96492],{"class":332},[52,102867,102868],{"class":54,"line":19669},[52,102869,96856],{"class":62},[52,102871,102872],{"class":54,"line":19692},[52,102873,102512],{"class":62},[52,102875,102876],{"class":54,"line":19714},[52,102877,102517],{"class":62},[52,102879,102880],{"class":54,"line":19719},[52,102881,102522],{"class":62},[52,102883,102884],{"class":54,"line":19725},[52,102885,102527],{"class":62},[52,102887,102888],{"class":54,"line":19739},[52,102889,102532],{"class":62},[52,102891,102892],{"class":54,"line":19752},[52,102893,102537],{"class":62},[52,102895,102896],{"class":54,"line":19757},[52,102897,96856],{"class":62},[52,102899,102900,102903,102905],{"class":54,"line":19771},[52,102901,102902],{"class":622},"np.hsplit(aa,",[52,102904,3188],{"class":90},[52,102906,170],{"class":622},[52,102908,102909],{"class":54,"line":19776},[52,102910,96492],{"class":332},[52,102912,102913],{"class":54,"line":19782},[52,102914,96856],{"class":62},[52,102916,102917],{"class":54,"line":19787},[52,102918,102632],{"class":62},[52,102920,102921],{"class":54,"line":19801},[52,102922,102637],{"class":62},[52,102924,102925],{"class":54,"line":19806},[52,102926,102642],{"class":62},[52,102928,102929],{"class":54,"line":19811},[52,102930,102647],{"class":62},[52,102932,102933],{"class":54,"line":19825},[52,102934,102652],{"class":62},[52,102936,102937],{"class":54,"line":19837},[52,102938,102657],{"class":62},[52,102940,102941],{"class":54,"line":19842},[52,102942,102662],{"class":62},[52,102944,102945],{"class":54,"line":19855},[52,102946,102667],{"class":62},[52,102948,102949],{"class":54,"line":19860},[52,102950,102672],{"class":62},[52,102952,102953],{"class":54,"line":19865},[52,102954,102677],{"class":62},[52,102956,102957],{"class":54,"line":19870},[52,102958,102682],{"class":62},[52,102960,102961],{"class":54,"line":19883},[52,102962,102687],{"class":62},[52,102964,102965],{"class":54,"line":19888},[52,102966,102692],{"class":62},[52,102968,102969],{"class":54,"line":35565},[52,102970,102697],{"class":62},[52,102972,102973],{"class":54,"line":35571},[52,102974,102702],{"class":62},[52,102976,102977],{"class":54,"line":35577},[52,102978,102707],{"class":62},[52,102980,102981],{"class":54,"line":35583},[52,102982,102712],{"class":62},[52,102984,102985],{"class":54,"line":35589},[52,102986,102717],{"class":62},[52,102988,102989],{"class":54,"line":35600},[52,102990,96856],{"class":62},[52,102992,102993,102996,102998,103000,103002],{"class":54,"line":35606},[52,102994,102995],{"class":622},"np.vsplit(aa,[",[52,102997,3194],{"class":90},[52,102999,3491],{"class":622},[52,103001,3432],{"class":90},[52,103003,7616],{"class":622},[52,103005,103006],{"class":54,"line":35626},[52,103007,96492],{"class":332},[52,103009,103010],{"class":54,"line":35632},[52,103011,96856],{"class":62},[52,103013,103014],{"class":54,"line":35643},[52,103015,102512],{"class":62},[52,103017,103018],{"class":54,"line":35649},[52,103019,102517],{"class":62},[52,103021,103022],{"class":54,"line":35655},[52,103023,102522],{"class":62},[52,103025,103026],{"class":54,"line":35661},[52,103027,102584],{"class":62},[52,103029,103030],{"class":54,"line":35667},[52,103031,102589],{"class":62},[52,103033,103034],{"class":54,"line":35673},[52,103035,102594],{"class":62},[52,103037,103038],{"class":54,"line":35679},[52,103039,102542],{"class":62},[3015,103041,103042],{},"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":28,"searchDepth":69,"depth":69,"links":103044},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":102310,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":103051,"title":103052,"body":103053,"description":3046,"extension":3047,"meta":103547,"navigation":115,"path":103548,"seo":103549,"stem":103550,"__hash__":103551},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":103054,"toc":103538},[103055,103058,103061,103086,103090,103149,103201,103205,103207,103243,103297,103299,103337,103408,103412,103417,103421,103424,103457,103460,103464,103467,103470,103473,103476,103481,103485,103488,103491,103494,103497,103502,103506,103511,103514,103535],[10,103056,103052],{"id":103057},"_9数学函数",[274,103059,103060],{},"补充回顾：python的列表推导式",[19,103062,103064],{"className":33310,"code":103063,"language":33312,"meta":28,"style":28},"[1\u002Fi for i in a]\n",[26,103065,103066],{"__ignoreMap":28},[52,103067,103068,103070,103072,103074,103077,103079,103081,103083],{"class":54,"line":55},[52,103069,4002],{"class":622},[52,103071,3332],{"class":90},[52,103073,3696],{"class":160},[52,103075,103076],{"class":622},"i ",[52,103078,5985],{"class":160},[52,103080,12394],{"class":622},[52,103082,28988],{"class":160},[52,103084,103085],{"class":622}," a]\n",[14,103087,103089],{"id":103088},"_91-求倒数","9.1 求倒数",[19,103091,103093],{"className":33310,"code":103092,"language":33312,"meta":28,"style":28},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[26,103094,103095,103100,103128,103140],{"__ignoreMap":28},[52,103096,103097],{"class":54,"line":55},[52,103098,103099],{"class":332},"#数组求倒数\n",[52,103101,103102,103104,103106,103108,103110,103112,103114,103116,103118,103120,103122,103124,103126],{"class":54,"line":69},[52,103103,300],{"class":622},[52,103105,2099],{"class":160},[52,103107,4002],{"class":622},[52,103109,3332],{"class":90},[52,103111,3491],{"class":622},[52,103113,3194],{"class":90},[52,103115,3491],{"class":622},[52,103117,3188],{"class":90},[52,103119,3491],{"class":622},[52,103121,3406],{"class":90},[52,103123,3491],{"class":622},[52,103125,3432],{"class":90},[52,103127,36178],{"class":622},[52,103129,103130,103132,103134,103137],{"class":54,"line":82},[52,103131,3376],{"class":622},[52,103133,2099],{"class":160},[52,103135,103136],{"class":622},"np.array(a)",[52,103138,103139],{"class":332},"#将列表转换为数组\n",[52,103141,103142,103144,103146],{"class":54,"line":97},[52,103143,3332],{"class":90},[52,103145,3696],{"class":160},[52,103147,103148],{"class":622},"b\n",[19,103150,103152],{"className":33310,"code":103151,"language":33312,"meta":28,"style":28},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[26,103153,103154,103182,103191,103196],{"__ignoreMap":28},[52,103155,103156,103158,103160,103162,103164,103166,103168,103170,103172,103174,103176,103178,103180],{"class":54,"line":55},[52,103157,300],{"class":622},[52,103159,2099],{"class":160},[52,103161,4002],{"class":622},[52,103163,3332],{"class":90},[52,103165,3491],{"class":622},[52,103167,3194],{"class":90},[52,103169,3491],{"class":622},[52,103171,3188],{"class":90},[52,103173,3491],{"class":622},[52,103175,3406],{"class":90},[52,103177,3491],{"class":622},[52,103179,3432],{"class":90},[52,103181,36178],{"class":622},[52,103183,103184,103186,103188],{"class":54,"line":69},[52,103185,3376],{"class":622},[52,103187,2099],{"class":160},[52,103189,103190],{"class":622},"np.array(a)\n",[52,103192,103193],{"class":54,"line":82},[52,103194,103195],{"class":332},"#调用numpy中的函数reciprocal()\n",[52,103197,103198],{"class":54,"line":97},[52,103199,103200],{"class":622},"np.reciprocal(b)\n",[14,103202,103204],{"id":103203},"_92-求平方","9.2 求平方",[274,103206,97458],{},[19,103208,103210],{"className":33310,"code":103209,"language":33312,"meta":28,"style":28},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[26,103211,103212,103217,103222,103238],{"__ignoreMap":28},[52,103213,103214],{"class":54,"line":55},[52,103215,103216],{"class":332},"#square()，求平方\n",[52,103218,103219],{"class":54,"line":69},[52,103220,103221],{"class":332},"#一维数组\n",[52,103223,103224,103226,103228,103230,103232,103234,103236],{"class":54,"line":82},[52,103225,300],{"class":622},[52,103227,2099],{"class":160},[52,103229,95930],{"class":622},[52,103231,3332],{"class":90},[52,103233,3491],{"class":622},[52,103235,3559],{"class":90},[52,103237,170],{"class":622},[52,103239,103240],{"class":54,"line":97},[52,103241,103242],{"class":622},"np.square(a)\n",[19,103244,103246],{"className":33310,"code":103245,"language":33312,"meta":28,"style":28},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[26,103247,103248,103253,103258,103279],{"__ignoreMap":28},[52,103249,103250],{"class":54,"line":55},[52,103251,103252],{"class":332},"#或者通过循环遍历的形式来计算\n",[52,103254,103255],{"class":54,"line":69},[52,103256,103257],{"class":332},"#这是一个列表\n",[52,103259,103260,103263,103265,103267,103269,103271,103273,103276],{"class":54,"line":82},[52,103261,103262],{"class":622},"[i",[52,103264,1095],{"class":160},[52,103266,103076],{"class":622},[52,103268,5985],{"class":160},[52,103270,12394],{"class":622},[52,103272,28988],{"class":160},[52,103274,103275],{"class":622}," a]",[52,103277,103278],{"class":332},"#这个求完之后在数列当中\n",[52,103280,103281,103284,103286,103288,103290,103292,103294],{"class":54,"line":97},[52,103282,103283],{"class":622},"np.array([i",[52,103285,1095],{"class":160},[52,103287,103076],{"class":622},[52,103289,5985],{"class":160},[52,103291,12394],{"class":622},[52,103293,28988],{"class":160},[52,103295,103296],{"class":622}," a])\n",[274,103298,96219],{},[19,103300,103302],{"className":33310,"code":103301,"language":33312,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[26,103303,103304,103308,103332],{"__ignoreMap":28},[52,103305,103306],{"class":54,"line":55},[52,103307,96229],{"class":332},[52,103309,103310,103312,103314,103316,103318,103320,103322,103324,103326,103328,103330],{"class":54,"line":69},[52,103311,96234],{"class":622},[52,103313,2099],{"class":160},[52,103315,95930],{"class":622},[52,103317,3332],{"class":90},[52,103319,3491],{"class":622},[52,103321,3635],{"class":90},[52,103323,95935],{"class":622},[52,103325,3406],{"class":90},[52,103327,3491],{"class":622},[52,103329,3188],{"class":90},[52,103331,170],{"class":622},[52,103333,103334],{"class":54,"line":82},[52,103335,103336],{"class":622},"np.square(aa)\n",[19,103338,103340],{"className":33310,"code":103339,"language":33312,"meta":28,"style":28},"#传统的方式\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",[26,103341,103342,103347,103356,103372,103388,103403],{"__ignoreMap":28},[52,103343,103344],{"class":54,"line":55},[52,103345,103346],{"class":332},"#传统的方式\n",[52,103348,103349,103351,103353],{"class":54,"line":69},[52,103350,101115],{"class":622},[52,103352,2099],{"class":160},[52,103354,103355],{"class":622},"np.empty_like(aa)\n",[52,103357,103358,103360,103362,103364,103366,103368,103370],{"class":54,"line":82},[52,103359,5985],{"class":160},[52,103361,12394],{"class":622},[52,103363,28988],{"class":160},[52,103365,35375],{"class":90},[52,103367,3121],{"class":622},[52,103369,3406],{"class":90},[52,103371,33718],{"class":622},[52,103373,103374,103376,103378,103380,103382,103384,103386],{"class":54,"line":97},[52,103375,6160],{"class":160},[52,103377,12456],{"class":622},[52,103379,28988],{"class":160},[52,103381,35375],{"class":90},[52,103383,3121],{"class":622},[52,103385,3188],{"class":90},[52,103387,33718],{"class":622},[52,103389,103390,103393,103395,103398,103400],{"class":54,"line":112},[52,103391,103392],{"class":622},"        bb[i,j]",[52,103394,2099],{"class":160},[52,103396,103397],{"class":622},"aa[i,j]",[52,103399,1095],{"class":160},[52,103401,103402],{"class":622},"aa[i,j]\n",[52,103404,103405],{"class":54,"line":119},[52,103406,103407],{"class":622},"bb\n",[14,103409,103411],{"id":103410},"_93-求各元素的符号","9.3 求各元素的符号",[274,103413,103414],{},[280,103415],{"alt":28,"src":103416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,103418,103420],{"id":103419},"_94-modf函数","9.4 modf函数",[274,103422,103423],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[19,103425,103427],{"className":33310,"code":103426,"language":33312,"meta":28,"style":28},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[26,103428,103429,103452],{"__ignoreMap":28},[52,103430,103431,103433,103435,103437,103439,103441,103443,103445,103447,103450],{"class":54,"line":55},[52,103432,300],{"class":622},[52,103434,2099],{"class":160},[52,103436,95930],{"class":622},[52,103438,3644],{"class":160},[52,103440,3559],{"class":90},[52,103442,3491],{"class":622},[52,103444,3559],{"class":90},[52,103446,3491],{"class":622},[52,103448,103449],{"class":90},"0.3",[52,103451,170],{"class":622},[52,103453,103454],{"class":54,"line":69},[52,103455,103456],{"class":622},"np.modf(a)\n",[274,103458,103459],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,103461,103463],{"id":103462},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[274,103465,103466],{},"np.cell()",[274,103468,103469],{},"np.floor()",[274,103471,103472],{},"np.rint()",[274,103474,103475],{},"对各元素分别向上取整、向下取整、四舍五入",[274,103477,103478],{},[280,103479],{"alt":28,"src":103480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,103482,103484],{"id":103483},"_96-around函数","9.6 around()函数",[274,103486,103487],{},"around()函数也可以实现对数的小数位数进行操作",[274,103489,103490],{},"其中的参数：",[274,103492,103493],{},"1.要传的数组",[274,103495,103496],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[274,103498,103499],{},[280,103500],{"alt":28,"src":103501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,103503,103505],{"id":103504},"_97-三角函数","9.7 三角函数",[274,103507,103508],{},[280,103509],{"alt":28,"src":103510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[274,103512,103513],{},"引入图像模块非常重要",[19,103515,103517],{"className":33310,"code":103516,"language":33312,"meta":28,"style":28},"from matplotlib import pyplot as plt\n",[26,103518,103519],{"__ignoreMap":28},[52,103520,103521,103523,103526,103528,103531,103533],{"class":54,"line":55},[52,103522,33669],{"class":160},[52,103524,103525],{"class":622}," matplotlib ",[52,103527,33324],{"class":160},[52,103529,103530],{"class":622}," pyplot ",[52,103532,34315],{"class":160},[52,103534,34369],{"class":622},[3015,103536,103537],{},"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":28,"searchDepth":69,"depth":69,"links":103539},[103540,103541,103542,103543,103544,103545,103546],{"id":103088,"depth":69,"text":103089},{"id":103203,"depth":69,"text":103204},{"id":103410,"depth":69,"text":103411},{"id":103419,"depth":69,"text":103420},{"id":103462,"depth":69,"text":103463},{"id":103483,"depth":69,"text":103484},{"id":103504,"depth":69,"text":103505},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":103052,"description":3046},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":103553,"title":103554,"body":103555,"description":3046,"extension":3047,"meta":103559,"navigation":115,"path":103560,"seo":103561,"stem":103562,"__hash__":103563},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":103556,"toc":103557},[],{"title":28,"searchDepth":69,"depth":69,"links":103558},[],{"category":53351},"\u002Fwiki\u002F2025-08-14-numpy",{"title":103554,"description":3046},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":103565,"title":103566,"body":103567,"description":28,"extension":3047,"meta":105567,"navigation":115,"path":105568,"seo":105569,"stem":105570,"__hash__":105571},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":103568,"toc":105543},[103569,103572,103576,103579,103582,103588,103591,103614,103617,103651,103654,103695,103699,103702,103795,103798,103836,103839,103856,103859,103873,103876,103879,103924,103927,103964,103968,103971,103977,103982,104002,104006,104009,104075,104078,104096,104100,104103,104132,104142,104148,104152,104155,104161,104172,104176,104179,104207,104210,104490,104493,104496,104507,104510,104513,104535,104542,104545,104563,104566,104569,104583,104591,104594,104620,104626,104629,104632,104642,104654,104674,104683,104703,104713,104737,104750,104764,104769,104810,104827,104852,104864,104884,104890,104935,104954,104971,104984,105000,105007,105019,105028,105063,105084,105109,105122,105146,105161,105186,105189,105210,105219,105222,105233,105237,105240,105246,105258,105265,105269,105272,105284,105287,105301,105304,105314,105324,105327,105367,105370,105374,105380,105383,105397,105401,105404,105437,105441,105444,105467,105475,105478,105484,105490,105493,105496,105524,105528,105531,105537,105540],[10,103570,103566],{"id":103571},"_1环境安装与第一个-mujoco-程序",[14,103573,103575],{"id":103574},"_1目标说明","1.目标说明",[274,103577,103578],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[274,103580,103581],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[19,103583,103586],{"className":103584,"code":103585,"language":24,"meta":28},[22],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[26,103587,103585],{"__ignoreMap":28},[274,103589,103590],{},"需要掌握:",[1070,103592,103593,103596,103599,103604,103609],{},[1073,103594,103595],{},"Fedora 44 下 MuJoCo 的系统依赖",[1073,103597,103598],{},"Python 虚拟环境创建",[1073,103600,103601],{},[26,103602,103603],{},"mujoco.MjModel",[1073,103605,103606],{},[26,103607,103608],{},"mujoco.MjData",[1073,103610,103611],{},[26,103612,103613],{},"mujoco.mj_step(model, data)",[274,103615,103616],{},"MuJoCo 中最重要的两个对象:",[3253,103618,103619,103629],{},[3256,103620,103621],{},[3259,103622,103623,103626],{},[3262,103624,103625],{"align":26688},"对象",[3262,103627,103628],{"align":26688},"含义",[3299,103630,103631,103641],{},[3259,103632,103633,103638],{},[3304,103634,103635],{"align":26688},[26,103636,103637],{},"MjModel",[3304,103639,103640],{"align":26688},"模型结构，来自 XML，基本不随时间变化",[3259,103642,103643,103648],{},[3304,103644,103645],{"align":26688},[26,103646,103647],{},"MjData",[3304,103649,103650],{"align":26688},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[274,103652,103653],{},"可以先用一个类比理解：",[3253,103655,103656,103666],{},[3256,103657,103658],{},[3259,103659,103660,103663],{},[3262,103661,103662],{"align":26688},"类比",[3262,103664,103665],{"align":26688},"MuJoCo 对象",[3299,103667,103668,103677,103686],{},[3259,103669,103670,103673],{},[3304,103671,103672],{"align":26688},"游戏地图和角色配置",[3304,103674,103675],{"align":26688},[26,103676,103637],{},[3259,103678,103679,103682],{},[3304,103680,103681],{"align":26688},"游戏运行到当前帧的状态",[3304,103683,103684],{"align":26688},[26,103685,103647],{},[3259,103687,103688,103691],{},[3304,103689,103690],{"align":26688},"前进一帧",[3304,103692,103693],{"align":26688},[26,103694,103613],{},[14,103696,103698],{"id":103697},"_2环境与依赖安装","2.环境与依赖安装",[274,103700,103701],{},"Fedora 44 系统依赖:",[19,103703,103705],{"className":26774,"code":103704,"language":26776,"meta":28,"style":28},"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",[26,103706,103707,103719,103732,103745,103755,103765,103784],{"__ignoreMap":28},[52,103708,103709,103711,103713,103715,103717],{"class":54,"line":55},[52,103710,59],{"class":58},[52,103712,2938],{"class":62},[52,103714,76],{"class":62},[52,103716,29340],{"class":90},[52,103718,27627],{"class":90},[52,103720,103721,103724,103727,103730],{"class":54,"line":69},[52,103722,103723],{"class":62},"  python3",[52,103725,103726],{"class":62}," python3-pip",[52,103728,103729],{"class":62}," python3-virtualenv",[52,103731,27627],{"class":90},[52,103733,103734,103737,103740,103743],{"class":54,"line":82},[52,103735,103736],{"class":62},"  mesa-libGL",[52,103738,103739],{"class":62}," mesa-libGLU",[52,103741,103742],{"class":62}," mesa-dri-drivers",[52,103744,27627],{"class":90},[52,103746,103747,103750,103753],{"class":54,"line":97},[52,103748,103749],{"class":62},"  libglvnd-glx",[52,103751,103752],{"class":62}," libglvnd-opengl",[52,103754,27627],{"class":90},[52,103756,103757,103760,103763],{"class":54,"line":112},[52,103758,103759],{"class":62},"  glfw",[52,103761,103762],{"class":62}," glfw-devel",[52,103764,27627],{"class":90},[52,103766,103767,103770,103773,103776,103779,103782],{"class":54,"line":119},[52,103768,103769],{"class":62},"  libX11",[52,103771,103772],{"class":62}," libXcursor",[52,103774,103775],{"class":62}," libXi",[52,103777,103778],{"class":62}," libXinerama",[52,103780,103781],{"class":62}," libXrandr",[52,103783,27627],{"class":90},[52,103785,103786,103789,103792],{"class":54,"line":130},[52,103787,103788],{"class":62},"  gcc",[52,103790,103791],{"class":62}," gcc-c++",[52,103793,103794],{"class":62}," make\n",[274,103796,103797],{},"创建 Python 环境:",[19,103799,103801],{"className":26774,"code":103800,"language":26776,"meta":28,"style":28},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[26,103802,103803,103815,103822],{"__ignoreMap":28},[52,103804,103805,103807,103809,103812],{"class":54,"line":55},[52,103806,1363],{"class":58},[52,103808,1366],{"class":90},[52,103810,103811],{"class":62}," venv",[52,103813,103814],{"class":62}," .venv\n",[52,103816,103817,103819],{"class":54,"line":69},[52,103818,2134],{"class":90},[52,103820,103821],{"class":62}," .venv\u002Fbin\u002Factivate\n",[52,103823,103824,103826,103828,103830,103832,103834],{"class":54,"line":82},[52,103825,33312],{"class":58},[52,103827,1366],{"class":90},[52,103829,1369],{"class":62},[52,103831,76],{"class":62},[52,103833,1380],{"class":90},[52,103835,1383],{"class":62},[274,103837,103838],{},"pip 安装:",[19,103840,103842],{"className":26774,"code":103841,"language":26776,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy\n",[26,103843,103844],{"__ignoreMap":28},[52,103845,103846,103848,103850,103853],{"class":54,"line":55},[52,103847,26783],{"class":58},[52,103849,76],{"class":62},[52,103851,103852],{"class":62}," \"mujoco>=2.3\"",[52,103854,103855],{"class":62}," numpy\n",[274,103857,103858],{},"安装完成后，先做最小检查：",[19,103860,103862],{"className":26774,"code":103861,"language":26776,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[26,103863,103864],{"__ignoreMap":28},[52,103865,103866,103868,103870],{"class":54,"line":55},[52,103867,33312],{"class":58},[52,103869,33290],{"class":90},[52,103871,103872],{"class":62}," \"import mujoco; print(mujoco.__version__)\"\n",[274,103874,103875],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[274,103877,103878],{},"conda 安装:",[19,103880,103882],{"className":26774,"code":103881,"language":26776,"meta":28,"style":28},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[26,103883,103884,103904,103914],{"__ignoreMap":28},[52,103885,103886,103888,103890,103892,103895,103898,103901],{"class":54,"line":55},[52,103887,33262],{"class":58},[52,103889,32110],{"class":62},[52,103891,28061],{"class":90},[52,103893,103894],{"class":62}," mujoco-study",[52,103896,103897],{"class":62}," python=",[52,103899,103900],{"class":90},"3.10",[52,103902,103903],{"class":90}," -y\n",[52,103905,103906,103908,103911],{"class":54,"line":69},[52,103907,33262],{"class":58},[52,103909,103910],{"class":62}," activate",[52,103912,103913],{"class":62}," mujoco-study\n",[52,103915,103916,103918,103920,103922],{"class":54,"line":82},[52,103917,26783],{"class":58},[52,103919,76],{"class":62},[52,103921,103852],{"class":62},[52,103923,103855],{"class":62},[274,103925,103926],{},"版本冲突说明:",[1070,103928,103929,103935,103945,103954],{},[1073,103930,103931,103932,31319],{},"不要安装 ",[26,103933,103934],{},"mujoco-py",[1073,103936,103937,103938,103940,103941,103944],{},"如果旧项目里同时安装了 ",[26,103939,103934],{}," 和 ",[26,103942,103943],{},"mujoco","，建议新建干净虚拟环境。",[1073,103946,103947,103950,103951,31319],{},[26,103948,103949],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[26,103952,103953],{},"~\u002F.mujoco\u002Fmujoco210",[1073,103955,103956,103957,85467,103960,103963],{},"离屏渲染可能涉及 OpenGL 后端，",[26,103958,103959],{},"MUJOCO_GL=egl",[26,103961,103962],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103965,103967],{"id":103966},"_3核心概念解释","3.核心概念解释",[274,103969,103970],{},"MuJoCo 的基本执行流程:",[19,103972,103975],{"className":103973,"code":103974,"language":24,"meta":28},[22],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[26,103976,103974],{"__ignoreMap":28},[274,103978,103979,103981],{},[26,103980,103637],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[274,103983,103984,103986,103987,3327,103990,3327,103993,3327,103996,3327,103999,31319],{},[26,103985,103647],{}," 存放仿真运行时状态，例如 ",[26,103988,103989],{},"data.time",[26,103991,103992],{},"data.qpos",[26,103994,103995],{},"data.qvel",[26,103997,103998],{},"data.ctrl",[26,104000,104001],{},"data.xpos",[30,104003,104005],{"id":104004},"xml-是什么","XML 是什么",[274,104007,104008],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[19,104010,104012],{"className":55997,"code":104011,"language":55999,"meta":28,"style":28},"\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",[26,104013,104014,104036,104067],{"__ignoreMap":28},[52,104015,104016,104018,104020,104022,104024,104026,104029,104031,104034],{"class":54,"line":55},[52,104017,4022],{"class":622},[52,104019,54731],{"class":54231},[52,104021,17876],{"class":58},[52,104023,2099],{"class":622},[52,104025,56421],{"class":62},[52,104027,104028],{"class":58}," pos",[52,104030,2099],{"class":622},[52,104032,104033],{"class":62},"\"0 0 1\"",[52,104035,54238],{"class":622},[52,104037,104038,104040,104043,104045,104047,104050,104052,104054,104056,104059,104061,104064],{"class":54,"line":69},[52,104039,55075],{"class":622},[52,104041,104042],{"class":54231},"geom",[52,104044,17876],{"class":58},[52,104046,2099],{"class":622},[52,104048,104049],{"class":62},"\"box_geom\"",[52,104051,56754],{"class":58},[52,104053,2099],{"class":622},[52,104055,56421],{"class":62},[52,104057,104058],{"class":58}," size",[52,104060,2099],{"class":622},[52,104062,104063],{"class":62},"\"0.1 0.1 0.1\"",[52,104065,104066],{"class":622},"\u002F>\n",[52,104068,104069,104071,104073],{"class":54,"line":82},[52,104070,54716],{"class":622},[52,104072,54731],{"class":54231},[52,104074,54238],{"class":622},[274,104076,104077],{},"这段意思是：",[1070,104079,104080,104086,104093],{},[1073,104081,104082,104083,104085],{},"创建一个叫 ",[26,104084,56644],{}," 的刚体。",[1073,104087,104088,104089,104092],{},"它初始放在 ",[26,104090,104091],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[1073,104094,104095],{},"它里面有一个盒子形状的几何体。",[30,104097,104099],{"id":104098},"timestep-是什么","timestep 是什么",[274,104101,104102],{},"XML 里的：",[19,104104,104106],{"className":55997,"code":104105,"language":55999,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[26,104107,104108],{"__ignoreMap":28},[52,104109,104110,104112,104114,104117,104119,104122,104125,104127,104130],{"class":54,"line":55},[52,104111,4022],{"class":622},[52,104113,72095],{"class":54231},[52,104115,104116],{"class":58}," timestep",[52,104118,2099],{"class":622},[52,104120,104121],{"class":62},"\"0.01\"",[52,104123,104124],{"class":58}," gravity",[52,104126,2099],{"class":622},[52,104128,104129],{"class":62},"\"0 0 -9.81\"",[52,104131,104066],{"class":622},[274,104133,104134,104135,104138,104139,104141],{},"表示每调用一次 ",[26,104136,104137],{},"mj_step","，仿真时间前进 ",[26,104140,41918],{}," 秒。循环 100 次，大约就是 1 秒：",[19,104143,104146],{"className":104144,"code":104145,"language":24,"meta":28},[22],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[26,104147,104145],{"__ignoreMap":28},[30,104149,104151],{"id":104150},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[274,104153,104154],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[19,104156,104159],{"className":104157,"code":104158,"language":24,"meta":28},[22],"x y z qw qx qy qz\n",[26,104160,104158],{"__ignoreMap":28},[274,104162,104163,104164,104167,104168,104171],{},"表示一个自由刚体的位置和姿态。其中 ",[26,104165,104166],{},"x y z"," 是位置，",[26,104169,104170],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,104173,104175],{"id":104174},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[274,104177,104178],{},"新建文件:",[19,104180,104182],{"className":26774,"code":104181,"language":26776,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[26,104183,104184,104193,104199],{"__ignoreMap":28},[52,104185,104186,104188,104190],{"class":54,"line":55},[52,104187,1860],{"class":58},[52,104189,1863],{"class":90},[52,104191,104192],{"class":62}," mujoco_tutorial\n",[52,104194,104195,104197],{"class":54,"line":69},[52,104196,338],{"class":90},[52,104198,104192],{"class":62},[52,104200,104201,104204],{"class":54,"line":82},[52,104202,104203],{"class":58},"touch",[52,104205,104206],{"class":62}," ch1_first_sim.py\n",[274,104208,104209],{},"写入:",[19,104211,104213],{"className":33310,"code":104212,"language":33312,"meta":28,"style":28},"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",[26,104214,104215,104222,104226,104230,104240,104245,104250,104254,104259,104264,104268,104273,104278,104283,104288,104293,104298,104302,104306,104310,104323,104337,104347,104351,104363,104375,104387,104399,104411,104415,104432,104437,104441,104452,104463,104467,104471,104485],{"__ignoreMap":28},[52,104216,104217,104219],{"class":54,"line":55},[52,104218,33324],{"class":160},[52,104220,104221],{"class":622}," mujoco\n",[52,104223,104224],{"class":54,"line":69},[52,104225,116],{"emptyLinePlaceholder":115},[52,104227,104228],{"class":54,"line":82},[52,104229,116],{"emptyLinePlaceholder":115},[52,104231,104232,104235,104237],{"class":54,"line":97},[52,104233,104234],{"class":90},"XML",[52,104236,16520],{"class":160},[52,104238,104239],{"class":62}," \"\"\"\n",[52,104241,104242],{"class":54,"line":112},[52,104243,104244],{"class":62},"\u003Cmujoco model=\"first_sim\">\n",[52,104246,104247],{"class":54,"line":119},[52,104248,104249],{"class":62},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[52,104251,104252],{"class":54,"line":130},[52,104253,116],{"emptyLinePlaceholder":115},[52,104255,104256],{"class":54,"line":136},[52,104257,104258],{"class":62},"  \u003Cworldbody>\n",[52,104260,104261],{"class":54,"line":141},[52,104262,104263],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[52,104265,104266],{"class":54,"line":146},[52,104267,116],{"emptyLinePlaceholder":115},[52,104269,104270],{"class":54,"line":152},[52,104271,104272],{"class":62},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[52,104274,104275],{"class":54,"line":157},[52,104276,104277],{"class":62},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[52,104279,104280],{"class":54,"line":173},[52,104281,104282],{"class":62},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[52,104284,104285],{"class":54,"line":178},[52,104286,104287],{"class":62},"    \u003C\u002Fbody>\n",[52,104289,104290],{"class":54,"line":184},[52,104291,104292],{"class":62},"  \u003C\u002Fworldbody>\n",[52,104294,104295],{"class":54,"line":189},[52,104296,104297],{"class":62},"\u003C\u002Fmujoco>\n",[52,104299,104300],{"class":54,"line":201},[52,104301,98626],{"class":62},[52,104303,104304],{"class":54,"line":206},[52,104305,116],{"emptyLinePlaceholder":115},[52,104307,104308],{"class":54,"line":224},[52,104309,116],{"emptyLinePlaceholder":115},[52,104311,104312,104314,104316,104319,104321],{"class":54,"line":229},[52,104313,34879],{"class":160},[52,104315,4935],{"class":58},[52,104317,104318],{"class":622},"() -> ",[52,104320,98614],{"class":90},[52,104322,6698],{"class":622},[52,104324,104325,104328,104330,104333,104335],{"class":54,"line":241},[52,104326,104327],{"class":622},"    model ",[52,104329,2099],{"class":160},[52,104331,104332],{"class":622}," mujoco.MjModel.from_xml_string(",[52,104334,104234],{"class":90},[52,104336,170],{"class":622},[52,104338,104339,104342,104344],{"class":54,"line":246},[52,104340,104341],{"class":622},"    data ",[52,104343,2099],{"class":160},[52,104345,104346],{"class":622}," mujoco.MjData(model)\n",[52,104348,104349],{"class":54,"line":252},[52,104350,116],{"emptyLinePlaceholder":115},[52,104352,104353,104355,104357,104360],{"class":54,"line":257},[52,104354,34231],{"class":90},[52,104356,3121],{"class":622},[52,104358,104359],{"class":62},"\"nq:\"",[52,104361,104362],{"class":622},", model.nq)\n",[52,104364,104365,104367,104369,104372],{"class":54,"line":266},[52,104366,34231],{"class":90},[52,104368,3121],{"class":622},[52,104370,104371],{"class":62},"\"nv:\"",[52,104373,104374],{"class":622},", model.nv)\n",[52,104376,104377,104379,104381,104384],{"class":54,"line":4722},[52,104378,34231],{"class":90},[52,104380,3121],{"class":622},[52,104382,104383],{"class":62},"\"nu:\"",[52,104385,104386],{"class":622},", model.nu)\n",[52,104388,104389,104391,104393,104396],{"class":54,"line":4727},[52,104390,34231],{"class":90},[52,104392,3121],{"class":622},[52,104394,104395],{"class":62},"\"initial time:\"",[52,104397,104398],{"class":622},", data.time)\n",[52,104400,104401,104403,104405,104408],{"class":54,"line":4741},[52,104402,34231],{"class":90},[52,104404,3121],{"class":622},[52,104406,104407],{"class":62},"\"initial qpos:\"",[52,104409,104410],{"class":622},", data.qpos.copy())\n",[52,104412,104413],{"class":54,"line":4746},[52,104414,116],{"emptyLinePlaceholder":115},[52,104416,104417,104419,104422,104424,104426,104428,104430],{"class":54,"line":5538},[52,104418,6160],{"class":160},[52,104420,104421],{"class":622}," _ ",[52,104423,28988],{"class":160},[52,104425,35375],{"class":90},[52,104427,3121],{"class":622},[52,104429,3424],{"class":90},[52,104431,33718],{"class":622},[52,104433,104434],{"class":54,"line":5552},[52,104435,104436],{"class":622},"        mujoco.mj_step(model, data)\n",[52,104438,104439],{"class":54,"line":5560},[52,104440,116],{"emptyLinePlaceholder":115},[52,104442,104443,104445,104447,104450],{"class":54,"line":5565},[52,104444,34231],{"class":90},[52,104446,3121],{"class":622},[52,104448,104449],{"class":62},"\"final time:\"",[52,104451,104398],{"class":622},[52,104453,104454,104456,104458,104461],{"class":54,"line":5571},[52,104455,34231],{"class":90},[52,104457,3121],{"class":622},[52,104459,104460],{"class":62},"\"final qpos:\"",[52,104462,104410],{"class":622},[52,104464,104465],{"class":54,"line":5577},[52,104466,116],{"emptyLinePlaceholder":115},[52,104468,104469],{"class":54,"line":5582},[52,104470,116],{"emptyLinePlaceholder":115},[52,104472,104473,104475,104477,104480,104483],{"class":54,"line":10904},[52,104474,4509],{"class":160},[52,104476,34152],{"class":90},[52,104478,104479],{"class":160}," ==",[52,104481,104482],{"class":62}," \"__main__\"",[52,104484,6698],{"class":622},[52,104486,104487],{"class":54,"line":10928},[52,104488,104489],{"class":622},"    main()\n",[30,104491,104492],{"id":104492},"代码逐段解释",[274,104494,104495],{},"导入库：",[19,104497,104499],{"className":33310,"code":104498,"language":33312,"meta":28,"style":28},"import mujoco\n",[26,104500,104501],{"__ignoreMap":28},[52,104502,104503,104505],{"class":54,"line":55},[52,104504,33324],{"class":160},[52,104506,104221],{"class":622},[274,104508,104509],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[274,104511,104512],{},"定义 XML：",[19,104514,104516],{"className":33310,"code":104515,"language":33312,"meta":28,"style":28},"XML = \"\"\"\n...\n\"\"\"\n",[26,104517,104518,104526,104531],{"__ignoreMap":28},[52,104519,104520,104522,104524],{"class":54,"line":55},[52,104521,104234],{"class":90},[52,104523,16520],{"class":160},[52,104525,104239],{"class":62},[52,104527,104528],{"class":54,"line":69},[52,104529,104530],{"class":62},"...\n",[52,104532,104533],{"class":54,"line":82},[52,104534,98626],{"class":62},[274,104536,104537,104538,104541],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[26,104539,104540],{},"freejoint"," 的方块。",[274,104543,104544],{},"编译模型：",[19,104546,104548],{"className":33310,"code":104547,"language":33312,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\n",[26,104549,104550],{"__ignoreMap":28},[52,104551,104552,104555,104557,104559,104561],{"class":54,"line":55},[52,104553,104554],{"class":622},"model ",[52,104556,2099],{"class":160},[52,104558,104332],{"class":622},[52,104560,104234],{"class":90},[52,104562,170],{"class":622},[274,104564,104565],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[274,104567,104568],{},"创建数据：",[19,104570,104572],{"className":33310,"code":104571,"language":33312,"meta":28,"style":28},"data = mujoco.MjData(model)\n",[26,104573,104574],{"__ignoreMap":28},[52,104575,104576,104579,104581],{"class":54,"line":55},[52,104577,104578],{"class":622},"data ",[52,104580,2099],{"class":160},[52,104582,104346],{"class":622},[274,104584,104585,104587,104588,104590],{},[26,104586,36333],{}," 会保存仿真当前状态。刚创建时，时间是 ",[26,104589,3306],{},"，方块还在初始位置。",[274,104592,104593],{},"推进仿真：",[19,104595,104597],{"className":33310,"code":104596,"language":33312,"meta":28,"style":28},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[26,104598,104599,104615],{"__ignoreMap":28},[52,104600,104601,104603,104605,104607,104609,104611,104613],{"class":54,"line":55},[52,104602,5985],{"class":160},[52,104604,104421],{"class":622},[52,104606,28988],{"class":160},[52,104608,35375],{"class":90},[52,104610,3121],{"class":622},[52,104612,3424],{"class":90},[52,104614,33718],{"class":622},[52,104616,104617],{"class":54,"line":69},[52,104618,104619],{"class":622},"    mujoco.mj_step(model, data)\n",[274,104621,104622,104623,104625],{},"每次 ",[26,104624,104137],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[30,104627,104628],{"id":104628},"代码逐行细讲",[274,104630,104631],{},"下面把完整代码按新手视角拆开讲。",[19,104633,104634],{"className":33310,"code":104498,"language":33312,"meta":28,"style":28},[26,104635,104636],{"__ignoreMap":28},[52,104637,104638,104640],{"class":54,"line":55},[52,104639,33324],{"class":160},[52,104641,104221],{"class":622},[274,104643,104644,104646,104647,3327,104649,3327,104651,31319],{},[26,104645,33324],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[26,104648,103603],{},[26,104650,103608],{},[26,104652,104653],{},"mujoco.mj_step",[19,104655,104656],{"className":33310,"code":104515,"language":33312,"meta":28,"style":28},[26,104657,104658,104666,104670],{"__ignoreMap":28},[52,104659,104660,104662,104664],{"class":54,"line":55},[52,104661,104234],{"class":90},[52,104663,16520],{"class":160},[52,104665,104239],{"class":62},[52,104667,104668],{"class":54,"line":69},[52,104669,104530],{"class":62},[52,104671,104672],{"class":54,"line":82},[52,104673,98626],{"class":62},[274,104675,104676,104678,104679,104682],{},[26,104677,104234],{}," 是一个变量名。右边的三引号 ",[26,104680,104681],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[19,104684,104685],{"className":55997,"code":104244,"language":55999,"meta":28,"style":28},[26,104686,104687],{"__ignoreMap":28},[52,104688,104689,104691,104693,104696,104698,104701],{"class":54,"line":55},[52,104690,4022],{"class":622},[52,104692,103943],{"class":54231},[52,104694,104695],{"class":58}," model",[52,104697,2099],{"class":622},[52,104699,104700],{"class":62},"\"first_sim\"",[52,104702,54238],{"class":622},[274,104704,104705,104706,104709,104710,31319],{},"这是 XML 的根标签。",[26,104707,104708],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[26,104711,104712],{},"first_sim",[19,104714,104715],{"className":55997,"code":104105,"language":55999,"meta":28,"style":28},[26,104716,104717],{"__ignoreMap":28},[52,104718,104719,104721,104723,104725,104727,104729,104731,104733,104735],{"class":54,"line":55},[52,104720,4022],{"class":622},[52,104722,72095],{"class":54231},[52,104724,104116],{"class":58},[52,104726,2099],{"class":622},[52,104728,104121],{"class":62},[52,104730,104124],{"class":58},[52,104732,2099],{"class":622},[52,104734,104129],{"class":62},[52,104736,104066],{"class":622},[274,104738,104739,104741,104742,104745,104746,104749],{},[26,104740,72095],{}," 用来设置仿真参数。",[26,104743,104744],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[26,104747,104748],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[19,104751,104753],{"className":55997,"code":104752,"language":55999,"meta":28,"style":28},"\u003Cworldbody>\n",[26,104754,104755],{"__ignoreMap":28},[52,104756,104757,104759,104762],{"class":54,"line":55},[52,104758,4022],{"class":622},[52,104760,104761],{"class":54231},"worldbody",[52,104763,54238],{"class":622},[274,104765,104766,104768],{},[26,104767,104761],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[19,104770,104772],{"className":55997,"code":104771,"language":55999,"meta":28,"style":28},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[26,104773,104774],{"__ignoreMap":28},[52,104775,104776,104778,104780,104782,104784,104787,104789,104791,104794,104796,104798,104801,104803,104805,104808],{"class":54,"line":55},[52,104777,4022],{"class":622},[52,104779,104042],{"class":54231},[52,104781,17876],{"class":58},[52,104783,2099],{"class":622},[52,104785,104786],{"class":62},"\"floor\"",[52,104788,56754],{"class":58},[52,104790,2099],{"class":622},[52,104792,104793],{"class":62},"\"plane\"",[52,104795,104058],{"class":58},[52,104797,2099],{"class":622},[52,104799,104800],{"class":62},"\"2 2 0.1\"",[52,104802,81695],{"class":58},[52,104804,2099],{"class":622},[52,104806,104807],{"class":62},"\"0.8 0.8 0.8 1\"",[52,104809,104066],{"class":622},[274,104811,104812,104813,104815,104816,104819,104820,104823,104824,104826],{},"这行创建地面。",[26,104814,104042],{}," 是几何体。",[26,104817,104818],{},"name=\"floor\""," 是名字。",[26,104821,104822],{},"type=\"plane\""," 表示平面。",[26,104825,58040],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[19,104828,104830],{"className":55997,"code":104829,"language":55999,"meta":28,"style":28},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[26,104831,104832],{"__ignoreMap":28},[52,104833,104834,104836,104838,104840,104842,104844,104846,104848,104850],{"class":54,"line":55},[52,104835,4022],{"class":622},[52,104837,54731],{"class":54231},[52,104839,17876],{"class":58},[52,104841,2099],{"class":622},[52,104843,56421],{"class":62},[52,104845,104028],{"class":58},[52,104847,2099],{"class":622},[52,104849,104033],{"class":62},[52,104851,54238],{"class":622},[274,104853,104854,104855,31319,104857,104860,104861,104863],{},"这行创建一个刚体，名字叫 ",[26,104856,56644],{},[26,104858,104859],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[26,104862,104091],{},"，也就是离地面 1 米高。",[19,104865,104867],{"className":55997,"code":104866,"language":55999,"meta":28,"style":28},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[26,104868,104869],{"__ignoreMap":28},[52,104870,104871,104873,104875,104877,104879,104882],{"class":54,"line":55},[52,104872,4022],{"class":622},[52,104874,104540],{"class":54231},[52,104876,17876],{"class":58},[52,104878,2099],{"class":622},[52,104880,104881],{"class":62},"\"box_free\"",[52,104883,104066],{"class":622},[274,104885,104886,104887,104889],{},"这行很重要。",[26,104888,104540],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[19,104891,104893],{"className":55997,"code":104892,"language":55999,"meta":28,"style":28},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[26,104894,104895],{"__ignoreMap":28},[52,104896,104897,104899,104901,104903,104905,104907,104909,104911,104913,104915,104917,104919,104922,104924,104926,104928,104930,104933],{"class":54,"line":55},[52,104898,4022],{"class":622},[52,104900,104042],{"class":54231},[52,104902,17876],{"class":58},[52,104904,2099],{"class":622},[52,104906,104049],{"class":62},[52,104908,56754],{"class":58},[52,104910,2099],{"class":622},[52,104912,56421],{"class":62},[52,104914,104058],{"class":58},[52,104916,2099],{"class":622},[52,104918,104063],{"class":62},[52,104920,104921],{"class":58}," mass",[52,104923,2099],{"class":622},[52,104925,6637],{"class":62},[52,104927,81695],{"class":58},[52,104929,2099],{"class":622},[52,104931,104932],{"class":62},"\"1 0 0 1\"",[52,104934,104066],{"class":622},[274,104936,104937,104938,104941,104942,104945,104946,104949,104950,104953],{},"这行给 box body 添加一个盒子形状。",[26,104939,104940],{},"type=\"box\""," 表示形状是盒子。",[26,104943,104944],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[26,104947,104948],{},"mass=\"1\""," 表示质量是 1。",[26,104951,104952],{},"rgba=\"1 0 0 1\""," 表示红色。",[19,104955,104957],{"className":33310,"code":104956,"language":33312,"meta":28,"style":28},"def main() -> None:\n",[26,104958,104959],{"__ignoreMap":28},[52,104960,104961,104963,104965,104967,104969],{"class":54,"line":55},[52,104962,34879],{"class":160},[52,104964,4935],{"class":58},[52,104966,104318],{"class":622},[52,104968,98614],{"class":90},[52,104970,6698],{"class":622},[274,104972,104973,104975,104976,104979,104980,104983],{},[26,104974,34879],{}," 用来定义函数。这里定义了一个叫 ",[26,104977,104978],{},"main"," 的函数。",[26,104981,104982],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[19,104985,104986],{"className":33310,"code":104547,"language":33312,"meta":28,"style":28},[26,104987,104988],{"__ignoreMap":28},[52,104989,104990,104992,104994,104996,104998],{"class":54,"line":55},[52,104991,104554],{"class":622},[52,104993,2099],{"class":160},[52,104995,104332],{"class":622},[52,104997,104234],{"class":90},[52,104999,170],{"class":622},[274,105001,105002,105003,105006],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[26,105004,105005],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[19,105008,105009],{"className":33310,"code":104571,"language":33312,"meta":28,"style":28},[26,105010,105011],{"__ignoreMap":28},[52,105012,105013,105015,105017],{"class":54,"line":55},[52,105014,104578],{"class":622},[52,105016,2099],{"class":160},[52,105018,104346],{"class":622},[274,105020,105021,105022,105024,105025,105027],{},"这行创建仿真数据。",[26,105023,36333],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[26,105026,36333],{}," 都会变化。",[19,105029,105031],{"className":33310,"code":105030,"language":33312,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[26,105032,105033,105043,105053],{"__ignoreMap":28},[52,105034,105035,105037,105039,105041],{"class":54,"line":55},[52,105036,33347],{"class":90},[52,105038,3121],{"class":622},[52,105040,104359],{"class":62},[52,105042,104362],{"class":622},[52,105044,105045,105047,105049,105051],{"class":54,"line":69},[52,105046,33347],{"class":90},[52,105048,3121],{"class":622},[52,105050,104371],{"class":62},[52,105052,104374],{"class":622},[52,105054,105055,105057,105059,105061],{"class":54,"line":82},[52,105056,33347],{"class":90},[52,105058,3121],{"class":622},[52,105060,104383],{"class":62},[52,105062,104386],{"class":622},[274,105064,105065,105067,105068,105071,105072,105075,105076,105079,105080,105083],{},[26,105066,33347],{}," 用来输出信息。",[26,105069,105070],{},"model.nq"," 是位置变量数量，",[26,105073,105074],{},"model.nv"," 是速度变量数量，",[26,105077,105078],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[26,105081,105082],{},"nu"," 是 0。",[19,105085,105087],{"className":33310,"code":105086,"language":33312,"meta":28,"style":28},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[26,105088,105089,105099],{"__ignoreMap":28},[52,105090,105091,105093,105095,105097],{"class":54,"line":55},[52,105092,33347],{"class":90},[52,105094,3121],{"class":622},[52,105096,104395],{"class":62},[52,105098,104398],{"class":622},[52,105100,105101,105103,105105,105107],{"class":54,"line":69},[52,105102,33347],{"class":90},[52,105104,3121],{"class":622},[52,105106,104407],{"class":62},[52,105108,104410],{"class":622},[274,105110,105111,105112,105114,105115,105117,105118,105121],{},"这里打印初始时间和初始位置。",[26,105113,103989],{}," 一开始是 0。",[26,105116,103992],{}," 是位置数组。",[26,105119,105120],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[19,105123,105124],{"className":33310,"code":104596,"language":33312,"meta":28,"style":28},[26,105125,105126,105142],{"__ignoreMap":28},[52,105127,105128,105130,105132,105134,105136,105138,105140],{"class":54,"line":55},[52,105129,5985],{"class":160},[52,105131,104421],{"class":622},[52,105133,28988],{"class":160},[52,105135,35375],{"class":90},[52,105137,3121],{"class":622},[52,105139,3424],{"class":90},[52,105141,33718],{"class":622},[52,105143,105144],{"class":54,"line":69},[52,105145,104619],{"class":622},[274,105147,105148,105150,105151,105154,105155,105157,105158,105160],{},[26,105149,5985],{}," 是循环。",[26,105152,105153],{},"range(100)"," 表示循环 100 次。",[26,105156,4103],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[26,105159,104137],{},"，仿真就前进一步。",[19,105162,105164],{"className":33310,"code":105163,"language":33312,"meta":28,"style":28},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[26,105165,105166,105176],{"__ignoreMap":28},[52,105167,105168,105170,105172,105174],{"class":54,"line":55},[52,105169,33347],{"class":90},[52,105171,3121],{"class":622},[52,105173,104449],{"class":62},[52,105175,104398],{"class":622},[52,105177,105178,105180,105182,105184],{"class":54,"line":69},[52,105179,33347],{"class":90},[52,105181,3121],{"class":622},[52,105183,104460],{"class":62},[52,105185,104410],{"class":622},[274,105187,105188],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[19,105190,105192],{"className":33310,"code":105191,"language":33312,"meta":28,"style":28},"if __name__ == \"__main__\":\n    main()\n",[26,105193,105194,105206],{"__ignoreMap":28},[52,105195,105196,105198,105200,105202,105204],{"class":54,"line":55},[52,105197,4509],{"class":160},[52,105199,34152],{"class":90},[52,105201,104479],{"class":160},[52,105203,104482],{"class":62},[52,105205,6698],{"class":622},[52,105207,105208],{"class":54,"line":69},[52,105209,104489],{"class":622},[274,105211,105212,105213,105216,105217,31319],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[26,105214,105215],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[26,105218,105215],{},[274,105220,105221],{},"运行:",[19,105223,105225],{"className":26774,"code":105224,"language":26776,"meta":28,"style":28},"python ch1_first_sim.py\n",[26,105226,105227],{"__ignoreMap":28},[52,105228,105229,105231],{"class":54,"line":55},[52,105230,33312],{"class":58},[52,105232,104206],{"class":62},[14,105234,105236],{"id":105235},"_5运行结果说明","5.运行结果说明",[274,105238,105239],{},"你应该看到类似输出:",[19,105241,105244],{"className":105242,"code":105243,"language":24,"meta":28},[22],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[26,105245,105243],{"__ignoreMap":28},[274,105247,105248,105250,105251,105254,105255,31319],{},[26,105249,104540],{}," 有 7 个位置变量: ",[26,105252,105253],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[26,105256,105257],{},"vx vy vz wx wy wz",[274,105259,105260,105261,105264],{},"你还会看到 ",[26,105262,105263],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,105266,105268],{"id":105267},"_6验证步骤","6.验证步骤",[274,105270,105271],{},"确认版本:",[19,105273,105274],{"className":26774,"code":103861,"language":26776,"meta":28,"style":28},[26,105275,105276],{"__ignoreMap":28},[52,105277,105278,105280,105282],{"class":54,"line":55},[52,105279,33312],{"class":58},[52,105281,33290],{"class":90},[52,105283,103872],{"class":62},[274,105285,105286],{},"确认导入的是官方 bindings:",[19,105288,105290],{"className":26774,"code":105289,"language":26776,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco)\"\n",[26,105291,105292],{"__ignoreMap":28},[52,105293,105294,105296,105298],{"class":54,"line":55},[52,105295,33312],{"class":58},[52,105297,33290],{"class":90},[52,105299,105300],{"class":62}," \"import mujoco; print(mujoco)\"\n",[274,105302,105303],{},"运行程序:",[19,105305,105306],{"className":26774,"code":105224,"language":26776,"meta":28,"style":28},[26,105307,105308],{"__ignoreMap":28},[52,105309,105310,105312],{"class":54,"line":55},[52,105311,33312],{"class":58},[52,105313,104206],{"class":62},[274,105315,105316,105317,105320,105321,31319],{},"检查 ",[26,105318,105319],{},"final time"," 是否约等于 ",[26,105322,105323],{},"1.0",[274,105325,105326],{},"再做几个小实验：",[1070,105328,105329,105339,105347,105360],{},[1073,105330,105331,105332,105334,105335,105338],{},"把 ",[26,105333,104859],{}," 改成 ",[26,105336,105337],{},"pos=\"0 0 2\"","，观察初始高度变化。",[1073,105340,105331,105341,105334,105343,105346],{},[26,105342,104748],{},[26,105344,105345],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[1073,105348,105331,105349,105334,105351,105354,105355,105357,105358,31319],{},[26,105350,104744],{},[26,105352,105353],{},"timestep=\"0.005\"","，观察 100 步后的 ",[26,105356,105319],{}," 是否变成约 ",[26,105359,38261],{},[1073,105361,105362,105363,105366],{},"删除 ",[26,105364,105365],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[274,105368,105369],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,105371,105373],{"id":105372},"_7常见错误与解决方案","7.常见错误与解决方案",[30,105375,105377],{"id":105376},"modulenotfounderror-no-module-named-mujoco",[26,105378,105379],{},"ModuleNotFoundError: No module named 'mujoco'",[274,105381,105382],{},"解决:",[19,105384,105386],{"className":26774,"code":105385,"language":26776,"meta":28,"style":28},"pip install \"mujoco>=2.3\"\n",[26,105387,105388],{"__ignoreMap":28},[52,105389,105390,105392,105394],{"class":54,"line":55},[52,105391,26783],{"class":58},[52,105393,76],{"class":62},[52,105395,105396],{"class":62}," \"mujoco>=2.3\"\n",[30,105398,105400],{"id":105399},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[274,105402,105403],{},"先安装系统依赖:",[19,105405,105407],{"className":26774,"code":105406,"language":26776,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[26,105408,105409],{"__ignoreMap":28},[52,105410,105411,105413,105415,105417,105419,105422,105424,105427,105429,105432,105434],{"class":54,"line":55},[52,105412,59],{"class":58},[52,105414,2938],{"class":62},[52,105416,76],{"class":62},[52,105418,29340],{"class":90},[52,105420,105421],{"class":62}," mesa-libGL",[52,105423,103742],{"class":62},[52,105425,105426],{"class":62}," glfw",[52,105428,103762],{"class":62},[52,105430,105431],{"class":62}," libX11",[52,105433,103775],{"class":62},[52,105435,105436],{"class":62}," libXrandr\n",[30,105438,105440],{"id":105439},"xml-解析失败","XML 解析失败",[274,105442,105443],{},"检查:",[1070,105445,105446,105449,105452,105458],{},[1073,105447,105448],{},"标签是否闭合",[1073,105450,105451],{},"属性是否带引号",[1073,105453,105454,105455],{},"根节点是否是 ",[26,105456,105457],{},"\u003Cmujoco>",[1073,105459,105460,105462,105463,105466],{},[26,105461,54731],{}," 是否放在 ",[26,105464,105465],{},"\u003Cworldbody>"," 内部",[30,105468,105470,105472,105473],{"id":105469},"final-time-不是严格等于-10",[26,105471,105319],{}," 不是严格等于 ",[26,105474,105323],{},[274,105476,105477],{},"这通常不是错误。浮点数计算可能得到：",[19,105479,105482],{"className":105480,"code":105481,"language":24,"meta":28},[22],"1.0000000000000007\n",[26,105483,105481],{"__ignoreMap":28},[274,105485,105486,105487,105489],{},"只要接近 ",[26,105488,105323],{}," 就正常。",[30,105491,105492],{"id":105492},"方块没有掉下来",[274,105494,105495],{},"检查：",[1070,105497,105498,105504,105510,105515],{},[1073,105499,105500,105501],{},"方块 body 里是否有 ",[26,105502,105503],{},"\u003Cfreejoint\u002F>",[1073,105505,105506,105507],{},"重力是否是 ",[26,105508,105509],{},"0 0 -9.81",[1073,105511,105512,105513],{},"是否真的调用了 ",[26,105514,103613],{},[1073,105516,105517,105518,105520,105521],{},"你看的是否是 ",[26,105519,105263],{},"，不是 ",[26,105522,105523],{},"initial qpos",[14,105525,105527],{"id":105526},"_8本章小结","8.本章小结",[274,105529,105530],{},"本章你已经完成了 MuJoCo 的最小闭环：",[19,105532,105535],{"className":105533,"code":105534,"language":24,"meta":28},[22],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[26,105536,105534],{"__ignoreMap":28},[274,105538,105539],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[3015,105541,105542],{},"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":28,"searchDepth":69,"depth":69,"links":105544},[105545,105546,105547,105552,105556,105557,105558,105566],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":105548},[105549,105550,105551],{"id":104004,"depth":82,"text":104005},{"id":104098,"depth":82,"text":104099},{"id":104150,"depth":82,"text":104151},{"id":104174,"depth":69,"text":104175,"children":105553},[105554,105555],{"id":104492,"depth":82,"text":104492},{"id":104628,"depth":82,"text":104628},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":105559},[105560,105561,105562,105563,105565],{"id":105376,"depth":82,"text":105379},{"id":105399,"depth":82,"text":105400},{"id":105439,"depth":82,"text":105440},{"id":105469,"depth":82,"text":105564},"final time 不是严格等于 1.0",{"id":105492,"depth":82,"text":105492},{"id":105526,"depth":69,"text":105527},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":103566,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":105573,"title":105574,"body":105575,"description":28,"extension":3047,"meta":107231,"navigation":115,"path":107232,"seo":107233,"stem":107234,"__hash__":107235},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":105576,"toc":107207},[105577,105580,105582,105585,105588,105605,105700,105703,105709,105711,105713,105737,105740,105754,105757,105798,105800,105813,105815,105818,105866,105878,105881,105884,105890,105903,105970,105973,105992,105995,105998,106004,106006,106015,106018,106022,106031,106113,106122,106126,106132,106146,106156,106158,106488,106491,106503,106505,106516,106518,106521,106539,106542,106545,106563,106574,106577,106592,106602,106604,106625,106642,106662,106668,106708,106724,106740,106746,106749,106773,106789,106794,106824,106841,106866,106869,106884,106893,106908,106917,106932,106939,106941,106951,106964,106971,106974,107013,107020,107022,107074,107076,107082,107085,107092,107099,107102,107104,107122,107125,107128,107162,107174,107176,107179,107201,107204],[10,105578,105574],{"id":105579},"_2xml-与-mjcf-物理建模基础",[14,105581,103575],{"id":103574},[274,105583,105584],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[274,105586,105587],{},"本章结束后，你应该能看懂一个简单模型里：",[1070,105589,105590,105593,105596,105599,105602],{},[1073,105591,105592],{},"地面在哪里。",[1073,105594,105595],{},"物体初始位置在哪里。",[1073,105597,105598],{},"几何体是什么形状。",[1073,105600,105601],{},"哪些 body 可以自由运动。",[1073,105603,105604],{},"如何用名字在 Python 里找到 XML 中的对象。",[3253,105606,105607,105617],{},[3256,105608,105609],{},[3259,105610,105611,105614],{},[3262,105612,105613],{"align":26688},"标签",[3262,105615,105616],{"align":26688},"作用",[3299,105618,105619,105628,105638,105647,105657,105667,105680,105690],{},[3259,105620,105621,105625],{},[3304,105622,105623],{"align":26688},[26,105624,105457],{},[3304,105626,105627],{"align":26688},"根节点",[3259,105629,105630,105635],{},[3304,105631,105632],{"align":26688},[26,105633,105634],{},"\u003Coption>",[3304,105636,105637],{"align":26688},"仿真参数",[3259,105639,105640,105644],{},[3304,105641,105642],{"align":26688},[26,105643,105465],{},[3304,105645,105646],{"align":26688},"世界中的物体",[3259,105648,105649,105654],{},[3304,105650,105651],{"align":26688},[26,105652,105653],{},"\u003Cbody>",[3304,105655,105656],{"align":26688},"刚体",[3259,105658,105659,105664],{},[3304,105660,105661],{"align":26688},[26,105662,105663],{},"\u003Cgeom>",[3304,105665,105666],{"align":26688},"几何体、碰撞体、可视体",[3259,105668,105669,105677],{},[3304,105670,105671,27927,105674],{"align":26688},[26,105672,105673],{},"\u003Cjoint>",[26,105675,105676],{},"\u003Cfreejoint>",[3304,105678,105679],{"align":26688},"关节",[3259,105681,105682,105687],{},[3304,105683,105684],{"align":26688},[26,105685,105686],{},"\u003Csite>",[3304,105688,105689],{"align":26688},"标记点",[3259,105691,105692,105697],{},[3304,105693,105694],{"align":26688},[26,105695,105696],{},"\u003Cactuator>",[3304,105698,105699],{"align":26688},"控制器",[274,105701,105702],{},"初学时可以先记住：",[19,105704,105707],{"className":105705,"code":105706,"language":24,"meta":28},[22],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[26,105708,105706],{"__ignoreMap":28},[14,105710,103698],{"id":103697},[274,105712,103701],{},[19,105714,105716],{"className":26774,"code":105715,"language":26776,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[26,105717,105718],{"__ignoreMap":28},[52,105719,105720,105722,105724,105726,105728,105730,105732,105734],{"class":54,"line":55},[52,105721,59],{"class":58},[52,105723,2938],{"class":62},[52,105725,76],{"class":62},[52,105727,29340],{"class":90},[52,105729,105421],{"class":62},[52,105731,103742],{"class":62},[52,105733,105426],{"class":62},[52,105735,105736],{"class":62}," glfw-devel\n",[274,105738,105739],{},"pip:",[19,105741,105742],{"className":26774,"code":103841,"language":26776,"meta":28,"style":28},[26,105743,105744],{"__ignoreMap":28},[52,105745,105746,105748,105750,105752],{"class":54,"line":55},[52,105747,26783],{"class":58},[52,105749,76],{"class":62},[52,105751,103852],{"class":62},[52,105753,103855],{"class":62},[274,105755,105756],{},"conda:",[19,105758,105760],{"className":26774,"code":105759,"language":26776,"meta":28,"style":28},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[26,105761,105762,105779,105788],{"__ignoreMap":28},[52,105763,105764,105766,105768,105770,105773,105775,105777],{"class":54,"line":55},[52,105765,33262],{"class":58},[52,105767,32110],{"class":62},[52,105769,28061],{"class":90},[52,105771,105772],{"class":62}," mujoco-xml",[52,105774,103897],{"class":62},[52,105776,103900],{"class":90},[52,105778,103903],{"class":90},[52,105780,105781,105783,105785],{"class":54,"line":69},[52,105782,33262],{"class":58},[52,105784,103910],{"class":62},[52,105786,105787],{"class":62}," mujoco-xml\n",[52,105789,105790,105792,105794,105796],{"class":54,"line":82},[52,105791,26783],{"class":58},[52,105793,76],{"class":62},[52,105795,103852],{"class":62},[52,105797,103855],{"class":62},[274,105799,103926],{},[1070,105801,105802,105805,105810],{},[1073,105803,105804],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[1073,105806,105807,105808,31319],{},"本章使用基础标签，适用于 ",[26,105809,103949],{},[1073,105811,105812],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105814,103967],{"id":103966},[274,105816,105817],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[19,105819,105821],{"className":55997,"code":105820,"language":55999,"meta":28,"style":28},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[26,105822,105823,105837,105845,105850,105858],{"__ignoreMap":28},[52,105824,105825,105827,105829,105831,105833,105835],{"class":54,"line":55},[52,105826,4022],{"class":622},[52,105828,103943],{"class":54231},[52,105830,104695],{"class":58},[52,105832,2099],{"class":622},[52,105834,65609],{"class":62},[52,105836,54238],{"class":622},[52,105838,105839,105841,105843],{"class":54,"line":69},[52,105840,55075],{"class":622},[52,105842,104761],{"class":54231},[52,105844,54238],{"class":622},[52,105846,105847],{"class":54,"line":82},[52,105848,105849],{"class":622},"    ...\n",[52,105851,105852,105854,105856],{"class":54,"line":97},[52,105853,55347],{"class":622},[52,105855,104761],{"class":54231},[52,105857,54238],{"class":622},[52,105859,105860,105862,105864],{"class":54,"line":112},[52,105861,54716],{"class":622},[52,105863,103943],{"class":54231},[52,105865,54238],{"class":622},[274,105867,105868,105870,105871,105873,105874,105877],{},[26,105869,54731],{}," 表示刚体。",[26,105872,104042],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[26,105875,105876],{},"joint"," 表示刚体相对父刚体如何运动。",[30,105879,105880],{"id":105880},"层级结构非常重要",[274,105882,105883],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[19,105885,105888],{"className":105886,"code":105887,"language":24,"meta":28},[22],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[26,105889,105887],{"__ignoreMap":28},[274,105891,105892,103940,105895,105898,105899,105902],{},[26,105893,105894],{},"red_box_geom",[26,105896,105897],{},"box_center"," 都属于 ",[26,105900,105901],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[19,105904,105906],{"className":55997,"code":105905,"language":55999,"meta":28,"style":28},"\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",[26,105907,105908,105928,105942,105962],{"__ignoreMap":28},[52,105909,105910,105912,105914,105916,105918,105920,105922,105924,105926],{"class":54,"line":55},[52,105911,4022],{"class":622},[52,105913,54731],{"class":54231},[52,105915,17876],{"class":58},[52,105917,2099],{"class":622},[52,105919,56421],{"class":62},[52,105921,104028],{"class":58},[52,105923,2099],{"class":622},[52,105925,104033],{"class":62},[52,105927,54238],{"class":622},[52,105929,105930,105932,105934,105936,105938,105940],{"class":54,"line":69},[52,105931,55075],{"class":622},[52,105933,104540],{"class":54231},[52,105935,17876],{"class":58},[52,105937,2099],{"class":622},[52,105939,104881],{"class":62},[52,105941,104066],{"class":622},[52,105943,105944,105946,105948,105950,105952,105954,105956,105958,105960],{"class":54,"line":82},[52,105945,55075],{"class":622},[52,105947,104042],{"class":54231},[52,105949,56754],{"class":58},[52,105951,2099],{"class":622},[52,105953,56421],{"class":62},[52,105955,104058],{"class":58},[52,105957,2099],{"class":622},[52,105959,104063],{"class":62},[52,105961,104066],{"class":622},[52,105963,105964,105966,105968],{"class":54,"line":97},[52,105965,54716],{"class":622},[52,105967,54731],{"class":54231},[52,105969,54238],{"class":622},[274,105971,105972],{},"含义:",[1070,105974,105975,105981,105986,105989],{},[1073,105976,105977,105978,105980],{},"创建名为 ",[26,105979,56644],{}," 的刚体",[1073,105982,105983,105984],{},"初始位置在世界坐标 ",[26,105985,104091],{},[1073,105987,105988],{},"它有一个自由关节",[1073,105990,105991],{},"它有一个盒子几何体",[30,105993,105994],{"id":105994},"坐标怎么理解",[274,105996,105997],{},"MuJoCo 默认使用三维坐标：",[19,105999,106002],{"className":106000,"code":106001,"language":24,"meta":28},[22],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[26,106003,106001],{"__ignoreMap":28},[274,106005,17589],{},[19,106007,106009],{"className":55997,"code":106008,"language":55999,"meta":28,"style":28},"pos=\"0 0 1\"\n",[26,106010,106011],{"__ignoreMap":28},[52,106012,106013],{"class":54,"line":55},[52,106014,106008],{"class":622},[274,106016,106017],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[30,106019,106021],{"id":106020},"geom-的-size-怎么理解","geom 的 size 怎么理解",[274,106023,106024,106025,85458,106028,106030],{},"不同 ",[26,106026,106027],{},"type",[26,106029,34428],{}," 含义不同：",[3253,106032,106033,106048],{},[3256,106034,106035],{},[3259,106036,106037,106041,106046],{},[3262,106038,106039],{"align":26688},[26,106040,106027],{},[3262,106042,106043,106045],{"align":26688},[26,106044,34428],{}," 示例",[3262,106047,103628],{"align":26688},[3299,106049,106050,106064,106079,106098],{},[3259,106051,106052,106056,106061],{},[3304,106053,106054],{"align":26688},[26,106055,56644],{},[3304,106057,106058],{"align":26688},[26,106059,106060],{},"size=\"0.1 0.2 0.3\"",[3304,106062,106063],{"align":26688},"x\u002Fy\u002Fz 半边长，不是完整长度",[3259,106065,106066,106071,106076],{},[3304,106067,106068],{"align":26688},[26,106069,106070],{},"sphere",[3304,106072,106073],{"align":26688},[26,106074,106075],{},"size=\"0.1\"",[3304,106077,106078],{"align":26688},"球半径",[3259,106080,106081,106086,106091],{},[3304,106082,106083],{"align":26688},[26,106084,106085],{},"capsule",[3304,106087,106088],{"align":26688},[26,106089,106090],{},"size=\"0.03\"",[3304,106092,106093,106094,106097],{"align":26688},"胶囊半径，长度常用 ",[26,106095,106096],{},"fromto"," 指定",[3259,106099,106100,106105,106110],{},[3304,106101,106102],{"align":26688},[26,106103,106104],{},"plane",[3304,106106,106107],{"align":26688},[26,106108,106109],{},"size=\"3 3 0.1\"",[3304,106111,106112],{"align":26688},"可视平面大小，通常当地面",[274,106114,106115,106116,106118,106119,106121],{},"最容易踩坑的是 box：",[26,106117,104944],{}," 表示边长大约是 ",[26,106120,34969],{},"，因为 MuJoCo 用的是半边长。",[30,106123,106125],{"id":106124},"site-是什么","site 是什么",[274,106127,106128,106131],{},[26,106129,106130],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1070,106133,106134,106137,106140,106143],{},[1073,106135,106136],{},"标记机械臂末端。",[1073,106138,106139],{},"标记目标位置。",[1073,106141,106142],{},"放传感器或相机参考点。",[1073,106144,106145],{},"在 Python 中读取某个关键点的世界坐标。",[274,106147,106148,106149,103940,106152,106155],{},"在后面的 Reacher 任务中，",[26,106150,106151],{},"tip",[26,106153,106154],{},"target"," 就会用 site 表示。",[14,106157,104175],{"id":104174},[19,106159,106161],{"className":33310,"code":106160,"language":33312,"meta":28,"style":28},"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",[26,106162,106163,106169,106179,106183,106187,106195,106200,106204,106208,106212,106217,106221,106226,106231,106236,106241,106245,106249,106253,106257,106261,106265,106277,106289,106297,106301,106316,106331,106335,106348,106363,106376,106389,106393,106409,106413,106417,106428,106440,106452,106464,106468,106472,106484],{"__ignoreMap":28},[52,106164,106165,106167],{"class":54,"line":55},[52,106166,33324],{"class":160},[52,106168,104221],{"class":622},[52,106170,106171,106173,106175,106177],{"class":54,"line":69},[52,106172,33324],{"class":160},[52,106174,34312],{"class":622},[52,106176,34315],{"class":160},[52,106178,34318],{"class":622},[52,106180,106181],{"class":54,"line":82},[52,106182,116],{"emptyLinePlaceholder":115},[52,106184,106185],{"class":54,"line":97},[52,106186,116],{"emptyLinePlaceholder":115},[52,106188,106189,106191,106193],{"class":54,"line":112},[52,106190,104234],{"class":90},[52,106192,16520],{"class":160},[52,106194,104239],{"class":62},[52,106196,106197],{"class":54,"line":119},[52,106198,106199],{"class":62},"\u003Cmujoco model=\"xml_basic\">\n",[52,106201,106202],{"class":54,"line":130},[52,106203,104249],{"class":62},[52,106205,106206],{"class":54,"line":136},[52,106207,116],{"emptyLinePlaceholder":115},[52,106209,106210],{"class":54,"line":141},[52,106211,104258],{"class":62},[52,106213,106214],{"class":54,"line":146},[52,106215,106216],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[52,106218,106219],{"class":54,"line":152},[52,106220,116],{"emptyLinePlaceholder":115},[52,106222,106223],{"class":54,"line":157},[52,106224,106225],{"class":62},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[52,106227,106228],{"class":54,"line":173},[52,106229,106230],{"class":62},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[52,106232,106233],{"class":54,"line":178},[52,106234,106235],{"class":62},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[52,106237,106238],{"class":54,"line":184},[52,106239,106240],{"class":62},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[52,106242,106243],{"class":54,"line":189},[52,106244,104287],{"class":62},[52,106246,106247],{"class":54,"line":201},[52,106248,104292],{"class":62},[52,106250,106251],{"class":54,"line":206},[52,106252,104297],{"class":62},[52,106254,106255],{"class":54,"line":224},[52,106256,98626],{"class":62},[52,106258,106259],{"class":54,"line":229},[52,106260,116],{"emptyLinePlaceholder":115},[52,106262,106263],{"class":54,"line":241},[52,106264,116],{"emptyLinePlaceholder":115},[52,106266,106267,106269,106271,106273,106275],{"class":54,"line":246},[52,106268,34879],{"class":160},[52,106270,4935],{"class":58},[52,106272,104318],{"class":622},[52,106274,98614],{"class":90},[52,106276,6698],{"class":622},[52,106278,106279,106281,106283,106285,106287],{"class":54,"line":252},[52,106280,104327],{"class":622},[52,106282,2099],{"class":160},[52,106284,104332],{"class":622},[52,106286,104234],{"class":90},[52,106288,170],{"class":622},[52,106290,106291,106293,106295],{"class":54,"line":257},[52,106292,104341],{"class":622},[52,106294,2099],{"class":160},[52,106296,104346],{"class":622},[52,106298,106299],{"class":54,"line":266},[52,106300,116],{"emptyLinePlaceholder":115},[52,106302,106303,106306,106308,106311,106314],{"class":54,"line":4722},[52,106304,106305],{"class":622},"    box_body_id ",[52,106307,2099],{"class":160},[52,106309,106310],{"class":622}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[52,106312,106313],{"class":62},"\"red_box\"",[52,106315,170],{"class":622},[52,106317,106318,106321,106323,106326,106329],{"class":54,"line":4727},[52,106319,106320],{"class":622},"    site_id ",[52,106322,2099],{"class":160},[52,106324,106325],{"class":622}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[52,106327,106328],{"class":62},"\"box_center\"",[52,106330,170],{"class":622},[52,106332,106333],{"class":54,"line":4741},[52,106334,116],{"emptyLinePlaceholder":115},[52,106336,106337,106339,106342,106344,106346],{"class":54,"line":4746},[52,106338,6060],{"class":160},[52,106340,106341],{"class":622}," box_body_id ",[52,106343,4022],{"class":160},[52,106345,7052],{"class":90},[52,106347,6698],{"class":622},[52,106349,106350,106353,106356,106358,106361],{"class":54,"line":5538},[52,106351,106352],{"class":160},"        raise",[52,106354,106355],{"class":90}," RuntimeError",[52,106357,3121],{"class":622},[52,106359,106360],{"class":62},"\"body red_box not found\"",[52,106362,170],{"class":622},[52,106364,106365,106367,106370,106372,106374],{"class":54,"line":5552},[52,106366,6060],{"class":160},[52,106368,106369],{"class":622}," site_id ",[52,106371,4022],{"class":160},[52,106373,7052],{"class":90},[52,106375,6698],{"class":622},[52,106377,106378,106380,106382,106384,106387],{"class":54,"line":5560},[52,106379,106352],{"class":160},[52,106381,106355],{"class":90},[52,106383,3121],{"class":622},[52,106385,106386],{"class":62},"\"site box_center not found\"",[52,106388,170],{"class":622},[52,106390,106391],{"class":54,"line":5565},[52,106392,116],{"emptyLinePlaceholder":115},[52,106394,106395,106397,106399,106401,106403,106405,106407],{"class":54,"line":5571},[52,106396,6160],{"class":160},[52,106398,104421],{"class":622},[52,106400,28988],{"class":160},[52,106402,35375],{"class":90},[52,106404,3121],{"class":622},[52,106406,4689],{"class":90},[52,106408,33718],{"class":622},[52,106410,106411],{"class":54,"line":5577},[52,106412,104436],{"class":622},[52,106414,106415],{"class":54,"line":5582},[52,106416,116],{"emptyLinePlaceholder":115},[52,106418,106419,106421,106423,106426],{"class":54,"line":10904},[52,106420,34231],{"class":90},[52,106422,3121],{"class":622},[52,106424,106425],{"class":62},"\"simulation time:\"",[52,106427,104398],{"class":622},[52,106429,106430,106432,106434,106437],{"class":54,"line":10928},[52,106431,34231],{"class":90},[52,106433,3121],{"class":622},[52,106435,106436],{"class":62},"\"box body position:\"",[52,106438,106439],{"class":622},", data.xpos[box_body_id].copy())\n",[52,106441,106442,106444,106446,106449],{"class":54,"line":10933},[52,106443,34231],{"class":90},[52,106445,3121],{"class":622},[52,106447,106448],{"class":62},"\"site position:\"",[52,106450,106451],{"class":622},", data.site_xpos[site_id].copy())\n",[52,106453,106454,106456,106458,106461],{"class":54,"line":10939},[52,106455,34231],{"class":90},[52,106457,3121],{"class":622},[52,106459,106460],{"class":62},"\"box qpos:\"",[52,106462,106463],{"class":622},", np.array(data.qpos))\n",[52,106465,106466],{"class":54,"line":10966},[52,106467,116],{"emptyLinePlaceholder":115},[52,106469,106470],{"class":54,"line":10971},[52,106471,116],{"emptyLinePlaceholder":115},[52,106473,106474,106476,106478,106480,106482],{"class":54,"line":10977},[52,106475,4509],{"class":160},[52,106477,34152],{"class":90},[52,106479,104479],{"class":160},[52,106481,104482],{"class":62},[52,106483,6698],{"class":622},[52,106485,106486],{"class":54,"line":10989},[52,106487,104489],{"class":622},[274,106489,106490],{},"保存为：",[19,106492,106494],{"className":26774,"code":106493,"language":26776,"meta":28,"style":28},"touch ch2_xml_basic.py\n",[26,106495,106496],{"__ignoreMap":28},[52,106497,106498,106500],{"class":54,"line":55},[52,106499,104203],{"class":58},[52,106501,106502],{"class":62}," ch2_xml_basic.py\n",[274,106504,105221],{},[19,106506,106508],{"className":26774,"code":106507,"language":26776,"meta":28,"style":28},"python ch2_xml_basic.py\n",[26,106509,106510],{"__ignoreMap":28},[52,106511,106512,106514],{"class":54,"line":55},[52,106513,33312],{"class":58},[52,106515,106502],{"class":62},[30,106517,104492],{"id":104492},[274,106519,106520],{},"用名字查找 body：",[19,106522,106524],{"className":33310,"code":106523,"language":33312,"meta":28,"style":28},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[26,106525,106526],{"__ignoreMap":28},[52,106527,106528,106531,106533,106535,106537],{"class":54,"line":55},[52,106529,106530],{"class":622},"box_body_id ",[52,106532,2099],{"class":160},[52,106534,106310],{"class":622},[52,106536,106313],{"class":62},[52,106538,170],{"class":622},[274,106540,106541],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[274,106543,106544],{},"用名字查找 site：",[19,106546,106548],{"className":33310,"code":106547,"language":33312,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[26,106549,106550],{"__ignoreMap":28},[52,106551,106552,106555,106557,106559,106561],{"class":54,"line":55},[52,106553,106554],{"class":622},"site_id ",[52,106556,2099],{"class":160},[52,106558,106325],{"class":622},[52,106560,106328],{"class":62},[52,106562,170],{"class":622},[274,106564,106565,106566,106569,106570,106573],{},"注意第二个参数是对象类型。查 body 就用 ",[26,106567,106568],{},"mjOBJ_BODY","，查 site 就用 ",[26,106571,106572],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[274,106575,106576],{},"读取世界坐标：",[19,106578,106580],{"className":33310,"code":106579,"language":33312,"meta":28,"style":28},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[26,106581,106582,106587],{"__ignoreMap":28},[52,106583,106584],{"class":54,"line":55},[52,106585,106586],{"class":622},"data.xpos[box_body_id]\n",[52,106588,106589],{"class":54,"line":69},[52,106590,106591],{"class":622},"data.site_xpos[site_id]\n",[274,106593,106594,106597,106598,106601],{},[26,106595,106596],{},"xpos"," 是 body 的世界坐标，",[26,106599,106600],{},"site_xpos"," 是 site 的世界坐标。",[30,106603,104628],{"id":104628},[19,106605,106607],{"className":33310,"code":106606,"language":33312,"meta":28,"style":28},"import mujoco\nimport numpy as np\n",[26,106608,106609,106615],{"__ignoreMap":28},[52,106610,106611,106613],{"class":54,"line":55},[52,106612,33324],{"class":160},[52,106614,104221],{"class":622},[52,106616,106617,106619,106621,106623],{"class":54,"line":69},[52,106618,33324],{"class":160},[52,106620,34312],{"class":622},[52,106622,34315],{"class":160},[52,106624,34318],{"class":622},[274,106626,106627,106628,106631,106632,106635,106636,3327,106639,31319],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[26,106629,106630],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[26,106633,106634],{},"as np"," 是习惯写法，后面就可以写 ",[26,106637,106638],{},"np.array(...)",[26,106640,106641],{},"np.round(...)",[19,106643,106644],{"className":33310,"code":104515,"language":33312,"meta":28,"style":28},[26,106645,106646,106654,106658],{"__ignoreMap":28},[52,106647,106648,106650,106652],{"class":54,"line":55},[52,106649,104234],{"class":90},[52,106651,16520],{"class":160},[52,106653,104239],{"class":62},[52,106655,106656],{"class":54,"line":69},[52,106657,104530],{"class":62},[52,106659,106660],{"class":54,"line":82},[52,106661,98626],{"class":62},[274,106663,106664,106665,31319],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[26,106666,106667],{},"mujoco.MjModel.from_xml_string(XML)",[19,106669,106671],{"className":55997,"code":106670,"language":55999,"meta":28,"style":28},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,106672,106673],{"__ignoreMap":28},[52,106674,106675,106677,106679,106681,106683,106685,106687,106689,106692,106694,106696,106699,106701,106703,106706],{"class":54,"line":55},[52,106676,4022],{"class":622},[52,106678,106130],{"class":54231},[52,106680,17876],{"class":58},[52,106682,2099],{"class":622},[52,106684,106328],{"class":62},[52,106686,104028],{"class":58},[52,106688,2099],{"class":622},[52,106690,106691],{"class":62},"\"0 0 0\"",[52,106693,104058],{"class":58},[52,106695,2099],{"class":622},[52,106697,106698],{"class":62},"\"0.03\"",[52,106700,81695],{"class":58},[52,106702,2099],{"class":622},[52,106704,106705],{"class":62},"\"0 1 0 1\"",[52,106707,104066],{"class":622},[274,106709,106710,106712,106713,106716,106717,106719,106720,106723],{},[26,106711,106130],{}," 是标记点。",[26,106714,106715],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[26,106718,106090],{}," 表示显示出来的小球大小。",[26,106721,106722],{},"rgba=\"0 1 0 1\""," 表示绿色。",[19,106725,106726],{"className":33310,"code":106523,"language":33312,"meta":28,"style":28},[26,106727,106728],{"__ignoreMap":28},[52,106729,106730,106732,106734,106736,106738],{"class":54,"line":55},[52,106731,106530],{"class":622},[52,106733,2099],{"class":160},[52,106735,106310],{"class":622},[52,106737,106313],{"class":62},[52,106739,170],{"class":622},[274,106741,106742,106743,106745],{},"这行的作用是：根据名字 ",[26,106744,106313],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[274,106747,106748],{},"拆开看：",[1070,106750,106751,106757,106762,106768],{},[1073,106752,106753,106756],{},[26,106754,106755],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[1073,106758,106759,106761],{},[26,106760,105005],{}," 是被查询的模型。",[1073,106763,106764,106767],{},[26,106765,106766],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[1073,106769,106770,106772],{},[26,106771,106313],{}," 是 XML 里写的名字。",[19,106774,106775],{"className":33310,"code":106547,"language":33312,"meta":28,"style":28},[26,106776,106777],{"__ignoreMap":28},[52,106778,106779,106781,106783,106785,106787],{"class":54,"line":55},[52,106780,106554],{"class":622},[52,106782,2099],{"class":160},[52,106784,106325],{"class":622},[52,106786,106328],{"class":62},[52,106788,170],{"class":622},[274,106790,106791,106792,31319],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[26,106793,106328],{},[19,106795,106797],{"className":33310,"code":106796,"language":33312,"meta":28,"style":28},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[26,106798,106799,106811],{"__ignoreMap":28},[52,106800,106801,106803,106805,106807,106809],{"class":54,"line":55},[52,106802,4509],{"class":160},[52,106804,106341],{"class":622},[52,106806,4022],{"class":160},[52,106808,7052],{"class":90},[52,106810,6698],{"class":622},[52,106812,106813,106816,106818,106820,106822],{"class":54,"line":69},[52,106814,106815],{"class":160},"    raise",[52,106817,106355],{"class":90},[52,106819,3121],{"class":622},[52,106821,106360],{"class":62},[52,106823,170],{"class":622},[274,106825,106826,106828,106829,106832,106833,106836,106837,106840],{},[26,106827,4509],{}," 是条件判断。",[26,106830,106831],{},"mj_name2id"," 找不到对象时会返回 ",[26,106834,106835],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[26,106838,106839],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[19,106842,106844],{"className":33310,"code":106843,"language":33312,"meta":28,"style":28},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[26,106845,106846,106862],{"__ignoreMap":28},[52,106847,106848,106850,106852,106854,106856,106858,106860],{"class":54,"line":55},[52,106849,5985],{"class":160},[52,106851,104421],{"class":622},[52,106853,28988],{"class":160},[52,106855,35375],{"class":90},[52,106857,3121],{"class":622},[52,106859,4689],{"class":90},[52,106861,33718],{"class":622},[52,106863,106864],{"class":54,"line":69},[52,106865,104619],{"class":622},[274,106867,106868],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[19,106870,106872],{"className":33310,"code":106871,"language":33312,"meta":28,"style":28},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[26,106873,106874],{"__ignoreMap":28},[52,106875,106876,106878,106880,106882],{"class":54,"line":55},[52,106877,33347],{"class":90},[52,106879,3121],{"class":622},[52,106881,106436],{"class":62},[52,106883,106439],{"class":622},[274,106885,106886,106888,106889,106892],{},[26,106887,104001],{}," 保存所有 body 的世界坐标。",[26,106890,106891],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[19,106894,106896],{"className":33310,"code":106895,"language":33312,"meta":28,"style":28},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[26,106897,106898],{"__ignoreMap":28},[52,106899,106900,106902,106904,106906],{"class":54,"line":55},[52,106901,33347],{"class":90},[52,106903,3121],{"class":622},[52,106905,106448],{"class":62},[52,106907,106451],{"class":622},[274,106909,106910,106913,106914,106916],{},[26,106911,106912],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[26,106915,105897],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[19,106918,106920],{"className":33310,"code":106919,"language":33312,"meta":28,"style":28},"print(\"box qpos:\", np.array(data.qpos))\n",[26,106921,106922],{"__ignoreMap":28},[52,106923,106924,106926,106928,106930],{"class":54,"line":55},[52,106925,33347],{"class":90},[52,106927,3121],{"class":622},[52,106929,106460],{"class":62},[52,106931,106463],{"class":622},[274,106933,106934,106935,106938],{},"这里打印广义位置数组。",[26,106936,106937],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106940,105236],{"id":105235},[274,106942,106943,106944,106947,106948,31319],{},"程序会输出 ",[26,106945,106946],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[26,106949,106950],{},"qpos",[274,106952,106953,106955,106956,106959,106960,106963],{},[26,106954,106891],{}," 是 body 的世界坐标位置。",[26,106957,106958],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[26,106961,106962],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[274,106965,85150,106966,85458,106968,106970],{},[26,106967,105897],{},[26,106969,106715],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[274,106972,106973],{},"如果你把 site 改成：",[19,106975,106977],{"className":55997,"code":106976,"language":55999,"meta":28,"style":28},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[26,106978,106979],{"__ignoreMap":28},[52,106980,106981,106983,106985,106987,106989,106992,106994,106996,106999,107001,107003,107005,107007,107009,107011],{"class":54,"line":55},[52,106982,4022],{"class":622},[52,106984,106130],{"class":54231},[52,106986,17876],{"class":58},[52,106988,2099],{"class":622},[52,106990,106991],{"class":62},"\"box_top\"",[52,106993,104028],{"class":58},[52,106995,2099],{"class":622},[52,106997,106998],{"class":62},"\"0 0 0.15\"",[52,107000,104058],{"class":58},[52,107002,2099],{"class":622},[52,107004,106698],{"class":62},[52,107006,81695],{"class":58},[52,107008,2099],{"class":622},[52,107010,106705],{"class":62},[52,107012,104066],{"class":622},[274,107014,107015,107016,107019],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[26,107017,107018],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,107021,105268],{"id":105267},[1070,107023,107024,107033,107036,107043,107049,107060],{},[1073,107025,105331,107026,107028,107029,105334,107031,31319],{},[26,107027,105901],{}," 的初始高度从 ",[26,107030,3332],{},[26,107032,3194],{},[1073,107034,107035],{},"重新运行程序。",[1073,107037,107038,107039,107042],{},"观察 ",[26,107040,107041],{},"box qpos"," 和最终位置是否变化。",[1073,107044,107045,107046,107048],{},"故意把 ",[26,107047,106130],{}," 名称改错，确认程序能报错。",[1073,107050,105331,107051,107053,107054,105334,107056,107059],{},[26,107052,104042],{}," 的颜色 ",[26,107055,104952],{},[26,107057,107058],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[1073,107061,105331,107062,85458,107064,105334,107067,107070,107071,107073],{},[26,107063,105897],{},[26,107065,107066],{},"pos",[26,107068,107069],{},"0 0 0.2","，观察 ",[26,107072,107018],{}," 如何变化。",[14,107075,105373],{"id":105372},[30,107077,107079],{"id":107078},"xml-error-schema-violation",[26,107080,107081],{},"XML Error: Schema violation",[274,107083,107084],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[30,107086,107088,84218,107090],{"id":107087},"mj_name2id-返回-1",[26,107089,106831],{},[26,107091,106835],{},[274,107093,107094,107095,107098],{},"说明名字没有找到。检查 XML 中 ",[26,107096,107097],{},"name=\"...\"","，并确认对象类型正确。",[30,107100,107101],{"id":107101},"物体不下落",[274,107103,105443],{},[1070,107105,107106,107111,107116],{},[1073,107107,107108,107109],{},"body 是否有 ",[26,107110,104540],{},[1073,107112,107113,107114],{},"gravity 是否为 ",[26,107115,105509],{},[1073,107117,107118,107119,107121],{},"body 是否被固定在 ",[26,107120,104761],{}," 中",[30,107123,107124],{"id":107124},"坐标看起来不符合预期",[274,107126,107127],{},"先区分两种坐标：",[3253,107129,107130,107139],{},[3256,107131,107132],{},[3259,107133,107134,107137],{},[3262,107135,107136],{"align":26688},"坐标",[3262,107138,103628],{"align":26688},[3299,107140,107141,107151],{},[3259,107142,107143,107148],{},[3304,107144,107145,107146],{"align":26688},"XML 里的 ",[26,107147,107066],{},[3304,107149,107150],{"align":26688},"相对父 body 的局部坐标",[3259,107152,107153,107159],{},[3304,107154,107155,27927,107157],{"align":26688},[26,107156,104001],{},[26,107158,106912],{},[3304,107160,107161],{"align":26688},"仿真更新后的世界坐标",[274,107163,107164,107165,107167,107168,85467,107171,107173],{},"如果你修改了 ",[26,107166,103992],{},"，但还没调用 ",[26,107169,107170],{},"mj_forward",[26,107172,104137],{},"，世界坐标可能还没有更新。",[14,107175,105527],{"id":105526},[274,107177,107178],{},"MJCF 建模先掌握四件事：",[1070,107180,107181,107186,107191,107196],{},[1073,107182,107183,107185],{},[26,107184,54731],{}," 表示刚体层级。",[1073,107187,107188,107190],{},[26,107189,104042],{}," 表示形状、碰撞和质量。",[1073,107192,107193,107195],{},[26,107194,105876],{}," 决定 body 能不能动、怎么动。",[1073,107197,107198,107200],{},[26,107199,106130],{}," 用来标记关键点，方便 Python 读取位置。",[274,107202,107203],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[3015,107205,107206],{},"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":28,"searchDepth":69,"depth":69,"links":107208},[107209,107210,107211,107217,107221,107222,107223,107230],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":107212},[107213,107214,107215,107216],{"id":105880,"depth":82,"text":105880},{"id":105994,"depth":82,"text":105994},{"id":106020,"depth":82,"text":106021},{"id":106124,"depth":82,"text":106125},{"id":104174,"depth":69,"text":104175,"children":107218},[107219,107220],{"id":104492,"depth":82,"text":104492},{"id":104628,"depth":82,"text":104628},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":107224},[107225,107226,107228,107229],{"id":107078,"depth":82,"text":107081},{"id":107087,"depth":82,"text":107227},"mj_name2id 返回 -1",{"id":107101,"depth":82,"text":107101},{"id":107124,"depth":82,"text":107124},{"id":105526,"depth":69,"text":105527},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":105574,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":107237,"title":107238,"body":107239,"description":28,"extension":3047,"meta":108734,"navigation":115,"path":108735,"seo":108736,"stem":108737,"__hash__":108738},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":107240,"toc":108706},[107241,107244,107246,107249,107252,107290,107293,107299,107302,107304,107306,107333,107335,107349,107351,107392,107394,107418,107420,107423,107432,107441,107444,107453,107461,107470,107473,107483,107486,107538,107545,107551,107559,107607,107610,107629,107632,107640,107644,107653,107686,107688,108036,108038,108050,108052,108063,108065,108068,108089,108095,108098,108123,108133,108136,108144,108147,108150,108171,108182,108184,108204,108207,108228,108237,108256,108262,108287,108290,108304,108311,108335,108338,108346,108355,108371,108383,108391,108400,108402,108405,108429,108434,108437,108459,108461,108500,108502,108509,108511,108519,108522,108525,108537,108578,108585,108596,108603,108606,108655,108658,108661,108667,108669,108674,108700,108703],[10,107242,107238],{"id":107243},"_3python-控制接口读取状态与推进仿真",[14,107245,103575],{"id":103574},[274,107247,107248],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[274,107250,107251],{},"你将学习:",[1070,107253,107254,107259,107264,107268,107273,107284],{},[1073,107255,107256],{},[26,107257,107258],{},"MjModel.from_xml_string",[1073,107260,107261],{},[26,107262,107263],{},"MjData(model)",[1073,107265,107266],{},[26,107267,104137],{},[1073,107269,107270],{},[26,107271,107272],{},"mj_resetData",[1073,107274,107275,107276,3327,107278,3327,107281],{},"读取 ",[26,107277,106950],{},[26,107279,107280],{},"qvel",[26,107282,107283],{},"ctrl",[1073,107285,107286,107287],{},"使用 ",[26,107288,107289],{},"model.opt.timestep",[274,107291,107292],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[19,107294,107297],{"className":107295,"code":107296,"language":24,"meta":28},[22],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[26,107298,107296],{"__ignoreMap":28},[274,107300,107301],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,107303,103698],{"id":103697},[274,107305,103701],{},[19,107307,107309],{"className":26774,"code":107308,"language":26776,"meta":28,"style":28},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[26,107310,107311],{"__ignoreMap":28},[52,107312,107313,107315,107317,107319,107321,107324,107326,107328,107330],{"class":54,"line":55},[52,107314,59],{"class":58},[52,107316,2938],{"class":62},[52,107318,76],{"class":62},[52,107320,29340],{"class":90},[52,107322,107323],{"class":62}," python3",[52,107325,103726],{"class":62},[52,107327,105421],{"class":62},[52,107329,103742],{"class":62},[52,107331,107332],{"class":62}," glfw\n",[274,107334,105739],{},[19,107336,107337],{"className":26774,"code":103841,"language":26776,"meta":28,"style":28},[26,107338,107339],{"__ignoreMap":28},[52,107340,107341,107343,107345,107347],{"class":54,"line":55},[52,107342,26783],{"class":58},[52,107344,76],{"class":62},[52,107346,103852],{"class":62},[52,107348,103855],{"class":62},[274,107350,105756],{},[19,107352,107354],{"className":26774,"code":107353,"language":26776,"meta":28,"style":28},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[26,107355,107356,107373,107382],{"__ignoreMap":28},[52,107357,107358,107360,107362,107364,107367,107369,107371],{"class":54,"line":55},[52,107359,33262],{"class":58},[52,107361,32110],{"class":62},[52,107363,28061],{"class":90},[52,107365,107366],{"class":62}," mujoco-python-api",[52,107368,103897],{"class":62},[52,107370,103900],{"class":90},[52,107372,103903],{"class":90},[52,107374,107375,107377,107379],{"class":54,"line":69},[52,107376,33262],{"class":58},[52,107378,103910],{"class":62},[52,107380,107381],{"class":62}," mujoco-python-api\n",[52,107383,107384,107386,107388,107390],{"class":54,"line":82},[52,107385,26783],{"class":58},[52,107387,76],{"class":62},[52,107389,103852],{"class":62},[52,107391,103855],{"class":62},[274,107393,103926],{},[1070,107395,107396,107403,107412],{},[1073,107397,107398,103940,107400,107402],{},[26,107399,103603],{},[26,107401,103608],{}," 是官方 Python bindings 的类名。",[1073,107404,107405,107406,107409,107410,31319],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[26,107407,107408],{},"mjModel"," 在 Python 中是 ",[26,107411,103637],{},[1073,107413,107414,107415,31319],{},"不要使用 ",[26,107416,107417],{},"sim = mujoco_py.MjSim(...)",[14,107419,103967],{"id":103966},[274,107421,107422],{},"仿真推进核心代码:",[19,107424,107426],{"className":33310,"code":107425,"language":33312,"meta":28,"style":28},"mujoco.mj_step(model, data)\n",[26,107427,107428],{"__ignoreMap":28},[52,107429,107430],{"class":54,"line":55},[52,107431,107425],{"class":622},[274,107433,107434,107435,3327,107437,3327,107439,31319],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[26,107436,103992],{},[26,107438,103995],{},[26,107440,103989],{},[274,107442,107443],{},"重置仿真:",[19,107445,107447],{"className":33310,"code":107446,"language":33312,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\n",[26,107448,107449],{"__ignoreMap":28},[52,107450,107451],{"class":54,"line":55},[52,107452,107446],{"class":622},[274,107454,107455,107456,85467,107458,107460],{},"如果手动修改了 ",[26,107457,103992],{},[26,107459,103995],{},"，通常应调用:",[19,107462,107464],{"className":33310,"code":107463,"language":33312,"meta":28,"style":28},"mujoco.mj_forward(model, data)\n",[26,107465,107466],{"__ignoreMap":28},[52,107467,107468],{"class":54,"line":55},[52,107469,107463],{"class":622},[274,107471,107472],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[30,107474,107476,3327,107478,3327,107480,107482],{"id":107475},"qposqvelctrl-是什么",[26,107477,106950],{},[26,107479,107280],{},[26,107481,107283],{}," 是什么",[274,107484,107485],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[3253,107487,107488,107500],{},[3256,107489,107490],{},[3259,107491,107492,107495,107497],{},[3262,107493,107494],{"align":26688},"字段",[3262,107496,103628],{"align":26688},[3262,107498,107499],{"align":26688},"谁来修改",[3299,107501,107502,107514,107526],{},[3259,107503,107504,107508,107511],{},[3304,107505,107506],{"align":26688},[26,107507,103992],{},[3304,107509,107510],{"align":26688},"广义位置，例如小车位置、关节角、自由物体位置姿态",[3304,107512,107513],{"align":26688},"MuJoCo 更新，也可以手动设置初始状态",[3259,107515,107516,107520,107523],{},[3304,107517,107518],{"align":26688},[26,107519,103995],{},[3304,107521,107522],{"align":26688},"广义速度，例如小车速度、关节角速度",[3304,107524,107525],{"align":26688},"MuJoCo 更新，也可以手动清零",[3259,107527,107528,107532,107535],{},[3304,107529,107530],{"align":26688},[26,107531,103998],{},[3304,107533,107534],{"align":26688},"actuator 的控制输入",[3304,107536,107537],{"align":26688},"主要由你的控制代码写入",[274,107539,11981,107540,103940,107542,107544],{},[26,107541,106950],{},[26,107543,107280],{}," 不一定同维。自由刚体就是典型例子：",[19,107546,107549],{"className":107547,"code":107548,"language":24,"meta":28},[22],"freejoint: qpos 7 维，qvel 6 维\n",[26,107550,107548],{"__ignoreMap":28},[30,107552,107554,103940,107556,107558],{"id":107553},"mj_step-和-mj_forward-的区别",[26,107555,104137],{},[26,107557,107170],{}," 的区别",[3253,107560,107561,107574],{},[3256,107562,107563],{},[3259,107564,107565,107568,107571],{},[3262,107566,107567],{"align":26688},"函数",[3262,107569,107570],{"align":26688},"是否推进时间",[3262,107572,107573],{"align":26688},"什么时候用",[3299,107575,107576,107589],{},[3259,107577,107578,107583,107586],{},[3304,107579,107580],{"align":26688},[26,107581,107582],{},"mj_step(model, data)",[3304,107584,107585],{"align":26688},"是",[3304,107587,107588],{"align":26688},"正常仿真循环，每调用一次前进一步",[3259,107590,107591,107596,107599],{},[3304,107592,107593],{"align":26688},[26,107594,107595],{},"mj_forward(model, data)",[3304,107597,107598],{"align":26688},"否",[3304,107600,107601,107602,3327,107604,107606],{"align":26688},"手动改了 ",[26,107603,106950],{},[26,107605,107280],{}," 后，刷新派生量",[274,107608,107609],{},"例如你写：",[19,107611,107613],{"className":33310,"code":107612,"language":33312,"meta":28,"style":28},"data.qpos[2] = 2.0\n",[26,107614,107615],{"__ignoreMap":28},[52,107616,107617,107620,107622,107624,107626],{"class":54,"line":55},[52,107618,107619],{"class":622},"data.qpos[",[52,107621,3194],{"class":90},[52,107623,7402],{"class":622},[52,107625,2099],{"class":160},[52,107627,107628],{"class":90}," 2.0\n",[274,107630,107631],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[19,107633,107634],{"className":33310,"code":107463,"language":33312,"meta":28,"style":28},[26,107635,107636],{"__ignoreMap":28},[52,107637,107638],{"class":54,"line":55},[52,107639,107463],{"class":622},[30,107641,107643],{"id":107642},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[274,107645,107646,107649,107650,107652],{},[26,107647,107648],{},"mujoco.mj_resetData(model, data)"," 会把 ",[26,107651,36333],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[19,107654,107656],{"className":33310,"code":107655,"language":33312,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[26,107657,107658,107662,107672,107682],{"__ignoreMap":28},[52,107659,107660],{"class":54,"line":55},[52,107661,107446],{"class":622},[52,107663,107664,107667,107669],{"class":54,"line":69},[52,107665,107666],{"class":622},"data.qpos[:] ",[52,107668,2099],{"class":160},[52,107670,107671],{"class":622}," random_qpos\n",[52,107673,107674,107677,107679],{"class":54,"line":82},[52,107675,107676],{"class":622},"data.qvel[:] ",[52,107678,2099],{"class":160},[52,107680,107681],{"class":90}," 0.0\n",[52,107683,107684],{"class":54,"line":97},[52,107685,107463],{"class":622},[14,107687,104175],{"id":104174},[19,107689,107691],{"className":33310,"code":107690,"language":33312,"meta":28,"style":28},"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",[26,107692,107693,107699,107709,107713,107717,107725,107730,107734,107738,107742,107747,107751,107756,107761,107766,107770,107774,107778,107782,107786,107790,107809,107816,107828,107839,107855,107871,107875,107879,107891,107903,107911,107915,107926,107930,107946,107950,107954,107963,107967,107972,107981,107985,107998,108003,108012,108016,108020,108032],{"__ignoreMap":28},[52,107694,107695,107697],{"class":54,"line":55},[52,107696,33324],{"class":160},[52,107698,104221],{"class":622},[52,107700,107701,107703,107705,107707],{"class":54,"line":69},[52,107702,33324],{"class":160},[52,107704,34312],{"class":622},[52,107706,34315],{"class":160},[52,107708,34318],{"class":622},[52,107710,107711],{"class":54,"line":82},[52,107712,116],{"emptyLinePlaceholder":115},[52,107714,107715],{"class":54,"line":97},[52,107716,116],{"emptyLinePlaceholder":115},[52,107718,107719,107721,107723],{"class":54,"line":112},[52,107720,104234],{"class":90},[52,107722,16520],{"class":160},[52,107724,104239],{"class":62},[52,107726,107727],{"class":54,"line":119},[52,107728,107729],{"class":62},"\u003Cmujoco model=\"state_api\">\n",[52,107731,107732],{"class":54,"line":130},[52,107733,104249],{"class":62},[52,107735,107736],{"class":54,"line":136},[52,107737,116],{"emptyLinePlaceholder":115},[52,107739,107740],{"class":54,"line":141},[52,107741,104258],{"class":62},[52,107743,107744],{"class":54,"line":146},[52,107745,107746],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[52,107748,107749],{"class":54,"line":152},[52,107750,116],{"emptyLinePlaceholder":115},[52,107752,107753],{"class":54,"line":157},[52,107754,107755],{"class":62},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[52,107757,107758],{"class":54,"line":173},[52,107759,107760],{"class":62},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[52,107762,107763],{"class":54,"line":178},[52,107764,107765],{"class":62},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[52,107767,107768],{"class":54,"line":184},[52,107769,104287],{"class":62},[52,107771,107772],{"class":54,"line":189},[52,107773,104292],{"class":62},[52,107775,107776],{"class":54,"line":201},[52,107777,104297],{"class":62},[52,107779,107780],{"class":54,"line":206},[52,107781,98626],{"class":62},[52,107783,107784],{"class":54,"line":224},[52,107785,116],{"emptyLinePlaceholder":115},[52,107787,107788],{"class":54,"line":229},[52,107789,116],{"emptyLinePlaceholder":115},[52,107791,107792,107794,107797,107800,107802,107805,107807],{"class":54,"line":241},[52,107793,34879],{"class":160},[52,107795,107796],{"class":58}," print_state",[52,107798,107799],{"class":622},"(prefix: ",[52,107801,4281],{"class":90},[52,107803,107804],{"class":622},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[52,107806,98614],{"class":90},[52,107808,6698],{"class":622},[52,107810,107811,107813],{"class":54,"line":246},[52,107812,34231],{"class":90},[52,107814,107815],{"class":622},"(prefix)\n",[52,107817,107818,107820,107822,107825],{"class":54,"line":252},[52,107819,34231],{"class":90},[52,107821,3121],{"class":622},[52,107823,107824],{"class":62},"\"  timestep:\"",[52,107826,107827],{"class":622},", model.opt.timestep)\n",[52,107829,107830,107832,107834,107837],{"class":54,"line":257},[52,107831,34231],{"class":90},[52,107833,3121],{"class":622},[52,107835,107836],{"class":62},"\"  time:\"",[52,107838,104398],{"class":622},[52,107840,107841,107843,107845,107848,107851,107853],{"class":54,"line":266},[52,107842,34231],{"class":90},[52,107844,3121],{"class":622},[52,107846,107847],{"class":62},"\"  qpos:\"",[52,107849,107850],{"class":622},", np.round(data.qpos.copy(), ",[52,107852,3406],{"class":90},[52,107854,33429],{"class":622},[52,107856,107857,107859,107861,107864,107867,107869],{"class":54,"line":4722},[52,107858,34231],{"class":90},[52,107860,3121],{"class":622},[52,107862,107863],{"class":62},"\"  qvel:\"",[52,107865,107866],{"class":622},", np.round(data.qvel.copy(), ",[52,107868,3406],{"class":90},[52,107870,33429],{"class":622},[52,107872,107873],{"class":54,"line":4727},[52,107874,116],{"emptyLinePlaceholder":115},[52,107876,107877],{"class":54,"line":4741},[52,107878,116],{"emptyLinePlaceholder":115},[52,107880,107881,107883,107885,107887,107889],{"class":54,"line":4746},[52,107882,34879],{"class":160},[52,107884,4935],{"class":58},[52,107886,104318],{"class":622},[52,107888,98614],{"class":90},[52,107890,6698],{"class":622},[52,107892,107893,107895,107897,107899,107901],{"class":54,"line":5538},[52,107894,104327],{"class":622},[52,107896,2099],{"class":160},[52,107898,104332],{"class":622},[52,107900,104234],{"class":90},[52,107902,170],{"class":622},[52,107904,107905,107907,107909],{"class":54,"line":5552},[52,107906,104341],{"class":622},[52,107908,2099],{"class":160},[52,107910,104346],{"class":622},[52,107912,107913],{"class":54,"line":5560},[52,107914,116],{"emptyLinePlaceholder":115},[52,107916,107917,107920,107923],{"class":54,"line":5565},[52,107918,107919],{"class":622},"    print_state(",[52,107921,107922],{"class":62},"\"initial\"",[52,107924,107925],{"class":622},", model, data)\n",[52,107927,107928],{"class":54,"line":5571},[52,107929,116],{"emptyLinePlaceholder":115},[52,107931,107932,107934,107936,107938,107940,107942,107944],{"class":54,"line":5577},[52,107933,6160],{"class":160},[52,107935,104421],{"class":622},[52,107937,28988],{"class":160},[52,107939,35375],{"class":90},[52,107941,3121],{"class":622},[52,107943,3768],{"class":90},[52,107945,33718],{"class":622},[52,107947,107948],{"class":54,"line":5582},[52,107949,104436],{"class":622},[52,107951,107952],{"class":54,"line":10904},[52,107953,116],{"emptyLinePlaceholder":115},[52,107955,107956,107958,107961],{"class":54,"line":10928},[52,107957,107919],{"class":622},[52,107959,107960],{"class":62},"\"after 50 steps\"",[52,107962,107925],{"class":622},[52,107964,107965],{"class":54,"line":10933},[52,107966,116],{"emptyLinePlaceholder":115},[52,107968,107969],{"class":54,"line":10939},[52,107970,107971],{"class":622},"    mujoco.mj_resetData(model, data)\n",[52,107973,107974,107976,107979],{"class":54,"line":10966},[52,107975,107919],{"class":622},[52,107977,107978],{"class":62},"\"after reset\"",[52,107980,107925],{"class":622},[52,107982,107983],{"class":54,"line":10971},[52,107984,116],{"emptyLinePlaceholder":115},[52,107986,107987,107990,107992,107994,107996],{"class":54,"line":10977},[52,107988,107989],{"class":622},"    data.qpos[",[52,107991,3194],{"class":90},[52,107993,7402],{"class":622},[52,107995,2099],{"class":160},[52,107997,107628],{"class":90},[52,107999,108000],{"class":54,"line":10989},[52,108001,108002],{"class":622},"    mujoco.mj_forward(model, data)\n",[52,108004,108005,108007,108010],{"class":54,"line":11001},[52,108006,107919],{"class":622},[52,108008,108009],{"class":62},"\"after manual qpos edit\"",[52,108011,107925],{"class":622},[52,108013,108014],{"class":54,"line":11013},[52,108015,116],{"emptyLinePlaceholder":115},[52,108017,108018],{"class":54,"line":12672},[52,108019,116],{"emptyLinePlaceholder":115},[52,108021,108022,108024,108026,108028,108030],{"class":54,"line":12697},[52,108023,4509],{"class":160},[52,108025,34152],{"class":90},[52,108027,104479],{"class":160},[52,108029,104482],{"class":62},[52,108031,6698],{"class":622},[52,108033,108034],{"class":54,"line":12720},[52,108035,104489],{"class":622},[274,108037,106490],{},[19,108039,108041],{"className":26774,"code":108040,"language":26776,"meta":28,"style":28},"touch ch3_python_state.py\n",[26,108042,108043],{"__ignoreMap":28},[52,108044,108045,108047],{"class":54,"line":55},[52,108046,104203],{"class":58},[52,108048,108049],{"class":62}," ch3_python_state.py\n",[274,108051,105221],{},[19,108053,108055],{"className":26774,"code":108054,"language":26776,"meta":28,"style":28},"python ch3_python_state.py\n",[26,108056,108057],{"__ignoreMap":28},[52,108058,108059,108061],{"class":54,"line":55},[52,108060,33312],{"class":58},[52,108062,108049],{"class":62},[30,108064,104492],{"id":104492},[274,108066,108067],{},"打印状态的函数：",[19,108069,108071],{"className":33310,"code":108070,"language":33312,"meta":28,"style":28},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[26,108072,108073],{"__ignoreMap":28},[52,108074,108075,108077,108079,108081,108083,108085,108087],{"class":54,"line":55},[52,108076,34879],{"class":160},[52,108078,107796],{"class":58},[52,108080,107799],{"class":622},[52,108082,4281],{"class":90},[52,108084,107804],{"class":622},[52,108086,98614],{"class":90},[52,108088,6698],{"class":622},[274,108090,108091,108092,108094],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[26,108093,36333],{}," 里发生了什么。",[274,108096,108097],{},"推进 50 步：",[19,108099,108101],{"className":33310,"code":108100,"language":33312,"meta":28,"style":28},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[26,108102,108103,108119],{"__ignoreMap":28},[52,108104,108105,108107,108109,108111,108113,108115,108117],{"class":54,"line":55},[52,108106,5985],{"class":160},[52,108108,104421],{"class":622},[52,108110,28988],{"class":160},[52,108112,35375],{"class":90},[52,108114,3121],{"class":622},[52,108116,3768],{"class":90},[52,108118,33718],{"class":622},[52,108120,108121],{"class":54,"line":69},[52,108122,104619],{"class":622},[274,108124,108125,108126,108129,108130,108132],{},"由于 ",[26,108127,108128],{},"timestep=0.01","，所以 50 步后时间约为 ",[26,108131,38261],{}," 秒。",[274,108134,108135],{},"重置：",[19,108137,108138],{"className":33310,"code":107446,"language":33312,"meta":28,"style":28},[26,108139,108140],{"__ignoreMap":28},[52,108141,108142],{"class":54,"line":55},[52,108143,107446],{"class":622},[274,108145,108146],{},"这会把时间、位置、速度恢复到初始状态。",[274,108148,108149],{},"手动改高度：",[19,108151,108153],{"className":33310,"code":108152,"language":33312,"meta":28,"style":28},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[26,108154,108155,108167],{"__ignoreMap":28},[52,108156,108157,108159,108161,108163,108165],{"class":54,"line":55},[52,108158,107619],{"class":622},[52,108160,3194],{"class":90},[52,108162,7402],{"class":622},[52,108164,2099],{"class":160},[52,108166,107628],{"class":90},[52,108168,108169],{"class":54,"line":69},[52,108170,107463],{"class":622},[274,108172,108173,108174,108177,108178,108181],{},"这个例子里 ",[26,108175,108176],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[26,108179,108180],{},"2.0"," 表示把小球放到更高的位置。",[30,108183,104628],{"id":104628},[19,108185,108186],{"className":33310,"code":108070,"language":33312,"meta":28,"style":28},[26,108187,108188],{"__ignoreMap":28},[52,108189,108190,108192,108194,108196,108198,108200,108202],{"class":54,"line":55},[52,108191,34879],{"class":160},[52,108193,107796],{"class":58},[52,108195,107799],{"class":622},[52,108197,4281],{"class":90},[52,108199,107804],{"class":622},[52,108201,98614],{"class":90},[52,108203,6698],{"class":622},[274,108205,108206],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1070,108208,108209,108218,108223],{},[1073,108210,108211,108214,108215,108217],{},[26,108212,108213],{},"prefix","：一段文字，比如 ",[26,108216,107922],{},"，用来说明现在打印的是哪个阶段。",[1073,108219,108220,108222],{},[26,108221,105005],{},"：MuJoCo 模型。",[1073,108224,108225,108227],{},[26,108226,36333],{},"：MuJoCo 当前状态。",[274,108229,108230,3327,108233,108236],{},[26,108231,108232],{},"prefix: str",[26,108234,108235],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[19,108238,108240],{"className":33310,"code":108239,"language":33312,"meta":28,"style":28},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[26,108241,108242],{"__ignoreMap":28},[52,108243,108244,108246,108248,108250,108252,108254],{"class":54,"line":55},[52,108245,33347],{"class":90},[52,108247,3121],{"class":622},[52,108249,107847],{"class":62},[52,108251,107850],{"class":622},[52,108253,3406],{"class":90},[52,108255,33429],{"class":622},[274,108257,108258,108261],{},[26,108259,108260],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[19,108263,108265],{"className":33310,"code":108264,"language":33312,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[26,108266,108267,108279],{"__ignoreMap":28},[52,108268,108269,108271,108273,108275,108277],{"class":54,"line":55},[52,108270,104554],{"class":622},[52,108272,2099],{"class":160},[52,108274,104332],{"class":622},[52,108276,104234],{"class":90},[52,108278,170],{"class":622},[52,108280,108281,108283,108285],{"class":54,"line":69},[52,108282,104578],{"class":622},[52,108284,2099],{"class":160},[52,108286,104346],{"class":622},[274,108288,108289],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[19,108291,108293],{"className":33310,"code":108292,"language":33312,"meta":28,"style":28},"print_state(\"initial\", model, data)\n",[26,108294,108295],{"__ignoreMap":28},[52,108296,108297,108300,108302],{"class":54,"line":55},[52,108298,108299],{"class":622},"print_state(",[52,108301,107922],{"class":62},[52,108303,107925],{"class":622},[274,108305,108306,108307,108310],{},"调用刚才定义的 ",[26,108308,108309],{},"print_state"," 函数，打印初始状态。",[19,108312,108313],{"className":33310,"code":108100,"language":33312,"meta":28,"style":28},[26,108314,108315,108331],{"__ignoreMap":28},[52,108316,108317,108319,108321,108323,108325,108327,108329],{"class":54,"line":55},[52,108318,5985],{"class":160},[52,108320,104421],{"class":622},[52,108322,28988],{"class":160},[52,108324,35375],{"class":90},[52,108326,3121],{"class":622},[52,108328,3768],{"class":90},[52,108330,33718],{"class":622},[52,108332,108333],{"class":54,"line":69},[52,108334,104619],{"class":622},[274,108336,108337],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[19,108339,108340],{"className":33310,"code":107446,"language":33312,"meta":28,"style":28},[26,108341,108342],{"__ignoreMap":28},[52,108343,108344],{"class":54,"line":55},[52,108345,107446],{"class":622},[274,108347,108348,108349,108351,108352,108354],{},"重置 ",[26,108350,36333],{},"。注意它不会重新创建 ",[26,108353,105005],{},"，因为模型结构没有变，只是状态回到初始值。",[19,108356,108357],{"className":33310,"code":107612,"language":33312,"meta":28,"style":28},[26,108358,108359],{"__ignoreMap":28},[52,108360,108361,108363,108365,108367,108369],{"class":54,"line":55},[52,108362,107619],{"class":622},[52,108364,3194],{"class":90},[52,108366,7402],{"class":622},[52,108368,2099],{"class":160},[52,108370,107628],{"class":90},[274,108372,108373,108374,3327,108377,3327,108380,108382],{},"这行是“手动改状态”。在 freejoint 中，",[26,108375,108376],{},"qpos[0]",[26,108378,108379],{},"qpos[1]",[26,108381,108176],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[19,108384,108385],{"className":33310,"code":107463,"language":33312,"meta":28,"style":28},[26,108386,108387],{"__ignoreMap":28},[52,108388,108389],{"class":54,"line":55},[52,108390,107463],{"class":622},[274,108392,108393,108394,108396,108397,108399],{},"手动改完 ",[26,108395,106950],{}," 后，调用 ",[26,108398,107170],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,108401,105236],{"id":105235},[274,108403,108404],{},"你会看到:",[1070,108406,108407,108412,108417,108420],{},[1073,108408,108409,108410],{},"初始时间为 ",[26,108411,3306],{},[1073,108413,108414,108415],{},"50 步后时间约为 ",[26,108416,38261],{},[1073,108418,108419],{},"reset 后状态恢复",[1073,108421,108422,108423,108426,108427],{},"手动修改 ",[26,108424,108425],{},"data.qpos[2]"," 后，小球高度变为 ",[26,108428,108180],{},[274,108430,108431,108433],{},[26,108432,108176],{}," 在这个例子中表示自由刚体的 z 坐标。",[274,108435,108436],{},"输出里可以重点看三件事：",[1070,108438,108439,108447,108452],{},[1073,108440,108441,108443,108444,108446],{},[26,108442,5349],{}," 是否随着 ",[26,108445,104137],{}," 增加。",[1073,108448,108449,108451],{},[26,108450,106950],{}," 的 z 坐标是否因为下落而变化。",[1073,108453,108454,108456,108457,31319],{},[26,108455,107272],{}," 后时间是否回到 ",[26,108458,3306],{},[14,108460,105268],{"id":105267},[1070,108462,108463,108469,108475,108481,108484,108493],{},[1073,108464,108465,108466,31319],{},"修改 timestep 为 ",[26,108467,108468],{},"0.005",[1073,108470,108471,108472,31319],{},"重新运行，检查 50 步后时间是否约为 ",[26,108473,108474],{},"0.25",[1073,108476,108477,108478,31319],{},"修改重力为 ",[26,108479,108480],{},"0 0 -1.0",[1073,108482,108483],{},"观察小球下降速度是否变慢。",[1073,108485,105331,108486,105334,108489,108492],{},[26,108487,108488],{},"data.qpos[2] = 2.0",[26,108490,108491],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[1073,108494,108495,108496,108499],{},"注释掉 ",[26,108497,108498],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,108501,105373],{"id":105372},[30,108503,108505,108506,108508],{"id":108504},"修改-dataqpos-后位置没有更新","修改 ",[26,108507,103992],{}," 后位置没有更新",[274,108510,105382],{},[19,108512,108513],{"className":33310,"code":107463,"language":33312,"meta":28,"style":28},[26,108514,108515],{"__ignoreMap":28},[52,108516,108517],{"class":54,"line":55},[52,108518,107463],{"class":622},[30,108520,108521],{"id":108521},"数组维度看不懂",[274,108523,108524],{},"打印模型维度:",[19,108526,108528],{"className":33310,"code":108527,"language":33312,"meta":28,"style":28},"print(model.nq, model.nv, model.nu)\n",[26,108529,108530],{"__ignoreMap":28},[52,108531,108532,108534],{"class":54,"line":55},[52,108533,33347],{"class":90},[52,108535,108536],{"class":622},"(model.nq, model.nv, model.nu)\n",[3253,108538,108539,108547],{},[3256,108540,108541],{},[3259,108542,108543,108545],{},[3262,108544,107494],{"align":26688},[3262,108546,103628],{"align":26688},[3299,108548,108549,108559,108569],{},[3259,108550,108551,108556],{},[3304,108552,108553],{"align":26688},[26,108554,108555],{},"nq",[3304,108557,108558],{"align":26688},"位置变量数量",[3259,108560,108561,108566],{},[3304,108562,108563],{"align":26688},[26,108564,108565],{},"nv",[3304,108567,108568],{"align":26688},"速度变量数量",[3259,108570,108571,108575],{},[3304,108572,108573],{"align":26688},[26,108574,105082],{},[3304,108576,108577],{"align":26688},"控制输入数量",[30,108579,108581,108582,108584],{"id":108580},"误以为-qpos-一定等于关节数","误以为 ",[26,108583,106950],{}," 一定等于关节数",[274,108586,108587,108588,85458,108590,108592,108593,108595],{},"不是。例如 ",[26,108589,104540],{},[26,108591,106950],{}," 是 7 维，但 ",[26,108594,107280],{}," 是 6 维。",[30,108597,108599,108600,108602],{"id":108598},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[26,108601,106950],{}," 的第几位",[274,108604,108605],{},"初学时可以先打印：",[19,108607,108609],{"className":33310,"code":108608,"language":33312,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[26,108610,108611,108621,108631,108643],{"__ignoreMap":28},[52,108612,108613,108615,108617,108619],{"class":54,"line":55},[52,108614,33347],{"class":90},[52,108616,3121],{"class":622},[52,108618,104359],{"class":62},[52,108620,104362],{"class":622},[52,108622,108623,108625,108627,108629],{"class":54,"line":69},[52,108624,33347],{"class":90},[52,108626,3121],{"class":622},[52,108628,104371],{"class":62},[52,108630,104374],{"class":622},[52,108632,108633,108635,108637,108640],{"class":54,"line":82},[52,108634,33347],{"class":90},[52,108636,3121],{"class":622},[52,108638,108639],{"class":62},"\"qpos:\"",[52,108641,108642],{"class":622},", data.qpos)\n",[52,108644,108645,108647,108649,108652],{"class":54,"line":97},[52,108646,33347],{"class":90},[52,108648,3121],{"class":622},[52,108650,108651],{"class":62},"\"qvel:\"",[52,108653,108654],{"class":622},", data.qvel)\n",[274,108656,108657],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[30,108659,108660],{"id":108660},"仿真结果每次都一样",[274,108662,108663,108664,108666],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[26,108665,106950],{},"、目标点或控制输入。",[14,108668,105527],{"id":105526},[274,108670,108671,108672,27567],{},"Python 控制 MuJoCo 的核心就是读写 ",[26,108673,36333],{},[1070,108675,108676,108684,108689,108694],{},[1073,108677,108678,108679,103940,108681,108683],{},"用 ",[26,108680,103992],{},[26,108682,103995],{}," 读取状态。",[1073,108685,108678,108686,108688],{},[26,108687,103998],{}," 写入控制。",[1073,108690,108678,108691,108693],{},[26,108692,104137],{}," 推进时间。",[1073,108695,108696,108697,108699],{},"手动改状态后用 ",[26,108698,107170],{}," 刷新派生量。",[274,108701,108702],{},"理解这一章后，就可以进入关节和 actuator 控制。",[3015,108704,108705],{},"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":28,"searchDepth":69,"depth":69,"links":108707},[108708,108709,108710,108717,108721,108722,108723,108733],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":108711},[108712,108714,108716],{"id":107475,"depth":82,"text":108713},"qpos、qvel、ctrl 是什么",{"id":107553,"depth":82,"text":108715},"mj_step 和 mj_forward 的区别",{"id":107642,"depth":82,"text":107643},{"id":104174,"depth":69,"text":104175,"children":108718},[108719,108720],{"id":104492,"depth":82,"text":104492},{"id":104628,"depth":82,"text":104628},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":108724},[108725,108727,108728,108730,108732],{"id":108504,"depth":82,"text":108726},"修改 data.qpos 后位置没有更新",{"id":108521,"depth":82,"text":108521},{"id":108580,"depth":82,"text":108729},"误以为 qpos 一定等于关节数",{"id":108598,"depth":82,"text":108731},"不知道某个元素在 qpos 的第几位",{"id":108660,"depth":82,"text":108660},{"id":105526,"depth":69,"text":105527},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":107238,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108740,"title":108741,"body":108742,"description":28,"extension":3047,"meta":110432,"navigation":115,"path":110433,"seo":110434,"stem":110435,"__hash__":110436},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108743,"toc":110408},[108744,108747,108749,108752,108754,108779,108782,108801,108804,108806,108808,108832,108834,108848,108850,108891,108893,108917,108919,108922,108956,108958,108971,108974,109042,109051,109055,109058,109092,109098,109101,109105,109144,109147,109167,109171,109214,109216,109245,109248,109254,109257,109259,109653,109655,109667,109669,109680,109682,109685,109714,109722,109725,109760,109763,109765,109773,109776,109778,109789,109799,109819,109822,109858,109870,109918,109937,109979,109992,110020,110025,110046,110056,110074,110077,110111,110114,110134,110137,110156,110162,110164,110167,110173,110179,110189,110192,110198,110207,110209,110255,110257,110263,110269,110272,110275,110295,110298,110304,110310,110312,110335,110338,110341,110350,110353,110391,110393,110396,110402,110405],[10,108745,108741],{"id":108746},"_4关节actuator-与力控制",[14,108748,103575],{"id":103574},[274,108750,108751],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[274,108753,107251],{},[1070,108755,108756,108762,108767,108771,108776],{},[1073,108757,108758,108761],{},[26,108759,108760],{},"hinge"," 关节",[1073,108763,108764],{},[26,108765,108766],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[1073,108768,108769],{},[26,108770,103998],{},[1073,108772,108773],{},[26,108774,108775],{},"ctrlrange",[1073,108777,108778],{},"读取关节角和角速度",[274,108780,108781],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[19,108783,108785],{"className":33310,"code":108784,"language":33312,"meta":28,"style":28},"data.ctrl[0] = ...\n",[26,108786,108787],{"__ignoreMap":28},[52,108788,108789,108792,108794,108796,108798],{"class":54,"line":55},[52,108790,108791],{"class":622},"data.ctrl[",[52,108793,3306],{"class":90},[52,108795,7402],{"class":622},[52,108797,2099],{"class":160},[52,108799,108800],{"class":90}," ...\n",[274,108802,108803],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108805,103698],{"id":103697},[274,108807,103701],{},[19,108809,108810],{"className":26774,"code":107308,"language":26776,"meta":28,"style":28},[26,108811,108812],{"__ignoreMap":28},[52,108813,108814,108816,108818,108820,108822,108824,108826,108828,108830],{"class":54,"line":55},[52,108815,59],{"class":58},[52,108817,2938],{"class":62},[52,108819,76],{"class":62},[52,108821,29340],{"class":90},[52,108823,107323],{"class":62},[52,108825,103726],{"class":62},[52,108827,105421],{"class":62},[52,108829,103742],{"class":62},[52,108831,107332],{"class":62},[274,108833,105739],{},[19,108835,108836],{"className":26774,"code":103841,"language":26776,"meta":28,"style":28},[26,108837,108838],{"__ignoreMap":28},[52,108839,108840,108842,108844,108846],{"class":54,"line":55},[52,108841,26783],{"class":58},[52,108843,76],{"class":62},[52,108845,103852],{"class":62},[52,108847,103855],{"class":62},[274,108849,105756],{},[19,108851,108853],{"className":26774,"code":108852,"language":26776,"meta":28,"style":28},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[26,108854,108855,108872,108881],{"__ignoreMap":28},[52,108856,108857,108859,108861,108863,108866,108868,108870],{"class":54,"line":55},[52,108858,33262],{"class":58},[52,108860,32110],{"class":62},[52,108862,28061],{"class":90},[52,108864,108865],{"class":62}," mujoco-control",[52,108867,103897],{"class":62},[52,108869,103900],{"class":90},[52,108871,103903],{"class":90},[52,108873,108874,108876,108878],{"class":54,"line":69},[52,108875,33262],{"class":58},[52,108877,103910],{"class":62},[52,108879,108880],{"class":62}," mujoco-control\n",[52,108882,108883,108885,108887,108889],{"class":54,"line":82},[52,108884,26783],{"class":58},[52,108886,76],{"class":62},[52,108888,103852],{"class":62},[52,108890,103855],{"class":62},[274,108892,103926],{},[1070,108894,108895,108901,108908,108914],{},[1073,108896,108897,108900],{},[26,108898,108899],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[1073,108902,108903,108905,108906,31319],{},[26,108904,103998],{}," 长度等于 ",[26,108907,105078],{},[1073,108909,85150,108910,108913],{},[26,108911,108912],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[1073,108915,108916],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108918,103967],{"id":103966},[274,108920,108921],{},"关节决定 body 如何运动:",[19,108923,108925],{"className":55997,"code":108924,"language":55999,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,108926,108927],{"__ignoreMap":28},[52,108928,108929,108931,108933,108935,108937,108940,108942,108944,108946,108949,108951,108954],{"class":54,"line":55},[52,108930,4022],{"class":622},[52,108932,105876],{"class":54231},[52,108934,17876],{"class":58},[52,108936,2099],{"class":622},[52,108938,108939],{"class":62},"\"hinge\"",[52,108941,56754],{"class":58},[52,108943,2099],{"class":622},[52,108945,108939],{"class":62},[52,108947,108948],{"class":58}," axis",[52,108950,2099],{"class":622},[52,108952,108953],{"class":62},"\"0 1 0\"",[52,108955,104066],{"class":622},[274,108957,105972],{},[1070,108959,108960,108965,108968],{},[1073,108961,108962,108963],{},"名字是 ",[26,108964,108760],{},[1073,108966,108967],{},"类型是旋转关节",[1073,108969,108970],{},"绕 y 轴旋转",[274,108972,108973],{},"actuator 决定如何施加控制:",[19,108975,108977],{"className":55997,"code":108976,"language":55999,"meta":28,"style":28},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[26,108978,108979,108988,109034],{"__ignoreMap":28},[52,108980,108981,108983,108986],{"class":54,"line":55},[52,108982,4022],{"class":622},[52,108984,108985],{"class":54231},"actuator",[52,108987,54238],{"class":622},[52,108989,108990,108992,108995,108997,108999,109002,109005,109007,109009,109012,109014,109016,109019,109021,109024,109027,109029,109032],{"class":54,"line":69},[52,108991,55075],{"class":622},[52,108993,108994],{"class":54231},"motor",[52,108996,17876],{"class":58},[52,108998,2099],{"class":622},[52,109000,109001],{"class":62},"\"hinge_motor\"",[52,109003,109004],{"class":58}," joint",[52,109006,2099],{"class":622},[52,109008,108939],{"class":62},[52,109010,109011],{"class":58}," gear",[52,109013,2099],{"class":622},[52,109015,6637],{"class":62},[52,109017,109018],{"class":58}," ctrlrange",[52,109020,2099],{"class":622},[52,109022,109023],{"class":62},"\"-2 2\"",[52,109025,109026],{"class":58}," ctrllimited",[52,109028,2099],{"class":622},[52,109030,109031],{"class":62},"\"true\"",[52,109033,104066],{"class":622},[52,109035,109036,109038,109040],{"class":54,"line":82},[52,109037,54716],{"class":622},[52,109039,108985],{"class":54231},[52,109041,54238],{"class":622},[274,109043,109044,109047,109048,31319],{},[26,109045,109046],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[26,109049,109050],{},"[-2, 2]",[30,109052,109054],{"id":109053},"joint-和-actuator-的关系","joint 和 actuator 的关系",[274,109056,109057],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[3253,109059,109060,109070],{},[3256,109061,109062],{},[3259,109063,109064,109066,109068],{},[3262,109065,28698],{"align":26688},[3262,109067,105616],{"align":26688},[3262,109069,103662],{"align":26688},[3299,109071,109072,109082],{},[3259,109073,109074,109076,109079],{},[3304,109075,105876],{"align":26688},[3304,109077,109078],{"align":26688},"定义能怎么动",[3304,109080,109081],{"align":26688},"门轴允许门旋转",[3259,109083,109084,109086,109089],{},[3304,109085,108985],{"align":26688},[3304,109087,109088],{"align":26688},"定义怎么施力或控制",[3304,109090,109091],{"align":26688},"人推门、马达带动门",[274,109093,109094,109095,109097],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[26,109096,103998],{}," 主动控制它。",[274,109099,109100],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[30,109102,109104],{"id":109103},"hinge-joint","hinge joint",[19,109106,109108],{"className":55997,"code":109107,"language":55999,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[26,109109,109110],{"__ignoreMap":28},[52,109111,109112,109114,109116,109118,109120,109122,109124,109126,109128,109130,109132,109134,109137,109139,109142],{"class":54,"line":55},[52,109113,4022],{"class":622},[52,109115,105876],{"class":54231},[52,109117,17876],{"class":58},[52,109119,2099],{"class":622},[52,109121,108939],{"class":62},[52,109123,56754],{"class":58},[52,109125,2099],{"class":622},[52,109127,108939],{"class":62},[52,109129,108948],{"class":58},[52,109131,2099],{"class":622},[52,109133,108953],{"class":62},[52,109135,109136],{"class":58}," damping",[52,109138,2099],{"class":622},[52,109140,109141],{"class":62},"\"0.1\"",[52,109143,104066],{"class":622},[274,109145,109146],{},"含义：",[1070,109148,109149,109155,109161],{},[1073,109150,109151,109154],{},[26,109152,109153],{},"type=\"hinge\"","：只能绕一个轴旋转。",[1073,109156,109157,109160],{},[26,109158,109159],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[1073,109162,109163,109166],{},[26,109164,109165],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[30,109168,109170],{"id":109169},"motor-actuator","motor actuator",[19,109172,109174],{"className":55997,"code":109173,"language":55999,"meta":28,"style":28},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[26,109175,109176],{"__ignoreMap":28},[52,109177,109178,109180,109182,109184,109186,109188,109190,109192,109194,109196,109198,109200,109202,109204,109206,109208,109210,109212],{"class":54,"line":55},[52,109179,4022],{"class":622},[52,109181,108994],{"class":54231},[52,109183,17876],{"class":58},[52,109185,2099],{"class":622},[52,109187,109001],{"class":62},[52,109189,109004],{"class":58},[52,109191,2099],{"class":622},[52,109193,108939],{"class":62},[52,109195,109011],{"class":58},[52,109197,2099],{"class":622},[52,109199,6637],{"class":62},[52,109201,109018],{"class":58},[52,109203,2099],{"class":622},[52,109205,109023],{"class":62},[52,109207,109026],{"class":58},[52,109209,2099],{"class":622},[52,109211,109031],{"class":62},[52,109213,104066],{"class":622},[274,109215,109146],{},[1070,109217,109218,109227,109233,109239],{},[1073,109219,109220,109223,109224,109226],{},[26,109221,109222],{},"joint=\"hinge\"","：这个电机作用在名为 ",[26,109225,108760],{}," 的关节上。",[1073,109228,109229,109232],{},[26,109230,109231],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[1073,109234,109235,109238],{},[26,109236,109237],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[1073,109240,109241,109244],{},[26,109242,109243],{},"ctrllimited=\"true\"","：启用控制范围限制。",[274,109246,109247],{},"简单理解：",[19,109249,109252],{"className":109250,"code":109251,"language":24,"meta":28},[22],"实际施加效果 ≈ data.ctrl[0] * gear\n",[26,109253,109251],{"__ignoreMap":28},[274,109255,109256],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,109258,104175],{"id":104174},[19,109260,109262],{"className":33310,"code":109261,"language":33312,"meta":28,"style":28},"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",[26,109263,109264,109271,109275,109281,109291,109295,109299,109307,109312,109317,109321,109325,109330,109335,109339,109344,109349,109354,109359,109363,109367,109371,109376,109381,109386,109390,109394,109398,109402,109414,109426,109434,109438,109448,109458,109468,109472,109485,109498,109502,109519,109533,109568,109572,109576,109587,109602,109617,109629,109633,109637,109649],{"__ignoreMap":28},[52,109265,109266,109268],{"class":54,"line":55},[52,109267,33324],{"class":160},[52,109269,109270],{"class":622}," math\n",[52,109272,109273],{"class":54,"line":69},[52,109274,116],{"emptyLinePlaceholder":115},[52,109276,109277,109279],{"class":54,"line":82},[52,109278,33324],{"class":160},[52,109280,104221],{"class":622},[52,109282,109283,109285,109287,109289],{"class":54,"line":97},[52,109284,33324],{"class":160},[52,109286,34312],{"class":622},[52,109288,34315],{"class":160},[52,109290,34318],{"class":622},[52,109292,109293],{"class":54,"line":112},[52,109294,116],{"emptyLinePlaceholder":115},[52,109296,109297],{"class":54,"line":119},[52,109298,116],{"emptyLinePlaceholder":115},[52,109300,109301,109303,109305],{"class":54,"line":130},[52,109302,104234],{"class":90},[52,109304,16520],{"class":160},[52,109306,104239],{"class":62},[52,109308,109309],{"class":54,"line":136},[52,109310,109311],{"class":62},"\u003Cmujoco model=\"one_link_motor\">\n",[52,109313,109314],{"class":54,"line":141},[52,109315,109316],{"class":62},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[52,109318,109319],{"class":54,"line":146},[52,109320,116],{"emptyLinePlaceholder":115},[52,109322,109323],{"class":54,"line":152},[52,109324,104258],{"class":62},[52,109326,109327],{"class":54,"line":157},[52,109328,109329],{"class":62},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[52,109331,109332],{"class":54,"line":173},[52,109333,109334],{"class":62},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[52,109336,109337],{"class":54,"line":178},[52,109338,116],{"emptyLinePlaceholder":115},[52,109340,109341],{"class":54,"line":184},[52,109342,109343],{"class":62},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[52,109345,109346],{"class":54,"line":189},[52,109347,109348],{"class":62},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[52,109350,109351],{"class":54,"line":201},[52,109352,109353],{"class":62},"        \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",[52,109355,109356],{"class":54,"line":206},[52,109357,109358],{"class":62},"      \u003C\u002Fbody>\n",[52,109360,109361],{"class":54,"line":224},[52,109362,104287],{"class":62},[52,109364,109365],{"class":54,"line":229},[52,109366,104292],{"class":62},[52,109368,109369],{"class":54,"line":241},[52,109370,116],{"emptyLinePlaceholder":115},[52,109372,109373],{"class":54,"line":246},[52,109374,109375],{"class":62},"  \u003Cactuator>\n",[52,109377,109378],{"class":54,"line":252},[52,109379,109380],{"class":62},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[52,109382,109383],{"class":54,"line":257},[52,109384,109385],{"class":62},"  \u003C\u002Factuator>\n",[52,109387,109388],{"class":54,"line":266},[52,109389,104297],{"class":62},[52,109391,109392],{"class":54,"line":4722},[52,109393,98626],{"class":62},[52,109395,109396],{"class":54,"line":4727},[52,109397,116],{"emptyLinePlaceholder":115},[52,109399,109400],{"class":54,"line":4741},[52,109401,116],{"emptyLinePlaceholder":115},[52,109403,109404,109406,109408,109410,109412],{"class":54,"line":4746},[52,109405,34879],{"class":160},[52,109407,4935],{"class":58},[52,109409,104318],{"class":622},[52,109411,98614],{"class":90},[52,109413,6698],{"class":622},[52,109415,109416,109418,109420,109422,109424],{"class":54,"line":5538},[52,109417,104327],{"class":622},[52,109419,2099],{"class":160},[52,109421,104332],{"class":622},[52,109423,104234],{"class":90},[52,109425,170],{"class":622},[52,109427,109428,109430,109432],{"class":54,"line":5552},[52,109429,104341],{"class":622},[52,109431,2099],{"class":160},[52,109433,104346],{"class":622},[52,109435,109436],{"class":54,"line":5560},[52,109437,116],{"emptyLinePlaceholder":115},[52,109439,109440,109442,109444,109446],{"class":54,"line":5565},[52,109441,34231],{"class":90},[52,109443,3121],{"class":622},[52,109445,104359],{"class":62},[52,109447,104362],{"class":622},[52,109449,109450,109452,109454,109456],{"class":54,"line":5571},[52,109451,34231],{"class":90},[52,109453,3121],{"class":622},[52,109455,104371],{"class":62},[52,109457,104374],{"class":622},[52,109459,109460,109462,109464,109466],{"class":54,"line":5577},[52,109461,34231],{"class":90},[52,109463,3121],{"class":622},[52,109465,104383],{"class":62},[52,109467,104386],{"class":622},[52,109469,109470],{"class":54,"line":5582},[52,109471,116],{"emptyLinePlaceholder":115},[52,109473,109474,109476,109479,109481,109483],{"class":54,"line":10904},[52,109475,6060],{"class":160},[52,109477,109478],{"class":622}," model.nu ",[52,109480,23903],{"class":160},[52,109482,28064],{"class":90},[52,109484,6698],{"class":622},[52,109486,109487,109489,109491,109493,109496],{"class":54,"line":10928},[52,109488,106352],{"class":160},[52,109490,106355],{"class":90},[52,109492,3121],{"class":622},[52,109494,109495],{"class":62},"\"expected exactly one actuator\"",[52,109497,170],{"class":622},[52,109499,109500],{"class":54,"line":10933},[52,109501,116],{"emptyLinePlaceholder":115},[52,109503,109504,109506,109508,109510,109512,109514,109517],{"class":54,"line":10939},[52,109505,6160],{"class":160},[52,109507,34548],{"class":622},[52,109509,28988],{"class":160},[52,109511,35375],{"class":90},[52,109513,3121],{"class":622},[52,109515,109516],{"class":90},"2000",[52,109518,33718],{"class":622},[52,109520,109521,109524,109526,109528,109530],{"class":54,"line":10966},[52,109522,109523],{"class":622},"        t ",[52,109525,2099],{"class":160},[52,109527,34548],{"class":622},[52,109529,1095],{"class":160},[52,109531,109532],{"class":622}," model.opt.timestep\n",[52,109534,109535,109538,109540,109542,109544,109547,109549,109552,109554,109556,109559,109561,109563,109565],{"class":54,"line":10971},[52,109536,109537],{"class":622},"        data.ctrl[",[52,109539,3306],{"class":90},[52,109541,7402],{"class":622},[52,109543,2099],{"class":160},[52,109545,109546],{"class":90}," 1.5",[52,109548,9474],{"class":160},[52,109550,109551],{"class":622}," math.sin(",[52,109553,108180],{"class":90},[52,109555,9474],{"class":160},[52,109557,109558],{"class":622}," math.pi ",[52,109560,1095],{"class":160},[52,109562,64797],{"class":90},[52,109564,9474],{"class":160},[52,109566,109567],{"class":622}," t)\n",[52,109569,109570],{"class":54,"line":10977},[52,109571,104436],{"class":622},[52,109573,109574],{"class":54,"line":10989},[52,109575,116],{"emptyLinePlaceholder":115},[52,109577,109578,109580,109582,109585],{"class":54,"line":11001},[52,109579,34231],{"class":90},[52,109581,3121],{"class":622},[52,109583,109584],{"class":62},"\"time:\"",[52,109586,104398],{"class":622},[52,109588,109589,109591,109593,109596,109598,109600],{"class":54,"line":11013},[52,109590,34231],{"class":90},[52,109592,3121],{"class":622},[52,109594,109595],{"class":62},"\"joint qpos:\"",[52,109597,107850],{"class":622},[52,109599,3406],{"class":90},[52,109601,33429],{"class":622},[52,109603,109604,109606,109608,109611,109613,109615],{"class":54,"line":12672},[52,109605,34231],{"class":90},[52,109607,3121],{"class":622},[52,109609,109610],{"class":62},"\"joint qvel:\"",[52,109612,107866],{"class":622},[52,109614,3406],{"class":90},[52,109616,33429],{"class":622},[52,109618,109619,109621,109623,109626],{"class":54,"line":12697},[52,109620,34231],{"class":90},[52,109622,3121],{"class":622},[52,109624,109625],{"class":62},"\"last ctrl:\"",[52,109627,109628],{"class":622},", data.ctrl.copy())\n",[52,109630,109631],{"class":54,"line":12720},[52,109632,116],{"emptyLinePlaceholder":115},[52,109634,109635],{"class":54,"line":12744},[52,109636,116],{"emptyLinePlaceholder":115},[52,109638,109639,109641,109643,109645,109647],{"class":54,"line":12749},[52,109640,4509],{"class":160},[52,109642,34152],{"class":90},[52,109644,104479],{"class":160},[52,109646,104482],{"class":62},[52,109648,6698],{"class":622},[52,109650,109651],{"class":54,"line":12754},[52,109652,104489],{"class":622},[274,109654,106490],{},[19,109656,109658],{"className":26774,"code":109657,"language":26776,"meta":28,"style":28},"touch ch4_joint_motor.py\n",[26,109659,109660],{"__ignoreMap":28},[52,109661,109662,109664],{"class":54,"line":55},[52,109663,104203],{"class":58},[52,109665,109666],{"class":62}," ch4_joint_motor.py\n",[274,109668,105221],{},[19,109670,109672],{"className":26774,"code":109671,"language":26776,"meta":28,"style":28},"python ch4_joint_motor.py\n",[26,109673,109674],{"__ignoreMap":28},[52,109675,109676,109678],{"class":54,"line":55},[52,109677,33312],{"class":58},[52,109679,109666],{"class":62},[30,109681,104492],{"id":104492},[274,109683,109684],{},"检查 actuator 数量：",[19,109686,109688],{"className":33310,"code":109687,"language":33312,"meta":28,"style":28},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[26,109689,109690,109702],{"__ignoreMap":28},[52,109691,109692,109694,109696,109698,109700],{"class":54,"line":55},[52,109693,4509],{"class":160},[52,109695,109478],{"class":622},[52,109697,23903],{"class":160},[52,109699,28064],{"class":90},[52,109701,6698],{"class":622},[52,109703,109704,109706,109708,109710,109712],{"class":54,"line":69},[52,109705,106815],{"class":160},[52,109707,106355],{"class":90},[52,109709,3121],{"class":622},[52,109711,109495],{"class":62},[52,109713,170],{"class":622},[274,109715,109716,109718,109719,109721],{},[26,109717,105078],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[26,109720,103998],{}," 长度应该是 1。",[274,109723,109724],{},"产生正弦控制信号：",[19,109726,109728],{"className":33310,"code":109727,"language":33312,"meta":28,"style":28},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[26,109729,109730],{"__ignoreMap":28},[52,109731,109732,109734,109736,109738,109740,109742,109744,109746,109748,109750,109752,109754,109756,109758],{"class":54,"line":55},[52,109733,108791],{"class":622},[52,109735,3306],{"class":90},[52,109737,7402],{"class":622},[52,109739,2099],{"class":160},[52,109741,109546],{"class":90},[52,109743,9474],{"class":160},[52,109745,109551],{"class":622},[52,109747,108180],{"class":90},[52,109749,9474],{"class":160},[52,109751,109558],{"class":622},[52,109753,1095],{"class":160},[52,109755,64797],{"class":90},[52,109757,9474],{"class":160},[52,109759,109567],{"class":622},[274,109761,109762],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[274,109764,104593],{},[19,109766,109767],{"className":33310,"code":107425,"language":33312,"meta":28,"style":28},[26,109768,109769],{"__ignoreMap":28},[52,109770,109771],{"class":54,"line":55},[52,109772,107425],{"class":622},[274,109774,109775],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[30,109777,104628],{"id":104628},[19,109779,109781],{"className":33310,"code":109780,"language":33312,"meta":28,"style":28},"import math\n",[26,109782,109783],{"__ignoreMap":28},[52,109784,109785,109787],{"class":54,"line":55},[52,109786,33324],{"class":160},[52,109788,109270],{"class":622},[274,109790,109791,109792,103940,109795,109798],{},"导入 Python 标准库里的数学模块。后面要用 ",[26,109793,109794],{},"math.sin",[26,109796,109797],{},"math.pi"," 生成周期变化的控制信号。",[19,109800,109801],{"className":33310,"code":106606,"language":33312,"meta":28,"style":28},[26,109802,109803,109809],{"__ignoreMap":28},[52,109804,109805,109807],{"class":54,"line":55},[52,109806,33324],{"class":160},[52,109808,104221],{"class":622},[52,109810,109811,109813,109815,109817],{"class":54,"line":69},[52,109812,33324],{"class":160},[52,109814,34312],{"class":622},[52,109816,34315],{"class":160},[52,109818,34318],{"class":622},[274,109820,109821],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[19,109823,109824],{"className":55997,"code":109107,"language":55999,"meta":28,"style":28},[26,109825,109826],{"__ignoreMap":28},[52,109827,109828,109830,109832,109834,109836,109838,109840,109842,109844,109846,109848,109850,109852,109854,109856],{"class":54,"line":55},[52,109829,4022],{"class":622},[52,109831,105876],{"class":54231},[52,109833,17876],{"class":58},[52,109835,2099],{"class":622},[52,109837,108939],{"class":62},[52,109839,56754],{"class":58},[52,109841,2099],{"class":622},[52,109843,108939],{"class":62},[52,109845,108948],{"class":58},[52,109847,2099],{"class":622},[52,109849,108953],{"class":62},[52,109851,109136],{"class":58},[52,109853,2099],{"class":622},[52,109855,109141],{"class":62},[52,109857,104066],{"class":622},[274,109859,109860,109861,109863,109864,109866,109867,109869],{},"这行定义关节。",[26,109862,108760],{}," 表示旋转关节。",[26,109865,109159],{}," 表示绕 y 轴旋转。",[26,109868,109165],{}," 表示有一点阻尼，运动不会完全无损耗。",[19,109871,109873],{"className":55997,"code":109872,"language":55999,"meta":28,"style":28},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[26,109874,109875],{"__ignoreMap":28},[52,109876,109877,109879,109881,109883,109885,109888,109890,109892,109895,109898,109900,109903,109905,109907,109909,109911,109913,109916],{"class":54,"line":55},[52,109878,4022],{"class":622},[52,109880,104042],{"class":54231},[52,109882,17876],{"class":58},[52,109884,2099],{"class":622},[52,109886,109887],{"class":62},"\"link_geom\"",[52,109889,56754],{"class":58},[52,109891,2099],{"class":622},[52,109893,109894],{"class":62},"\"capsule\"",[52,109896,109897],{"class":58}," fromto",[52,109899,2099],{"class":622},[52,109901,109902],{"class":62},"\"0 0 0 0 0 0.5\"",[52,109904,104058],{"class":58},[52,109906,2099],{"class":622},[52,109908,106698],{"class":62},[52,109910,104921],{"class":58},[52,109912,2099],{"class":622},[52,109914,109915],{"class":62},"\"0.5\"",[52,109917,104066],{"class":622},[274,109919,109920,109921,109923,109924,109926,109927,109930,109931,31319,109934,109936],{},"这行定义摆杆的形状。",[26,109922,106085],{}," 是胶囊体，适合表示杆子。",[26,109925,106096],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[26,109928,109929],{},"(0,0,0)"," 延伸到 ",[26,109932,109933],{},"(0,0,0.5)",[26,109935,106090],{}," 是半径。",[19,109938,109939],{"className":55997,"code":109173,"language":55999,"meta":28,"style":28},[26,109940,109941],{"__ignoreMap":28},[52,109942,109943,109945,109947,109949,109951,109953,109955,109957,109959,109961,109963,109965,109967,109969,109971,109973,109975,109977],{"class":54,"line":55},[52,109944,4022],{"class":622},[52,109946,108994],{"class":54231},[52,109948,17876],{"class":58},[52,109950,2099],{"class":622},[52,109952,109001],{"class":62},[52,109954,109004],{"class":58},[52,109956,2099],{"class":622},[52,109958,108939],{"class":62},[52,109960,109011],{"class":58},[52,109962,2099],{"class":622},[52,109964,6637],{"class":62},[52,109966,109018],{"class":58},[52,109968,2099],{"class":622},[52,109970,109023],{"class":62},[52,109972,109026],{"class":58},[52,109974,2099],{"class":622},[52,109976,109031],{"class":62},[52,109978,104066],{"class":622},[274,109980,109981,109982,109984,109985,109988,109989,109991],{},"这行定义电机。它作用在 ",[26,109983,108760],{}," 关节上。",[26,109986,109987],{},"gear"," 可以理解成放大倍数。",[26,109990,108775],{}," 限制控制输入范围。",[19,109993,109994],{"className":33310,"code":109687,"language":33312,"meta":28,"style":28},[26,109995,109996,110008],{"__ignoreMap":28},[52,109997,109998,110000,110002,110004,110006],{"class":54,"line":55},[52,109999,4509],{"class":160},[52,110001,109478],{"class":622},[52,110003,23903],{"class":160},[52,110005,28064],{"class":90},[52,110007,6698],{"class":622},[52,110009,110010,110012,110014,110016,110018],{"class":54,"line":69},[52,110011,106815],{"class":160},[52,110013,106355],{"class":90},[52,110015,3121],{"class":622},[52,110017,109495],{"class":62},[52,110019,170],{"class":622},[274,110021,110022,110024],{},[26,110023,105078],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[19,110026,110028],{"className":33310,"code":110027,"language":33312,"meta":28,"style":28},"for step in range(2000):\n",[26,110029,110030],{"__ignoreMap":28},[52,110031,110032,110034,110036,110038,110040,110042,110044],{"class":54,"line":55},[52,110033,5985],{"class":160},[52,110035,34548],{"class":622},[52,110037,28988],{"class":160},[52,110039,35375],{"class":90},[52,110041,3121],{"class":622},[52,110043,109516],{"class":90},[52,110045,33718],{"class":622},[274,110047,110048,110049,110051,110052,110055],{},"循环 2000 步。这里没有用 ",[26,110050,4103],{},"，而是用 ",[26,110053,110054],{},"step","，因为后面要用当前步数计算时间。",[19,110057,110059],{"className":33310,"code":110058,"language":33312,"meta":28,"style":28},"t = step * model.opt.timestep\n",[26,110060,110061],{"__ignoreMap":28},[52,110062,110063,110066,110068,110070,110072],{"class":54,"line":55},[52,110064,110065],{"class":622},"t ",[52,110067,2099],{"class":160},[52,110069,34548],{"class":622},[52,110071,1095],{"class":160},[52,110073,109532],{"class":622},[274,110075,110076],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[19,110078,110079],{"className":33310,"code":109727,"language":33312,"meta":28,"style":28},[26,110080,110081],{"__ignoreMap":28},[52,110082,110083,110085,110087,110089,110091,110093,110095,110097,110099,110101,110103,110105,110107,110109],{"class":54,"line":55},[52,110084,108791],{"class":622},[52,110086,3306],{"class":90},[52,110088,7402],{"class":622},[52,110090,2099],{"class":160},[52,110092,109546],{"class":90},[52,110094,9474],{"class":160},[52,110096,109551],{"class":622},[52,110098,108180],{"class":90},[52,110100,9474],{"class":160},[52,110102,109558],{"class":622},[52,110104,1095],{"class":160},[52,110106,64797],{"class":90},[52,110108,9474],{"class":160},[52,110110,109567],{"class":622},[274,110112,110113],{},"这行给电机输入一个正弦波。拆开看：",[1070,110115,110116,110122,110128],{},[1073,110117,110118,110121],{},[26,110119,110120],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[1073,110123,110124,110127],{},[26,110125,110126],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[1073,110129,110130,110133],{},[26,110131,110132],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[274,110135,110136],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[19,110138,110140],{"className":33310,"code":110139,"language":33312,"meta":28,"style":28},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[26,110141,110142],{"__ignoreMap":28},[52,110143,110144,110146,110148,110150,110152,110154],{"class":54,"line":55},[52,110145,33347],{"class":90},[52,110147,3121],{"class":622},[52,110149,109595],{"class":62},[52,110151,107850],{"class":622},[52,110153,3406],{"class":90},[52,110155,33429],{"class":622},[274,110157,110158,110159,110161],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[26,110160,103992],{}," 只有一个数。",[14,110163,105236],{"id":105235},[274,110165,110166],{},"输出类似:",[19,110168,110171],{"className":110169,"code":110170,"language":24,"meta":28},[22],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[26,110172,110170],{"__ignoreMap":28},[274,110174,110175,110176,110178],{},"这里 ",[26,110177,109046],{}," 是电机输入。",[274,110180,110181,110184,110185,110188],{},[26,110182,110183],{},"joint qpos"," 是关节角度，单位通常是弧度。",[26,110186,110187],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[274,110190,110191],{},"角度单位提示：",[19,110193,110196],{"className":110194,"code":110195,"language":24,"meta":28},[22],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[26,110197,110195],{"__ignoreMap":28},[274,110199,110200,110201,110203,110204,110206],{},"如果你看到 ",[26,110202,106950],{}," 是 ",[26,110205,38261],{},"，大约就是 28.6 度。",[14,110208,105268],{"id":105267},[1070,110210,110211,110218,110221,110228,110231,110239,110247],{},[1073,110212,105331,110213,105334,110215,31319],{},[26,110214,109231],{},[26,110216,110217],{},"gear=\"5\"",[1073,110219,110220],{},"重新运行，观察关节运动是否更剧烈。",[1073,110222,105331,110223,105334,110225,31319],{},[26,110224,108775],{},[26,110226,110227],{},"-0.2 0.2",[1073,110229,110230],{},"重新运行，观察控制能力是否变弱。",[1073,110232,110233,110234,110236,110237,31319],{},"去掉 actuator，确认 ",[26,110235,105078],{}," 变成 ",[26,110238,3306],{},[1073,110240,105331,110241,105334,110243,110246],{},[26,110242,109165],{},[26,110244,110245],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[1073,110248,105331,110249,105334,110251,110254],{},[26,110250,109159],{},[26,110252,110253],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,110256,105373],{"id":105372},[30,110258,110260],{"id":110259},"indexerror-index-0-is-out-of-bounds",[26,110261,110262],{},"IndexError: index 0 is out of bounds",[274,110264,110265,110266,110268],{},"原因是 ",[26,110267,108912],{},"，没有 actuator。",[30,110270,110271],{"id":110271},"关节几乎不动",[274,110273,110274],{},"可能原因:",[1070,110276,110277,110282,110286,110292],{},[1073,110278,110279,110281],{},[26,110280,109987],{}," 太小",[1073,110283,110284,110281],{},[26,110285,108775],{},[1073,110287,110288,110291],{},[26,110289,110290],{},"damping"," 太大",[1073,110293,110294],{},"重力方向导致运动不明显",[30,110296,110297],{"id":110297},"模型编译失败",[274,110299,110300,110301,110303],{},"检查 actuator 引用的 ",[26,110302,109222],{}," 是否存在，joint 名称是否拼写一致。",[30,110305,110307,110309],{"id":110306},"datactrl0-写了但没有效果",[26,110308,109046],{}," 写了但没有效果",[274,110311,105495],{},[1070,110313,110314,110319,110322,110327,110332],{},[1073,110315,110316,110318],{},[26,110317,105078],{}," 是否大于 0。",[1073,110320,110321],{},"motor 是否引用了正确 joint。",[1073,110323,110324,110326],{},[26,110325,109987],{}," 是否太小。",[1073,110328,110329,110331],{},[26,110330,108775],{}," 是否把输入限制得太小。",[1073,110333,110334],{},"body 是否真的有可动 joint。",[30,110336,110337],{"id":110337},"控制输入超过范围会怎样",[274,110339,110340],{},"如果设置了：",[19,110342,110344],{"className":55997,"code":110343,"language":55999,"meta":28,"style":28},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[26,110345,110346],{"__ignoreMap":28},[52,110347,110348],{"class":54,"line":55},[52,110349,110343],{"class":622},[274,110351,110352],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[19,110354,110356],{"className":33310,"code":110355,"language":33312,"meta":28,"style":28},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[26,110357,110358,110378],{"__ignoreMap":28},[52,110359,110360,110363,110365,110368,110370,110372,110374,110376],{"class":54,"line":55},[52,110361,110362],{"class":622},"action ",[52,110364,2099],{"class":160},[52,110366,110367],{"class":622}," np.clip(action, ",[52,110369,3644],{"class":160},[52,110371,108180],{"class":90},[52,110373,15391],{"class":622},[52,110375,108180],{"class":90},[52,110377,170],{"class":622},[52,110379,110380,110382,110384,110386,110388],{"class":54,"line":69},[52,110381,108791],{"class":622},[52,110383,3306],{"class":90},[52,110385,7402],{"class":622},[52,110387,2099],{"class":160},[52,110389,110390],{"class":622}," action\n",[14,110392,105527],{"id":105526},[274,110394,110395],{},"这一章建立了控制任务的基本形式：",[19,110397,110400],{"className":110398,"code":110399,"language":24,"meta":28},[22],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[26,110401,110399],{"__ignoreMap":28},[274,110403,110404],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[3015,110406,110407],{},"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":28,"searchDepth":69,"depth":69,"links":110409},[110410,110411,110412,110417,110421,110422,110423,110431],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":110413},[110414,110415,110416],{"id":109053,"depth":82,"text":109054},{"id":109103,"depth":82,"text":109104},{"id":109169,"depth":82,"text":109170},{"id":104174,"depth":69,"text":104175,"children":110418},[110419,110420],{"id":104492,"depth":82,"text":104492},{"id":104628,"depth":82,"text":104628},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":110424},[110425,110426,110427,110428,110430],{"id":110259,"depth":82,"text":110262},{"id":110271,"depth":82,"text":110271},{"id":110297,"depth":82,"text":110297},{"id":110306,"depth":82,"text":110429},"data.ctrl[0] 写了但没有效果",{"id":110337,"depth":82,"text":110337},{"id":105526,"depth":69,"text":105527},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108741,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":110438,"title":110439,"body":110440,"description":28,"extension":3047,"meta":112349,"navigation":115,"path":112350,"seo":112351,"stem":112352,"__hash__":112353},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":110441,"toc":112325},[110442,110445,110447,110450,110458,110461,110478,110481,110506,110509,110555,110557,110559,110614,110616,110635,110637,110680,110683,110700,110703,110719,110729,110736,110738,110741,110744,110778,110781,110829,110833,110836,110850,110859,110863,110866,110891,110894,110898,110911,110914,110920,110923,110938,110940,110943,111203,111205,111217,111220,111532,111534,111546,111548,111551,111566,111571,111574,111596,111599,111602,111636,111639,111643,111654,111657,111674,111677,111691,111698,111718,111725,111739,111742,111754,111769,111789,111792,111814,111817,111821,111836,111847,111862,111865,111895,111911,111940,111948,111972,111975,111993,112003,112015,112022,112031,112037,112046,112049,112051,112060,112063,112078,112080,112083,112094,112097,112108,112111,112129,112131,112148,112151,112179,112181,112185,112188,112218,112224,112227,112231,112239,112242,112244,112265,112268,112271,112287,112290,112306,112308,112311,112322],[10,110443,110439],{"id":110444},"_5viewer-可视化与-renderer-离屏渲染",[14,110446,103575],{"id":103574},[274,110448,110449],{},"本章掌握两类可视化方式:",[1070,110451,110452,110455],{},[1073,110453,110454],{},"交互式 viewer: 适合人工观察仿真",[1073,110456,110457],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[274,110459,110460],{},"使用官方接口:",[19,110462,110464],{"className":33310,"code":110463,"language":33312,"meta":28,"style":28},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[26,110465,110466,110473],{"__ignoreMap":28},[52,110467,110468,110470],{"class":54,"line":55},[52,110469,33324],{"class":160},[52,110471,110472],{"class":622}," mujoco.viewer\n",[52,110474,110475],{"class":54,"line":69},[52,110476,110477],{"class":622},"mujoco.viewer.launch_passive(model, data)\n",[274,110479,110480],{},"以及:",[19,110482,110484],{"className":33310,"code":110483,"language":33312,"meta":28,"style":28},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[26,110485,110486,110496],{"__ignoreMap":28},[52,110487,110488,110491,110493],{"class":54,"line":55},[52,110489,110490],{"class":622},"renderer ",[52,110492,2099],{"class":160},[52,110494,110495],{"class":622}," mujoco.Renderer(model)\n",[52,110497,110498,110501,110503],{"class":54,"line":69},[52,110499,110500],{"class":622},"image ",[52,110502,2099],{"class":160},[52,110504,110505],{"class":622}," renderer.render()\n",[274,110507,110508],{},"新手建议先理解二者区别：",[3253,110510,110511,110527],{},[3256,110512,110513],{},[3259,110514,110515,110518,110521,110524],{},[3262,110516,110517],{"align":26688},"工具",[3262,110519,110520],{"align":26688},"用途",[3262,110522,110523],{"align":26688},"是否打开窗口",[3262,110525,110526],{"align":26688},"常见场景",[3299,110528,110529,110542],{},[3259,110530,110531,110534,110537,110539],{},[3304,110532,110533],{"align":26688},"Viewer",[3304,110535,110536],{"align":26688},"人眼实时观察仿真",[3304,110538,107585],{"align":26688},[3304,110540,110541],{"align":26688},"调试模型、看控制效果",[3259,110543,110544,110547,110550,110552],{},[3304,110545,110546],{"align":26688},"Renderer",[3304,110548,110549],{"align":26688},"生成图像数组",[3304,110551,107598],{"align":26688},[3304,110553,110554],{"align":26688},"保存图片、训练视觉策略、服务器批量采集",[14,110556,103698],{"id":103697},[274,110558,103701],{},[19,110560,110562],{"className":26774,"code":110561,"language":26776,"meta":28,"style":28},"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",[26,110563,110564,110576,110586,110594,110602],{"__ignoreMap":28},[52,110565,110566,110568,110570,110572,110574],{"class":54,"line":55},[52,110567,59],{"class":58},[52,110569,2938],{"class":62},[52,110571,76],{"class":62},[52,110573,29340],{"class":90},[52,110575,27627],{"class":90},[52,110577,110578,110580,110582,110584],{"class":54,"line":69},[52,110579,103736],{"class":62},[52,110581,103739],{"class":62},[52,110583,103742],{"class":62},[52,110585,27627],{"class":90},[52,110587,110588,110590,110592],{"class":54,"line":82},[52,110589,103749],{"class":62},[52,110591,103752],{"class":62},[52,110593,27627],{"class":90},[52,110595,110596,110598,110600],{"class":54,"line":97},[52,110597,103759],{"class":62},[52,110599,103762],{"class":62},[52,110601,27627],{"class":90},[52,110603,110604,110606,110608,110610,110612],{"class":54,"line":112},[52,110605,103769],{"class":62},[52,110607,103772],{"class":62},[52,110609,103775],{"class":62},[52,110611,103778],{"class":62},[52,110613,105436],{"class":62},[274,110615,105739],{},[19,110617,110619],{"className":26774,"code":110618,"language":26776,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy pillow\n",[26,110620,110621],{"__ignoreMap":28},[52,110622,110623,110625,110627,110629,110632],{"class":54,"line":55},[52,110624,26783],{"class":58},[52,110626,76],{"class":62},[52,110628,103852],{"class":62},[52,110630,110631],{"class":62}," numpy",[52,110633,110634],{"class":62}," pillow\n",[274,110636,105756],{},[19,110638,110640],{"className":26774,"code":110639,"language":26776,"meta":28,"style":28},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[26,110641,110642,110659,110668],{"__ignoreMap":28},[52,110643,110644,110646,110648,110650,110653,110655,110657],{"class":54,"line":55},[52,110645,33262],{"class":58},[52,110647,32110],{"class":62},[52,110649,28061],{"class":90},[52,110651,110652],{"class":62}," mujoco-render",[52,110654,103897],{"class":62},[52,110656,103900],{"class":90},[52,110658,103903],{"class":90},[52,110660,110661,110663,110665],{"class":54,"line":69},[52,110662,33262],{"class":58},[52,110664,103910],{"class":62},[52,110666,110667],{"class":62}," mujoco-render\n",[52,110669,110670,110672,110674,110676,110678],{"class":54,"line":82},[52,110671,26783],{"class":58},[52,110673,76],{"class":62},[52,110675,103852],{"class":62},[52,110677,110631],{"class":62},[52,110679,110634],{"class":62},[274,110681,110682],{},"离屏渲染后端:",[19,110684,110686],{"className":26774,"code":110685,"language":26776,"meta":28,"style":28},"export MUJOCO_GL=egl\n",[26,110687,110688],{"__ignoreMap":28},[52,110689,110690,110692,110695,110697],{"class":54,"line":55},[52,110691,2093],{"class":160},[52,110693,110694],{"class":622}," MUJOCO_GL",[52,110696,2099],{"class":160},[52,110698,110699],{"class":622},"egl\n",[274,110701,110702],{},"或:",[19,110704,110706],{"className":26774,"code":110705,"language":26776,"meta":28,"style":28},"export MUJOCO_GL=osmesa\n",[26,110707,110708],{"__ignoreMap":28},[52,110709,110710,110712,110714,110716],{"class":54,"line":55},[52,110711,2093],{"class":160},[52,110713,110694],{"class":622},[52,110715,2099],{"class":160},[52,110717,110718],{"class":622},"osmesa\n",[274,110720,110721,110722,110725,110726,31319],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[26,110723,110724],{},"egl"," 失败，再尝试 ",[26,110727,110728],{},"osmesa",[274,110730,110731,110732,110735],{},"如果你在本机桌面环境运行，通常先不要设置 ",[26,110733,110734],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110737,103967],{"id":103966},[274,110739,110740],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[274,110742,110743],{},"典型 viewer 流程:",[19,110745,110747],{"className":33310,"code":110746,"language":33312,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[26,110748,110749,110762,110769,110773],{"__ignoreMap":28},[52,110750,110751,110754,110757,110759],{"class":54,"line":55},[52,110752,110753],{"class":160},"with",[52,110755,110756],{"class":622}," mujoco.viewer.launch_passive(model, data) ",[52,110758,34315],{"class":160},[52,110760,110761],{"class":622}," viewer:\n",[52,110763,110764,110766],{"class":54,"line":69},[52,110765,5213],{"class":160},[52,110767,110768],{"class":622}," viewer.is_running():\n",[52,110770,110771],{"class":54,"line":82},[52,110772,104436],{"class":622},[52,110774,110775],{"class":54,"line":97},[52,110776,110777],{"class":622},"        viewer.sync()\n",[274,110779,110780],{},"典型 renderer 流程:",[19,110782,110784],{"className":33310,"code":110783,"language":33312,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[26,110785,110786,110812,110816,110821],{"__ignoreMap":28},[52,110787,110788,110790,110792,110795,110797,110799,110801,110803,110805,110807,110810],{"class":54,"line":55},[52,110789,110490],{"class":622},[52,110791,2099],{"class":160},[52,110793,110794],{"class":622}," mujoco.Renderer(model, ",[52,110796,27930],{"class":8172},[52,110798,2099],{"class":160},[52,110800,45274],{"class":90},[52,110802,15391],{"class":622},[52,110804,27926],{"class":8172},[52,110806,2099],{"class":160},[52,110808,110809],{"class":90},"640",[52,110811,170],{"class":622},[52,110813,110814],{"class":54,"line":69},[52,110815,107425],{"class":622},[52,110817,110818],{"class":54,"line":82},[52,110819,110820],{"class":622},"renderer.update_scene(data)\n",[52,110822,110823,110825,110827],{"class":54,"line":97},[52,110824,110500],{"class":622},[52,110826,2099],{"class":160},[52,110828,110505],{"class":622},[30,110830,110832],{"id":110831},"viewer-的同步逻辑","viewer 的同步逻辑",[274,110834,110835],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[19,110837,110839],{"className":33310,"code":110838,"language":33312,"meta":28,"style":28},"mujoco.mj_step(model, data)\nviewer.sync()\n",[26,110840,110841,110845],{"__ignoreMap":28},[52,110842,110843],{"class":54,"line":55},[52,110844,107425],{"class":622},[52,110846,110847],{"class":54,"line":69},[52,110848,110849],{"class":622},"viewer.sync()\n",[274,110851,110852,110854,110855,110858],{},[26,110853,104137],{}," 负责算物理，",[26,110856,110857],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[30,110860,110862],{"id":110861},"为什么要-sleep","为什么要 sleep",[274,110864,110865],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[19,110867,110869],{"className":33310,"code":110868,"language":33312,"meta":28,"style":28},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[26,110870,110871],{"__ignoreMap":28},[52,110872,110873,110876,110878,110881,110883,110886,110888],{"class":54,"line":55},[52,110874,110875],{"class":622},"sleep_time ",[52,110877,2099],{"class":160},[52,110879,110880],{"class":622}," model.opt.timestep ",[52,110882,3644],{"class":160},[52,110884,110885],{"class":622}," (time.time() ",[52,110887,3644],{"class":160},[52,110889,110890],{"class":622}," step_start)\n",[274,110892,110893],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[30,110895,110897],{"id":110896},"renderer-输出是什么","renderer 输出是什么",[19,110899,110901],{"className":33310,"code":110900,"language":33312,"meta":28,"style":28},"image = renderer.render()\n",[26,110902,110903],{"__ignoreMap":28},[52,110904,110905,110907,110909],{"class":54,"line":55},[52,110906,110500],{"class":622},[52,110908,2099],{"class":160},[52,110910,110505],{"class":622},[274,110912,110913],{},"得到的是 NumPy 数组，形状通常是：",[19,110915,110918],{"className":110916,"code":110917,"language":24,"meta":28},[22],"(height, width, 3)\n",[26,110919,110917],{"__ignoreMap":28},[274,110921,110922],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[19,110924,110926],{"className":33310,"code":110925,"language":33312,"meta":28,"style":28},"Image.fromarray(image).save(\"render_output.png\")\n",[26,110927,110928],{"__ignoreMap":28},[52,110929,110930,110933,110936],{"class":54,"line":55},[52,110931,110932],{"class":622},"Image.fromarray(image).save(",[52,110934,110935],{"class":62},"\"render_output.png\"",[52,110937,170],{"class":622},[14,110939,104175],{"id":104174},[274,110941,110942],{},"交互式 Viewer:",[19,110944,110946],{"className":33310,"code":110945,"language":33312,"meta":28,"style":28},"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",[26,110947,110948,110954,110958,110964,110970,110974,110978,110986,110991,110995,110999,111003,111008,111013,111017,111021,111025,111030,111034,111038,111042,111046,111050,111054,111066,111078,111086,111090,111100,111120,111130,111135,111140,111144,111161,111174,111179,111183,111187,111199],{"__ignoreMap":28},[52,110949,110950,110952],{"class":54,"line":55},[52,110951,33324],{"class":160},[52,110953,34761],{"class":622},[52,110955,110956],{"class":54,"line":69},[52,110957,116],{"emptyLinePlaceholder":115},[52,110959,110960,110962],{"class":54,"line":82},[52,110961,33324],{"class":160},[52,110963,104221],{"class":622},[52,110965,110966,110968],{"class":54,"line":97},[52,110967,33324],{"class":160},[52,110969,110472],{"class":622},[52,110971,110972],{"class":54,"line":112},[52,110973,116],{"emptyLinePlaceholder":115},[52,110975,110976],{"class":54,"line":119},[52,110977,116],{"emptyLinePlaceholder":115},[52,110979,110980,110982,110984],{"class":54,"line":130},[52,110981,104234],{"class":90},[52,110983,16520],{"class":160},[52,110985,104239],{"class":62},[52,110987,110988],{"class":54,"line":136},[52,110989,110990],{"class":62},"\u003Cmujoco model=\"viewer_demo\">\n",[52,110992,110993],{"class":54,"line":141},[52,110994,104249],{"class":62},[52,110996,110997],{"class":54,"line":146},[52,110998,116],{"emptyLinePlaceholder":115},[52,111000,111001],{"class":54,"line":152},[52,111002,104258],{"class":62},[52,111004,111005],{"class":54,"line":157},[52,111006,111007],{"class":62},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[52,111009,111010],{"class":54,"line":173},[52,111011,111012],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[52,111014,111015],{"class":54,"line":178},[52,111016,116],{"emptyLinePlaceholder":115},[52,111018,111019],{"class":54,"line":184},[52,111020,104272],{"class":62},[52,111022,111023],{"class":54,"line":189},[52,111024,104277],{"class":62},[52,111026,111027],{"class":54,"line":201},[52,111028,111029],{"class":62},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[52,111031,111032],{"class":54,"line":206},[52,111033,104287],{"class":62},[52,111035,111036],{"class":54,"line":224},[52,111037,104292],{"class":62},[52,111039,111040],{"class":54,"line":229},[52,111041,104297],{"class":62},[52,111043,111044],{"class":54,"line":241},[52,111045,98626],{"class":62},[52,111047,111048],{"class":54,"line":246},[52,111049,116],{"emptyLinePlaceholder":115},[52,111051,111052],{"class":54,"line":252},[52,111053,116],{"emptyLinePlaceholder":115},[52,111055,111056,111058,111060,111062,111064],{"class":54,"line":257},[52,111057,34879],{"class":160},[52,111059,4935],{"class":58},[52,111061,104318],{"class":622},[52,111063,98614],{"class":90},[52,111065,6698],{"class":622},[52,111067,111068,111070,111072,111074,111076],{"class":54,"line":266},[52,111069,104327],{"class":622},[52,111071,2099],{"class":160},[52,111073,104332],{"class":622},[52,111075,104234],{"class":90},[52,111077,170],{"class":622},[52,111079,111080,111082,111084],{"class":54,"line":4722},[52,111081,104341],{"class":622},[52,111083,2099],{"class":160},[52,111085,104346],{"class":622},[52,111087,111088],{"class":54,"line":4727},[52,111089,116],{"emptyLinePlaceholder":115},[52,111091,111092,111094,111096,111098],{"class":54,"line":4741},[52,111093,37110],{"class":160},[52,111095,110756],{"class":622},[52,111097,34315],{"class":160},[52,111099,110761],{"class":622},[52,111101,111102,111105,111108,111110,111113,111115,111118],{"class":54,"line":4746},[52,111103,111104],{"class":160},"        while",[52,111106,111107],{"class":622}," viewer.is_running() ",[52,111109,33394],{"class":160},[52,111111,111112],{"class":622}," data.time ",[52,111114,4022],{"class":160},[52,111116,111117],{"class":90}," 5.0",[52,111119,6698],{"class":622},[52,111121,111122,111125,111127],{"class":54,"line":5538},[52,111123,111124],{"class":622},"            step_start ",[52,111126,2099],{"class":160},[52,111128,111129],{"class":622}," time.time()\n",[52,111131,111132],{"class":54,"line":5552},[52,111133,111134],{"class":622},"            mujoco.mj_step(model, data)\n",[52,111136,111137],{"class":54,"line":5560},[52,111138,111139],{"class":622},"            viewer.sync()\n",[52,111141,111142],{"class":54,"line":5565},[52,111143,116],{"emptyLinePlaceholder":115},[52,111145,111146,111149,111151,111153,111155,111157,111159],{"class":54,"line":5571},[52,111147,111148],{"class":622},"            sleep_time ",[52,111150,2099],{"class":160},[52,111152,110880],{"class":622},[52,111154,3644],{"class":160},[52,111156,110885],{"class":622},[52,111158,3644],{"class":160},[52,111160,110890],{"class":622},[52,111162,111163,111165,111168,111170,111172],{"class":54,"line":5577},[52,111164,7601],{"class":160},[52,111166,111167],{"class":622}," sleep_time ",[52,111169,4072],{"class":160},[52,111171,7052],{"class":90},[52,111173,6698],{"class":622},[52,111175,111176],{"class":54,"line":5582},[52,111177,111178],{"class":622},"                time.sleep(sleep_time)\n",[52,111180,111181],{"class":54,"line":10904},[52,111182,116],{"emptyLinePlaceholder":115},[52,111184,111185],{"class":54,"line":10928},[52,111186,116],{"emptyLinePlaceholder":115},[52,111188,111189,111191,111193,111195,111197],{"class":54,"line":10933},[52,111190,4509],{"class":160},[52,111192,34152],{"class":90},[52,111194,104479],{"class":160},[52,111196,104482],{"class":62},[52,111198,6698],{"class":622},[52,111200,111201],{"class":54,"line":10939},[52,111202,104489],{"class":622},[274,111204,106490],{},[19,111206,111208],{"className":26774,"code":111207,"language":26776,"meta":28,"style":28},"touch ch5_viewer.py\n",[26,111209,111210],{"__ignoreMap":28},[52,111211,111212,111214],{"class":54,"line":55},[52,111213,104203],{"class":58},[52,111215,111216],{"class":62}," ch5_viewer.py\n",[274,111218,111219],{},"离屏 Renderer 保存图片:",[19,111221,111223],{"className":33310,"code":111222,"language":33312,"meta":28,"style":28},"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",[26,111224,111225,111237,111241,111247,111257,111261,111265,111273,111278,111282,111286,111290,111294,111299,111303,111307,111311,111315,111319,111323,111327,111331,111335,111339,111343,111355,111367,111375,111400,111404,111420,111424,111428,111443,111452,111456,111470,111475,111480,111484,111496,111508,111512,111516,111528],{"__ignoreMap":28},[52,111226,111227,111229,111232,111234],{"class":54,"line":55},[52,111228,33669],{"class":160},[52,111230,111231],{"class":622}," pathlib ",[52,111233,33324],{"class":160},[52,111235,111236],{"class":622}," Path\n",[52,111238,111239],{"class":54,"line":69},[52,111240,116],{"emptyLinePlaceholder":115},[52,111242,111243,111245],{"class":54,"line":82},[52,111244,33324],{"class":160},[52,111246,104221],{"class":622},[52,111248,111249,111251,111253,111255],{"class":54,"line":97},[52,111250,33669],{"class":160},[52,111252,50195],{"class":90},[52,111254,50198],{"class":160},[52,111256,50201],{"class":622},[52,111258,111259],{"class":54,"line":112},[52,111260,116],{"emptyLinePlaceholder":115},[52,111262,111263],{"class":54,"line":119},[52,111264,116],{"emptyLinePlaceholder":115},[52,111266,111267,111269,111271],{"class":54,"line":130},[52,111268,104234],{"class":90},[52,111270,16520],{"class":160},[52,111272,104239],{"class":62},[52,111274,111275],{"class":54,"line":136},[52,111276,111277],{"class":62},"\u003Cmujoco model=\"renderer_demo\">\n",[52,111279,111280],{"class":54,"line":141},[52,111281,104249],{"class":62},[52,111283,111284],{"class":54,"line":146},[52,111285,116],{"emptyLinePlaceholder":115},[52,111287,111288],{"class":54,"line":152},[52,111289,104258],{"class":62},[52,111291,111292],{"class":54,"line":157},[52,111293,111007],{"class":62},[52,111295,111296],{"class":54,"line":173},[52,111297,111298],{"class":62},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[52,111300,111301],{"class":54,"line":178},[52,111302,111012],{"class":62},[52,111304,111305],{"class":54,"line":184},[52,111306,116],{"emptyLinePlaceholder":115},[52,111308,111309],{"class":54,"line":189},[52,111310,104272],{"class":62},[52,111312,111313],{"class":54,"line":201},[52,111314,104277],{"class":62},[52,111316,111317],{"class":54,"line":206},[52,111318,111029],{"class":62},[52,111320,111321],{"class":54,"line":224},[52,111322,104287],{"class":62},[52,111324,111325],{"class":54,"line":229},[52,111326,104292],{"class":62},[52,111328,111329],{"class":54,"line":241},[52,111330,104297],{"class":62},[52,111332,111333],{"class":54,"line":246},[52,111334,98626],{"class":62},[52,111336,111337],{"class":54,"line":252},[52,111338,116],{"emptyLinePlaceholder":115},[52,111340,111341],{"class":54,"line":257},[52,111342,116],{"emptyLinePlaceholder":115},[52,111344,111345,111347,111349,111351,111353],{"class":54,"line":266},[52,111346,34879],{"class":160},[52,111348,4935],{"class":58},[52,111350,104318],{"class":622},[52,111352,98614],{"class":90},[52,111354,6698],{"class":622},[52,111356,111357,111359,111361,111363,111365],{"class":54,"line":4722},[52,111358,104327],{"class":622},[52,111360,2099],{"class":160},[52,111362,104332],{"class":622},[52,111364,104234],{"class":90},[52,111366,170],{"class":622},[52,111368,111369,111371,111373],{"class":54,"line":4727},[52,111370,104341],{"class":622},[52,111372,2099],{"class":160},[52,111374,104346],{"class":622},[52,111376,111377,111380,111382,111384,111386,111388,111390,111392,111394,111396,111398],{"class":54,"line":4741},[52,111378,111379],{"class":622},"    renderer ",[52,111381,2099],{"class":160},[52,111383,110794],{"class":622},[52,111385,27930],{"class":8172},[52,111387,2099],{"class":160},[52,111389,45274],{"class":90},[52,111391,15391],{"class":622},[52,111393,27926],{"class":8172},[52,111395,2099],{"class":160},[52,111397,110809],{"class":90},[52,111399,170],{"class":622},[52,111401,111402],{"class":54,"line":4746},[52,111403,116],{"emptyLinePlaceholder":115},[52,111405,111406,111408,111410,111412,111414,111416,111418],{"class":54,"line":5538},[52,111407,6160],{"class":160},[52,111409,104421],{"class":622},[52,111411,28988],{"class":160},[52,111413,35375],{"class":90},[52,111415,3121],{"class":622},[52,111417,3424],{"class":90},[52,111419,33718],{"class":622},[52,111421,111422],{"class":54,"line":5552},[52,111423,104436],{"class":622},[52,111425,111426],{"class":54,"line":5560},[52,111427,116],{"emptyLinePlaceholder":115},[52,111429,111430,111433,111436,111438,111441],{"class":54,"line":5565},[52,111431,111432],{"class":622},"    renderer.update_scene(data, ",[52,111434,111435],{"class":8172},"camera",[52,111437,2099],{"class":160},[52,111439,111440],{"class":62},"\"fixed_camera\"",[52,111442,170],{"class":622},[52,111444,111445,111448,111450],{"class":54,"line":5571},[52,111446,111447],{"class":622},"    image ",[52,111449,2099],{"class":160},[52,111451,110505],{"class":622},[52,111453,111454],{"class":54,"line":5577},[52,111455,116],{"emptyLinePlaceholder":115},[52,111457,111458,111461,111463,111466,111468],{"class":54,"line":5582},[52,111459,111460],{"class":622},"    output_path ",[52,111462,2099],{"class":160},[52,111464,111465],{"class":622}," Path(",[52,111467,110935],{"class":62},[52,111469,170],{"class":622},[52,111471,111472],{"class":54,"line":10904},[52,111473,111474],{"class":622},"    Image.fromarray(image).save(output_path)\n",[52,111476,111477],{"class":54,"line":10928},[52,111478,111479],{"class":622},"    renderer.close()\n",[52,111481,111482],{"class":54,"line":10933},[52,111483,116],{"emptyLinePlaceholder":115},[52,111485,111486,111488,111490,111493],{"class":54,"line":10939},[52,111487,34231],{"class":90},[52,111489,3121],{"class":622},[52,111491,111492],{"class":62},"\"saved:\"",[52,111494,111495],{"class":622},", output_path.resolve())\n",[52,111497,111498,111500,111502,111505],{"class":54,"line":10966},[52,111499,34231],{"class":90},[52,111501,3121],{"class":622},[52,111503,111504],{"class":62},"\"image shape:\"",[52,111506,111507],{"class":622},", image.shape)\n",[52,111509,111510],{"class":54,"line":10971},[52,111511,116],{"emptyLinePlaceholder":115},[52,111513,111514],{"class":54,"line":10977},[52,111515,116],{"emptyLinePlaceholder":115},[52,111517,111518,111520,111522,111524,111526],{"class":54,"line":10989},[52,111519,4509],{"class":160},[52,111521,34152],{"class":90},[52,111523,104479],{"class":160},[52,111525,104482],{"class":62},[52,111527,6698],{"class":622},[52,111529,111530],{"class":54,"line":11001},[52,111531,104489],{"class":622},[274,111533,106490],{},[19,111535,111537],{"className":26774,"code":111536,"language":26776,"meta":28,"style":28},"touch ch5_renderer.py\n",[26,111538,111539],{"__ignoreMap":28},[52,111540,111541,111543],{"class":54,"line":55},[52,111542,104203],{"class":58},[52,111544,111545],{"class":62}," ch5_renderer.py\n",[30,111547,104492],{"id":104492},[274,111549,111550],{},"viewer 上下文：",[19,111552,111554],{"className":33310,"code":111553,"language":33312,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[26,111555,111556],{"__ignoreMap":28},[52,111557,111558,111560,111562,111564],{"class":54,"line":55},[52,111559,110753],{"class":160},[52,111561,110756],{"class":622},[52,111563,34315],{"class":160},[52,111565,110761],{"class":622},[274,111567,111568,111570],{},[26,111569,110753],{}," 语句会创建窗口，并在退出时自动清理资源。",[274,111572,111573],{},"窗口循环：",[19,111575,111577],{"className":33310,"code":111576,"language":33312,"meta":28,"style":28},"while viewer.is_running() and data.time \u003C 5.0:\n",[26,111578,111579],{"__ignoreMap":28},[52,111580,111581,111584,111586,111588,111590,111592,111594],{"class":54,"line":55},[52,111582,111583],{"class":160},"while",[52,111585,111107],{"class":622},[52,111587,33394],{"class":160},[52,111589,111112],{"class":622},[52,111591,4022],{"class":160},[52,111593,111117],{"class":90},[52,111595,6698],{"class":622},[274,111597,111598],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[274,111600,111601],{},"固定相机：",[19,111603,111605],{"className":55997,"code":111604,"language":55999,"meta":28,"style":28},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[26,111606,111607],{"__ignoreMap":28},[52,111608,111609,111611,111613,111615,111617,111619,111621,111623,111626,111629,111631,111634],{"class":54,"line":55},[52,111610,4022],{"class":622},[52,111612,111435],{"class":54231},[52,111614,17876],{"class":58},[52,111616,2099],{"class":622},[52,111618,111440],{"class":62},[52,111620,104028],{"class":58},[52,111622,2099],{"class":622},[52,111624,111625],{"class":62},"\"1.5 -2.0 1.2\"",[52,111627,111628],{"class":58}," xyaxes",[52,111630,2099],{"class":622},[52,111632,111633],{"class":62},"\"1 0.75 0 0 0 1\"",[52,111635,104066],{"class":622},[274,111637,111638],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[30,111640,111642],{"id":111641},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[19,111644,111646],{"className":33310,"code":111645,"language":33312,"meta":28,"style":28},"import time\n",[26,111647,111648],{"__ignoreMap":28},[52,111649,111650,111652],{"class":54,"line":55},[52,111651,33324],{"class":160},[52,111653,34761],{"class":622},[274,111655,111656],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[19,111658,111660],{"className":33310,"code":111659,"language":33312,"meta":28,"style":28},"import mujoco\nimport mujoco.viewer\n",[26,111661,111662,111668],{"__ignoreMap":28},[52,111663,111664,111666],{"class":54,"line":55},[52,111665,33324],{"class":160},[52,111667,104221],{"class":622},[52,111669,111670,111672],{"class":54,"line":69},[52,111671,33324],{"class":160},[52,111673,110472],{"class":622},[274,111675,111676],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[19,111678,111679],{"className":33310,"code":111553,"language":33312,"meta":28,"style":28},[26,111680,111681],{"__ignoreMap":28},[52,111682,111683,111685,111687,111689],{"class":54,"line":55},[52,111684,110753],{"class":160},[52,111686,110756],{"class":622},[52,111688,34315],{"class":160},[52,111690,110761],{"class":622},[274,111692,111693,111694,111697],{},"打开一个 viewer 窗口。",[26,111695,111696],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[19,111699,111700],{"className":33310,"code":111576,"language":33312,"meta":28,"style":28},[26,111701,111702],{"__ignoreMap":28},[52,111703,111704,111706,111708,111710,111712,111714,111716],{"class":54,"line":55},[52,111705,111583],{"class":160},[52,111707,111107],{"class":622},[52,111709,33394],{"class":160},[52,111711,111112],{"class":622},[52,111713,4022],{"class":160},[52,111715,111117],{"class":90},[52,111717,6698],{"class":622},[274,111719,111720,111721,111724],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[26,111722,111723],{},"viewer.is_running()"," 会变成 false，循环结束。",[19,111726,111728],{"className":33310,"code":111727,"language":33312,"meta":28,"style":28},"step_start = time.time()\n",[26,111729,111730],{"__ignoreMap":28},[52,111731,111732,111735,111737],{"class":54,"line":55},[52,111733,111734],{"class":622},"step_start ",[52,111736,2099],{"class":160},[52,111738,111129],{"class":622},[274,111740,111741],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[19,111743,111744],{"className":33310,"code":110838,"language":33312,"meta":28,"style":28},[26,111745,111746,111750],{"__ignoreMap":28},[52,111747,111748],{"class":54,"line":55},[52,111749,107425],{"class":622},[52,111751,111752],{"class":54,"line":69},[52,111753,110849],{"class":622},[274,111755,111756,111758,111759,111761,111762,111764,111765,111768],{},[26,111757,104137],{}," 推进物理仿真。",[26,111760,110857],{}," 把最新的 ",[26,111763,36333],{}," 同步到窗口里显示。没有 ",[26,111766,111767],{},"sync()","，窗口可能看不到最新状态。",[19,111770,111771],{"className":33310,"code":110868,"language":33312,"meta":28,"style":28},[26,111772,111773],{"__ignoreMap":28},[52,111774,111775,111777,111779,111781,111783,111785,111787],{"class":54,"line":55},[52,111776,110875],{"class":622},[52,111778,2099],{"class":160},[52,111780,110880],{"class":622},[52,111782,3644],{"class":160},[52,111784,110885],{"class":622},[52,111786,3644],{"class":160},[52,111788,110890],{"class":622},[274,111790,111791],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[19,111793,111795],{"className":33310,"code":111794,"language":33312,"meta":28,"style":28},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[26,111796,111797,111809],{"__ignoreMap":28},[52,111798,111799,111801,111803,111805,111807],{"class":54,"line":55},[52,111800,4509],{"class":160},[52,111802,111167],{"class":622},[52,111804,4072],{"class":160},[52,111806,7052],{"class":90},[52,111808,6698],{"class":622},[52,111810,111811],{"class":54,"line":69},[52,111812,111813],{"class":622},"    time.sleep(sleep_time)\n",[274,111815,111816],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[30,111818,111820],{"id":111819},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[19,111822,111824],{"className":33310,"code":111823,"language":33312,"meta":28,"style":28},"from pathlib import Path\n",[26,111825,111826],{"__ignoreMap":28},[52,111827,111828,111830,111832,111834],{"class":54,"line":55},[52,111829,33669],{"class":160},[52,111831,111231],{"class":622},[52,111833,33324],{"class":160},[52,111835,111236],{"class":622},[274,111837,111838,111839,111842,111843,111846],{},"导入 ",[26,111840,111841],{},"Path","，用来处理文件路径。相比直接写字符串，",[26,111844,111845],{},"Path(\"render_output.png\")"," 更清晰。",[19,111848,111850],{"className":33310,"code":111849,"language":33312,"meta":28,"style":28},"from PIL import Image\n",[26,111851,111852],{"__ignoreMap":28},[52,111853,111854,111856,111858,111860],{"class":54,"line":55},[52,111855,33669],{"class":160},[52,111857,50195],{"class":90},[52,111859,50198],{"class":160},[52,111861,50201],{"class":622},[274,111863,111864],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[19,111866,111867],{"className":55997,"code":111604,"language":55999,"meta":28,"style":28},[26,111868,111869],{"__ignoreMap":28},[52,111870,111871,111873,111875,111877,111879,111881,111883,111885,111887,111889,111891,111893],{"class":54,"line":55},[52,111872,4022],{"class":622},[52,111874,111435],{"class":54231},[52,111876,17876],{"class":58},[52,111878,2099],{"class":622},[52,111880,111440],{"class":62},[52,111882,104028],{"class":58},[52,111884,2099],{"class":622},[52,111886,111625],{"class":62},[52,111888,111628],{"class":58},[52,111890,2099],{"class":622},[52,111892,111633],{"class":62},[52,111894,104066],{"class":622},[274,111896,111897,111898,111900,111901,111903,111904,111907,111908,111910],{},"定义一个相机。",[26,111899,82738],{}," 是相机名字。",[26,111902,107066],{}," 是相机在世界里的位置。",[26,111905,111906],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[26,111909,107066],{}," 来调视角。",[19,111912,111914],{"className":33310,"code":111913,"language":33312,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[26,111915,111916],{"__ignoreMap":28},[52,111917,111918,111920,111922,111924,111926,111928,111930,111932,111934,111936,111938],{"class":54,"line":55},[52,111919,110490],{"class":622},[52,111921,2099],{"class":160},[52,111923,110794],{"class":622},[52,111925,27930],{"class":8172},[52,111927,2099],{"class":160},[52,111929,45274],{"class":90},[52,111931,15391],{"class":622},[52,111933,27926],{"class":8172},[52,111935,2099],{"class":160},[52,111937,110809],{"class":90},[52,111939,170],{"class":622},[274,111941,111942,111943,103940,111945,111947],{},"创建离屏渲染器。",[26,111944,27930],{},[26,111946,27926],{}," 决定输出图片大小。",[19,111949,111950],{"className":33310,"code":104596,"language":33312,"meta":28,"style":28},[26,111951,111952,111968],{"__ignoreMap":28},[52,111953,111954,111956,111958,111960,111962,111964,111966],{"class":54,"line":55},[52,111955,5985],{"class":160},[52,111957,104421],{"class":622},[52,111959,28988],{"class":160},[52,111961,35375],{"class":90},[52,111963,3121],{"class":622},[52,111965,3424],{"class":90},[52,111967,33718],{"class":622},[52,111969,111970],{"class":54,"line":69},[52,111971,104619],{"class":622},[274,111973,111974],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[19,111976,111978],{"className":33310,"code":111977,"language":33312,"meta":28,"style":28},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[26,111979,111980],{"__ignoreMap":28},[52,111981,111982,111985,111987,111989,111991],{"class":54,"line":55},[52,111983,111984],{"class":622},"renderer.update_scene(data, ",[52,111986,111435],{"class":8172},[52,111988,2099],{"class":160},[52,111990,111440],{"class":62},[52,111992,170],{"class":622},[274,111994,111995,111996,111998,111999,112002],{},"告诉 renderer：用当前 ",[26,111997,36333],{}," 的状态更新画面，并使用名为 ",[26,112000,112001],{},"fixed_camera"," 的相机视角。",[19,112004,112005],{"className":33310,"code":110900,"language":33312,"meta":28,"style":28},[26,112006,112007],{"__ignoreMap":28},[52,112008,112009,112011,112013],{"class":54,"line":55},[52,112010,110500],{"class":622},[52,112012,2099],{"class":160},[52,112014,110505],{"class":622},[274,112016,112017,112018,112021],{},"真正渲染出图像。",[26,112019,112020],{},"image"," 是一个 NumPy 数组，不是文件。",[19,112023,112025],{"className":33310,"code":112024,"language":33312,"meta":28,"style":28},"Image.fromarray(image).save(output_path)\n",[26,112026,112027],{"__ignoreMap":28},[52,112028,112029],{"class":54,"line":55},[52,112030,112024],{"class":622},[274,112032,112033,112034,31319],{},"把数组转换成图片，并保存到 ",[26,112035,112036],{},"render_output.png",[19,112038,112040],{"className":33310,"code":112039,"language":33312,"meta":28,"style":28},"renderer.close()\n",[26,112041,112042],{"__ignoreMap":28},[52,112043,112044],{"class":54,"line":55},[52,112045,112039],{"class":622},[274,112047,112048],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,112050,105236],{"id":105235},[274,112052,112053,112054,112056,112057,31319],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[26,112055,112036],{},"，并输出图像数组形状，例如 ",[26,112058,112059],{},"(480, 640, 3)",[274,112061,112062],{},"如果图片里看不到方块，先检查：",[1070,112064,112065,112068,112071],{},[1073,112066,112067],{},"方块是否掉到相机视野外。",[1073,112069,112070],{},"camera 位置是否合理。",[1073,112072,112073,112074,112077],{},"是否在 ",[26,112075,112076],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,112079,105268],{"id":105267},[274,112081,112082],{},"运行 viewer:",[19,112084,112086],{"className":26774,"code":112085,"language":26776,"meta":28,"style":28},"python ch5_viewer.py\n",[26,112087,112088],{"__ignoreMap":28},[52,112089,112090,112092],{"class":54,"line":55},[52,112091,33312],{"class":58},[52,112093,111216],{"class":62},[274,112095,112096],{},"运行 renderer:",[19,112098,112100],{"className":26774,"code":112099,"language":26776,"meta":28,"style":28},"python ch5_renderer.py\n",[26,112101,112102],{"__ignoreMap":28},[52,112103,112104,112106],{"class":54,"line":55},[52,112105,33312],{"class":58},[52,112107,111545],{"class":62},[274,112109,112110],{},"如果在服务器上运行:",[19,112112,112114],{"className":26774,"code":112113,"language":26776,"meta":28,"style":28},"MUJOCO_GL=egl python ch5_renderer.py\n",[26,112115,112116],{"__ignoreMap":28},[52,112117,112118,112120,112122,112124,112127],{"class":54,"line":55},[52,112119,110734],{"class":622},[52,112121,2099],{"class":160},[52,112123,110724],{"class":62},[52,112125,112126],{"class":58}," python",[52,112128,111545],{"class":62},[274,112130,110702],{},[19,112132,112134],{"className":26774,"code":112133,"language":26776,"meta":28,"style":28},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[26,112135,112136],{"__ignoreMap":28},[52,112137,112138,112140,112142,112144,112146],{"class":54,"line":55},[52,112139,110734],{"class":622},[52,112141,2099],{"class":160},[52,112143,110728],{"class":62},[52,112145,112126],{"class":58},[52,112147,111545],{"class":62},[274,112149,112150],{},"再做几个练习：",[1070,112152,112153,112160,112163,112169],{},[1073,112154,112155,112156,112159],{},"把 renderer 分辨率改成 ",[26,112157,112158],{},"height=240, width=320","，观察输出 shape。",[1073,112161,112162],{},"把方块颜色改成蓝色，重新保存图片。",[1073,112164,112165,112166,112168],{},"把相机 ",[26,112167,107066],{}," 改远一点，观察画面中物体是否变小。",[1073,112170,112171,112172,105334,112175,112178],{},"把 viewer 示例中的 ",[26,112173,112174],{},"data.time \u003C 5.0",[26,112176,112177],{},"data.time \u003C 20.0","，观察更长时间。",[14,112180,105373],{"id":105372},[30,112182,112184],{"id":112183},"viewer-窗口打不开","viewer 窗口打不开",[274,112186,112187],{},"安装:",[19,112189,112191],{"className":26774,"code":112190,"language":26776,"meta":28,"style":28},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[26,112192,112193],{"__ignoreMap":28},[52,112194,112195,112197,112199,112201,112203,112205,112207,112209,112211,112213,112215],{"class":54,"line":55},[52,112196,59],{"class":58},[52,112198,2938],{"class":62},[52,112200,76],{"class":62},[52,112202,29340],{"class":90},[52,112204,105426],{"class":62},[52,112206,103762],{"class":62},[52,112208,105431],{"class":62},[52,112210,103775],{"class":62},[52,112212,103781],{"class":62},[52,112214,103772],{"class":62},[52,112216,112217],{"class":62}," libXinerama\n",[30,112219,112221],{"id":112220},"glfwerror",[26,112222,112223],{},"GLFWError",[274,112225,112226],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[30,112228,112230],{"id":112229},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[274,112232,112233,112234,85467,112236,112238],{},"尝试 ",[26,112235,103959],{},[26,112237,103962],{},"。可能存在版本差异。",[30,112240,112241],{"id":112241},"保存图片是黑的",[274,112243,105495],{},[1070,112245,112246,112249,112252,112262],{},[1073,112247,112248],{},"XML 里是否有 light。",[1073,112250,112251],{},"相机是否对着模型。",[1073,112253,112254,112255,112258,112259,31319],{},"是否先 ",[26,112256,112257],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[26,112260,112261],{},"renderer.render()",[1073,112263,112264],{},"物体是否已经掉出视野。",[30,112266,112267],{"id":112267},"远程服务器没有显示器",[274,112269,112270],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[19,112272,112273],{"className":26774,"code":112113,"language":26776,"meta":28,"style":28},[26,112274,112275],{"__ignoreMap":28},[52,112276,112277,112279,112281,112283,112285],{"class":54,"line":55},[52,112278,110734],{"class":622},[52,112280,2099],{"class":160},[52,112282,110724],{"class":62},[52,112284,112126],{"class":58},[52,112286,111545],{"class":62},[274,112288,112289],{},"如果 EGL 不可用，再尝试：",[19,112291,112292],{"className":26774,"code":112133,"language":26776,"meta":28,"style":28},[26,112293,112294],{"__ignoreMap":28},[52,112295,112296,112298,112300,112302,112304],{"class":54,"line":55},[52,112297,110734],{"class":622},[52,112299,2099],{"class":160},[52,112301,110728],{"class":62},[52,112303,112126],{"class":58},[52,112305,111545],{"class":62},[14,112307,105527],{"id":105526},[274,112309,112310],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1070,112312,112313,112316,112319],{},[1073,112314,112315],{},"先用 viewer 看模型和控制是否正常。",[1073,112317,112318],{},"再用 renderer 保存图片或构造视觉观测。",[1073,112320,112321],{},"最后把状态、动作、图像、奖励组织成训练数据。",[3015,112323,112324],{},"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":28,"searchDepth":69,"depth":69,"links":112326},[112327,112328,112329,112334,112339,112340,112341,112348],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":112330},[112331,112332,112333],{"id":110831,"depth":82,"text":110832},{"id":110861,"depth":82,"text":110862},{"id":110896,"depth":82,"text":110897},{"id":104174,"depth":69,"text":104175,"children":112335},[112336,112337,112338],{"id":104492,"depth":82,"text":104492},{"id":111641,"depth":82,"text":111642},{"id":111819,"depth":82,"text":111820},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":112342},[112343,112344,112345,112346,112347],{"id":112183,"depth":82,"text":112184},{"id":112220,"depth":82,"text":112223},{"id":112229,"depth":82,"text":112230},{"id":112241,"depth":82,"text":112241},{"id":112267,"depth":82,"text":112267},{"id":105526,"depth":69,"text":105527},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":110439,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":112355,"title":112356,"body":112357,"description":28,"extension":3047,"meta":114268,"navigation":115,"path":114269,"seo":114270,"stem":114271,"__hash__":114272},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":112358,"toc":114244},[112359,112362,112364,112367,112369,112388,112391,112397,112400,112402,112404,112428,112430,112444,112446,112487,112489,112500,112502,112505,112511,112514,112548,112551,112583,112586,112618,112622,112625,112665,112668,112674,112677,112683,112687,112690,112696,112699,112703,112706,112746,112748,112761,112764,112766,113348,113350,113362,113365,113376,113378,113381,113400,113412,113415,113436,113439,113442,113485,113488,113491,113511,113518,113520,113538,113553,113556,113562,113565,113571,113588,113595,113626,113637,113671,113682,113699,113708,113716,113721,113735,113738,113759,113765,113779,113784,113814,113824,113849,113857,113880,113883,113899,113902,113910,113916,113938,113951,113972,113981,114020,114031,114033,114036,114042,114045,114048,114054,114057,114077,114080,114082,114121,114123,114126,114134,114137,114140,114167,114170,114180,114186,114189,114195,114197,114203,114207,114210,114212,114215,114239,114242],[10,112360,112356],{"id":112361},"_6控制任务cartpole",[14,112363,103575],{"id":103574},[274,112365,112366],{},"本章搭建一个最小 Cartpole 控制任务。",[274,112368,107251],{},[1070,112370,112371,112374,112376,112379,112382,112385],{},[1073,112372,112373],{},"slide joint",[1073,112375,109104],{},[1073,112377,112378],{},"cart force actuator",[1073,112380,112381],{},"状态观测",[1073,112383,112384],{},"简单控制循环",[1073,112386,112387],{},"reward 设计雏形",[274,112389,112390],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[19,112392,112395],{"className":112393,"code":112394,"language":24,"meta":28},[22],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[26,112396,112394],{"__ignoreMap":28},[274,112398,112399],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,112401,103698],{"id":103697},[274,112403,103701],{},[19,112405,112406],{"className":26774,"code":107308,"language":26776,"meta":28,"style":28},[26,112407,112408],{"__ignoreMap":28},[52,112409,112410,112412,112414,112416,112418,112420,112422,112424,112426],{"class":54,"line":55},[52,112411,59],{"class":58},[52,112413,2938],{"class":62},[52,112415,76],{"class":62},[52,112417,29340],{"class":90},[52,112419,107323],{"class":62},[52,112421,103726],{"class":62},[52,112423,105421],{"class":62},[52,112425,103742],{"class":62},[52,112427,107332],{"class":62},[274,112429,105739],{},[19,112431,112432],{"className":26774,"code":103841,"language":26776,"meta":28,"style":28},[26,112433,112434],{"__ignoreMap":28},[52,112435,112436,112438,112440,112442],{"class":54,"line":55},[52,112437,26783],{"class":58},[52,112439,76],{"class":62},[52,112441,103852],{"class":62},[52,112443,103855],{"class":62},[274,112445,105756],{},[19,112447,112449],{"className":26774,"code":112448,"language":26776,"meta":28,"style":28},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[26,112450,112451,112468,112477],{"__ignoreMap":28},[52,112452,112453,112455,112457,112459,112462,112464,112466],{"class":54,"line":55},[52,112454,33262],{"class":58},[52,112456,32110],{"class":62},[52,112458,28061],{"class":90},[52,112460,112461],{"class":62}," mujoco-cartpole",[52,112463,103897],{"class":62},[52,112465,103900],{"class":90},[52,112467,103903],{"class":90},[52,112469,112470,112472,112474],{"class":54,"line":69},[52,112471,33262],{"class":58},[52,112473,103910],{"class":62},[52,112475,112476],{"class":62}," mujoco-cartpole\n",[52,112478,112479,112481,112483,112485],{"class":54,"line":82},[52,112480,26783],{"class":58},[52,112482,76],{"class":62},[52,112484,103852],{"class":62},[52,112486,103855],{"class":62},[274,112488,103926],{},[1070,112490,112491,112494,112497],{},[1073,112492,112493],{},"本章不依赖 Gymnasium。",[1073,112495,112496],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[1073,112498,112499],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,112501,103967],{"id":103966},[274,112503,112504],{},"Cartpole 的模型结构:",[19,112506,112509],{"className":112507,"code":112508,"language":24,"meta":28},[22],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[26,112510,112508],{"__ignoreMap":28},[274,112512,112513],{},"小车通过 slide joint 左右移动:",[19,112515,112517],{"className":55997,"code":112516,"language":55999,"meta":28,"style":28},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[26,112518,112519],{"__ignoreMap":28},[52,112520,112521,112523,112525,112527,112529,112532,112534,112536,112539,112541,112543,112546],{"class":54,"line":55},[52,112522,4022],{"class":622},[52,112524,105876],{"class":54231},[52,112526,17876],{"class":58},[52,112528,2099],{"class":622},[52,112530,112531],{"class":62},"\"cart_x\"",[52,112533,56754],{"class":58},[52,112535,2099],{"class":622},[52,112537,112538],{"class":62},"\"slide\"",[52,112540,108948],{"class":58},[52,112542,2099],{"class":622},[52,112544,112545],{"class":62},"\"1 0 0\"",[52,112547,104066],{"class":622},[274,112549,112550],{},"杆子通过 hinge joint 旋转:",[19,112552,112554],{"className":55997,"code":112553,"language":55999,"meta":28,"style":28},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[26,112555,112556],{"__ignoreMap":28},[52,112557,112558,112560,112562,112564,112566,112569,112571,112573,112575,112577,112579,112581],{"class":54,"line":55},[52,112559,4022],{"class":622},[52,112561,105876],{"class":54231},[52,112563,17876],{"class":58},[52,112565,2099],{"class":622},[52,112567,112568],{"class":62},"\"pole_hinge\"",[52,112570,56754],{"class":58},[52,112572,2099],{"class":622},[52,112574,108939],{"class":62},[52,112576,108948],{"class":58},[52,112578,2099],{"class":622},[52,112580,108953],{"class":62},[52,112582,104066],{"class":622},[274,112584,112585],{},"控制力作用在小车 slide joint 上:",[19,112587,112589],{"className":55997,"code":112588,"language":55999,"meta":28,"style":28},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[26,112590,112591],{"__ignoreMap":28},[52,112592,112593,112595,112597,112599,112601,112604,112606,112608,112610,112612,112614,112616],{"class":54,"line":55},[52,112594,4022],{"class":622},[52,112596,108994],{"class":54231},[52,112598,17876],{"class":58},[52,112600,2099],{"class":622},[52,112602,112603],{"class":62},"\"cart_motor\"",[52,112605,109004],{"class":58},[52,112607,2099],{"class":622},[52,112609,112531],{"class":62},[52,112611,109011],{"class":58},[52,112613,2099],{"class":622},[52,112615,57246],{"class":62},[52,112617,104066],{"class":622},[30,112619,112621],{"id":112620},"cartpole-的状态是什么","Cartpole 的状态是什么",[274,112623,112624],{},"这个简化模型有两个关节：",[3253,112626,112627,112638],{},[3256,112628,112629],{},[3259,112630,112631,112633,112635],{},[3262,112632,105679],{"align":26688},[3262,112634,26689],{"align":26688},[3262,112636,112637],{"align":26688},"对应状态",[3299,112639,112640,112653],{},[3259,112641,112642,112647,112650],{},[3304,112643,112644],{"align":26688},[26,112645,112646],{},"cart_x",[3304,112648,112649],{"align":26688},"slide",[3304,112651,112652],{"align":26688},"小车 x 位置",[3259,112654,112655,112660,112662],{},[3304,112656,112657],{"align":26688},[26,112658,112659],{},"pole_hinge",[3304,112661,108760],{"align":26688},[3304,112663,112664],{"align":26688},"杆子角度",[274,112666,112667],{},"所以：",[19,112669,112672],{"className":112670,"code":112671,"language":24,"meta":28},[22],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[26,112673,112671],{"__ignoreMap":28},[274,112675,112676],{},"把它们拼起来就是观测：",[19,112678,112681],{"className":112679,"code":112680,"language":24,"meta":28},[22],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,112682,112680],{"__ignoreMap":28},[30,112684,112686],{"id":112685},"action-是什么","action 是什么",[274,112688,112689],{},"本章只有一个 actuator：",[19,112691,112694],{"className":112692,"code":112693,"language":24,"meta":28},[22],"data.ctrl[0] = action\n",[26,112695,112693],{"__ignoreMap":28},[274,112697,112698],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[30,112700,112702],{"id":112701},"reward-是什么","reward 是什么",[274,112704,112705],{},"奖励函数：",[19,112707,112709],{"className":33310,"code":112708,"language":33312,"meta":28,"style":28},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[26,112710,112711],{"__ignoreMap":28},[52,112712,112713,112715,112718,112720,112722,112724,112727,112729,112732,112734,112736,112738,112741,112743],{"class":54,"line":55},[52,112714,20002],{"class":160},[52,112716,112717],{"class":90}," float",[52,112719,3121],{"class":622},[52,112721,105323],{"class":90},[52,112723,1989],{"class":160},[52,112725,112726],{"class":90}," 0.1",[52,112728,9474],{"class":160},[52,112730,112731],{"class":622}," cart_x ",[52,112733,1095],{"class":160},[52,112735,112731],{"class":622},[52,112737,3644],{"class":160},[52,112739,112740],{"class":622}," pole_angle ",[52,112742,1095],{"class":160},[52,112744,112745],{"class":622}," pole_angle)\n",[274,112747,109146],{},[1070,112749,112750,112755,112758],{},[1073,112751,112752,112753,31319],{},"基础奖励是 ",[26,112754,105323],{},[1073,112756,112757],{},"小车离中心越远，扣分越多。",[1073,112759,112760],{},"杆子角度越大，扣分越多。",[274,112762,112763],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112765,104175],{"id":104174},[19,112767,112769],{"className":33310,"code":112768,"language":33312,"meta":28,"style":28},"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",[26,112770,112771,112777,112787,112791,112795,112803,112808,112812,112816,112820,112825,112829,112834,112839,112844,112848,112853,112858,112863,112867,112871,112875,112879,112883,112888,112892,112896,112900,112904,112908,112918,112925,112929,112933,112947,112961,112974,113004,113008,113012,113024,113036,113044,113048,113061,113065,113069,113078,113082,113098,113108,113121,113134,113138,113161,113179,113183,113195,113199,113203,113213,113223,113227,113243,113284,113288,113308,113324,113328,113332,113344],{"__ignoreMap":28},[52,112772,112773,112775],{"class":54,"line":55},[52,112774,33324],{"class":160},[52,112776,104221],{"class":622},[52,112778,112779,112781,112783,112785],{"class":54,"line":69},[52,112780,33324],{"class":160},[52,112782,34312],{"class":622},[52,112784,34315],{"class":160},[52,112786,34318],{"class":622},[52,112788,112789],{"class":54,"line":82},[52,112790,116],{"emptyLinePlaceholder":115},[52,112792,112793],{"class":54,"line":97},[52,112794,116],{"emptyLinePlaceholder":115},[52,112796,112797,112799,112801],{"class":54,"line":112},[52,112798,104234],{"class":90},[52,112800,16520],{"class":160},[52,112802,104239],{"class":62},[52,112804,112805],{"class":54,"line":119},[52,112806,112807],{"class":62},"\u003Cmujoco model=\"cartpole\">\n",[52,112809,112810],{"class":54,"line":130},[52,112811,104249],{"class":62},[52,112813,112814],{"class":54,"line":136},[52,112815,116],{"emptyLinePlaceholder":115},[52,112817,112818],{"class":54,"line":141},[52,112819,104258],{"class":62},[52,112821,112822],{"class":54,"line":146},[52,112823,112824],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[52,112826,112827],{"class":54,"line":152},[52,112828,116],{"emptyLinePlaceholder":115},[52,112830,112831],{"class":54,"line":157},[52,112832,112833],{"class":62},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[52,112835,112836],{"class":54,"line":173},[52,112837,112838],{"class":62},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[52,112840,112841],{"class":54,"line":178},[52,112842,112843],{"class":62},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[52,112845,112846],{"class":54,"line":184},[52,112847,116],{"emptyLinePlaceholder":115},[52,112849,112850],{"class":54,"line":189},[52,112851,112852],{"class":62},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[52,112854,112855],{"class":54,"line":201},[52,112856,112857],{"class":62},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[52,112859,112860],{"class":54,"line":206},[52,112861,112862],{"class":62},"        \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",[52,112864,112865],{"class":54,"line":224},[52,112866,109358],{"class":62},[52,112868,112869],{"class":54,"line":229},[52,112870,104287],{"class":62},[52,112872,112873],{"class":54,"line":241},[52,112874,104292],{"class":62},[52,112876,112877],{"class":54,"line":246},[52,112878,116],{"emptyLinePlaceholder":115},[52,112880,112881],{"class":54,"line":252},[52,112882,109375],{"class":62},[52,112884,112885],{"class":54,"line":257},[52,112886,112887],{"class":62},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[52,112889,112890],{"class":54,"line":266},[52,112891,109385],{"class":62},[52,112893,112894],{"class":54,"line":4722},[52,112895,104297],{"class":62},[52,112897,112898],{"class":54,"line":4727},[52,112899,98626],{"class":62},[52,112901,112902],{"class":54,"line":4741},[52,112903,116],{"emptyLinePlaceholder":115},[52,112905,112906],{"class":54,"line":4746},[52,112907,116],{"emptyLinePlaceholder":115},[52,112909,112910,112912,112915],{"class":54,"line":5538},[52,112911,34879],{"class":160},[52,112913,112914],{"class":58}," get_observation",[52,112916,112917],{"class":622},"(data: mujoco.MjData) -> np.ndarray:\n",[52,112919,112920,112922],{"class":54,"line":5552},[52,112921,7049],{"class":160},[52,112923,112924],{"class":622}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[52,112926,112927],{"class":54,"line":5560},[52,112928,116],{"emptyLinePlaceholder":115},[52,112930,112931],{"class":54,"line":5565},[52,112932,116],{"emptyLinePlaceholder":115},[52,112934,112935,112937,112940,112943,112945],{"class":54,"line":5571},[52,112936,34879],{"class":160},[52,112938,112939],{"class":58}," compute_reward",[52,112941,112942],{"class":622},"(obs: np.ndarray) -> ",[52,112944,3159],{"class":90},[52,112946,6698],{"class":622},[52,112948,112949,112952,112954,112957,112959],{"class":54,"line":5577},[52,112950,112951],{"class":622},"    cart_x ",[52,112953,2099],{"class":160},[52,112955,112956],{"class":622}," obs[",[52,112958,3306],{"class":90},[52,112960,36178],{"class":622},[52,112962,112963,112966,112968,112970,112972],{"class":54,"line":5582},[52,112964,112965],{"class":622},"    pole_angle ",[52,112967,2099],{"class":160},[52,112969,112956],{"class":622},[52,112971,3332],{"class":90},[52,112973,36178],{"class":622},[52,112975,112976,112978,112980,112982,112984,112986,112988,112990,112992,112994,112996,112998,113000,113002],{"class":54,"line":10904},[52,112977,7049],{"class":160},[52,112979,112717],{"class":90},[52,112981,3121],{"class":622},[52,112983,105323],{"class":90},[52,112985,1989],{"class":160},[52,112987,112726],{"class":90},[52,112989,9474],{"class":160},[52,112991,112731],{"class":622},[52,112993,1095],{"class":160},[52,112995,112731],{"class":622},[52,112997,3644],{"class":160},[52,112999,112740],{"class":622},[52,113001,1095],{"class":160},[52,113003,112745],{"class":622},[52,113005,113006],{"class":54,"line":10928},[52,113007,116],{"emptyLinePlaceholder":115},[52,113009,113010],{"class":54,"line":10933},[52,113011,116],{"emptyLinePlaceholder":115},[52,113013,113014,113016,113018,113020,113022],{"class":54,"line":10939},[52,113015,34879],{"class":160},[52,113017,4935],{"class":58},[52,113019,104318],{"class":622},[52,113021,98614],{"class":90},[52,113023,6698],{"class":622},[52,113025,113026,113028,113030,113032,113034],{"class":54,"line":10966},[52,113027,104327],{"class":622},[52,113029,2099],{"class":160},[52,113031,104332],{"class":622},[52,113033,104234],{"class":90},[52,113035,170],{"class":622},[52,113037,113038,113040,113042],{"class":54,"line":10971},[52,113039,104341],{"class":622},[52,113041,2099],{"class":160},[52,113043,104346],{"class":622},[52,113045,113046],{"class":54,"line":10977},[52,113047,116],{"emptyLinePlaceholder":115},[52,113049,113050,113052,113054,113056,113058],{"class":54,"line":10989},[52,113051,107989],{"class":622},[52,113053,3332],{"class":90},[52,113055,7402],{"class":622},[52,113057,2099],{"class":160},[52,113059,113060],{"class":90}," 0.1\n",[52,113062,113063],{"class":54,"line":11001},[52,113064,108002],{"class":622},[52,113066,113067],{"class":54,"line":11013},[52,113068,116],{"emptyLinePlaceholder":115},[52,113070,113071,113074,113076],{"class":54,"line":12672},[52,113072,113073],{"class":622},"    total_reward ",[52,113075,2099],{"class":160},[52,113077,107681],{"class":90},[52,113079,113080],{"class":54,"line":12697},[52,113081,116],{"emptyLinePlaceholder":115},[52,113083,113084,113086,113088,113090,113092,113094,113096],{"class":54,"line":12720},[52,113085,6160],{"class":160},[52,113087,34548],{"class":622},[52,113089,28988],{"class":160},[52,113091,35375],{"class":90},[52,113093,3121],{"class":622},[52,113095,9366],{"class":90},[52,113097,33718],{"class":622},[52,113099,113100,113103,113105],{"class":54,"line":12744},[52,113101,113102],{"class":622},"        obs ",[52,113104,2099],{"class":160},[52,113106,113107],{"class":622}," get_observation(data)\n",[52,113109,113110,113113,113115,113117,113119],{"class":54,"line":12749},[52,113111,113112],{"class":622},"        pole_angle ",[52,113114,2099],{"class":160},[52,113116,112956],{"class":622},[52,113118,3332],{"class":90},[52,113120,36178],{"class":622},[52,113122,113123,113126,113128,113130,113132],{"class":54,"line":12754},[52,113124,113125],{"class":622},"        pole_angular_velocity ",[52,113127,2099],{"class":160},[52,113129,112956],{"class":622},[52,113131,3188],{"class":90},[52,113133,36178],{"class":622},[52,113135,113136],{"class":54,"line":12759},[52,113137,116],{"emptyLinePlaceholder":115},[52,113139,113140,113143,113145,113148,113150,113152,113154,113156,113158],{"class":54,"line":12768},[52,113141,113142],{"class":622},"        action ",[52,113144,2099],{"class":160},[52,113146,113147],{"class":90}," 2.0",[52,113149,9474],{"class":160},[52,113151,112740],{"class":622},[52,113153,3593],{"class":160},[52,113155,64797],{"class":90},[52,113157,9474],{"class":160},[52,113159,113160],{"class":622}," pole_angular_velocity\n",[52,113162,113163,113165,113167,113169,113171,113173,113175,113177],{"class":54,"line":12773},[52,113164,113142],{"class":622},[52,113166,2099],{"class":160},[52,113168,110367],{"class":622},[52,113170,3644],{"class":160},[52,113172,105323],{"class":90},[52,113174,15391],{"class":622},[52,113176,105323],{"class":90},[52,113178,170],{"class":622},[52,113180,113181],{"class":54,"line":12779},[52,113182,116],{"emptyLinePlaceholder":115},[52,113184,113185,113187,113189,113191,113193],{"class":54,"line":12800},[52,113186,109537],{"class":622},[52,113188,3306],{"class":90},[52,113190,7402],{"class":622},[52,113192,2099],{"class":160},[52,113194,110390],{"class":622},[52,113196,113197],{"class":54,"line":12806},[52,113198,104436],{"class":622},[52,113200,113201],{"class":54,"line":12820},[52,113202,116],{"emptyLinePlaceholder":115},[52,113204,113205,113208,113210],{"class":54,"line":12826},[52,113206,113207],{"class":622},"        reward ",[52,113209,2099],{"class":160},[52,113211,113212],{"class":622}," compute_reward(get_observation(data))\n",[52,113214,113215,113218,113220],{"class":54,"line":12853},[52,113216,113217],{"class":622},"        total_reward ",[52,113219,12433],{"class":160},[52,113221,113222],{"class":622}," reward\n",[52,113224,113225],{"class":54,"line":12862},[52,113226,116],{"emptyLinePlaceholder":115},[52,113228,113229,113231,113233,113235,113237,113239,113241],{"class":54,"line":12868},[52,113230,5458],{"class":160},[52,113232,34548],{"class":622},[52,113234,3441],{"class":160},[52,113236,8710],{"class":90},[52,113238,104479],{"class":160},[52,113240,7052],{"class":90},[52,113242,6698],{"class":622},[52,113244,113245,113247,113249,113252,113255,113258,113261,113263,113266,113269,113271,113273,113275,113277,113280,113282],{"class":54,"line":12876},[52,113246,37582],{"class":90},[52,113248,3121],{"class":622},[52,113250,113251],{"class":62},"\"step:\"",[52,113253,113254],{"class":622},", step, ",[52,113256,113257],{"class":62},"\"obs:\"",[52,113259,113260],{"class":622},", np.round(obs, ",[52,113262,3188],{"class":90},[52,113264,113265],{"class":622},"), ",[52,113267,113268],{"class":62},"\"action:\"",[52,113270,15391],{"class":622},[52,113272,34950],{"class":90},[52,113274,3121],{"class":622},[52,113276,3159],{"class":90},[52,113278,113279],{"class":622},"(action), ",[52,113281,3188],{"class":90},[52,113283,33429],{"class":622},[52,113285,113286],{"class":54,"line":12881},[52,113287,116],{"emptyLinePlaceholder":115},[52,113289,113290,113292,113294,113297,113299,113301,113304,113306],{"class":54,"line":19560},[52,113291,34231],{"class":90},[52,113293,3121],{"class":622},[52,113295,113296],{"class":62},"\"total_reward:\"",[52,113298,15391],{"class":622},[52,113300,34950],{"class":90},[52,113302,113303],{"class":622},"(total_reward, ",[52,113305,3188],{"class":90},[52,113307,33429],{"class":622},[52,113309,113310,113312,113314,113317,113320,113322],{"class":54,"line":19566},[52,113311,34231],{"class":90},[52,113313,3121],{"class":622},[52,113315,113316],{"class":62},"\"final obs:\"",[52,113318,113319],{"class":622},", np.round(get_observation(data), ",[52,113321,3188],{"class":90},[52,113323,33429],{"class":622},[52,113325,113326],{"class":54,"line":19589},[52,113327,116],{"emptyLinePlaceholder":115},[52,113329,113330],{"class":54,"line":19595},[52,113331,116],{"emptyLinePlaceholder":115},[52,113333,113334,113336,113338,113340,113342],{"class":54,"line":19618},[52,113335,4509],{"class":160},[52,113337,34152],{"class":90},[52,113339,104479],{"class":160},[52,113341,104482],{"class":62},[52,113343,6698],{"class":622},[52,113345,113346],{"class":54,"line":19632},[52,113347,104489],{"class":622},[274,113349,106490],{},[19,113351,113353],{"className":26774,"code":113352,"language":26776,"meta":28,"style":28},"touch ch6_cartpole.py\n",[26,113354,113355],{"__ignoreMap":28},[52,113356,113357,113359],{"class":54,"line":55},[52,113358,104203],{"class":58},[52,113360,113361],{"class":62}," ch6_cartpole.py\n",[274,113363,113364],{},"运行：",[19,113366,113368],{"className":26774,"code":113367,"language":26776,"meta":28,"style":28},"python ch6_cartpole.py\n",[26,113369,113370],{"__ignoreMap":28},[52,113371,113372,113374],{"class":54,"line":55},[52,113373,33312],{"class":58},[52,113375,113361],{"class":62},[30,113377,104492],{"id":104492},[274,113379,113380],{},"构造观测：",[19,113382,113384],{"className":33310,"code":113383,"language":33312,"meta":28,"style":28},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[26,113385,113386,113394],{"__ignoreMap":28},[52,113387,113388,113390,113392],{"class":54,"line":55},[52,113389,34879],{"class":160},[52,113391,112914],{"class":58},[52,113393,112917],{"class":622},[52,113395,113396,113398],{"class":54,"line":69},[52,113397,7049],{"class":160},[52,113399,112924],{"class":622},[274,113401,113402,113405,113406,113408,113409,113411],{},[26,113403,113404],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[26,113407,106950],{}," 2 维，",[26,113410,107280],{}," 2 维，所以 obs 是 4 维。",[274,113413,113414],{},"设置初始角度：",[19,113416,113418],{"className":33310,"code":113417,"language":33312,"meta":28,"style":28},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[26,113419,113420,113432],{"__ignoreMap":28},[52,113421,113422,113424,113426,113428,113430],{"class":54,"line":55},[52,113423,107619],{"class":622},[52,113425,3332],{"class":90},[52,113427,7402],{"class":622},[52,113429,2099],{"class":160},[52,113431,113060],{"class":90},[52,113433,113434],{"class":54,"line":69},[52,113435,107463],{"class":622},[274,113437,113438],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[274,113440,113441],{},"简单反馈控制：",[19,113443,113445],{"className":33310,"code":113444,"language":33312,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[26,113446,113447,113467],{"__ignoreMap":28},[52,113448,113449,113451,113453,113455,113457,113459,113461,113463,113465],{"class":54,"line":55},[52,113450,110362],{"class":622},[52,113452,2099],{"class":160},[52,113454,113147],{"class":90},[52,113456,9474],{"class":160},[52,113458,112740],{"class":622},[52,113460,3593],{"class":160},[52,113462,64797],{"class":90},[52,113464,9474],{"class":160},[52,113466,113160],{"class":622},[52,113468,113469,113471,113473,113475,113477,113479,113481,113483],{"class":54,"line":69},[52,113470,110362],{"class":622},[52,113472,2099],{"class":160},[52,113474,110367],{"class":622},[52,113476,3644],{"class":160},[52,113478,105323],{"class":90},[52,113480,15391],{"class":622},[52,113482,105323],{"class":90},[52,113484,170],{"class":622},[274,113486,113487],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[274,113489,113490],{},"限制动作：",[19,113492,113494],{"className":33310,"code":113493,"language":33312,"meta":28,"style":28},"np.clip(action, -1.0, 1.0)\n",[26,113495,113496],{"__ignoreMap":28},[52,113497,113498,113501,113503,113505,113507,113509],{"class":54,"line":55},[52,113499,113500],{"class":622},"np.clip(action, ",[52,113502,3644],{"class":160},[52,113504,105323],{"class":90},[52,113506,15391],{"class":622},[52,113508,105323],{"class":90},[52,113510,170],{"class":622},[274,113512,113513,113514,113517],{},"因为 XML 里 ",[26,113515,113516],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[30,113519,104628],{"id":104628},[19,113521,113522],{"className":33310,"code":113383,"language":33312,"meta":28,"style":28},[26,113523,113524,113532],{"__ignoreMap":28},[52,113525,113526,113528,113530],{"class":54,"line":55},[52,113527,34879],{"class":160},[52,113529,112914],{"class":58},[52,113531,112917],{"class":622},[52,113533,113534,113536],{"class":54,"line":69},[52,113535,7049],{"class":160},[52,113537,112924],{"class":622},[274,113539,113540,113541,113544,113545,113548,113549,113552],{},"这段定义了一个函数，用来获取当前观测。",[26,113542,113543],{},"data.qpos.copy()"," 是位置数组副本，",[26,113546,113547],{},"data.qvel.copy()"," 是速度数组副本。",[26,113550,113551],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[274,113554,113555],{},"在本章模型里：",[19,113557,113560],{"className":113558,"code":113559,"language":24,"meta":28},[22],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[26,113561,113559],{"__ignoreMap":28},[274,113563,113564],{},"所以返回的 obs 是：",[19,113566,113569],{"className":113567,"code":113568,"language":24,"meta":28},[22],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[26,113570,113568],{"__ignoreMap":28},[19,113572,113574],{"className":33310,"code":113573,"language":33312,"meta":28,"style":28},"def compute_reward(obs: np.ndarray) -> float:\n",[26,113575,113576],{"__ignoreMap":28},[52,113577,113578,113580,113582,113584,113586],{"class":54,"line":55},[52,113579,34879],{"class":160},[52,113581,112939],{"class":58},[52,113583,112942],{"class":622},[52,113585,3159],{"class":90},[52,113587,6698],{"class":622},[274,113589,113590,113591,113594],{},"这行定义奖励函数。输入是观测 ",[26,113592,113593],{},"obs","，输出是一个浮点数奖励。",[19,113596,113598],{"className":33310,"code":113597,"language":33312,"meta":28,"style":28},"cart_x = obs[0]\npole_angle = obs[1]\n",[26,113599,113600,113613],{"__ignoreMap":28},[52,113601,113602,113605,113607,113609,113611],{"class":54,"line":55},[52,113603,113604],{"class":622},"cart_x ",[52,113606,2099],{"class":160},[52,113608,112956],{"class":622},[52,113610,3306],{"class":90},[52,113612,36178],{"class":622},[52,113614,113615,113618,113620,113622,113624],{"class":54,"line":69},[52,113616,113617],{"class":622},"pole_angle ",[52,113619,2099],{"class":160},[52,113621,112956],{"class":622},[52,113623,3332],{"class":90},[52,113625,36178],{"class":622},[274,113627,113628,113629,113632,113633,113636],{},"数组索引从 0 开始。",[26,113630,113631],{},"obs[0]"," 是第一个元素，也就是小车位置。",[26,113634,113635],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[19,113638,113639],{"className":33310,"code":112708,"language":33312,"meta":28,"style":28},[26,113640,113641],{"__ignoreMap":28},[52,113642,113643,113645,113647,113649,113651,113653,113655,113657,113659,113661,113663,113665,113667,113669],{"class":54,"line":55},[52,113644,20002],{"class":160},[52,113646,112717],{"class":90},[52,113648,3121],{"class":622},[52,113650,105323],{"class":90},[52,113652,1989],{"class":160},[52,113654,112726],{"class":90},[52,113656,9474],{"class":160},[52,113658,112731],{"class":622},[52,113660,1095],{"class":160},[52,113662,112731],{"class":622},[52,113664,3644],{"class":160},[52,113666,112740],{"class":622},[52,113668,1095],{"class":160},[52,113670,112745],{"class":622},[274,113672,113673,113674,113677,113678,113681],{},"这行计算奖励。",[26,113675,113676],{},"cart_x * cart_x"," 是小车位置的平方，",[26,113679,113680],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[19,113683,113685],{"className":33310,"code":113684,"language":33312,"meta":28,"style":28},"data.qpos[1] = 0.1\n",[26,113686,113687],{"__ignoreMap":28},[52,113688,113689,113691,113693,113695,113697],{"class":54,"line":55},[52,113690,107619],{"class":622},[52,113692,3332],{"class":90},[52,113694,7402],{"class":622},[52,113696,2099],{"class":160},[52,113698,113060],{"class":90},[274,113700,113701,113702,113704,113705,113707],{},"手动设置杆子的初始角度。因为 ",[26,113703,108376],{}," 是小车位置，",[26,113706,108379],{}," 是杆子角度，所以这里改的是杆子。",[19,113709,113710],{"className":33310,"code":107463,"language":33312,"meta":28,"style":28},[26,113711,113712],{"__ignoreMap":28},[52,113713,113714],{"class":54,"line":55},[52,113715,107463],{"class":622},[274,113717,108422,113718,113720],{},[26,113719,106950],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[19,113722,113724],{"className":33310,"code":113723,"language":33312,"meta":28,"style":28},"total_reward = 0.0\n",[26,113725,113726],{"__ignoreMap":28},[52,113727,113728,113731,113733],{"class":54,"line":55},[52,113729,113730],{"class":622},"total_reward ",[52,113732,2099],{"class":160},[52,113734,107681],{"class":90},[274,113736,113737],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[19,113739,113741],{"className":33310,"code":113740,"language":33312,"meta":28,"style":28},"for step in range(1000):\n",[26,113742,113743],{"__ignoreMap":28},[52,113744,113745,113747,113749,113751,113753,113755,113757],{"class":54,"line":55},[52,113746,5985],{"class":160},[52,113748,34548],{"class":622},[52,113750,28988],{"class":160},[52,113752,35375],{"class":90},[52,113754,3121],{"class":622},[52,113756,9366],{"class":90},[52,113758,33718],{"class":622},[274,113760,113761,113762,113764],{},"循环 1000 步。",[26,113763,110054],{}," 是当前步数，从 0 到 999。",[19,113766,113768],{"className":33310,"code":113767,"language":33312,"meta":28,"style":28},"obs = get_observation(data)\n",[26,113769,113770],{"__ignoreMap":28},[52,113771,113772,113775,113777],{"class":54,"line":55},[52,113773,113774],{"class":622},"obs ",[52,113776,2099],{"class":160},[52,113778,113107],{"class":622},[274,113780,113781,113782,31319],{},"读取当前状态，保存到 ",[26,113783,113593],{},[19,113785,113787],{"className":33310,"code":113786,"language":33312,"meta":28,"style":28},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[26,113788,113789,113801],{"__ignoreMap":28},[52,113790,113791,113793,113795,113797,113799],{"class":54,"line":55},[52,113792,113617],{"class":622},[52,113794,2099],{"class":160},[52,113796,112956],{"class":622},[52,113798,3332],{"class":90},[52,113800,36178],{"class":622},[52,113802,113803,113806,113808,113810,113812],{"class":54,"line":69},[52,113804,113805],{"class":622},"pole_angular_velocity ",[52,113807,2099],{"class":160},[52,113809,112956],{"class":622},[52,113811,3188],{"class":90},[52,113813,36178],{"class":622},[274,113815,113816,113817,113820,113821,31319],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[26,113818,113819],{},"obs[3]","？因为 obs 的顺序是 ",[26,113822,113823],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[19,113825,113827],{"className":33310,"code":113826,"language":33312,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[26,113828,113829],{"__ignoreMap":28},[52,113830,113831,113833,113835,113837,113839,113841,113843,113845,113847],{"class":54,"line":55},[52,113832,110362],{"class":622},[52,113834,2099],{"class":160},[52,113836,113147],{"class":90},[52,113838,9474],{"class":160},[52,113840,112740],{"class":622},[52,113842,3593],{"class":160},[52,113844,64797],{"class":90},[52,113846,9474],{"class":160},[52,113848,113160],{"class":622},[274,113850,113851,113852,103940,113854,113856],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[26,113853,108180],{},[26,113855,38261],{}," 是人为设置的系数，不是固定公式。",[19,113858,113860],{"className":33310,"code":113859,"language":33312,"meta":28,"style":28},"action = np.clip(action, -1.0, 1.0)\n",[26,113861,113862],{"__ignoreMap":28},[52,113863,113864,113866,113868,113870,113872,113874,113876,113878],{"class":54,"line":55},[52,113865,110362],{"class":622},[52,113867,2099],{"class":160},[52,113869,110367],{"class":622},[52,113871,3644],{"class":160},[52,113873,105323],{"class":90},[52,113875,15391],{"class":622},[52,113877,105323],{"class":90},[52,113879,170],{"class":622},[274,113881,113882],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[19,113884,113885],{"className":33310,"code":112693,"language":33312,"meta":28,"style":28},[26,113886,113887],{"__ignoreMap":28},[52,113888,113889,113891,113893,113895,113897],{"class":54,"line":55},[52,113890,108791],{"class":622},[52,113892,3306],{"class":90},[52,113894,7402],{"class":622},[52,113896,2099],{"class":160},[52,113898,110390],{"class":622},[274,113900,113901],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[19,113903,113904],{"className":33310,"code":107425,"language":33312,"meta":28,"style":28},[26,113905,113906],{"__ignoreMap":28},[52,113907,113908],{"class":54,"line":55},[52,113909,107425],{"class":622},[274,113911,113912,113913,113915],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[26,113914,109046],{}," 计算小车和杆子的下一刻状态。",[19,113917,113919],{"className":33310,"code":113918,"language":33312,"meta":28,"style":28},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[26,113920,113921,113930],{"__ignoreMap":28},[52,113922,113923,113926,113928],{"class":54,"line":55},[52,113924,113925],{"class":622},"reward ",[52,113927,2099],{"class":160},[52,113929,113212],{"class":622},[52,113931,113932,113934,113936],{"class":54,"line":69},[52,113933,113730],{"class":622},[52,113935,12433],{"class":160},[52,113937,113222],{"class":622},[274,113939,113940,113941,113943,113944,113947,113948,31319],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[26,113942,12433],{}," 是简写，",[26,113945,113946],{},"total_reward += reward"," 等价于 ",[26,113949,113950],{},"total_reward = total_reward + reward",[19,113952,113954],{"className":33310,"code":113953,"language":33312,"meta":28,"style":28},"if step % 100 == 0:\n",[26,113955,113956],{"__ignoreMap":28},[52,113957,113958,113960,113962,113964,113966,113968,113970],{"class":54,"line":55},[52,113959,4509],{"class":160},[52,113961,34548],{"class":622},[52,113963,3441],{"class":160},[52,113965,8710],{"class":90},[52,113967,104479],{"class":160},[52,113969,7052],{"class":90},[52,113971,6698],{"class":622},[274,113973,113974,113976,113977,113980],{},[26,113975,3441],{}," 是取余数。",[26,113978,113979],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[19,113982,113984],{"className":33310,"code":113983,"language":33312,"meta":28,"style":28},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[26,113985,113986],{"__ignoreMap":28},[52,113987,113988,113990,113992,113994,113996,113998,114000,114002,114004,114006,114008,114010,114012,114014,114016,114018],{"class":54,"line":55},[52,113989,33347],{"class":90},[52,113991,3121],{"class":622},[52,113993,113251],{"class":62},[52,113995,113254],{"class":622},[52,113997,113257],{"class":62},[52,113999,113260],{"class":622},[52,114001,3188],{"class":90},[52,114003,113265],{"class":622},[52,114005,113268],{"class":62},[52,114007,15391],{"class":622},[52,114009,34950],{"class":90},[52,114011,3121],{"class":622},[52,114013,3159],{"class":90},[52,114015,113279],{"class":622},[52,114017,3188],{"class":90},[52,114019,33429],{"class":622},[274,114021,114022,114023,114026,114027,114030],{},"打印当前步数、观测和动作。",[26,114024,114025],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[26,114028,114029],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,114032,105236],{"id":105235},[274,114034,114035],{},"观测向量:",[19,114037,114040],{"className":114038,"code":114039,"language":24,"meta":28},[22],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[26,114041,114039],{"__ignoreMap":28},[274,114043,114044],{},"控制器是教学用的简单线性反馈，不保证最优。",[274,114046,114047],{},"每隔 100 步会打印一次：",[19,114049,114052],{"className":114050,"code":114051,"language":24,"meta":28},[22],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[26,114053,114051],{"__ignoreMap":28},[274,114055,114056],{},"重点观察：",[1070,114058,114059,114065,114070],{},[1073,114060,114061,114064],{},[26,114062,114063],{},"pole_angle"," 是否越来越大。",[1073,114066,114067,114069],{},[26,114068,112646],{}," 是否跑得太远。",[1073,114071,114072,114073,85467,114075,31319],{},"action 是否经常被 clip 到 ",[26,114074,106835],{},[26,114076,3332],{},[274,114078,114079],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,114081,105268],{"id":105267},[1070,114083,114084,114090,114093,114099,114109,114115,114118],{},[1073,114085,114086,114087,31319],{},"把初始角度改为 ",[26,114088,114089],{},"data.qpos[1] = 0.3",[1073,114091,114092],{},"重新运行，观察控制是否变差。",[1073,114094,114095,114096,114098],{},"把 actuator ",[26,114097,109987],{}," 改小。",[1073,114100,114101,114102,114105,114106,31319],{},"打印 ",[26,114103,114104],{},"model.nq, model.nv, model.nu","，应为 ",[26,114107,114108],{},"2 2 1",[1073,114110,114111,114112,114114],{},"把 reward 里的 ",[26,114113,113680],{}," 系数改大，观察总奖励变化。",[1073,114116,114117],{},"把控制器改成反号，观察杆子是否更容易倒。",[1073,114119,114120],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,114122,105373],{"id":105372},[30,114124,114125],{"id":114125},"杆子方向和预期不一致",[274,114127,105316,114128,114130,114131,114133],{},[26,114129,109159],{}," 和 capsule 的 ",[26,114132,106096],{},"，必要时用 viewer 可视化确认。",[30,114135,114136],{"id":114136},"控制器越控越倒",[274,114138,114139],{},"说明反馈符号可能反了，尝试:",[19,114141,114143],{"className":33310,"code":114142,"language":33312,"meta":28,"style":28},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[26,114144,114145],{"__ignoreMap":28},[52,114146,114147,114149,114151,114153,114155,114157,114159,114161,114163,114165],{"class":54,"line":55},[52,114148,110362],{"class":622},[52,114150,2099],{"class":160},[52,114152,1989],{"class":160},[52,114154,108180],{"class":90},[52,114156,9474],{"class":160},[52,114158,112740],{"class":622},[52,114160,3644],{"class":160},[52,114162,64797],{"class":90},[52,114164,9474],{"class":160},[52,114166,113160],{"class":622},[30,114168,114169],{"id":114169},"小车飞走",[274,114171,114172,114173,114175,114176,114179],{},"降低 ",[26,114174,109987],{}," 或缩小 ",[26,114177,114178],{},"action"," 的 clip 范围。",[30,114181,114183,114185],{"id":114182},"obs3-为什么是杆子角速度",[26,114184,113819],{}," 为什么是杆子角速度",[274,114187,114188],{},"因为这个模型里：",[19,114190,114193],{"className":114191,"code":114192,"language":24,"meta":28},[22],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[26,114194,114192],{"__ignoreMap":28},[274,114196,112667],{},[19,114198,114201],{"className":114199,"code":114200,"language":24,"meta":28},[22],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[26,114202,114200],{"__ignoreMap":28},[30,114204,114206],{"id":114205},"reward-变成负数是否错误","reward 变成负数是否错误",[274,114208,114209],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,114211,105527],{"id":105526},[274,114213,114214],{},"一个控制任务通常包含：",[1070,114216,114217,114220,114228,114233,114236],{},[1073,114218,114219],{},"模型：Cartpole 的 body、joint、actuator。",[1073,114221,114222,114223,3327,114225,114227],{},"观测：从 ",[26,114224,106950],{},[26,114226,107280],{}," 里取状态。",[1073,114229,114230,114231,31319],{},"动作：写入 ",[26,114232,103998],{},[1073,114234,114235],{},"奖励：根据任务目标打分。",[1073,114237,114238],{},"循环：obs -> action -> step -> reward。",[274,114240,114241],{},"这就是后面 Gymnasium 环境的基本骨架。",[3015,114243,107206],{},{"title":28,"searchDepth":69,"depth":69,"links":114245},[114246,114247,114248,114253,114257,114258,114259,114267],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":114249},[114250,114251,114252],{"id":112620,"depth":82,"text":112621},{"id":112685,"depth":82,"text":112686},{"id":112701,"depth":82,"text":112702},{"id":104174,"depth":69,"text":104175,"children":114254},[114255,114256],{"id":104492,"depth":82,"text":104492},{"id":104628,"depth":82,"text":104628},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":114260},[114261,114262,114263,114264,114266],{"id":114125,"depth":82,"text":114125},{"id":114136,"depth":82,"text":114136},{"id":114169,"depth":82,"text":114169},{"id":114182,"depth":82,"text":114265},"obs[3] 为什么是杆子角速度",{"id":114205,"depth":82,"text":114206},{"id":105526,"depth":69,"text":105527},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":112356,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":114274,"title":114275,"body":114276,"description":28,"extension":3047,"meta":116290,"navigation":115,"path":116291,"seo":116292,"stem":116293,"__hash__":116294},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":114277,"toc":116266},[114278,114281,114283,114286,114288,114305,114308,114311,114317,114320,114322,114324,114348,114350,114364,114366,114407,114409,114427,114429,114432,114438,114441,114469,114473,114479,114504,114507,114538,114545,114548,114551,114557,114560,114566,114569,114575,114579,114582,114607,114610,114612,115372,115374,115386,115388,115399,115401,115404,115421,115424,115426,115437,115440,115442,115488,115491,115504,115507,115589,115592,115594,115610,115620,115633,115636,115675,115685,115696,115706,115719,115722,115751,115754,115764,115767,115773,115790,115801,115803,115809,115826,115837,115858,115861,115873,115876,115897,115900,115908,115916,115933,115936,116005,116012,116020,116023,116036,116043,116045,116048,116054,116057,116060,116066,116072,116074,116114,116116,116122,116131,116134,116136,116156,116159,116162,116168,116172,116174,116201,116204,116207,116234,116240,116243,116246,116248,116251,116254,116260,116263],[10,114279,114275],{"id":114280},"_7控制任务reacher-机械臂到达目标",[14,114282,103575],{"id":103574},[274,114284,114285],{},"本章搭建一个二维两关节 reacher 任务。",[274,114287,107251],{},[1070,114289,114290,114293,114296,114299,114302],{},[1073,114291,114292],{},"两个 hinge joint",[1073,114294,114295],{},"两个 motor actuator",[1073,114297,114298],{},"site 作为末端点和目标点",[1073,114300,114301],{},"根据末端和目标距离设计 reward",[1073,114303,114304],{},"构造机械臂任务的基本形式",[274,114306,114307],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[274,114309,114310],{},"Reacher 任务可以理解为：",[19,114312,114315],{"className":114313,"code":114314,"language":24,"meta":28},[22],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[26,114316,114314],{"__ignoreMap":28},[274,114318,114319],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,114321,103698],{"id":103697},[274,114323,103701],{},[19,114325,114326],{"className":26774,"code":107308,"language":26776,"meta":28,"style":28},[26,114327,114328],{"__ignoreMap":28},[52,114329,114330,114332,114334,114336,114338,114340,114342,114344,114346],{"class":54,"line":55},[52,114331,59],{"class":58},[52,114333,2938],{"class":62},[52,114335,76],{"class":62},[52,114337,29340],{"class":90},[52,114339,107323],{"class":62},[52,114341,103726],{"class":62},[52,114343,105421],{"class":62},[52,114345,103742],{"class":62},[52,114347,107332],{"class":62},[274,114349,105739],{},[19,114351,114352],{"className":26774,"code":103841,"language":26776,"meta":28,"style":28},[26,114353,114354],{"__ignoreMap":28},[52,114355,114356,114358,114360,114362],{"class":54,"line":55},[52,114357,26783],{"class":58},[52,114359,76],{"class":62},[52,114361,103852],{"class":62},[52,114363,103855],{"class":62},[274,114365,105756],{},[19,114367,114369],{"className":26774,"code":114368,"language":26776,"meta":28,"style":28},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[26,114370,114371,114388,114397],{"__ignoreMap":28},[52,114372,114373,114375,114377,114379,114382,114384,114386],{"class":54,"line":55},[52,114374,33262],{"class":58},[52,114376,32110],{"class":62},[52,114378,28061],{"class":90},[52,114380,114381],{"class":62}," mujoco-reacher",[52,114383,103897],{"class":62},[52,114385,103900],{"class":90},[52,114387,103903],{"class":90},[52,114389,114390,114392,114394],{"class":54,"line":69},[52,114391,33262],{"class":58},[52,114393,103910],{"class":62},[52,114395,114396],{"class":62}," mujoco-reacher\n",[52,114398,114399,114401,114403,114405],{"class":54,"line":82},[52,114400,26783],{"class":58},[52,114402,76],{"class":62},[52,114404,103852],{"class":62},[52,114406,103855],{"class":62},[274,114408,103926],{},[1070,114410,114411,114414,114417],{},[1073,114412,114413],{},"本章使用低维状态，不使用图像输入。",[1073,114415,114416],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[1073,114418,114419,114420,3327,114422,3327,114424,114426],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[26,114421,106950],{},[26,114423,107280],{},[26,114425,106600],{}," 的方法一致。",[14,114428,103967],{"id":103966},[274,114430,114431],{},"Reacher 任务核心:",[19,114433,114436],{"className":114434,"code":114435,"language":24,"meta":28},[22],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[26,114437,114435],{"__ignoreMap":28},[274,114439,114440],{},"读取 site 世界坐标:",[19,114442,114444],{"className":33310,"code":114443,"language":33312,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[26,114445,114446,114459],{"__ignoreMap":28},[52,114447,114448,114450,114452,114454,114457],{"class":54,"line":55},[52,114449,106554],{"class":622},[52,114451,2099],{"class":160},[52,114453,106325],{"class":622},[52,114455,114456],{"class":62},"\"tip\"",[52,114458,170],{"class":622},[52,114460,114461,114464,114466],{"class":54,"line":69},[52,114462,114463],{"class":622},"tip_pos ",[52,114465,2099],{"class":160},[52,114467,114468],{"class":622}," data.site_xpos[site_id]\n",[30,114470,114472],{"id":114471},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[274,114474,114475,114476,114478],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[26,114477,106950],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[19,114480,114482],{"className":33310,"code":114481,"language":33312,"meta":28,"style":28},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[26,114483,114484,114494],{"__ignoreMap":28},[52,114485,114486,114489,114491],{"class":54,"line":55},[52,114487,114488],{"class":622},"tip ",[52,114490,2099],{"class":160},[52,114492,114493],{"class":622}," data.site_xpos[tip_site_id]\n",[52,114495,114496,114499,114501],{"class":54,"line":69},[52,114497,114498],{"class":622},"target ",[52,114500,2099],{"class":160},[52,114502,114503],{"class":622}," data.site_xpos[target_site_id]\n",[274,114505,114506],{},"这样 reward 就很容易写：",[19,114508,114510],{"className":33310,"code":114509,"language":33312,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[26,114511,114512,114527],{"__ignoreMap":28},[52,114513,114514,114517,114519,114522,114524],{"class":54,"line":55},[52,114515,114516],{"class":622},"dist ",[52,114518,2099],{"class":160},[52,114520,114521],{"class":622}," np.linalg.norm(tip ",[52,114523,3644],{"class":160},[52,114525,114526],{"class":622}," target)\n",[52,114528,114529,114531,114533,114535],{"class":54,"line":69},[52,114530,113925],{"class":622},[52,114532,2099],{"class":160},[52,114534,1989],{"class":160},[52,114536,114537],{"class":622},"dist\n",[274,114539,114540,114541,114544],{},"距离越小，",[26,114542,114543],{},"-dist"," 越接近 0，奖励越高。",[30,114546,114547],{"id":114547},"两关节机械臂的状态",[274,114549,114550],{},"这个模型有两个 hinge joint：",[19,114552,114555],{"className":114553,"code":114554,"language":24,"meta":28},[22],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[26,114556,114554],{"__ignoreMap":28},[274,114558,114559],{},"再加上末端和目标位置：",[19,114561,114564],{"className":114562,"code":114563,"language":24,"meta":28},[22],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[26,114565,114563],{"__ignoreMap":28},[274,114567,114568],{},"总维度：",[19,114570,114573],{"className":114571,"code":114572,"language":24,"meta":28},[22],"2 + 2 + 3 + 3 = 10\n",[26,114574,114572],{"__ignoreMap":28},[30,114576,114578],{"id":114577},"为什么-gravity-是-0","为什么 gravity 是 0",[274,114580,114581],{},"本章把重力设为：",[19,114583,114585],{"className":55997,"code":114584,"language":55999,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[26,114586,114587],{"__ignoreMap":28},[52,114588,114589,114591,114593,114595,114597,114599,114601,114603,114605],{"class":54,"line":55},[52,114590,4022],{"class":622},[52,114592,72095],{"class":54231},[52,114594,104116],{"class":58},[52,114596,2099],{"class":622},[52,114598,104121],{"class":62},[52,114600,104124],{"class":58},[52,114602,2099],{"class":622},[52,114604,106691],{"class":62},[52,114606,104066],{"class":622},[274,114608,114609],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,114611,104175],{"id":104174},[19,114613,114615],{"className":33310,"code":114614,"language":33312,"meta":28,"style":28},"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",[26,114616,114617,114623,114633,114637,114641,114649,114654,114659,114663,114667,114672,114677,114681,114686,114691,114696,114700,114705,114710,114715,114720,114724,114728,114732,114736,114740,114745,114750,114754,114758,114762,114766,114770,114785,114794,114806,114829,114836,114840,114844,114854,114868,114882,114889,114893,114897,114911,114923,114935,114948,114963,114980,114984,114988,115000,115012,115020,115028,115032,115048,115053,115066,115079,115094,115098,115133,115165,115169,115173,115182,115186,115202,115212,115223,115239,115255,115271,115287,115291,115309,115329,115348,115352,115356,115368],{"__ignoreMap":28},[52,114618,114619,114621],{"class":54,"line":55},[52,114620,33324],{"class":160},[52,114622,104221],{"class":622},[52,114624,114625,114627,114629,114631],{"class":54,"line":69},[52,114626,33324],{"class":160},[52,114628,34312],{"class":622},[52,114630,34315],{"class":160},[52,114632,34318],{"class":622},[52,114634,114635],{"class":54,"line":82},[52,114636,116],{"emptyLinePlaceholder":115},[52,114638,114639],{"class":54,"line":97},[52,114640,116],{"emptyLinePlaceholder":115},[52,114642,114643,114645,114647],{"class":54,"line":112},[52,114644,104234],{"class":90},[52,114646,16520],{"class":160},[52,114648,104239],{"class":62},[52,114650,114651],{"class":54,"line":119},[52,114652,114653],{"class":62},"\u003Cmujoco model=\"two_link_reacher\">\n",[52,114655,114656],{"class":54,"line":130},[52,114657,114658],{"class":62},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[52,114660,114661],{"class":54,"line":136},[52,114662,116],{"emptyLinePlaceholder":115},[52,114664,114665],{"class":54,"line":141},[52,114666,104258],{"class":62},[52,114668,114669],{"class":54,"line":146},[52,114670,114671],{"class":62},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[52,114673,114674],{"class":54,"line":152},[52,114675,114676],{"class":62},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[52,114678,114679],{"class":54,"line":157},[52,114680,116],{"emptyLinePlaceholder":115},[52,114682,114683],{"class":54,"line":173},[52,114684,114685],{"class":62},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[52,114687,114688],{"class":54,"line":178},[52,114689,114690],{"class":62},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[52,114692,114693],{"class":54,"line":184},[52,114694,114695],{"class":62},"      \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",[52,114697,114698],{"class":54,"line":189},[52,114699,116],{"emptyLinePlaceholder":115},[52,114701,114702],{"class":54,"line":201},[52,114703,114704],{"class":62},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[52,114706,114707],{"class":54,"line":206},[52,114708,114709],{"class":62},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[52,114711,114712],{"class":54,"line":224},[52,114713,114714],{"class":62},"        \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",[52,114716,114717],{"class":54,"line":229},[52,114718,114719],{"class":62},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[52,114721,114722],{"class":54,"line":241},[52,114723,109358],{"class":62},[52,114725,114726],{"class":54,"line":246},[52,114727,104287],{"class":62},[52,114729,114730],{"class":54,"line":252},[52,114731,104292],{"class":62},[52,114733,114734],{"class":54,"line":257},[52,114735,116],{"emptyLinePlaceholder":115},[52,114737,114738],{"class":54,"line":266},[52,114739,109375],{"class":62},[52,114741,114742],{"class":54,"line":4722},[52,114743,114744],{"class":62},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[52,114746,114747],{"class":54,"line":4727},[52,114748,114749],{"class":62},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[52,114751,114752],{"class":54,"line":4741},[52,114753,109385],{"class":62},[52,114755,114756],{"class":54,"line":4746},[52,114757,104297],{"class":62},[52,114759,114760],{"class":54,"line":5538},[52,114761,98626],{"class":62},[52,114763,114764],{"class":54,"line":5552},[52,114765,116],{"emptyLinePlaceholder":115},[52,114767,114768],{"class":54,"line":5560},[52,114769,116],{"emptyLinePlaceholder":115},[52,114771,114772,114774,114777,114780,114782],{"class":54,"line":5565},[52,114773,34879],{"class":160},[52,114775,114776],{"class":58}," site_position",[52,114778,114779],{"class":622},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[52,114781,4281],{"class":90},[52,114783,114784],{"class":622},") -> np.ndarray:\n",[52,114786,114787,114789,114791],{"class":54,"line":5571},[52,114788,106320],{"class":622},[52,114790,2099],{"class":160},[52,114792,114793],{"class":622}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[52,114795,114796,114798,114800,114802,114804],{"class":54,"line":5577},[52,114797,6060],{"class":160},[52,114799,106369],{"class":622},[52,114801,4022],{"class":160},[52,114803,7052],{"class":90},[52,114805,6698],{"class":622},[52,114807,114808,114810,114812,114814,114816,114819,114821,114823,114825,114827],{"class":54,"line":5582},[52,114809,106352],{"class":160},[52,114811,106355],{"class":90},[52,114813,3121],{"class":622},[52,114815,3170],{"class":160},[52,114817,114818],{"class":62},"\"site not found: ",[52,114820,4008],{"class":90},[52,114822,82738],{"class":622},[52,114824,4058],{"class":90},[52,114826,3364],{"class":62},[52,114828,170],{"class":622},[52,114830,114831,114833],{"class":54,"line":10904},[52,114832,7049],{"class":160},[52,114834,114835],{"class":622}," data.site_xpos[site_id].copy()\n",[52,114837,114838],{"class":54,"line":10928},[52,114839,116],{"emptyLinePlaceholder":115},[52,114841,114842],{"class":54,"line":10933},[52,114843,116],{"emptyLinePlaceholder":115},[52,114845,114846,114848,114851],{"class":54,"line":10939},[52,114847,34879],{"class":160},[52,114849,114850],{"class":58}," get_obs",[52,114852,114853],{"class":622},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[52,114855,114856,114859,114861,114864,114866],{"class":54,"line":10966},[52,114857,114858],{"class":622},"    tip ",[52,114860,2099],{"class":160},[52,114862,114863],{"class":622}," site_position(model, data, ",[52,114865,114456],{"class":62},[52,114867,170],{"class":622},[52,114869,114870,114873,114875,114877,114880],{"class":54,"line":10971},[52,114871,114872],{"class":622},"    target ",[52,114874,2099],{"class":160},[52,114876,114863],{"class":622},[52,114878,114879],{"class":62},"\"target\"",[52,114881,170],{"class":622},[52,114883,114884,114886],{"class":54,"line":10977},[52,114885,7049],{"class":160},[52,114887,114888],{"class":622}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[52,114890,114891],{"class":54,"line":10989},[52,114892,116],{"emptyLinePlaceholder":115},[52,114894,114895],{"class":54,"line":11001},[52,114896,116],{"emptyLinePlaceholder":115},[52,114898,114899,114901,114904,114907,114909],{"class":54,"line":11013},[52,114900,34879],{"class":160},[52,114902,114903],{"class":58}," reward",[52,114905,114906],{"class":622},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[52,114908,3159],{"class":90},[52,114910,6698],{"class":622},[52,114912,114913,114915,114917,114919,114921],{"class":54,"line":12672},[52,114914,114858],{"class":622},[52,114916,2099],{"class":160},[52,114918,114863],{"class":622},[52,114920,114456],{"class":62},[52,114922,170],{"class":622},[52,114924,114925,114927,114929,114931,114933],{"class":54,"line":12697},[52,114926,114872],{"class":622},[52,114928,2099],{"class":160},[52,114930,114863],{"class":622},[52,114932,114879],{"class":62},[52,114934,170],{"class":622},[52,114936,114937,114940,114942,114944,114946],{"class":54,"line":12720},[52,114938,114939],{"class":622},"    dist ",[52,114941,2099],{"class":160},[52,114943,114521],{"class":622},[52,114945,3644],{"class":160},[52,114947,114526],{"class":622},[52,114949,114950,114953,114955,114958,114960],{"class":54,"line":12744},[52,114951,114952],{"class":622},"    control_cost ",[52,114954,2099],{"class":160},[52,114956,114957],{"class":90}," 0.01",[52,114959,9474],{"class":160},[52,114961,114962],{"class":622}," np.sum(np.square(data.ctrl))\n",[52,114964,114965,114967,114969,114971,114973,114975,114977],{"class":54,"line":12749},[52,114966,7049],{"class":160},[52,114968,112717],{"class":90},[52,114970,3121],{"class":622},[52,114972,3644],{"class":160},[52,114974,114516],{"class":622},[52,114976,3644],{"class":160},[52,114978,114979],{"class":622}," control_cost)\n",[52,114981,114982],{"class":54,"line":12754},[52,114983,116],{"emptyLinePlaceholder":115},[52,114985,114986],{"class":54,"line":12759},[52,114987,116],{"emptyLinePlaceholder":115},[52,114989,114990,114992,114994,114996,114998],{"class":54,"line":12768},[52,114991,34879],{"class":160},[52,114993,4935],{"class":58},[52,114995,104318],{"class":622},[52,114997,98614],{"class":90},[52,114999,6698],{"class":622},[52,115001,115002,115004,115006,115008,115010],{"class":54,"line":12773},[52,115003,104327],{"class":622},[52,115005,2099],{"class":160},[52,115007,104332],{"class":622},[52,115009,104234],{"class":90},[52,115011,170],{"class":622},[52,115013,115014,115016,115018],{"class":54,"line":12779},[52,115015,104341],{"class":622},[52,115017,2099],{"class":160},[52,115019,104346],{"class":622},[52,115021,115022,115024,115026],{"class":54,"line":12800},[52,115023,113073],{"class":622},[52,115025,2099],{"class":160},[52,115027,107681],{"class":90},[52,115029,115030],{"class":54,"line":12806},[52,115031,116],{"emptyLinePlaceholder":115},[52,115033,115034,115036,115038,115040,115042,115044,115046],{"class":54,"line":12820},[52,115035,6160],{"class":160},[52,115037,34548],{"class":622},[52,115039,28988],{"class":160},[52,115041,35375],{"class":90},[52,115043,3121],{"class":622},[52,115045,68003],{"class":90},[52,115047,33718],{"class":622},[52,115049,115050],{"class":54,"line":12826},[52,115051,115052],{"class":622},"        mujoco.mj_forward(model, data)\n",[52,115054,115055,115058,115060,115062,115064],{"class":54,"line":12853},[52,115056,115057],{"class":622},"        tip ",[52,115059,2099],{"class":160},[52,115061,114863],{"class":622},[52,115063,114456],{"class":62},[52,115065,170],{"class":622},[52,115067,115068,115071,115073,115075,115077],{"class":54,"line":12862},[52,115069,115070],{"class":622},"        target ",[52,115072,2099],{"class":160},[52,115074,114863],{"class":622},[52,115076,114879],{"class":62},[52,115078,170],{"class":622},[52,115080,115081,115084,115086,115089,115091],{"class":54,"line":12868},[52,115082,115083],{"class":622},"        error ",[52,115085,2099],{"class":160},[52,115087,115088],{"class":622}," target ",[52,115090,3644],{"class":160},[52,115092,115093],{"class":622}," tip\n",[52,115095,115096],{"class":54,"line":12876},[52,115097,116],{"emptyLinePlaceholder":115},[52,115099,115100,115102,115104,115106,115108,115111,115113,115115,115118,115120,115123,115125,115127,115129,115131],{"class":54,"line":12881},[52,115101,109537],{"class":622},[52,115103,3306],{"class":90},[52,115105,7402],{"class":622},[52,115107,2099],{"class":160},[52,115109,115110],{"class":622}," np.clip(",[52,115112,108180],{"class":90},[52,115114,9474],{"class":160},[52,115116,115117],{"class":622}," error[",[52,115119,3194],{"class":90},[52,115121,115122],{"class":622},"], ",[52,115124,3644],{"class":160},[52,115126,105323],{"class":90},[52,115128,15391],{"class":622},[52,115130,105323],{"class":90},[52,115132,170],{"class":622},[52,115134,115135,115137,115139,115141,115143,115145,115147,115149,115151,115153,115155,115157,115159,115161,115163],{"class":54,"line":19560},[52,115136,109537],{"class":622},[52,115138,3332],{"class":90},[52,115140,7402],{"class":622},[52,115142,2099],{"class":160},[52,115144,115110],{"class":622},[52,115146,108180],{"class":90},[52,115148,9474],{"class":160},[52,115150,115117],{"class":622},[52,115152,3306],{"class":90},[52,115154,115122],{"class":622},[52,115156,3644],{"class":160},[52,115158,105323],{"class":90},[52,115160,15391],{"class":622},[52,115162,105323],{"class":90},[52,115164,170],{"class":622},[52,115166,115167],{"class":54,"line":19566},[52,115168,116],{"emptyLinePlaceholder":115},[52,115170,115171],{"class":54,"line":19589},[52,115172,104436],{"class":622},[52,115174,115175,115177,115179],{"class":54,"line":19595},[52,115176,113217],{"class":622},[52,115178,12433],{"class":160},[52,115180,115181],{"class":622}," reward(model, data)\n",[52,115183,115184],{"class":54,"line":19618},[52,115185,116],{"emptyLinePlaceholder":115},[52,115187,115188,115190,115192,115194,115196,115198,115200],{"class":54,"line":19632},[52,115189,5458],{"class":160},[52,115191,34548],{"class":622},[52,115193,3441],{"class":160},[52,115195,8710],{"class":90},[52,115197,104479],{"class":160},[52,115199,7052],{"class":90},[52,115201,6698],{"class":622},[52,115203,115204,115207,115209],{"class":54,"line":19652},[52,115205,115206],{"class":622},"            obs ",[52,115208,2099],{"class":160},[52,115210,115211],{"class":622}," get_obs(model, data)\n",[52,115213,115214,115216,115218,115220],{"class":54,"line":19658},[52,115215,37582],{"class":90},[52,115217,3121],{"class":622},[52,115219,113251],{"class":62},[52,115221,115222],{"class":622},", step)\n",[52,115224,115225,115227,115229,115232,115235,115237],{"class":54,"line":19669},[52,115226,37582],{"class":90},[52,115228,3121],{"class":622},[52,115230,115231],{"class":62},"\"  tip:\"",[52,115233,115234],{"class":622},", np.round(tip, ",[52,115236,3188],{"class":90},[52,115238,33429],{"class":622},[52,115240,115241,115243,115245,115248,115251,115253],{"class":54,"line":19692},[52,115242,37582],{"class":90},[52,115244,3121],{"class":622},[52,115246,115247],{"class":62},"\"  target:\"",[52,115249,115250],{"class":622},", np.round(target, ",[52,115252,3188],{"class":90},[52,115254,33429],{"class":622},[52,115256,115257,115259,115261,115264,115267,115269],{"class":54,"line":19714},[52,115258,37582],{"class":90},[52,115260,3121],{"class":622},[52,115262,115263],{"class":62},"\"  ctrl:\"",[52,115265,115266],{"class":622},", np.round(data.ctrl.copy(), ",[52,115268,3188],{"class":90},[52,115270,33429],{"class":622},[52,115272,115273,115275,115277,115280,115283,115285],{"class":54,"line":19719},[52,115274,37582],{"class":90},[52,115276,3121],{"class":622},[52,115278,115279],{"class":62},"\"  obs_dim:\"",[52,115281,115282],{"class":622},", obs.shape[",[52,115284,3306],{"class":90},[52,115286,7616],{"class":622},[52,115288,115289],{"class":54,"line":19725},[52,115290,116],{"emptyLinePlaceholder":115},[52,115292,115293,115295,115297,115299,115301,115303,115305,115307],{"class":54,"line":19739},[52,115294,34231],{"class":90},[52,115296,3121],{"class":622},[52,115298,113296],{"class":62},[52,115300,15391],{"class":622},[52,115302,34950],{"class":90},[52,115304,113303],{"class":622},[52,115306,3188],{"class":90},[52,115308,33429],{"class":622},[52,115310,115311,115313,115315,115318,115321,115323,115325,115327],{"class":54,"line":19752},[52,115312,34231],{"class":90},[52,115314,3121],{"class":622},[52,115316,115317],{"class":62},"\"final tip:\"",[52,115319,115320],{"class":622},", np.round(site_position(model, data, ",[52,115322,114456],{"class":62},[52,115324,113265],{"class":622},[52,115326,3188],{"class":90},[52,115328,33429],{"class":622},[52,115330,115331,115333,115335,115338,115340,115342,115344,115346],{"class":54,"line":19757},[52,115332,34231],{"class":90},[52,115334,3121],{"class":622},[52,115336,115337],{"class":62},"\"target:\"",[52,115339,115320],{"class":622},[52,115341,114879],{"class":62},[52,115343,113265],{"class":622},[52,115345,3188],{"class":90},[52,115347,33429],{"class":622},[52,115349,115350],{"class":54,"line":19771},[52,115351,116],{"emptyLinePlaceholder":115},[52,115353,115354],{"class":54,"line":19776},[52,115355,116],{"emptyLinePlaceholder":115},[52,115357,115358,115360,115362,115364,115366],{"class":54,"line":19782},[52,115359,4509],{"class":160},[52,115361,34152],{"class":90},[52,115363,104479],{"class":160},[52,115365,104482],{"class":62},[52,115367,6698],{"class":622},[52,115369,115370],{"class":54,"line":19787},[52,115371,104489],{"class":622},[274,115373,106490],{},[19,115375,115377],{"className":26774,"code":115376,"language":26776,"meta":28,"style":28},"touch ch7_reacher.py\n",[26,115378,115379],{"__ignoreMap":28},[52,115380,115381,115383],{"class":54,"line":55},[52,115382,104203],{"class":58},[52,115384,115385],{"class":62}," ch7_reacher.py\n",[274,115387,113364],{},[19,115389,115391],{"className":26774,"code":115390,"language":26776,"meta":28,"style":28},"python ch7_reacher.py\n",[26,115392,115393],{"__ignoreMap":28},[52,115394,115395,115397],{"class":54,"line":55},[52,115396,33312],{"class":58},[52,115398,115385],{"class":62},[30,115400,104492],{"id":104492},[274,115402,115403],{},"读取 site 坐标：",[19,115405,115407],{"className":33310,"code":115406,"language":33312,"meta":28,"style":28},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[26,115408,115409],{"__ignoreMap":28},[52,115410,115411,115413,115415,115417,115419],{"class":54,"line":55},[52,115412,34879],{"class":160},[52,115414,114776],{"class":58},[52,115416,114779],{"class":622},[52,115418,4281],{"class":90},[52,115420,114784],{"class":622},[274,115422,115423],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[274,115425,113380],{},[19,115427,115429],{"className":33310,"code":115428,"language":33312,"meta":28,"style":28},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[26,115430,115431],{"__ignoreMap":28},[52,115432,115433,115435],{"class":54,"line":55},[52,115434,20002],{"class":160},[52,115436,114888],{"class":622},[274,115438,115439],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[274,115441,112705],{},[19,115443,115445],{"className":33310,"code":115444,"language":33312,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[26,115446,115447,115459,115472],{"__ignoreMap":28},[52,115448,115449,115451,115453,115455,115457],{"class":54,"line":55},[52,115450,114516],{"class":622},[52,115452,2099],{"class":160},[52,115454,114521],{"class":622},[52,115456,3644],{"class":160},[52,115458,114526],{"class":622},[52,115460,115461,115464,115466,115468,115470],{"class":54,"line":69},[52,115462,115463],{"class":622},"control_cost ",[52,115465,2099],{"class":160},[52,115467,114957],{"class":90},[52,115469,9474],{"class":160},[52,115471,114962],{"class":622},[52,115473,115474,115476,115478,115480,115482,115484,115486],{"class":54,"line":82},[52,115475,20002],{"class":160},[52,115477,112717],{"class":90},[52,115479,3121],{"class":622},[52,115481,3644],{"class":160},[52,115483,114516],{"class":622},[52,115485,3644],{"class":160},[52,115487,114979],{"class":622},[274,115489,115490],{},"奖励由两部分组成：",[1070,115492,115493,115498],{},[1073,115494,115495,115497],{},[26,115496,114543],{},"：末端离目标越远，奖励越低。",[1073,115499,115500,115503],{},[26,115501,115502],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[274,115505,115506],{},"简单控制器：",[19,115508,115510],{"className":33310,"code":115509,"language":33312,"meta":28,"style":28},"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",[26,115511,115512,115525,115557],{"__ignoreMap":28},[52,115513,115514,115517,115519,115521,115523],{"class":54,"line":55},[52,115515,115516],{"class":622},"error ",[52,115518,2099],{"class":160},[52,115520,115088],{"class":622},[52,115522,3644],{"class":160},[52,115524,115093],{"class":622},[52,115526,115527,115529,115531,115533,115535,115537,115539,115541,115543,115545,115547,115549,115551,115553,115555],{"class":54,"line":69},[52,115528,108791],{"class":622},[52,115530,3306],{"class":90},[52,115532,7402],{"class":622},[52,115534,2099],{"class":160},[52,115536,115110],{"class":622},[52,115538,108180],{"class":90},[52,115540,9474],{"class":160},[52,115542,115117],{"class":622},[52,115544,3194],{"class":90},[52,115546,115122],{"class":622},[52,115548,3644],{"class":160},[52,115550,105323],{"class":90},[52,115552,15391],{"class":622},[52,115554,105323],{"class":90},[52,115556,170],{"class":622},[52,115558,115559,115561,115563,115565,115567,115569,115571,115573,115575,115577,115579,115581,115583,115585,115587],{"class":54,"line":82},[52,115560,108791],{"class":622},[52,115562,3332],{"class":90},[52,115564,7402],{"class":622},[52,115566,2099],{"class":160},[52,115568,115110],{"class":622},[52,115570,108180],{"class":90},[52,115572,9474],{"class":160},[52,115574,115117],{"class":622},[52,115576,3306],{"class":90},[52,115578,115122],{"class":622},[52,115580,3644],{"class":160},[52,115582,105323],{"class":90},[52,115584,15391],{"class":622},[52,115586,105323],{"class":90},[52,115588,170],{"class":622},[274,115590,115591],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[30,115593,104628],{"id":104628},[19,115595,115596],{"className":33310,"code":115406,"language":33312,"meta":28,"style":28},[26,115597,115598],{"__ignoreMap":28},[52,115599,115600,115602,115604,115606,115608],{"class":54,"line":55},[52,115601,34879],{"class":160},[52,115603,114776],{"class":58},[52,115605,114779],{"class":622},[52,115607,4281],{"class":90},[52,115609,114784],{"class":622},[274,115611,115612,115613,115615,115616,85467,115618,31319],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[26,115614,82738],{}," 是 site 的名字，比如 ",[26,115617,114456],{},[26,115619,114879],{},[19,115621,115623],{"className":33310,"code":115622,"language":33312,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[26,115624,115625],{"__ignoreMap":28},[52,115626,115627,115629,115631],{"class":54,"line":55},[52,115628,106554],{"class":622},[52,115630,2099],{"class":160},[52,115632,114793],{"class":622},[274,115634,115635],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[19,115637,115639],{"className":33310,"code":115638,"language":33312,"meta":28,"style":28},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[26,115640,115641,115653],{"__ignoreMap":28},[52,115642,115643,115645,115647,115649,115651],{"class":54,"line":55},[52,115644,4509],{"class":160},[52,115646,106369],{"class":622},[52,115648,4022],{"class":160},[52,115650,7052],{"class":90},[52,115652,6698],{"class":622},[52,115654,115655,115657,115659,115661,115663,115665,115667,115669,115671,115673],{"class":54,"line":69},[52,115656,106815],{"class":160},[52,115658,106355],{"class":90},[52,115660,3121],{"class":622},[52,115662,3170],{"class":160},[52,115664,114818],{"class":62},[52,115666,4008],{"class":90},[52,115668,82738],{"class":622},[52,115670,4058],{"class":90},[52,115672,3364],{"class":62},[52,115674,170],{"class":622},[274,115676,115677,115678,115681,115682,115684],{},"如果 site 没找到，就主动报错。",[26,115679,115680],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[26,115683,82738],{}," 的值放进字符串里。",[19,115686,115688],{"className":33310,"code":115687,"language":33312,"meta":28,"style":28},"return data.site_xpos[site_id].copy()\n",[26,115689,115690],{"__ignoreMap":28},[52,115691,115692,115694],{"class":54,"line":55},[52,115693,20002],{"class":160},[52,115695,114835],{"class":622},[274,115697,115698,115699,115701,115702,115705],{},"返回这个 site 的世界坐标。",[26,115700,106600],{}," 里的每一行都是一个 site 的 ",[26,115703,115704],{},"(x, y, z)"," 坐标。",[19,115707,115709],{"className":33310,"code":115708,"language":33312,"meta":28,"style":28},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[26,115710,115711],{"__ignoreMap":28},[52,115712,115713,115715,115717],{"class":54,"line":55},[52,115714,34879],{"class":160},[52,115716,114850],{"class":58},[52,115718,114853],{"class":622},[274,115720,115721],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[19,115723,115725],{"className":33310,"code":115724,"language":33312,"meta":28,"style":28},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[26,115726,115727,115739],{"__ignoreMap":28},[52,115728,115729,115731,115733,115735,115737],{"class":54,"line":55},[52,115730,114488],{"class":622},[52,115732,2099],{"class":160},[52,115734,114863],{"class":622},[52,115736,114456],{"class":62},[52,115738,170],{"class":622},[52,115740,115741,115743,115745,115747,115749],{"class":54,"line":69},[52,115742,114498],{"class":622},[52,115744,2099],{"class":160},[52,115746,114863],{"class":622},[52,115748,114879],{"class":62},[52,115750,170],{"class":622},[274,115752,115753],{},"分别读取末端点和目标点的世界坐标。",[19,115755,115756],{"className":33310,"code":115428,"language":33312,"meta":28,"style":28},[26,115757,115758],{"__ignoreMap":28},[52,115759,115760,115762],{"class":54,"line":55},[52,115761,20002],{"class":160},[52,115763,114888],{"class":622},[274,115765,115766],{},"把四部分拼成一个观测数组：",[19,115768,115771],{"className":115769,"code":115770,"language":24,"meta":28},[22],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[26,115772,115770],{"__ignoreMap":28},[19,115774,115776],{"className":33310,"code":115775,"language":33312,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\n",[26,115777,115778],{"__ignoreMap":28},[52,115779,115780,115782,115784,115786,115788],{"class":54,"line":55},[52,115781,114516],{"class":622},[52,115783,2099],{"class":160},[52,115785,114521],{"class":622},[52,115787,3644],{"class":160},[52,115789,114526],{"class":622},[274,115791,115792,115793,115796,115797,115800],{},"计算 tip 到 target 的距离。",[26,115794,115795],{},"tip - target"," 得到一个三维向量，",[26,115798,115799],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[274,115802,17589],{},[19,115804,115807],{"className":115805,"code":115806,"language":24,"meta":28},[22],"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",[26,115808,115806],{"__ignoreMap":28},[19,115810,115812],{"className":33310,"code":115811,"language":33312,"meta":28,"style":28},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[26,115813,115814],{"__ignoreMap":28},[52,115815,115816,115818,115820,115822,115824],{"class":54,"line":55},[52,115817,115463],{"class":622},[52,115819,2099],{"class":160},[52,115821,114957],{"class":90},[52,115823,9474],{"class":160},[52,115825,114962],{"class":622},[274,115827,115828,115829,115832,115833,115836],{},"计算动作惩罚。",[26,115830,115831],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[26,115834,115835],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[19,115838,115840],{"className":33310,"code":115839,"language":33312,"meta":28,"style":28},"return float(-dist - control_cost)\n",[26,115841,115842],{"__ignoreMap":28},[52,115843,115844,115846,115848,115850,115852,115854,115856],{"class":54,"line":55},[52,115845,20002],{"class":160},[52,115847,112717],{"class":90},[52,115849,3121],{"class":622},[52,115851,3644],{"class":160},[52,115853,114516],{"class":622},[52,115855,3644],{"class":160},[52,115857,114979],{"class":622},[274,115859,115860],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[19,115862,115863],{"className":33310,"code":113723,"language":33312,"meta":28,"style":28},[26,115864,115865],{"__ignoreMap":28},[52,115866,115867,115869,115871],{"class":54,"line":55},[52,115868,113730],{"class":622},[52,115870,2099],{"class":160},[52,115872,107681],{"class":90},[274,115874,115875],{},"累计奖励变量，记录整个运行过程的总分。",[19,115877,115879],{"className":33310,"code":115878,"language":33312,"meta":28,"style":28},"for step in range(500):\n",[26,115880,115881],{"__ignoreMap":28},[52,115882,115883,115885,115887,115889,115891,115893,115895],{"class":54,"line":55},[52,115884,5985],{"class":160},[52,115886,34548],{"class":622},[52,115888,28988],{"class":160},[52,115890,35375],{"class":90},[52,115892,3121],{"class":622},[52,115894,68003],{"class":90},[52,115896,33718],{"class":622},[274,115898,115899],{},"运行 500 个控制步。",[19,115901,115902],{"className":33310,"code":107463,"language":33312,"meta":28,"style":28},[26,115903,115904],{"__ignoreMap":28},[52,115905,115906],{"class":54,"line":55},[52,115907,107463],{"class":622},[274,115909,115910,115911,103940,115913,115915],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[26,115912,106151],{},[26,115914,106154],{}," 是当前状态下的坐标。",[19,115917,115919],{"className":33310,"code":115918,"language":33312,"meta":28,"style":28},"error = target - tip\n",[26,115920,115921],{"__ignoreMap":28},[52,115922,115923,115925,115927,115929,115931],{"class":54,"line":55},[52,115924,115516],{"class":622},[52,115926,2099],{"class":160},[52,115928,115088],{"class":622},[52,115930,3644],{"class":160},[52,115932,115093],{"class":622},[274,115934,115935],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[19,115937,115939],{"className":33310,"code":115938,"language":33312,"meta":28,"style":28},"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",[26,115940,115941,115973],{"__ignoreMap":28},[52,115942,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971],{"class":54,"line":55},[52,115944,108791],{"class":622},[52,115946,3306],{"class":90},[52,115948,7402],{"class":622},[52,115950,2099],{"class":160},[52,115952,115110],{"class":622},[52,115954,108180],{"class":90},[52,115956,9474],{"class":160},[52,115958,115117],{"class":622},[52,115960,3194],{"class":90},[52,115962,115122],{"class":622},[52,115964,3644],{"class":160},[52,115966,105323],{"class":90},[52,115968,15391],{"class":622},[52,115970,105323],{"class":90},[52,115972,170],{"class":622},[52,115974,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001,116003],{"class":54,"line":69},[52,115976,108791],{"class":622},[52,115978,3332],{"class":90},[52,115980,7402],{"class":622},[52,115982,2099],{"class":160},[52,115984,115110],{"class":622},[52,115986,108180],{"class":90},[52,115988,9474],{"class":160},[52,115990,115117],{"class":622},[52,115992,3306],{"class":90},[52,115994,115122],{"class":622},[52,115996,3644],{"class":160},[52,115998,105323],{"class":90},[52,116000,15391],{"class":622},[52,116002,105323],{"class":90},[52,116004,170],{"class":622},[274,116006,116007,116008,116011],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[26,116009,116010],{},"error -> ctrl -> step"," 的流程。",[19,116013,116014],{"className":33310,"code":107425,"language":33312,"meta":28,"style":28},[26,116015,116016],{"__ignoreMap":28},[52,116017,116018],{"class":54,"line":55},[52,116019,107425],{"class":622},[274,116021,116022],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[19,116024,116026],{"className":33310,"code":116025,"language":33312,"meta":28,"style":28},"obs = get_obs(model, data)\n",[26,116027,116028],{"__ignoreMap":28},[52,116029,116030,116032,116034],{"class":54,"line":55},[52,116031,113774],{"class":622},[52,116033,2099],{"class":160},[52,116035,115211],{"class":622},[274,116037,116038,116039,116042],{},"读取最新观测。后面打印 ",[26,116040,116041],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,116044,105236],{"id":105235},[274,116046,116047],{},"观测维度为:",[19,116049,116052],{"className":116050,"code":116051,"language":24,"meta":28},[22],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[26,116053,116051],{"__ignoreMap":28},[274,116055,116056],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[274,116058,116059],{},"程序每 100 步打印：",[19,116061,116064],{"className":116062,"code":116063,"language":24,"meta":28},[22],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[26,116065,116063],{"__ignoreMap":28},[274,116067,116068,116069,116071],{},"如果控制有效，你应该看到最终 ",[26,116070,106151],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,116073,105268],{"id":105267},[1070,116075,116076,116079,116082,116088,116094,116101,116111],{},[1073,116077,116078],{},"修改目标点位置。",[1073,116080,116081],{},"重新运行，观察最终 tip 是否变化。",[1073,116083,116084,116085,116087],{},"把 gravity 改成 ",[26,116086,105509],{},"，观察控制是否变差。",[1073,116089,114101,116090,114105,116092,31319],{},[26,116091,105078],{},[26,116093,3194],{},[1073,116095,105331,116096,105334,116098,116100],{},[26,116097,113516],{},[26,116099,110227],{},"，观察机械臂是否更难移动。",[1073,116102,105331,116103,85458,116105,105334,116107,116110],{},[26,116104,106154],{},[26,116106,107066],{},[26,116108,116109],{},"0.2 0 0.6","，观察 reward 和 final tip。",[1073,116112,116113],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,116115,105373],{"id":105372},[30,116117,116119],{"id":116118},"site-not-found",[26,116120,116121],{},"site not found",[274,116123,116124,116125,103940,116128,31319],{},"检查 XML 中是否有 ",[26,116126,116127],{},"site name=\"tip\"",[26,116129,116130],{},"site name=\"target\"",[30,116132,116133],{"id":116133},"机械臂完全不动",[274,116135,105443],{},[1070,116137,116138,116143,116146,116151],{},[1073,116139,116140,116142],{},[26,116141,105078],{}," 是否为 2",[1073,116144,116145],{},"actuator 是否引用正确 joint",[1073,116147,116148,116150],{},[26,116149,103998],{}," 是否被赋值",[1073,116152,116153,116154],{},"是否执行了 ",[26,116155,103613],{},[30,116157,116158],{"id":116158},"控制效果不好",[274,116160,116161],{},"正常。本章重点不是控制器最优，而是任务结构:",[19,116163,116166],{"className":116164,"code":116165,"language":24,"meta":28},[22],"obs → action → mj_step → reward → next_obs\n",[26,116167,116165],{"__ignoreMap":28},[30,116169,116171],{"id":116170},"tip-坐标不变化","tip 坐标不变化",[274,116173,105495],{},[1070,116175,116176,116181,116189,116198],{},[1073,116177,116178,116179,31319],{},"是否每步调用了 ",[26,116180,103613],{},[1073,116182,116183,116184,103940,116186,31319],{},"是否写入了 ",[26,116185,109046],{},[26,116187,116188],{},"data.ctrl[1]",[1073,116190,116191,116192,3327,116195,31319],{},"actuator 是否正确引用 ",[26,116193,116194],{},"joint1",[26,116196,116197],{},"joint2",[1073,116199,116200],{},"控制输入是否太小。",[30,116202,116203],{"id":116203},"目标点不会动",[274,116205,116206],{},"本章的 target 是固定 site：",[19,116208,116210],{"className":55997,"code":116209,"language":55999,"meta":28,"style":28},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[26,116211,116212],{"__ignoreMap":28},[52,116213,116214,116216,116218,116220,116222,116224,116226,116228,116231],{"class":54,"line":55},[52,116215,4022],{"class":622},[52,116217,106130],{"class":54231},[52,116219,17876],{"class":58},[52,116221,2099],{"class":622},[52,116223,114879],{"class":62},[52,116225,104028],{"class":58},[52,116227,2099],{"class":622},[52,116229,116230],{"class":62},"\"0.5 0 0.4\"",[52,116232,116233],{"class":622}," ...\u002F>\n",[274,116235,116236,116237,116239],{},"它直接挂在 ",[26,116238,104761],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[30,116241,116242],{"id":116242},"机械臂不像真实机械臂",[274,116244,116245],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,116247,105527],{"id":105526},[274,116249,116250],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[274,116252,116253],{},"核心公式：",[19,116255,116258],{"className":116256,"code":116257,"language":24,"meta":28},[22],"distance = ||tip - target||\nreward = -distance - action_cost\n",[26,116259,116257],{"__ignoreMap":28},[274,116261,116262],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[3015,116264,116265],{},"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":28,"searchDepth":69,"depth":69,"links":116267},[116268,116269,116270,116275,116279,116280,116281,116289],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":116271},[116272,116273,116274],{"id":114471,"depth":82,"text":114472},{"id":114547,"depth":82,"text":114547},{"id":114577,"depth":82,"text":114578},{"id":104174,"depth":69,"text":104175,"children":116276},[116277,116278],{"id":104492,"depth":82,"text":104492},{"id":104628,"depth":82,"text":104628},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":116282},[116283,116284,116285,116286,116287,116288],{"id":116118,"depth":82,"text":116121},{"id":116133,"depth":82,"text":116133},{"id":116158,"depth":82,"text":116158},{"id":116170,"depth":82,"text":116171},{"id":116203,"depth":82,"text":116203},{"id":116242,"depth":82,"text":116242},{"id":105526,"depth":69,"text":105527},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":114275,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":116296,"title":116297,"body":116298,"description":28,"extension":3047,"meta":119759,"navigation":115,"path":119760,"seo":119761,"stem":119762,"__hash__":119763},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":116299,"toc":119730},[116300,116303,116305,116308,116311,116336,116339,116345,116348,116354,116356,116358,116382,116384,116402,116404,116447,116449,116476,116478,116481,116533,116536,116542,116551,116554,116592,116595,116634,116637,116645,116652,116655,116661,116663,116717,116724,116769,116772,116776,116792,116802,116804,118065,118067,118079,118081,118092,118094,118097,118118,118121,118124,118157,118163,118166,118199,118202,118205,118246,118251,118265,118268,118281,118286,118309,118311,118326,118336,118351,118358,118378,118393,118411,118414,118431,118439,118455,118461,118493,118506,118538,118548,118583,118597,118643,118657,118699,118710,118723,118729,118762,118765,118792,118802,118842,118851,118868,118875,118893,118896,118937,118950,118965,118968,118991,118994,119006,119009,119028,119033,119054,119057,119072,119075,119109,119121,119136,119139,119164,119167,119186,119189,119221,119224,119248,119254,119284,119291,119304,119307,119309,119311,119317,119320,119323,119335,119338,119340,119394,119396,119400,119406,119415,119418,119425,119427,119450,119453,119457,119459,119477,119483,119485,119518,119521,119527,119531,119534,119554,119559,119563,119570,119590,119595,119599,119602,119622,119625,119711,119715,119718,119724,119727],[10,116301,116297],{"id":116302},"_8gymnasium-风格强化学习接口基础",[14,116304,103575],{"id":103574},[274,116306,116307],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[274,116309,116310],{},"你将实现:",[19,116312,116314],{"className":33310,"code":116313,"language":33312,"meta":28,"style":28},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[26,116315,116316,116326],{"__ignoreMap":28},[52,116317,116318,116321,116323],{"class":54,"line":55},[52,116319,116320],{"class":622},"obs, info ",[52,116322,2099],{"class":160},[52,116324,116325],{"class":622}," env.reset()\n",[52,116327,116328,116331,116333],{"class":54,"line":69},[52,116329,116330],{"class":622},"obs, reward, terminated, truncated, info ",[52,116332,2099],{"class":160},[52,116334,116335],{"class":622}," env.step(action)\n",[274,116337,116338],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[274,116340,116341,116342,116344],{},"前面章节的代码都是“脚本式”的：在 ",[26,116343,105215],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[274,116346,116347],{},"可以先记住 Gymnasium 环境的核心交互：",[19,116349,116352],{"className":116350,"code":116351,"language":24,"meta":28},[22],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[26,116353,116351],{"__ignoreMap":28},[14,116355,103698],{"id":103697},[274,116357,103701],{},[19,116359,116360],{"className":26774,"code":107308,"language":26776,"meta":28,"style":28},[26,116361,116362],{"__ignoreMap":28},[52,116363,116364,116366,116368,116370,116372,116374,116376,116378,116380],{"class":54,"line":55},[52,116365,59],{"class":58},[52,116367,2938],{"class":62},[52,116369,76],{"class":62},[52,116371,29340],{"class":90},[52,116373,107323],{"class":62},[52,116375,103726],{"class":62},[52,116377,105421],{"class":62},[52,116379,103742],{"class":62},[52,116381,107332],{"class":62},[274,116383,105739],{},[19,116385,116387],{"className":26774,"code":116386,"language":26776,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[26,116388,116389],{"__ignoreMap":28},[52,116390,116391,116393,116395,116397,116399],{"class":54,"line":55},[52,116392,26783],{"class":58},[52,116394,76],{"class":62},[52,116396,103852],{"class":62},[52,116398,110631],{"class":62},[52,116400,116401],{"class":62}," gymnasium\n",[274,116403,105756],{},[19,116405,116407],{"className":26774,"code":116406,"language":26776,"meta":28,"style":28},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[26,116408,116409,116426,116435],{"__ignoreMap":28},[52,116410,116411,116413,116415,116417,116420,116422,116424],{"class":54,"line":55},[52,116412,33262],{"class":58},[52,116414,32110],{"class":62},[52,116416,28061],{"class":90},[52,116418,116419],{"class":62}," mujoco-gym-api",[52,116421,103897],{"class":62},[52,116423,103900],{"class":90},[52,116425,103903],{"class":90},[52,116427,116428,116430,116432],{"class":54,"line":69},[52,116429,33262],{"class":58},[52,116431,103910],{"class":62},[52,116433,116434],{"class":62}," mujoco-gym-api\n",[52,116436,116437,116439,116441,116443,116445],{"class":54,"line":82},[52,116438,26783],{"class":58},[52,116440,76],{"class":62},[52,116442,103852],{"class":62},[52,116444,110631],{"class":62},[52,116446,116401],{"class":62},[274,116448,103926],{},[1070,116450,116451,116461,116464,116470],{},[1073,116452,116453,116454,116457,116458,31319],{},"本章使用 ",[26,116455,116456],{},"gymnasium","，不是旧版 ",[26,116459,116460],{},"gym",[1073,116462,116463],{},"Gymnasium API 与旧 Gym API 有差异。",[1073,116465,116466,116467,31319],{},"旧 Gym 常见返回值是 4 个: ",[26,116468,116469],{},"obs, reward, done, info",[1073,116471,116472,116473,31319],{},"Gymnasium 返回值是 5 个: ",[26,116474,116475],{},"obs, reward, terminated, truncated, info",[14,116477,103967],{"id":103966},[274,116479,116480],{},"强化学习环境接口包含:",[3253,116482,116483,116492],{},[3256,116484,116485],{},[3259,116486,116487,116490],{},[3262,116488,116489],{"align":26688},"方法",[3262,116491,105616],{"align":26688},[3299,116493,116494,116504,116514,116524],{},[3259,116495,116496,116501],{},[3304,116497,116498],{"align":26688},[26,116499,116500],{},"reset()",[3304,116502,116503],{"align":26688},"重置环境",[3259,116505,116506,116511],{},[3304,116507,116508],{"align":26688},[26,116509,116510],{},"step(action)",[3304,116512,116513],{"align":26688},"执行动作",[3259,116515,116516,116521],{},[3304,116517,116518],{"align":26688},[26,116519,116520],{},"observation_space",[3304,116522,116523],{"align":26688},"观测空间",[3259,116525,116526,116531],{},[3304,116527,116528],{"align":26688},[26,116529,116530],{},"action_space",[3304,116532,26606],{"align":26688},[274,116534,116535],{},"一个最小环境需要完成:",[19,116537,116540],{"className":116538,"code":116539,"language":24,"meta":28},[22],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[26,116541,116539],{"__ignoreMap":28},[30,116543,116545,103940,116548,107558],{"id":116544},"terminated-和-truncated-的区别",[26,116546,116547],{},"terminated",[26,116549,116550],{},"truncated",[274,116552,116553],{},"Gymnasium 把“结束”拆成两个概念：",[3253,116555,116556,116566],{},[3256,116557,116558],{},[3259,116559,116560,116562,116564],{},[3262,116561,107494],{"align":26688},[3262,116563,103628],{"align":26688},[3262,116565,24142],{"align":26688},[3299,116567,116568,116580],{},[3259,116569,116570,116574,116577],{},[3304,116571,116572],{"align":26688},[26,116573,116547],{},[3304,116575,116576],{"align":26688},"任务自然结束",[3304,116578,116579],{"align":26688},"机械臂到达目标、机器人摔倒",[3259,116581,116582,116586,116589],{},[3304,116583,116584],{"align":26688},[26,116585,116550],{},[3304,116587,116588],{"align":26688},"因外部限制截断",[3304,116590,116591],{"align":26688},"达到最大步数、时间限制",[274,116593,116594],{},"本章中：",[19,116596,116598],{"className":33310,"code":116597,"language":33312,"meta":28,"style":28},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[26,116599,116600,116615],{"__ignoreMap":28},[52,116601,116602,116605,116607,116610,116612],{"class":54,"line":55},[52,116603,116604],{"class":622},"terminated ",[52,116606,2099],{"class":160},[52,116608,116609],{"class":622}," dist ",[52,116611,4022],{"class":160},[52,116613,116614],{"class":90}," 0.05\n",[52,116616,116617,116620,116622,116624,116627,116629,116631],{"class":54,"line":69},[52,116618,116619],{"class":622},"truncated ",[52,116621,2099],{"class":160},[52,116623,41805],{"class":90},[52,116625,116626],{"class":622},".steps ",[52,116628,4677],{"class":160},[52,116630,41805],{"class":90},[52,116632,116633],{"class":622},".max_steps\n",[274,116635,116636],{},"也就是：",[1070,116638,116639,116642],{},[1073,116640,116641],{},"末端距离目标小于 0.05，任务成功结束。",[1073,116643,116644],{},"步数超过上限，episode 被截断。",[30,116646,116648,103940,116650],{"id":116647},"observation_space-和-action_space",[26,116649,116520],{},[26,116651,116530],{},[274,116653,116654],{},"这两个对象告诉算法：",[19,116656,116659],{"className":116657,"code":116658,"language":24,"meta":28},[22],"观测长什么样\n动作允许多大\n",[26,116660,116658],{"__ignoreMap":28},[274,116662,17589],{},[19,116664,116666],{"className":33310,"code":116665,"language":33312,"meta":28,"style":28},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[26,116667,116668],{"__ignoreMap":28},[52,116669,116670,116672,116675,116677,116680,116683,116686,116688,116690,116693,116695,116697,116699,116701,116703,116705,116707,116710,116712,116714],{"class":54,"line":55},[52,116671,33755],{"class":90},[52,116673,116674],{"class":622},".action_space ",[52,116676,2099],{"class":160},[52,116678,116679],{"class":622}," spaces.Box(",[52,116681,116682],{"class":8172},"low",[52,116684,116685],{"class":160},"=-",[52,116687,105323],{"class":90},[52,116689,15391],{"class":622},[52,116691,116692],{"class":8172},"high",[52,116694,2099],{"class":160},[52,116696,105323],{"class":90},[52,116698,15391],{"class":622},[52,116700,98891],{"class":8172},[52,116702,2099],{"class":160},[52,116704,3121],{"class":622},[52,116706,3194],{"class":90},[52,116708,116709],{"class":622},",), ",[52,116711,96428],{"class":8172},[52,116713,2099],{"class":160},[52,116715,116716],{"class":622},"np.float32)\n",[274,116718,116719,116720,116723],{},"表示动作是 2 维数组，每个值都在 ",[26,116721,116722],{},"[-1, 1]"," 范围内。",[19,116725,116727],{"className":33310,"code":116726,"language":33312,"meta":28,"style":28},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[26,116728,116729],{"__ignoreMap":28},[52,116730,116731,116733,116736,116738,116740,116742,116744,116747,116749,116751,116753,116755,116757,116759,116761,116763,116765,116767],{"class":54,"line":55},[52,116732,33755],{"class":90},[52,116734,116735],{"class":622},".observation_space ",[52,116737,2099],{"class":160},[52,116739,116679],{"class":622},[52,116741,116682],{"class":8172},[52,116743,116685],{"class":160},[52,116745,116746],{"class":622},"np.inf, ",[52,116748,116692],{"class":8172},[52,116750,2099],{"class":160},[52,116752,116746],{"class":622},[52,116754,98891],{"class":8172},[52,116756,2099],{"class":160},[52,116758,3121],{"class":622},[52,116760,3559],{"class":90},[52,116762,116709],{"class":622},[52,116764,96428],{"class":8172},[52,116766,2099],{"class":160},[52,116768,116716],{"class":622},[274,116770,116771],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[30,116773,116775],{"id":116774},"frame_skip-是什么","frame_skip 是什么",[19,116777,116779],{"className":33310,"code":116778,"language":33312,"meta":28,"style":28},"self.frame_skip = 5\n",[26,116780,116781],{"__ignoreMap":28},[52,116782,116783,116785,116788,116790],{"class":54,"line":55},[52,116784,33755],{"class":90},[52,116786,116787],{"class":622},".frame_skip ",[52,116789,2099],{"class":160},[52,116791,57357],{"class":90},[274,116793,116794,116795,116798,116799,116801],{},"表示外部调用一次 ",[26,116796,116797],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[26,116800,104137],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116803,104175],{"id":104174},[19,116805,116807],{"className":33310,"code":116806,"language":33312,"meta":28,"style":28},"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",[26,116808,116809,116821,116827,116837,116848,116852,116856,116864,116869,116873,116877,116881,116885,116889,116893,116897,116902,116906,116910,116914,116919,116923,116927,116931,116935,116939,116943,116947,116951,116955,116959,116963,116967,116971,116989,117004,117008,117021,117031,117046,117063,117067,117088,117107,117132,117146,117150,117160,117172,117182,117186,117228,117266,117270,117280,117296,117311,117330,117337,117341,117354,117369,117384,117397,117416,117432,117436,117477,117492,117507,117511,117550,117561,117574,117578,117588,117597,117601,117611,117626,117644,117648,117659,117676,117689,117693,117703,117707,117718,117729,117733,117747,117761,117777,117781,117794,117811,117826,117833,117837,117841,117853,117863,117881,117893,117905,117909,117917,117933,117942,117951,117959,118001,118014,118019,118023,118041,118045,118049,118061],{"__ignoreMap":28},[52,116810,116811,116813,116816,116818],{"class":54,"line":55},[52,116812,33324],{"class":160},[52,116814,116815],{"class":622}," gymnasium ",[52,116817,34315],{"class":160},[52,116819,116820],{"class":622}," gym\n",[52,116822,116823,116825],{"class":54,"line":69},[52,116824,33324],{"class":160},[52,116826,104221],{"class":622},[52,116828,116829,116831,116833,116835],{"class":54,"line":82},[52,116830,33324],{"class":160},[52,116832,34312],{"class":622},[52,116834,34315],{"class":160},[52,116836,34318],{"class":622},[52,116838,116839,116841,116843,116845],{"class":54,"line":97},[52,116840,33669],{"class":160},[52,116842,116815],{"class":622},[52,116844,33324],{"class":160},[52,116846,116847],{"class":622}," spaces\n",[52,116849,116850],{"class":54,"line":112},[52,116851,116],{"emptyLinePlaceholder":115},[52,116853,116854],{"class":54,"line":119},[52,116855,116],{"emptyLinePlaceholder":115},[52,116857,116858,116860,116862],{"class":54,"line":130},[52,116859,104234],{"class":90},[52,116861,16520],{"class":160},[52,116863,104239],{"class":62},[52,116865,116866],{"class":54,"line":136},[52,116867,116868],{"class":62},"\u003Cmujoco model=\"gym_reacher\">\n",[52,116870,116871],{"class":54,"line":141},[52,116872,114658],{"class":62},[52,116874,116875],{"class":54,"line":146},[52,116876,116],{"emptyLinePlaceholder":115},[52,116878,116879],{"class":54,"line":152},[52,116880,104258],{"class":62},[52,116882,116883],{"class":54,"line":157},[52,116884,114676],{"class":62},[52,116886,116887],{"class":54,"line":173},[52,116888,116],{"emptyLinePlaceholder":115},[52,116890,116891],{"class":54,"line":178},[52,116892,114685],{"class":62},[52,116894,116895],{"class":54,"line":184},[52,116896,114690],{"class":62},[52,116898,116899],{"class":54,"line":189},[52,116900,116901],{"class":62},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[52,116903,116904],{"class":54,"line":201},[52,116905,116],{"emptyLinePlaceholder":115},[52,116907,116908],{"class":54,"line":206},[52,116909,114704],{"class":62},[52,116911,116912],{"class":54,"line":224},[52,116913,114709],{"class":62},[52,116915,116916],{"class":54,"line":229},[52,116917,116918],{"class":62},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[52,116920,116921],{"class":54,"line":241},[52,116922,114719],{"class":62},[52,116924,116925],{"class":54,"line":246},[52,116926,109358],{"class":62},[52,116928,116929],{"class":54,"line":252},[52,116930,104287],{"class":62},[52,116932,116933],{"class":54,"line":257},[52,116934,104292],{"class":62},[52,116936,116937],{"class":54,"line":266},[52,116938,116],{"emptyLinePlaceholder":115},[52,116940,116941],{"class":54,"line":4722},[52,116942,109375],{"class":62},[52,116944,116945],{"class":54,"line":4727},[52,116946,114744],{"class":62},[52,116948,116949],{"class":54,"line":4741},[52,116950,114749],{"class":62},[52,116952,116953],{"class":54,"line":4746},[52,116954,109385],{"class":62},[52,116956,116957],{"class":54,"line":5538},[52,116958,104297],{"class":62},[52,116960,116961],{"class":54,"line":5552},[52,116962,98626],{"class":62},[52,116964,116965],{"class":54,"line":5560},[52,116966,116],{"emptyLinePlaceholder":115},[52,116968,116969],{"class":54,"line":5565},[52,116970,116],{"emptyLinePlaceholder":115},[52,116972,116973,116975,116978,116980,116982,116984,116987],{"class":54,"line":5571},[52,116974,17650],{"class":160},[52,116976,116977],{"class":58}," ReacherEnv",[52,116979,3121],{"class":622},[52,116981,116460],{"class":58},[52,116983,3670],{"class":622},[52,116985,116986],{"class":58},"Env",[52,116988,33718],{"class":622},[52,116990,116991,116994,116996,116998,117001],{"class":54,"line":5577},[52,116992,116993],{"class":622},"    metadata ",[52,116995,2099],{"class":160},[52,116997,7407],{"class":622},[52,116999,117000],{"class":62},"\"render_modes\"",[52,117002,117003],{"class":622},": []}\n",[52,117005,117006],{"class":54,"line":5582},[52,117007,116],{"emptyLinePlaceholder":115},[52,117009,117010,117012,117014,117017,117019],{"class":54,"line":10904},[52,117011,33733],{"class":160},[52,117013,33736],{"class":90},[52,117015,117016],{"class":622},"(self) -> ",[52,117018,98614],{"class":90},[52,117020,6698],{"class":622},[52,117022,117023,117025,117027,117029],{"class":54,"line":10928},[52,117024,33749],{"class":90},[52,117026,20217],{"class":622},[52,117028,33761],{"class":90},[52,117030,4938],{"class":622},[52,117032,117033,117035,117038,117040,117042,117044],{"class":54,"line":10933},[52,117034,33777],{"class":90},[52,117036,117037],{"class":622},".model ",[52,117039,2099],{"class":160},[52,117041,104332],{"class":622},[52,117043,104234],{"class":90},[52,117045,170],{"class":622},[52,117047,117048,117050,117053,117055,117058,117060],{"class":54,"line":10939},[52,117049,33777],{"class":90},[52,117051,117052],{"class":622},".data ",[52,117054,2099],{"class":160},[52,117056,117057],{"class":622}," mujoco.MjData(",[52,117059,33755],{"class":90},[52,117061,117062],{"class":622},".model)\n",[52,117064,117065],{"class":54,"line":10966},[52,117066,116],{"emptyLinePlaceholder":115},[52,117068,117069,117071,117074,117076,117079,117081,117084,117086],{"class":54,"line":10971},[52,117070,33777],{"class":90},[52,117072,117073],{"class":622},".tip_site_id ",[52,117075,2099],{"class":160},[52,117077,117078],{"class":622}," mujoco.mj_name2id(",[52,117080,33755],{"class":90},[52,117082,117083],{"class":622},".model, mujoco.mjtObj.mjOBJ_SITE, ",[52,117085,114456],{"class":62},[52,117087,170],{"class":622},[52,117089,117090,117092,117095,117097,117099,117101,117103,117105],{"class":54,"line":10977},[52,117091,33777],{"class":90},[52,117093,117094],{"class":622},".target_site_id ",[52,117096,2099],{"class":160},[52,117098,117078],{"class":622},[52,117100,33755],{"class":90},[52,117102,117083],{"class":622},[52,117104,114879],{"class":62},[52,117106,170],{"class":622},[52,117108,117109,117111,117113,117115,117117,117119,117122,117124,117126,117128,117130],{"class":54,"line":10989},[52,117110,5458],{"class":160},[52,117112,41805],{"class":90},[52,117114,117073],{"class":622},[52,117116,4022],{"class":160},[52,117118,7052],{"class":90},[52,117120,117121],{"class":160}," or",[52,117123,41805],{"class":90},[52,117125,117094],{"class":622},[52,117127,4022],{"class":160},[52,117129,7052],{"class":90},[52,117131,6698],{"class":622},[52,117133,117134,117137,117139,117141,117144],{"class":54,"line":11001},[52,117135,117136],{"class":160},"            raise",[52,117138,106355],{"class":90},[52,117140,3121],{"class":622},[52,117142,117143],{"class":62},"\"required sites not found\"",[52,117145,170],{"class":622},[52,117147,117148],{"class":54,"line":11013},[52,117149,116],{"emptyLinePlaceholder":115},[52,117151,117152,117154,117156,117158],{"class":54,"line":12672},[52,117153,33777],{"class":90},[52,117155,116787],{"class":622},[52,117157,2099],{"class":160},[52,117159,57357],{"class":90},[52,117161,117162,117164,117167,117169],{"class":54,"line":12697},[52,117163,33777],{"class":90},[52,117165,117166],{"class":622},".max_steps ",[52,117168,2099],{"class":160},[52,117170,117171],{"class":90}," 200\n",[52,117173,117174,117176,117178,117180],{"class":54,"line":12720},[52,117175,33777],{"class":90},[52,117177,116626],{"class":622},[52,117179,2099],{"class":160},[52,117181,50265],{"class":90},[52,117183,117184],{"class":54,"line":12744},[52,117185,116],{"emptyLinePlaceholder":115},[52,117187,117188,117190,117192,117194,117196,117198,117200,117202,117204,117206,117208,117210,117212,117214,117216,117218,117220,117222,117224,117226],{"class":54,"line":12749},[52,117189,33777],{"class":90},[52,117191,116674],{"class":622},[52,117193,2099],{"class":160},[52,117195,116679],{"class":622},[52,117197,116682],{"class":8172},[52,117199,116685],{"class":160},[52,117201,105323],{"class":90},[52,117203,15391],{"class":622},[52,117205,116692],{"class":8172},[52,117207,2099],{"class":160},[52,117209,105323],{"class":90},[52,117211,15391],{"class":622},[52,117213,98891],{"class":8172},[52,117215,2099],{"class":160},[52,117217,3121],{"class":622},[52,117219,3194],{"class":90},[52,117221,116709],{"class":622},[52,117223,96428],{"class":8172},[52,117225,2099],{"class":160},[52,117227,116716],{"class":622},[52,117229,117230,117232,117234,117236,117238,117240,117242,117244,117246,117248,117250,117252,117254,117256,117258,117260,117262,117264],{"class":54,"line":12754},[52,117231,33777],{"class":90},[52,117233,116735],{"class":622},[52,117235,2099],{"class":160},[52,117237,116679],{"class":622},[52,117239,116682],{"class":8172},[52,117241,116685],{"class":160},[52,117243,116746],{"class":622},[52,117245,116692],{"class":8172},[52,117247,2099],{"class":160},[52,117249,116746],{"class":622},[52,117251,98891],{"class":8172},[52,117253,2099],{"class":160},[52,117255,3121],{"class":622},[52,117257,3559],{"class":90},[52,117259,116709],{"class":622},[52,117261,96428],{"class":8172},[52,117263,2099],{"class":160},[52,117265,116716],{"class":622},[52,117267,117268],{"class":54,"line":12759},[52,117269,116],{"emptyLinePlaceholder":115},[52,117271,117272,117274,117277],{"class":54,"line":12768},[52,117273,33733],{"class":160},[52,117275,117276],{"class":58}," _get_obs",[52,117278,117279],{"class":622},"(self) -> np.ndarray:\n",[52,117281,117282,117284,117286,117288,117291,117293],{"class":54,"line":12773},[52,117283,115057],{"class":622},[52,117285,2099],{"class":160},[52,117287,41805],{"class":90},[52,117289,117290],{"class":622},".data.site_xpos[",[52,117292,33755],{"class":90},[52,117294,117295],{"class":622},".tip_site_id].copy()\n",[52,117297,117298,117300,117302,117304,117306,117308],{"class":54,"line":12779},[52,117299,115070],{"class":622},[52,117301,2099],{"class":160},[52,117303,41805],{"class":90},[52,117305,117290],{"class":622},[52,117307,33755],{"class":90},[52,117309,117310],{"class":622},".target_site_id].copy()\n",[52,117312,117313,117315,117317,117320,117322,117325,117327],{"class":54,"line":12800},[52,117314,113102],{"class":622},[52,117316,2099],{"class":160},[52,117318,117319],{"class":622}," np.concatenate([",[52,117321,33755],{"class":90},[52,117323,117324],{"class":622},".data.qpos.copy(), ",[52,117326,33755],{"class":90},[52,117328,117329],{"class":622},".data.qvel.copy(), tip, target])\n",[52,117331,117332,117334],{"class":54,"line":12806},[52,117333,17708],{"class":160},[52,117335,117336],{"class":622}," obs.astype(np.float32)\n",[52,117338,117339],{"class":54,"line":12820},[52,117340,116],{"emptyLinePlaceholder":115},[52,117342,117343,117345,117348,117350,117352],{"class":54,"line":12826},[52,117344,33733],{"class":160},[52,117346,117347],{"class":58}," _get_reward",[52,117349,117016],{"class":622},[52,117351,3159],{"class":90},[52,117353,6698],{"class":622},[52,117355,117356,117358,117360,117362,117364,117366],{"class":54,"line":12853},[52,117357,115057],{"class":622},[52,117359,2099],{"class":160},[52,117361,41805],{"class":90},[52,117363,117290],{"class":622},[52,117365,33755],{"class":90},[52,117367,117368],{"class":622},".tip_site_id]\n",[52,117370,117371,117373,117375,117377,117379,117381],{"class":54,"line":12862},[52,117372,115070],{"class":622},[52,117374,2099],{"class":160},[52,117376,41805],{"class":90},[52,117378,117290],{"class":622},[52,117380,33755],{"class":90},[52,117382,117383],{"class":622},".target_site_id]\n",[52,117385,117386,117389,117391,117393,117395],{"class":54,"line":12868},[52,117387,117388],{"class":622},"        dist ",[52,117390,2099],{"class":160},[52,117392,114521],{"class":622},[52,117394,3644],{"class":160},[52,117396,114526],{"class":622},[52,117398,117399,117402,117404,117406,117408,117411,117413],{"class":54,"line":12876},[52,117400,117401],{"class":622},"        control_cost ",[52,117403,2099],{"class":160},[52,117405,114957],{"class":90},[52,117407,9474],{"class":160},[52,117409,117410],{"class":622}," np.sum(np.square(",[52,117412,33755],{"class":90},[52,117414,117415],{"class":622},".data.ctrl))\n",[52,117417,117418,117420,117422,117424,117426,117428,117430],{"class":54,"line":12881},[52,117419,17708],{"class":160},[52,117421,112717],{"class":90},[52,117423,3121],{"class":622},[52,117425,3644],{"class":160},[52,117427,114516],{"class":622},[52,117429,3644],{"class":160},[52,117431,114979],{"class":622},[52,117433,117434],{"class":54,"line":19560},[52,117435,116],{"emptyLinePlaceholder":115},[52,117437,117438,117440,117443,117446,117448,117451,117453,117455,117457,117459,117461,117464,117467,117469,117471,117473,117475],{"class":54,"line":19566},[52,117439,33733],{"class":160},[52,117441,117442],{"class":58}," reset",[52,117444,117445],{"class":622},"(self, ",[52,117447,1095],{"class":160},[52,117449,117450],{"class":622},", seed: ",[52,117452,3124],{"class":90},[52,117454,2379],{"class":160},[52,117456,41865],{"class":90},[52,117458,16520],{"class":160},[52,117460,41865],{"class":90},[52,117462,117463],{"class":622},", options: ",[52,117465,117466],{"class":90},"dict",[52,117468,2379],{"class":160},[52,117470,41865],{"class":90},[52,117472,16520],{"class":160},[52,117474,41865],{"class":90},[52,117476,33718],{"class":622},[52,117478,117479,117481,117484,117487,117489],{"class":54,"line":19589},[52,117480,33749],{"class":90},[52,117482,117483],{"class":622},"().reset(",[52,117485,117486],{"class":8172},"seed",[52,117488,2099],{"class":160},[52,117490,117491],{"class":622},"seed)\n",[52,117493,117494,117497,117499,117502,117504],{"class":54,"line":19595},[52,117495,117496],{"class":622},"        mujoco.mj_resetData(",[52,117498,33755],{"class":90},[52,117500,117501],{"class":622},".model, ",[52,117503,33755],{"class":90},[52,117505,117506],{"class":622},".data)\n",[52,117508,117509],{"class":54,"line":19618},[52,117510,116],{"emptyLinePlaceholder":115},[52,117512,117513,117515,117518,117520,117522,117525,117527,117529,117531,117533,117535,117537,117539,117541,117543,117545,117547],{"class":54,"line":19632},[52,117514,33777],{"class":90},[52,117516,117517],{"class":622},".data.qpos[:] ",[52,117519,2099],{"class":160},[52,117521,41805],{"class":90},[52,117523,117524],{"class":622},".np_random.uniform(",[52,117526,116682],{"class":8172},[52,117528,116685],{"class":160},[52,117530,89138],{"class":90},[52,117532,15391],{"class":622},[52,117534,116692],{"class":8172},[52,117536,2099],{"class":160},[52,117538,89138],{"class":90},[52,117540,15391],{"class":622},[52,117542,34428],{"class":8172},[52,117544,2099],{"class":160},[52,117546,33755],{"class":90},[52,117548,117549],{"class":622},".model.nq)\n",[52,117551,117552,117554,117557,117559],{"class":54,"line":19652},[52,117553,33777],{"class":90},[52,117555,117556],{"class":622},".data.qvel[:] ",[52,117558,2099],{"class":160},[52,117560,107681],{"class":90},[52,117562,117563,117566,117568,117570,117572],{"class":54,"line":19658},[52,117564,117565],{"class":622},"        mujoco.mj_forward(",[52,117567,33755],{"class":90},[52,117569,117501],{"class":622},[52,117571,33755],{"class":90},[52,117573,117506],{"class":622},[52,117575,117576],{"class":54,"line":19669},[52,117577,116],{"emptyLinePlaceholder":115},[52,117579,117580,117582,117584,117586],{"class":54,"line":19692},[52,117581,33777],{"class":90},[52,117583,116626],{"class":622},[52,117585,2099],{"class":160},[52,117587,50265],{"class":90},[52,117589,117590,117592,117594],{"class":54,"line":19714},[52,117591,17708],{"class":160},[52,117593,41805],{"class":90},[52,117595,117596],{"class":622},"._get_obs(), {}\n",[52,117598,117599],{"class":54,"line":19719},[52,117600,116],{"emptyLinePlaceholder":115},[52,117602,117603,117605,117608],{"class":54,"line":19725},[52,117604,33733],{"class":160},[52,117606,117607],{"class":58}," step",[52,117609,117610],{"class":622},"(self, action):\n",[52,117612,117613,117615,117617,117620,117622,117624],{"class":54,"line":19739},[52,117614,113142],{"class":622},[52,117616,2099],{"class":160},[52,117618,117619],{"class":622}," np.asarray(action, ",[52,117621,96428],{"class":8172},[52,117623,2099],{"class":160},[52,117625,116716],{"class":622},[52,117627,117628,117630,117632,117634,117636,117639,117641],{"class":54,"line":19752},[52,117629,113142],{"class":622},[52,117631,2099],{"class":160},[52,117633,110367],{"class":622},[52,117635,33755],{"class":90},[52,117637,117638],{"class":622},".action_space.low, ",[52,117640,33755],{"class":90},[52,117642,117643],{"class":622},".action_space.high)\n",[52,117645,117646],{"class":54,"line":19757},[52,117647,116],{"emptyLinePlaceholder":115},[52,117649,117650,117652,117655,117657],{"class":54,"line":19771},[52,117651,33777],{"class":90},[52,117653,117654],{"class":622},".data.ctrl[:] ",[52,117656,2099],{"class":160},[52,117658,110390],{"class":622},[52,117660,117661,117663,117665,117667,117669,117671,117673],{"class":54,"line":19776},[52,117662,6362],{"class":160},[52,117664,104421],{"class":622},[52,117666,28988],{"class":160},[52,117668,35375],{"class":90},[52,117670,3121],{"class":622},[52,117672,33755],{"class":90},[52,117674,117675],{"class":622},".frame_skip):\n",[52,117677,117678,117681,117683,117685,117687],{"class":54,"line":19782},[52,117679,117680],{"class":622},"            mujoco.mj_step(",[52,117682,33755],{"class":90},[52,117684,117501],{"class":622},[52,117686,33755],{"class":90},[52,117688,117506],{"class":622},[52,117690,117691],{"class":54,"line":19787},[52,117692,116],{"emptyLinePlaceholder":115},[52,117694,117695,117697,117699,117701],{"class":54,"line":19801},[52,117696,33777],{"class":90},[52,117698,116626],{"class":622},[52,117700,12433],{"class":160},[52,117702,58629],{"class":90},[52,117704,117705],{"class":54,"line":19806},[52,117706,116],{"emptyLinePlaceholder":115},[52,117708,117709,117711,117713,117715],{"class":54,"line":19811},[52,117710,113102],{"class":622},[52,117712,2099],{"class":160},[52,117714,41805],{"class":90},[52,117716,117717],{"class":622},"._get_obs()\n",[52,117719,117720,117722,117724,117726],{"class":54,"line":19825},[52,117721,113207],{"class":622},[52,117723,2099],{"class":160},[52,117725,41805],{"class":90},[52,117727,117728],{"class":622},"._get_reward()\n",[52,117730,117731],{"class":54,"line":19837},[52,117732,116],{"emptyLinePlaceholder":115},[52,117734,117735,117737,117739,117741,117743,117745],{"class":54,"line":19842},[52,117736,115057],{"class":622},[52,117738,2099],{"class":160},[52,117740,41805],{"class":90},[52,117742,117290],{"class":622},[52,117744,33755],{"class":90},[52,117746,117368],{"class":622},[52,117748,117749,117751,117753,117755,117757,117759],{"class":54,"line":19855},[52,117750,115070],{"class":622},[52,117752,2099],{"class":160},[52,117754,41805],{"class":90},[52,117756,117290],{"class":622},[52,117758,33755],{"class":90},[52,117760,117383],{"class":622},[52,117762,117763,117765,117767,117769,117772,117774],{"class":54,"line":19860},[52,117764,117388],{"class":622},[52,117766,2099],{"class":160},[52,117768,112717],{"class":90},[52,117770,117771],{"class":622},"(np.linalg.norm(tip ",[52,117773,3644],{"class":160},[52,117775,117776],{"class":622}," target))\n",[52,117778,117779],{"class":54,"line":19865},[52,117780,116],{"emptyLinePlaceholder":115},[52,117782,117783,117786,117788,117790,117792],{"class":54,"line":19870},[52,117784,117785],{"class":622},"        terminated ",[52,117787,2099],{"class":160},[52,117789,116609],{"class":622},[52,117791,4022],{"class":160},[52,117793,116614],{"class":90},[52,117795,117796,117799,117801,117803,117805,117807,117809],{"class":54,"line":19883},[52,117797,117798],{"class":622},"        truncated ",[52,117800,2099],{"class":160},[52,117802,41805],{"class":90},[52,117804,116626],{"class":622},[52,117806,4677],{"class":160},[52,117808,41805],{"class":90},[52,117810,116633],{"class":622},[52,117812,117813,117816,117818,117820,117823],{"class":54,"line":19888},[52,117814,117815],{"class":622},"        info ",[52,117817,2099],{"class":160},[52,117819,7407],{"class":622},[52,117821,117822],{"class":62},"\"distance\"",[52,117824,117825],{"class":622},": dist}\n",[52,117827,117828,117830],{"class":54,"line":35565},[52,117829,17708],{"class":160},[52,117831,117832],{"class":622}," obs, reward, terminated, truncated, info\n",[52,117834,117835],{"class":54,"line":35571},[52,117836,116],{"emptyLinePlaceholder":115},[52,117838,117839],{"class":54,"line":35577},[52,117840,116],{"emptyLinePlaceholder":115},[52,117842,117843,117845,117847,117849,117851],{"class":54,"line":35583},[52,117844,34879],{"class":160},[52,117846,4935],{"class":58},[52,117848,104318],{"class":622},[52,117850,98614],{"class":90},[52,117852,6698],{"class":622},[52,117854,117855,117858,117860],{"class":54,"line":35589},[52,117856,117857],{"class":622},"    env ",[52,117859,2099],{"class":160},[52,117861,117862],{"class":622}," ReacherEnv()\n",[52,117864,117865,117868,117870,117873,117875,117877,117879],{"class":54,"line":35600},[52,117866,117867],{"class":622},"    obs, info ",[52,117869,2099],{"class":160},[52,117871,117872],{"class":622}," env.reset(",[52,117874,117486],{"class":8172},[52,117876,2099],{"class":160},[52,117878,3306],{"class":90},[52,117880,170],{"class":622},[52,117882,117883,117885,117887,117890],{"class":54,"line":35606},[52,117884,34231],{"class":90},[52,117886,3121],{"class":622},[52,117888,117889],{"class":62},"\"initial obs shape:\"",[52,117891,117892],{"class":622},", obs.shape)\n",[52,117894,117895,117897,117899,117902],{"class":54,"line":35626},[52,117896,34231],{"class":90},[52,117898,3121],{"class":622},[52,117900,117901],{"class":62},"\"initial info:\"",[52,117903,117904],{"class":622},", info)\n",[52,117906,117907],{"class":54,"line":35632},[52,117908,116],{"emptyLinePlaceholder":115},[52,117910,117911,117913,117915],{"class":54,"line":35643},[52,117912,113073],{"class":622},[52,117914,2099],{"class":160},[52,117916,107681],{"class":90},[52,117918,117919,117921,117923,117925,117927,117929,117931],{"class":54,"line":35649},[52,117920,6160],{"class":160},[52,117922,34548],{"class":622},[52,117924,28988],{"class":160},[52,117926,35375],{"class":90},[52,117928,3121],{"class":622},[52,117930,3812],{"class":90},[52,117932,33718],{"class":622},[52,117934,117935,117937,117939],{"class":54,"line":35655},[52,117936,113142],{"class":622},[52,117938,2099],{"class":160},[52,117940,117941],{"class":622}," env.action_space.sample()\n",[52,117943,117944,117947,117949],{"class":54,"line":35661},[52,117945,117946],{"class":622},"        obs, reward, terminated, truncated, info ",[52,117948,2099],{"class":160},[52,117950,116335],{"class":622},[52,117952,117953,117955,117957],{"class":54,"line":35667},[52,117954,113217],{"class":622},[52,117956,12433],{"class":160},[52,117958,113222],{"class":622},[52,117960,117961,117963,117965,117967,117969,117972,117974,117976,117979,117981,117983,117986,117988,117990,117993,117995,117997,117999],{"class":54,"line":35673},[52,117962,35383],{"class":90},[52,117964,3121],{"class":622},[52,117966,113251],{"class":62},[52,117968,113254],{"class":622},[52,117970,117971],{"class":62},"\"reward:\"",[52,117973,15391],{"class":622},[52,117975,34950],{"class":90},[52,117977,117978],{"class":622},"(reward, ",[52,117980,3188],{"class":90},[52,117982,113265],{"class":622},[52,117984,117985],{"class":62},"\"distance:\"",[52,117987,15391],{"class":622},[52,117989,34950],{"class":90},[52,117991,117992],{"class":622},"(info[",[52,117994,117822],{"class":62},[52,117996,115122],{"class":622},[52,117998,3188],{"class":90},[52,118000,33429],{"class":622},[52,118002,118003,118005,118008,118011],{"class":54,"line":35679},[52,118004,5458],{"class":160},[52,118006,118007],{"class":622}," terminated ",[52,118009,118010],{"class":160},"or",[52,118012,118013],{"class":622}," truncated:\n",[52,118015,118016],{"class":54,"line":35685},[52,118017,118018],{"class":160},"            break\n",[52,118020,118021],{"class":54,"line":35705},[52,118022,116],{"emptyLinePlaceholder":115},[52,118024,118025,118027,118029,118031,118033,118035,118037,118039],{"class":54,"line":35711},[52,118026,34231],{"class":90},[52,118028,3121],{"class":622},[52,118030,113296],{"class":62},[52,118032,15391],{"class":622},[52,118034,34950],{"class":90},[52,118036,113303],{"class":622},[52,118038,3188],{"class":90},[52,118040,33429],{"class":622},[52,118042,118043],{"class":54,"line":35727},[52,118044,116],{"emptyLinePlaceholder":115},[52,118046,118047],{"class":54,"line":35733},[52,118048,116],{"emptyLinePlaceholder":115},[52,118050,118051,118053,118055,118057,118059],{"class":54,"line":35747},[52,118052,4509],{"class":160},[52,118054,34152],{"class":90},[52,118056,104479],{"class":160},[52,118058,104482],{"class":62},[52,118060,6698],{"class":622},[52,118062,118063],{"class":54,"line":35753},[52,118064,104489],{"class":622},[274,118066,106490],{},[19,118068,118070],{"className":26774,"code":118069,"language":26776,"meta":28,"style":28},"touch ch8_gym_env.py\n",[26,118071,118072],{"__ignoreMap":28},[52,118073,118074,118076],{"class":54,"line":55},[52,118075,104203],{"class":58},[52,118077,118078],{"class":62}," ch8_gym_env.py\n",[274,118080,113364],{},[19,118082,118084],{"className":26774,"code":118083,"language":26776,"meta":28,"style":28},"python ch8_gym_env.py\n",[26,118085,118086],{"__ignoreMap":28},[52,118087,118088,118090],{"class":54,"line":55},[52,118089,33312],{"class":58},[52,118091,118078],{"class":62},[30,118093,104492],{"id":104492},[274,118095,118096],{},"继承 Gymnasium 环境：",[19,118098,118100],{"className":33310,"code":118099,"language":33312,"meta":28,"style":28},"class ReacherEnv(gym.Env):\n",[26,118101,118102],{"__ignoreMap":28},[52,118103,118104,118106,118108,118110,118112,118114,118116],{"class":54,"line":55},[52,118105,17650],{"class":160},[52,118107,116977],{"class":58},[52,118109,3121],{"class":622},[52,118111,116460],{"class":58},[52,118113,3670],{"class":622},[52,118115,116986],{"class":58},[52,118117,33718],{"class":622},[274,118119,118120],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[274,118122,118123],{},"初始化模型：",[19,118125,118127],{"className":33310,"code":118126,"language":33312,"meta":28,"style":28},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[26,118128,118129,118143],{"__ignoreMap":28},[52,118130,118131,118133,118135,118137,118139,118141],{"class":54,"line":55},[52,118132,33755],{"class":90},[52,118134,117037],{"class":622},[52,118136,2099],{"class":160},[52,118138,104332],{"class":622},[52,118140,104234],{"class":90},[52,118142,170],{"class":622},[52,118144,118145,118147,118149,118151,118153,118155],{"class":54,"line":69},[52,118146,33755],{"class":90},[52,118148,117052],{"class":622},[52,118150,2099],{"class":160},[52,118152,117057],{"class":622},[52,118154,33755],{"class":90},[52,118156,117062],{"class":622},[274,118158,118159,118160,118162],{},"这和前面章节一样，只是现在放到了类的 ",[26,118161,33761],{}," 里。",[274,118164,118165],{},"缓存 site ID：",[19,118167,118169],{"className":33310,"code":118168,"language":33312,"meta":28,"style":28},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[26,118170,118171,118185],{"__ignoreMap":28},[52,118172,118173,118175,118177,118179,118181,118183],{"class":54,"line":55},[52,118174,33755],{"class":90},[52,118176,117073],{"class":622},[52,118178,2099],{"class":160},[52,118180,117078],{"class":622},[52,118182,92482],{"class":90},[52,118184,170],{"class":622},[52,118186,118187,118189,118191,118193,118195,118197],{"class":54,"line":69},[52,118188,33755],{"class":90},[52,118190,117094],{"class":622},[52,118192,2099],{"class":160},[52,118194,117078],{"class":622},[52,118196,92482],{"class":90},[52,118198,170],{"class":622},[274,118200,118201],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[274,118203,118204],{},"reset：",[19,118206,118208],{"className":33310,"code":118207,"language":33312,"meta":28,"style":28},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[26,118209,118210],{"__ignoreMap":28},[52,118211,118212,118214,118216,118218,118220,118222,118224,118226,118228,118230,118232,118234,118236,118238,118240,118242,118244],{"class":54,"line":55},[52,118213,34879],{"class":160},[52,118215,117442],{"class":58},[52,118217,117445],{"class":622},[52,118219,1095],{"class":160},[52,118221,117450],{"class":622},[52,118223,3124],{"class":90},[52,118225,2379],{"class":160},[52,118227,41865],{"class":90},[52,118229,16520],{"class":160},[52,118231,41865],{"class":90},[52,118233,117463],{"class":622},[52,118235,117466],{"class":90},[52,118237,2379],{"class":160},[52,118239,41865],{"class":90},[52,118241,16520],{"class":160},[52,118243,41865],{"class":90},[52,118245,33718],{"class":622},[274,118247,118248,118250],{},[26,118249,72985],{}," 做四件事：",[1070,118252,118253,118256,118259,118262],{},[1073,118254,118255],{},"设置随机种子。",[1073,118257,118258],{},"重置 MuJoCo data。",[1073,118260,118261],{},"随机初始化关节角。",[1073,118263,118264],{},"返回初始观测和 info。",[274,118266,118267],{},"step：",[19,118269,118271],{"className":33310,"code":118270,"language":33312,"meta":28,"style":28},"def step(self, action):\n",[26,118272,118273],{"__ignoreMap":28},[52,118274,118275,118277,118279],{"class":54,"line":55},[52,118276,34879],{"class":160},[52,118278,117607],{"class":58},[52,118280,117610],{"class":622},[274,118282,118283,118285],{},[26,118284,110054],{}," 做六件事：",[1070,118287,118288,118291,118297,118300,118303,118306],{},[1073,118289,118290],{},"检查并裁剪 action。",[1073,118292,118293,118294,31319],{},"写入 ",[26,118295,118296],{},"self.data.ctrl",[1073,118298,118299],{},"连续推进若干个 MuJoCo 物理步。",[1073,118301,118302],{},"计算新观测。",[1073,118304,118305],{},"计算奖励和结束条件。",[1073,118307,118308],{},"返回 Gymnasium 标准五元组。",[30,118310,104628],{"id":104628},[19,118312,118314],{"className":33310,"code":118313,"language":33312,"meta":28,"style":28},"import gymnasium as gym\n",[26,118315,118316],{"__ignoreMap":28},[52,118317,118318,118320,118322,118324],{"class":54,"line":55},[52,118319,33324],{"class":160},[52,118321,116815],{"class":622},[52,118323,34315],{"class":160},[52,118325,116820],{"class":622},[274,118327,118328,118329,118331,118332,118335],{},"导入 Gymnasium，并起别名 ",[26,118330,116460],{},"。后面写 ",[26,118333,118334],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[19,118337,118339],{"className":33310,"code":118338,"language":33312,"meta":28,"style":28},"from gymnasium import spaces\n",[26,118340,118341],{"__ignoreMap":28},[52,118342,118343,118345,118347,118349],{"class":54,"line":55},[52,118344,33669],{"class":160},[52,118346,116815],{"class":622},[52,118348,33324],{"class":160},[52,118350,116847],{"class":622},[274,118352,118353,118354,118357],{},"导入空间定义工具。",[26,118355,118356],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[19,118359,118360],{"className":33310,"code":118099,"language":33312,"meta":28,"style":28},[26,118361,118362],{"__ignoreMap":28},[52,118363,118364,118366,118368,118370,118372,118374,118376],{"class":54,"line":55},[52,118365,17650],{"class":160},[52,118367,116977],{"class":58},[52,118369,3121],{"class":622},[52,118371,116460],{"class":58},[52,118373,3670],{"class":622},[52,118375,116986],{"class":58},[52,118377,33718],{"class":622},[274,118379,118380,118381,118384,118385,118387,118388,103940,118390,118392],{},"定义一个类，名字叫 ",[26,118382,118383],{},"ReacherEnv","。括号里的 ",[26,118386,118334],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[26,118389,72985],{},[26,118391,110054],{}," 这两个核心方法。",[19,118394,118396],{"className":33310,"code":118395,"language":33312,"meta":28,"style":28},"metadata = {\"render_modes\": []}\n",[26,118397,118398],{"__ignoreMap":28},[52,118399,118400,118403,118405,118407,118409],{"class":54,"line":55},[52,118401,118402],{"class":622},"metadata ",[52,118404,2099],{"class":160},[52,118406,7407],{"class":622},[52,118408,117000],{"class":62},[52,118410,117003],{"class":622},[274,118412,118413],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[19,118415,118417],{"className":33310,"code":118416,"language":33312,"meta":28,"style":28},"def __init__(self) -> None:\n",[26,118418,118419],{"__ignoreMap":28},[52,118420,118421,118423,118425,118427,118429],{"class":54,"line":55},[52,118422,34879],{"class":160},[52,118424,33736],{"class":90},[52,118426,117016],{"class":622},[52,118428,98614],{"class":90},[52,118430,6698],{"class":622},[274,118432,118433,118435,118436,31319],{},[26,118434,33761],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[26,118437,118438],{},"env = ReacherEnv()",[19,118440,118442],{"className":33310,"code":118441,"language":33312,"meta":28,"style":28},"super().__init__()\n",[26,118443,118444],{"__ignoreMap":28},[52,118445,118446,118449,118451,118453],{"class":54,"line":55},[52,118447,118448],{"class":90},"super",[52,118450,20217],{"class":622},[52,118452,33761],{"class":90},[52,118454,4938],{"class":622},[274,118456,118457,118458,118460],{},"调用父类 ",[26,118459,118334],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[19,118462,118463],{"className":33310,"code":118126,"language":33312,"meta":28,"style":28},[26,118464,118465,118479],{"__ignoreMap":28},[52,118466,118467,118469,118471,118473,118475,118477],{"class":54,"line":55},[52,118468,33755],{"class":90},[52,118470,117037],{"class":622},[52,118472,2099],{"class":160},[52,118474,104332],{"class":622},[52,118476,104234],{"class":90},[52,118478,170],{"class":622},[52,118480,118481,118483,118485,118487,118489,118491],{"class":54,"line":69},[52,118482,33755],{"class":90},[52,118484,117052],{"class":622},[52,118486,2099],{"class":160},[52,118488,117057],{"class":622},[52,118490,33755],{"class":90},[52,118492,117062],{"class":622},[274,118494,118495,118496,118498,118499,103940,118502,118505],{},"把 MuJoCo 模型和状态保存到 ",[26,118497,33755],{}," 上。",[26,118500,118501],{},"self.model",[26,118503,118504],{},"self.data"," 表示这个环境对象自己的模型和状态。",[19,118507,118508],{"className":33310,"code":118168,"language":33312,"meta":28,"style":28},[26,118509,118510,118524],{"__ignoreMap":28},[52,118511,118512,118514,118516,118518,118520,118522],{"class":54,"line":55},[52,118513,33755],{"class":90},[52,118515,117073],{"class":622},[52,118517,2099],{"class":160},[52,118519,117078],{"class":622},[52,118521,92482],{"class":90},[52,118523,170],{"class":622},[52,118525,118526,118528,118530,118532,118534,118536],{"class":54,"line":69},[52,118527,33755],{"class":90},[52,118529,117094],{"class":622},[52,118531,2099],{"class":160},[52,118533,117078],{"class":622},[52,118535,92482],{"class":90},[52,118537,170],{"class":622},[274,118539,118540,118541,103940,118544,118547],{},"提前查好 tip 和 target 的 site ID。这样 ",[26,118542,118543],{},"_get_obs",[26,118545,118546],{},"_get_reward"," 里就不用每次按名字查找。",[19,118549,118551],{"className":33310,"code":118550,"language":33312,"meta":28,"style":28},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[26,118552,118553,118563,118573],{"__ignoreMap":28},[52,118554,118555,118557,118559,118561],{"class":54,"line":55},[52,118556,33755],{"class":90},[52,118558,116787],{"class":622},[52,118560,2099],{"class":160},[52,118562,57357],{"class":90},[52,118564,118565,118567,118569,118571],{"class":54,"line":69},[52,118566,33755],{"class":90},[52,118568,117166],{"class":622},[52,118570,2099],{"class":160},[52,118572,117171],{"class":90},[52,118574,118575,118577,118579,118581],{"class":54,"line":82},[52,118576,33755],{"class":90},[52,118578,116626],{"class":622},[52,118580,2099],{"class":160},[52,118582,50265],{"class":90},[274,118584,118585,118588,118589,118592,118593,118596],{},[26,118586,118587],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[26,118590,118591],{},"max_steps"," 是一个 episode 最多运行多少步。",[26,118594,118595],{},"steps"," 记录当前 episode 已经走了多少步。",[19,118598,118599],{"className":33310,"code":116665,"language":33312,"meta":28,"style":28},[26,118600,118601],{"__ignoreMap":28},[52,118602,118603,118605,118607,118609,118611,118613,118615,118617,118619,118621,118623,118625,118627,118629,118631,118633,118635,118637,118639,118641],{"class":54,"line":55},[52,118604,33755],{"class":90},[52,118606,116674],{"class":622},[52,118608,2099],{"class":160},[52,118610,116679],{"class":622},[52,118612,116682],{"class":8172},[52,118614,116685],{"class":160},[52,118616,105323],{"class":90},[52,118618,15391],{"class":622},[52,118620,116692],{"class":8172},[52,118622,2099],{"class":160},[52,118624,105323],{"class":90},[52,118626,15391],{"class":622},[52,118628,98891],{"class":8172},[52,118630,2099],{"class":160},[52,118632,3121],{"class":622},[52,118634,3194],{"class":90},[52,118636,116709],{"class":622},[52,118638,96428],{"class":8172},[52,118640,2099],{"class":160},[52,118642,116716],{"class":622},[274,118644,118645,118646,118649,118650,103940,118653,118656],{},"定义动作空间。",[26,118647,118648],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[26,118651,118652],{},"low=-1.0",[26,118654,118655],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[19,118658,118659],{"className":33310,"code":116726,"language":33312,"meta":28,"style":28},[26,118660,118661],{"__ignoreMap":28},[52,118662,118663,118665,118667,118669,118671,118673,118675,118677,118679,118681,118683,118685,118687,118689,118691,118693,118695,118697],{"class":54,"line":55},[52,118664,33755],{"class":90},[52,118666,116735],{"class":622},[52,118668,2099],{"class":160},[52,118670,116679],{"class":622},[52,118672,116682],{"class":8172},[52,118674,116685],{"class":160},[52,118676,116746],{"class":622},[52,118678,116692],{"class":8172},[52,118680,2099],{"class":160},[52,118682,116746],{"class":622},[52,118684,98891],{"class":8172},[52,118686,2099],{"class":160},[52,118688,3121],{"class":622},[52,118690,3559],{"class":90},[52,118692,116709],{"class":622},[52,118694,96428],{"class":8172},[52,118696,2099],{"class":160},[52,118698,116716],{"class":622},[274,118700,118701,118702,118705,118706,118709],{},"定义观测空间。",[26,118703,118704],{},"shape=(10,)"," 表示观测是 10 个数。",[26,118707,118708],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[19,118711,118713],{"className":33310,"code":118712,"language":33312,"meta":28,"style":28},"def _get_obs(self) -> np.ndarray:\n",[26,118714,118715],{"__ignoreMap":28},[52,118716,118717,118719,118721],{"class":54,"line":55},[52,118718,34879],{"class":160},[52,118720,117276],{"class":58},[52,118722,117279],{"class":622},[274,118724,118725,118726,118728],{},"定义内部函数，用来生成观测。函数名前面的 ",[26,118727,4103],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[19,118730,118732],{"className":33310,"code":118731,"language":33312,"meta":28,"style":28},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[26,118733,118734,118748],{"__ignoreMap":28},[52,118735,118736,118738,118740,118742,118744,118746],{"class":54,"line":55},[52,118737,114488],{"class":622},[52,118739,2099],{"class":160},[52,118741,41805],{"class":90},[52,118743,117290],{"class":622},[52,118745,33755],{"class":90},[52,118747,117295],{"class":622},[52,118749,118750,118752,118754,118756,118758,118760],{"class":54,"line":69},[52,118751,114498],{"class":622},[52,118753,2099],{"class":160},[52,118755,41805],{"class":90},[52,118757,117290],{"class":622},[52,118759,33755],{"class":90},[52,118761,117310],{"class":622},[274,118763,118764],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[19,118766,118768],{"className":33310,"code":118767,"language":33312,"meta":28,"style":28},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[26,118769,118770,118786],{"__ignoreMap":28},[52,118771,118772,118774,118776,118778,118780,118782,118784],{"class":54,"line":55},[52,118773,113774],{"class":622},[52,118775,2099],{"class":160},[52,118777,117319],{"class":622},[52,118779,33755],{"class":90},[52,118781,117324],{"class":622},[52,118783,33755],{"class":90},[52,118785,117329],{"class":622},[52,118787,118788,118790],{"class":54,"line":69},[52,118789,20002],{"class":160},[52,118791,117336],{"class":622},[274,118793,118794,118795,118798,118799,118801],{},"拼接观测，并转换成 ",[26,118796,118797],{},"float32","。很多强化学习库默认使用 ",[26,118800,118797],{},"，所以这里主动转换。",[19,118803,118804],{"className":33310,"code":118207,"language":33312,"meta":28,"style":28},[26,118805,118806],{"__ignoreMap":28},[52,118807,118808,118810,118812,118814,118816,118818,118820,118822,118824,118826,118828,118830,118832,118834,118836,118838,118840],{"class":54,"line":55},[52,118809,34879],{"class":160},[52,118811,117442],{"class":58},[52,118813,117445],{"class":622},[52,118815,1095],{"class":160},[52,118817,117450],{"class":622},[52,118819,3124],{"class":90},[52,118821,2379],{"class":160},[52,118823,41865],{"class":90},[52,118825,16520],{"class":160},[52,118827,41865],{"class":90},[52,118829,117463],{"class":622},[52,118831,117466],{"class":90},[52,118833,2379],{"class":160},[52,118835,41865],{"class":90},[52,118837,16520],{"class":160},[52,118839,41865],{"class":90},[52,118841,33718],{"class":622},[274,118843,118844,118845,118847,118848,118850],{},"定义 reset。",[26,118846,117486],{}," 用来控制随机数，保证实验可以复现。",[26,118849,2710],{}," 用来接收额外配置，本章暂时不用。",[19,118852,118854],{"className":33310,"code":118853,"language":33312,"meta":28,"style":28},"super().reset(seed=seed)\n",[26,118855,118856],{"__ignoreMap":28},[52,118857,118858,118860,118862,118864,118866],{"class":54,"line":55},[52,118859,118448],{"class":90},[52,118861,117483],{"class":622},[52,118863,117486],{"class":8172},[52,118865,2099],{"class":160},[52,118867,117491],{"class":622},[274,118869,118870,118871,118874],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[26,118872,118873],{},"self.np_random"," 生成可复现的随机数。",[19,118876,118878],{"className":33310,"code":118877,"language":33312,"meta":28,"style":28},"mujoco.mj_resetData(self.model, self.data)\n",[26,118879,118880],{"__ignoreMap":28},[52,118881,118882,118885,118887,118889,118891],{"class":54,"line":55},[52,118883,118884],{"class":622},"mujoco.mj_resetData(",[52,118886,33755],{"class":90},[52,118888,117501],{"class":622},[52,118890,33755],{"class":90},[52,118892,117506],{"class":622},[274,118894,118895],{},"把 MuJoCo 状态重置到默认状态。",[19,118897,118899],{"className":33310,"code":118898,"language":33312,"meta":28,"style":28},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[26,118900,118901],{"__ignoreMap":28},[52,118902,118903,118905,118907,118909,118911,118913,118915,118917,118919,118921,118923,118925,118927,118929,118931,118933,118935],{"class":54,"line":55},[52,118904,33755],{"class":90},[52,118906,117517],{"class":622},[52,118908,2099],{"class":160},[52,118910,41805],{"class":90},[52,118912,117524],{"class":622},[52,118914,116682],{"class":8172},[52,118916,116685],{"class":160},[52,118918,89138],{"class":90},[52,118920,15391],{"class":622},[52,118922,116692],{"class":8172},[52,118924,2099],{"class":160},[52,118926,89138],{"class":90},[52,118928,15391],{"class":622},[52,118930,34428],{"class":8172},[52,118932,2099],{"class":160},[52,118934,33755],{"class":90},[52,118936,117549],{"class":622},[274,118938,118261,118939,118942,118943,118946,118947,118949],{},[26,118940,118941],{},"[:]"," 表示修改整个数组。",[26,118944,118945],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[26,118948,105070],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[19,118951,118953],{"className":33310,"code":118952,"language":33312,"meta":28,"style":28},"self.data.qvel[:] = 0.0\n",[26,118954,118955],{"__ignoreMap":28},[52,118956,118957,118959,118961,118963],{"class":54,"line":55},[52,118958,33755],{"class":90},[52,118960,117556],{"class":622},[52,118962,2099],{"class":160},[52,118964,107681],{"class":90},[274,118966,118967],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[19,118969,118971],{"className":33310,"code":118970,"language":33312,"meta":28,"style":28},"self.steps = 0\nreturn self._get_obs(), {}\n",[26,118972,118973,118983],{"__ignoreMap":28},[52,118974,118975,118977,118979,118981],{"class":54,"line":55},[52,118976,33755],{"class":90},[52,118978,116626],{"class":622},[52,118980,2099],{"class":160},[52,118982,50265],{"class":90},[52,118984,118985,118987,118989],{"class":54,"line":69},[52,118986,20002],{"class":160},[52,118988,41805],{"class":90},[52,118990,117596],{"class":622},[274,118992,118993],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[19,118995,118996],{"className":33310,"code":118270,"language":33312,"meta":28,"style":28},[26,118997,118998],{"__ignoreMap":28},[52,118999,119000,119002,119004],{"class":54,"line":55},[52,119001,34879],{"class":160},[52,119003,117607],{"class":58},[52,119005,117610],{"class":622},[274,119007,119008],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[19,119010,119012],{"className":33310,"code":119011,"language":33312,"meta":28,"style":28},"action = np.asarray(action, dtype=np.float32)\n",[26,119013,119014],{"__ignoreMap":28},[52,119015,119016,119018,119020,119022,119024,119026],{"class":54,"line":55},[52,119017,110362],{"class":622},[52,119019,2099],{"class":160},[52,119021,117619],{"class":622},[52,119023,96428],{"class":8172},[52,119025,2099],{"class":160},[52,119027,116716],{"class":622},[274,119029,119030,119031,31319],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[26,119032,118797],{},[19,119034,119036],{"className":33310,"code":119035,"language":33312,"meta":28,"style":28},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[26,119037,119038],{"__ignoreMap":28},[52,119039,119040,119042,119044,119046,119048,119050,119052],{"class":54,"line":55},[52,119041,110362],{"class":622},[52,119043,2099],{"class":160},[52,119045,110367],{"class":622},[52,119047,33755],{"class":90},[52,119049,117638],{"class":622},[52,119051,33755],{"class":90},[52,119053,117643],{"class":622},[274,119055,119056],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[19,119058,119060],{"className":33310,"code":119059,"language":33312,"meta":28,"style":28},"self.data.ctrl[:] = action\n",[26,119061,119062],{"__ignoreMap":28},[52,119063,119064,119066,119068,119070],{"class":54,"line":55},[52,119065,33755],{"class":90},[52,119067,117654],{"class":622},[52,119069,2099],{"class":160},[52,119071,110390],{"class":622},[274,119073,119074],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[19,119076,119078],{"className":33310,"code":119077,"language":33312,"meta":28,"style":28},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[26,119079,119080,119096],{"__ignoreMap":28},[52,119081,119082,119084,119086,119088,119090,119092,119094],{"class":54,"line":55},[52,119083,5985],{"class":160},[52,119085,104421],{"class":622},[52,119087,28988],{"class":160},[52,119089,35375],{"class":90},[52,119091,3121],{"class":622},[52,119093,33755],{"class":90},[52,119095,117675],{"class":622},[52,119097,119098,119101,119103,119105,119107],{"class":54,"line":69},[52,119099,119100],{"class":622},"    mujoco.mj_step(",[52,119102,33755],{"class":90},[52,119104,117501],{"class":622},[52,119106,33755],{"class":90},[52,119108,117506],{"class":622},[274,119110,119111,119112,119115,119116,119118,119119,31319],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[26,119113,119114],{},"frame_skip=5","，所以外部调用一次 ",[26,119117,116797],{},"，内部实际执行 5 次 ",[26,119120,104137],{},[19,119122,119124],{"className":33310,"code":119123,"language":33312,"meta":28,"style":28},"self.steps += 1\n",[26,119125,119126],{"__ignoreMap":28},[52,119127,119128,119130,119132,119134],{"class":54,"line":55},[52,119129,33755],{"class":90},[52,119131,116626],{"class":622},[52,119133,12433],{"class":160},[52,119135,58629],{"class":90},[274,119137,119138],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[19,119140,119142],{"className":33310,"code":119141,"language":33312,"meta":28,"style":28},"obs = self._get_obs()\nreward = self._get_reward()\n",[26,119143,119144,119154],{"__ignoreMap":28},[52,119145,119146,119148,119150,119152],{"class":54,"line":55},[52,119147,113774],{"class":622},[52,119149,2099],{"class":160},[52,119151,41805],{"class":90},[52,119153,117717],{"class":622},[52,119155,119156,119158,119160,119162],{"class":54,"line":69},[52,119157,113925],{"class":622},[52,119159,2099],{"class":160},[52,119161,41805],{"class":90},[52,119163,117728],{"class":622},[274,119165,119166],{},"计算新的观测和奖励。",[19,119168,119170],{"className":33310,"code":119169,"language":33312,"meta":28,"style":28},"dist = float(np.linalg.norm(tip - target))\n",[26,119171,119172],{"__ignoreMap":28},[52,119173,119174,119176,119178,119180,119182,119184],{"class":54,"line":55},[52,119175,114516],{"class":622},[52,119177,2099],{"class":160},[52,119179,112717],{"class":90},[52,119181,117771],{"class":622},[52,119183,3644],{"class":160},[52,119185,117776],{"class":622},[274,119187,119188],{},"计算末端到目标的距离，并转换成 Python float。",[19,119190,119191],{"className":33310,"code":116597,"language":33312,"meta":28,"style":28},[26,119192,119193,119205],{"__ignoreMap":28},[52,119194,119195,119197,119199,119201,119203],{"class":54,"line":55},[52,119196,116604],{"class":622},[52,119198,2099],{"class":160},[52,119200,116609],{"class":622},[52,119202,4022],{"class":160},[52,119204,116614],{"class":90},[52,119206,119207,119209,119211,119213,119215,119217,119219],{"class":54,"line":69},[52,119208,116619],{"class":622},[52,119210,2099],{"class":160},[52,119212,41805],{"class":90},[52,119214,116626],{"class":622},[52,119216,4677],{"class":160},[52,119218,41805],{"class":90},[52,119220,116633],{"class":622},[274,119222,119223],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[19,119225,119227],{"className":33310,"code":119226,"language":33312,"meta":28,"style":28},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[26,119228,119229,119242],{"__ignoreMap":28},[52,119230,119231,119234,119236,119238,119240],{"class":54,"line":55},[52,119232,119233],{"class":622},"info ",[52,119235,2099],{"class":160},[52,119237,7407],{"class":622},[52,119239,117822],{"class":62},[52,119241,117825],{"class":622},[52,119243,119244,119246],{"class":54,"line":69},[52,119245,20002],{"class":160},[52,119247,117832],{"class":622},[274,119249,119250,119253],{},[26,119251,119252],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[19,119255,119257],{"className":33310,"code":119256,"language":33312,"meta":28,"style":28},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[26,119258,119259,119268],{"__ignoreMap":28},[52,119260,119261,119264,119266],{"class":54,"line":55},[52,119262,119263],{"class":622},"env ",[52,119265,2099],{"class":160},[52,119267,117862],{"class":622},[52,119269,119270,119272,119274,119276,119278,119280,119282],{"class":54,"line":69},[52,119271,116320],{"class":622},[52,119273,2099],{"class":160},[52,119275,117872],{"class":622},[52,119277,117486],{"class":8172},[52,119279,2099],{"class":160},[52,119281,3306],{"class":90},[52,119283,170],{"class":622},[274,119285,119286,119287,119290],{},"创建环境并重置。",[26,119288,119289],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[19,119292,119294],{"className":33310,"code":119293,"language":33312,"meta":28,"style":28},"action = env.action_space.sample()\n",[26,119295,119296],{"__ignoreMap":28},[52,119297,119298,119300,119302],{"class":54,"line":55},[52,119299,110362],{"class":622},[52,119301,2099],{"class":160},[52,119303,117941],{"class":622},[274,119305,119306],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,119308,105236],{"id":105235},[274,119310,108404],{},[19,119312,119315],{"className":119313,"code":119314,"language":24,"meta":28},[22],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[26,119316,119314],{"__ignoreMap":28},[274,119318,119319],{},"这个环境已经具备强化学习环境的基本结构。",[274,119321,119322],{},"主函数里使用随机动作：",[19,119324,119325],{"className":33310,"code":119293,"language":33312,"meta":28,"style":28},[26,119326,119327],{"__ignoreMap":28},[52,119328,119329,119331,119333],{"class":54,"line":55},[52,119330,110362],{"class":622},[52,119332,2099],{"class":160},[52,119334,117941],{"class":622},[274,119336,119337],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,119339,105268],{"id":105267},[1070,119341,119342,119345,119351,119360,119369,119378,119384],{},[1073,119343,119344],{},"运行程序。",[1073,119346,119347,119348,31319],{},"确认 ",[26,119349,119350],{},"obs.shape == (10,)",[1073,119352,114101,119353,119356,119357,31319],{},[26,119354,119355],{},"env.action_space","，应类似 ",[26,119358,119359],{},"Box(-1.0, 1.0, (2,), float32)",[1073,119361,108505,119362,119365,119366,31319],{},[26,119363,119364],{},"self.max_steps = 10","，确认环境会更快 ",[26,119367,119368],{},"truncated=True",[1073,119370,105331,119371,105334,119374,119377],{},[26,119372,119373],{},"terminated = dist \u003C 0.05",[26,119375,119376],{},"dist \u003C 0.2","，观察是否更容易结束。",[1073,119379,105331,119380,119383],{},[26,119381,119382],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[1073,119385,119386,119387,119389,119390,119393],{},"在 ",[26,119388,119252],{}," 里加入 ",[26,119391,119392],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,119395,105373],{"id":105372},[30,119397,119399],{"id":119398},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[274,119401,119402,119403,119405],{},"Gymnasium 的 ",[26,119404,110054],{}," 返回 5 个值:",[19,119407,119409],{"className":33310,"code":119408,"language":33312,"meta":28,"style":28},"obs, reward, terminated, truncated, info\n",[26,119410,119411],{"__ignoreMap":28},[52,119412,119413],{"class":54,"line":55},[52,119414,119408],{"class":622},[274,119416,119417],{},"不是旧 Gym 的 4 个值。",[30,119419,119421,119424],{"id":119420},"datactrl-action-维度错误",[26,119422,119423],{},"data.ctrl[:] = action"," 维度错误",[274,119426,105443],{},[19,119428,119430],{"className":33310,"code":119429,"language":33312,"meta":28,"style":28},"print(self.model.nu)\nprint(action.shape)\n",[26,119431,119432,119443],{"__ignoreMap":28},[52,119433,119434,119436,119438,119440],{"class":54,"line":55},[52,119435,33347],{"class":90},[52,119437,3121],{"class":622},[52,119439,33755],{"class":90},[52,119441,119442],{"class":622},".model.nu)\n",[52,119444,119445,119447],{"class":54,"line":69},[52,119446,33347],{"class":90},[52,119448,119449],{"class":622},"(action.shape)\n",[274,119451,119452],{},"两者必须匹配。",[30,119454,119456],{"id":119455},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[274,119458,105382],{},[19,119460,119462],{"className":33310,"code":119461,"language":33312,"meta":28,"style":28},"mujoco.mj_forward(self.model, self.data)\n",[26,119463,119464],{"__ignoreMap":28},[52,119465,119466,119469,119471,119473,119475],{"class":54,"line":55},[52,119467,119468],{"class":622},"mujoco.mj_forward(",[52,119470,33755],{"class":90},[52,119472,117501],{"class":622},[52,119474,33755],{"class":90},[52,119476,117506],{"class":622},[30,119478,119480,119482],{"id":119479},"observation_space-维度和-obs-不一致",[26,119481,116520],{}," 维度和 obs 不一致",[274,119484,105495],{},[19,119486,119488],{"className":33310,"code":119487,"language":33312,"meta":28,"style":28},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[26,119489,119490,119500,119507],{"__ignoreMap":28},[52,119491,119492,119494,119496,119498],{"class":54,"line":55},[52,119493,113774],{"class":622},[52,119495,2099],{"class":160},[52,119497,41805],{"class":90},[52,119499,117717],{"class":622},[52,119501,119502,119504],{"class":54,"line":69},[52,119503,33347],{"class":90},[52,119505,119506],{"class":622},"(obs.shape)\n",[52,119508,119509,119511,119513,119515],{"class":54,"line":82},[52,119510,33347],{"class":90},[52,119512,3121],{"class":622},[52,119514,33755],{"class":90},[52,119516,119517],{"class":622},".observation_space.shape)\n",[274,119519,119520],{},"两者必须一致。本章观测是：",[19,119522,119525],{"className":119523,"code":119524,"language":24,"meta":28},[22],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[26,119526,119524],{"__ignoreMap":28},[30,119528,119530],{"id":119529},"action-超过范围","action 超过范围",[274,119532,119533],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[19,119535,119536],{"className":33310,"code":119035,"language":33312,"meta":28,"style":28},[26,119537,119538],{"__ignoreMap":28},[52,119539,119540,119542,119544,119546,119548,119550,119552],{"class":54,"line":55},[52,119541,110362],{"class":622},[52,119543,2099],{"class":160},[52,119545,110367],{"class":622},[52,119547,33755],{"class":90},[52,119549,117638],{"class":622},[52,119551,33755],{"class":90},[52,119553,117643],{"class":622},[274,119555,119556,119557,31319],{},"这能避免无效动作直接写入 ",[26,119558,103998],{},[30,119560,119562],{"id":119561},"忘记返回-info","忘记返回 info",[274,119564,119402,119565,103940,119567,119569],{},[26,119566,72985],{},[26,119568,110054],{}," 都会返回 info：",[19,119571,119572],{"className":33310,"code":116313,"language":33312,"meta":28,"style":28},[26,119573,119574,119582],{"__ignoreMap":28},[52,119575,119576,119578,119580],{"class":54,"line":55},[52,119577,116320],{"class":622},[52,119579,2099],{"class":160},[52,119581,116325],{"class":622},[52,119583,119584,119586,119588],{"class":54,"line":69},[52,119585,116330],{"class":622},[52,119587,2099],{"class":160},[52,119589,116335],{"class":622},[274,119591,119592,119593,31319],{},"即使暂时没有额外信息，也返回 ",[26,119594,35391],{},[14,119596,119598],{"id":119597},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[274,119600,119601],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1070,119603,119604,119607,119610,119613,119616,119619],{},[1073,119605,119606],{},"更稳定的 reward。",[1073,119608,119609],{},"合理的 episode 长度。",[1073,119611,119612],{},"可重复的随机目标采样。",[1073,119614,119615],{},"render 接口。",[1073,119617,119618],{},"环境注册代码。",[1073,119620,119621],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[274,119623,119624],{},"如果只是自己写训练循环，最小形式是：",[19,119626,119628],{"className":33310,"code":119627,"language":33312,"meta":28,"style":28},"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",[26,119629,119630,119638,119654,119658,119674,119683,119692,119702],{"__ignoreMap":28},[52,119631,119632,119634,119636],{"class":54,"line":55},[52,119633,119263],{"class":622},[52,119635,2099],{"class":160},[52,119637,117862],{"class":622},[52,119639,119640,119642,119644,119646,119648,119650,119652],{"class":54,"line":69},[52,119641,116320],{"class":622},[52,119643,2099],{"class":160},[52,119645,117872],{"class":622},[52,119647,117486],{"class":8172},[52,119649,2099],{"class":160},[52,119651,3306],{"class":90},[52,119653,170],{"class":622},[52,119655,119656],{"class":54,"line":82},[52,119657,116],{"emptyLinePlaceholder":115},[52,119659,119660,119662,119664,119666,119668,119670,119672],{"class":54,"line":97},[52,119661,5985],{"class":160},[52,119663,104421],{"class":622},[52,119665,28988],{"class":160},[52,119667,35375],{"class":90},[52,119669,3121],{"class":622},[52,119671,9366],{"class":90},[52,119673,33718],{"class":622},[52,119675,119676,119679,119681],{"class":54,"line":112},[52,119677,119678],{"class":622},"    action ",[52,119680,2099],{"class":160},[52,119682,117941],{"class":622},[52,119684,119685,119688,119690],{"class":54,"line":119},[52,119686,119687],{"class":622},"    obs, reward, terminated, truncated, info ",[52,119689,2099],{"class":160},[52,119691,116335],{"class":622},[52,119693,119694,119696,119698,119700],{"class":54,"line":130},[52,119695,6060],{"class":160},[52,119697,118007],{"class":622},[52,119699,118010],{"class":160},[52,119701,118013],{"class":622},[52,119703,119704,119707,119709],{"class":54,"line":136},[52,119705,119706],{"class":622},"        obs, info ",[52,119708,2099],{"class":160},[52,119710,116325],{"class":622},[14,119712,119714],{"id":119713},"_9本章小结","9.本章小结",[274,119716,119717],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[19,119719,119722],{"className":119720,"code":119721,"language":24,"meta":28},[22],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[26,119723,119721],{"__ignoreMap":28},[274,119725,119726],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[3015,119728,119729],{},"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":28,"searchDepth":69,"depth":69,"links":119731},[119732,119733,119734,119741,119745,119746,119747,119757,119758],{"id":103574,"depth":69,"text":103575},{"id":103697,"depth":69,"text":103698},{"id":103966,"depth":69,"text":103967,"children":119735},[119736,119738,119740],{"id":116544,"depth":82,"text":119737},"terminated 和 truncated 的区别",{"id":116647,"depth":82,"text":119739},"observation_space 和 action_space",{"id":116774,"depth":82,"text":116775},{"id":104174,"depth":69,"text":104175,"children":119742},[119743,119744],{"id":104492,"depth":82,"text":104492},{"id":104628,"depth":82,"text":104628},{"id":105235,"depth":69,"text":105236},{"id":105267,"depth":69,"text":105268},{"id":105372,"depth":69,"text":105373,"children":119748},[119749,119750,119752,119753,119755,119756],{"id":119398,"depth":82,"text":119399},{"id":119420,"depth":82,"text":119751},"data.ctrl[:] = action 维度错误",{"id":119455,"depth":82,"text":119456},{"id":119479,"depth":82,"text":119754},"observation_space 维度和 obs 不一致",{"id":119529,"depth":82,"text":119530},{"id":119561,"depth":82,"text":119562},{"id":119597,"depth":69,"text":119598},{"id":119713,"depth":69,"text":119714},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":116297,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119765,"title":119766,"body":119767,"description":120190,"extension":3047,"meta":120191,"navigation":115,"path":120192,"seo":120193,"stem":120194,"__hash__":120195},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119768,"toc":120180},[119769,119773,119776,119779,119799,119805,119811,119821,119824,119827,119847,119850,119854,119857,119863,119866,119880,119883,119886,119960,119963,119969,119972,119995,119998,120048,120051,120057,120060,120063,120066,120085,120088,120094,120097,120100,120103,120123,120126,120129,120132,120177],[10,119770,119772],{"id":119771},"mujoco-学习","MuJoCo 学习",[274,119774,119775],{},"初版",[274,119777,119778],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1070,119780,119781,119784,119787,119796],{},[1073,119782,119783],{},"MuJoCo 模型文件在描述什么。",[1073,119785,119786],{},"Python 代码怎样读取和推进仿真。",[1073,119788,119789,3327,119791,3327,119793,119795],{},[26,119790,106950],{},[26,119792,107280],{},[26,119794,107283],{}," 这些数组为什么重要。",[1073,119797,119798],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[274,119800,119801,119802,119804],{},"默认环境为 Fedora 44、Python >= 3.10、",[26,119803,103949],{}," 官方 Python bindings。",[274,119806,119807,119808,119810],{},"注意：本文禁止使用 ",[26,119809,103934],{},"。所有示例均使用：",[19,119812,119813],{"className":33310,"code":104498,"language":33312,"meta":28,"style":28},[26,119814,119815],{"__ignoreMap":28},[52,119816,119817,119819],{"class":54,"line":55},[52,119818,33324],{"class":160},[52,119820,104221],{"class":622},[14,119822,119823],{"id":119823},"适合谁阅读",[274,119825,119826],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1070,119828,119829,119832,119835,119838],{},[1073,119830,119831],{},"没学过 MuJoCo，只会一点 Python。",[1073,119833,119834],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[1073,119836,119837],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[1073,119839,119840,119841,119843,119844,119846],{},"以前接触过 ",[26,119842,103934],{},"，现在想迁移到官方 ",[26,119845,103943],{}," Python bindings。",[274,119848,119849],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119851,119853],{"id":119852},"mujoco-到底是什么","MuJoCo 到底是什么",[274,119855,119856],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[19,119858,119861],{"className":119859,"code":119860,"language":24,"meta":28},[22],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[26,119862,119860],{"__ignoreMap":28},[274,119864,119865],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1070,119867,119868,119871,119874,119877],{},[1073,119869,119870],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[1073,119872,119873],{},"快速测试控制算法，不必一开始就上真实机器人。",[1073,119875,119876],{},"生成强化学习环境。",[1073,119878,119879],{},"采集状态、动作、图像、奖励等训练数据。",[14,119881,119882],{"id":119882},"学习前的心智模型",[274,119884,119885],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[3253,119887,119888,119900],{},[3256,119889,119890],{},[3259,119891,119892,119895,119898],{},[3262,119893,119894],{"align":26688},"部分",[3262,119896,119897],{"align":26688},"负责什么",[3262,119899,24142],{"align":26688},[3299,119901,119902,119913,119925,119937,119949],{},[3259,119903,119904,119907,119910],{},[3304,119905,119906],{"align":26688},"MJCF XML",[3304,119908,119909],{"align":26688},"定义世界和机器人结构",[3304,119911,119912],{"align":26688},"地面、盒子、关节、电机、摄像头",[3259,119914,119915,119919,119922],{},[3304,119916,119917],{"align":26688},[26,119918,103637],{},[3304,119920,119921],{"align":26688},"编译后的静态模型",[3304,119923,119924],{"align":26688},"有几个关节、有几个电机、时间步长是多少",[3259,119926,119927,119931,119934],{},[3304,119928,119929],{"align":26688},[26,119930,103647],{},[3304,119932,119933],{"align":26688},"运行中的动态状态",[3304,119935,119936],{"align":26688},"当前时间、位置、速度、电机输入",[3259,119938,119939,119943,119946],{},[3304,119940,119941],{"align":26688},[26,119942,104137],{},[3304,119944,119945],{"align":26688},"推进一步物理仿真",[3304,119947,119948],{"align":26688},"根据重力、力、碰撞更新状态",[3259,119950,119951,119954,119957],{},[3304,119952,119953],{"align":26688},"Viewer \u002F Renderer",[3304,119955,119956],{"align":26688},"把仿真显示出来",[3304,119958,119959],{"align":26688},"打开窗口或保存图片",[274,119961,119962],{},"一句话总结：",[19,119964,119967],{"className":119965,"code":119966,"language":24,"meta":28},[22],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[26,119968,119966],{"__ignoreMap":28},[274,119970,119971],{},"参考来源：",[4118,119973,119974,119981,119988],{},[1073,119975,119976,119977],{},"MuJoCo Python 官方文档：",[300,119978,119979],{"href":119979,"rel":119980},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[304],[1073,119982,119983,119984],{},"MuJoCo XML Reference：",[300,119985,119986],{"href":119986,"rel":119987},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[304],[1073,119989,119990,119991],{},"MuJoCo Overview：",[300,119992,119993],{"href":119993,"rel":119994},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[304],[14,119996,119997],{"id":119997},"章节目录",[1070,119999,120000,120006,120012,120018,120024,120030,120036,120042],{},[1073,120001,120002],{},[300,120003,120005],{"href":120004},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[1073,120007,120008],{},[300,120009,120011],{"href":120010},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[1073,120013,120014],{},[300,120015,120017],{"href":120016},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[1073,120019,120020],{},[300,120021,120023],{"href":120022},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[1073,120025,120026],{},[300,120027,120029],{"href":120028},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[1073,120031,120032],{},[300,120033,120035],{"href":120034},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[1073,120037,120038],{},[300,120039,120041],{"href":120040},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[1073,120043,120044],{},[300,120045,120047],{"href":120046},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,120049,120050],{"id":120050},"推荐学习路线",[19,120052,120055],{"className":120053,"code":120054,"language":24,"meta":28},[22],"环境安装\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",[26,120056,120054],{"__ignoreMap":28},[274,120058,120059],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,120061,120062],{"id":120062},"建议的目录结构",[274,120064,120065],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[19,120067,120069],{"className":26774,"code":120068,"language":26776,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[26,120070,120071,120079],{"__ignoreMap":28},[52,120072,120073,120075,120077],{"class":54,"line":55},[52,120074,1860],{"class":58},[52,120076,1863],{"class":90},[52,120078,104192],{"class":62},[52,120080,120081,120083],{"class":54,"line":69},[52,120082,338],{"class":90},[52,120084,104192],{"class":62},[274,120086,120087],{},"每一章的代码都单独保存：",[19,120089,120092],{"className":120090,"code":120091,"language":24,"meta":28},[22],"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",[26,120093,120091],{"__ignoreMap":28},[274,120095,120096],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,120098,120099],{"id":120099},"学习方法",[274,120101,120102],{},"每章建议按这个顺序操作：",[1070,120104,120105,120108,120111,120114,120117,120120],{},[1073,120106,120107],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[1073,120109,120110],{},"复制最小可运行代码，保存成指定文件。",[1073,120112,120113],{},"运行代码，确认没有报错。",[1073,120115,120116],{},"对照“运行结果说明”理解输出。",[1073,120118,120119],{},"做“验证步骤”，主动改一两个参数。",[1073,120121,120122],{},"遇到报错先看“常见错误与解决方案”。",[274,120124,120125],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,120127,120128],{"id":120128},"全局排错顺序",[274,120130,120131],{},"遇到问题时，按下面顺序查：",[1070,120133,120134,120140,120146,120151,120154,120157,120164,120174],{},[1073,120135,120136,120137],{},"Python 环境是否激活：",[26,120138,120139],{},"which python",[1073,120141,120142,120143],{},"MuJoCo 是否能导入：",[26,120144,120145],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[1073,120147,120148,120149],{},"是否误装了 ",[26,120150,103934],{},[1073,120152,120153],{},"XML 标签是否闭合、属性是否拼写正确",[1073,120155,120156],{},"actuator 引用的 joint 名字是否存在",[1073,120158,120159,120161,120162],{},[26,120160,103998],{}," 的长度是否等于 ",[26,120163,105078],{},[1073,120165,108505,120166,85467,120168,120170,120171],{},[26,120167,106950],{},[26,120169,107280],{}," 后是否调用了 ",[26,120172,120173],{},"mujoco.mj_forward",[1073,120175,120176],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[3015,120178,120179],{},"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":28,"searchDepth":69,"depth":69,"links":120181},[120182,120183,120184,120185,120186,120187,120188,120189],{"id":119823,"depth":69,"text":119823},{"id":119852,"depth":69,"text":119853},{"id":119882,"depth":69,"text":119882},{"id":119997,"depth":69,"text":119997},{"id":120050,"depth":69,"text":120050},{"id":120062,"depth":69,"text":120062},{"id":120099,"depth":69,"text":120099},{"id":120128,"depth":69,"text":120128},"仿真搭建。",{"category":26331},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119766,"description":120190},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":120197,"title":120198,"body":120199,"description":3046,"extension":3047,"meta":120649,"navigation":115,"path":120650,"seo":120651,"stem":120652,"__hash__":120653},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":120200,"toc":120647},[120201,120204,120207,120213,120644],[10,120202,120198],{"id":120203},"_1-最常用的基本操作更新",[274,120205,120206],{},"装linux系统教程：",[274,120208,120209],{},[300,120210,120211],{"href":120211,"rel":120212},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[304],[19,120214,120216],{"className":323,"code":120215,"language":325,"meta":28,"style":28},"#更新相关的知识\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",[26,120217,120218,120223,120228,120236,120241,120250,120255,120275,120280,120291,120296,120305,120310,120338,120343,120362,120367,120386,120390,120395,120411,120415,120420,120450,120454,120459,120475,120479,120484,120499,120503,120508,120524,120528,120533,120544,120556,120560,120565,120581,120585,120590,120608,120612,120617,120626,120630,120635],{"__ignoreMap":28},[52,120219,120220],{"class":54,"line":55},[52,120221,120222],{"class":332},"#更新相关的知识\n",[52,120224,120225],{"class":54,"line":69},[52,120226,120227],{"class":332},"# 更新软件包列表（从服务器获取最新软件信息）\n",[52,120229,120230,120232,120234],{"class":54,"line":82},[52,120231,59],{"class":58},[52,120233,63],{"class":62},[52,120235,66],{"class":62},[52,120237,120238],{"class":54,"line":97},[52,120239,120240],{"class":332},"# 升级所有可更新的软件包（不删除旧包）\n",[52,120242,120243,120245,120247],{"class":54,"line":112},[52,120244,59],{"class":58},[52,120246,63],{"class":62},[52,120248,120249],{"class":62}," upgrade\n",[52,120251,120252],{"class":54,"line":119},[52,120253,120254],{"class":332},"#更新和升级软件包\n",[52,120256,120257,120259,120261,120264,120266,120268,120270,120273],{"class":54,"line":130},[52,120258,59],{"class":58},[52,120260,63],{"class":62},[52,120262,120263],{"class":62}," update",[52,120265,29133],{"class":622},[52,120267,59],{"class":58},[52,120269,63],{"class":62},[52,120271,120272],{"class":62}," upgrade",[52,120274,103903],{"class":90},[52,120276,120277],{"class":54,"line":136},[52,120278,120279],{"class":332},"#列出可更新的软件包及版本信息\n",[52,120281,120282,120285,120288],{"class":54,"line":141},[52,120283,120284],{"class":58},"apt",[52,120286,120287],{"class":62}," list",[52,120289,120290],{"class":90}," --upgradable\n",[52,120292,120293],{"class":54,"line":146},[52,120294,120295],{"class":332},"#彻底升级（处理依赖关系，可能删除旧包）\n",[52,120297,120298,120300,120302],{"class":54,"line":152},[52,120299,59],{"class":58},[52,120301,63],{"class":62},[52,120303,120304],{"class":62}," full-upgrade\n",[52,120306,120307],{"class":54,"line":157},[52,120308,120309],{"class":332},"#设置指定版本\n",[52,120311,120312,120314,120316,120318,120320,120323,120325,120327,120329,120331,120334,120336],{"class":54,"line":173},[52,120313,59],{"class":58},[52,120315,63],{"class":62},[52,120317,76],{"class":62},[52,120319,31836],{"class":160},[52,120321,120322],{"class":62},"package_nam",[52,120324,3191],{"class":622},[52,120326,4072],{"class":160},[52,120328,2099],{"class":62},[52,120330,4022],{"class":160},[52,120332,120333],{"class":62},"version_numbe",[52,120335,3782],{"class":622},[52,120337,54238],{"class":160},[52,120339,120340],{"class":54,"line":178},[52,120341,120342],{"class":332},"#只安装软件包不升级\n",[52,120344,120345,120347,120349,120351,120353,120355,120357,120359],{"class":54,"line":184},[52,120346,59],{"class":58},[52,120348,63],{"class":62},[52,120350,76],{"class":62},[52,120352,31836],{"class":160},[52,120354,120322],{"class":62},[52,120356,3191],{"class":622},[52,120358,4072],{"class":160},[52,120360,120361],{"class":90}," --no-upgrade\n",[52,120363,120364],{"class":54,"line":189},[52,120365,120366],{"class":332},"#只升级，不存在就不安装\n",[52,120368,120369,120371,120373,120375,120377,120379,120381,120383],{"class":54,"line":201},[52,120370,59],{"class":58},[52,120372,63],{"class":62},[52,120374,76],{"class":62},[52,120376,31836],{"class":160},[52,120378,120322],{"class":62},[52,120380,3191],{"class":622},[52,120382,4072],{"class":160},[52,120384,120385],{"class":90}," --only-upgrade\n",[52,120387,120388],{"class":54,"line":206},[52,120389,116],{"emptyLinePlaceholder":115},[52,120391,120392],{"class":54,"line":224},[52,120393,120394],{"class":332},"#安装指定的软件命令\n",[52,120396,120397,120399,120401,120403,120405,120407,120409],{"class":54,"line":229},[52,120398,59],{"class":58},[52,120400,63],{"class":62},[52,120402,76],{"class":62},[52,120404,31836],{"class":160},[52,120406,120322],{"class":62},[52,120408,3191],{"class":622},[52,120410,54238],{"class":160},[52,120412,120413],{"class":54,"line":241},[52,120414,116],{"emptyLinePlaceholder":115},[52,120416,120417],{"class":54,"line":246},[52,120418,120419],{"class":332},"#安装多个软件包\n",[52,120421,120422,120424,120426,120428,120430,120433,120436,120438,120440,120443,120445,120447],{"class":54,"line":252},[52,120423,59],{"class":58},[52,120425,63],{"class":62},[52,120427,76],{"class":62},[52,120429,31836],{"class":160},[52,120431,120432],{"class":62},"package_",[52,120434,120435],{"class":160},"1>",[52,120437,31836],{"class":160},[52,120439,120432],{"class":62},[52,120441,120442],{"class":160},"2>",[52,120444,31836],{"class":160},[52,120446,120432],{"class":62},[52,120448,120449],{"class":160},"3>\n",[52,120451,120452],{"class":54,"line":257},[52,120453,116],{"emptyLinePlaceholder":115},[52,120455,120456],{"class":54,"line":266},[52,120457,120458],{"class":332},"#更新指定的软件命令\n",[52,120460,120461,120463,120465,120467,120469,120471,120473],{"class":54,"line":4722},[52,120462,59],{"class":58},[52,120464,63],{"class":62},[52,120466,120263],{"class":62},[52,120468,31836],{"class":160},[52,120470,120322],{"class":62},[52,120472,3191],{"class":622},[52,120474,54238],{"class":160},[52,120476,120477],{"class":54,"line":4727},[52,120478,116],{"emptyLinePlaceholder":115},[52,120480,120481],{"class":54,"line":4741},[52,120482,120483],{"class":332},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[52,120485,120486,120488,120491,120493,120495,120497],{"class":54,"line":4746},[52,120487,120284],{"class":58},[52,120489,120490],{"class":62}," show",[52,120492,31836],{"class":160},[52,120494,120322],{"class":62},[52,120496,3191],{"class":622},[52,120498,54238],{"class":160},[52,120500,120501],{"class":54,"line":5538},[52,120502,116],{"emptyLinePlaceholder":115},[52,120504,120505],{"class":54,"line":5552},[52,120506,120507],{"class":332},"#删除软件包命令\n",[52,120509,120510,120512,120514,120516,120518,120520,120522],{"class":54,"line":5560},[52,120511,59],{"class":58},[52,120513,63],{"class":62},[52,120515,561],{"class":62},[52,120517,31836],{"class":160},[52,120519,120322],{"class":62},[52,120521,3191],{"class":622},[52,120523,54238],{"class":160},[52,120525,120526],{"class":54,"line":5565},[52,120527,116],{"emptyLinePlaceholder":115},[52,120529,120530],{"class":54,"line":5571},[52,120531,120532],{"class":332},"# 清理旧版本和缓存（释放磁盘空间）\n",[52,120534,120535,120537,120539,120541],{"class":54,"line":5577},[52,120536,59],{"class":58},[52,120538,63],{"class":62},[52,120540,733],{"class":62},[52,120542,120543],{"class":332},"  # 删除不再需要的依赖和库文件\n",[52,120545,120546,120548,120550,120553],{"class":54,"line":5582},[52,120547,59],{"class":58},[52,120549,63],{"class":62},[52,120551,120552],{"class":62}," clean",[52,120554,120555],{"class":332},"       # 清理下载的缓存包\n",[52,120557,120558],{"class":54,"line":10904},[52,120559,116],{"emptyLinePlaceholder":115},[52,120561,120562],{"class":54,"line":10928},[52,120563,120564],{"class":332},"#移除软件包及配置文件\n",[52,120566,120567,120569,120571,120573,120575,120577,120579],{"class":54,"line":10933},[52,120568,59],{"class":58},[52,120570,63],{"class":62},[52,120572,1089],{"class":62},[52,120574,31836],{"class":160},[52,120576,120322],{"class":62},[52,120578,3191],{"class":622},[52,120580,54238],{"class":160},[52,120582,120583],{"class":54,"line":10939},[52,120584,116],{"emptyLinePlaceholder":115},[52,120586,120587],{"class":54,"line":10966},[52,120588,120589],{"class":332},"#查找软件包命令\n",[52,120591,120592,120594,120596,120599,120601,120604,120606],{"class":54,"line":10971},[52,120593,59],{"class":58},[52,120595,63],{"class":62},[52,120597,120598],{"class":62}," search",[52,120600,31836],{"class":160},[52,120602,120603],{"class":62},"keywor",[52,120605,3427],{"class":622},[52,120607,54238],{"class":160},[52,120609,120610],{"class":54,"line":10977},[52,120611,116],{"emptyLinePlaceholder":115},[52,120613,120614],{"class":54,"line":10989},[52,120615,120616],{"class":332},"#列出所有已安装的包\n",[52,120618,120619,120621,120623],{"class":54,"line":11001},[52,120620,120284],{"class":58},[52,120622,120287],{"class":62},[52,120624,120625],{"class":90}," --installed\n",[52,120627,120628],{"class":54,"line":11013},[52,120629,116],{"emptyLinePlaceholder":115},[52,120631,120632],{"class":54,"line":12672},[52,120633,120634],{"class":332},"#列出所有已安装的包的版本信息\n",[52,120636,120637,120639,120641],{"class":54,"line":12697},[52,120638,120284],{"class":58},[52,120640,120287],{"class":62},[52,120642,120643],{"class":90}," --all-versions\n",[3015,120645,120646],{},"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":28,"searchDepth":69,"depth":69,"links":120648},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":120198,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":120655,"title":120656,"body":120657,"description":3046,"extension":3047,"meta":121396,"navigation":115,"path":121397,"seo":121398,"stem":121399,"__hash__":121400},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":120658,"toc":121383},[120659,120662,120666,120669,120675,120679,120683,120689,120694,120699,120704,120709,120714,120717,120720,120723,120726,120730,120733,120738,120741,120746,120749,120754,120761,120764,120767,120770,120773,120776,120787,120791,120795,120800,120805,120809,120814,120818,120823,120827,120831,120836,120839,120884,120889,120893,120897,120902,120908,120913,120923,120928,120938,120943,120948,120975,120979,120982,120987,120990,121015,121019,121024,121027,121032,121037,121057,121062,121065,121080,121084,121137,121140,121145,121149,121152,121167,121170,121173,121178,121182,121186,121189,121193,121197,121200,121205,121210,121214,121219,121227,121230,121237,121242,121247,121250,121255,121262,121267,121274,121278,121280,121285,121289,121292,121295,121300,121303,121308,121311,121316,121321,121326,121330,121335,121339,121380],[10,120660,120656],{"id":120661},"_2-linux装机教程",[14,120663,120665],{"id":120664},"_21-实体机","2.1 实体机",[274,120667,120668],{},"使用清华源：（Ubuntu24.04）",[274,120670,120671],{},[300,120672,120673],{"href":120673,"rel":120674},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[304],[14,120676,120678],{"id":120677},"_22-普通虚拟机","2.2 普通虚拟机",[30,120680,120682],{"id":120681},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[274,120684,120685],{},[300,120686,120687],{"href":120687,"rel":120688},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[304],[274,120690,120691],{},[280,120692],{"alt":28,"src":120693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[274,120695,120696],{},[280,120697],{"alt":28,"src":120698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[274,120700,120701],{},[280,120702],{"alt":28,"src":120703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[274,120705,120706],{},[280,120707],{"alt":28,"src":120708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[274,120710,120711],{},[280,120712],{"alt":28,"src":120713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[274,120715,120716],{},"内存4G（4096MB）；",[274,120718,120719],{},"CPU给4个核；",[274,120721,120722],{},"硬盘动态分配60G；",[274,120724,120725],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[30,120727,120729],{"id":120728},"_222-安装ubuntu","2.2.2 安装Ubuntu",[274,120731,120732],{},"按照1.1的步骤下载Ubuntu",[274,120734,120735],{},[280,120736],{"alt":28,"src":120737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[274,120739,120740],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[274,120742,120743],{},[280,120744],{"alt":28,"src":120745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[274,120747,120748],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[274,120750,120751],{},[280,120752],{"alt":28,"src":120753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[274,120755,120756,120757,120760],{},"选择“正常安装”(找不到都用Alt+F7)， ",[538,120758,120759],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[274,120762,120763],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[274,120765,120766],{},"将改动写入磁盘吗 继续",[274,120768,120769],{},"选择东八区（shanghai，大致在地图上点一下），继续",[274,120771,120772],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[274,120774,120775],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[274,120777,120778,120779,120782,120783,120786],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[538,120780,120781],{},"除了"," 选不发送系统信息与不升级之外， ",[538,120784,120785],{},"其它"," 都跳过或前进）",[30,120788,120790],{"id":120789},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[1486,120792,120794],{"id":120793},"_2231-全屏","2.2.3.1 全屏",[274,120796,120797],{},[280,120798],{"alt":28,"src":120799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[274,120801,120802],{},[280,120803],{"alt":28,"src":120804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[1486,120806,120808],{"id":120807},"_2232-文件交换","2.2.3.2 文件交换",[274,120810,120811],{},[280,120812],{"alt":28,"src":120813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[1486,120815,120817],{"id":120816},"_2233-新建文本文档","2.2.3.3 新建文本文档",[274,120819,120820],{},[280,120821],{"alt":28,"src":120822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120824,120826],{"id":120825},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[30,120828,120830],{"id":120829},"_231-简介与优缺点","2.3.1 简介与优缺点",[1070,120832,120833],{},[1073,120834,120835],{},"什么情况下推荐？",[274,120837,120838],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1070,120840,120841],{"start":69},[1073,120842,120843,120844],{},"优缺点：",[1070,120845,120846,120876],{},[1073,120847,120848,120849],{},"优点：",[1070,120850,120851,120854,120861,120864,120867,120870,120873],{},[1073,120852,120853],{},"WSL2是最好的Linux发行版;(bushi)",[1073,120855,120856,120857,120860],{},"性能损耗极低。且比在Windows上跑深度性能 ",[538,120858,120859],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[1073,120862,120863],{},"非常方便调用USB设备，可以USB直通;",[1073,120865,120866],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[1073,120868,120869],{},"非常方便Win与WSL2互相传文件等协同操作;",[1073,120871,120872],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[1073,120874,120875],{},"非常方便使用Windows的VScode远程开发;",[1073,120877,120878,120879],{},"缺点：",[1070,120880,120881],{},[1073,120882,120883],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[274,120885,120886],{},[280,120887],{"alt":28,"src":120888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[30,120890,120892],{"id":120891},"_232-安装教程","2.3.2 安装教程",[1486,120894,120896],{"id":120895},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1070,120898,120899],{},[1073,120900,120901],{},"方法一(图形界面)",[274,120903,120904,120905,27567],{},"用Win+R输入",[26,120906,120907],{},"appwiz.cpl",[274,120909,120910],{},[280,120911],{"alt":28,"src":120912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[274,120914,120915,120916,120919,120920,29412],{},"点击OK进入 ",[538,120917,120918],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[538,120921,120922],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[274,120924,120925],{},[280,120926],{"alt":28,"src":120927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[274,120929,120930,120931,103940,120934,120937],{},"选择 ",[538,120932,120933],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[538,120935,120936],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[274,120939,120940],{},[280,120941],{"alt":28,"src":120942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1070,120944,120945],{"start":69},[1073,120946,120947],{},"方法二(命令行)",[19,120949,120953],{"className":120950,"code":120951,"language":120952,"meta":28,"style":28},"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",[26,120954,120955,120960,120965,120970],{"__ignoreMap":28},[52,120956,120957],{"class":54,"line":55},[52,120958,120959],{},"# 开启 Linux 子系统\n",[52,120961,120962],{"class":54,"line":69},[52,120963,120964],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[52,120966,120967],{"class":54,"line":82},[52,120968,120969],{},"# 开启虚拟机平台\n",[52,120971,120972],{"class":54,"line":97},[52,120973,120974],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[1486,120976,120978],{"id":120977},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[274,120980,120981],{},"用管理员权限打开powershell",[274,120983,120984],{},[280,120985],{"alt":28,"src":120986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[274,120988,120989],{},"升级WSL并设置默认版本为WSL2",[19,120991,120993],{"className":120950,"code":120992,"language":120952,"meta":28,"style":28},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[26,120994,120995,121000,121005,121010],{"__ignoreMap":28},[52,120996,120997],{"class":54,"line":55},[52,120998,120999],{},"# 更新 wsl\n",[52,121001,121002],{"class":54,"line":69},[52,121003,121004],{},"wsl --update\n",[52,121006,121007],{"class":54,"line":82},[52,121008,121009],{},"# 将 wsl 版本设置为 wsl2\n",[52,121011,121012],{"class":54,"line":97},[52,121013,121014],{},"wsl --set-default-version 2\n",[1486,121016,121018],{"id":121017},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1070,121020,121021],{},[1073,121022,121023],{},"方式一(商店下载)",[274,121025,121026],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[274,121028,121029],{},[280,121030],{"alt":28,"src":121031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1070,121033,121034],{"start":69},[1073,121035,121036],{},"方式二(命令行安装)",[19,121038,121040],{"className":120950,"code":121039,"language":120952,"meta":28,"style":28},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[26,121041,121042,121047,121052],{"__ignoreMap":28},[52,121043,121044],{"class":54,"line":55},[52,121045,121046],{},"# 列出可安装的 Linux 版本\n",[52,121048,121049],{"class":54,"line":69},[52,121050,121051],{},"#（需要科学手段）\n",[52,121053,121054],{"class":54,"line":82},[52,121055,121056],{},"wsl --list --online\n",[274,121058,121059],{},[280,121060],{"alt":28,"src":121061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[274,121063,121064],{},"选择对应发行版并安装",[19,121066,121068],{"className":120950,"code":121067,"language":120952,"meta":28,"style":28},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[26,121069,121070,121075],{"__ignoreMap":28},[52,121071,121072],{"class":54,"line":55},[52,121073,121074],{},"# Ubuntu安装完毕后需要重启系统\n",[52,121076,121077],{"class":54,"line":69},[52,121078,121079],{},"wsl --install -d Ubuntu-24.04\n",[1486,121081,121083],{"id":121082},"_2324-查看系统状态","2.3.2.4 查看系统状态",[19,121085,121087],{"className":120950,"code":121086,"language":120952,"meta":28,"style":28},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[26,121088,121089,121094,121099,121104,121109,121113,121117,121122,121127,121132],{"__ignoreMap":28},[52,121090,121091],{"class":54,"line":55},[52,121092,121093],{},"# 查看 wsl\n",[52,121095,121096],{"class":54,"line":69},[52,121097,121098],{},"wsl -l\n",[52,121100,121101],{"class":54,"line":82},[52,121102,121103],{},"# 查看 wsl 运行版本或模式\n",[52,121105,121106],{"class":54,"line":97},[52,121107,121108],{},"wsl -l -v\n",[52,121110,121111],{"class":54,"line":112},[52,121112,116],{"emptyLinePlaceholder":115},[52,121114,121115],{"class":54,"line":119},[52,121116,116],{"emptyLinePlaceholder":115},[52,121118,121119],{"class":54,"line":130},[52,121120,121121],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[52,121123,121124],{"class":54,"line":136},[52,121125,121126],{},"wsl --set-version \u003Cdistro> 2\n",[52,121128,121129],{"class":54,"line":141},[52,121130,121131],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[52,121133,121134],{"class":54,"line":146},[52,121135,121136],{},"wsl --unregister \u003Cdistro>\n",[274,121138,121139],{},"输出Version为2即正常",[274,121141,121142],{},[280,121143],{"alt":28,"src":121144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[1486,121146,121148],{"id":121147},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[274,121150,121151],{},"直接在Powershell里输入wsl命令进入子系统",[19,121153,121155],{"className":120950,"code":121154,"language":120952,"meta":28,"style":28},"# 进入子系统\nwsl\n",[26,121156,121157,121162],{"__ignoreMap":28},[52,121158,121159],{"class":54,"line":55},[52,121160,121161],{},"# 进入子系统\n",[52,121163,121164],{"class":54,"line":69},[52,121165,121166],{},"wsl\n",[274,121168,121169],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[274,121171,121172],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[274,121174,121175],{},[280,121176],{"alt":28,"src":121177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[30,121179,121181],{"id":121180},"_233-配置各种环境","2.3.3 配置各种环境",[1486,121183,121185],{"id":121184},"_2331-换源","2.3.3.1 换源",[274,121187,121188],{},"(同实体机LINUX，往下找教程)",[1486,121190,121192],{"id":121191},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[1491,121194,121196],{"id":121195},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[274,121198,121199],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[274,121201,121202],{},[280,121203],{"alt":28,"src":121204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[274,121206,121207],{},[280,121208],{"alt":28,"src":121209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[1491,121211,121213],{"id":121212},"_23322-cuda","2.3.3.2.2 CUDA",[274,121215,1813,121216],{},[300,121217,1816],{"href":1816,"rel":121218},[304],[274,121220,121221,121224],{},[280,121222],{"alt":28,"src":121223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[280,121225],{"alt":28,"src":121226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[274,121228,121229],{},"在下方的网站，选择合适的版本。",[274,121231,121232,121233],{},"WSL2 专属 CUDA 指南：",[300,121234,121235],{"href":121235,"rel":121236},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[304],[274,121238,121239],{},[538,121240,121241],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[274,121243,121244],{},[280,121245],{"alt":28,"src":121246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[274,121248,121249],{},"挨行敲一遍",[274,121251,121252],{},[280,121253],{"alt":28,"src":121254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[274,121256,121257,121258,121261],{},"敲完后，输入",[26,121259,121260],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[274,121263,121264],{},[280,121265],{"alt":28,"src":121266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[274,121268,121269,121270,121273],{},"（请详看下方教程的",[538,121271,121272],{},"安装CUDA的配置环境来看","如何配置环境）",[1491,121275,121277],{"id":121276},"_23323-cudnn","2.3.3.2.3 cuDNN",[274,121279,121188],{},[274,121281,121282],{},[280,121283],{"alt":28,"src":121284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[1486,121286,121288],{"id":121287},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[274,121290,121291],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[274,121293,121294],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[274,121296,121297],{},[280,121298],{"alt":28,"src":121299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[274,121301,121302],{},"连接WSL2",[274,121304,121305],{},[280,121306],{"alt":28,"src":121307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[274,121309,121310],{},"远程开发成功。",[274,121312,121313],{},[280,121314],{"alt":28,"src":121315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[274,121317,121318],{},[280,121319],{"alt":28,"src":121320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[274,121322,121323],{},[280,121324],{"alt":28,"src":121325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[1486,121327,121329],{"id":121328},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[274,121331,121332],{},[280,121333],{"alt":28,"src":121334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[1486,121336,121338],{"id":121337},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[19,121340,121342],{"className":323,"code":121341,"language":325,"meta":28,"style":28},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[26,121343,121344,121352,121360,121371,121375],{"__ignoreMap":28},[52,121345,121346,121348,121350],{"class":54,"line":55},[52,121347,59],{"class":58},[52,121349,63],{"class":62},[52,121351,66],{"class":62},[52,121353,121354,121356,121358],{"class":54,"line":69},[52,121355,59],{"class":58},[52,121357,63],{"class":62},[52,121359,120249],{"class":62},[52,121361,121362,121364,121366,121368],{"class":54,"line":82},[52,121363,59],{"class":58},[52,121365,63],{"class":62},[52,121367,76],{"class":62},[52,121369,121370],{"class":62}," mesa-utils\n",[52,121372,121373],{"class":54,"line":97},[52,121374,116],{"emptyLinePlaceholder":115},[52,121376,121377],{"class":54,"line":112},[52,121378,121379],{"class":332},"#然后重启wsl2即可\n",[3015,121381,121382],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"searchDepth":69,"depth":69,"links":121384},[121385,121386,121391],{"id":120664,"depth":69,"text":120665},{"id":120677,"depth":69,"text":120678,"children":121387},[121388,121389,121390],{"id":120681,"depth":82,"text":120682},{"id":120728,"depth":82,"text":120729},{"id":120789,"depth":82,"text":120790},{"id":120825,"depth":69,"text":120826,"children":121392},[121393,121394,121395],{"id":120829,"depth":82,"text":120830},{"id":120891,"depth":82,"text":120892},{"id":121180,"depth":82,"text":121181},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":120656,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":4,"title":5,"body":121402,"description":3046,"extension":3047,"meta":123799,"navigation":115,"path":3049,"seo":123800,"stem":3051,"__hash__":3052},{"type":7,"value":121403,"toc":123771},[121404,121406,121408,121413,121415,121420,121422,121586,121588,121592,121594,121596,121598,121600,121605,121609,121611,121613,121617,121645,121649,121651,121719,121721,121725,121727,121729,121763,121765,121770,121784,121788,121792,121894,121898,121900,121926,121930,121932,121937,121981,121985,121987,121989,122001,122005,122031,122035,122037,122059,122061,122065,122067,122069,122071,122073,122111,122113,122115,122117,122155,122157,122159,122161,122165,122169,122171,122191,122193,122199,122203,122205,122209,122213,122215,122219,122221,122225,122245,122249,122305,122311,122315,122319,122321,122325,122327,122331,122335,122349,122353,122358,122362,122376,122378,122380,122382,122384,122418,122420,122424,122518,122520,122524,122526,122528,122560,122562,122564,122566,122606,122608,122650,122652,122656,122662,122706,122708,122772,122774,122796,122798,122800,122804,122808,122816,122818,122822,122826,122831,122833,122837,122842,122844,122848,122850,122910,122914,122916,122920,122922,122926,122928,122932,122934,122938,122942,122944,123002,123004,123014,123018,123020,123032,123034,123058,123062,123086,123088,123092,123094,123098,123103,123105,123109,123111,123115,123117,123119,123123,123125,123129,123133,123135,123139,123141,123249,123253,123277,123279,123283,123287,123301,123303,123335,123337,123359,123363,123371,123491,123493,123497,123509,123511,123553,123555,123579,123581,123595,123599,123611,123613,123665,123669,123677,123681,123683,123693,123697,123701,123723,123725,123729,123731,123747,123751,123755,123765,123769],[10,121405,5],{"id":12},[14,121407,17],{"id":16},[19,121409,121411],{"className":121410,"code":23,"language":24},[22],[26,121412,23],{"__ignoreMap":28},[30,121414,33],{"id":32},[19,121416,121418],{"className":121417,"code":37,"language":24},[22],[26,121419,37],{"__ignoreMap":28},[30,121421,43],{"id":42},[19,121423,121424],{"className":46,"code":47,"language":48,"meta":28,"style":28},[26,121425,121426,121434,121444,121454,121466,121470,121478,121482,121486,121490,121494,121498,121508,121512,121516,121520,121530,121534,121546,121550,121560,121564,121568,121572,121578],{"__ignoreMap":28},[52,121427,121428,121430,121432],{"class":54,"line":55},[52,121429,59],{"class":58},[52,121431,63],{"class":62},[52,121433,66],{"class":62},[52,121435,121436,121438,121440,121442],{"class":54,"line":69},[52,121437,59],{"class":58},[52,121439,63],{"class":62},[52,121441,76],{"class":62},[52,121443,79],{"class":62},[52,121445,121446,121448,121450,121452],{"class":54,"line":82},[52,121447,59],{"class":58},[52,121449,87],{"class":62},[52,121451,91],{"class":90},[52,121453,94],{"class":62},[52,121455,121456,121458,121460,121462,121464],{"class":54,"line":97},[52,121457,59],{"class":58},[52,121459,87],{"class":62},[52,121461,91],{"class":90},[52,121463,106],{"class":62},[52,121465,109],{"class":90},[52,121467,121468],{"class":54,"line":112},[52,121469,116],{"emptyLinePlaceholder":115},[52,121471,121472,121474,121476],{"class":54,"line":119},[52,121473,59],{"class":58},[52,121475,124],{"class":62},[52,121477,127],{"class":62},[52,121479,121480],{"class":54,"line":130},[52,121481,133],{"class":62},[52,121483,121484],{"class":54,"line":136},[52,121485,116],{"emptyLinePlaceholder":115},[52,121487,121488],{"class":54,"line":141},[52,121489,116],{"emptyLinePlaceholder":115},[52,121491,121492],{"class":54,"line":146},[52,121493,149],{"class":58},[52,121495,121496],{"class":54,"line":152},[52,121497,116],{"emptyLinePlaceholder":115},[52,121499,121500,121502,121504,121506],{"class":54,"line":157},[52,121501,161],{"class":160},[52,121503,164],{"class":62},[52,121505,167],{"class":58},[52,121507,170],{"class":62},[52,121509,121510],{"class":54,"line":173},[52,121511,116],{"emptyLinePlaceholder":115},[52,121513,121514],{"class":54,"line":178},[52,121515,181],{"class":58},[52,121517,121518],{"class":54,"line":184},[52,121519,116],{"emptyLinePlaceholder":115},[52,121521,121522,121524,121526,121528],{"class":54,"line":189},[52,121523,161],{"class":160},[52,121525,164],{"class":62},[52,121527,196],{"class":58},[52,121529,170],{"class":62},[52,121531,121532],{"class":54,"line":201},[52,121533,116],{"emptyLinePlaceholder":115},[52,121535,121536,121538,121540,121542,121544],{"class":54,"line":206},[52,121537,209],{"class":58},[52,121539,212],{"class":62},[52,121541,215],{"class":58},[52,121543,218],{"class":62},[52,121545,221],{"class":58},[52,121547,121548],{"class":54,"line":224},[52,121549,116],{"emptyLinePlaceholder":115},[52,121551,121552,121554,121556,121558],{"class":54,"line":229},[52,121553,161],{"class":160},[52,121555,164],{"class":62},[52,121557,236],{"class":58},[52,121559,170],{"class":62},[52,121561,121562],{"class":54,"line":241},[52,121563,116],{"emptyLinePlaceholder":115},[52,121565,121566],{"class":54,"line":246},[52,121567,249],{"class":58},[52,121569,121570],{"class":54,"line":252},[52,121571,116],{"emptyLinePlaceholder":115},[52,121573,121574,121576],{"class":54,"line":257},[52,121575,260],{"class":62},[52,121577,263],{"class":58},[52,121579,121580,121582,121584],{"class":54,"line":266},[52,121581,59],{"class":58},[52,121583,63],{"class":62},[52,121585,66],{"class":62},[274,121587,276],{},[274,121589,121590],{},[280,121591],{"alt":28,"src":282},[14,121593,286],{"id":285},[30,121595,290],{"id":289},[274,121597,293],{},[274,121599,296],{},[274,121601,121602],{},[300,121603,302],{"href":302,"rel":121604},[304],[274,121606,121607],{},[280,121608],{"alt":28,"src":309},[274,121610,312],{},[274,121612,315],{},[274,121614,121615],{},[280,121616],{"alt":28,"src":320},[19,121618,121619],{"className":323,"code":324,"language":325,"meta":28,"style":28},[26,121620,121621,121625,121631,121635],{"__ignoreMap":28},[52,121622,121623],{"class":54,"line":55},[52,121624,333],{"class":332},[52,121626,121627,121629],{"class":54,"line":69},[52,121628,338],{"class":90},[52,121630,341],{"class":62},[52,121632,121633],{"class":54,"line":82},[52,121634,346],{"class":332},[52,121636,121637,121639,121641,121643],{"class":54,"line":97},[52,121638,59],{"class":58},[52,121640,63],{"class":62},[52,121642,76],{"class":62},[52,121644,357],{"class":62},[274,121646,121647],{},[280,121648],{"alt":28,"src":362},[30,121650,366],{"id":365},[19,121652,121653],{"className":323,"code":369,"language":325,"meta":28,"style":28},[26,121654,121655,121659,121667,121677,121681,121685,121689,121697,121705,121715],{"__ignoreMap":28},[52,121656,121657],{"class":54,"line":55},[52,121658,376],{"class":332},[52,121660,121661,121663,121665],{"class":54,"line":69},[52,121662,59],{"class":58},[52,121664,63],{"class":62},[52,121666,66],{"class":62},[52,121668,121669,121671,121673,121675],{"class":54,"line":82},[52,121670,59],{"class":58},[52,121672,63],{"class":62},[52,121674,76],{"class":62},[52,121676,395],{"class":62},[52,121678,121679],{"class":54,"line":97},[52,121680,400],{"class":58},[52,121682,121683],{"class":54,"line":112},[52,121684,116],{"emptyLinePlaceholder":115},[52,121686,121687],{"class":54,"line":119},[52,121688,409],{"class":332},[52,121690,121691,121693,121695],{"class":54,"line":130},[52,121692,59],{"class":58},[52,121694,416],{"class":62},[52,121696,419],{"class":62},[52,121698,121699,121701,121703],{"class":54,"line":136},[52,121700,59],{"class":58},[52,121702,63],{"class":62},[52,121704,66],{"class":62},[52,121706,121707,121709,121711,121713],{"class":54,"line":141},[52,121708,59],{"class":58},[52,121710,63],{"class":62},[52,121712,76],{"class":62},[52,121714,438],{"class":62},[52,121716,121717],{"class":54,"line":146},[52,121718,443],{"class":58},[274,121720,446],{},[274,121722,121723],{},[280,121724],{"alt":28,"src":451},[30,121726,455],{"id":454},[274,121728,458],{},[19,121730,121731],{"className":323,"code":461,"language":325,"meta":28,"style":28},[26,121732,121733,121743,121753],{"__ignoreMap":28},[52,121734,121735,121737,121739,121741],{"class":54,"line":55},[52,121736,59],{"class":58},[52,121738,470],{"class":62},[52,121740,473],{"class":62},[52,121742,476],{"class":62},[52,121744,121745,121747,121749,121751],{"class":54,"line":69},[52,121746,59],{"class":58},[52,121748,470],{"class":62},[52,121750,473],{"class":62},[52,121752,487],{"class":62},[52,121754,121755,121757,121759,121761],{"class":54,"line":82},[52,121756,59],{"class":58},[52,121758,470],{"class":62},[52,121760,473],{"class":62},[52,121762,498],{"class":62},[274,121764,501],{},[274,121766,504,121767,510],{},[300,121768,509],{"href":507,"rel":121769},[304],[19,121771,121772],{"className":323,"code":513,"language":325,"meta":28,"style":28},[26,121773,121774,121778],{"__ignoreMap":28},[52,121775,121776],{"class":54,"line":55},[52,121777,520],{"class":332},[52,121779,121780,121782],{"class":54,"line":69},[52,121781,525],{"class":58},[52,121783,528],{"class":62},[274,121785,121786],{},[280,121787],{"alt":28,"src":533},[274,121789,536,121790,541],{},[538,121791,540],{},[19,121793,121794],{"className":323,"code":544,"language":325,"meta":28,"style":28},[26,121795,121796,121800,121810,121814,121824,121828,121838,121842,121852,121856,121860,121864,121874,121884],{"__ignoreMap":28},[52,121797,121798],{"class":54,"line":55},[52,121799,551],{"class":332},[52,121801,121802,121804,121806,121808],{"class":54,"line":69},[52,121803,59],{"class":58},[52,121805,558],{"class":62},[52,121807,561],{"class":62},[52,121809,564],{"class":62},[52,121811,121812],{"class":54,"line":82},[52,121813,569],{"class":332},[52,121815,121816,121818,121820,121822],{"class":54,"line":97},[52,121817,59],{"class":58},[52,121819,558],{"class":62},[52,121821,561],{"class":62},[52,121823,580],{"class":62},[52,121825,121826],{"class":54,"line":112},[52,121827,585],{"class":332},[52,121829,121830,121832,121834,121836],{"class":54,"line":119},[52,121831,59],{"class":58},[52,121833,558],{"class":62},[52,121835,561],{"class":62},[52,121837,596],{"class":62},[52,121839,121840],{"class":54,"line":130},[52,121841,601],{"class":332},[52,121843,121844,121846,121848,121850],{"class":54,"line":136},[52,121845,59],{"class":58},[52,121847,558],{"class":62},[52,121849,561],{"class":62},[52,121851,612],{"class":62},[52,121853,121854],{"class":54,"line":141},[52,121855,617],{"class":332},[52,121857,121858],{"class":54,"line":146},[52,121859,623],{"class":622},[52,121861,121862],{"class":54,"line":152},[52,121863,628],{"class":332},[52,121865,121866,121868,121870,121872],{"class":54,"line":157},[52,121867,59],{"class":58},[52,121869,558],{"class":62},[52,121871,561],{"class":62},[52,121873,639],{"class":62},[52,121875,121876,121878,121880,121882],{"class":54,"line":173},[52,121877,59],{"class":58},[52,121879,558],{"class":62},[52,121881,561],{"class":62},[52,121883,650],{"class":62},[52,121885,121886,121888,121890,121892],{"class":54,"line":178},[52,121887,59],{"class":58},[52,121889,558],{"class":62},[52,121891,561],{"class":62},[52,121893,661],{"class":62},[274,121895,121896],{},[280,121897],{"alt":28,"src":666},[274,121899,669],{},[19,121901,121902],{"className":323,"code":672,"language":325,"meta":28,"style":28},[26,121903,121904,121910,121914,121918,121922],{"__ignoreMap":28},[52,121905,121906,121908],{"class":54,"line":55},[52,121907,525],{"class":58},[52,121909,528],{"class":62},[52,121911,121912],{"class":54,"line":69},[52,121913,376],{"class":332},[52,121915,121916],{"class":54,"line":82},[52,121917,400],{"class":58},[52,121919,121920],{"class":54,"line":97},[52,121921,409],{"class":332},[52,121923,121924],{"class":54,"line":112},[52,121925,443],{"class":58},[274,121927,121928],{},[280,121929],{"alt":28,"src":701},[30,121931,705],{"id":704},[274,121933,708,121934,714],{},[300,121935,713],{"href":711,"rel":121936},[304],[19,121938,121939],{"className":323,"code":717,"language":325,"meta":28,"style":28},[26,121940,121941,121945,121957,121961,121971],{"__ignoreMap":28},[52,121942,121943],{"class":54,"line":55},[52,121944,724],{"class":332},[52,121946,121947,121949,121951,121953,121955],{"class":54,"line":69},[52,121948,59],{"class":58},[52,121950,63],{"class":62},[52,121952,733],{"class":62},[52,121954,736],{"class":90},[52,121956,661],{"class":62},[52,121958,121959],{"class":54,"line":82},[52,121960,743],{"class":332},[52,121962,121963,121965,121967,121969],{"class":54,"line":97},[52,121964,59],{"class":58},[52,121966,87],{"class":62},[52,121968,91],{"class":90},[52,121970,754],{"class":62},[52,121972,121973,121975,121977,121979],{"class":54,"line":112},[52,121974,59],{"class":58},[52,121976,87],{"class":62},[52,121978,91],{"class":90},[52,121980,765],{"class":62},[274,121982,768,121983,772],{},[26,121984,771],{},[30,121986,776],{"id":775},[274,121988,779],{},[19,121990,121991],{"className":323,"code":782,"language":325,"meta":28,"style":28},[26,121992,121993],{"__ignoreMap":28},[52,121994,121995,121997,121999],{"class":54,"line":55},[52,121996,59],{"class":58},[52,121998,124],{"class":62},[52,122000,793],{"class":62},[274,122002,796,122003,800],{},[26,122004,799],{},[19,122006,122007],{"className":323,"code":803,"language":325,"meta":28,"style":28},[26,122008,122009,122015,122025],{"__ignoreMap":28},[52,122010,122011,122013],{"class":54,"line":55},[52,122012,810],{"class":58},[52,122014,661],{"class":62},[52,122016,122017,122019,122021,122023],{"class":54,"line":69},[52,122018,817],{"class":58},[52,122020,820],{"class":62},[52,122022,823],{"class":62},[52,122024,826],{"class":90},[52,122026,122027,122029],{"class":54,"line":82},[52,122028,831],{"class":58},[52,122030,834],{"class":90},[274,122032,122033],{},[280,122034],{"alt":28,"src":839},[30,122036,843],{"id":842},[19,122038,122039],{"className":323,"code":846,"language":325,"meta":28,"style":28},[26,122040,122041,122049],{"__ignoreMap":28},[52,122042,122043,122045,122047],{"class":54,"line":55},[52,122044,59],{"class":58},[52,122046,63],{"class":62},[52,122048,66],{"class":62},[52,122050,122051,122053,122055,122057],{"class":54,"line":69},[52,122052,59],{"class":58},[52,122054,63],{"class":62},[52,122056,76],{"class":62},[52,122058,580],{"class":62},[274,122060,869],{},[274,122062,122063],{},[280,122064],{"alt":28,"src":874},[30,122066,878],{"id":877},[274,122068,881],{},[274,122070,884],{},[274,122072,887],{},[19,122074,122075],{"className":323,"code":890,"language":325,"meta":28,"style":28},[26,122076,122077,122081,122089,122093,122101],{"__ignoreMap":28},[52,122078,122079],{"class":54,"line":55},[52,122080,897],{"class":332},[52,122082,122083,122085,122087],{"class":54,"line":69},[52,122084,59],{"class":58},[52,122086,416],{"class":62},[52,122088,906],{"class":62},[52,122090,122091],{"class":54,"line":82},[52,122092,911],{"class":332},[52,122094,122095,122097,122099],{"class":54,"line":97},[52,122096,59],{"class":58},[52,122098,63],{"class":62},[52,122100,66],{"class":62},[52,122102,122103,122105,122107,122109],{"class":54,"line":112},[52,122104,59],{"class":58},[52,122106,63],{"class":62},[52,122108,76],{"class":62},[52,122110,580],{"class":62},[30,122112,933],{"id":932},[274,122114,936],{},[274,122116,939],{},[19,122118,122119],{"className":323,"code":942,"language":325,"meta":28,"style":28},[26,122120,122121,122125,122135,122143,122147],{"__ignoreMap":28},[52,122122,122123],{"class":54,"line":55},[52,122124,949],{"class":332},[52,122126,122127,122129,122131,122133],{"class":54,"line":69},[52,122128,59],{"class":58},[52,122130,87],{"class":62},[52,122132,91],{"class":90},[52,122134,793],{"class":62},[52,122136,122137,122139,122141],{"class":54,"line":82},[52,122138,59],{"class":58},[52,122140,63],{"class":62},[52,122142,66],{"class":62},[52,122144,122145],{"class":54,"line":97},[52,122146,116],{"emptyLinePlaceholder":115},[52,122148,122149,122151,122153],{"class":54,"line":112},[52,122150,59],{"class":58},[52,122152,63],{"class":62},[52,122154,980],{"class":62},[14,122156,984],{"id":983},[30,122158,988],{"id":987},[274,122160,991],{},[274,122162,122163],{},[280,122164],{"alt":28,"src":996},[274,122166,122167],{},[280,122168],{"alt":28,"src":1001},[274,122170,1004],{},[19,122172,122173],{"className":323,"code":1007,"language":325,"meta":28,"style":28},[26,122174,122175,122181],{"__ignoreMap":28},[52,122176,122177,122179],{"class":54,"line":55},[52,122178,338],{"class":90},[52,122180,1016],{"class":62},[52,122182,122183,122185,122187,122189],{"class":54,"line":69},[52,122184,59],{"class":58},[52,122186,63],{"class":62},[52,122188,76],{"class":62},[52,122190,1027],{"class":62},[274,122192,1030],{},[274,122194,122195,122197],{},[280,122196],{"alt":28,"src":1035},[280,122198],{"alt":28,"src":1038},[274,122200,122201],{},[280,122202],{"alt":28,"src":1043},[274,122204,1046],{},[274,122206,122207],{},[280,122208],{"alt":28,"src":1051},[274,122210,122211],{},[280,122212],{"alt":28,"src":1056},[274,122214,1059],{},[274,122216,122217],{},[280,122218],{"alt":28,"src":1064},[30,122220,1068],{"id":1067},[1070,122222,122223],{},[1073,122224,1075],{},[19,122226,122227],{"className":46,"code":1078,"language":48,"meta":28,"style":28},[26,122228,122229],{"__ignoreMap":28},[52,122230,122231,122233,122235,122237,122239,122241,122243],{"class":54,"line":55},[52,122232,59],{"class":58},[52,122234,63],{"class":62},[52,122236,1089],{"class":62},[52,122238,1092],{"class":62},[52,122240,1095],{"class":90},[52,122242,1098],{"class":62},[52,122244,826],{"class":90},[1070,122246,122247],{"start":69},[1073,122248,1105],{},[19,122250,122251],{"className":323,"code":1108,"language":325,"meta":28,"style":28},[26,122252,122253,122257,122269,122273,122277,122285,122293],{"__ignoreMap":28},[52,122254,122255],{"class":54,"line":55},[52,122256,1115],{"class":332},[52,122258,122259,122261,122263,122265,122267],{"class":54,"line":69},[52,122260,59],{"class":58},[52,122262,63],{"class":62},[52,122264,76],{"class":62},[52,122266,1126],{"class":62},[52,122268,1129],{"class":62},[52,122270,122271],{"class":54,"line":82},[52,122272,116],{"emptyLinePlaceholder":115},[52,122274,122275],{"class":54,"line":97},[52,122276,1138],{"class":332},[52,122278,122279,122281,122283],{"class":54,"line":112},[52,122280,59],{"class":58},[52,122282,416],{"class":62},[52,122284,1147],{"class":62},[52,122286,122287,122289,122291],{"class":54,"line":119},[52,122288,59],{"class":58},[52,122290,63],{"class":62},[52,122292,66],{"class":62},[52,122294,122295,122297,122299,122301,122303],{"class":54,"line":130},[52,122296,59],{"class":58},[52,122298,63],{"class":62},[52,122300,76],{"class":62},[52,122302,1126],{"class":62},[52,122304,1129],{"class":62},[1070,122306,122307,122309],{"start":82},[1073,122308,1172],{},[1073,122310,1175],{},[274,122312,122313],{},[280,122314],{"alt":28,"src":1180},[1070,122316,122317],{"start":112},[1073,122318,1185],{},[274,122320,1188],{},[274,122322,122323],{},[280,122324],{"alt":28,"src":1193},[274,122326,1196],{},[274,122328,122329],{},[280,122330],{"alt":28,"src":1201},[1070,122332,122333],{"start":119},[1073,122334,1206],{},[19,122336,122337],{"className":46,"code":1209,"language":48,"meta":28,"style":28},[26,122338,122339],{"__ignoreMap":28},[52,122340,122341,122343,122345,122347],{"class":54,"line":55},[52,122342,59],{"class":58},[52,122344,1218],{"class":62},[52,122346,1221],{"class":90},[52,122348,1224],{"class":62},[1070,122350,122351],{"start":130},[1073,122352,1229],{},[274,122354,122355],{},[300,122356,1234],{"href":1234,"rel":122357},[304],[1070,122359,122360],{"start":136},[1073,122361,1240],{},[19,122363,122364],{"className":46,"code":1209,"language":48,"meta":28,"style":28},[26,122365,122366],{"__ignoreMap":28},[52,122367,122368,122370,122372,122374],{"class":54,"line":55},[52,122369,59],{"class":58},[52,122371,1218],{"class":62},[52,122373,1221],{"class":90},[52,122375,1224],{"class":62},[14,122377,1258],{"id":1257},[274,122379,1261],{},[274,122381,1264],{},[274,122383,1267],{},[19,122385,122386],{"className":323,"code":1270,"language":325,"meta":28,"style":28},[26,122387,122388,122392,122398,122402,122406],{"__ignoreMap":28},[52,122389,122390],{"class":54,"line":55},[52,122391,1277],{"class":332},[52,122393,122394,122396],{"class":54,"line":69},[52,122395,1282],{"class":58},[52,122397,1285],{"class":90},[52,122399,122400],{"class":54,"line":82},[52,122401,1290],{"class":332},[52,122403,122404],{"class":54,"line":97},[52,122405,1295],{"class":332},[52,122407,122408,122410,122412,122414,122416],{"class":54,"line":112},[52,122409,1282],{"class":58},[52,122411,1302],{"class":62},[52,122413,1305],{"class":62},[52,122415,1308],{"class":62},[52,122417,1311],{"class":62},[274,122419,1314],{},[274,122421,122422],{},[280,122423],{"alt":28,"src":1319},[19,122425,122426],{"className":323,"code":1322,"language":325,"meta":28,"style":28},[26,122427,122428,122432,122440,122450,122454,122458,122476,122480,122484,122496,122500,122504],{"__ignoreMap":28},[52,122429,122430],{"class":54,"line":55},[52,122431,1329],{"class":332},[52,122433,122434,122436,122438],{"class":54,"line":69},[52,122435,59],{"class":58},[52,122437,63],{"class":62},[52,122439,66],{"class":62},[52,122441,122442,122444,122446,122448],{"class":54,"line":82},[52,122443,59],{"class":58},[52,122445,1344],{"class":62},[52,122447,76],{"class":62},[52,122449,1349],{"class":62},[52,122451,122452],{"class":54,"line":97},[52,122453,116],{"emptyLinePlaceholder":115},[52,122455,122456],{"class":54,"line":112},[52,122457,1358],{"class":332},[52,122459,122460,122462,122464,122466,122468,122470,122472,122474],{"class":54,"line":119},[52,122461,1363],{"class":58},[52,122463,1366],{"class":90},[52,122465,1369],{"class":62},[52,122467,76],{"class":62},[52,122469,1374],{"class":90},[52,122471,1377],{"class":62},[52,122473,1380],{"class":90},[52,122475,1383],{"class":62},[52,122477,122478],{"class":54,"line":130},[52,122479,116],{"emptyLinePlaceholder":115},[52,122481,122482],{"class":54,"line":136},[52,122483,1392],{"class":332},[52,122485,122486,122488,122490,122492,122494],{"class":54,"line":141},[52,122487,1282],{"class":58},[52,122489,1302],{"class":62},[52,122491,1305],{"class":62},[52,122493,1308],{"class":62},[52,122495,1311],{"class":62},[52,122497,122498],{"class":54,"line":146},[52,122499,116],{"emptyLinePlaceholder":115},[52,122501,122502],{"class":54,"line":152},[52,122503,1413],{"class":332},[52,122505,122506,122508,122510,122512,122514,122516],{"class":54,"line":157},[52,122507,1363],{"class":58},[52,122509,1366],{"class":90},[52,122511,1369],{"class":62},[52,122513,76],{"class":62},[52,122515,1380],{"class":90},[52,122517,1383],{"class":62},[274,122519,1430],{},[274,122521,122522],{},[280,122523],{"alt":28,"src":1435},[14,122525,1439],{"id":1438},[30,122527,1443],{"id":1442},[19,122529,122530],{"className":46,"code":1446,"language":48,"meta":28,"style":28},[26,122531,122532,122536,122550,122554],{"__ignoreMap":28},[52,122533,122534],{"class":54,"line":55},[52,122535,1453],{"class":332},[52,122537,122538,122540,122542,122544,122546,122548],{"class":54,"line":69},[52,122539,59],{"class":58},[52,122541,1344],{"class":62},[52,122543,561],{"class":62},[52,122545,736],{"class":90},[52,122547,1466],{"class":62},[52,122549,826],{"class":90},[52,122551,122552],{"class":54,"line":82},[52,122553,1473],{"class":332},[52,122555,122556,122558],{"class":54,"line":97},[52,122557,59],{"class":58},[52,122559,1480],{"class":62},[30,122561,1484],{"id":1483},[1486,122563,1489],{"id":1488},[1491,122565,1494],{"id":1493},[19,122567,122568],{"className":46,"code":1497,"language":48,"meta":28,"style":28},[26,122569,122570,122574,122584,122588,122598,122602],{"__ignoreMap":28},[52,122571,122572],{"class":54,"line":55},[52,122573,1504],{"class":332},[52,122575,122576,122578,122580,122582],{"class":54,"line":69},[52,122577,59],{"class":58},[52,122579,63],{"class":62},[52,122581,76],{"class":62},[52,122583,1515],{"class":62},[52,122585,122586],{"class":54,"line":82},[52,122587,1520],{"class":332},[52,122589,122590,122592,122594,122596],{"class":54,"line":97},[52,122591,59],{"class":58},[52,122593,1218],{"class":62},[52,122595,1221],{"class":90},[52,122597,1224],{"class":62},[52,122599,122600],{"class":54,"line":112},[52,122601,1535],{"class":332},[52,122603,122604],{"class":54,"line":119},[52,122605,1540],{"class":58},[1491,122607,1544],{"id":1543},[19,122609,122610],{"className":46,"code":1547,"language":48,"meta":28,"style":28},[26,122611,122612,122616,122628,122632,122642,122646],{"__ignoreMap":28},[52,122613,122614],{"class":54,"line":55},[52,122615,1504],{"class":332},[52,122617,122618,122620,122622,122624,122626],{"class":54,"line":69},[52,122619,59],{"class":58},[52,122621,63],{"class":62},[52,122623,76],{"class":62},[52,122625,1564],{"class":62},[52,122627,1567],{"class":62},[52,122629,122630],{"class":54,"line":82},[52,122631,1520],{"class":332},[52,122633,122634,122636,122638,122640],{"class":54,"line":97},[52,122635,59],{"class":58},[52,122637,1218],{"class":62},[52,122639,1221],{"class":90},[52,122641,1224],{"class":62},[52,122643,122644],{"class":54,"line":112},[52,122645,1535],{"class":332},[52,122647,122648],{"class":54,"line":119},[52,122649,1540],{"class":58},[1486,122651,1593],{"id":1592},[274,122653,1596,122654,1600],{},[538,122655,1599],{},[274,122657,1603,122658],{},[1605,122659,122660],{},[538,122661,1609],{},[19,122663,122664],{"className":46,"code":1612,"language":48,"meta":28,"style":28},[26,122665,122666,122670,122678,122682,122692,122696],{"__ignoreMap":28},[52,122667,122668],{"class":54,"line":55},[52,122669,1619],{"class":332},[52,122671,122672,122674,122676],{"class":54,"line":69},[52,122673,59],{"class":58},[52,122675,1626],{"class":62},[52,122677,1629],{"class":90},[52,122679,122680],{"class":54,"line":82},[52,122681,1634],{"class":332},[52,122683,122684,122686,122688,122690],{"class":54,"line":97},[52,122685,59],{"class":58},[52,122687,1641],{"class":62},[52,122689,1644],{"class":62},[52,122691,1647],{"class":62},[52,122693,122694],{"class":54,"line":112},[52,122695,1652],{"class":332},[52,122697,122698,122700,122702,122704],{"class":54,"line":119},[52,122699,59],{"class":58},[52,122701,470],{"class":62},[52,122703,1661],{"class":62},[52,122705,1664],{"class":62},[274,122707,1667],{},[19,122709,122710],{"className":46,"code":1670,"language":48,"meta":28,"style":28},[26,122711,122712,122716,122726,122730,122736,122740,122750,122754,122760,122764],{"__ignoreMap":28},[52,122713,122714],{"class":54,"line":55},[52,122715,1677],{"class":332},[52,122717,122718,122720,122722,122724],{"class":54,"line":69},[52,122719,59],{"class":58},[52,122721,63],{"class":62},[52,122723,76],{"class":62},[52,122725,1688],{"class":62},[52,122727,122728],{"class":54,"line":82},[52,122729,1693],{"class":332},[52,122731,122732,122734],{"class":54,"line":97},[52,122733,338],{"class":90},[52,122735,1700],{"class":62},[52,122737,122738],{"class":54,"line":112},[52,122739,1705],{"class":332},[52,122741,122742,122744,122746,122748],{"class":54,"line":119},[52,122743,59],{"class":58},[52,122745,1712],{"class":62},[52,122747,1715],{"class":62},[52,122749,1718],{"class":62},[52,122751,122752],{"class":54,"line":130},[52,122753,1723],{"class":332},[52,122755,122756,122758],{"class":54,"line":136},[52,122757,59],{"class":58},[52,122759,1730],{"class":62},[52,122761,122762],{"class":54,"line":141},[52,122763,1735],{"class":332},[52,122765,122766,122768,122770],{"class":54,"line":146},[52,122767,59],{"class":58},[52,122769,1742],{"class":62},[52,122771,1745],{"class":90},[274,122773,1748],{},[19,122775,122776],{"className":46,"code":1751,"language":48,"meta":28,"style":28},[26,122777,122778,122782,122788,122792],{"__ignoreMap":28},[52,122779,122780],{"class":54,"line":55},[52,122781,1520],{"class":332},[52,122783,122784,122786],{"class":54,"line":69},[52,122785,59],{"class":58},[52,122787,1764],{"class":62},[52,122789,122790],{"class":54,"line":82},[52,122791,1535],{"class":332},[52,122793,122794],{"class":54,"line":97},[52,122795,1540],{"class":58},[30,122797,1776],{"id":1775},[274,122799,1779],{},[274,122801,122802],{},[280,122803],{"alt":28,"src":1784},[1070,122805,122806],{},[1073,122807,1789],{},[19,122809,122810],{"className":46,"code":1540,"language":48,"meta":28,"style":28},[26,122811,122812],{"__ignoreMap":28},[52,122813,122814],{"class":54,"line":55},[52,122815,1540],{"class":58},[274,122817,1800],{},[274,122819,122820],{},[280,122821],{"alt":28,"src":1805},[1070,122823,122824],{"start":69},[1073,122825,1810],{},[274,122827,1813,122828],{},[300,122829,1816],{"href":1816,"rel":122830},[304],[274,122832,1820],{},[274,122834,122835],{},[280,122836],{"alt":28,"src":1825},[274,122838,1828,122839,1834],{},[300,122840,1833],{"href":1831,"rel":122841},[304],[274,122843,1837],{},[274,122845,122846],{},[280,122847],{"alt":28,"src":1842},[274,122849,1845],{},[19,122851,122852],{"className":46,"code":1848,"language":48,"meta":28,"style":28},[26,122853,122854,122858,122866,122870,122876,122880,122886,122890,122900,122904],{"__ignoreMap":28},[52,122855,122856],{"class":54,"line":55},[52,122857,1855],{"class":332},[52,122859,122860,122862,122864],{"class":54,"line":69},[52,122861,1860],{"class":58},[52,122863,1863],{"class":90},[52,122865,1866],{"class":62},[52,122867,122868],{"class":54,"line":82},[52,122869,1871],{"class":332},[52,122871,122872,122874],{"class":54,"line":97},[52,122873,338],{"class":90},[52,122875,1878],{"class":62},[52,122877,122878],{"class":54,"line":112},[52,122879,1883],{"class":332},[52,122881,122882,122884],{"class":54,"line":119},[52,122883,1888],{"class":58},[52,122885,1891],{"class":62},[52,122887,122888],{"class":54,"line":130},[52,122889,1896],{"class":332},[52,122891,122892,122894,122896,122898],{"class":54,"line":136},[52,122893,59],{"class":58},[52,122895,1712],{"class":62},[52,122897,1715],{"class":62},[52,122899,1907],{"class":62},[52,122901,122902],{"class":54,"line":141},[52,122903,1912],{"class":332},[52,122905,122906,122908],{"class":54,"line":146},[52,122907,59],{"class":58},[52,122909,1907],{"class":62},[274,122911,122912],{},[280,122913],{"alt":28,"src":1923},[274,122915,1926],{},[274,122917,122918],{},[280,122919],{"alt":28,"src":1931},[274,122921,1934],{},[274,122923,122924],{},[280,122925],{"alt":28,"src":1939},[274,122927,1942],{},[274,122929,122930],{},[280,122931],{"alt":28,"src":1947},[274,122933,1950],{},[274,122935,122936],{},[280,122937],{"alt":28,"src":1955},[1070,122939,122940],{"start":82},[1073,122941,1960],{},[274,122943,1963],{},[19,122945,122946],{"className":46,"code":1966,"language":48,"meta":28,"style":28},[26,122947,122948,122960,122972],{"__ignoreMap":28},[52,122949,122950,122952,122954,122956,122958],{"class":54,"line":55},[52,122951,1973],{"class":58},[52,122953,1976],{"class":62},[52,122955,1979],{"class":62},[52,122957,1982],{"class":62},[52,122959,623],{"class":622},[52,122961,122962,122964,122966,122968,122970],{"class":54,"line":69},[52,122963,1989],{"class":58},[52,122965,1992],{"class":62},[52,122967,1995],{"class":62},[52,122969,1998],{"class":62},[52,122971,623],{"class":622},[52,122973,122974,122976,122978,122980,122982,122984,122986,122988,122990,122992,122994,122996,122998,123000],{"class":54,"line":82},[52,122975,1989],{"class":58},[52,122977,2007],{"class":62},[52,122979,1995],{"class":62},[52,122981,2012],{"class":62},[52,122983,2015],{"class":62},[52,122985,2018],{"class":62},[52,122987,2021],{"class":62},[52,122989,2024],{"class":62},[52,122991,2027],{"class":62},[52,122993,2030],{"class":62},[52,122995,2033],{"class":62},[52,122997,2036],{"class":62},[52,122999,2039],{"class":62},[52,123001,2042],{"class":62},[274,123003,2045],{},[19,123005,123006],{"className":46,"code":2048,"language":48,"meta":28,"style":28},[26,123007,123008],{"__ignoreMap":28},[52,123009,123010,123012],{"class":54,"line":55},[52,123011,2055],{"class":90},[52,123013,2058],{"class":62},[274,123015,123016],{},[280,123017],{"alt":28,"src":2063},[274,123019,2066],{},[19,123021,123022],{"className":46,"code":2069,"language":48,"meta":28,"style":28},[26,123023,123024],{"__ignoreMap":28},[52,123025,123026,123028,123030],{"class":54,"line":55},[52,123027,59],{"class":58},[52,123029,124],{"class":62},[52,123031,2080],{"class":62},[274,123033,2083],{},[19,123035,123036],{"className":46,"code":2086,"language":48,"meta":28,"style":28},[26,123037,123038,123048],{"__ignoreMap":28},[52,123039,123040,123042,123044,123046],{"class":54,"line":55},[52,123041,2093],{"class":160},[52,123043,2096],{"class":622},[52,123045,2099],{"class":160},[52,123047,2102],{"class":622},[52,123049,123050,123052,123054,123056],{"class":54,"line":69},[52,123051,2093],{"class":160},[52,123053,2109],{"class":622},[52,123055,2099],{"class":160},[52,123057,2114],{"class":622},[274,123059,123060],{},[280,123061],{"alt":28,"src":2119},[19,123063,123064],{"className":46,"code":2122,"language":48,"meta":28,"style":28},[26,123065,123066,123070,123076,123080],{"__ignoreMap":28},[52,123067,123068],{"class":54,"line":55},[52,123069,2129],{"class":332},[52,123071,123072,123074],{"class":54,"line":69},[52,123073,2134],{"class":90},[52,123075,2080],{"class":62},[52,123077,123078],{"class":54,"line":82},[52,123079,2141],{"class":332},[52,123081,123082,123084],{"class":54,"line":97},[52,123083,2146],{"class":58},[52,123085,2149],{"class":90},[274,123087,2152],{},[274,123089,123090],{},[280,123091],{"alt":28,"src":2157},[30,123093,2161],{"id":2160},[1070,123095,123096],{},[1073,123097,2166],{},[274,123099,2169,123100,2175],{},[300,123101,2174],{"href":2172,"rel":123102},[304],[274,123104,2178],{},[274,123106,123107],{},[280,123108],{"alt":28,"src":2183},[274,123110,2186],{},[274,123112,123113],{},[280,123114],{"alt":28,"src":2191},[274,123116,2194],{},[274,123118,2197],{},[274,123120,123121],{},[538,123122,2202],{},[274,123124,2205],{},[274,123126,123127],{},[280,123128],{"alt":28,"src":2210},[1070,123130,123131],{"start":69},[1073,123132,2215],{},[274,123134,2218],{},[274,123136,123137],{},[280,123138],{"alt":28,"src":2223},[274,123140,2226],{},[19,123142,123143],{"className":46,"code":2229,"language":48,"meta":28,"style":28},[26,123144,123145,123149,123157,123161,123167,123171,123185,123197,123201,123211,123219,123223,123237],{"__ignoreMap":28},[52,123146,123147],{"class":54,"line":55},[52,123148,2236],{"class":332},[52,123150,123151,123153,123155],{"class":54,"line":69},[52,123152,2241],{"class":58},[52,123154,2244],{"class":90},[52,123156,2247],{"class":62},[52,123158,123159],{"class":54,"line":82},[52,123160,2252],{"class":332},[52,123162,123163,123165],{"class":54,"line":97},[52,123164,338],{"class":90},[52,123166,2259],{"class":62},[52,123168,123169],{"class":54,"line":112},[52,123170,2264],{"class":332},[52,123172,123173,123175,123177,123179,123181,123183],{"class":54,"line":119},[52,123174,59],{"class":58},[52,123176,2271],{"class":62},[52,123178,2274],{"class":62},[52,123180,1095],{"class":90},[52,123182,2279],{"class":62},[52,123184,623],{"class":622},[52,123186,123187,123189,123191,123193,123195],{"class":54,"line":130},[52,123188,59],{"class":58},[52,123190,2271],{"class":62},[52,123192,2290],{"class":62},[52,123194,1095],{"class":90},[52,123196,2295],{"class":62},[52,123198,123199],{"class":54,"line":136},[52,123200,2300],{"class":332},[52,123202,123203,123205,123207,123209],{"class":54,"line":141},[52,123204,2305],{"class":58},[52,123206,2308],{"class":62},[52,123208,1095],{"class":90},[52,123210,623],{"class":622},[52,123212,123213,123215,123217],{"class":54,"line":146},[52,123214,2305],{"class":58},[52,123216,2319],{"class":62},[52,123218,826],{"class":90},[52,123220,123221],{"class":54,"line":152},[52,123222,1896],{"class":332},[52,123224,123225,123227,123229,123231,123233,123235],{"class":54,"line":157},[52,123226,59],{"class":58},[52,123228,1712],{"class":62},[52,123230,2334],{"class":62},[52,123232,2308],{"class":62},[52,123234,1095],{"class":90},[52,123236,2341],{"class":622},[52,123238,123239,123241,123243,123245,123247],{"class":54,"line":173},[52,123240,59],{"class":58},[52,123242,1712],{"class":62},[52,123244,2334],{"class":62},[52,123246,2319],{"class":62},[52,123248,826],{"class":90},[1070,123250,123251],{"start":82},[1073,123252,2358],{},[19,123254,123255],{"className":46,"code":2361,"language":48,"meta":28,"style":28},[26,123256,123257,123261],{"__ignoreMap":28},[52,123258,123259],{"class":54,"line":55},[52,123260,2368],{"class":332},[52,123262,123263,123265,123267,123269,123271,123273,123275],{"class":54,"line":69},[52,123264,2373],{"class":58},[52,123266,2376],{"class":62},[52,123268,2379],{"class":160},[52,123270,2382],{"class":58},[52,123272,2385],{"class":62},[52,123274,2388],{"class":90},[52,123276,2391],{"class":90},[274,123278,2394],{},[274,123280,123281],{},[280,123282],{"alt":28,"src":2399},[1070,123284,123285],{"start":97},[1073,123286,2404],{},[19,123288,123289],{"className":46,"code":2407,"language":48,"meta":28,"style":28},[26,123290,123291,123295],{"__ignoreMap":28},[52,123292,123293],{"class":54,"line":55},[52,123294,2414],{"class":332},[52,123296,123297,123299],{"class":54,"line":69},[52,123298,59],{"class":58},[52,123300,2421],{"class":62},[274,123302,2424],{},[19,123304,123305],{"className":2427,"code":2428,"language":2429,"meta":2430,"style":28},[26,123306,123307,123311,123315,123319,123323,123327,123331],{"__ignoreMap":28},[52,123308,123309],{"class":54,"line":55},[52,123310,2437],{},[52,123312,123313],{"class":54,"line":69},[52,123314,2442],{},[52,123316,123317],{"class":54,"line":82},[52,123318,2447],{},[52,123320,123321],{"class":54,"line":97},[52,123322,2452],{},[52,123324,123325],{"class":54,"line":112},[52,123326,2457],{},[52,123328,123329],{"class":54,"line":119},[52,123330,2462],{},[52,123332,123333],{"class":54,"line":130},[52,123334,2467],{},[274,123336,2470],{},[19,123338,123339],{"className":46,"code":2473,"language":48,"meta":28,"style":28},[26,123340,123341,123345,123351,123355],{"__ignoreMap":28},[52,123342,123343],{"class":54,"line":55},[52,123344,2480],{"class":332},[52,123346,123347,123349],{"class":54,"line":69},[52,123348,338],{"class":90},[52,123350,2487],{"class":62},[52,123352,123353],{"class":54,"line":82},[52,123354,2492],{"class":332},[52,123356,123357],{"class":54,"line":97},[52,123358,2497],{"class":58},[274,123360,123361],{},[280,123362],{"alt":28,"src":2502},[274,123364,2505,123365,2509,123367,2509,123369,2516],{},[26,123366,2508],{},[26,123368,2512],{},[26,123370,2515],{},[19,123372,123373],{"className":46,"code":2519,"language":48,"meta":28,"style":28},[26,123374,123375,123379,123391,123403,123415,123427,123439,123451,123463,123467,123473,123477],{"__ignoreMap":28},[52,123376,123377],{"class":54,"line":55},[52,123378,2526],{"class":332},[52,123380,123381,123383,123385,123387,123389],{"class":54,"line":69},[52,123382,59],{"class":58},[52,123384,2533],{"class":62},[52,123386,2536],{"class":90},[52,123388,2539],{"class":62},[52,123390,2542],{"class":62},[52,123392,123393,123395,123397,123399,123401],{"class":54,"line":82},[52,123394,59],{"class":58},[52,123396,2533],{"class":62},[52,123398,2536],{"class":90},[52,123400,2553],{"class":62},[52,123402,2556],{"class":62},[52,123404,123405,123407,123409,123411,123413],{"class":54,"line":97},[52,123406,59],{"class":58},[52,123408,2533],{"class":62},[52,123410,2536],{"class":90},[52,123412,2567],{"class":62},[52,123414,2570],{"class":62},[52,123416,123417,123419,123421,123423,123425],{"class":54,"line":112},[52,123418,59],{"class":58},[52,123420,2533],{"class":62},[52,123422,2536],{"class":90},[52,123424,2581],{"class":62},[52,123426,2584],{"class":62},[52,123428,123429,123431,123433,123435,123437],{"class":54,"line":119},[52,123430,59],{"class":58},[52,123432,2533],{"class":62},[52,123434,2536],{"class":90},[52,123436,2595],{"class":62},[52,123438,2598],{"class":62},[52,123440,123441,123443,123445,123447,123449],{"class":54,"line":130},[52,123442,59],{"class":58},[52,123444,2533],{"class":62},[52,123446,2536],{"class":90},[52,123448,2609],{"class":62},[52,123450,2612],{"class":62},[52,123452,123453,123455,123457,123459,123461],{"class":54,"line":136},[52,123454,59],{"class":58},[52,123456,2533],{"class":62},[52,123458,2536],{"class":90},[52,123460,2623],{"class":62},[52,123462,2626],{"class":62},[52,123464,123465],{"class":54,"line":141},[52,123466,2631],{"class":332},[52,123468,123469,123471],{"class":54,"line":146},[52,123470,59],{"class":58},[52,123472,2421],{"class":62},[52,123474,123475],{"class":54,"line":152},[52,123476,2642],{"class":332},[52,123478,123479,123481,123483,123485,123487,123489],{"class":54,"line":157},[52,123480,2305],{"class":58},[52,123482,2649],{"class":90},[52,123484,2652],{"class":62},[52,123486,1095],{"class":90},[52,123488,2657],{"class":62},[52,123490,826],{"class":90},[30,123492,2663],{"id":2662},[1070,123494,123495],{},[1073,123496,2668],{},[19,123498,123499],{"className":46,"code":2671,"language":48,"meta":28,"style":28},[26,123500,123501],{"__ignoreMap":28},[52,123502,123503,123505,123507],{"class":54,"line":55},[52,123504,59],{"class":58},[52,123506,124],{"class":62},[52,123508,2682],{"class":62},[274,123510,2685],{},[19,123512,123513],{"className":46,"code":2688,"language":48,"meta":28,"style":28},[26,123514,123515,123521,123527,123537,123545],{"__ignoreMap":28},[52,123516,123517,123519],{"class":54,"line":55},[52,123518,2695],{"class":58},[52,123520,2698],{"class":62},[52,123522,123523,123525],{"class":54,"line":69},[52,123524,2695],{"class":58},[52,123526,2705],{"class":62},[52,123528,123529,123531,123533,123535],{"class":54,"line":82},[52,123530,2710],{"class":58},[52,123532,2713],{"class":62},[52,123534,2716],{"class":62},[52,123536,2719],{"class":90},[52,123538,123539,123541,123543],{"class":54,"line":97},[52,123540,2724],{"class":90},[52,123542,2713],{"class":62},[52,123544,2729],{"class":62},[52,123546,123547,123549,123551],{"class":54,"line":112},[52,123548,2724],{"class":90},[52,123550,2736],{"class":62},[52,123552,2729],{"class":62},[274,123554,2741],{},[19,123556,123557],{"className":46,"code":2744,"language":48,"meta":28,"style":28},[26,123558,123559,123567,123571],{"__ignoreMap":28},[52,123560,123561,123563,123565],{"class":54,"line":55},[52,123562,59],{"class":58},[52,123564,2753],{"class":62},[52,123566,2756],{"class":90},[52,123568,123569],{"class":54,"line":69},[52,123570,2761],{"class":58},[52,123572,123573,123575,123577],{"class":54,"line":82},[52,123574,59],{"class":58},[52,123576,2768],{"class":62},[52,123578,2771],{"class":90},[274,123580,2774],{},[19,123582,123583],{"className":46,"code":2777,"language":48,"meta":28,"style":28},[26,123584,123585],{"__ignoreMap":28},[52,123586,123587,123589,123591,123593],{"class":54,"line":55},[52,123588,2784],{"class":58},[52,123590,2379],{"class":160},[52,123592,2382],{"class":58},[52,123594,2698],{"class":62},[1070,123596,123597],{"start":69},[1073,123598,2795],{},[19,123600,123601],{"className":46,"code":2798,"language":48,"meta":28,"style":28},[26,123602,123603],{"__ignoreMap":28},[52,123604,123605,123607,123609],{"class":54,"line":55},[52,123606,59],{"class":58},[52,123608,124],{"class":62},[52,123610,2809],{"class":62},[274,123612,2812],{},[19,123614,123615],{"className":46,"code":2815,"language":48,"meta":28,"style":28},[26,123616,123617,123623,123629,123635,123641,123647,123655,123661],{"__ignoreMap":28},[52,123618,123619,123621],{"class":54,"line":55},[52,123620,2822],{"class":58},[52,123622,2825],{"class":62},[52,123624,123625,123627],{"class":54,"line":69},[52,123626,2830],{"class":58},[52,123628,2833],{"class":62},[52,123630,123631,123633],{"class":54,"line":82},[52,123632,2838],{"class":58},[52,123634,2841],{"class":62},[52,123636,123637,123639],{"class":54,"line":97},[52,123638,2846],{"class":58},[52,123640,2833],{"class":62},[52,123642,123643,123645],{"class":54,"line":112},[52,123644,2853],{"class":58},[52,123646,2856],{"class":62},[52,123648,123649,123651,123653],{"class":54,"line":119},[52,123650,2853],{"class":58},[52,123652,2863],{"class":62},[52,123654,2866],{"class":62},[52,123656,123657,123659],{"class":54,"line":130},[52,123658,2871],{"class":58},[52,123660,2874],{"class":62},[52,123662,123663],{"class":54,"line":136},[52,123664,2879],{"class":58},[1070,123666,123667],{"start":82},[1073,123668,2884],{},[19,123670,123671],{"className":2427,"code":2887,"language":2429,"meta":2430,"style":28},[26,123672,123673],{"__ignoreMap":28},[52,123674,123675],{"class":54,"line":55},[52,123676,2887],{},[1070,123678,123679],{},[1073,123680,2898],{},[274,123682,2901],{},[19,123684,123685],{"className":323,"code":2904,"language":325,"meta":28,"style":28},[26,123686,123687],{"__ignoreMap":28},[52,123688,123689,123691],{"class":54,"line":55},[52,123690,2911],{"class":58},[52,123692,2914],{"class":90},[1070,123694,123695],{"start":69},[1073,123696,2919],{},[274,123698,2922,123699,2926],{},[26,123700,2925],{},[19,123702,123703],{"className":323,"code":2929,"language":325,"meta":28,"style":28},[26,123704,123705],{"__ignoreMap":28},[52,123706,123707,123709,123711,123713,123715,123717,123719,123721],{"class":54,"line":55},[52,123708,59],{"class":58},[52,123710,2938],{"class":62},[52,123712,76],{"class":62},[52,123714,2943],{"class":62},[52,123716,2946],{"class":622},[52,123718,2911],{"class":58},[52,123720,1221],{"class":90},[52,123722,170],{"class":622},[274,123724,2955],{},[1070,123726,123727],{"start":82},[1073,123728,2960],{},[274,123730,2963],{},[19,123732,123733],{"className":323,"code":2966,"language":325,"meta":28,"style":28},[26,123734,123735],{"__ignoreMap":28},[52,123736,123737,123739,123741,123743,123745],{"class":54,"line":55},[52,123738,59],{"class":58},[52,123740,2938],{"class":62},[52,123742,76],{"class":62},[52,123744,2979],{"class":62},[52,123746,2982],{"class":62},[1070,123748,123749],{"start":97},[1073,123750,2987],{},[274,123752,2990,123753,2994],{},[26,123754,2993],{},[19,123756,123757],{"className":323,"code":2997,"language":325,"meta":28,"style":28},[26,123758,123759],{"__ignoreMap":28},[52,123760,123761,123763],{"class":54,"line":55},[52,123762,2305],{"class":58},[52,123764,3006],{"class":62},[274,123766,3009,123767,3013],{},[26,123768,3012],{},[3015,123770,3017],{},{"title":28,"searchDepth":69,"depth":69,"links":123772},[123773,123777,123787,123791,123792],{"id":16,"depth":69,"text":17,"children":123774},[123775,123776],{"id":32,"depth":82,"text":33},{"id":42,"depth":82,"text":43},{"id":285,"depth":69,"text":286,"children":123778},[123779,123780,123781,123782,123783,123784,123785,123786],{"id":289,"depth":82,"text":290},{"id":365,"depth":82,"text":366},{"id":454,"depth":82,"text":455},{"id":704,"depth":82,"text":705},{"id":775,"depth":82,"text":776},{"id":842,"depth":82,"text":843},{"id":877,"depth":82,"text":878},{"id":932,"depth":82,"text":933},{"id":983,"depth":69,"text":984,"children":123788},[123789,123790],{"id":987,"depth":82,"text":988},{"id":1067,"depth":82,"text":1068},{"id":1257,"depth":69,"text":1258},{"id":1438,"depth":69,"text":1439,"children":123793},[123794,123795,123796,123797,123798],{"id":1442,"depth":82,"text":1443},{"id":1483,"depth":82,"text":1484},{"id":1775,"depth":82,"text":1776},{"id":2160,"depth":82,"text":2161},{"id":2662,"depth":82,"text":2663},{},{"title":5,"description":3046},{"id":123802,"title":123803,"body":123804,"description":3046,"extension":3047,"meta":124144,"navigation":115,"path":124145,"seo":124146,"stem":124147,"__hash__":124148},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123805,"toc":124142},[123806,123809,123814,123817,124063,124068,124071,124107,124110,124139],[10,123807,123803],{"id":123808},"_4-命令教程长期积累",[1070,123810,123811],{},[1073,123812,123813],{},"大多数命令",[274,123815,123816],{},"常用 Linux 命令速查：",[19,123818,123820],{"className":323,"code":123819,"language":325,"meta":28,"style":28},"# 文件与目录\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",[26,123821,123822,123827,123834,123841,123849,123856,123863,123871,123879,123886,123893,123901,123905,123910,123917,123925,123932,123936,123941,123948,123956,123964,123972,123980,123984,123989,123997,124004,124011,124019,124027,124031,124036,124045,124054],{"__ignoreMap":28},[52,123823,123824],{"class":54,"line":55},[52,123825,123826],{"class":332},"# 文件与目录\n",[52,123828,123829,123831],{"class":54,"line":69},[52,123830,2305],{"class":58},[52,123832,123833],{"class":332},"        # 列出目录内容\n",[52,123835,123836,123838],{"class":54,"line":82},[52,123837,338],{"class":90},[52,123839,123840],{"class":332},"        # 切换目录\n",[52,123842,123843,123846],{"class":54,"line":97},[52,123844,123845],{"class":90},"pwd",[52,123847,123848],{"class":332},"       # 显示当前路径\n",[52,123850,123851,123853],{"class":54,"line":112},[52,123852,1860],{"class":58},[52,123854,123855],{"class":332},"     # 创建目录\n",[52,123857,123858,123860],{"class":54,"line":119},[52,123859,28268],{"class":58},[52,123861,123862],{"class":332},"        # 删除文件或目录\n",[52,123864,123865,123868],{"class":54,"line":130},[52,123866,123867],{"class":58},"cp",[52,123869,123870],{"class":332},"        # 复制文件或目录\n",[52,123872,123873,123876],{"class":54,"line":136},[52,123874,123875],{"class":58},"mv",[52,123877,123878],{"class":332},"        # 移动\u002F重命名文件或目录\n",[52,123880,123881,123883],{"class":54,"line":141},[52,123882,104203],{"class":58},[52,123884,123885],{"class":332},"     # 创建空文件\n",[52,123887,123888,123890],{"class":54,"line":146},[52,123889,2373],{"class":58},[52,123891,123892],{"class":332},"       # 查看文件内容\n",[52,123894,123895,123898],{"class":54,"line":152},[52,123896,123897],{"class":58},"head\u002Ftail",[52,123899,123900],{"class":332}," # 查看文件头部\u002F尾部\n",[52,123902,123903],{"class":54,"line":157},[52,123904,116],{"emptyLinePlaceholder":115},[52,123906,123907],{"class":54,"line":173},[52,123908,123909],{"class":332},"# 权限管理\n",[52,123911,123912,123914],{"class":54,"line":178},[52,123913,27560],{"class":58},[52,123915,123916],{"class":332},"     # 修改文件权限\n",[52,123918,123919,123922],{"class":54,"line":184},[52,123920,123921],{"class":58},"chown",[52,123923,123924],{"class":332},"     # 修改文件所有者\n",[52,123926,123927,123929],{"class":54,"line":189},[52,123928,59],{"class":58},[52,123930,123931],{"class":332},"      # 以管理员身份执行\n",[52,123933,123934],{"class":54,"line":201},[52,123935,116],{"emptyLinePlaceholder":115},[52,123937,123938],{"class":54,"line":206},[52,123939,123940],{"class":332},"# 系统信息\n",[52,123942,123943,123945],{"class":54,"line":224},[52,123944,2911],{"class":58},[52,123946,123947],{"class":332},"     # 系统信息\n",[52,123949,123950,123953],{"class":54,"line":229},[52,123951,123952],{"class":58},"df",[52,123954,123955],{"class":332},"        # 磁盘使用情况\n",[52,123957,123958,123961],{"class":54,"line":241},[52,123959,123960],{"class":58},"free",[52,123962,123963],{"class":332},"      # 内存使用情况\n",[52,123965,123966,123969],{"class":54,"line":246},[52,123967,123968],{"class":58},"top\u002Fhtop",[52,123970,123971],{"class":332},"  # 进程监控\n",[52,123973,123974,123977],{"class":54,"line":252},[52,123975,123976],{"class":58},"ps",[52,123978,123979],{"class":332},"        # 查看进程\n",[52,123981,123982],{"class":54,"line":257},[52,123983,116],{"emptyLinePlaceholder":115},[52,123985,123986],{"class":54,"line":266},[52,123987,123988],{"class":332},"# 网络\n",[52,123990,123991,123994],{"class":54,"line":4722},[52,123992,123993],{"class":58},"ping",[52,123995,123996],{"class":332},"      # 测试网络连通性\n",[52,123998,123999,124001],{"class":54,"line":4727},[52,124000,29785],{"class":58},[52,124002,124003],{"class":332},"      # 发送 HTTP 请求\n",[52,124005,124006,124008],{"class":54,"line":4741},[52,124007,1888],{"class":58},[52,124009,124010],{"class":332},"      # 下载文件\n",[52,124012,124013,124016],{"class":54,"line":4746},[52,124014,124015],{"class":58},"ssh",[52,124017,124018],{"class":332},"       # 远程登录\n",[52,124020,124021,124024],{"class":54,"line":5538},[52,124022,124023],{"class":58},"scp",[52,124025,124026],{"class":332},"       # 远程文件传输\n",[52,124028,124029],{"class":54,"line":5552},[52,124030,116],{"emptyLinePlaceholder":115},[52,124032,124033],{"class":54,"line":5560},[52,124034,124035],{"class":332},"# 包管理（Debian\u002FUbuntu）\n",[52,124037,124038,124040,124042],{"class":54,"line":5565},[52,124039,120284],{"class":58},[52,124041,120263],{"class":62},[52,124043,124044],{"class":332},"   # 更新软件源\n",[52,124046,124047,124049,124051],{"class":54,"line":5571},[52,124048,120284],{"class":58},[52,124050,76],{"class":62},[52,124052,124053],{"class":332},"  # 安装软件包\n",[52,124055,124056,124058,124060],{"class":54,"line":5577},[52,124057,120284],{"class":58},[52,124059,561],{"class":62},[52,124061,124062],{"class":332},"   # 卸载软件包\n",[1070,124064,124065],{"start":69},[1073,124066,124067],{},"KDE Dolphin 以root打开",[274,124069,124070],{},"kde5",[19,124072,124074],{"className":323,"code":124073,"language":325,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[26,124075,124076],{"__ignoreMap":28},[52,124077,124078,124081,124084,124087,124089,124091,124094,124097,124099,124102,124104],{"class":54,"line":55},[52,124079,124080],{"class":58},"pkexec",[52,124082,124083],{"class":62}," env",[52,124085,124086],{"class":62}," DISPLAY=",[52,124088,31077],{"class":622},[52,124090,31135],{"class":62},[52,124092,124093],{"class":622},"$XAUTHORITY ",[52,124095,124096],{"class":62},"KDE_SESSION_VERSION=",[52,124098,3432],{"class":90},[52,124100,124101],{"class":62}," KDE_FULL_SESSION=",[52,124103,4341],{"class":90},[52,124105,124106],{"class":62}," dolphin\n",[274,124108,124109],{},"kde6",[19,124111,124113],{"className":323,"code":124112,"language":325,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[26,124114,124115],{"__ignoreMap":28},[52,124116,124117,124119,124121,124123,124125,124127,124129,124131,124133,124135,124137],{"class":54,"line":55},[52,124118,124080],{"class":58},[52,124120,124083],{"class":62},[52,124122,124086],{"class":62},[52,124124,31077],{"class":622},[52,124126,31135],{"class":62},[52,124128,124093],{"class":622},[52,124130,124096],{"class":62},[52,124132,3457],{"class":90},[52,124134,124101],{"class":62},[52,124136,4341],{"class":90},[52,124138,124106],{"class":62},[3015,124140,124141],{},"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":28,"searchDepth":69,"depth":69,"links":124143},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123803,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":124150,"title":124151,"body":124152,"description":3046,"extension":3047,"meta":124166,"navigation":115,"path":124167,"seo":124168,"stem":124169,"__hash__":124170},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":124153,"toc":124164},[124154,124157],[10,124155,124151],{"id":124156},"_5-各种环境配置",[274,124158,124159],{},[300,124160,124163],{"href":124161,"rel":124162},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[304],"电控组环境搭建大全",{"title":28,"searchDepth":69,"depth":69,"links":124165},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":124151,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124172,"title":124173,"body":124174,"description":3046,"extension":3047,"meta":124522,"navigation":115,"path":124523,"seo":124524,"stem":124525,"__hash__":124526},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124175,"toc":124514},[124176,124179,124183,124187,124191,124196,124203,124207,124500,124504,124511],[10,124177,124173],{"id":124178},"_6-拓展功能",[14,124180,124182],{"id":124181},"_61-wine","6.1 Wine",[14,124184,124186],{"id":124185},"_62-android","6.2 Android",[30,124188,124190],{"id":124189},"_621-i卡a卡","6.2.1 I卡、A卡",[1070,124192,124193],{},[1073,124194,124195],{},"Wayland-Waydroid(体验超级好)",[274,124197,124198,124199],{},"Waydroid 官网与安装指南：",[300,124200,124201],{"href":124201,"rel":124202},"https:\u002F\u002Fwaydro.id\u002F",[304],[30,124204,124206],{"id":124205},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1070,124208,124209],{},[1073,124210,124211,124212,124214,124215,124219,124221,124224,124229,124426],{},"QEMU-KVM虚拟机 + BlissOS-X86",[56646,124213],{},"BlissOS 官网下载：",[300,124216,124217],{"href":124217,"rel":124218},"https:\u002F\u002Fblissos.org\u002F",[304],[56646,124220],{},[280,124222],{"alt":28,"src":124223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1070,124225,124226],{"start":82},[1073,124227,124228],{},"比较推荐的配置",[19,124230,124232],{"className":323,"code":124231,"language":325,"meta":28,"style":28},"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",[26,124233,124234,124241,124251,124261,124271,124283,124293,124300,124310,124319,124328,124338,124348,124357,124367,124377,124389,124399,124408,124418],{"__ignoreMap":28},[52,124235,124236,124239],{"class":54,"line":55},[52,124237,124238],{"class":58},"qemu-system-x86_64",[52,124240,27627],{"class":90},[52,124242,124243,124246,124249],{"class":54,"line":69},[52,124244,124245],{"class":90},"        -M",[52,124247,124248],{"class":62}," q35,vmport=off",[52,124250,27627],{"class":90},[52,124252,124253,124256,124259],{"class":54,"line":82},[52,124254,124255],{"class":90},"        -accel",[52,124257,124258],{"class":62}," kvm",[52,124260,27627],{"class":90},[52,124262,124263,124266,124269],{"class":54,"line":97},[52,124264,124265],{"class":90},"        -cpu",[52,124267,124268],{"class":62}," qemu64,+sse3,+sse4.2",[52,124270,27627],{"class":90},[52,124272,124273,124276,124279,124281],{"class":54,"line":112},[52,124274,124275],{"class":90},"        -smp",[52,124277,124278],{"class":62}," 8,cores=",[52,124280,3406],{"class":90},[52,124282,27627],{"class":90},[52,124284,124285,124288,124291],{"class":54,"line":119},[52,124286,124287],{"class":90},"        -m",[52,124289,124290],{"class":62}," 6G",[52,124292,27627],{"class":90},[52,124294,124295,124298],{"class":54,"line":130},[52,124296,124297],{"class":90},"        -usb",[52,124299,27627],{"class":90},[52,124301,124302,124305,124308],{"class":54,"line":136},[52,124303,124304],{"class":90},"        -device",[52,124306,124307],{"class":62}," virtio-tablet",[52,124309,27627],{"class":90},[52,124311,124312,124314,124317],{"class":54,"line":141},[52,124313,124304],{"class":90},[52,124315,124316],{"class":62}," virtio-keyboard",[52,124318,27627],{"class":90},[52,124320,124321,124323,124326],{"class":54,"line":146},[52,124322,124304],{"class":90},[52,124324,124325],{"class":62}," usb-tablet",[52,124327,27627],{"class":90},[52,124329,124330,124333,124336],{"class":54,"line":152},[52,124331,124332],{"class":90},"        -bios",[52,124334,124335],{"class":62}," OVMF-pure-efi64.fd",[52,124337,27627],{"class":90},[52,124339,124340,124343,124346],{"class":54,"line":157},[52,124341,124342],{"class":90},"        -net",[52,124344,124345],{"class":62}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[52,124347,27627],{"class":90},[52,124349,124350,124352,124355],{"class":54,"line":173},[52,124351,124342],{"class":90},[52,124353,124354],{"class":62}," nic,model=virtio",[52,124356,27627],{"class":90},[52,124358,124359,124362,124365],{"class":54,"line":178},[52,124360,124361],{"class":90},"        -audio",[52,124363,124364],{"class":62}," sdl,model=hda",[52,124366,27627],{"class":90},[52,124368,124369,124372,124375],{"class":54,"line":184},[52,124370,124371],{"class":90},"        -display",[52,124373,124374],{"class":62}," sdl,gl=on,show-cursor=on",[52,124376,27627],{"class":90},[52,124378,124379,124381,124384,124387],{"class":54,"line":189},[52,124380,124304],{"class":90},[52,124382,124383],{"class":62}," virtio-vga-gl,xres=1920,yres=",[52,124385,124386],{"class":90},"1080",[52,124388,27627],{"class":90},[52,124390,124391,124394,124397],{"class":54,"line":201},[52,124392,124393],{"class":90},"        -drive",[52,124395,124396],{"class":62}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[52,124398,27627],{"class":90},[52,124400,124401,124403,124406],{"class":54,"line":206},[52,124402,124393],{"class":90},[52,124404,124405],{"class":62}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[52,124407,27627],{"class":90},[52,124409,124410,124413,124416],{"class":54,"line":224},[52,124411,124412],{"class":90},"        -monitor",[52,124414,124415],{"class":62}," stdio",[52,124417,27627],{"class":90},[52,124419,124420,124423],{"class":54,"line":229},[52,124421,124422],{"class":90},"        -serial",[52,124424,124425],{"class":62}," none\n",[1070,124427,124428],{"start":112},[1073,124429,124430,124431],{},"常用操作：",[1070,124432,124433,124436,124492],{},[1073,124434,124435],{},"全屏：Ctrl+Alt+F",[1073,124437,124438,124439,124444],{},"adb调试",[1070,124440,124441],{},[1073,124442,124443],{},"使Linux与Android用ADB连接。",[19,124445,124447],{"className":323,"code":124446,"language":325,"meta":28,"style":28},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[26,124448,124449,124454,124465,124470,124482,124487],{"__ignoreMap":28},[52,124450,124451],{"class":54,"line":55},[52,124452,124453],{"class":332},"# 连接安卓\n",[52,124455,124456,124459,124462],{"class":54,"line":69},[52,124457,124458],{"class":58},"adb",[52,124460,124461],{"class":62}," connect",[52,124463,124464],{"class":90}," 127.0.0.1\n",[52,124466,124467],{"class":54,"line":82},[52,124468,124469],{"class":332},"# 打开shell\n",[52,124471,124472,124474,124476,124479],{"class":54,"line":97},[52,124473,124458],{"class":58},[52,124475,29819],{"class":90},[52,124477,124478],{"class":62}," 127.0.0.1:5555",[52,124480,124481],{"class":62}," shell\n",[52,124483,124484],{"class":54,"line":112},[52,124485,124486],{"class":332},"# 使用root权限\n",[52,124488,124489],{"class":54,"line":119},[52,124490,124491],{"class":58},"su\n",[1073,124493,124494,124495],{},"中文输入法",[1070,124496,124497],{},[1073,124498,124499],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124501,124503],{"id":124502},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[274,124505,124506,124507],{},"rEFInd 官网与文档：",[300,124508,124509],{"href":124509,"rel":124510},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[304],[3015,124512,124513],{},"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":28,"searchDepth":69,"depth":69,"links":124515},[124516,124517,124521],{"id":124181,"depth":69,"text":124182},{"id":124185,"depth":69,"text":124186,"children":124518},[124519,124520],{"id":124189,"depth":82,"text":124190},{"id":124205,"depth":82,"text":124206},{"id":124502,"depth":69,"text":124503},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124173,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124528,"title":124529,"body":124530,"description":3046,"extension":3047,"meta":127829,"navigation":115,"path":127830,"seo":127831,"stem":127832,"__hash__":127833},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124531,"toc":127803},[124532,124535,124539,124542,124549,124799,124802,124874,124877,124881,124885,124890,124893,124896,124899,124904,124907,124910,124913,124918,124921,124926,124929,124932,124937,124940,124945,124948,124952,124956,124959,124964,124967,124981,124984,124987,124996,124999,125008,125011,125014,125023,125026,125035,125038,125041,125050,125053,125056,125071,125074,125077,125086,125091,125094,125097,125106,125109,125118,125121,125130,125133,125142,125147,125150,125158,125163,125166,125175,125178,125186,125191,125194,125203,125206,125209,125213,125216,125221,125224,125229,125243,125248,125253,125264,125269,125275,125280,125295,125300,125303,125308,125313,125318,125326,125331,125338,125343,125354,125359,125362,125366,125369,125372,125377,125380,125399,125404,125407,125416,125421,125424,125446,125449,125479,125482,125487,125490,125504,125509,125528,125531,125534,125539,125551,125556,125561,125564,125569,125572,125587,125590,125595,125600,125604,125609,125649,125652,125656,125662,125668,125673,125676,125683,125688,125695,125698,125701,125708,125722,125725,125785,125788,125802,125814,125817,125820,125823,125887,125890,125893,125896,125916,125919,125924,125931,125935,125938,125942,125947,125952,125956,125959,125962,126004,126009,126012,126034,126049,126051,126056,126068,126128,126130,126132,126186,126188,126190,126196,126201,126204,126209,126213,126216,126278,126283,126286,126288,126292,126304,126386,126388,126390,126444,126450,126452,126456,126461,126463,126468,126472,126492,126527,126531,126534,126537,126540,126547,126550,126562,126565,126580,126583,126602,126650,126653,126670,126673,126687,126692,126695,126704,126719,126731,126769,126774,126783,126788,126793,126819,126828,126832,126836,126841,126844,126848,126852,126857,126860,126865,126868,126873,126876,126881,126884,126888,126893,126896,126901,126904,126908,126913,126916,126921,126924,126929,126932,126936,126941,126944,126949,126952,126957,126960,126964,126969,126972,126977,126980,126985,126988,126993,126996,127001,127004,127009,127012,127016,127021,127024,127029,127036,127040,127045,127048,127053,127056,127060,127065,127068,127071,127074,127077,127080,127084,127087,127097,127102,127107,127129,127134,127139,127146,127150,127155,127158,127161,127166,127169,127172,127175,127178,127181,127184,127187,127190,127193,127196,127199,127202,127207,127212,127217,127222,127227,127232,127237,127240,127244,127247,127251,127256,127261,127266,127271,127275,127281,127289,127294,127297,127302,127317,127320,127325,127359,127374,127377,127432,127458,127470,127473,127482,127485,127500,127505,127508,127514,127519,127522,127527,127530,127535,127540,127547,127550,127565,127568,127603,127608,127616,127654,127657,127660,127665,127668,127673,127684,127718,127723,127726,127735,127740,127746,127749,127754,127763,127768,127771,127774,127779,127787,127790,127795,127800],[10,124533,124529],{"id":124534},"_7-其他操作",[14,124536,124538],{"id":124537},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[274,124540,124541],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[274,124543,124544,124545,124548],{},"进入工控机的硬盘目录，进入",[26,124546,124547],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[19,124550,124554],{"className":124551,"code":124552,"language":124553,"meta":28,"style":28},"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",[26,124555,124556,124564,124575,124582,124589,124601,124608,124620,124631,124642,124649,124656,124663,124675,124687,124694,124706,124718,124725,124737,124749,124761,124772,124779,124790],{"__ignoreMap":28},[52,124557,124558,124561],{"class":54,"line":55},[52,124559,124560],{"class":54231},"network",[52,124562,124563],{"class":622},": \n",[52,124565,124566,124569,124571,124573],{"class":54,"line":69},[52,124567,124568],{"class":54231},"  version",[52,124570,54368],{"class":622},[52,124572,3194],{"class":90},[52,124574,623],{"class":622},[52,124576,124577,124580],{"class":54,"line":82},[52,124578,124579],{"class":54231},"  wifis",[52,124581,124563],{"class":622},[52,124583,124584,124587],{"class":54,"line":97},[52,124585,124586],{"class":54231},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[52,124588,124563],{"class":622},[52,124590,124591,124594,124596,124599],{"class":54,"line":112},[52,124592,124593],{"class":54231},"      renderer",[52,124595,54368],{"class":622},[52,124597,124598],{"class":62},"NetworkManager",[52,124600,623],{"class":622},[52,124602,124603,124606],{"class":54,"line":119},[52,124604,124605],{"class":54231},"      match",[52,124607,124563],{"class":622},[52,124609,124610,124613,124615,124618],{"class":54,"line":130},[52,124611,124612],{"class":54231},"        name",[52,124614,54368],{"class":622},[52,124616,124617],{"class":62},"\"wlan0\"",[52,124619,623],{"class":622},[52,124621,124622,124625,124627,124629],{"class":54,"line":136},[52,124623,124624],{"class":54231},"      dhcp4",[52,124626,54368],{"class":622},[52,124628,4341],{"class":90},[52,124630,623],{"class":622},[52,124632,124633,124636,124638,124640],{"class":54,"line":141},[52,124634,124635],{"class":54231},"      dhcp6",[52,124637,54368],{"class":622},[52,124639,4341],{"class":90},[52,124641,623],{"class":622},[52,124643,124644,124647],{"class":54,"line":146},[52,124645,124646],{"class":54231},"      access-points",[52,124648,124563],{"class":622},[52,124650,124651,124654],{"class":54,"line":152},[52,124652,124653],{"class":62},"        \"EMIS_Vinci_Robocon_5G\"",[52,124655,124563],{"class":622},[52,124657,124658,124661],{"class":54,"line":157},[52,124659,124660],{"class":54231},"          auth",[52,124662,124563],{"class":622},[52,124664,124665,124668,124670,124673],{"class":54,"line":173},[52,124666,124667],{"class":54231},"            key-management",[52,124669,54368],{"class":622},[52,124671,124672],{"class":62},"\"psk\"",[52,124674,623],{"class":622},[52,124676,124677,124680,124682,124685],{"class":54,"line":178},[52,124678,124679],{"class":54231},"            password",[52,124681,54368],{"class":622},[52,124683,124684],{"class":62},"\"vinci666\"",[52,124686,623],{"class":622},[52,124688,124689,124692],{"class":54,"line":184},[52,124690,124691],{"class":54231},"          networkmanager",[52,124693,124563],{"class":622},[52,124695,124696,124699,124701,124704],{"class":54,"line":189},[52,124697,124698],{"class":54231},"            uuid",[52,124700,54368],{"class":622},[52,124702,124703],{"class":62},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[52,124705,623],{"class":622},[52,124707,124708,124711,124713,124716],{"class":54,"line":201},[52,124709,124710],{"class":54231},"            name",[52,124712,54368],{"class":622},[52,124714,124715],{"class":62},"\"EMIS_Vinci_Robocon_5G\"",[52,124717,623],{"class":622},[52,124719,124720,124723],{"class":54,"line":206},[52,124721,124722],{"class":54231},"            passthrough",[52,124724,124563],{"class":622},[52,124726,124727,124730,124732,124735],{"class":54,"line":224},[52,124728,124729],{"class":54231},"              wifi-security.auth-alg",[52,124731,54368],{"class":622},[52,124733,124734],{"class":62},"\"open\"",[52,124736,623],{"class":622},[52,124738,124739,124742,124744,124747],{"class":54,"line":229},[52,124740,124741],{"class":54231},"              ipv6.addr-gen-mode",[52,124743,54368],{"class":622},[52,124745,124746],{"class":62},"\"default\"",[52,124748,623],{"class":622},[52,124750,124751,124754,124756,124759],{"class":54,"line":241},[52,124752,124753],{"class":54231},"              ipv6.ip6-privacy",[52,124755,54368],{"class":622},[52,124757,124758],{"class":62},"\"-1\"",[52,124760,623],{"class":622},[52,124762,124763,124766,124768,124770],{"class":54,"line":246},[52,124764,124765],{"class":54231},"              proxy._",[52,124767,54368],{"class":622},[52,124769,10608],{"class":62},[52,124771,623],{"class":622},[52,124773,124774,124777],{"class":54,"line":252},[52,124775,124776],{"class":54231},"      networkmanager",[52,124778,124563],{"class":622},[52,124780,124781,124784,124786,124788],{"class":54,"line":257},[52,124782,124783],{"class":54231},"        uuid",[52,124785,54368],{"class":622},[52,124787,124703],{"class":62},[52,124789,623],{"class":622},[52,124791,124792,124794,124796],{"class":54,"line":266},[52,124793,124612],{"class":54231},[52,124795,54368],{"class":622},[52,124797,124798],{"class":62},"\"EMIS_Vinci_Robocon_5G\"\n",[274,124800,124801],{},"将其改为新wifi的名和密码：",[19,124803,124805],{"className":124551,"code":124804,"language":124553,"meta":28,"style":28},"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",[26,124806,124807,124813,124822,124828,124835,124844,124852,124858,124864],{"__ignoreMap":28},[52,124808,124809,124811],{"class":54,"line":55},[52,124810,124560],{"class":54231},[52,124812,6698],{"class":622},[52,124814,124815,124817,124819],{"class":54,"line":69},[52,124816,124568],{"class":54231},[52,124818,54368],{"class":622},[52,124820,124821],{"class":90},"2\n",[52,124823,124824,124826],{"class":54,"line":82},[52,124825,124579],{"class":54231},[52,124827,6698],{"class":622},[52,124829,124830,124833],{"class":54,"line":97},[52,124831,124832],{"class":54231},"    wlan0",[52,124834,6698],{"class":622},[52,124836,124837,124839,124841],{"class":54,"line":112},[52,124838,124624],{"class":54231},[52,124840,54368],{"class":622},[52,124842,124843],{"class":90},"true\n",[52,124845,124846,124848,124850],{"class":54,"line":119},[52,124847,124635],{"class":54231},[52,124849,54368],{"class":622},[52,124851,124843],{"class":90},[52,124853,124854,124856],{"class":54,"line":130},[52,124855,124646],{"class":54231},[52,124857,6698],{"class":622},[52,124859,124860,124862],{"class":54,"line":136},[52,124861,124653],{"class":62},[52,124863,6698],{"class":622},[52,124865,124866,124869,124871],{"class":54,"line":141},[52,124867,124868],{"class":54231},"          password",[52,124870,54368],{"class":622},[52,124872,124873],{"class":62},"\"vinci666\"\n",[274,124875,124876],{},"工控机开机即可连上网。",[14,124878,124880],{"id":124879},"_72-ssh远程开发","7.2 SSH远程开发",[30,124882,124884],{"id":124883},"_721-环境准备","7.2.1 环境准备",[274,124886,124887],{},[538,124888,124889],{},"1.硬件准备",[274,124891,124892],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[274,124894,124895],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[274,124897,124898],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[274,124900,124901],{},[538,124902,124903],{},"2.设置固定IP",[274,124905,124906],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[274,124908,124909],{},"1.进入设置界面",[274,124911,124912],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[274,124914,124915],{},[280,124916],{"alt":28,"src":124917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[274,124919,124920],{},"2.配置所连接的网络",[274,124922,124923],{},[280,124924],{"alt":28,"src":124925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[274,124927,124928],{},"3.设置固定IP",[274,124930,124931],{},"查看当前IP地址。",[274,124933,124934],{},[280,124935],{"alt":28,"src":124936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[274,124938,124939],{},"设置固定IP。",[274,124941,124942],{},[280,124943],{"alt":28,"src":124944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[274,124946,124947],{},"至此，IP配置完毕。",[30,124949,124951],{"id":124950},"_722-环境搭建","7.2.2 环境搭建",[274,124953,124954],{},[538,124955,28698],{},[274,124957,124958],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[274,124960,124961],{},[538,124962,124963],{},"实现",[274,124965,124966],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1070,124968,124969,124972,124975,124978],{},[1073,124970,124971],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[1073,124973,124974],{},"远程主机启动SSH服务；",[1073,124976,124977],{},"本地主机登陆远程主机；",[1073,124979,124980],{},"实现数据传输。",[274,124982,124983],{},"1.安装SSH客户端与服务端",[274,124985,124986],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[19,124988,124990],{"className":2427,"code":124989,"language":2429,"meta":2430,"style":28}," sudo apt install openssh-server\n",[26,124991,124992],{"__ignoreMap":28},[52,124993,124994],{"class":54,"line":55},[52,124995,124989],{},[274,124997,124998],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[19,125000,125002],{"className":2427,"code":125001,"language":2429,"meta":2430,"style":28},"sudo apt install openssh-client\n",[26,125003,125004],{"__ignoreMap":28},[52,125005,125006],{"class":54,"line":55},[52,125007,125001],{},[274,125009,125010],{},"2.远程主机启动SSH服务",[274,125012,125013],{},"远程主机启动 ssh 服务命令如下：",[19,125015,125017],{"className":2427,"code":125016,"language":2429,"meta":2430,"style":28},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[26,125018,125019],{"__ignoreMap":28},[52,125020,125021],{"class":54,"line":55},[52,125022,125016],{},[274,125024,125025],{},"启动后可使用如下命令查看服务是否正常运行：",[19,125027,125029],{"className":2427,"code":125028,"language":2429,"meta":2430,"style":28},"ps -e | grep ssh\n",[26,125030,125031],{"__ignoreMap":28},[52,125032,125033],{"class":54,"line":55},[52,125034,125028],{},[274,125036,125037],{},"如果启动成功，会包含 sshd 程序。",[274,125039,125040],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[19,125042,125044],{"className":2427,"code":125043,"language":2429,"meta":2430,"style":28},"sudo systemctl enable ssh\n",[26,125045,125046],{"__ignoreMap":28},[52,125047,125048],{"class":54,"line":55},[52,125049,125043],{},[274,125051,125052],{},"3.本地远程登录",[274,125054,125055],{},"登录远程主机可以调用如下命令:",[19,125057,125059],{"className":323,"code":125058,"language":325,"meta":28,"style":28},"ssh -X 用户名@ip地址\n",[26,125060,125061],{"__ignoreMap":28},[52,125062,125063,125065,125068],{"class":54,"line":55},[52,125064,124015],{"class":58},[52,125066,125067],{"class":90}," -X",[52,125069,125070],{"class":62}," 用户名@ip地址\n",[274,125072,125073],{},"然后根据提示，录入登陆密码，即可成功登录。",[274,125075,125076],{},"如果退出，可以调用exit命令：",[19,125078,125080],{"className":2427,"code":125079,"language":2429,"meta":2430,"style":28},"exit\n",[26,125081,125082],{"__ignoreMap":28},[52,125083,125084],{"class":54,"line":55},[52,125085,125079],{},[274,125087,125088],{},[538,125089,125090],{},"4.实现数据传输",[274,125092,125093],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[274,125095,125096],{},"上传文件指令格式如下：",[19,125098,125100],{"className":2427,"code":125099,"language":2429,"meta":2430,"style":28},"scp 本地文件路径 账号@ip:路径\n",[26,125101,125102],{"__ignoreMap":28},[52,125103,125104],{"class":54,"line":55},[52,125105,125099],{},[274,125107,125108],{},"上传文件夹指令格式如下：",[19,125110,125112],{"className":2427,"code":125111,"language":2429,"meta":2430,"style":28},"scp -r 本地文件夹路径 账号@ip:路径\n",[26,125113,125114],{"__ignoreMap":28},[52,125115,125116],{"class":54,"line":55},[52,125117,125111],{},[274,125119,125120],{},"下载文件指令格式如下：",[19,125122,125124],{"className":2427,"code":125123,"language":2429,"meta":2430,"style":28},"scp 账号@ip:路径 本地文件夹路径\n",[26,125125,125126],{"__ignoreMap":28},[52,125127,125128],{"class":54,"line":55},[52,125129,125123],{},[274,125131,125132],{},"下载文件夹指令格式如下：",[19,125134,125136],{"className":2427,"code":125135,"language":2429,"meta":2430,"style":28},"scp -r 账号@ip:路径 本地文件夹路径\n",[26,125137,125138],{"__ignoreMap":28},[52,125139,125140],{"class":54,"line":55},[52,125141,125135],{},[274,125143,125144],{},[538,125145,125146],{},"优化",[274,125148,125149],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1070,125151,125152,125155],{},[1073,125153,125154],{},"本地生成密钥对；",[1073,125156,125157],{},"将公钥上传至远程主机。",[274,125159,125160],{},[538,125161,125162],{},"1.生成密钥对",[274,125164,125165],{},"本地客户端生成公私钥：（一路回车默认即可）",[19,125167,125169],{"className":2427,"code":125168,"language":2429,"meta":2430,"style":28},"ssh-keygen\n",[26,125170,125171],{"__ignoreMap":28},[52,125172,125173],{"class":54,"line":55},[52,125174,125168],{},[274,125176,125177],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1070,125179,125180,125183],{},[1073,125181,125182],{},"id_rsa （私钥）；",[1073,125184,125185],{},"id_rsa.pub (公钥)。",[274,125187,125188],{},[538,125189,125190],{},"2.公钥上传",[274,125192,125193],{},"上传指令如下：",[19,125195,125197],{"className":2427,"code":125196,"language":2429,"meta":2430,"style":28},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[26,125198,125199],{"__ignoreMap":28},[52,125200,125201],{"class":54,"line":55},[52,125202,125196],{},[274,125204,125205],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[274,125207,125208],{},"以后再远程登录就无需录入密码了。",[30,125210,125212],{"id":125211},"_723-使用vscode优化","7.2.3 使用VScode优化",[274,125214,125215],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[274,125217,125218],{},[538,125219,125220],{},"1.准备工作",[274,125222,125223],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[274,125225,125226],{},[538,125227,125228],{},"2.为VScode安装远程开发插件",[274,125230,125231,125232,125235,125236,125239,125240,31319],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[26,125233,125234],{},"扩展：商店","的搜索栏输入",[26,125237,125238],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[26,125241,125242],{},"安装",[274,125244,125245],{},[280,125246],{"alt":28,"src":125247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[274,125249,125250],{},[538,125251,125252],{},"3.配置远程连接",[274,125254,125255,125256,125259,125260,125263],{},"步骤1：使用快捷键",[26,125257,125258],{},"ctrl + shift + p","打开命令输入窗口，并输入",[26,125261,125262],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[274,125265,125266],{},[280,125267],{"alt":28,"src":125268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[274,125270,125271,125272,31319],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[26,125273,125274],{},"Add New SSH Host",[274,125276,125277],{},[280,125278],{"alt":28,"src":125279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[274,125281,125282,125283,125286,125287,125290,125291,125294],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[26,125284,125285],{},"ssh +X ubuntu@192.168.43.164","，其中，",[26,125288,125289],{},"ubuntu","需要替换为你的登录用户名，",[26,125292,125293],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[274,125296,125297],{},[280,125298],{"alt":28,"src":125299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[274,125301,125302],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[274,125304,125305],{},[280,125306],{"alt":28,"src":125307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[274,125309,125310],{},[280,125311],{"alt":28,"src":125312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[274,125314,125315],{},[538,125316,125317],{},"4.使用",[274,125319,125320,125321,125259,125323,125325],{},"步骤1：继续使用快捷键",[26,125322,125258],{},[26,125324,125262],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[274,125327,125328],{},[280,125329],{"alt":28,"src":125330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[274,125332,125333,125334,125337],{},"或者，也可以点击侧边栏的",[26,125335,125336],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[274,125339,125340],{},[280,125341],{"alt":28,"src":125342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[274,125344,125345,125346,125349,125350,125353],{},"步骤2：选择菜单栏的",[26,125347,125348],{},"文件","下的",[26,125351,125352],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[274,125355,125356],{},[280,125357],{"alt":28,"src":125358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[274,125360,125361],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125363,125365],{"id":125364},"_73-远程桌面","7.3 远程桌面",[274,125367,125368],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[274,125370,125371],{},"我们选择使用VNC来看。",[1070,125373,125374],{},[1073,125375,125376],{},"安装VNC服务器：",[274,125378,125379],{},"这里以TigerVNC为例进行安装：",[19,125381,125383],{"className":323,"code":125382,"language":325,"meta":28,"style":28},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[26,125384,125385],{"__ignoreMap":28},[52,125386,125387,125389,125391,125393,125396],{"class":54,"line":55},[52,125388,59],{"class":58},[52,125390,63],{"class":62},[52,125392,76],{"class":62},[52,125394,125395],{"class":62}," tigervnc-standalone-server",[52,125397,125398],{"class":62}," tigervnc-common\n",[1070,125400,125401],{"start":69},[1073,125402,125403],{},"设置VNC密码：",[274,125405,125406],{},"为VNC用户设置密码，运行以下命令：",[19,125408,125410],{"className":323,"code":125409,"language":325,"meta":28,"style":28},"vncpasswd\n",[26,125411,125412],{"__ignoreMap":28},[52,125413,125414],{"class":54,"line":55},[52,125415,125409],{"class":58},[1070,125417,125418],{"start":82},[1073,125419,125420],{},"配置VNC启动脚本:",[274,125422,125423],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[19,125425,125427],{"className":323,"code":125426,"language":325,"meta":28,"style":28},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[26,125428,125429,125438],{"__ignoreMap":28},[52,125430,125431,125433,125435],{"class":54,"line":55},[52,125432,1860],{"class":58},[52,125434,1863],{"class":90},[52,125436,125437],{"class":62}," ~\u002F.vnc\n",[52,125439,125440,125443],{"class":54,"line":69},[52,125441,125442],{"class":58},"nano",[52,125444,125445],{"class":62}," ~\u002F.vnc\u002Fxstartup\n",[274,125447,125448],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[19,125450,125452],{"className":323,"code":125451,"language":325,"meta":28,"style":28},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[26,125453,125454,125459,125467,125474],{"__ignoreMap":28},[52,125455,125456],{"class":54,"line":55},[52,125457,125458],{"class":332},"#!\u002Fbin\u002Fsh\n",[52,125460,125461,125464],{"class":54,"line":69},[52,125462,125463],{"class":90},"unset",[52,125465,125466],{"class":62}," SESSION_MANAGER\n",[52,125468,125469,125471],{"class":54,"line":82},[52,125470,125463],{"class":90},[52,125472,125473],{"class":62}," DBUS_SESSION_BUS_ADDRESS\n",[52,125475,125476],{"class":54,"line":97},[52,125477,125478],{"class":58},"gnome-session\n",[274,125480,125481],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1070,125483,125484],{"start":97},[1073,125485,125486],{},"给予执行权限：",[274,125488,125489],{},"为xstartup文件设置执行权限：",[19,125491,125493],{"className":323,"code":125492,"language":325,"meta":28,"style":28},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[26,125494,125495],{"__ignoreMap":28},[52,125496,125497,125499,125502],{"class":54,"line":55},[52,125498,27560],{"class":58},[52,125500,125501],{"class":62}," +x",[52,125503,125445],{"class":62},[1070,125505,125506],{"start":112},[1073,125507,125508],{},"启动VNC服务器：",[19,125510,125512],{"className":323,"code":125511,"language":325,"meta":28,"style":28},"vncserver -geometry 1920x1080 -localhost=0\n",[26,125513,125514],{"__ignoreMap":28},[52,125515,125516,125519,125522,125525],{"class":54,"line":55},[52,125517,125518],{"class":58},"vncserver",[52,125520,125521],{"class":90}," -geometry",[52,125523,125524],{"class":62}," 1920x1080",[52,125526,125527],{"class":90}," -localhost=0\n",[274,125529,125530],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[274,125532,125533],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1070,125535,125536],{"start":119},[1073,125537,125538],{},"查看已开启的VNC服务器：",[19,125540,125542],{"className":323,"code":125541,"language":325,"meta":28,"style":28},"vncserver -list\n",[26,125543,125544],{"__ignoreMap":28},[52,125545,125546,125548],{"class":54,"line":55},[52,125547,125518],{"class":58},[52,125549,125550],{"class":90}," -list\n",[274,125552,125553],{},[280,125554],{"alt":28,"src":125555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1070,125557,125558],{"start":130},[1073,125559,125560],{},"连接到VNC服务器：",[274,125562,125563],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1070,125565,125566],{"start":136},[1073,125567,125568],{},"停止VNC服务器：",[274,125570,125571],{},"如果需要停止VNC服务器，可以使用以下命令：",[19,125573,125575],{"className":323,"code":125574,"language":325,"meta":28,"style":28},"vncserver -kill :1\n",[26,125576,125577],{"__ignoreMap":28},[52,125578,125579,125581,125584],{"class":54,"line":55},[52,125580,125518],{"class":58},[52,125582,125583],{"class":90}," -kill",[52,125585,125586],{"class":62}," :1\n",[274,125588,125589],{},"将:1替换为你实际使用的显示编号。",[274,125591,125592],{},[280,125593],{"alt":28,"src":125594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[274,125596,125597],{},[280,125598],{"alt":28,"src":125599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125601,125603],{"id":125602},"_74-usb端口设置","7.4 USB端口设置",[274,125605,125606],{},[538,125607,125608],{},"首先先配置好权限",[19,125610,125612],{"className":323,"code":125611,"language":325,"meta":28,"style":28},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[26,125613,125614,125619,125632,125639,125644],{"__ignoreMap":28},[52,125615,125616],{"class":54,"line":55},[52,125617,125618],{"class":332},"# 将用户权限提高\n",[52,125620,125621,125623,125625,125627,125630],{"class":54,"line":69},[52,125622,59],{"class":58},[52,125624,29512],{"class":62},[52,125626,29515],{"class":90},[52,125628,125629],{"class":62}," dialout",[52,125631,29520],{"class":622},[52,125633,125634,125636],{"class":54,"line":82},[52,125635,29539],{"class":58},[52,125637,125638],{"class":62}," dialout\n",[52,125640,125641],{"class":54,"line":97},[52,125642,125643],{"class":332},"# 查看下面命令是否输出dialout（若输出才正常）\n",[52,125645,125646],{"class":54,"line":112},[52,125647,125648],{"class":58},"groups\n",[274,125650,125651],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[30,125653,125655],{"id":125654},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[274,125657,125658,125661],{},[538,125659,125660],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[274,125663,125664,125667],{},[538,125665,125666],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[274,125669,125670],{},[538,125671,125672],{},"流程如下：",[274,125674,125675],{},"（1）.查找设备idVendor和idProduct",[274,125677,125678,125679,125682],{},"接入两个USB设备，在终端调用指令",[26,125680,125681],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[274,125684,125685],{},[280,125686],{"alt":28,"src":125687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[274,125689,125690,125691,125694],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[26,125692,125693],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[274,125696,125697],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[274,125699,125700],{},"（2）.编写映射规则",[274,125702,125703,125704,125707],{},"在",[26,125705,125706],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[19,125709,125711],{"className":323,"code":125710,"language":325,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[26,125712,125713],{"__ignoreMap":28},[52,125714,125715,125717,125719],{"class":54,"line":55},[52,125716,59],{"class":58},[52,125718,124],{"class":62},[52,125720,125721],{"class":62}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[274,125723,125724],{},"输入如下内容：",[19,125726,125728],{"className":323,"code":125727,"language":325,"meta":28,"style":28},"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",[26,125729,125730,125760],{"__ignoreMap":28},[52,125731,125732,125735,125737,125740,125743,125746,125749,125751,125754,125757],{"class":54,"line":55},[52,125733,125734],{"class":622},"KERNEL",[52,125736,2099],{"class":160},[52,125738,125739],{"class":62},"=\"ttyUSB*\",",[52,125741,125742],{"class":58}," ATTRS",[52,125744,125745],{"class":62},"{idVendor}==",[52,125747,125748],{"class":58},"\"10c4\"",[52,125750,3491],{"class":58},[52,125752,125753],{"class":62}," ATTRS{idProduct}==\"ea60\",",[52,125755,125756],{"class":62}," MODE:=\"0777\",",[52,125758,125759],{"class":62}," SYMLINK+=\"mylidar\"\n",[52,125761,125762,125764,125766,125768,125770,125772,125775,125777,125780,125782],{"class":54,"line":69},[52,125763,125734],{"class":622},[52,125765,2099],{"class":160},[52,125767,125739],{"class":62},[52,125769,125742],{"class":58},[52,125771,125745],{"class":62},[52,125773,125774],{"class":58},"\"1a86\"",[52,125776,3491],{"class":58},[52,125778,125779],{"class":62}," ATTRS{idProduct}==\"7523\",",[52,125781,125756],{"class":62},[52,125783,125784],{"class":62}," SYMLINK+=\"mycar\"\n",[274,125786,125787],{},"代码解释：",[4118,125789,125790,125793,125796,125799],{},[1073,125791,125792],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[1073,125794,125795],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[1073,125797,125798],{},"SYMLINK是符号连接，即绑定的别名；",[1073,125800,125801],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[274,125803,125804,125805,125808,125811],{},"***小提示：***",[1605,125806,125807],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[26,125809,125810],{},"\u002Fetc\u002Fudev\u002Frule.d",[1605,125812,125813],{},"目录即可。",[274,125815,125816],{},"表格 还在加载中，请等待加载完成后再尝试复制",[274,125818,125819],{},"（3）.使规则生效",[274,125821,125822],{},"在终端下输入如下指令：",[19,125824,125826],{"className":323,"code":125825,"language":325,"meta":28,"style":28},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[26,125827,125828,125833,125845,125856,125860,125865,125878],{"__ignoreMap":28},[52,125829,125830],{"class":54,"line":55},[52,125831,125832],{"class":332},"# Ubuntu用下方命令\n",[52,125834,125835,125837,125839,125842],{"class":54,"line":69},[52,125836,59],{"class":58},[52,125838,1641],{"class":62},[52,125840,125841],{"class":62}," udev",[52,125843,125844],{"class":62}," reload\n",[52,125846,125847,125849,125851,125853],{"class":54,"line":82},[52,125848,59],{"class":58},[52,125850,1641],{"class":62},[52,125852,125841],{"class":62},[52,125854,125855],{"class":62}," restart\n",[52,125857,125858],{"class":54,"line":97},[52,125859,116],{"emptyLinePlaceholder":115},[52,125861,125862],{"class":54,"line":112},[52,125863,125864],{"class":332},"#Fedora用下方命令\n",[52,125866,125867,125869,125872,125875],{"class":54,"line":119},[52,125868,59],{"class":58},[52,125870,125871],{"class":62}," udevadm",[52,125873,125874],{"class":62}," control",[52,125876,125877],{"class":90}," --reload\n",[52,125879,125880,125882,125884],{"class":54,"line":130},[52,125881,59],{"class":58},[52,125883,125871],{"class":62},[52,125885,125886],{"class":62}," trigger\n",[274,125888,125889],{},"再重新插拔设备即可。",[274,125891,125892],{},"（4）.测试",[274,125894,125895],{},"终端下输入如下指令",[19,125897,125899],{"className":323,"code":125898,"language":325,"meta":28,"style":28},"ll \u002Fdev | grep ttyUSB\n",[26,125900,125901],{"__ignoreMap":28},[52,125902,125903,125906,125909,125911,125913],{"class":54,"line":55},[52,125904,125905],{"class":58},"ll",[52,125907,125908],{"class":62}," \u002Fdev",[52,125910,2379],{"class":160},[52,125912,2382],{"class":58},[52,125914,125915],{"class":62}," ttyUSB\n",[274,125917,125918],{},"运行结果如下：",[274,125920,125921],{},[280,125922],{"alt":28,"src":125923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[274,125925,125926,125927,125930],{},"也可以多次插拔USB设备，会发现设备端口",[26,125928,125929],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[274,125932,125933],{},[538,125934,120878],{},[274,125936,125937],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[30,125939,125941],{"id":125940},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[274,125943,125944,125946],{},[538,125945,125660],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[274,125948,125949,125951],{},[538,125950,125666],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[274,125953,125954],{},[538,125955,125672],{},[274,125957,125958],{},"（1）.查看所连接的主机USB接口的KERNELS",[274,125960,125961],{},"调用如下指令查看第一台雷达的USB信息：",[19,125963,125965],{"className":323,"code":125964,"language":325,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[26,125966,125967,125987],{"__ignoreMap":28},[52,125968,125969,125972,125974,125977,125980,125982,125984],{"class":54,"line":55},[52,125970,125971],{"class":58},"udevadm",[52,125973,72750],{"class":62},[52,125975,125976],{"class":90}," --attribute-walk",[52,125978,125979],{"class":90}," --name=\u002Fdev\u002FttyUSB0",[52,125981,2379],{"class":160},[52,125983,2382],{"class":58},[52,125985,125986],{"class":62}," KERNELS\n",[52,125988,125989,125991,125993,125995,125998,126000,126002],{"class":54,"line":69},[52,125990,125971],{"class":58},[52,125992,72750],{"class":62},[52,125994,125976],{"class":90},[52,125996,125997],{"class":90}," --name=\u002Fdev\u002FttyACM0",[52,125999,2379],{"class":160},[52,126001,2382],{"class":58},[52,126003,125986],{"class":62},[274,126005,126006],{},[280,126007],{"alt":28,"src":126008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[274,126010,126011],{},"调用如下指令查看第二台雷达的USB信息：",[19,126013,126015],{"className":323,"code":126014,"language":325,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[26,126016,126017],{"__ignoreMap":28},[52,126018,126019,126021,126023,126025,126028,126030,126032],{"class":54,"line":55},[52,126020,125971],{"class":58},[52,126022,72750],{"class":62},[52,126024,125976],{"class":90},[52,126026,126027],{"class":90}," --name=\u002Fdev\u002FttyUSB1",[52,126029,2379],{"class":160},[52,126031,2382],{"class":58},[52,126033,125986],{"class":62},[274,126035,126036,126037,126040,126041,126044,126045,126048],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[26,126038,126039],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[26,126042,126043],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[538,126046,126047],{},"唯一性标识","”。",[274,126050,125700],{},[274,126052,125703,126053,126055],{},[26,126054,125706],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[19,126057,126058],{"className":323,"code":125710,"language":325,"meta":28,"style":28},[26,126059,126060],{"__ignoreMap":28},[52,126061,126062,126064,126066],{"class":54,"line":55},[52,126063,59],{"class":58},[52,126065,124],{"class":62},[52,126067,125721],{"class":62},[19,126069,126071],{"className":323,"code":126070,"language":325,"meta":28,"style":28},"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",[26,126072,126073,126102],{"__ignoreMap":28},[52,126074,126075,126077,126079,126081,126084,126086,126089,126092,126094,126097,126099],{"class":54,"line":55},[52,126076,125734],{"class":622},[52,126078,2099],{"class":160},[52,126080,125739],{"class":62},[52,126082,126083],{"class":622}," KERNELS",[52,126085,2099],{"class":160},[52,126087,126088],{"class":62},"=\"1-1.3:1.0\",",[52,126090,126091],{"class":58}," MODE:",[52,126093,2099],{"class":62},[52,126095,126096],{"class":58},"\"0777\"",[52,126098,3491],{"class":58},[52,126100,126101],{"class":62}," SYMLINK+=\"rplidar_front\"\n",[52,126103,126104,126106,126108,126110,126112,126114,126117,126119,126121,126123,126125],{"class":54,"line":69},[52,126105,125734],{"class":622},[52,126107,2099],{"class":160},[52,126109,125739],{"class":62},[52,126111,126083],{"class":622},[52,126113,2099],{"class":160},[52,126115,126116],{"class":62},"=\"1-1.4:1.0\",",[52,126118,126091],{"class":58},[52,126120,2099],{"class":62},[52,126122,126096],{"class":58},[52,126124,3491],{"class":58},[52,126126,126127],{"class":62}," SYMLINK+=\"rplidar_back\"\n",[274,126129,125819],{},[274,126131,125822],{},[19,126133,126134],{"className":323,"code":125825,"language":325,"meta":28,"style":28},[26,126135,126136,126140,126150,126160,126164,126168,126178],{"__ignoreMap":28},[52,126137,126138],{"class":54,"line":55},[52,126139,125832],{"class":332},[52,126141,126142,126144,126146,126148],{"class":54,"line":69},[52,126143,59],{"class":58},[52,126145,1641],{"class":62},[52,126147,125841],{"class":62},[52,126149,125844],{"class":62},[52,126151,126152,126154,126156,126158],{"class":54,"line":82},[52,126153,59],{"class":58},[52,126155,1641],{"class":62},[52,126157,125841],{"class":62},[52,126159,125855],{"class":62},[52,126161,126162],{"class":54,"line":97},[52,126163,116],{"emptyLinePlaceholder":115},[52,126165,126166],{"class":54,"line":112},[52,126167,125864],{"class":332},[52,126169,126170,126172,126174,126176],{"class":54,"line":119},[52,126171,59],{"class":58},[52,126173,125871],{"class":62},[52,126175,125874],{"class":62},[52,126177,125877],{"class":90},[52,126179,126180,126182,126184],{"class":54,"line":130},[52,126181,59],{"class":58},[52,126183,125871],{"class":62},[52,126185,125886],{"class":62},[274,126187,125889],{},[274,126189,125892],{},[274,126191,125895,126192,126195],{},[26,126193,126194],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[274,126197,126198],{},[280,126199],{"alt":28,"src":126200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[274,126202,126203],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[274,126205,126206,126208],{},[538,126207,120878],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[30,126210,126212],{"id":126211},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[274,126214,126215],{},"（1）.查看所连接的主机USB接口的信息",[19,126217,126219],{"className":323,"code":126218,"language":325,"meta":28,"style":28},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[26,126220,126221,126251],{"__ignoreMap":28},[52,126222,126223,126225,126227,126230,126232,126234,126236,126238,126241,126244,126246,126249],{"class":54,"line":55},[52,126224,125971],{"class":58},[52,126226,72750],{"class":62},[52,126228,126229],{"class":90}," -a",[52,126231,1863],{"class":90},[52,126233,31356],{"class":622},[52,126235,125971],{"class":58},[52,126237,72750],{"class":62},[52,126239,126240],{"class":90}," -q",[52,126242,126243],{"class":62}," path",[52,126245,28061],{"class":90},[52,126247,126248],{"class":62}," \u002Fdev\u002FttyACM0",[52,126250,170],{"class":622},[52,126252,126253,126255,126257,126259,126261,126263,126265,126267,126269,126271,126273,126276],{"class":54,"line":69},[52,126254,125971],{"class":58},[52,126256,72750],{"class":62},[52,126258,126229],{"class":90},[52,126260,1863],{"class":90},[52,126262,31356],{"class":622},[52,126264,125971],{"class":58},[52,126266,72750],{"class":62},[52,126268,126240],{"class":90},[52,126270,126243],{"class":62},[52,126272,28061],{"class":90},[52,126274,126275],{"class":62}," \u002Fdev\u002FttyUSB0",[52,126277,170],{"class":622},[274,126279,126280],{},[280,126281],{"alt":28,"src":126282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[274,126284,126285],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[274,126287,125700],{},[274,126289,125703,126290,126055],{},[26,126291,125706],{},[19,126293,126294],{"className":323,"code":125710,"language":325,"meta":28,"style":28},[26,126295,126296],{"__ignoreMap":28},[52,126297,126298,126300,126302],{"class":54,"line":55},[52,126299,59],{"class":58},[52,126301,124],{"class":62},[52,126303,125721],{"class":62},[19,126305,126307],{"className":323,"code":126306,"language":325,"meta":28,"style":28},"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",[26,126308,126309,126337,126363],{"__ignoreMap":28},[52,126310,126311,126313,126315,126318,126320,126322,126324,126326,126329,126332,126334],{"class":54,"line":55},[52,126312,125734],{"class":622},[52,126314,2099],{"class":160},[52,126316,126317],{"class":62},"=\"ttyACM*\",",[52,126319,125742],{"class":58},[52,126321,125745],{"class":62},[52,126323,125774],{"class":58},[52,126325,3491],{"class":58},[52,126327,126328],{"class":62}," ATTRS{idProduct}==\"55d4\",",[52,126330,126331],{"class":62}," ATTRS{serial}==\"0001\",",[52,126333,125756],{"class":62},[52,126335,126336],{"class":62}," SYMLINK+=\"ttyACM_MCU\"\n",[52,126338,126339,126341,126343,126345,126347,126349,126351,126353,126355,126358,126360],{"class":54,"line":69},[52,126340,125734],{"class":622},[52,126342,2099],{"class":160},[52,126344,126317],{"class":62},[52,126346,125742],{"class":58},[52,126348,125745],{"class":62},[52,126350,125774],{"class":58},[52,126352,3491],{"class":58},[52,126354,126328],{"class":62},[52,126356,126357],{"class":62}," ATTRS{serial}==\"0002\",",[52,126359,125756],{"class":62},[52,126361,126362],{"class":62}," SYMLINK+=\"ttyACM_Lidar\"\n",[52,126364,126365,126367,126369,126371,126373,126375,126377,126379,126381,126383],{"class":54,"line":82},[52,126366,125734],{"class":622},[52,126368,2099],{"class":160},[52,126370,125739],{"class":62},[52,126372,125742],{"class":58},[52,126374,125745],{"class":62},[52,126376,125774],{"class":58},[52,126378,3491],{"class":58},[52,126380,125779],{"class":62},[52,126382,125756],{"class":62},[52,126384,126385],{"class":62}," SYMLINK+=\"ttyUSB_IMU\"\n",[274,126387,125819],{},[274,126389,125822],{},[19,126391,126392],{"className":323,"code":125825,"language":325,"meta":28,"style":28},[26,126393,126394,126398,126408,126418,126422,126426,126436],{"__ignoreMap":28},[52,126395,126396],{"class":54,"line":55},[52,126397,125832],{"class":332},[52,126399,126400,126402,126404,126406],{"class":54,"line":69},[52,126401,59],{"class":58},[52,126403,1641],{"class":62},[52,126405,125841],{"class":62},[52,126407,125844],{"class":62},[52,126409,126410,126412,126414,126416],{"class":54,"line":82},[52,126411,59],{"class":58},[52,126413,1641],{"class":62},[52,126415,125841],{"class":62},[52,126417,125855],{"class":62},[52,126419,126420],{"class":54,"line":97},[52,126421,116],{"emptyLinePlaceholder":115},[52,126423,126424],{"class":54,"line":112},[52,126425,125864],{"class":332},[52,126427,126428,126430,126432,126434],{"class":54,"line":119},[52,126429,59],{"class":58},[52,126431,125871],{"class":62},[52,126433,125874],{"class":62},[52,126435,125877],{"class":90},[52,126437,126438,126440,126442],{"class":54,"line":130},[52,126439,59],{"class":58},[52,126441,125871],{"class":62},[52,126443,125886],{"class":62},[274,126445,126446,126447],{},"再重新插拔设备即可，或者 ",[538,126448,126449],{},"直接重启系统。",[274,126451,125892],{},[274,126453,125895,126454,126195],{},[26,126455,126194],{},[274,126457,126458],{},[280,126459],{"alt":28,"src":126460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[274,126462,126203],{},[274,126464,126465,126467],{},[538,126466,120878],{}," 一些设备可能没有串口号等。",[30,126469,126471],{"id":126470},"_744-其他注意事项","7.4.4 其他注意事项",[274,126473,126474,126475,126477,126478,126481,126482,2509,126485,126488,126489,126491],{},"并非所有的USB设备端口号都是",[26,126476,125929],{},"的格式，比如Arduino的端口号可能是",[26,126479,126480],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[26,126483,126484],{},"videon",[26,126486,126487],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[26,126490,126484],{},"端口，绑定时需要关联的也是该接口。",[274,126493,126494,126495,126498,126499,126502,126503,126505,126506,126509,126510,126513,126514,126517,126518,126517,126521,126517,126524,31319],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[26,126496,126497],{},"KERNEL==\"ttyUSB*\"","修改为",[26,126500,126501],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[26,126504,126497],{},"修改为类似于",[26,126507,126508],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[26,126511,126512],{},"video[0,2,4,6]","表示可以绑定的端口为",[26,126515,126516],{},"video0","或",[26,126519,126520],{},"video2",[26,126522,126523],{},"video4",[26,126525,126526],{},"video6",[14,126528,126530],{"id":126529},"_75-挂载内网网页","7.5 挂载内网网页",[274,126532,126533],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[274,126535,126536],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[274,126538,126539],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[274,126541,126542,126543],{},"Termux 下载地址（F-Droid）：",[300,126544,126545],{"href":126545,"rel":126546},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[304],[274,126548,126549],{},"首先打开app后，先更新软件缓存：",[19,126551,126553],{"className":323,"code":126552,"language":325,"meta":28,"style":28},"pkg update\n",[26,126554,126555],{"__ignoreMap":28},[52,126556,126557,126560],{"class":54,"line":55},[52,126558,126559],{"class":58},"pkg",[52,126561,66],{"class":62},[274,126563,126564],{},"然后换源",[19,126566,126568],{"className":323,"code":126567,"language":325,"meta":28,"style":28},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[26,126569,126570],{"__ignoreMap":28},[52,126571,126572,126574,126577],{"class":54,"line":55},[52,126573,125442],{"class":58},[52,126575,126576],{"class":622}," $PREFIX",[52,126578,126579],{"class":62},"\u002Fetc\u002Fapt\u002Fsources.list\n",[274,126581,126582],{},"将该文件内容替换为下面：",[19,126584,126586],{"className":323,"code":126585,"language":325,"meta":28,"style":28},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[26,126587,126588],{"__ignoreMap":28},[52,126589,126590,126593,126596,126599],{"class":54,"line":55},[52,126591,126592],{"class":58},"deb",[52,126594,126595],{"class":62}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[52,126597,126598],{"class":62}," stable",[52,126600,126601],{"class":62}," main\n",[4118,126603,126604,126631],{},[1073,126605,126606,126607,126609,126610],{},"如果你使用的是",[26,126608,125442],{},"编辑器：",[4118,126611,126612,126619,126625],{},[1073,126613,126614,126615,126618],{},"按 ",[26,126616,126617],{},"Ctrl+O"," 保存文件。",[1073,126620,126614,126621,126624],{},[26,126622,126623],{},"Enter"," 确认文件名。",[1073,126626,126614,126627,126630],{},[26,126628,126629],{},"Ctrl+X"," 退出编辑器。",[1073,126632,126606,126633,126609,126636],{},[26,126634,126635],{},"vim",[4118,126637,126638,126644],{},[1073,126639,126614,126640,126643],{},[26,126641,126642],{},"Esc"," 退出编辑模式。",[1073,126645,126646,126647,126649],{},"输入 ",[26,126648,799],{}," 保存并退出。",[274,126651,126652],{},"接下来重新更新软件源：",[19,126654,126656],{"className":323,"code":126655,"language":325,"meta":28,"style":28},"pkg update && pkg upgrade\n",[26,126657,126658],{"__ignoreMap":28},[52,126659,126660,126662,126664,126666,126668],{"class":54,"line":55},[52,126661,126559],{"class":58},[52,126663,120263],{"class":62},[52,126665,29133],{"class":622},[52,126667,126559],{"class":58},[52,126669,120249],{"class":62},[274,126671,126672],{},"安装python：",[19,126674,126676],{"className":323,"code":126675,"language":325,"meta":28,"style":28},"pkg install python\n",[26,126677,126678],{"__ignoreMap":28},[52,126679,126680,126682,126684],{"class":54,"line":55},[52,126681,126559],{"class":58},[52,126683,76],{"class":62},[52,126685,126686],{"class":62}," python\n",[274,126688,126689,29412],{},[538,126690,126691],{},"通过Termux访问设备存储",[274,126693,126694],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[19,126696,126698],{"className":323,"code":126697,"language":325,"meta":28,"style":28},"termux-setup-storage\n",[26,126699,126700],{"__ignoreMap":28},[52,126701,126702],{"class":54,"line":55},[52,126703,126697],{"class":58},[1070,126705,126706],{},[1073,126707,126708,29412,126711],{},[538,126709,126710],{},"进入HTML文件所在的目录",[1070,126712,126713],{},[1073,126714,126715,126716,126718],{},"使用",[26,126717,338],{},"命令进入HTML文件所在的目录：",[19,126720,126722],{"className":323,"code":126721,"language":325,"meta":28,"style":28},"cd ~\u002Fyour_html_folder\n",[26,126723,126724],{"__ignoreMap":28},[52,126725,126726,126728],{"class":54,"line":55},[52,126727,338],{"class":90},[52,126729,126730],{"class":62}," ~\u002Fyour_html_folder\n",[1070,126732,126733],{"start":69},[1073,126734,126735,29412,126738,126743,126760],{},[538,126736,126737],{},"启动Python HTTP服务器",[1070,126739,126740],{},[1073,126741,126742],{},"运行以下命令启动一个简单的HTTP服务器：",[19,126744,126746],{"className":323,"code":126745,"language":325,"meta":28,"style":28},"python -m http.server 8000\n",[26,126747,126748],{"__ignoreMap":28},[52,126749,126750,126752,126754,126757],{"class":54,"line":55},[52,126751,33312],{"class":58},[52,126753,1366],{"class":90},[52,126755,126756],{"class":62}," http.server",[52,126758,126759],{"class":90}," 8000\n",[1070,126761,126762],{"start":82},[1073,126763,126764,126765,126768],{},"这会在端口",[26,126766,126767],{},"8000","上启动一个Web服务器。",[4118,126770,126771],{},[1073,126772,126773],{},"启动服务器后，Termux会显示日志信息，例如：",[19,126775,126777],{"className":2427,"code":126776,"language":2429,"meta":2430,"style":28},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[26,126778,126779],{"__ignoreMap":28},[52,126780,126781],{"class":54,"line":55},[52,126782,126776],{},[4118,126784,126785],{},[1073,126786,126787],{},"这表示服务器已成功启动。",[274,126789,126790],{},[538,126791,126792],{},"在浏览器中访问HTML文件",[1070,126794,126795],{},[1073,126796,126797,29412,126800,126805],{},[538,126798,126799],{},"在同一设备上访问",[1070,126801,126802],{},[1073,126803,126804],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[19,126806,126809],{"className":126807,"code":126808,"language":74592,"meta":28,"style":28},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[26,126810,126811],{"__ignoreMap":28},[52,126812,126813,126816],{"class":54,"line":55},[52,126814,126815],{"class":622},"http:",[52,126817,126818],{"class":332},"\u002F\u002Flocalhost:8000\n",[4118,126820,126821],{},[1073,126822,126823,126824,126827],{},"如果HTML文件中有",[26,126825,126826],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126829,126831],{"id":126830},"_76-linux重点知识","7.6 Linux重点知识",[30,126833,126835],{"id":126834},"_761-关于点的说明","7.6.1 关于点的说明",[274,126837,126838],{},[280,126839],{"alt":28,"src":126840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[274,126842,126843],{},"一点本目录，两点上目录",[30,126845,126847],{"id":126846},"_762-目录","7.6.2 目录",[1486,126849,126851],{"id":126850},"_7621-系统启动必须","7.6.2.1 系统启动必须",[274,126853,126854],{},[538,126855,126856],{},"\u002Fboot:",[274,126858,126859],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[274,126861,126862],{},[538,126863,126864],{},"\u002Fetc:",[274,126866,126867],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[274,126869,126870],{},[538,126871,126872],{},"\u002Flib：",[274,126874,126875],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[274,126877,126878],{},[538,126879,126880],{},"\u002Fsys:",[274,126882,126883],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[1486,126885,126887],{"id":126886},"_7622-指令集合","7.6.2.2 指令集合",[274,126889,126890],{},[538,126891,126892],{},"\u002Fbin:",[274,126894,126895],{},"为二进制文件的缩写，存放最经常使用的命令",[274,126897,126898],{},[538,126899,126900],{},"\u002Fsbin:",[274,126902,126903],{},"只有系统管理员才能使用的程序和指令",[1486,126905,126907],{"id":126906},"_7623-外部文件管理","7.6.2.3 外部文件管理",[274,126909,126910],{},[538,126911,126912],{},"\u002Fdev:",[274,126914,126915],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[274,126917,126918],{},[538,126919,126920],{},"\u002Fmedia:",[274,126922,126923],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[274,126925,126926],{},[538,126927,126928],{},"\u002Fmnt:",[274,126930,126931],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[1486,126933,126935],{"id":126934},"_7624-临时文件","7.6.2.4 临时文件",[274,126937,126938],{},[538,126939,126940],{},"\u002Frun:",[274,126942,126943],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[274,126945,126946],{},[538,126947,126948],{},"\u002Flost+found:",[274,126950,126951],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[274,126953,126954],{},[538,126955,126956],{},"\u002Ftmp:",[274,126958,126959],{},"这个目录是用来存放一些临时文件的",[1486,126961,126963],{"id":126962},"_7625-账户","7.6.2.5 账户",[274,126965,126966],{},[538,126967,126968],{},"\u002Froot：",[274,126970,126971],{},"系统管理员的用户主目录",[274,126973,126974,29412],{},[538,126975,126976],{},"\u002Fhome",[274,126978,126979],{},"用户的主目录，以用户的账号命名的",[274,126981,126982,29412],{},[538,126983,126984],{},"\u002Fusr",[274,126986,126987],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[274,126989,126990],{},[538,126991,126992],{},"\u002Fusr\u002Fbin：",[274,126994,126995],{},"系统用户使用的应用程序与指令",[274,126997,126998],{},[538,126999,127000],{},"\u002Fusr\u002Fsbin：",[274,127002,127003],{},"超级用户使用的比较高级的管理程序和系统守护程序",[274,127005,127006],{},[538,127007,127008],{},"\u002Fusr\u002Fsrc：",[274,127010,127011],{},"内核源代码默认的放置目录",[1486,127013,127015],{"id":127014},"_7626-运行过程要用","7.6.2.6 运行过程要用",[274,127017,127018],{},[538,127019,127020],{},"\u002Fvar：",[274,127022,127023],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[274,127025,127026],{},[538,127027,127028],{},"\u002Fproc:",[274,127030,127031,127032,127035],{},"管理 ",[538,127033,127034],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[1486,127037,127039],{"id":127038},"_7627-扩展用的","7.6.2.7 扩展用的",[274,127041,127042],{},[538,127043,127044],{},"\u002Fopt:",[274,127046,127047],{},"默认是空的，我们安装额外软件可以放在这个里面",[274,127049,127050],{},[538,127051,127052],{},"\u002Fsrv:",[274,127054,127055],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[30,127057,127059],{"id":127058},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[274,127061,127062],{},[280,127063],{"alt":28,"src":127064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[274,127066,127067],{},"windows-->linux:",[274,127069,127070],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[274,127072,127073],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[274,127075,127076],{},"linux传输文件到windows",[274,127078,127079],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[30,127081,127083],{"id":127082},"_764-易忘知识","7.6.4 易忘知识",[274,127085,127086],{},"操作系统内核查看",[19,127088,127089],{"className":323,"code":2904,"language":325,"meta":28,"style":28},[26,127090,127091],{"__ignoreMap":28},[52,127092,127093,127095],{"class":54,"line":55},[52,127094,2911],{"class":58},[52,127096,2914],{"class":90},[274,127098,127099],{},[280,127100],{"alt":28,"src":127101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[274,127103,127104],{},[280,127105],{"alt":28,"src":127106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[19,127108,127110],{"className":323,"code":127109,"language":325,"meta":28,"style":28},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[26,127111,127112,127124],{"__ignoreMap":28},[52,127113,127114,127116,127119,127122],{"class":54,"line":55},[52,127115,123875],{"class":58},[52,127117,127118],{"class":62}," mvtest",[52,127120,127121],{"class":62}," mvtest2",[52,127123,623],{"class":622},[52,127125,127126],{"class":54,"line":69},[52,127127,127128],{"class":58},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[274,127130,127131],{},[280,127132],{"alt":28,"src":127133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[274,127135,127136],{},[280,127137],{"alt":28,"src":127138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[274,127140,127141,127142,127145],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[26,127143,127144],{},"du -a"," 可以快速查看磁盘使用细节。",[30,127147,127149],{"id":127148},"_765-vim","7.6.5 Vim",[274,127151,127152],{},[280,127153],{"alt":28,"src":127154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[274,127156,127157],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[274,127159,127160],{},"一开始进去为命令模式，此时点击输入的字母为命令",[274,127162,127163],{},[538,127164,127165],{},"1.命令模式：",[274,127167,127168],{},"i 切换到输入模式，在光标当前位置开始输入文本",[274,127170,127171],{},"x 删除当前光标所在处的字符",[274,127173,127174],{},"：切换到底线命令模式，以在最底一行输入命令",[274,127176,127177],{},"a 进行插入模式，在光标下一个位置输入文本",[274,127179,127180],{},"o 在当前的下方插入一个新行，并进入插入模式",[274,127182,127183],{},"0 在当前行的上方插入一个新行，并进入插入模式",[274,127185,127186],{},"dd 剪切当前行",[274,127188,127189],{},"yy 复制当前行",[274,127191,127192],{},"p 粘贴剪贴板内容到光标下方",[274,127194,127195],{},"P 粘贴剪贴板内容到光标上方",[274,127197,127198],{},"u 撤销上一次操作",[274,127200,127201],{},"ctrl+r 重做上一次操作",[274,127203,127204,127206],{},[3907,127205],{}," 保存文件",[274,127208,127209,127211],{},[3757,127210],{}," 退出Vim编辑器",[274,127213,127214,127216],{},[3757,127215],{},"! 强制退出Vim编辑器，不保存修改",[274,127218,127219],{},[538,127220,127221],{},"2.输入模式：",[274,127223,127224],{},[280,127225],{"alt":28,"src":127226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[274,127228,127229],{},[538,127230,127231],{},"3.底线命令模式：",[274,127233,127234],{},[280,127235],{"alt":28,"src":127236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[274,127238,127239],{},"按下esc可以退出底线命令模式",[30,127241,127243],{"id":127242},"_766-apt","7.6.6 apt",[274,127245,127246],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[30,127248,127250],{"id":127249},"_767-home与root的区别","7.6.7 home与root的区别",[274,127252,127253],{},[280,127254],{"alt":28,"src":127255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[274,127257,127258],{},[280,127259],{"alt":28,"src":127260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[274,127262,127263],{},[280,127264],{"alt":28,"src":127265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[274,127267,127268],{},[280,127269],{"alt":28,"src":127270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[30,127272,127274],{"id":127273},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[274,127276,127277],{},[300,127278,127279],{"href":127279,"rel":127280},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[304],[1070,127282,127283,127286],{},[1073,127284,127285],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[1073,127287,127288],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[274,127290,127291],{},[280,127292],{"alt":28,"src":127293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[274,127295,127296],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[274,127298,127299],{},[280,127300],{"alt":28,"src":127301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[19,127303,127305],{"className":2427,"code":127304,"language":2429,"meta":2430,"style":28},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[26,127306,127307,127312],{"__ignoreMap":28},[52,127308,127309],{"class":54,"line":55},[52,127310,127311],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[52,127313,127314],{"class":54,"line":69},[52,127315,127316],{},".\u002Fpycharm.sh\n",[274,127318,127319],{},"3️⃣创建.desktop文件",[274,127321,127322],{},[538,127323,127324],{},"原理：",[4118,127326,127327,127337],{},[1073,127328,127329,127330,127336],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[538,127331,127332,127335],{},[26,127333,127334],{},".desktop"," 文件"," 来识别应用。",[1073,127338,127339,127341,127342],{},[26,127340,127334],{}," 文件相当于一个“应用注册表”，告诉系统：",[4118,127343,127344,127347,127350,127353,127356],{},[1073,127345,127346],{},"应用名字（Name）",[1073,127348,127349],{},"图标（Icon）",[1073,127351,127352],{},"执行命令（Exec）",[1073,127354,127355],{},"分类（Categories）",[1073,127357,127358],{},"是否需要终端（Terminal）",[19,127360,127362],{"className":2427,"code":127361,"language":2429,"meta":2430,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[26,127363,127364,127369],{"__ignoreMap":28},[52,127365,127366],{"class":54,"line":55},[52,127367,127368],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[52,127370,127371],{"class":54,"line":69},[52,127372,127373],{},"nano pycharm.desktop\n",[274,127375,127376],{},"nano是一个命令行下的编辑器，也可以使用vim",[19,127378,127380],{"className":2427,"code":127379,"language":2429,"meta":2430,"style":28},"[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",[26,127381,127382,127387,127392,127397,127402,127407,127412,127417,127422,127427],{"__ignoreMap":28},[52,127383,127384],{"class":54,"line":55},[52,127385,127386],{},"[Desktop Entry]\n",[52,127388,127389],{"class":54,"line":69},[52,127390,127391],{},"Version=1.0\n",[52,127393,127394],{"class":54,"line":82},[52,127395,127396],{},"Type=Application\n",[52,127398,127399],{"class":54,"line":97},[52,127400,127401],{},"Name=PyCharm\n",[52,127403,127404],{"class":54,"line":112},[52,127405,127406],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[52,127408,127409],{"class":54,"line":119},[52,127410,127411],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[52,127413,127414],{"class":54,"line":130},[52,127415,127416],{},"Comment=JetBrains PyCharm IDE\n",[52,127418,127419],{"class":54,"line":136},[52,127420,127421],{},"Categories=Development;IDE;\n",[52,127423,127424],{"class":54,"line":141},[52,127425,127426],{},"Terminal=false\n",[52,127428,127429],{"class":54,"line":146},[52,127430,127431],{},"StartupWMClass=jetbrains-pycharm\n",[4118,127433,127434,127440,127446,127452],{},[1073,127435,127436,127439],{},[26,127437,127438],{},"Exec"," → 点击图标时执行的命令",[1073,127441,127442,127445],{},[26,127443,127444],{},"Icon"," → 显示在菜单和桌面上的图标",[1073,127447,127448,127451],{},[26,127449,127450],{},"Terminal=false"," → 不打开终端",[1073,127453,127454,127457],{},[26,127455,127456],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127459,127460,127461],"blockquote",{},[274,127462,127463,127464,127466,127467],{},"可以理解成 ",[26,127465,127334],{}," 文件是 Linux 的 ",[538,127468,127469],{},"快捷方式配置文件",[274,127471,127472],{},"4️⃣设置可执行权限",[19,127474,127476],{"className":2427,"code":127475,"language":2429,"meta":2430,"style":28},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[26,127477,127478],{"__ignoreMap":28},[52,127479,127480],{"class":54,"line":55},[52,127481,127475],{},[274,127483,127484],{},"5️⃣桌面图标启动的话如下：",[19,127486,127488],{"className":2427,"code":127487,"language":2429,"meta":2430,"style":28},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,127489,127490,127495],{"__ignoreMap":28},[52,127491,127492],{"class":54,"line":55},[52,127493,127494],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[52,127496,127497],{"class":54,"line":69},[52,127498,127499],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1070,127501,127502],{"start":82},[1073,127503,127504],{},"下载Appimage文件实现软件的安装",[274,127506,127507],{},"1️⃣先下载appimage",[274,127509,127510],{},[300,127511,127512],{"href":127512,"rel":127513},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[304],[274,127515,127516],{},[280,127517],{"alt":28,"src":127518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[274,127520,127521],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[274,127523,127524],{},[280,127525],{"alt":28,"src":127526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[274,127528,127529],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[274,127531,127532],{},[280,127533],{"alt":28,"src":127534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[274,127536,127537],{},[280,127538],{"alt":28,"src":127539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[274,127541,127542,127543,127546],{},"3️⃣给他们放在",[26,127544,127545],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[274,127548,127549],{},"4️⃣给软件执行权限",[19,127551,127553],{"className":2427,"code":127552,"language":2429,"meta":2430,"style":28},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[26,127554,127555,127560],{"__ignoreMap":28},[52,127556,127557],{"class":54,"line":55},[52,127558,127559],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[52,127561,127562],{"class":54,"line":69},[52,127563,127564],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[274,127566,127567],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[19,127569,127571],{"className":323,"code":127570,"language":325,"meta":28,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[26,127572,127573,127580,127587,127593],{"__ignoreMap":28},[52,127574,127575,127577],{"class":54,"line":55},[52,127576,338],{"class":90},[52,127578,127579],{"class":62}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[52,127581,127582,127584],{"class":54,"line":69},[52,127583,104203],{"class":58},[52,127585,127586],{"class":62}," .\u002Fqqmusic.desktop\n",[52,127588,127589,127591],{"class":54,"line":82},[52,127590,126635],{"class":58},[52,127592,127586],{"class":62},[52,127594,127595,127597,127599,127601],{"class":54,"line":97},[52,127596,59],{"class":58},[52,127598,1712],{"class":62},[52,127600,125501],{"class":62},[52,127602,127586],{"class":62},[274,127604,127605,127607],{},[26,127606,104203],{},"：一个 Linux 命令，主要功能是：",[4118,127609,127610,127613],{},[1073,127611,127612],{},"如果文件不存在，就创建一个新的空文件",[1073,127614,127615],{},"如果文件已存在，就更新该文件的最后修改时间",[19,127617,127619],{"className":2427,"code":127618,"language":2429,"meta":2430,"style":28},"[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",[26,127620,127621,127625,127630,127635,127640,127644,127649],{"__ignoreMap":28},[52,127622,127623],{"class":54,"line":55},[52,127624,127386],{},[52,127626,127627],{"class":54,"line":69},[52,127628,127629],{},"Name=QQ音乐\n",[52,127631,127632],{"class":54,"line":82},[52,127633,127634],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[52,127636,127637],{"class":54,"line":97},[52,127638,127639],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[52,127641,127642],{"class":54,"line":112},[52,127643,127396],{},[52,127645,127646],{"class":54,"line":119},[52,127647,127648],{},"Categories=Audio;Music;Player;\n",[52,127650,127651],{"class":54,"line":130},[52,127652,127653],{},"Comment=QQ Music Client for Linux\n",[274,127655,127656],{},"将文件复制进去",[274,127658,127659],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[274,127661,127662],{},[280,127663],{"alt":28,"src":127664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[274,127666,127667],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[274,127669,127670],{},[280,127671],{"alt":28,"src":127672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[274,127674,127675,127676,127679,127680,127683],{},"如果你用的不是KDE，那么也可以直接修改",[26,127677,127678],{},"qqmuic.desktop","：在exec的末尾加上",[26,127681,127682],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[19,127685,127687],{"className":2427,"code":127686,"language":2429,"meta":2430,"style":28},"[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",[26,127688,127689,127693,127697,127702,127706,127710,127714],{"__ignoreMap":28},[52,127690,127691],{"class":54,"line":55},[52,127692,127386],{},[52,127694,127695],{"class":54,"line":69},[52,127696,127629],{},[52,127698,127699],{"class":54,"line":82},[52,127700,127701],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[52,127703,127704],{"class":54,"line":97},[52,127705,127639],{},[52,127707,127708],{"class":54,"line":112},[52,127709,127396],{},[52,127711,127712],{"class":54,"line":119},[52,127713,127648],{},[52,127715,127716],{"class":54,"line":130},[52,127717,127653],{},[274,127719,127720],{},[280,127721],{"alt":28,"src":127722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[274,127724,127725],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[19,127727,127729],{"className":2427,"code":127728,"language":2429,"meta":2430,"style":28},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[26,127730,127731],{"__ignoreMap":28},[52,127732,127733],{"class":54,"line":55},[52,127734,127728],{},[1070,127736,127737],{"start":97},[1073,127738,127739],{},"去Flathub上安装软件",[274,127741,127742],{},[300,127743,127744],{"href":127744,"rel":127745},"https:\u002F\u002Fflathub.org\u002F",[304],[274,127747,127748],{},"1️⃣去上面的官网搜索软件+下载软件",[274,127750,127751],{},[280,127752],{"alt":28,"src":127753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[19,127755,127757],{"className":2427,"code":127756,"language":2429,"meta":2430,"style":28},"flatpak install flathub com.obsproject.Studio\n",[26,127758,127759],{"__ignoreMap":28},[52,127760,127761],{"class":54,"line":55},[52,127762,127756],{},[274,127764,127765],{},[280,127766],{"alt":28,"src":127767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[274,127769,127770],{},"2️⃣运行软件",[274,127772,127773],{},"a.官方方式：",[274,127775,127776],{},[280,127777],{"alt":28,"src":127778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[19,127780,127781],{"className":2427,"code":127756,"language":2429,"meta":2430,"style":28},[26,127782,127783],{"__ignoreMap":28},[52,127784,127785],{"class":54,"line":55},[52,127786,127756],{},[274,127788,127789],{},"b.当普通软件运行：",[274,127791,127792],{},[280,127793],{"alt":28,"src":127794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[274,127796,127797],{},[280,127798],{"alt":28,"src":127799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[3015,127801,127802],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"searchDepth":69,"depth":69,"links":127804},[127805,127806,127811,127812,127818,127819],{"id":124537,"depth":69,"text":124538},{"id":124879,"depth":69,"text":124880,"children":127807},[127808,127809,127810],{"id":124883,"depth":82,"text":124884},{"id":124950,"depth":82,"text":124951},{"id":125211,"depth":82,"text":125212},{"id":125364,"depth":69,"text":125365},{"id":125602,"depth":69,"text":125603,"children":127813},[127814,127815,127816,127817],{"id":125654,"depth":82,"text":125655},{"id":125940,"depth":82,"text":125941},{"id":126211,"depth":82,"text":126212},{"id":126470,"depth":82,"text":126471},{"id":126529,"depth":69,"text":126530},{"id":126830,"depth":69,"text":126831,"children":127820},[127821,127822,127823,127824,127825,127826,127827,127828],{"id":126834,"depth":82,"text":126835},{"id":126846,"depth":82,"text":126847},{"id":127058,"depth":82,"text":127059},{"id":127082,"depth":82,"text":127083},{"id":127148,"depth":82,"text":127149},{"id":127242,"depth":82,"text":127243},{"id":127249,"depth":82,"text":127250},{"id":127273,"depth":82,"text":127274},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124529,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127835,"title":127836,"body":127837,"description":3046,"extension":3047,"meta":127841,"navigation":115,"path":127842,"seo":127843,"stem":127844,"__hash__":127845},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127838,"toc":127839},[],{"title":28,"searchDepth":69,"depth":69,"links":127840},[],{"category":33195},"\u002Fwiki\u002F2025-01-27-linux",{"title":127836,"description":3046},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127847,"title":127848,"body":127849,"description":127853,"extension":3047,"meta":128244,"navigation":115,"path":128245,"seo":128246,"stem":128247,"__hash__":128248},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127850,"toc":128242},[127851,127854,127858,127875,127878,127931,127935,127937,127977,127986,127990,127993,128234,128239],[274,127852,127853],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127855,127857],{"id":127856},"_1ubuntu环境配置","1.Ubuntu环境配置",[1070,127859,127860,127863,127866,127869,127872],{},[1073,127861,127862],{},"ubuntu环境换源",[1073,127864,127865],{},"安装cuda",[1073,127867,127868],{},"安装miniconda",[1073,127870,127871],{},"安装pytorch",[1073,127873,127874],{},"安装genesis",[274,127876,127877],{},"参考链接：",[19,127879,127881],{"className":26774,"code":127880,"language":26776,"meta":28,"style":28},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[26,127882,127883],{"__ignoreMap":28},[52,127884,127885,127888,127891,127894,127896,127899,127902,127904,127907,127910,127912,127915,127918,127920,127923,127926,127928],{"class":54,"line":55},[52,127886,127887],{"class":58},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[52,127889,127890],{"class":62},"=blogdetail",[52,127892,127893],{"class":622},"&sharetype",[52,127895,2099],{"class":160},[52,127897,127898],{"class":62},"blogdetail",[52,127900,127901],{"class":622},"&sharerId",[52,127903,2099],{"class":160},[52,127905,127906],{"class":62},"144728092",[52,127908,127909],{"class":622},"&sharerefer",[52,127911,2099],{"class":160},[52,127913,127914],{"class":62},"PC",[52,127916,127917],{"class":622},"&sharesource",[52,127919,2099],{"class":160},[52,127921,127922],{"class":62},"qq_69379513",[52,127924,127925],{"class":622},"&sharefrom",[52,127927,2099],{"class":160},[52,127929,127930],{"class":62},"from_link\n",[10,127932,127934],{"id":127933},"_2genesis-报错issue","2.Genesis 报错issue",[274,127936,127877],{},[19,127938,127939],{"className":26774,"code":127880,"language":26776,"meta":28,"style":28},[26,127940,127941],{"__ignoreMap":28},[52,127942,127943,127945,127947,127949,127951,127953,127955,127957,127959,127961,127963,127965,127967,127969,127971,127973,127975],{"class":54,"line":55},[52,127944,127887],{"class":58},[52,127946,127890],{"class":62},[52,127948,127893],{"class":622},[52,127950,2099],{"class":160},[52,127952,127898],{"class":62},[52,127954,127901],{"class":622},[52,127956,2099],{"class":160},[52,127958,127906],{"class":62},[52,127960,127909],{"class":622},[52,127962,2099],{"class":160},[52,127964,127914],{"class":62},[52,127966,127917],{"class":622},[52,127968,2099],{"class":160},[52,127970,127922],{"class":62},[52,127972,127925],{"class":622},[52,127974,2099],{"class":160},[52,127976,127930],{"class":62},[19,127978,127980],{"className":26774,"code":127979,"language":26776,"meta":28,"style":28},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[26,127981,127982],{"__ignoreMap":28},[52,127983,127984],{"class":54,"line":55},[52,127985,127979],{"class":58},[10,127987,127989],{"id":127988},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[274,127991,127992],{},"hello_robot.py",[19,127994,127996],{"className":33310,"code":127995,"language":33312,"meta":28,"style":28},"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",[26,127997,127998,128004,128019,128023,128035,128047,128051,128064,128068,128087,128097,128107,128121,128125,128129,128134,128138,128148,128155,128169,128176,128186,128191,128195,128213,128218,128222,128229],{"__ignoreMap":28},[52,127999,128000,128002],{"class":54,"line":55},[52,128001,33324],{"class":160},[52,128003,48237],{"class":622},[52,128005,128006,128009,128012,128014,128016],{"class":54,"line":69},[52,128007,128008],{"class":622},"os.environ[",[52,128010,128011],{"class":62},"'PYOPENGL_PLATFORM'",[52,128013,7402],{"class":622},[52,128015,2099],{"class":160},[52,128017,128018],{"class":62}," 'glx'\n",[52,128020,128021],{"class":54,"line":82},[52,128022,116],{"emptyLinePlaceholder":115},[52,128024,128025,128027,128030,128032],{"class":54,"line":97},[52,128026,33324],{"class":160},[52,128028,128029],{"class":622}," genesis ",[52,128031,34315],{"class":160},[52,128033,128034],{"class":622}," gs\n",[52,128036,128037,128039,128042,128044],{"class":54,"line":112},[52,128038,33669],{"class":160},[52,128040,128041],{"class":622}," pynput ",[52,128043,33324],{"class":160},[52,128045,128046],{"class":622}," keyboard\n",[52,128048,128049],{"class":54,"line":119},[52,128050,116],{"emptyLinePlaceholder":115},[52,128052,128053,128056,128059,128061],{"class":54,"line":130},[52,128054,128055],{"class":622},"gs.init(",[52,128057,128058],{"class":8172},"backend",[52,128060,2099],{"class":160},[52,128062,128063],{"class":622},"gs.gpu)\n",[52,128065,128066],{"class":54,"line":136},[52,128067,116],{"emptyLinePlaceholder":115},[52,128069,128070,128073,128075,128078,128081,128083,128085],{"class":54,"line":141},[52,128071,128072],{"class":622},"scene ",[52,128074,2099],{"class":160},[52,128076,128077],{"class":622}," gs.Scene(",[52,128079,128080],{"class":8172},"show_viewer",[52,128082,2099],{"class":160},[52,128084,34408],{"class":90},[52,128086,170],{"class":622},[52,128088,128089,128092,128094],{"class":54,"line":146},[52,128090,128091],{"class":622},"plane ",[52,128093,2099],{"class":160},[52,128095,128096],{"class":622}," scene.add_entity(gs.morphs.Plane())\n",[52,128098,128099,128102,128104],{"class":54,"line":152},[52,128100,128101],{"class":622},"franka ",[52,128103,2099],{"class":160},[52,128105,128106],{"class":622}," scene.add_entity(\n",[52,128108,128109,128112,128114,128116,128119],{"class":54,"line":157},[52,128110,128111],{"class":622},"    gs.morphs.MJCF(",[52,128113,48286],{"class":8172},[52,128115,2099],{"class":160},[52,128117,128118],{"class":62},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[52,128120,40979],{"class":622},[52,128122,128123],{"class":54,"line":173},[52,128124,170],{"class":622},[52,128126,128127],{"class":54,"line":178},[52,128128,116],{"emptyLinePlaceholder":115},[52,128130,128131],{"class":54,"line":184},[52,128132,128133],{"class":622},"scene.build()\n",[52,128135,128136],{"class":54,"line":189},[52,128137,116],{"emptyLinePlaceholder":115},[52,128139,128140,128142,128145],{"class":54,"line":201},[52,128141,34879],{"class":160},[52,128143,128144],{"class":58}," on_press",[52,128146,128147],{"class":622},"(key):\n",[52,128149,128150,128153],{"class":54,"line":206},[52,128151,128152],{"class":160},"    try",[52,128154,6698],{"class":622},[52,128156,128157,128159,128162,128164,128167],{"class":54,"line":224},[52,128158,5458],{"class":160},[52,128160,128161],{"class":622}," key.char ",[52,128163,5909],{"class":160},[52,128165,128166],{"class":62}," 'q'",[52,128168,6698],{"class":622},[52,128170,128171,128173],{"class":54,"line":229},[52,128172,18688],{"class":160},[52,128174,128175],{"class":90}," False\n",[52,128177,128178,128181,128184],{"class":54,"line":241},[52,128179,128180],{"class":160},"    except",[52,128182,128183],{"class":90}," AttributeError",[52,128185,6698],{"class":622},[52,128187,128188],{"class":54,"line":246},[52,128189,128190],{"class":160},"        pass\n",[52,128192,128193],{"class":54,"line":252},[52,128194,116],{"emptyLinePlaceholder":115},[52,128196,128197,128200,128202,128205,128208,128210],{"class":54,"line":257},[52,128198,128199],{"class":622},"listener ",[52,128201,2099],{"class":160},[52,128203,128204],{"class":622}," keyboard.Listener(",[52,128206,128207],{"class":8172},"on_press",[52,128209,2099],{"class":160},[52,128211,128212],{"class":622},"on_press)\n",[52,128214,128215],{"class":54,"line":266},[52,128216,128217],{"class":622},"listener.start()\n",[52,128219,128220],{"class":54,"line":4722},[52,128221,116],{"emptyLinePlaceholder":115},[52,128223,128224,128226],{"class":54,"line":4727},[52,128225,111583],{"class":160},[52,128227,128228],{"class":622}," listener.running:\n",[52,128230,128231],{"class":54,"line":4741},[52,128232,128233],{"class":622},"    scene.step()\n",[274,128235,128236],{},[280,128237],{"alt":28,"src":128238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[3015,128240,128241],{},"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":28,"searchDepth":69,"depth":69,"links":128243},[],{"category":26331},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127848,"description":127853},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128250,"title":128251,"body":128252,"description":3046,"extension":3047,"meta":128267,"navigation":115,"path":128268,"seo":128269,"stem":128270,"__hash__":128271},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128253,"toc":128264},[128254,128257,128261],[10,128255,128251],{"id":128256},"_1-基础知识",[14,128258,128260],{"id":128259},"_11-js的组成","1.1 js的组成",[274,128262,128263],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":28,"searchDepth":69,"depth":69,"links":128265},[128266],{"id":128259,"depth":69,"text":128260},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128251,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128273,"title":128274,"body":128275,"description":3046,"extension":3047,"meta":128414,"navigation":115,"path":128415,"seo":128416,"stem":128417,"__hash__":128418},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128276,"toc":128402},[128277,128280,128284,128287,128291,128301,128305,128308,128311,128314,128318,128325,128331,128335,128341,128352,128356,128359,128363,128366,128370,128373,128377,128380,128384,128387,128390,128393,128396,128399],[10,128278,128274],{"id":128279},"_2-vscode必备内容",[14,128281,128283],{"id":128282},"_21-标签分类","2.1 标签分类",[274,128285,128286],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128288,128290],{"id":128289},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[274,128292,128293,128294,128296,128297,128300],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[26,128295,161],{}," 然后按 ",[26,128298,128299],{},"Tab","，快速自动生成基本结构。",[14,128302,128304],{"id":128303},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[274,128306,128307],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[274,128309,128310],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[274,128312,128313],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128315,128317],{"id":128316},"_24-视图缩放","2.4 视图缩放",[274,128319,128320,128321,128324],{},"缩放视图 ",[26,128322,128323],{},"ctrl+"," 可实现代码增大。",[274,128326,128327,128330],{},[26,128328,128329],{},"ctrl-"," 可实现代码减小。",[14,128332,128334],{"id":128333},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[274,128336,128337,128338,31319],{},"VSCode 新建文件快捷键为 ",[26,128339,128340],{},"ctrl+N",[274,128342,128343,128344,128347,128348,128351],{},"保存快捷键为 ",[26,128345,128346],{},"ctrl+S","，将文本保存为 ",[26,128349,128350],{},".html"," 文件。",[14,128353,128355],{"id":128354},"_26-auto-rename-tag","2.6 Auto Rename Tag",[274,128357,128358],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128360,128362],{"id":128361},"_27-vscode-icons","2.7 vscode-icons",[274,128364,128365],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128367,128369],{"id":128368},"_28-easy-less","2.8 Easy LESS",[274,128371,128372],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128374,128376],{"id":128375},"_29-会了吧插件","2.9 会了吧插件",[274,128378,128379],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128381,128383],{"id":128382},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[274,128385,128386],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[274,128388,128389],{},"②选定多个相同的单词:ctrl+D",[274,128391,128392],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[274,128394,128395],{},"④全局替换某些单词:ctrl+h",[274,128397,128398],{},"⑤快速定位到某一行:ctrl+g",[274,128400,128401],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":28,"searchDepth":69,"depth":69,"links":128403},[128404,128405,128406,128407,128408,128409,128410,128411,128412,128413],{"id":128282,"depth":69,"text":128283},{"id":128289,"depth":69,"text":128290},{"id":128303,"depth":69,"text":128304},{"id":128316,"depth":69,"text":128317},{"id":128333,"depth":69,"text":128334},{"id":128354,"depth":69,"text":128355},{"id":128361,"depth":69,"text":128362},{"id":128368,"depth":69,"text":128369},{"id":128375,"depth":69,"text":128376},{"id":128382,"depth":69,"text":128383},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128274,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128420,"title":128421,"body":128422,"description":3046,"extension":3047,"meta":128581,"navigation":115,"path":128582,"seo":128583,"stem":128584,"__hash__":128585},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128423,"toc":128573},[128424,128427,128431,128441,128447,128453,128457,128466,128470,128475,128478,128481,128485,128488,128498,128507,128516,128525,128535,128542,128547,128552,128565],[10,128425,128421],{"id":128426},"_3-html文本与容器标签",[14,128428,128430],{"id":128429},"_31-标题标签","3.1 标题标签",[274,128432,128433,128436,128437,128440],{},[26,128434,128435],{},"\u003Ch1>","我是一级标签",[26,128438,128439],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[274,128442,128443,128436,128445],{},[26,128444,128435],{},[26,128446,128439],{},[274,128448,125703,128449,128452],{},[26,128450,128451],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128454,128456],{"id":128455},"_32-段落标签","3.2 段落标签",[274,128458,128459,128462,128463],{},[26,128460,128461],{},"\u003Cp>","....",[26,128464,128465],{},"\u003C\u002Fp>",[14,128467,128469],{"id":128468},"_33-换行标签","3.3 换行标签",[274,128471,128472],{},[26,128473,128474],{},"\u003Cbr \u002F>",[274,128476,128477],{},"具有强制换行的作用",[274,128479,128480],{},"单标签",[14,128482,128484],{"id":128483},"_34-文本格式化标签","3.4 文本格式化标签",[274,128486,128487],{},"提供粗体、斜体和下划线等效果",[274,128489,128490,128491,85467,128494,128497],{},"加粗：",[26,128492,128493],{},"\u003Cstrong>...\u003C\u002Fstrong>",[26,128495,128496],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[274,128499,128500,128501,85467,128504,128497],{},"斜体：",[26,128502,128503],{},"\u003Cem>...\u003C\u002Fem>",[26,128505,128506],{},"\u003Ci>...\u003C\u002Fi>",[274,128508,128509,128510,85467,128513,128497],{},"删除线：",[26,128511,128512],{},"\u003Cdel>...\u003C\u002Fdel>",[26,128514,128515],{},"\u003Cs>...\u003C\u002Fs>",[274,128517,128518,128519,85467,128522,128497],{},"下划线：",[26,128520,128521],{},"\u003Cins>...\u003C\u002Fins>",[26,128523,128524],{},"\u003Cu>...\u003C\u002Fu>",[14,128526,128528,128529,2509,128532,105613],{"id":128527},"_35-div和span标签","3.5 ",[26,128530,128531],{},"\u003Cdiv>",[26,128533,128534],{},"\u003Cspan>",[274,128536,128537,103940,128539,128541],{},[26,128538,128531],{},[26,128540,128534],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[274,128543,128544],{},[26,128545,128546],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[274,128548,128549],{},[26,128550,128551],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[274,128553,128554,128555,128557,128558,128560,128561,128564],{},"两者特点：①",[26,128556,128531],{}," 标签用来布局，但一行通常只放一个 ",[26,128559,128531],{},"。可以理解为一个大盒子，独占一行，在 ",[26,128562,128563],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[274,128566,80177,128567,128569,128570,128572],{},[26,128568,128534],{}," 标签也可用于布局，一行可以放多个 ",[26,128571,128534],{},"，可理解为小盒子。",{"title":28,"searchDepth":69,"depth":69,"links":128574},[128575,128576,128577,128578,128579],{"id":128429,"depth":69,"text":128430},{"id":128455,"depth":69,"text":128456},{"id":128468,"depth":69,"text":128469},{"id":128483,"depth":69,"text":128484},{"id":128527,"depth":69,"text":128580},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128421,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128587,"title":128588,"body":128589,"description":3046,"extension":3047,"meta":128786,"navigation":115,"path":128787,"seo":128788,"stem":128789,"__hash__":128790},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128590,"toc":128778},[128591,128594,128598,128601,128607,128614,128620,128626,128629,128632,128635,128638,128641,128644,128647,128651,128654,128657,128660,128666,128672,128678,128685,128689,128695,128701,128704,128707,128713,128719,128725,128728,128731,128735,128738,128748,128754,128758,128767,128771,128774],[10,128592,128588],{"id":128593},"_4-html图像与链接",[14,128595,128597],{"id":128596},"_41-图像标签","4.1 图像标签",[274,128599,128600],{},"（1）标签",[274,128602,128603,128606],{},[26,128604,128605],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[274,128608,128609,128610,128613],{},"src是",[26,128611,128612],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[274,128615,128616,128617],{},"alt:文本，替换文本。图像不能显示的文字 ",[26,128618,128619],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[274,128621,128622,128623],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[26,128624,128625],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[274,128627,128628],{},"width:像素，设置图像的宽度",[274,128630,128631],{},"height:像素，设置图像的高度",[274,128633,128634],{},"border：像素，设置图像的边框粗细",[274,128636,128637],{},"（2）图像标签属性的注意点：",[274,128639,128640],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[274,128642,128643],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[274,128645,128646],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128648,128650],{"id":128649},"_42-路径注意要点","4.2 路径注意要点：",[274,128652,128653],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[274,128655,128656],{},"（2）根目录：就是打开文件夹的第一层根目录",[274,128658,128659],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[274,128661,128662,128663],{},"①同一级路径：图像文件位于HTML文件同一级，如",[26,128664,128665],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[274,128667,128668,128669],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[26,128670,128671],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[274,128673,128674,128675],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[26,128676,128677],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[274,128679,128680,128681,3364],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[300,128682,128683],{"href":128683,"rel":128684},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[304],[14,128686,128688],{"id":128687},"_43-超链接标签","4.3 超链接标签",[274,128690,128691,128694],{},[26,128692,128693],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[274,128696,128697,128698],{},"①语法格式：",[26,128699,128700],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[274,128702,128703],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[274,128705,128706],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[274,128708,128709,128710],{},"③链接分类：外部链接：",[26,128711,128712],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[274,128714,128715,128716],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[26,128717,128718],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[274,128720,128721,128722],{},"空链接：如果当时没有确定链接目标时，",[26,128723,128724],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[274,128726,128727],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[274,128729,128730],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128732,128734],{"id":128733},"_44-锚点链接","4.4 锚点链接",[274,128736,128737],{},"点我们点击链接，可以快速定位到页面中的某个位置",[274,128739,128740,128741,128744,128745],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[26,128742,128743],{},"\u003Ca href=\"#two\">","第二级",[26,128746,128747],{},"\u003C\u002Fa>",[274,128749,128750,128751],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[26,128752,128753],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128755,128757],{"id":128756},"_45-注释标签","4.5 注释标签",[274,128759,128760,128763,128764],{},[26,128761,128762],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[26,128765,128766],{},"ctrl+\u002F",[14,128768,128770],{"id":128769},"_46-特殊字符","4.6 特殊字符",[274,128772,128773],{},"可以实现添加多个空格",[280,128775],{"style":128776,"src":128777},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":28,"searchDepth":69,"depth":69,"links":128779},[128780,128781,128782,128783,128784,128785],{"id":128596,"depth":69,"text":128597},{"id":128649,"depth":69,"text":128650},{"id":128687,"depth":69,"text":128688},{"id":128733,"depth":69,"text":128734},{"id":128756,"depth":69,"text":128757},{"id":128769,"depth":69,"text":128770},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128588,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128792,"title":128793,"body":128794,"description":3046,"extension":3047,"meta":129087,"navigation":115,"path":129088,"seo":129089,"stem":129090,"__hash__":129091},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128795,"toc":129078},[128796,128799,128803,128806,128809,128812,128815,128818,128821,128824,128827,128830,128850,128856,128860,128863,128866,128869,128872,128875,128878,128882,128885,128888,128891,128894,128907,128912,128915,128918,128933,128936,128939,128942,128945,128948,128952,128955,128962,128965,128968,128971,128974,128977,128983,128986,128989,128995,128998,129001,129004,129010,129013,129016,129030,129037,129040,129043,129050,129059,129062,129065,129068,129072,129075],[10,128797,128793],{"id":128798},"_5-html表格列表与表单",[14,128800,128802],{"id":128801},"_51-表格标签","5.1 表格标签",[274,128804,128805],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[274,128807,128808],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[274,128810,128811],{},"②表格基本语法：",[280,128813],{"style":128776,"src":128814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[274,128816,128817],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[280,128819],{"style":128776,"src":128820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[274,128822,128823],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[280,128825],{"style":128776,"src":128826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[274,128828,128829],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[274,128831,128832,128835,128836,128838,128839,128842,128843,128845,128846,128849],{},[26,128833,128834],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[26,128837,128834],{},"内部必须拥有",[26,128840,128841],{},"\u003Ctr>","标签，一般位于第一行，",[26,128844,128834],{},"比",[26,128847,128848],{},"\u003Cth>","范围广",[274,128851,128852,128855],{},[26,128853,128854],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128857,128859],{"id":128858},"_52-合并单元格","5.2 合并单元格",[274,128861,128862],{},"（1）合并单元格方式：",[274,128864,128865],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[274,128867,128868],{},"②跨列合并：colspan=\"合并单元格的个数\"",[274,128870,128871],{},"（2）目标单元格：",[274,128873,128874],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[274,128876,128877],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128879,128881],{"id":128880},"_53-列表标签","5.3 列表标签",[274,128883,128884],{},"（1）分类：无序列表、有序列表、自定义列表",[274,128886,128887],{},"①无序列表：",[280,128889],{"style":128776,"src":128890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[274,128892,128893],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[274,128895,128896,128899,128900,128903,128904,128906],{},[26,128897,128898],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[26,128901,128902],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[26,128905,128898],{},"中输入其他标签或文字是不对的",[274,128908,128909,128911],{},[26,128910,128902],{},"之间相当于一个容器，可以容纳所有元素",[274,128913,128914],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[274,128916,128917],{},"在css中去除前边的小圆点采用如下代码:",[19,128919,128923],{"className":128920,"code":128921,"language":128922,"meta":28,"style":28},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[26,128924,128925],{"__ignoreMap":28},[52,128926,128927,128930],{"class":54,"line":55},[52,128928,128929],{"class":54231},"list-style",[52,128931,128932],{"class":622},": none;\n",[274,128934,128935],{},"②有序列表：",[280,128937],{"style":128776,"src":128938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[274,128940,128941],{},"③自定义列表：",[280,128943],{"style":128776,"src":128944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[280,128946],{"style":128776,"src":128947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128949,128951],{"id":128950},"_54-表单标签","5.4 表单标签",[274,128953,128954],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[274,128956,128957,128958,128961],{},"（1）表单域：包含单元素的区域，",[26,128959,128960],{},"\u003Cform>","标签可以实现信息的收集和传递。",[280,128963],{"style":128776,"src":128964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[274,128966,128967],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[274,128969,128970],{},"表单元素提交必须有name属性",[274,128972,128973],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[274,128975,128976],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[274,128978,80154,128979,128982],{},[26,128980,128981],{},"\u003Cinput>","输入表单元素",[280,128984],{"style":128776,"src":128985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[280,128987],{"style":128776,"src":128988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[274,128990,128991,128992],{},"单选按钮：",[26,128993,128994],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[280,128996],{"style":128776,"src":128997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[274,128999,129000],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[280,129002],{"style":128776,"src":129003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[274,129005,129006,129009],{},[538,129007,129008],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[274,129011,129012],{},"②select下拉表单元素：可以节约页面控件",[280,129014],{"style":128776,"src":129015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[274,129017,129018,16751,129020,129023,129024,129026,129027,129029],{},[538,129019,3149],{},[26,129021,129022],{},"\u003Cselect>","中至少包含一对",[26,129025,105634],{},"；在",[26,129028,105634],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[274,129031,129032,129033,129036],{},"③",[26,129034,129035],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[280,129038],{"style":128776,"src":129039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[274,129041,129042],{},"3行20列",[14,129044,129046,129047,105613],{"id":129045},"_55-lable标签","5.5 ",[26,129048,129049],{},"\u003Clable>",[274,129051,129052,129053,129055,129056,129058],{},"它不是表单标签，但常常与表单标签搭配使用，",[26,129054,129049],{},"标签用于绑定一个表单标签，当点击",[26,129057,129049],{},"标签内的文本",[274,129060,129061],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[280,129063],{"style":128776,"src":129064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[280,129066],{"style":128776,"src":129067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,129069,129071],{"id":129070},"_56-实例","5.6 实例",[280,129073],{"style":128776,"src":129074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[3015,129076,129077],{},"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":28,"searchDepth":69,"depth":69,"links":129079},[129080,129081,129082,129083,129084,129086],{"id":128801,"depth":69,"text":128802},{"id":128858,"depth":69,"text":128859},{"id":128880,"depth":69,"text":128881},{"id":128950,"depth":69,"text":128951},{"id":129045,"depth":69,"text":129085},"5.5 \u003Clable>标签",{"id":129070,"depth":69,"text":129071},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128793,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":129093,"title":129094,"body":129095,"description":3046,"extension":3047,"meta":129644,"navigation":115,"path":129645,"seo":129646,"stem":129647,"__hash__":129648},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":129096,"toc":129619},[129097,129100,129104,129107,129110,129114,129117,129120,129123,129126,129129,129132,129135,129139,129142,129146,129149,129152,129155,129159,129162,129165,129168,129174,129177,129180,129183,129186,129189,129192,129195,129228,129232,129235,129238,129241,129245,129248,129251,129254,129257,129260,129264,129267,129270,129273,129277,129280,129284,129287,129291,129294,129299,129303,129306,129310,129313,129316,129319,129322,129349,129352,129356,129359,129362,129367,129370,129373,129377,129380,129385,129388,129391,129394,129398,129401,129404,129407,129411,129414,129417,129420,129424,129428,129431,129471,129474,129478,129485,129488,129492,129495,129541,129545,129548,129551,129554,129582,129586,129589,129616],[10,129098,129094],{"id":129099},"_6-css语法与文本样式",[14,129101,129103],{"id":129102},"_61-css语法规范","6.1 css语法规范",[274,129105,129106],{},"由两部分组成，选择器及一条或多条声明",[280,129108],{"style":128776,"src":129109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[274,129111,129112],{},[538,129113,3149],{},[274,129115,129116],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[274,129118,129119],{},"②属性与属性值以“键值对”的形式出现",[274,129121,129122],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[274,129124,129125],{},"④属性和属性值之间用英文“;”分开",[280,129127],{"style":128776,"src":129128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[280,129130],{"style":128776,"src":129131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[280,129133],{"style":128776,"src":129134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,129136,129138],{"id":129137},"_62-css选择器","6.2 css选择器",[274,129140,129141],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[30,129143,129145],{"id":129144},"_621-标签选择器","6.2.1 标签选择器",[274,129147,129148],{},"①优点：能快速为页面中同类型的标签统一设置样式",[274,129150,129151],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[280,129153],{"style":128776,"src":129154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[30,129156,129158],{"id":129157},"_622-类选择器","6.2.2 类选择器",[274,129160,129161],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[274,129163,129164],{},"②样例",[280,129166],{"style":128776,"src":129167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[274,129169,129170,129171,129173],{},"③ ",[538,129172,129008],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[274,129175,129176],{},"可以理解为给这个标签起了个名字，来表示；",[274,129178,129179],{},"长名称或词组可以使用横线来为选择器命名；",[274,129181,129182],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[274,129184,129185],{},"命名要有意义；",[280,129187],{"style":128776,"src":129188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[274,129190,129191],{},"类选择器也可以指定特殊的元素p.center{}",[274,129193,129194],{},"p.center和.center都对",[19,129196,129198],{"className":128920,"code":129197,"language":128922,"meta":28,"style":28},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[26,129199,129200,129205,129214,129224],{"__ignoreMap":28},[52,129201,129202],{"class":54,"line":55},[52,129203,129204],{"class":332},"\u002F* 类选择器指定特殊元素 *\u002F\n",[52,129206,129207,129209,129212],{"class":54,"line":69},[52,129208,274],{"class":54231},[52,129210,129211],{"class":58},".center",[52,129213,18528],{"class":622},[52,129215,129216,129218,129220,129222],{"class":54,"line":82},[52,129217,73454],{"class":90},[52,129219,54368],{"class":622},[52,129221,54523],{"class":90},[52,129223,4272],{"class":622},[52,129225,129226],{"class":54,"line":97},[52,129227,4543],{"class":622},[30,129229,129231],{"id":129230},"_623-多类名使用","6.2.3 多类名使用",[274,129233,129234],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[280,129236],{"style":128776,"src":129237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[274,129239,129240],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[30,129242,129244],{"id":129243},"_624-id选择器","6.2.4 id选择器",[274,129246,129247],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[274,129249,129250],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[280,129252],{"style":128776,"src":129253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[274,129255,129256],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[274,129258,129259],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[30,129261,129263],{"id":129262},"_625-通配符选择器","6.2.5 通配符选择器",[274,129265,129266],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[274,129268,129269],{},"* {",[274,129271,129272],{},"color=\"red\"}",[30,129274,129276],{"id":129275},"_626-总结","6.2.6 总结",[280,129278],{"style":128776,"src":129279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129281,129283],{"id":129282},"_63-css字体属性","6.3 css字体属性",[274,129285,129286],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[30,129288,129290],{"id":129289},"_631-字体系列","6.3.1 字体系列",[274,129292,129293],{},"font-family: '宋体';",[274,129295,129296,129298],{},[538,129297,3149],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[30,129300,129302],{"id":129301},"_632-字体大小","6.3.2 字体大小",[274,129304,129305],{},"font-size: 20px",[274,129307,129308,29412],{},[538,129309,129008],{},[274,129311,129312],{},"①px（像素）大小是网页的最常用单位",[274,129314,129315],{},"②谷歌浏览器默认为16px",[274,129317,129318],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[274,129320,129321],{},"④可以给body指定整个页面的大小：会自动引用",[19,129323,129325],{"className":128920,"code":129324,"language":128922,"meta":28,"style":28},"body {\n  font-size: 16px;\n}\n",[26,129326,129327,129333,129345],{"__ignoreMap":28},[52,129328,129329,129331],{"class":54,"line":55},[52,129330,54731],{"class":54231},[52,129332,18528],{"class":622},[52,129334,129335,129337,129339,129341,129343],{"class":54,"line":69},[52,129336,73554],{"class":90},[52,129338,54368],{"class":622},[52,129340,3713],{"class":90},[52,129342,54423],{"class":160},[52,129344,4272],{"class":622},[52,129346,129347],{"class":54,"line":82},[52,129348,4543],{"class":622},[274,129350,129351],{},"⑤标题标签比较特殊，需要单独指定大小",[30,129353,129355],{"id":129354},"_633-字体粗细","6.3.3 字体粗细",[274,129357,129358],{},"font-weight: bold;",[274,129360,129361],{},"font-weight: 100；",[274,129363,129364,129366],{},[538,129365,3149],{}," ①粗体文字变细：尽量别用normal，多用数字",[274,129368,129369],{},"font-weight= 400;",[274,129371,129372],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[30,129374,129376],{"id":129375},"_634-文字样式","6.3.4 文字样式",[274,129378,129379],{},"font-style: normal；",[274,129381,129382,29412],{},[538,129383,129384],{},"属性值",[274,129386,129387],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[274,129389,129390],{},"②italic：浏览器会显示斜体的字体样式",[280,129392],{"style":128776,"src":129393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[30,129395,129397],{"id":129396},"_635-字体符合属性","6.3.5 字体符合属性",[280,129399],{"style":128776,"src":129400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[280,129402],{"style":128776,"src":129403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[274,129405,129406],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[274,129408,129409,29412],{},[538,129410,129008],{},[274,129412,129413],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[274,129415,129416],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[274,129418,129419],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129421,129423],{"id":129422},"_64-css-test文本属性","6.4 css test文本属性",[30,129425,129427],{"id":129426},"_641-文本颜色","6.4.1 文本颜色",[274,129429,129430],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[19,129432,129434],{"className":128920,"code":129433,"language":128922,"meta":28,"style":28},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[26,129435,129436,129441,129447,129457,129462,129467],{"__ignoreMap":28},[52,129437,129438],{"class":54,"line":55},[52,129439,129440],{"class":332},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[52,129442,129443,129445],{"class":54,"line":69},[52,129444,274],{"class":54231},[52,129446,18528],{"class":622},[52,129448,129449,129451,129453,129455],{"class":54,"line":82},[52,129450,73833],{"class":90},[52,129452,54368],{"class":622},[52,129454,60351],{"class":90},[52,129456,4272],{"class":622},[52,129458,129459],{"class":54,"line":97},[52,129460,129461],{"class":332},"  \u002F* color: #ff0000; *\u002F\n",[52,129463,129464],{"class":54,"line":112},[52,129465,129466],{"class":332},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[52,129468,129469],{"class":54,"line":119},[52,129470,4543],{"class":622},[280,129472],{"style":128776,"src":129473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[30,129475,129477],{"id":129476},"_642-对齐文本","6.4.2 对齐文本",[274,129479,129480,129481,129484],{},"text-align属于用于设置元素内文本内容的 ",[538,129482,129483],{},"水平对齐"," 方式",[274,129486,129487],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[30,129489,129491],{"id":129490},"_643-装饰文本","6.4.3 装饰文本",[274,129493,129494],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[19,129496,129498],{"className":128920,"code":129497,"language":128922,"meta":28,"style":28},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[26,129499,129500,129506,129516,129520,129526,129537],{"__ignoreMap":28},[52,129501,129502,129504],{"class":54,"line":55},[52,129503,300],{"class":54231},[52,129505,18528],{"class":622},[52,129507,129508,129510,129512,129514],{"class":54,"line":69},[52,129509,73430],{"class":90},[52,129511,54368],{"class":622},[52,129513,57667],{"class":90},[52,129515,4272],{"class":622},[52,129517,129518],{"class":54,"line":82},[52,129519,4543],{"class":622},[52,129521,129522,129524],{"class":54,"line":97},[52,129523,274],{"class":54231},[52,129525,18528],{"class":622},[52,129527,129528,129530,129532,129535],{"class":54,"line":112},[52,129529,73430],{"class":90},[52,129531,54368],{"class":622},[52,129533,129534],{"class":90},"underline",[52,129536,4272],{"class":622},[52,129538,129539],{"class":54,"line":119},[52,129540,4543],{"class":622},[30,129542,129544],{"id":129543},"_644-文本缩进","6.4.4 文本缩进",[274,129546,129547],{},"实现文本的第一行首行缩进自己指定的距离",[274,129549,129550],{},"20px往右边走；-20px往左边走",[274,129552,129553],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[19,129555,129557],{"className":128920,"code":129556,"language":128922,"meta":28,"style":28},"p {\n  text-indent: 2em;\n}\n",[26,129558,129559,129565,129578],{"__ignoreMap":28},[52,129560,129561,129563],{"class":54,"line":55},[52,129562,274],{"class":54231},[52,129564,18528],{"class":622},[52,129566,129567,129570,129572,129574,129576],{"class":54,"line":69},[52,129568,129569],{"class":90},"  text-indent",[52,129571,54368],{"class":622},[52,129573,3194],{"class":90},[52,129575,1605],{"class":160},[52,129577,4272],{"class":622},[52,129579,129580],{"class":54,"line":82},[52,129581,4543],{"class":622},[30,129583,129585],{"id":129584},"_645-行间距","6.4.5 行间距",[274,129587,129588],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[19,129590,129592],{"className":128920,"code":129591,"language":128922,"meta":28,"style":28},"p {\n  line-height: 1.6;\n}\n",[26,129593,129594,129600,129612],{"__ignoreMap":28},[52,129595,129596,129598],{"class":54,"line":55},[52,129597,274],{"class":54231},[52,129599,18528],{"class":622},[52,129601,129602,129605,129607,129610],{"class":54,"line":69},[52,129603,129604],{"class":90},"  line-height",[52,129606,54368],{"class":622},[52,129608,129609],{"class":90},"1.6",[52,129611,4272],{"class":622},[52,129613,129614],{"class":54,"line":82},[52,129615,4543],{"class":622},[3015,129617,129618],{},"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":28,"searchDepth":69,"depth":69,"links":129620},[129621,129622,129630,129637],{"id":129102,"depth":69,"text":129103},{"id":129137,"depth":69,"text":129138,"children":129623},[129624,129625,129626,129627,129628,129629],{"id":129144,"depth":82,"text":129145},{"id":129157,"depth":82,"text":129158},{"id":129230,"depth":82,"text":129231},{"id":129243,"depth":82,"text":129244},{"id":129262,"depth":82,"text":129263},{"id":129275,"depth":82,"text":129276},{"id":129282,"depth":69,"text":129283,"children":129631},[129632,129633,129634,129635,129636],{"id":129289,"depth":82,"text":129290},{"id":129301,"depth":82,"text":129302},{"id":129354,"depth":82,"text":129355},{"id":129375,"depth":82,"text":129376},{"id":129396,"depth":82,"text":129397},{"id":129422,"depth":69,"text":129423,"children":129638},[129639,129640,129641,129642,129643],{"id":129426,"depth":82,"text":129427},{"id":129476,"depth":82,"text":129477},{"id":129490,"depth":82,"text":129491},{"id":129543,"depth":82,"text":129544},{"id":129584,"depth":82,"text":129585},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":129094,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129650,"title":129651,"body":129652,"description":3046,"extension":3047,"meta":130301,"navigation":115,"path":130302,"seo":130303,"stem":130304,"__hash__":130305},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129653,"toc":130282},[129654,129657,129661,129665,129725,129729,129739,129742,129745,129749,129774,129778,129781,129784,129787,129790,129793,129797,129800,129803,129845,129848,129874,129880,129883,129887,129891,129897,129900,129903,129906,129909,129912,129915,129960,129964,129967,129970,129974,129978,130007,130010,130015,130018,130021,130024,130027,130031,130035,130038,130040,130043,130047,130050,130054,130057,130060,130063,130067,130071,130077,130087,130090,130093,130096,130099,130102,130225,130233,130241,130279],[10,129655,129651],{"id":129656},"_7-css引入方式与选择器进阶",[14,129658,129660],{"id":129659},"_71-css引入方式","7.1 css引入方式",[30,129662,129664],{"id":129663},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[19,129666,129670],{"className":129667,"code":129668,"language":129669,"meta":28,"style":28},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[26,129671,129672,129680,129687,129699,129712,129717],{"__ignoreMap":28},[52,129673,129674,129676,129678],{"class":54,"line":55},[52,129675,4022],{"class":622},[52,129677,3015],{"class":54231},[52,129679,54238],{"class":622},[52,129681,129682,129685],{"class":54,"line":69},[52,129683,129684],{"class":54231},"  h1",[52,129686,18528],{"class":622},[52,129688,129689,129692,129694,129697],{"class":54,"line":82},[52,129690,129691],{"class":90},"    color",[52,129693,54368],{"class":622},[52,129695,129696],{"class":90},"blue",[52,129698,4272],{"class":622},[52,129700,129701,129704,129706,129708,129710],{"class":54,"line":97},[52,129702,129703],{"class":90},"    font-size",[52,129705,54368],{"class":622},[52,129707,3912],{"class":90},[52,129709,54423],{"class":160},[52,129711,4272],{"class":622},[52,129713,129714],{"class":54,"line":112},[52,129715,129716],{"class":622},"  }\n",[52,129718,129719,129721,129723],{"class":54,"line":119},[52,129720,54716],{"class":622},[52,129722,3015],{"class":54231},[52,129724,54238],{"class":622},[274,129726,129727,29412],{},[538,129728,129008],{},[274,129730,80154,129731,129734,129735,129738],{},[26,129732,129733],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[26,129736,129737],{},"\u003Chead>","标签中",[274,129740,129741],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[274,129743,129744],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[30,129746,129748],{"id":129747},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[19,129750,129752],{"className":129667,"code":129751,"language":129669,"meta":28,"style":28},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[26,129753,129754],{"__ignoreMap":28},[52,129755,129756,129758,129760,129762,129764,129767,129770,129772],{"class":54,"line":55},[52,129757,4022],{"class":622},[52,129759,274],{"class":54231},[52,129761,65556],{"class":58},[52,129763,2099],{"class":622},[52,129765,129766],{"class":62},"\"color: red; font-size: 16px;\"",[52,129768,129769],{"class":622},">这是一个段落\u003C\u002F",[52,129771,274],{"class":54231},[52,129773,54238],{"class":622},[274,129775,129776,29412],{},[538,129777,129008],{},[274,129779,129780],{},"①style其实就是标签的属性",[274,129782,129783],{},"②在双引号中间，写法要符合css规范",[274,129785,129786],{},"③可以控制当前的标签设置样式",[274,129788,129789],{},"④书写繁琐，简单时才用",[274,129791,129792],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[30,129794,129796],{"id":129795},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[274,129798,129799],{},"使用最多，单独建一个css文件，然后html引用",[274,129801,129802],{},"①css文件部分： style.css",[19,129804,129806],{"className":128920,"code":129805,"language":128922,"meta":28,"style":28},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[26,129807,129808,129813,129819,129829,129841],{"__ignoreMap":28},[52,129809,129810],{"class":54,"line":55},[52,129811,129812],{"class":332},"\u002F* style.css *\u002F\n",[52,129814,129815,129817],{"class":54,"line":69},[52,129816,10],{"class":54231},[52,129818,18528],{"class":622},[52,129820,129821,129823,129825,129827],{"class":54,"line":82},[52,129822,73833],{"class":90},[52,129824,54368],{"class":622},[52,129826,129696],{"class":90},[52,129828,4272],{"class":622},[52,129830,129831,129833,129835,129837,129839],{"class":54,"line":97},[52,129832,73554],{"class":90},[52,129834,54368],{"class":622},[52,129836,3912],{"class":90},[52,129838,54423],{"class":160},[52,129840,4272],{"class":622},[52,129842,129843],{"class":54,"line":112},[52,129844,4543],{"class":622},[274,129846,129847],{},"②html部分",[19,129849,129851],{"className":129667,"code":129850,"language":129669,"meta":28,"style":28},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[26,129852,129853],{"__ignoreMap":28},[52,129854,129855,129857,129859,129861,129863,129865,129867,129869,129872],{"class":54,"line":55},[52,129856,4022],{"class":622},[52,129858,71934],{"class":54231},[52,129860,71937],{"class":58},[52,129862,2099],{"class":622},[52,129864,71942],{"class":62},[52,129866,63987],{"class":58},[52,129868,2099],{"class":622},[52,129870,129871],{"class":62},"\"style.css\"",[52,129873,54238],{"class":622},[274,129875,129876,129879],{},[26,129877,129878],{},"\u003Chr>","水平线标签（但是不常用！）",[274,129881,129882],{},"ctrl+0回到页面原来大小",[14,129884,129886],{"id":129885},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[30,129888,129890],{"id":129889},"_721-快速生成html","7.2.1 快速生成html",[274,129892,129893,129894],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[26,129895,129896],{},"\u003Cdiv>``\u003C\u002Fdiv>",[274,129898,129899],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[274,129901,129902],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[274,129904,129905],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[274,129907,129908],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[274,129910,129911],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[274,129913,129914],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[19,129916,129918],{"className":129667,"code":129917,"language":129669,"meta":28,"style":28},"\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",[26,129919,129920,129925,129930,129935,129940,129945,129950,129955],{"__ignoreMap":28},[52,129921,129922],{"class":54,"line":55},[52,129923,129924],{"class":332},"\u003C!-- Emmet 语法示例 -->\n",[52,129926,129927],{"class":54,"line":69},[52,129928,129929],{"class":332},"\u003C!-- div*3        → 生成3个div -->\n",[52,129931,129932],{"class":54,"line":82},[52,129933,129934],{"class":332},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[52,129936,129937],{"class":54,"line":97},[52,129938,129939],{"class":332},"\u003C!-- div+p        → 兄弟div和p -->\n",[52,129941,129942],{"class":54,"line":112},[52,129943,129944],{"class":332},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[52,129946,129947],{"class":54,"line":119},[52,129948,129949],{"class":332},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[52,129951,129952],{"class":54,"line":130},[52,129953,129954],{"class":332},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[52,129956,129957],{"class":54,"line":136},[52,129958,129959],{"class":332},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[30,129961,129963],{"id":129962},"_722-快速生成css","7.2.2 快速生成css",[274,129965,129966],{},"简写开头",[274,129968,129969],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129971,129973],{"id":129972},"_73-css复合选择器","7.3 css复合选择器",[30,129975,129977],{"id":129976},"_731-后代选择器","7.3.1 后代选择器",[19,129979,129981],{"className":128920,"code":129980,"language":128922,"meta":28,"style":28},".parent .child {\n  color: blue;\n}\n",[26,129982,129983,129993,130003],{"__ignoreMap":28},[52,129984,129985,129988,129991],{"class":54,"line":55},[52,129986,129987],{"class":58},".parent",[52,129989,129990],{"class":58}," .child",[52,129992,18528],{"class":622},[52,129994,129995,129997,129999,130001],{"class":54,"line":69},[52,129996,73833],{"class":90},[52,129998,54368],{"class":622},[52,130000,129696],{"class":90},[52,130002,4272],{"class":622},[52,130004,130005],{"class":54,"line":82},[52,130006,4543],{"class":622},[274,130008,130009],{},"元素1 元素2 {样式声明}",[274,130011,130012],{},[538,130013,130014],{},"注意点:",[274,130016,130017],{},"①元素1和元素2中间用空格隔开",[274,130019,130020],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[274,130022,130023],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[274,130025,130026],{},"④元素1和元素2可以是任意基础选择器",[30,130028,130030],{"id":130029},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[274,130032,130033],{},[538,130034,130014],{},[274,130036,130037],{},"①元素1和元素2中间用大于号隔开",[274,130039,130020],{},[274,130041,130042],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[30,130044,130046],{"id":130045},"_733-并集选择器","7.3.3 并集选择器",[274,130048,130049],{},"元素1，元素2 {样式声明}",[274,130051,130052],{},[538,130053,130014],{},[274,130055,130056],{},"①元素1和元素2中间用逗号隔开",[274,130058,130059],{},"②逗号可以理解为和的意思",[274,130061,130062],{},"③并集选择器通常用于集体声明",[30,130064,130066],{"id":130065},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[274,130068,130069],{},[538,130070,130014],{},[274,130072,130073,130074,130076],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71934,130075],{},"－:visited－:hover－:active。",[274,130078,130079,130080,130083,130084,28685],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[130081,130082],"hover",{}," 、 ",[130085,130086],"first-child",{},[274,130088,130089],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[274,130091,130092],{},"link对没访问的进行设置",[274,130094,130095],{},"vistied对已访问的进行改变",[274,130097,130098],{},"hover鼠标经过就会变",[274,130100,130101],{},"active常按(点)就会变",[19,130103,130105],{"className":128920,"code":130104,"language":128922,"meta":28,"style":28},"\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",[26,130106,130107,130112,130121,130131,130141,130145,130154,130165,130169,130177,130187,130197,130201,130210,130221],{"__ignoreMap":28},[52,130108,130109],{"class":54,"line":55},[52,130110,130111],{"class":332},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[52,130113,130114,130116,130119],{"class":54,"line":69},[52,130115,300],{"class":54231},[52,130117,130118],{"class":58},":link",[52,130120,18528],{"class":622},[52,130122,130123,130125,130127,130129],{"class":54,"line":82},[52,130124,73833],{"class":90},[52,130126,54368],{"class":622},[52,130128,65299],{"class":90},[52,130130,4272],{"class":622},[52,130132,130133,130135,130137,130139],{"class":54,"line":97},[52,130134,73430],{"class":90},[52,130136,54368],{"class":622},[52,130138,57667],{"class":90},[52,130140,4272],{"class":622},[52,130142,130143],{"class":54,"line":112},[52,130144,4543],{"class":622},[52,130146,130147,130149,130152],{"class":54,"line":119},[52,130148,300],{"class":54231},[52,130150,130151],{"class":58},":visited",[52,130153,18528],{"class":622},[52,130155,130156,130158,130160,130163],{"class":54,"line":130},[52,130157,73833],{"class":90},[52,130159,54368],{"class":622},[52,130161,130162],{"class":90},"purple",[52,130164,4272],{"class":622},[52,130166,130167],{"class":54,"line":136},[52,130168,4543],{"class":622},[52,130170,130171,130173,130175],{"class":54,"line":141},[52,130172,300],{"class":54231},[52,130174,63870],{"class":58},[52,130176,18528],{"class":622},[52,130178,130179,130181,130183,130185],{"class":54,"line":146},[52,130180,73833],{"class":90},[52,130182,54368],{"class":622},[52,130184,57819],{"class":90},[52,130186,4272],{"class":622},[52,130188,130189,130191,130193,130195],{"class":54,"line":152},[52,130190,73430],{"class":90},[52,130192,54368],{"class":622},[52,130194,129534],{"class":90},[52,130196,4272],{"class":622},[52,130198,130199],{"class":54,"line":157},[52,130200,4543],{"class":622},[52,130202,130203,130205,130208],{"class":54,"line":173},[52,130204,300],{"class":54231},[52,130206,130207],{"class":58},":active",[52,130209,18528],{"class":622},[52,130211,130212,130214,130216,130219],{"class":54,"line":178},[52,130213,73833],{"class":90},[52,130215,54368],{"class":622},[52,130217,130218],{"class":90},"green",[52,130220,4272],{"class":622},[52,130222,130223],{"class":54,"line":184},[52,130224,4543],{"class":622},[30,130226,130228,130229,130232],{"id":130227},"_735-伪类选择器","7.3.5 ",[130230,130231],"focus",{},"伪类选择器",[274,130234,130235,130237,130238,130240],{},[130230,130236],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[26,130239,128981],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[19,130242,130244],{"className":128920,"code":130243,"language":128922,"meta":28,"style":28},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[26,130245,130246,130254,130265,130275],{"__ignoreMap":28},[52,130247,130248,130250,130252],{"class":54,"line":55},[52,130249,56751],{"class":54231},[52,130251,64830],{"class":58},[52,130253,18528],{"class":622},[52,130255,130256,130259,130261,130263],{"class":54,"line":69},[52,130257,130258],{"class":90},"  border-color",[52,130260,54368],{"class":622},[52,130262,57819],{"class":90},[52,130264,4272],{"class":622},[52,130266,130267,130269,130271,130273],{"class":54,"line":82},[52,130268,73726],{"class":90},[52,130270,54368],{"class":622},[52,130272,57667],{"class":90},[52,130274,4272],{"class":622},[52,130276,130277],{"class":54,"line":97},[52,130278,4543],{"class":622},[3015,130280,130281],{},"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":28,"searchDepth":69,"depth":69,"links":130283},[130284,130289,130293],{"id":129659,"depth":69,"text":129660,"children":130285},[130286,130287,130288],{"id":129663,"depth":82,"text":129664},{"id":129747,"depth":82,"text":129748},{"id":129795,"depth":82,"text":129796},{"id":129885,"depth":69,"text":129886,"children":130290},[130291,130292],{"id":129889,"depth":82,"text":129890},{"id":129962,"depth":82,"text":129963},{"id":129972,"depth":69,"text":129973,"children":130294},[130295,130296,130297,130298,130299],{"id":129976,"depth":82,"text":129977},{"id":130029,"depth":82,"text":130030},{"id":130045,"depth":82,"text":130046},{"id":130065,"depth":82,"text":130066},{"id":130227,"depth":82,"text":130300},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129651,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130307,"title":130308,"body":130309,"description":3046,"extension":3047,"meta":132232,"navigation":115,"path":132233,"seo":132234,"stem":132235,"__hash__":132236},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130310,"toc":132206},[130311,130314,130318,130327,130331,130357,130362,130365,130368,130371,130374,130378,130381,130391,130399,130403,130438,130443,130446,130449,130452,130455,130459,130462,130471,130475,130488,130493,130496,130499,130502,130506,130509,130513,130516,130571,130574,130605,130608,130662,130666,130669,130835,130958,130961,130964,130967,130970,130974,130977,130981,130984,130987,130991,130994,131025,131052,131080,131083,131087,131113,131156,131160,131254,131257,131284,131287,131290,131293,131296,131299,131302,131305,131308,131311,131315,131372,131399,131403,131451,131455,131496,131498,131501,131504,131507,131510,131514,131606,131609,131612,131615,131619,131742,131943,131947,131951,131954,131957,131960,131964,131967,131970,131995,131998,132001,132004,132007,132010,132014,132022,132084,132087,132145,132148,132151,132154,132157,132160,132163,132166,132203],[10,130312,130308],{"id":130313},"_8-css显示模式与背景特性",[14,130315,130317],{"id":130316},"_81-css元素显示模式","8.1 css元素显示模式",[274,130319,130320,130321,130323,130324,130326],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[26,130322,128531],{},"自己占一行，比如一行可以放多个",[26,130325,128534],{},"，HTML 元素一般分为块元素和行内元素两种类型",[30,130328,130330],{"id":130329},"_811-块元素","8.1.1 块元素",[274,130332,130333,130334,130336,130337,3327,130340,3327,130342,3327,130344,3327,130347,3327,130350,130353,130354,130356],{},"常见的块元素有",[26,130335,128435],{},"~",[26,130338,130339],{},"\u003Ch6>",[26,130341,128461],{},[26,130343,128531],{},[26,130345,130346],{},"\u003Cul>",[26,130348,130349],{},"\u003Col>",[26,130351,130352],{},"\u003Cli>","等，其中 ",[26,130355,128531],{}," 标签是最典型的块元素",[274,130358,130359],{},[538,130360,130361],{},"块级元素的特点：",[274,130363,130364],{},"① 比较霸道，自己独占一行。",[274,130366,130367],{},"② 高度，宽度、外边距以及内边距都可以控制。",[274,130369,130370],{},"③ 宽度默认是容器（父级宽度）的100%。",[274,130372,130373],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[274,130375,130376],{},[538,130377,3149],{},[274,130379,130380],{},"①文字类的元素内不能使用块级元素",[274,130382,80177,130383,130385,130386,130388,130389],{},[26,130384,128461],{}," 标签主要用于存放文字，因此 ",[26,130387,128461],{}," 里面不能放块级元素，特别是不能放",[26,130390,128531],{},[274,130392,130393,130394,130336,130396,130398],{},"⑥同理， ",[26,130395,128435],{},[26,130397,130339],{},"等都是文字类块级标签，里面也不能放其他块级元素",[30,130400,130402],{"id":130401},"_812-行内元素","8.1.2 行内元素",[274,130404,130405,130406,3327,130408,3327,130411,3327,130414,3327,130417,3327,130420,3327,130423,3327,130426,3327,130429,3327,130432,130434,130435,130437],{},"常见的行内元素有 ",[26,130407,128693],{},[26,130409,130410],{},"\u003Cstrong>",[26,130412,130413],{},"\u003Cb>",[26,130415,130416],{},"\u003Cem>",[26,130418,130419],{},"\u003Ci>",[26,130421,130422],{},"\u003Cdel>",[26,130424,130425],{},"\u003Cs>",[26,130427,130428],{},"\u003Cins>",[26,130430,130431],{},"\u003Cu>",[26,130433,128534],{}," 等，其中 ",[26,130436,128534],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[274,130439,130440],{},[538,130441,130442],{},"特点：",[274,130444,130445],{},"① 相邻行内元素在一行上，一行可以显示多个。",[274,130447,130448],{},"② 高、宽直接设置是无效的。",[274,130450,130451],{},"③ 默认宽度就是它本身内容的宽度。",[274,130453,130454],{},"④ 行内元素只能容纳文本或其他行内元素。",[274,130456,130457],{},[538,130458,3149],{},[274,130460,130461],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[274,130463,130464,130465,130467,130468,130470],{},"②特殊情况链接 ",[26,130466,128693],{}," 里面可以放块级元素，但是给 ",[26,130469,128693],{}," 转换一下块级模式最安全",[30,130472,130474],{"id":130473},"_813-行内块元素","8.1.3 行内块元素",[274,130476,130477,130478,3327,130481,3327,130484,130487],{},"在行内元素中有几个特殊的标签 —— ",[26,130479,130480],{},"\u003Cimg \u002F>",[26,130482,130483],{},"\u003Cinput \u002F>",[26,130485,130486],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[274,130489,130490],{},[538,130491,130492],{},"行内块元素的特点：",[274,130494,130495],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[274,130497,130498],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[274,130500,130501],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[30,130503,130505],{"id":130504},"_814-总结","8.1.4 总结",[280,130507],{"style":128776,"src":130508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[30,130510,130512],{"id":130511},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[274,130514,130515],{},"①转换为块元素：display:block;",[19,130517,130519],{"className":128920,"code":130518,"language":128922,"meta":28,"style":28},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[26,130520,130521,130526,130532,130543,130555,130567],{"__ignoreMap":28},[52,130522,130523],{"class":54,"line":55},[52,130524,130525],{"class":332},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[52,130527,130528,130530],{"class":54,"line":69},[52,130529,300],{"class":54231},[52,130531,18528],{"class":622},[52,130533,130534,130537,130539,130541],{"class":54,"line":82},[52,130535,130536],{"class":90},"  display",[52,130538,54368],{"class":622},[52,130540,63799],{"class":90},[52,130542,4272],{"class":622},[52,130544,130545,130547,130549,130551,130553],{"class":54,"line":97},[52,130546,73496],{"class":90},[52,130548,54368],{"class":622},[52,130550,3424],{"class":90},[52,130552,54423],{"class":160},[52,130554,4272],{"class":622},[52,130556,130557,130559,130561,130563,130565],{"class":54,"line":112},[52,130558,73716],{"class":90},[52,130560,54368],{"class":622},[52,130562,3514],{"class":90},[52,130564,54423],{"class":160},[52,130566,4272],{"class":622},[52,130568,130569],{"class":54,"line":119},[52,130570,4543],{"class":622},[274,130572,130573],{},"②转换为行内元素：display:inline;",[19,130575,130577],{"className":128920,"code":130576,"language":128922,"meta":28,"style":28},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[26,130578,130579,130584,130590,130601],{"__ignoreMap":28},[52,130580,130581],{"class":54,"line":55},[52,130582,130583],{"class":332},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[52,130585,130586,130588],{"class":54,"line":69},[52,130587,54542],{"class":54231},[52,130589,18528],{"class":622},[52,130591,130592,130594,130596,130599],{"class":54,"line":82},[52,130593,130536],{"class":90},[52,130595,54368],{"class":622},[52,130597,130598],{"class":90},"inline",[52,130600,4272],{"class":622},[52,130602,130603],{"class":54,"line":97},[52,130604,4543],{"class":622},[274,130606,130607],{},"③转换为行内块：display:inline-block;",[19,130609,130611],{"className":128920,"code":130610,"language":128922,"meta":28,"style":28},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[26,130612,130613,130618,130624,130634,130646,130658],{"__ignoreMap":28},[52,130614,130615],{"class":54,"line":55},[52,130616,130617],{"class":332},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[52,130619,130620,130622],{"class":54,"line":69},[52,130621,52],{"class":54231},[52,130623,18528],{"class":622},[52,130625,130626,130628,130630,130632],{"class":54,"line":82},[52,130627,130536],{"class":90},[52,130629,54368],{"class":622},[52,130631,75311],{"class":90},[52,130633,4272],{"class":622},[52,130635,130636,130638,130640,130642,130644],{"class":54,"line":97},[52,130637,73496],{"class":90},[52,130639,54368],{"class":622},[52,130641,3724],{"class":90},[52,130643,54423],{"class":160},[52,130645,4272],{"class":622},[52,130647,130648,130650,130652,130654,130656],{"class":54,"line":112},[52,130649,73716],{"class":90},[52,130651,54368],{"class":622},[52,130653,4063],{"class":90},[52,130655,54423],{"class":160},[52,130657,4272],{"class":622},[52,130659,130660],{"class":54,"line":119},[52,130661,4543],{"class":622},[30,130663,130665],{"id":130664},"_816-小米侧边栏","8.1.6 小米侧边栏",[280,130667],{"style":128776,"src":130668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[19,130670,130672],{"className":129667,"code":130671,"language":129669,"meta":28,"style":28},"\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",[26,130673,130674,130679,130694,130713,130732,130751,130770,130789,130808,130827],{"__ignoreMap":28},[52,130675,130676],{"class":54,"line":55},[52,130677,130678],{"class":332},"\u003C!-- 小米侧边栏案例 -->\n",[52,130680,130681,130683,130685,130687,130689,130692],{"class":54,"line":69},[52,130682,4022],{"class":622},[52,130684,54542],{"class":54231},[52,130686,56416],{"class":58},[52,130688,2099],{"class":622},[52,130690,130691],{"class":62},"\"sidebar\"",[52,130693,54238],{"class":622},[52,130695,130696,130698,130700,130702,130704,130706,130709,130711],{"class":54,"line":82},[52,130697,55075],{"class":622},[52,130699,300],{"class":54231},[52,130701,63987],{"class":58},[52,130703,2099],{"class":622},[52,130705,63992],{"class":62},[52,130707,130708],{"class":622},">手机 电话卡\u003C\u002F",[52,130710,300],{"class":54231},[52,130712,54238],{"class":622},[52,130714,130715,130717,130719,130721,130723,130725,130728,130730],{"class":54,"line":97},[52,130716,55075],{"class":622},[52,130718,300],{"class":54231},[52,130720,63987],{"class":58},[52,130722,2099],{"class":622},[52,130724,63992],{"class":62},[52,130726,130727],{"class":622},">电视 盒子\u003C\u002F",[52,130729,300],{"class":54231},[52,130731,54238],{"class":622},[52,130733,130734,130736,130738,130740,130742,130744,130747,130749],{"class":54,"line":112},[52,130735,55075],{"class":622},[52,130737,300],{"class":54231},[52,130739,63987],{"class":58},[52,130741,2099],{"class":622},[52,130743,63992],{"class":62},[52,130745,130746],{"class":622},">笔记本 平板\u003C\u002F",[52,130748,300],{"class":54231},[52,130750,54238],{"class":622},[52,130752,130753,130755,130757,130759,130761,130763,130766,130768],{"class":54,"line":119},[52,130754,55075],{"class":622},[52,130756,300],{"class":54231},[52,130758,63987],{"class":58},[52,130760,2099],{"class":622},[52,130762,63992],{"class":62},[52,130764,130765],{"class":622},">出行 穿戴\u003C\u002F",[52,130767,300],{"class":54231},[52,130769,54238],{"class":622},[52,130771,130772,130774,130776,130778,130780,130782,130785,130787],{"class":54,"line":130},[52,130773,55075],{"class":622},[52,130775,300],{"class":54231},[52,130777,63987],{"class":58},[52,130779,2099],{"class":622},[52,130781,63992],{"class":62},[52,130783,130784],{"class":622},">智能 路由器\u003C\u002F",[52,130786,300],{"class":54231},[52,130788,54238],{"class":622},[52,130790,130791,130793,130795,130797,130799,130801,130804,130806],{"class":54,"line":136},[52,130792,55075],{"class":622},[52,130794,300],{"class":54231},[52,130796,63987],{"class":58},[52,130798,2099],{"class":622},[52,130800,63992],{"class":62},[52,130802,130803],{"class":622},">健康 儿童\u003C\u002F",[52,130805,300],{"class":54231},[52,130807,54238],{"class":622},[52,130809,130810,130812,130814,130816,130818,130820,130823,130825],{"class":54,"line":141},[52,130811,55075],{"class":622},[52,130813,300],{"class":54231},[52,130815,63987],{"class":58},[52,130817,2099],{"class":622},[52,130819,63992],{"class":62},[52,130821,130822],{"class":622},">耳机 音响\u003C\u002F",[52,130824,300],{"class":54231},[52,130826,54238],{"class":622},[52,130828,130829,130831,130833],{"class":54,"line":146},[52,130830,54716],{"class":622},[52,130832,54542],{"class":54231},[52,130834,54238],{"class":622},[19,130836,130838],{"className":128920,"code":130837,"language":128922,"meta":28,"style":28},".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",[26,130839,130840,130849,130859,130872,130884,130896,130908,130918,130929,130933,130943,130954],{"__ignoreMap":28},[52,130841,130842,130845,130847],{"class":54,"line":55},[52,130843,130844],{"class":58},".sidebar",[52,130846,4377],{"class":54231},[52,130848,18528],{"class":622},[52,130850,130851,130853,130855,130857],{"class":54,"line":69},[52,130852,130536],{"class":90},[52,130854,54368],{"class":622},[52,130856,63799],{"class":90},[52,130858,4272],{"class":622},[52,130860,130861,130863,130865,130868,130870],{"class":54,"line":82},[52,130862,73496],{"class":90},[52,130864,54368],{"class":622},[52,130866,130867],{"class":90},"234",[52,130869,54423],{"class":160},[52,130871,4272],{"class":622},[52,130873,130874,130876,130878,130880,130882],{"class":54,"line":97},[52,130875,73716],{"class":90},[52,130877,54368],{"class":622},[52,130879,3565],{"class":90},[52,130881,54423],{"class":160},[52,130883,4272],{"class":622},[52,130885,130886,130888,130890,130892,130894],{"class":54,"line":112},[52,130887,129604],{"class":90},[52,130889,54368],{"class":622},[52,130891,3565],{"class":90},[52,130893,54423],{"class":160},[52,130895,4272],{"class":622},[52,130897,130898,130900,130902,130904,130906],{"class":54,"line":119},[52,130899,73751],{"class":90},[52,130901,54368],{"class":622},[52,130903,4063],{"class":90},[52,130905,54423],{"class":160},[52,130907,4272],{"class":622},[52,130909,130910,130912,130914,130916],{"class":54,"line":130},[52,130911,73833],{"class":90},[52,130913,54368],{"class":622},[52,130915,63772],{"class":90},[52,130917,4272],{"class":622},[52,130919,130920,130922,130924,130927],{"class":54,"line":136},[52,130921,73806],{"class":90},[52,130923,54368],{"class":622},[52,130925,130926],{"class":90},"#55585a",[52,130928,4272],{"class":622},[52,130930,130931],{"class":54,"line":141},[52,130932,4543],{"class":622},[52,130934,130935,130937,130939,130941],{"class":54,"line":146},[52,130936,130844],{"class":58},[52,130938,4377],{"class":54231},[52,130940,63870],{"class":58},[52,130942,18528],{"class":622},[52,130944,130945,130947,130949,130952],{"class":54,"line":152},[52,130946,73806],{"class":90},[52,130948,54368],{"class":622},[52,130950,130951],{"class":90},"#ff6700",[52,130953,4272],{"class":622},[52,130955,130956],{"class":54,"line":157},[52,130957,4543],{"class":622},[280,130959],{"style":128776,"src":130960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[274,130962,130963],{},"行高=盒子高度：实现文字的垂直居中",[274,130965,130966],{},"原理讲解：",[280,130968],{"style":128776,"src":130969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130971,130973],{"id":130972},"_82-css背景","8.2 css背景",[274,130975,130976],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[30,130978,130980],{"id":130979},"_821-背景颜色","8.2.1 背景颜色",[274,130982,130983],{},"background-color:颜色值;",[274,130985,130986],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[30,130988,130990],{"id":130989},"_822-背景图片","8.2.2 背景图片",[274,130992,130993],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[19,130995,130997],{"className":128920,"code":130996,"language":128922,"meta":28,"style":28},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[26,130998,130999,131005,131021],{"__ignoreMap":28},[52,131000,131001,131003],{"class":54,"line":55},[52,131002,54542],{"class":54231},[52,131004,18528],{"class":622},[52,131006,131007,131010,131012,131014,131016,131019],{"class":54,"line":69},[52,131008,131009],{"class":90},"  background-image",[52,131011,54368],{"class":622},[52,131013,64656],{"class":90},[52,131015,3121],{"class":622},[52,131017,131018],{"class":8172},"images\u002Fbg.png",[52,131020,5679],{"class":622},[52,131022,131023],{"class":54,"line":82},[52,131024,4543],{"class":622},[3253,131026,131027,131036],{},[3256,131028,131029],{},[3259,131030,131031,131034],{},[3262,131032,131033],{"align":26688},"参数值",[3262,131035,105616],{"align":26688},[3299,131037,131038,131045],{},[3259,131039,131040,131042],{},[3304,131041,57667],{"align":26688},[3304,131043,131044],{"align":26688},"无背景图（默认的）",[3259,131046,131047,131049],{},[3304,131048,64656],{"align":26688},[3304,131050,131051],{"align":26688},"使用绝对或相对地址指定背景图像",[19,131053,131054],{"className":128920,"code":130996,"language":128922,"meta":28,"style":28},[26,131055,131056,131062,131076],{"__ignoreMap":28},[52,131057,131058,131060],{"class":54,"line":55},[52,131059,54542],{"class":54231},[52,131061,18528],{"class":622},[52,131063,131064,131066,131068,131070,131072,131074],{"class":54,"line":69},[52,131065,131009],{"class":90},[52,131067,54368],{"class":622},[52,131069,64656],{"class":90},[52,131071,3121],{"class":622},[52,131073,131018],{"class":8172},[52,131075,5679],{"class":622},[52,131077,131078],{"class":54,"line":82},[52,131079,4543],{"class":622},[274,131081,131082],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[30,131084,131086],{"id":131085},"_823-背景平铺","8.2.3 背景平铺",[19,131088,131090],{"className":128920,"code":131089,"language":128922,"meta":28,"style":28},"div {\n  background-repeat: no-repeat;\n}\n",[26,131091,131092,131098,131109],{"__ignoreMap":28},[52,131093,131094,131096],{"class":54,"line":55},[52,131095,54542],{"class":54231},[52,131097,18528],{"class":622},[52,131099,131100,131103,131105,131107],{"class":54,"line":69},[52,131101,131102],{"class":90},"  background-repeat",[52,131104,54368],{"class":622},[52,131106,64666],{"class":90},[52,131108,4272],{"class":622},[52,131110,131111],{"class":54,"line":82},[52,131112,4543],{"class":622},[3253,131114,131115,131123],{},[3256,131116,131117],{},[3259,131118,131119,131121],{},[3262,131120,131033],{"align":26688},[3262,131122,105616],{"align":26688},[3299,131124,131125,131133,131140,131148],{},[3259,131126,131127,131130],{},[3304,131128,131129],{"align":26688},"repeat",[3304,131131,131132],{"align":26688},"背景图像在纵向和横向上平铺（默认的）",[3259,131134,131135,131137],{},[3304,131136,64666],{"align":26688},[3304,131138,131139],{"align":26688},"背景图像不平铺",[3259,131141,131142,131145],{},[3304,131143,131144],{"align":26688},"repeat-x",[3304,131146,131147],{"align":26688},"背景图像在横向上平铺",[3259,131149,131150,131153],{},[3304,131151,131152],{"align":26688},"repeat-y",[3304,131154,131155],{"align":26688},"背景图像在纵向平铺",[30,131157,131159],{"id":131158},"_824-背景图片位置","8.2.4 背景图片位置",[19,131161,131163],{"className":128920,"code":131162,"language":128922,"meta":28,"style":28},"\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",[26,131164,131165,131170,131176,131190,131194,131199,131205,131221,131225,131230,131236,131250],{"__ignoreMap":28},[52,131166,131167],{"class":54,"line":55},[52,131168,131169],{"class":332},"\u002F* 方位名词 *\u002F\n",[52,131171,131172,131174],{"class":54,"line":69},[52,131173,54542],{"class":54231},[52,131175,18528],{"class":622},[52,131177,131178,131181,131183,131185,131188],{"class":54,"line":82},[52,131179,131180],{"class":90},"  background-position",[52,131182,54368],{"class":622},[52,131184,54523],{"class":90},[52,131186,131187],{"class":90}," top",[52,131189,4272],{"class":622},[52,131191,131192],{"class":54,"line":97},[52,131193,4543],{"class":622},[52,131195,131196],{"class":54,"line":112},[52,131197,131198],{"class":332},"\u002F* 精确单位 *\u002F\n",[52,131200,131201,131203],{"class":54,"line":119},[52,131202,54542],{"class":54231},[52,131204,18528],{"class":622},[52,131206,131207,131209,131211,131213,131215,131217,131219],{"class":54,"line":130},[52,131208,131180],{"class":90},[52,131210,54368],{"class":622},[52,131212,3812],{"class":90},[52,131214,54423],{"class":160},[52,131216,60434],{"class":90},[52,131218,54423],{"class":160},[52,131220,4272],{"class":622},[52,131222,131223],{"class":54,"line":136},[52,131224,4543],{"class":622},[52,131226,131227],{"class":54,"line":141},[52,131228,131229],{"class":332},"\u002F* 混合单位 *\u002F\n",[52,131231,131232,131234],{"class":54,"line":146},[52,131233,54542],{"class":54231},[52,131235,18528],{"class":622},[52,131237,131238,131240,131242,131244,131246,131248],{"class":54,"line":152},[52,131239,131180],{"class":90},[52,131241,54368],{"class":622},[52,131243,3812],{"class":90},[52,131245,54423],{"class":160},[52,131247,20100],{"class":90},[52,131249,4272],{"class":622},[52,131251,131252],{"class":54,"line":157},[52,131253,4543],{"class":622},[274,131255,131256],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[3253,131258,131259,131267],{},[3256,131260,131261],{},[3259,131262,131263,131265],{},[3262,131264,131033],{"align":26688},[3262,131266,28814],{"align":26688},[3299,131268,131269,131276],{},[3259,131270,131271,131273],{},[3304,131272,54899],{"align":26688},[3304,131274,131275],{"align":26688},"百分数|由浮点数和单位标识符组成的长度值",[3259,131277,131278,131281],{},[3304,131279,131280],{"align":26688},"position",[3304,131282,131283],{"align":26688},"top|center|bottom|left|center|right 方位名词",[274,131285,131286],{},"其他说明：",[274,131288,131289],{},"①参数是方位名词",[274,131291,131292],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[274,131294,131295],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[274,131297,131298],{},"②参数是精确单位",[274,131300,131301],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[274,131303,131304],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[274,131306,131307],{},"③参数是混合单位",[274,131309,131310],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[30,131312,131314],{"id":131313},"_825-背景图片固定","8.2.5 背景图片固定",[19,131316,131318],{"className":128920,"code":131317,"language":128922,"meta":28,"style":28},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[26,131319,131320,131325,131331,131343,131347,131352,131358,131368],{"__ignoreMap":28},[52,131321,131322],{"class":54,"line":55},[52,131323,131324],{"class":332},"\u002F* 背景滚动（默认） *\u002F\n",[52,131326,131327,131329],{"class":54,"line":69},[52,131328,54542],{"class":54231},[52,131330,18528],{"class":622},[52,131332,131333,131336,131338,131341],{"class":54,"line":82},[52,131334,131335],{"class":90},"  background-attachment",[52,131337,54368],{"class":622},[52,131339,131340],{"class":90},"scroll",[52,131342,4272],{"class":622},[52,131344,131345],{"class":54,"line":97},[52,131346,4543],{"class":622},[52,131348,131349],{"class":54,"line":112},[52,131350,131351],{"class":332},"\u002F* 背景固定 *\u002F\n",[52,131353,131354,131356],{"class":54,"line":119},[52,131355,54542],{"class":54231},[52,131357,18528],{"class":622},[52,131359,131360,131362,131364,131366],{"class":54,"line":130},[52,131361,131335],{"class":90},[52,131363,54368],{"class":622},[52,131365,89161],{"class":90},[52,131367,4272],{"class":622},[52,131369,131370],{"class":54,"line":136},[52,131371,4543],{"class":622},[3253,131373,131374,131383],{},[3256,131375,131376],{},[3259,131377,131378,131381],{},[3262,131379,131380],{"align":26688},"参数",[3262,131382,105616],{"align":26688},[3299,131384,131385,131392],{},[3259,131386,131387,131389],{},[3304,131388,131340],{"align":26688},[3304,131390,131391],{"align":26688},"背景图像是随对象内容滚动",[3259,131393,131394,131396],{},[3304,131395,89161],{"align":26688},[3304,131397,131398],{"align":26688},"背景图像固定",[30,131400,131402],{"id":131401},"_826-背景样式合写","8.2.6 背景样式合写",[19,131404,131406],{"className":128920,"code":131405,"language":128922,"meta":28,"style":28},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[26,131407,131408,131413,131419,131447],{"__ignoreMap":28},[52,131409,131410],{"class":54,"line":55},[52,131411,131412],{"class":332},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[52,131414,131415,131417],{"class":54,"line":69},[52,131416,54542],{"class":54231},[52,131418,18528],{"class":622},[52,131420,131421,131423,131425,131427,131430,131432,131434,131436,131438,131441,131443,131445],{"class":54,"line":82},[52,131422,73539],{"class":90},[52,131424,54368],{"class":622},[52,131426,63772],{"class":90},[52,131428,131429],{"class":90}," url",[52,131431,3121],{"class":622},[52,131433,131018],{"class":8172},[52,131435,16670],{"class":622},[52,131437,64666],{"class":90},[52,131439,131440],{"class":90}," fixed",[52,131442,20100],{"class":90},[52,131444,131187],{"class":90},[52,131446,4272],{"class":622},[52,131448,131449],{"class":54,"line":97},[52,131450,4543],{"class":622},[30,131452,131454],{"id":131453},"_827-背景色半透明","8.2.7 背景色半透明",[19,131456,131458],{"className":128920,"code":131457,"language":128922,"meta":28,"style":28},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[26,131459,131460,131466,131492],{"__ignoreMap":28},[52,131461,131462,131464],{"class":54,"line":55},[52,131463,54542],{"class":54231},[52,131465,18528],{"class":622},[52,131467,131468,131470,131472,131474,131476,131478,131480,131482,131484,131486,131488,131490],{"class":54,"line":69},[52,131469,73539],{"class":90},[52,131471,54368],{"class":622},[52,131473,58040],{"class":90},[52,131475,3121],{"class":622},[52,131477,3306],{"class":90},[52,131479,15391],{"class":622},[52,131481,3306],{"class":90},[52,131483,15391],{"class":622},[52,131485,3306],{"class":90},[52,131487,15391],{"class":622},[52,131489,103449],{"class":90},[52,131491,5679],{"class":622},[52,131493,131494],{"class":54,"line":82},[52,131495,4543],{"class":622},[274,131497,102324],{},[274,131499,131500],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[274,131502,131503],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[274,131505,131506],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[274,131508,131509],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[30,131511,131513],{"id":131512},"_828-总结","8.2.8 总结",[3253,131515,131516,131527],{},[3256,131517,131518],{},[3259,131519,131520,131523,131525],{},[3262,131521,131522],{"align":26688},"属性",[3262,131524,105616],{"align":26688},[3262,131526,3267],{"align":26688},[3299,131528,131529,131540,131551,131562,131573,131584,131595],{},[3259,131530,131531,131534,131537],{},[3304,131532,131533],{"align":26688},"background-color",[3304,131535,131536],{"align":26688},"背景颜色",[3304,131538,131539],{"align":26688},"预定义的颜色值\u002F十六进制\u002FRGB代码",[3259,131541,131542,131545,131548],{},[3304,131543,131544],{"align":26688},"background-image",[3304,131546,131547],{"align":26688},"背景图片",[3304,131549,131550],{"align":26688},"url(图片路径)",[3259,131552,131553,131556,131559],{},[3304,131554,131555],{"align":26688},"background-repeat",[3304,131557,131558],{"align":26688},"是否平铺",[3304,131560,131561],{"align":26688},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[3259,131563,131564,131567,131570],{},[3304,131565,131566],{"align":26688},"background-position",[3304,131568,131569],{"align":26688},"背景位置",[3304,131571,131572],{"align":26688},"length\u002Fposition 分别是x和y坐标",[3259,131574,131575,131578,131581],{},[3304,131576,131577],{"align":26688},"background-attachment",[3304,131579,131580],{"align":26688},"背景附着",[3304,131582,131583],{"align":26688},"scroll(背景滚动) \u002Ffixed (背景固定)",[3259,131585,131586,131589,131592],{},[3304,131587,131588],{"align":26688},"背景简写",[3304,131590,131591],{"align":26688},"书写更简单",[3304,131593,131594],{"align":26688},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[3259,131596,131597,131600,131603],{},[3304,131598,131599],{"align":26688},"背景半透明",[3304,131601,131602],{"align":26688},"背景颜色半透明",[3304,131604,131605],{"align":26688},"background: rgba(0,0,0.3); 后面必须是4个值",[274,131607,131608],{},"颜色渐变：",[280,131610],{"style":128776,"src":131611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[280,131613],{"style":128776,"src":131614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[30,131616,131618],{"id":131617},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[19,131620,131622],{"className":129667,"code":131621,"language":129669,"meta":28,"style":28},"\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",[26,131623,131624,131639,131658,131677,131696,131715,131734],{"__ignoreMap":28},[52,131625,131626,131628,131630,131632,131634,131637],{"class":54,"line":55},[52,131627,4022],{"class":622},[52,131629,54542],{"class":54231},[52,131631,56416],{"class":58},[52,131633,2099],{"class":622},[52,131635,131636],{"class":62},"\"nav\"",[52,131638,54238],{"class":622},[52,131640,131641,131643,131645,131647,131649,131651,131654,131656],{"class":54,"line":69},[52,131642,55075],{"class":622},[52,131644,300],{"class":54231},[52,131646,63987],{"class":58},[52,131648,2099],{"class":622},[52,131650,63992],{"class":62},[52,131652,131653],{"class":622},">五彩导航1\u003C\u002F",[52,131655,300],{"class":54231},[52,131657,54238],{"class":622},[52,131659,131660,131662,131664,131666,131668,131670,131673,131675],{"class":54,"line":82},[52,131661,55075],{"class":622},[52,131663,300],{"class":54231},[52,131665,63987],{"class":58},[52,131667,2099],{"class":622},[52,131669,63992],{"class":62},[52,131671,131672],{"class":622},">五彩导航2\u003C\u002F",[52,131674,300],{"class":54231},[52,131676,54238],{"class":622},[52,131678,131679,131681,131683,131685,131687,131689,131692,131694],{"class":54,"line":97},[52,131680,55075],{"class":622},[52,131682,300],{"class":54231},[52,131684,63987],{"class":58},[52,131686,2099],{"class":622},[52,131688,63992],{"class":62},[52,131690,131691],{"class":622},">五彩导航3\u003C\u002F",[52,131693,300],{"class":54231},[52,131695,54238],{"class":622},[52,131697,131698,131700,131702,131704,131706,131708,131711,131713],{"class":54,"line":112},[52,131699,55075],{"class":622},[52,131701,300],{"class":54231},[52,131703,63987],{"class":58},[52,131705,2099],{"class":622},[52,131707,63992],{"class":62},[52,131709,131710],{"class":622},">五彩导航4\u003C\u002F",[52,131712,300],{"class":54231},[52,131714,54238],{"class":622},[52,131716,131717,131719,131721,131723,131725,131727,131730,131732],{"class":54,"line":119},[52,131718,55075],{"class":622},[52,131720,300],{"class":54231},[52,131722,63987],{"class":58},[52,131724,2099],{"class":622},[52,131726,63992],{"class":62},[52,131728,131729],{"class":622},">五彩导航5\u003C\u002F",[52,131731,300],{"class":54231},[52,131733,54238],{"class":622},[52,131735,131736,131738,131740],{"class":54,"line":130},[52,131737,54716],{"class":622},[52,131739,54542],{"class":54231},[52,131741,54238],{"class":622},[19,131743,131745],{"className":128920,"code":131744,"language":128922,"meta":28,"style":28},".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",[26,131746,131747,131756,131766,131778,131790,131800,131812,131822,131826,131851,131874,131897,131920],{"__ignoreMap":28},[52,131748,131749,131752,131754],{"class":54,"line":55},[52,131750,131751],{"class":58},".nav",[52,131753,4377],{"class":54231},[52,131755,18528],{"class":622},[52,131757,131758,131760,131762,131764],{"class":54,"line":69},[52,131759,130536],{"class":90},[52,131761,54368],{"class":622},[52,131763,75311],{"class":90},[52,131765,4272],{"class":622},[52,131767,131768,131770,131772,131774,131776],{"class":54,"line":82},[52,131769,73496],{"class":90},[52,131771,54368],{"class":622},[52,131773,3929],{"class":90},[52,131775,54423],{"class":160},[52,131777,4272],{"class":622},[52,131779,131780,131782,131784,131786,131788],{"class":54,"line":97},[52,131781,73716],{"class":90},[52,131783,54368],{"class":622},[52,131785,3968],{"class":90},[52,131787,54423],{"class":160},[52,131789,4272],{"class":622},[52,131791,131792,131794,131796,131798],{"class":54,"line":112},[52,131793,73454],{"class":90},[52,131795,54368],{"class":622},[52,131797,54523],{"class":90},[52,131799,4272],{"class":622},[52,131801,131802,131804,131806,131808,131810],{"class":54,"line":119},[52,131803,129604],{"class":90},[52,131805,54368],{"class":622},[52,131807,3968],{"class":90},[52,131809,54423],{"class":160},[52,131811,4272],{"class":622},[52,131813,131814,131816,131818,131820],{"class":54,"line":130},[52,131815,73833],{"class":90},[52,131817,54368],{"class":622},[52,131819,63772],{"class":90},[52,131821,4272],{"class":622},[52,131823,131824],{"class":54,"line":136},[52,131825,4543],{"class":622},[52,131827,131828,131830,131832,131835,131837,131839,131842,131844,131846,131848],{"class":54,"line":141},[52,131829,131751],{"class":58},[52,131831,4377],{"class":54231},[52,131833,131834],{"class":58},":nth-child",[52,131836,3121],{"class":622},[52,131838,3332],{"class":90},[52,131840,131841],{"class":622},") { ",[52,131843,131533],{"class":90},[52,131845,54368],{"class":622},[52,131847,130951],{"class":90},[52,131849,131850],{"class":622},"; }\n",[52,131852,131853,131855,131857,131859,131861,131863,131865,131867,131869,131872],{"class":54,"line":146},[52,131854,131751],{"class":58},[52,131856,4377],{"class":54231},[52,131858,131834],{"class":58},[52,131860,3121],{"class":622},[52,131862,3194],{"class":90},[52,131864,131841],{"class":622},[52,131866,131533],{"class":90},[52,131868,54368],{"class":622},[52,131870,131871],{"class":90},"#ff0000",[52,131873,131850],{"class":622},[52,131875,131876,131878,131880,131882,131884,131886,131888,131890,131892,131895],{"class":54,"line":152},[52,131877,131751],{"class":58},[52,131879,4377],{"class":54231},[52,131881,131834],{"class":58},[52,131883,3121],{"class":622},[52,131885,3188],{"class":90},[52,131887,131841],{"class":622},[52,131889,131533],{"class":90},[52,131891,54368],{"class":622},[52,131893,131894],{"class":90},"#00a4ff",[52,131896,131850],{"class":622},[52,131898,131899,131901,131903,131905,131907,131909,131911,131913,131915,131918],{"class":54,"line":157},[52,131900,131751],{"class":58},[52,131902,4377],{"class":54231},[52,131904,131834],{"class":58},[52,131906,3121],{"class":622},[52,131908,3406],{"class":90},[52,131910,131841],{"class":622},[52,131912,131533],{"class":90},[52,131914,54368],{"class":622},[52,131916,131917],{"class":90},"#ff00ff",[52,131919,131850],{"class":622},[52,131921,131922,131924,131926,131928,131930,131932,131934,131936,131938,131941],{"class":54,"line":173},[52,131923,131751],{"class":58},[52,131925,4377],{"class":54231},[52,131927,131834],{"class":58},[52,131929,3121],{"class":622},[52,131931,3432],{"class":90},[52,131933,131841],{"class":622},[52,131935,131533],{"class":90},[52,131937,54368],{"class":622},[52,131939,131940],{"class":90},"#00ff00",[52,131942,131850],{"class":622},[14,131944,131946],{"id":131945},"_83-css三大特性","8.3 css三大特性",[30,131948,131950],{"id":131949},"_831-层叠性","8.3.1 层叠性",[274,131952,131953],{},"为了解决样式冲突问题",[274,131955,131956],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[274,131958,131959],{},"   ②样式不冲突，不会层叠",[30,131961,131963],{"id":131962},"_832-继承性","8.3.2 继承性",[274,131965,131966],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[274,131968,131969],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[19,131971,131973],{"className":128920,"code":131972,"language":128922,"meta":28,"style":28},"p {\n  color: #333;\n}\n",[26,131974,131975,131981,131991],{"__ignoreMap":28},[52,131976,131977,131979],{"class":54,"line":55},[52,131978,274],{"class":54231},[52,131980,18528],{"class":622},[52,131982,131983,131985,131987,131989],{"class":54,"line":69},[52,131984,73833],{"class":90},[52,131986,54368],{"class":622},[52,131988,65299],{"class":90},[52,131990,4272],{"class":622},[52,131992,131993],{"class":54,"line":82},[52,131994,4543],{"class":622},[280,131996],{"style":128776,"src":131997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[274,131999,132000],{},"解释：①行高可以跟单位也可以不跟单位",[274,132002,132003],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[274,132005,132006],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[274,132008,132009],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[30,132011,132013],{"id":132012},"_833-优先级","8.3.3 优先级",[1070,132015,132016,132019],{},[1073,132017,132018],{},"选择器相同，则执行层叠性",[1073,132020,132021],{},"选择器不同，则根据选择器权重执行",[3253,132023,132024,132034],{},[3256,132025,132026],{},[3259,132027,132028,132031],{},[3262,132029,132030],{"align":26688},"选择器",[3262,132032,132033],{"align":26688},"选择器权重",[3299,132035,132036,132044,132052,132060,132068,132076],{},[3259,132037,132038,132041],{},[3304,132039,132040],{"align":26688},"继承 或者*",[3304,132042,132043],{"align":26688},"0，0，0，0",[3259,132045,132046,132049],{},[3304,132047,132048],{"align":26688},"标签选择器",[3304,132050,132051],{"align":26688},"0，0，0，1",[3259,132053,132054,132057],{},[3304,132055,132056],{"align":26688},"类选择器，伪类选择器",[3304,132058,132059],{"align":26688},"0，0，1，0",[3259,132061,132062,132065],{},[3304,132063,132064],{"align":26688},"ID选择器",[3304,132066,132067],{"align":26688},"0，1，0，0",[3259,132069,132070,132073],{},[3304,132071,132072],{"align":26688},"行内样式",[3304,132074,132075],{"align":26688},"1，0，0，0",[3259,132077,132078,132081],{},[3304,132079,132080],{"align":26688},"！important",[3304,132082,132083],{"align":26688},"无穷大",[274,132085,132086],{},"! important用法：",[19,132088,132090],{"className":128920,"code":132089,"language":128922,"meta":28,"style":28},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[26,132091,132092,132097,132103,132116,132120,132125,132131,132141],{"__ignoreMap":28},[52,132093,132094],{"class":54,"line":55},[52,132095,132096],{"class":332},"\u002F* !important 拥有最高优先级 *\u002F\n",[52,132098,132099,132101],{"class":54,"line":69},[52,132100,54542],{"class":54231},[52,132102,18528],{"class":622},[52,132104,132105,132107,132109,132111,132114],{"class":54,"line":82},[52,132106,73833],{"class":90},[52,132108,54368],{"class":622},[52,132110,54576],{"class":90},[52,132112,132113],{"class":160}," !important",[52,132115,4272],{"class":622},[52,132117,132118],{"class":54,"line":97},[52,132119,4543],{"class":622},[52,132121,132122],{"class":54,"line":112},[52,132123,132124],{"class":332},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[52,132126,132127,132129],{"class":54,"line":119},[52,132128,54542],{"class":54231},[52,132130,18528],{"class":622},[52,132132,132133,132135,132137,132139],{"class":54,"line":130},[52,132134,73833],{"class":90},[52,132136,54368],{"class":622},[52,132138,60351],{"class":90},[52,132140,4272],{"class":622},[52,132142,132143],{"class":54,"line":136},[52,132144,4543],{"class":622},[274,132146,132147],{},"优先级注意点：",[274,132149,132150],{},"①权重是有4组数字组成,但是不会有进位",[274,132152,132153],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[274,132155,132156],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[274,132158,132159],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[274,132161,132162],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[274,132164,132165],{},"⑥复合选择器",[3253,132167,132168,132178],{},[3256,132169,132170],{},[3259,132171,132172,132175],{},[3262,132173,132174],{"align":26688},"div ul li",[3262,132176,132177],{"align":26688},"0,0,0,3",[3299,132179,132180,132188,132196],{},[3259,132181,132182,132185],{},[3304,132183,132184],{"align":26688},".nav ul li",[3304,132186,132187],{"align":26688},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[3259,132189,132190,132193],{},[3304,132191,132192],{"align":26688},"a:hover",[3304,132194,132195],{"align":26688},"0,0,1,1",[3259,132197,132198,132201],{},[3304,132199,132200],{"align":26688},".nav a",[3304,132202,132195],{"align":26688},[3015,132204,132205],{},"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":28,"searchDepth":69,"depth":69,"links":132207},[132208,132216,132227],{"id":130316,"depth":69,"text":130317,"children":132209},[132210,132211,132212,132213,132214,132215],{"id":130329,"depth":82,"text":130330},{"id":130401,"depth":82,"text":130402},{"id":130473,"depth":82,"text":130474},{"id":130504,"depth":82,"text":130505},{"id":130511,"depth":82,"text":130512},{"id":130664,"depth":82,"text":130665},{"id":130972,"depth":69,"text":130973,"children":132217},[132218,132219,132220,132221,132222,132223,132224,132225,132226],{"id":130979,"depth":82,"text":130980},{"id":130989,"depth":82,"text":130990},{"id":131085,"depth":82,"text":131086},{"id":131158,"depth":82,"text":131159},{"id":131313,"depth":82,"text":131314},{"id":131401,"depth":82,"text":131402},{"id":131453,"depth":82,"text":131454},{"id":131512,"depth":82,"text":131513},{"id":131617,"depth":82,"text":131618},{"id":131945,"depth":69,"text":131946,"children":132228},[132229,132230,132231],{"id":131949,"depth":82,"text":131950},{"id":131962,"depth":82,"text":131963},{"id":132012,"depth":82,"text":132013},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130308,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132238,"title":132239,"body":132240,"description":3046,"extension":3047,"meta":133830,"navigation":115,"path":133831,"seo":133832,"stem":133833,"__hash__":133834},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132241,"toc":133809},[132242,132245,132249,132252,132255,132258,132261,132264,132267,132270,132274,132282,132319,132355,132358,132372,132377,132411,132414,132507,132512,132515,132545,132548,132553,132561,132565,132572,132618,132662,132667,132670,132673,132676,132679,132682,132685,132687,132690,132694,132699,132743,132748,132751,132754,132791,132796,132799,132802,132805,132808,132840,132843,132846,132849,132881,132884,132887,132890,132894,132897,132929,132932,132936,132956,132959,132967,132970,132974,132979,132982,133014,133019,133022,133060,133064,133069,133072,133075,133106,133109,133126,133131,133183,133243,133248,133302,133340,133344,133348,133351,133355,133363,133366,133368,133379,133384,133432,133466,133469,133472,133475,133478,133522,133525,133528,133531,133534,133537,133540,133584,133587,133590,133593,133596,133599,133602,133608,133611,133655,133658,133661,133664,133667,133670,133714,133717,133719,133722,133726,133730,133768,133772,133775,133778,133782,133790,133794,133797,133800,133803,133806],[10,132243,132239],{"id":132244},"_9-css盒模型浮动与切图",[14,132246,132248],{"id":132247},"_91-盒子模型","9.1 盒子模型",[274,132250,132251],{},"利用盒子来设计网页",[274,132253,132254],{},"盒子包含：边框、外边距、内边距、实际内容",[274,132256,132257],{},"网页布局设置：",[274,132259,132260],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[274,132262,132263],{},"②利用css设置好盒子样式，然后摆放到相应位置",[274,132265,132266],{},"③往盒子里装内容",[280,132268],{"style":128776,"src":132269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[30,132271,132273],{"id":132272},"_911-边框border","9.1.1 边框（border）",[1070,132275,132276,132279],{},[1073,132277,132278],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[1073,132280,132281],{},"语法",[19,132283,132285],{"className":128920,"code":132284,"language":128922,"meta":28,"style":28},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[26,132286,132287,132292,132298,132315],{"__ignoreMap":28},[52,132288,132289],{"class":54,"line":55},[52,132290,132291],{"class":332},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[52,132293,132294,132296],{"class":54,"line":69},[52,132295,54542],{"class":54231},[52,132297,18528],{"class":622},[52,132299,132300,132302,132304,132306,132308,132310,132313],{"class":54,"line":82},[52,132301,73824],{"class":90},[52,132303,54368],{"class":622},[52,132305,3332],{"class":90},[52,132307,54423],{"class":160},[52,132309,54452],{"class":90},[52,132311,132312],{"class":90}," #ccc",[52,132314,4272],{"class":622},[52,132316,132317],{"class":54,"line":97},[52,132318,4543],{"class":622},[3253,132320,132321,132329],{},[3256,132322,132323],{},[3259,132324,132325,132327],{},[3262,132326,131522],{"align":26688},[3262,132328,105616],{"align":26688},[3299,132330,132331,132339,132347],{},[3259,132332,132333,132336],{},[3304,132334,132335],{"align":26688},"border-width",[3304,132337,132338],{"align":26688},"定义边框粗细，单位是px",[3259,132340,132341,132344],{},[3304,132342,132343],{"align":26688},"border-style",[3304,132345,132346],{"align":26688},"边框的样式",[3259,132348,132349,132352],{},[3304,132350,132351],{"align":26688},"border-color",[3304,132353,132354],{"align":26688},"边框的颜色",[274,132356,132357],{},"边框样式 border-style 可以设置如下值：",[4118,132359,132360,132363,132366,132369],{},[1073,132361,132362],{},"none：没有边框即忽略所有边框的宽度（默认值）",[1073,132364,132365],{},"solid：边框为单实线(最为常用的)",[1073,132367,132368],{},"dashed：边框为虚线",[1073,132370,132371],{},"dotted：边框为点线",[1070,132373,132374],{"start":82},[1073,132375,132376],{},"边框的合写分写",[19,132378,132379],{"className":128920,"code":132284,"language":128922,"meta":28,"style":28},[26,132380,132381,132385,132391,132407],{"__ignoreMap":28},[52,132382,132383],{"class":54,"line":55},[52,132384,132291],{"class":332},[52,132386,132387,132389],{"class":54,"line":69},[52,132388,54542],{"class":54231},[52,132390,18528],{"class":622},[52,132392,132393,132395,132397,132399,132401,132403,132405],{"class":54,"line":82},[52,132394,73824],{"class":90},[52,132396,54368],{"class":622},[52,132398,3332],{"class":90},[52,132400,54423],{"class":160},[52,132402,54452],{"class":90},[52,132404,132312],{"class":90},[52,132406,4272],{"class":622},[52,132408,132409],{"class":54,"line":97},[52,132410,4543],{"class":622},[274,132412,132413],{},"边框分开写法：",[19,132415,132417],{"className":128920,"code":132416,"language":128922,"meta":28,"style":28},"\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",[26,132418,132419,132424,132430,132448,132466,132485,132503],{"__ignoreMap":28},[52,132420,132421],{"class":54,"line":55},[52,132422,132423],{"class":332},"\u002F* 边框分开写法 *\u002F\n",[52,132425,132426,132428],{"class":54,"line":69},[52,132427,54542],{"class":54231},[52,132429,18528],{"class":622},[52,132431,132432,132435,132437,132439,132441,132443,132446],{"class":54,"line":82},[52,132433,132434],{"class":90},"  border-top",[52,132436,54368],{"class":622},[52,132438,3332],{"class":90},[52,132440,54423],{"class":160},[52,132442,54452],{"class":90},[52,132444,132445],{"class":90}," #000",[52,132447,4272],{"class":622},[52,132449,132450,132453,132455,132457,132459,132461,132464],{"class":54,"line":97},[52,132451,132452],{"class":90},"  border-right",[52,132454,54368],{"class":622},[52,132456,3194],{"class":90},[52,132458,54423],{"class":160},[52,132460,65171],{"class":90},[52,132462,132463],{"class":90}," #333",[52,132465,4272],{"class":622},[52,132467,132468,132471,132473,132475,132477,132480,132483],{"class":54,"line":112},[52,132469,132470],{"class":90},"  border-bottom",[52,132472,54368],{"class":622},[52,132474,3188],{"class":90},[52,132476,54423],{"class":160},[52,132478,132479],{"class":90}," dotted",[52,132481,132482],{"class":90}," #666",[52,132484,4272],{"class":622},[52,132486,132487,132490,132492,132494,132496,132498,132501],{"class":54,"line":119},[52,132488,132489],{"class":90},"  border-left",[52,132491,54368],{"class":622},[52,132493,3332],{"class":90},[52,132495,54423],{"class":160},[52,132497,54452],{"class":90},[52,132499,132500],{"class":90}," #999",[52,132502,4272],{"class":622},[52,132504,132505],{"class":54,"line":130},[52,132506,4543],{"class":622},[1070,132508,132509],{"start":97},[1073,132510,132511],{},"表格的细线边框",[274,132513,132514],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[19,132516,132518],{"className":128920,"code":132517,"language":128922,"meta":28,"style":28},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[26,132519,132520,132525,132531,132541],{"__ignoreMap":28},[52,132521,132522],{"class":54,"line":55},[52,132523,132524],{"class":332},"\u002F* 表格细线边框合并 *\u002F\n",[52,132526,132527,132529],{"class":54,"line":69},[52,132528,3253],{"class":54231},[52,132530,18528],{"class":622},[52,132532,132533,132535,132537,132539],{"class":54,"line":82},[52,132534,73506],{"class":90},[52,132536,54368],{"class":622},[52,132538,67964],{"class":90},[52,132540,4272],{"class":622},[52,132542,132543],{"class":54,"line":97},[52,132544,4543],{"class":622},[274,132546,132547],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1070,132549,132550],{"start":112},[1073,132551,132552],{},"解决边框额外增加盒子的实际大小的方法：",[4118,132554,132555,132558],{},[1073,132556,132557],{},"测量盒子大小的时候,不量边框",[1073,132559,132560],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[30,132562,132564],{"id":132563},"_912-内边距","9.1.2 内边距",[1070,132566,132567,132570],{},[1073,132568,132569],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[1073,132571,132281],{},[3253,132573,132574,132584],{},[3256,132575,132576],{},[3259,132577,132578,132581],{},[3262,132579,132580],{"align":26688},"值的个数",[3262,132582,132583],{"align":26688},"表达意思",[3299,132585,132586,132594,132602,132610],{},[3259,132587,132588,132591],{},[3304,132589,132590],{"align":26688},"padding: 5px;",[3304,132592,132593],{"align":26688},"1个值，代表上下左右都有5个元素",[3259,132595,132596,132599],{},[3304,132597,132598],{"align":26688},"padding: 5px 10px;",[3304,132600,132601],{"align":26688},"2个值，代表上下内边距为5像素，左右内边距为10像素",[3259,132603,132604,132607],{},[3304,132605,132606],{"align":26688},"padding: 5px 10px 20px;",[3304,132608,132609],{"align":26688},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[3259,132611,132612,132615],{},[3304,132613,132614],{"align":26688},"padding: 5px 10px 20px 30px;",[3304,132616,132617],{"align":26688},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[3253,132619,132620,132628],{},[3256,132621,132622],{},[3259,132623,132624,132626],{},[3262,132625,131522],{"align":26688},[3262,132627,105616],{"align":26688},[3299,132629,132630,132638,132646,132654],{},[3259,132631,132632,132635],{},[3304,132633,132634],{"align":26688},"padding-left",[3304,132636,132637],{"align":26688},"左内边距",[3259,132639,132640,132643],{},[3304,132641,132642],{"align":26688},"padding-right",[3304,132644,132645],{"align":26688},"右内边距",[3259,132647,132648,132651],{},[3304,132649,132650],{"align":26688},"padding-top",[3304,132652,132653],{"align":26688},"上内边距",[3259,132655,132656,132659],{},[3304,132657,132658],{"align":26688},"padding-bottom",[3304,132660,132661],{"align":26688},"下内边距",[1070,132663,132664],{"start":82},[1073,132665,132666],{},"内边距会影响盒子的实际大小",[274,132668,132669],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[274,132671,132672],{},"①内容和边框有了距离，添加了内边距",[274,132674,132675],{},"②padding影响了盒子实际大小",[274,132677,132678],{},"内边距对盒子大小的影响：",[274,132680,132681],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[274,132683,132684],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[274,132686,98148],{},[274,132688,132689],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[30,132691,132693],{"id":132692},"_913-外边距","9.1.3 外边距",[1070,132695,132696],{},[1073,132697,132698],{},"控制盒子与盒子之间的距离",[3253,132700,132701,132709],{},[3256,132702,132703],{},[3259,132704,132705,132707],{},[3262,132706,131522],{"align":26688},[3262,132708,105616],{"align":26688},[3299,132710,132711,132719,132727,132735],{},[3259,132712,132713,132716],{},[3304,132714,132715],{"align":26688},"margin-left",[3304,132717,132718],{"align":26688},"左外边距",[3259,132720,132721,132724],{},[3304,132722,132723],{"align":26688},"margin-right",[3304,132725,132726],{"align":26688},"右外边距",[3259,132728,132729,132732],{},[3304,132730,132731],{"align":26688},"margin-top",[3304,132733,132734],{"align":26688},"上外边距",[3259,132736,132737,132740],{},[3304,132738,132739],{"align":26688},"margin-bottom",[3304,132741,132742],{"align":26688},"下外边距",[1070,132744,132745],{"start":69},[1073,132746,132747],{},"外边距可以让块级盒子水平居中的两个条件：",[274,132749,132750],{},"①盒子必须指定了宽度（width）",[274,132752,132753],{},"②盒子左右的外边距都设置为 auto",[19,132755,132757],{"className":128920,"code":132756,"language":128922,"meta":28,"style":28},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,132758,132759,132764,132771,132787],{"__ignoreMap":28},[52,132760,132761],{"class":54,"line":55},[52,132762,132763],{"class":332},"\u002F* margin 复合写法（同上） *\u002F\n",[52,132765,132766,132769],{"class":54,"line":69},[52,132767,132768],{"class":58},".box",[52,132770,18528],{"class":622},[52,132772,132773,132775,132777,132779,132781,132784],{"class":54,"line":82},[52,132774,73398],{"class":90},[52,132776,54368],{"class":622},[52,132778,3306],{"class":90},[52,132780,54487],{"class":90},[52,132782,132783],{"class":622},";  ",[52,132785,132786],{"class":332},"\u002F* 块级盒子水平居中 *\u002F\n",[52,132788,132789],{"class":54,"line":97},[52,132790,4543],{"class":622},[1070,132792,132793],{"start":82},[1073,132794,132795],{},"外边距塌陷问题",[274,132797,132798],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[280,132800],{"style":128776,"src":132801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[274,132803,132804],{},"解决方案：",[274,132806,132807],{},"①可以为父亲元素定义上边距",[19,132809,132810],{"className":128920,"code":132756,"language":128922,"meta":28,"style":28},[26,132811,132812,132816,132822,132836],{"__ignoreMap":28},[52,132813,132814],{"class":54,"line":55},[52,132815,132763],{"class":332},[52,132817,132818,132820],{"class":54,"line":69},[52,132819,132768],{"class":58},[52,132821,18528],{"class":622},[52,132823,132824,132826,132828,132830,132832,132834],{"class":54,"line":82},[52,132825,73398],{"class":90},[52,132827,54368],{"class":622},[52,132829,3306],{"class":90},[52,132831,54487],{"class":90},[52,132833,132783],{"class":622},[52,132835,132786],{"class":332},[52,132837,132838],{"class":54,"line":97},[52,132839,4543],{"class":622},[274,132841,132842],{},"②可以为父亲元素定义上内边距",[274,132844,132845],{},"③可以为父亲元素添加overflow:hidden",[280,132847],{"style":128776,"src":132848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[19,132850,132851],{"className":128920,"code":132756,"language":128922,"meta":28,"style":28},[26,132852,132853,132857,132863,132877],{"__ignoreMap":28},[52,132854,132855],{"class":54,"line":55},[52,132856,132763],{"class":332},[52,132858,132859,132861],{"class":54,"line":69},[52,132860,132768],{"class":58},[52,132862,18528],{"class":622},[52,132864,132865,132867,132869,132871,132873,132875],{"class":54,"line":82},[52,132866,73398],{"class":90},[52,132868,54368],{"class":622},[52,132870,3306],{"class":90},[52,132872,54487],{"class":90},[52,132874,132783],{"class":622},[52,132876,132786],{"class":332},[52,132878,132879],{"class":54,"line":97},[52,132880,4543],{"class":622},[280,132882],{"style":128776,"src":132883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[274,132885,132886],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[274,132888,132889],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[30,132891,132893],{"id":132892},"_914-清除内外边距","9.1.4 清除内外边距",[274,132895,132896],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[19,132898,132899],{"className":128920,"code":132756,"language":128922,"meta":28,"style":28},[26,132900,132901,132905,132911,132925],{"__ignoreMap":28},[52,132902,132903],{"class":54,"line":55},[52,132904,132763],{"class":332},[52,132906,132907,132909],{"class":54,"line":69},[52,132908,132768],{"class":58},[52,132910,18528],{"class":622},[52,132912,132913,132915,132917,132919,132921,132923],{"class":54,"line":82},[52,132914,73398],{"class":90},[52,132916,54368],{"class":622},[52,132918,3306],{"class":90},[52,132920,54487],{"class":90},[52,132922,132783],{"class":622},[52,132924,132786],{"class":332},[52,132926,132927],{"class":54,"line":97},[52,132928,4543],{"class":622},[274,132930,132931],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[30,132933,132935],{"id":132934},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[4118,132937,132938,132941,132944,132947,132950,132953],{},[1073,132939,132940],{},"文件→打开 ：可以打开我们要测量的图片",[1073,132942,132943],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[1073,132945,132946],{},"右击标尺，把里面的单位改为像素",[1073,132948,132949],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[1073,132951,132952],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[1073,132954,132955],{},"用选区拖动 可以测量大小",[280,132957],{"style":128776,"src":132958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[4118,132960,132961,132964],{},[1073,132962,132963],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[1073,132965,132966],{},"吸管取色工具",[280,132968],{"style":128776,"src":132969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[30,132971,132973],{"id":132972},"_916-案例","9.1.6 案例",[1070,132975,132976],{},[1073,132977,132978],{},"小米商品",[280,132980],{"style":128776,"src":132981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[19,132983,132984],{"className":128920,"code":132756,"language":128922,"meta":28,"style":28},[26,132985,132986,132990,132996,133010],{"__ignoreMap":28},[52,132987,132988],{"class":54,"line":55},[52,132989,132763],{"class":332},[52,132991,132992,132994],{"class":54,"line":69},[52,132993,132768],{"class":58},[52,132995,18528],{"class":622},[52,132997,132998,133000,133002,133004,133006,133008],{"class":54,"line":82},[52,132999,73398],{"class":90},[52,133001,54368],{"class":622},[52,133003,3306],{"class":90},[52,133005,54487],{"class":90},[52,133007,132783],{"class":622},[52,133009,132786],{"class":332},[52,133011,133012],{"class":54,"line":97},[52,133013,4543],{"class":622},[1070,133015,133016],{"start":69},[1073,133017,133018],{},"快报模块",[280,133020],{"style":128776,"src":133021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[19,133023,133025],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[26,133026,133027,133032,133047,133052],{"__ignoreMap":28},[52,133028,133029],{"class":54,"line":55},[52,133030,133031],{"class":332},"\u003C!-- HTML 代码示例 -->\n",[52,133033,133034,133036,133038,133040,133042,133045],{"class":54,"line":69},[52,133035,4022],{"class":622},[52,133037,54542],{"class":54231},[52,133039,56416],{"class":58},[52,133041,2099],{"class":622},[52,133043,133044],{"class":62},"\"example\"",[52,133046,54238],{"class":622},[52,133048,133049],{"class":54,"line":82},[52,133050,133051],{"class":622},"  示例内容\n",[52,133053,133054,133056,133058],{"class":54,"line":97},[52,133055,54716],{"class":622},[52,133057,54542],{"class":54231},[52,133059,54238],{"class":622},[30,133061,133063],{"id":133062},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1070,133065,133066],{},[1073,133067,133068],{},"圆角边框",[274,133070,133071],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[280,133073],{"style":128776,"src":133074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[19,133076,133078],{"className":128920,"code":133077,"language":128922,"meta":28,"style":28},"div {\n  border: 1px solid #ccc;\n}\n",[26,133079,133080,133086,133102],{"__ignoreMap":28},[52,133081,133082,133084],{"class":54,"line":55},[52,133083,54542],{"class":54231},[52,133085,18528],{"class":622},[52,133087,133088,133090,133092,133094,133096,133098,133100],{"class":54,"line":69},[52,133089,73824],{"class":90},[52,133091,54368],{"class":622},[52,133093,3332],{"class":90},[52,133095,54423],{"class":160},[52,133097,54452],{"class":90},[52,133099,132312],{"class":90},[52,133101,4272],{"class":622},[52,133103,133104],{"class":54,"line":82},[52,133105,4543],{"class":622},[274,133107,133108],{},"解释:",[4118,133110,133111,133114,133117,133120,133123],{},[1073,133112,133113],{},"参数值可以为数值或百分比的形式",[1073,133115,133116],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[1073,133118,133119],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[1073,133121,133122],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[1073,133124,133125],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1070,133127,133128],{"start":69},[1073,133129,133130],{},"盒子阴影",[19,133132,133134],{"className":128920,"code":133133,"language":128922,"meta":28,"style":28},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[26,133135,133136,133142,133179],{"__ignoreMap":28},[52,133137,133138,133140],{"class":54,"line":55},[52,133139,54542],{"class":54231},[52,133141,18528],{"class":622},[52,133143,133144,133147,133149,133151,133153,133155,133157,133159,133161,133163,133165,133167,133169,133171,133173,133175,133177],{"class":54,"line":69},[52,133145,133146],{"class":90},"  box-shadow",[52,133148,54368],{"class":622},[52,133150,3306],{"class":90},[52,133152,17711],{"class":90},[52,133154,54423],{"class":160},[52,133156,5000],{"class":90},[52,133158,54423],{"class":160},[52,133160,81695],{"class":90},[52,133162,3121],{"class":622},[52,133164,3306],{"class":90},[52,133166,15391],{"class":622},[52,133168,3306],{"class":90},[52,133170,15391],{"class":622},[52,133172,3306],{"class":90},[52,133174,15391],{"class":622},[52,133176,89138],{"class":90},[52,133178,5679],{"class":622},[52,133180,133181],{"class":54,"line":82},[52,133182,4543],{"class":622},[3253,133184,133185,133193],{},[3256,133186,133187],{},[3259,133188,133189,133191],{},[3262,133190,3267],{"align":26688},[3262,133192,30424],{"align":26688},[3299,133194,133195,133203,133211,133219,133227,133235],{},[3259,133196,133197,133200],{},[3304,133198,133199],{"align":26688},"h-shadow",[3304,133201,133202],{"align":26688},"必需,水平阴影的位置,允许负值",[3259,133204,133205,133208],{},[3304,133206,133207],{"align":26688},"v-shadow",[3304,133209,133210],{"align":26688},"必需,垂直阴影的位置,允许负值",[3259,133212,133213,133216],{},[3304,133214,133215],{"align":26688},"blur",[3304,133217,133218],{"align":26688},"可选,模糊距离,就是影子的虚实",[3259,133220,133221,133224],{},[3304,133222,133223],{"align":26688},"spread",[3304,133225,133226],{"align":26688},"可选,阴影尺寸",[3259,133228,133229,133232],{},[3304,133230,133231],{"align":26688},"color",[3304,133233,133234],{"align":26688},"可选,阴影的颜色",[3259,133236,133237,133240],{},[3304,133238,133239],{"align":26688},"inset",[3304,133241,133242],{"align":26688},"可选,将外部阴影(outset)改为内部阴影",[1070,133244,133245],{"start":82},[1073,133246,133247],{},"文字阴影",[19,133249,133251],{"className":128920,"code":133250,"language":128922,"meta":28,"style":28},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[26,133252,133253,133259,133298],{"__ignoreMap":28},[52,133254,133255,133257],{"class":54,"line":55},[52,133256,274],{"class":54231},[52,133258,18528],{"class":622},[52,133260,133261,133264,133266,133268,133270,133272,133274,133276,133278,133280,133282,133284,133286,133288,133290,133292,133294,133296],{"class":54,"line":69},[52,133262,133263],{"class":90},"  text-shadow",[52,133265,54368],{"class":622},[52,133267,3332],{"class":90},[52,133269,54423],{"class":160},[52,133271,28064],{"class":90},[52,133273,54423],{"class":160},[52,133275,17711],{"class":90},[52,133277,54423],{"class":160},[52,133279,81695],{"class":90},[52,133281,3121],{"class":622},[52,133283,3306],{"class":90},[52,133285,15391],{"class":622},[52,133287,3306],{"class":90},[52,133289,15391],{"class":622},[52,133291,3306],{"class":90},[52,133293,15391],{"class":622},[52,133295,103449],{"class":90},[52,133297,5679],{"class":622},[52,133299,133300],{"class":54,"line":82},[52,133301,4543],{"class":622},[3253,133303,133304,133312],{},[3256,133305,133306],{},[3259,133307,133308,133310],{},[3262,133309,3267],{"align":26688},[3262,133311,30424],{"align":26688},[3299,133313,133314,133320,133327,133334],{},[3259,133315,133316,133318],{},[3304,133317,133199],{"align":26688},[3304,133319,133202],{"align":26688},[3259,133321,133322,133324],{},[3304,133323,133207],{"align":26688},[3304,133325,133326],{"align":26688},"必需,垂直阴影位置,允许负值",[3259,133328,133329,133331],{},[3304,133330,133215],{"align":26688},[3304,133332,133333],{"align":26688},"可选,模糊的距离",[3259,133335,133336,133338],{},[3304,133337,133231],{"align":26688},[3304,133339,133234],{"align":26688},[14,133341,133343],{"id":133342},"_92-浮动","9.2 浮动",[30,133345,133347],{"id":133346},"_921-浮动介绍","9.2.1 浮动介绍",[274,133349,133350],{},"在16.2中详细介绍",[30,133352,133354],{"id":133353},"_922-清除浮动","9.2.2 清除浮动",[1070,133356,133357,133360],{},[1073,133358,133359],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[1073,133361,133362],{},"清除浮动的本质",[274,133364,133365],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[274,133367,11981],{},[4118,133369,133370,133373,133376],{},[1073,133371,133372],{},"如果父盒子本身有高度，则不需要清除浮动",[1073,133374,133375],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[1073,133377,133378],{},"父级有了高度，就不会影响下面的标准流了",[1070,133380,133381],{"start":82},[1073,133382,133383],{},"清除浮动样式",[19,133385,133387],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[26,133388,133389,133396,133407,133411,133418,133428],{"__ignoreMap":28},[52,133390,133391,133394],{"class":54,"line":55},[52,133392,133393],{"class":58},".left",[52,133395,18528],{"class":622},[52,133397,133398,133401,133403,133405],{"class":54,"line":69},[52,133399,133400],{"class":90},"  float",[52,133402,54368],{"class":622},[52,133404,26688],{"class":90},[52,133406,4272],{"class":622},[52,133408,133409],{"class":54,"line":82},[52,133410,4543],{"class":622},[52,133412,133413,133416],{"class":54,"line":97},[52,133414,133415],{"class":58},".right",[52,133417,18528],{"class":622},[52,133419,133420,133422,133424,133426],{"class":54,"line":112},[52,133421,133400],{"class":90},[52,133423,54368],{"class":622},[52,133425,75450],{"class":90},[52,133427,4272],{"class":622},[52,133429,133430],{"class":54,"line":119},[52,133431,4543],{"class":622},[3253,133433,133434,133442],{},[3256,133435,133436],{},[3259,133437,133438,133440],{},[3262,133439,129384],{"align":26688},[3262,133441,30424],{"align":26688},[3299,133443,133444,133451,133458],{},[3259,133445,133446,133448],{},[3304,133447,26688],{"align":26688},[3304,133449,133450],{"align":26688},"不允许左侧有浮动元素（清除左侧浮动的影响）",[3259,133452,133453,133455],{},[3304,133454,75450],{"align":26688},[3304,133456,133457],{"align":26688},"不允许右侧有浮动元素（清除右侧浮动的影响）",[3259,133459,133460,133463],{},[3304,133461,133462],{"align":26688},"both",[3304,133464,133465],{"align":26688},"同时清除左右侧浮动的影响",[274,133467,133468],{},"法一",[274,133470,133471],{},"额外标签法也称为隔墙法",[274,133473,133474],{},"使用方式：",[274,133476,133477],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[19,133479,133480],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,133481,133482,133488,133498,133502,133508,133518],{"__ignoreMap":28},[52,133483,133484,133486],{"class":54,"line":55},[52,133485,133393],{"class":58},[52,133487,18528],{"class":622},[52,133489,133490,133492,133494,133496],{"class":54,"line":69},[52,133491,133400],{"class":90},[52,133493,54368],{"class":622},[52,133495,26688],{"class":90},[52,133497,4272],{"class":622},[52,133499,133500],{"class":54,"line":82},[52,133501,4543],{"class":622},[52,133503,133504,133506],{"class":54,"line":97},[52,133505,133415],{"class":58},[52,133507,18528],{"class":622},[52,133509,133510,133512,133514,133516],{"class":54,"line":112},[52,133511,133400],{"class":90},[52,133513,54368],{"class":622},[52,133515,75450],{"class":90},[52,133517,4272],{"class":622},[52,133519,133520],{"class":54,"line":119},[52,133521,4543],{"class":622},[274,133523,133524],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[274,133526,133527],{},"优点： 通俗易懂，书写方便",[274,133529,133530],{},"缺点： 添加许多无意义的标签，结构化较差",[274,133532,133533],{},"注意： 要求这个新的空标签必须是块级元素。",[274,133535,133536],{},"法二",[274,133538,133539],{},"父级添加overflow属性",[19,133541,133542],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,133543,133544,133550,133560,133564,133570,133580],{"__ignoreMap":28},[52,133545,133546,133548],{"class":54,"line":55},[52,133547,133393],{"class":58},[52,133549,18528],{"class":622},[52,133551,133552,133554,133556,133558],{"class":54,"line":69},[52,133553,133400],{"class":90},[52,133555,54368],{"class":622},[52,133557,26688],{"class":90},[52,133559,4272],{"class":622},[52,133561,133562],{"class":54,"line":82},[52,133563,4543],{"class":622},[52,133565,133566,133568],{"class":54,"line":97},[52,133567,133415],{"class":58},[52,133569,18528],{"class":622},[52,133571,133572,133574,133576,133578],{"class":54,"line":112},[52,133573,133400],{"class":90},[52,133575,54368],{"class":622},[52,133577,75450],{"class":90},[52,133579,4272],{"class":622},[52,133581,133582],{"class":54,"line":119},[52,133583,4543],{"class":622},[274,133585,133586],{},"overflow: hidden;",[274,133588,133589],{},"优点：代码简洁",[274,133591,133592],{},"缺点：无法显示溢出的部分",[274,133594,133595],{},"注意：是给父元素添加代码",[274,133597,133598],{},"法三",[274,133600,133601],{},"父级添加after伪元素",[274,133603,133604,133607],{},[133605,133606],"after",{}," 方式是额外标签法的升级版",[274,133609,133610],{},"使用的时候复制就可以",[19,133612,133613],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,133614,133615,133621,133631,133635,133641,133651],{"__ignoreMap":28},[52,133616,133617,133619],{"class":54,"line":55},[52,133618,133393],{"class":58},[52,133620,18528],{"class":622},[52,133622,133623,133625,133627,133629],{"class":54,"line":69},[52,133624,133400],{"class":90},[52,133626,54368],{"class":622},[52,133628,26688],{"class":90},[52,133630,4272],{"class":622},[52,133632,133633],{"class":54,"line":82},[52,133634,4543],{"class":622},[52,133636,133637,133639],{"class":54,"line":97},[52,133638,133415],{"class":58},[52,133640,18528],{"class":622},[52,133642,133643,133645,133647,133649],{"class":54,"line":112},[52,133644,133400],{"class":90},[52,133646,54368],{"class":622},[52,133648,75450],{"class":90},[52,133650,4272],{"class":622},[52,133652,133653],{"class":54,"line":119},[52,133654,4543],{"class":622},[274,133656,133657],{},"优点：没有增加标签，结构更简单",[274,133659,133660],{},"缺点：照顾低版本浏览器",[274,133662,133663],{},"代表网站： 百度、淘宝网、网易等",[274,133665,133666],{},"法四",[274,133668,133669],{},"父级添加双伪元素",[19,133671,133672],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,133673,133674,133680,133690,133694,133700,133710],{"__ignoreMap":28},[52,133675,133676,133678],{"class":54,"line":55},[52,133677,133393],{"class":58},[52,133679,18528],{"class":622},[52,133681,133682,133684,133686,133688],{"class":54,"line":69},[52,133683,133400],{"class":90},[52,133685,54368],{"class":622},[52,133687,26688],{"class":90},[52,133689,4272],{"class":622},[52,133691,133692],{"class":54,"line":82},[52,133693,4543],{"class":622},[52,133695,133696,133698],{"class":54,"line":97},[52,133697,133415],{"class":58},[52,133699,18528],{"class":622},[52,133701,133702,133704,133706,133708],{"class":54,"line":112},[52,133703,133400],{"class":90},[52,133705,54368],{"class":622},[52,133707,75450],{"class":90},[52,133709,4272],{"class":622},[52,133711,133712],{"class":54,"line":119},[52,133713,4543],{"class":622},[274,133715,133716],{},"优点：代码更简洁",[274,133718,133660],{},[274,133720,133721],{},"代表网站：小米、腾讯等",[14,133723,133725],{"id":133724},"_93-ps切图","9.3 PS切图",[30,133727,133729],{"id":133728},"_931-常见图片格式","9.3.1 常见图片格式",[3253,133731,133732,133742],{},[3256,133733,133734],{},[3259,133735,133736,133739],{},[3262,133737,133738],{"align":26688},"jpg图像格式",[3262,133740,133741],{"align":26688},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[3299,133743,133744,133752,133760],{},[3259,133745,133746,133749],{},[3304,133747,133748],{"align":26688},"gif图像格式",[3304,133750,133751],{"align":26688},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[3259,133753,133754,133757],{},[3304,133755,133756],{"align":26688},"png图像格式",[3304,133758,133759],{"align":26688},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[3259,133761,133762,133765],{},[3304,133763,133764],{"align":26688},"PSD图像格式",[3304,133766,133767],{"align":26688},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[30,133769,133771],{"id":133770},"_932-图层切图","9.3.2 图层切图",[274,133773,133774],{},"最简单的切图方式：右击图层 → 导出 → 切片",[274,133776,133777],{},"按住shift选中两个图层->图层菜单->合并图层",[30,133779,133781],{"id":133780},"_933-切片切图","9.3.3 切片切图",[4118,133783,133784,133787],{},[1073,133785,133786],{},"利用切片工具手动划出",[1073,133788,133789],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[30,133791,133793],{"id":133792},"_934-切图步骤","9.3.4 切图步骤",[274,133795,133796],{},"用切片工具选中：",[280,133798],{"style":128776,"src":133799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[274,133801,133802],{},"文件 -> 导出",[280,133804],{"style":128776,"src":133805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[3015,133807,133808],{},"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":28,"searchDepth":69,"depth":69,"links":133810},[133811,133820,133824],{"id":132247,"depth":69,"text":132248,"children":133812},[133813,133814,133815,133816,133817,133818,133819],{"id":132272,"depth":82,"text":132273},{"id":132563,"depth":82,"text":132564},{"id":132692,"depth":82,"text":132693},{"id":132892,"depth":82,"text":132893},{"id":132934,"depth":82,"text":132935},{"id":132972,"depth":82,"text":132973},{"id":133062,"depth":82,"text":133063},{"id":133342,"depth":69,"text":133343,"children":133821},[133822,133823],{"id":133346,"depth":82,"text":133347},{"id":133353,"depth":82,"text":133354},{"id":133724,"depth":69,"text":133725,"children":133825},[133826,133827,133828,133829],{"id":133728,"depth":82,"text":133729},{"id":133770,"depth":82,"text":133771},{"id":133780,"depth":82,"text":133781},{"id":133792,"depth":82,"text":133793},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132239,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133836,"title":133837,"body":133838,"description":3046,"extension":3047,"meta":134479,"navigation":115,"path":134480,"seo":134481,"stem":134482,"__hash__":134483},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133839,"toc":134467},[133840,133843,133847,133873,133907,133911,133915,133918,133960,133967,133977,133985,133987,133990,133993,133996,134003,134017,134021,134024,134053,134057,134060,134074,134078,134081,134109,134113,134116,134142,134146,134151,134184,134189,134217,134221,134238,134284,134289,134333,134350,134457,134465],[10,133841,133837],{"id":133842},"_10-css规范与学成在线案例",[14,133844,133846],{"id":133845},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1070,133848,133849,133855,133861,133867],{},[1073,133850,133851,133854],{},[538,133852,133853],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[1073,133856,133857,133860],{},[538,133858,133859],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[1073,133862,133863,133866],{},[538,133864,133865],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[1073,133868,133869,133872],{},[538,133870,133871],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[19,133874,133875],{"className":128920,"code":132284,"language":128922,"meta":28,"style":28},[26,133876,133877,133881,133887,133903],{"__ignoreMap":28},[52,133878,133879],{"class":54,"line":55},[52,133880,132291],{"class":332},[52,133882,133883,133885],{"class":54,"line":69},[52,133884,54542],{"class":54231},[52,133886,18528],{"class":622},[52,133888,133889,133891,133893,133895,133897,133899,133901],{"class":54,"line":82},[52,133890,73824],{"class":90},[52,133892,54368],{"class":622},[52,133894,3332],{"class":90},[52,133896,54423],{"class":160},[52,133898,54452],{"class":90},[52,133900,132312],{"class":90},[52,133902,4272],{"class":622},[52,133904,133905],{"class":54,"line":97},[52,133906,4543],{"class":622},[14,133908,133910],{"id":133909},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[30,133912,133914],{"id":133913},"_1021-header头部制作","10.2.1 header头部制作",[280,133916],{"style":128776,"src":133917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[4118,133919,133920,133927,133934,133940,133947,133954],{},[1073,133921,133922,133923,133926],{},"1号是版心盒子 ",[538,133924,133925],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[1073,133928,133929,133930,133933],{},"版心盒子 里面包含 2号盒子 ",[538,133931,133932],{},"logo"," 图标",[1073,133935,133936,133937,133939],{},"版心盒子 里面包含 3号盒子 ",[538,133938,56643],{}," 导航栏",[1073,133941,133942,133943,133946],{},"版心盒子 里面包含 4号盒子 ",[538,133944,133945],{},"search"," 搜索框",[1073,133948,133949,133950,133953],{},"版心盒子 里面包含 5号盒子 ",[538,133951,133952],{},"user"," 个人信息",[1073,133955,133956,133957],{},"注意，要求里面的 ",[538,133958,133959],{},"4个子盒子 必须都浮动",[1070,133961,133962],{},[1073,133963,133964],{},[538,133965,133966],{},"导航栏注意点:",[274,133968,133969,133970,133973,133974],{},"实际开发中， ",[538,133971,133972],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[538,133975,133976],{},"用 li 包含链接(li+a)的做法",[4118,133978,133979,133982],{},[1073,133980,133981],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[1073,133983,133984],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[274,133986,11981],{},[274,133988,133989],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[274,133991,133992],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[274,133994,133995],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1070,133997,133998],{"start":69},[1073,133999,134000],{},[538,134001,134002],{},"4号盒子search的细节：",[4118,134004,134005,134008,134011],{},[1073,134006,134007],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[1073,134009,134010],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[1073,134012,134013,134016],{},[26,134014,134015],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[30,134018,134020],{"id":134019},"_1022-banner制作","10.2.2 banner制作",[280,134022],{"style":128776,"src":134023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[4118,134025,134026,134033,134039,134046],{},[1073,134027,134028,134029,134032],{},"1号盒子是通栏的大盒子 ",[538,134030,134031],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[1073,134034,134035,134036,134038],{},"2号盒子是版心 ",[538,134037,3907],{}," ， 要水平居中对齐",[1073,134040,134041,134042,134045],{},"3号盒子版心内，左对齐 ",[538,134043,134044],{},"subnav"," 侧导航栏",[1073,134047,134048,134049,134052],{},"4号盒子版心内，右对齐 ",[538,134050,134051],{},"course"," 课程",[30,134054,134056],{"id":134055},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[280,134058],{"style":128776,"src":134059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[4118,134061,134062,134065,134068,134071],{},[1073,134063,134064],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[1073,134066,134067],{},"1号盒子是标题 H3 左侧浮动",[1073,134069,134070],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[1073,134072,134073],{},"3号盒子 右浮动 mod 修改",[30,134075,134077],{"id":134076},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[280,134079],{"style":128776,"src":134080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[4118,134082,134083,134089,134096,134103,134106],{},[1073,134084,134085,134086,134088],{},"1号盒子为最大的盒子 ",[538,134087,56644],{}," 版心水平居中对齐",[1073,134090,134091,134092,134095],{},"2号盒子为上面部分 ",[538,134093,134094],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[1073,134097,134098,134099,134102],{},"3号盒子为底下部分 ",[538,134100,134101],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[1073,134104,134105],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[1073,134107,134108],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[30,134110,134112],{"id":134111},"_1025-底部模块制作","10.2.5 底部模块制作",[280,134114],{"style":128776,"src":134115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[4118,134117,134118,134125,134128,134135],{},[1073,134119,134120,134121,134124],{},"1号盒子通栏大盒子 底部 ",[538,134122,134123],{},"footer"," 给高度 底色是白色",[1073,134126,134127],{},"2号盒子版心水平居中",[1073,134129,134130,134131,134134],{},"3号盒子版权 ",[538,134132,134133],{},"copyright"," 左对齐",[1073,134136,134137,134138,134141],{},"4号盒子 链接组 ",[538,134139,134140],{},"links"," 右对齐",[30,134143,134145],{"id":134144},"_1026-代码模块","10.2.6 代码模块",[1070,134147,134148],{},[1073,134149,134150],{},"html部分",[19,134152,134154],{"className":129667,"code":134153,"language":129669,"meta":28,"style":28},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[26,134155,134156],{"__ignoreMap":28},[52,134157,134158,134160,134162,134164,134166,134169,134172,134174,134177,134180,134182],{"class":54,"line":55},[52,134159,4022],{"class":622},[52,134161,300],{"class":54231},[52,134163,63987],{"class":58},[52,134165,2099],{"class":622},[52,134167,134168],{"class":62},"\"https:\u002F\u002Fexample.com\"",[52,134170,134171],{"class":58}," target",[52,134173,2099],{"class":622},[52,134175,134176],{"class":62},"\"_blank\"",[52,134178,134179],{"class":622},">链接文字\u003C\u002F",[52,134181,300],{"class":54231},[52,134183,54238],{"class":622},[1070,134185,134186],{"start":69},[1073,134187,134188],{},"css部分",[19,134190,134191],{"className":129667,"code":134153,"language":129669,"meta":28,"style":28},[26,134192,134193],{"__ignoreMap":28},[52,134194,134195,134197,134199,134201,134203,134205,134207,134209,134211,134213,134215],{"class":54,"line":55},[52,134196,4022],{"class":622},[52,134198,300],{"class":54231},[52,134200,63987],{"class":58},[52,134202,2099],{"class":622},[52,134204,134168],{"class":62},[52,134206,134171],{"class":58},[52,134208,2099],{"class":622},[52,134210,134176],{"class":62},[52,134212,134179],{"class":622},[52,134214,300],{"class":54231},[52,134216,54238],{"class":622},[30,134218,134220],{"id":134219},"_1027-收获","10.2.7 收获",[1070,134222,134223,134226,134229,134232,134235],{},[1073,134224,134225],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[1073,134227,134228],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[1073,134230,134231],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[1073,134233,134234],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[1073,134236,134237],{},"遗忘代码",[19,134239,134241],{"className":128920,"code":134240,"language":128922,"meta":28,"style":28},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[26,134242,134243,134265,134270,134280],{"__ignoreMap":28},[52,134244,134245,134247,134249,134251,134253,134255,134257,134259,134261,134263],{"class":54,"line":55},[52,134246,54542],{"class":54231},[52,134248,15391],{"class":622},[52,134250,274],{"class":54231},[52,134252,15391],{"class":622},[52,134254,10],{"class":54231},[52,134256,15391],{"class":622},[52,134258,4118],{"class":54231},[52,134260,15391],{"class":622},[52,134262,1073],{"class":54231},[52,134264,18528],{"class":622},[52,134266,134267],{"class":54,"line":69},[52,134268,134269],{"class":332},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[52,134271,134272,134274,134276,134278],{"class":54,"line":82},[52,134273,130536],{"class":90},[52,134275,54368],{"class":622},[52,134277,63799],{"class":90},[52,134279,4272],{"class":622},[52,134281,134282],{"class":54,"line":97},[52,134283,4543],{"class":622},[1070,134285,134286],{"start":119},[1073,134287,134288],{},"html引css的程序",[19,134290,134291],{"className":128920,"code":134240,"language":128922,"meta":28,"style":28},[26,134292,134293,134315,134319,134329],{"__ignoreMap":28},[52,134294,134295,134297,134299,134301,134303,134305,134307,134309,134311,134313],{"class":54,"line":55},[52,134296,54542],{"class":54231},[52,134298,15391],{"class":622},[52,134300,274],{"class":54231},[52,134302,15391],{"class":622},[52,134304,10],{"class":54231},[52,134306,15391],{"class":622},[52,134308,4118],{"class":54231},[52,134310,15391],{"class":622},[52,134312,1073],{"class":54231},[52,134314,18528],{"class":622},[52,134316,134317],{"class":54,"line":69},[52,134318,134269],{"class":332},[52,134320,134321,134323,134325,134327],{"class":54,"line":82},[52,134322,130536],{"class":90},[52,134324,54368],{"class":622},[52,134326,63799],{"class":90},[52,134328,4272],{"class":622},[52,134330,134331],{"class":54,"line":97},[52,134332,4543],{"class":622},[1070,134334,134335,134338,134341,134344,134347],{"start":130},[1073,134336,134337],{},"浮动的盒子不会有外边距合并问题",[1073,134339,134340],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[1073,134342,134343],{},"ctrl+g快速定位行；shift+alt多个光标",[1073,134345,134346],{},"学习上方各个模块的选择器起名方法，以后就这样用",[1073,134348,134349],{},"在写选择器时尽量写全一些，例如",[19,134351,134353],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},"\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",[26,134354,134355,134360,134376,134381,134396,134401,134416,134421,134436,134441],{"__ignoreMap":28},[52,134356,134357],{"class":54,"line":55},[52,134358,134359],{"class":332},"\u002F* 静态定位（默认） *\u002F\n",[52,134361,134362,134365,134367,134369,134371,134374],{"class":54,"line":69},[52,134363,134364],{"class":58},".static",[52,134366,82735],{"class":622},[52,134368,131280],{"class":90},[52,134370,54368],{"class":622},[52,134372,134373],{"class":90},"static",[52,134375,131850],{"class":622},[52,134377,134378],{"class":54,"line":82},[52,134379,134380],{"class":332},"\u002F* 相对定位 *\u002F\n",[52,134382,134383,134386,134388,134390,134392,134394],{"class":54,"line":97},[52,134384,134385],{"class":58},".relative",[52,134387,82735],{"class":622},[52,134389,131280],{"class":90},[52,134391,54368],{"class":622},[52,134393,57694],{"class":90},[52,134395,131850],{"class":622},[52,134397,134398],{"class":54,"line":112},[52,134399,134400],{"class":332},"\u002F* 绝对定位 *\u002F\n",[52,134402,134403,134406,134408,134410,134412,134414],{"class":54,"line":119},[52,134404,134405],{"class":58},".absolute",[52,134407,82735],{"class":622},[52,134409,131280],{"class":90},[52,134411,54368],{"class":622},[52,134413,57761],{"class":90},[52,134415,131850],{"class":622},[52,134417,134418],{"class":54,"line":130},[52,134419,134420],{"class":332},"\u002F* 固定定位 *\u002F\n",[52,134422,134423,134426,134428,134430,134432,134434],{"class":54,"line":136},[52,134424,134425],{"class":58},".fixed",[52,134427,82735],{"class":622},[52,134429,131280],{"class":90},[52,134431,54368],{"class":622},[52,134433,89161],{"class":90},[52,134435,131850],{"class":622},[52,134437,134438],{"class":54,"line":141},[52,134439,134440],{"class":332},"\u002F* 粘性定位 *\u002F\n",[52,134442,134443,134446,134448,134450,134452,134455],{"class":54,"line":146},[52,134444,134445],{"class":58},".sticky",[52,134447,82735],{"class":622},[52,134449,131280],{"class":90},[52,134451,54368],{"class":622},[52,134453,134454],{"class":90},"sticky",[52,134456,131850],{"class":622},[1070,134458,134459,134462],{"start":157},[1073,134460,134461],{},"一定要用好注释",[1073,134463,134464],{},"浮动的盒子不会有外边距合并的问题",[3015,134466,133808],{},{"title":28,"searchDepth":69,"depth":69,"links":134468},[134469,134470],{"id":133845,"depth":69,"text":133846},{"id":133909,"depth":69,"text":133910,"children":134471},[134472,134473,134474,134475,134476,134477,134478],{"id":133913,"depth":82,"text":133914},{"id":134019,"depth":82,"text":134020},{"id":134055,"depth":82,"text":134056},{"id":134076,"depth":82,"text":134077},{"id":134111,"depth":82,"text":134112},{"id":134144,"depth":82,"text":134145},{"id":134219,"depth":82,"text":134220},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133837,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134485,"title":134486,"body":134487,"description":3046,"extension":3047,"meta":135973,"navigation":115,"path":135974,"seo":135975,"stem":135976,"__hash__":135977},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134488,"toc":135965},[134489,134492,134496,134500,134511,134515,134532,134576,134609,134612,134629,134632,134635,134679,134683,134687,134690,134693,134697,134700,134711,134774,134815,134818,134833,134887,134895,134898,134909,134963,134989,134992,135005,135059,135091,135145,135168,135222,135225,135228,135235,135289,135310,135364,135367,135370,135455,135463,135520,135543,135547,135550,135568,135572,135591,135645,135683,135687,135690,135693,135715,135719,135727,135730,135735,135746,135749,135753,135767,135811,135814,135818,135821,135826,135852,135857,135934,135937,135941,135944,135947,135950,135953,135956,135959,135962],[10,134490,134486],{"id":134491},"_11-传统布局与定位体系",[14,134493,134495],{"id":134494},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[30,134497,134499],{"id":134498},"_1111-普通流标准流","11.1.1 普通流（标准流）",[4118,134501,134502,134505,134508],{},[1073,134503,134504],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[1073,134506,134507],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[1073,134509,134510],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[30,134512,134514],{"id":134513},"_1112-浮动","11.1.2 浮动",[4118,134516,134517,134520,134523,134526,134529],{},[1073,134518,134519],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[1073,134521,134522],{},"浮动可以改变元素标签默认的排列方式",[1073,134524,134525],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[1073,134527,134528],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[1073,134530,134531],{},"在使用行内块转换时盒子之间是有空隙的",[19,134533,134534],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,134535,134536,134542,134552,134556,134562,134572],{"__ignoreMap":28},[52,134537,134538,134540],{"class":54,"line":55},[52,134539,133393],{"class":58},[52,134541,18528],{"class":622},[52,134543,134544,134546,134548,134550],{"class":54,"line":69},[52,134545,133400],{"class":90},[52,134547,54368],{"class":622},[52,134549,26688],{"class":90},[52,134551,4272],{"class":622},[52,134553,134554],{"class":54,"line":82},[52,134555,4543],{"class":622},[52,134557,134558,134560],{"class":54,"line":97},[52,134559,133415],{"class":58},[52,134561,18528],{"class":622},[52,134563,134564,134566,134568,134570],{"class":54,"line":112},[52,134565,133400],{"class":90},[52,134567,54368],{"class":622},[52,134569,75450],{"class":90},[52,134571,4272],{"class":622},[52,134573,134574],{"class":54,"line":119},[52,134575,4543],{"class":622},[3253,134577,134578,134586],{},[3256,134579,134580],{},[3259,134581,134582,134584],{},[3262,134583,129384],{"align":26688},[3262,134585,30424],{"align":26688},[3299,134587,134588,134595,134602],{},[3259,134589,134590,134592],{},[3304,134591,57667],{"align":26688},[3304,134593,134594],{"align":26688},"元素不浮动（默认值）",[3259,134596,134597,134599],{},[3304,134598,26688],{"align":26688},[3304,134600,134601],{"align":26688},"元素向左浮动",[3259,134603,134604,134606],{},[3304,134605,75450],{"align":26688},[3304,134607,134608],{"align":26688},"元素向右浮动",[274,134610,134611],{},"浮动重点：",[4118,134613,134614,134617,134620,134623,134626],{},[1073,134615,134616],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[1073,134618,134619],{},"浮动的元素会一行内显示并且元素顶部对齐",[1073,134621,134622],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[1073,134624,134625],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[1073,134627,134628],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[274,134630,134631],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[274,134633,134634],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[19,134636,134637],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,134638,134639,134645,134655,134659,134665,134675],{"__ignoreMap":28},[52,134640,134641,134643],{"class":54,"line":55},[52,134642,133393],{"class":58},[52,134644,18528],{"class":622},[52,134646,134647,134649,134651,134653],{"class":54,"line":69},[52,134648,133400],{"class":90},[52,134650,54368],{"class":622},[52,134652,26688],{"class":90},[52,134654,4272],{"class":622},[52,134656,134657],{"class":54,"line":82},[52,134658,4543],{"class":622},[52,134660,134661,134663],{"class":54,"line":97},[52,134662,133415],{"class":58},[52,134664,18528],{"class":622},[52,134666,134667,134669,134671,134673],{"class":54,"line":112},[52,134668,133400],{"class":90},[52,134670,54368],{"class":622},[52,134672,75450],{"class":90},[52,134674,4272],{"class":622},[52,134676,134677],{"class":54,"line":119},[52,134678,4543],{"class":622},[30,134680,134682],{"id":134681},"_1113-定位","11.1.3 定位",[1486,134684,134686],{"id":134685},"_11131-使用场景","11.1.3.1 使用场景",[274,134688,134689],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[274,134691,134692],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[1486,134694,134696],{"id":134695},"_11132-定位组成","11.1.3.2 定位组成",[274,134698,134699],{},"定位 = 定位模式 + 边偏移",[1070,134701,134702],{},[1073,134703,134704,134707,134708],{},[538,134705,134706],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[538,134709,134710],{},"定位模式",[19,134712,134714],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[26,134715,134716,134722,134736,134753,134770],{"__ignoreMap":28},[52,134717,134718,134720],{"class":54,"line":55},[52,134719,132768],{"class":58},[52,134721,18528],{"class":622},[52,134723,134724,134727,134729,134731,134733],{"class":54,"line":69},[52,134725,134726],{"class":90},"  position",[52,134728,54368],{"class":622},[52,134730,57694],{"class":90},[52,134732,132783],{"class":622},[52,134734,134735],{"class":332},"\u002F* 定位模式 *\u002F\n",[52,134737,134738,134741,134743,134745,134747,134750],{"class":54,"line":82},[52,134739,134740],{"class":90},"  top",[52,134742,54368],{"class":622},[52,134744,3559],{"class":90},[52,134746,54423],{"class":160},[52,134748,134749],{"class":622},";           ",[52,134751,134752],{"class":332},"\u002F* 边偏移：上 *\u002F\n",[52,134754,134755,134758,134760,134762,134764,134767],{"class":54,"line":97},[52,134756,134757],{"class":90},"  left",[52,134759,54368],{"class":622},[52,134761,3812],{"class":90},[52,134763,54423],{"class":160},[52,134765,134766],{"class":622},";          ",[52,134768,134769],{"class":332},"\u002F* 边偏移：左 *\u002F\n",[52,134771,134772],{"class":54,"line":112},[52,134773,4543],{"class":622},[3253,134775,134776,134785],{},[3256,134777,134778],{},[3259,134779,134780,134782],{},[3262,134781,3267],{"align":26688},[3262,134783,134784],{"align":26688},"语义",[3299,134786,134787,134794,134801,134808],{},[3259,134788,134789,134791],{},[3304,134790,134373],{"align":26688},[3304,134792,134793],{"align":26688},"静态定位",[3259,134795,134796,134798],{},[3304,134797,57694],{"align":26688},[3304,134799,134800],{"align":26688},"相对定位",[3259,134802,134803,134805],{},[3304,134804,57761],{"align":26688},[3304,134806,134807],{"align":26688},"绝对定位",[3259,134809,134810,134812],{},[3304,134811,89161],{"align":26688},[3304,134813,134814],{"align":26688},"固定定位",[274,134816,134817],{},"（1）静态定位：",[4118,134819,134820,134831],{},[1073,134821,134822,134823,134826,134827,134830],{},"静态定位是元素的 ",[538,134824,134825],{},"默认定位方式"," ， ",[538,134828,134829],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[1073,134832,8140],{},[19,134834,134835],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,134836,134837,134843,134855,134869,134883],{"__ignoreMap":28},[52,134838,134839,134841],{"class":54,"line":55},[52,134840,132768],{"class":58},[52,134842,18528],{"class":622},[52,134844,134845,134847,134849,134851,134853],{"class":54,"line":69},[52,134846,134726],{"class":90},[52,134848,54368],{"class":622},[52,134850,57694],{"class":90},[52,134852,132783],{"class":622},[52,134854,134735],{"class":332},[52,134856,134857,134859,134861,134863,134865,134867],{"class":54,"line":82},[52,134858,134740],{"class":90},[52,134860,54368],{"class":622},[52,134862,3559],{"class":90},[52,134864,54423],{"class":160},[52,134866,134749],{"class":622},[52,134868,134752],{"class":332},[52,134870,134871,134873,134875,134877,134879,134881],{"class":54,"line":97},[52,134872,134757],{"class":90},[52,134874,54368],{"class":622},[52,134876,3812],{"class":90},[52,134878,54423],{"class":160},[52,134880,134766],{"class":622},[52,134882,134769],{"class":332},[52,134884,134885],{"class":54,"line":112},[52,134886,4543],{"class":622},[4118,134888,134889,134892],{},[1073,134890,134891],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[1073,134893,134894],{},"静态定位在布局时我们几乎不用的",[274,134896,134897],{},"（2）相对定位",[4118,134899,134900,134907],{},[1073,134901,134902,134903,134906],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[538,134904,134905],{},"原来的位置"," 来说的（自恋型）",[1073,134908,8140],{},[19,134910,134911],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,134912,134913,134919,134931,134945,134959],{"__ignoreMap":28},[52,134914,134915,134917],{"class":54,"line":55},[52,134916,132768],{"class":58},[52,134918,18528],{"class":622},[52,134920,134921,134923,134925,134927,134929],{"class":54,"line":69},[52,134922,134726],{"class":90},[52,134924,54368],{"class":622},[52,134926,57694],{"class":90},[52,134928,132783],{"class":622},[52,134930,134735],{"class":332},[52,134932,134933,134935,134937,134939,134941,134943],{"class":54,"line":82},[52,134934,134740],{"class":90},[52,134936,54368],{"class":622},[52,134938,3559],{"class":90},[52,134940,54423],{"class":160},[52,134942,134749],{"class":622},[52,134944,134752],{"class":332},[52,134946,134947,134949,134951,134953,134955,134957],{"class":54,"line":97},[52,134948,134757],{"class":90},[52,134950,54368],{"class":622},[52,134952,3812],{"class":90},[52,134954,54423],{"class":160},[52,134956,134766],{"class":622},[52,134958,134769],{"class":332},[52,134960,134961],{"class":54,"line":112},[52,134962,4543],{"class":622},[4118,134964,134965],{},[1073,134966,134967,134968,134970,134971,134973,134974,134977,134978,134981,134982,134984,134985,134988],{},"相对定位的特点：",[56646,134969],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[56646,134972],{},"  ② ",[538,134975,134976],{},"原来"," 在标准流的 ",[538,134979,134980],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[56646,134983],{},"  ③因此， ",[538,134986,134987],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[274,134990,134991],{},"（3）绝对定位",[4118,134993,134994,135003],{},[1073,134995,134996,134998,134999,135002],{},[538,134997,134807],{}," 是元素在移动位置的时候，是相对于它 ",[538,135000,135001],{},"祖先元素"," 来说的（拼爹型）",[1073,135004,8140],{},[19,135006,135007],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,135008,135009,135015,135027,135041,135055],{"__ignoreMap":28},[52,135010,135011,135013],{"class":54,"line":55},[52,135012,132768],{"class":58},[52,135014,18528],{"class":622},[52,135016,135017,135019,135021,135023,135025],{"class":54,"line":69},[52,135018,134726],{"class":90},[52,135020,54368],{"class":622},[52,135022,57694],{"class":90},[52,135024,132783],{"class":622},[52,135026,134735],{"class":332},[52,135028,135029,135031,135033,135035,135037,135039],{"class":54,"line":82},[52,135030,134740],{"class":90},[52,135032,54368],{"class":622},[52,135034,3559],{"class":90},[52,135036,54423],{"class":160},[52,135038,134749],{"class":622},[52,135040,134752],{"class":332},[52,135042,135043,135045,135047,135049,135051,135053],{"class":54,"line":97},[52,135044,134757],{"class":90},[52,135046,54368],{"class":622},[52,135048,3812],{"class":90},[52,135050,54423],{"class":160},[52,135052,134766],{"class":622},[52,135054,134769],{"class":332},[52,135056,135057],{"class":54,"line":112},[52,135058,4543],{"class":622},[4118,135060,135061,135076,135085,135088],{},[1073,135062,135063,135064,135066,135067,135069,135070,135072,135073,135075],{},"绝对定位的特点：",[56646,135065],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[56646,135068],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[56646,135071],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[56646,135074],{},"  (4)固定定位",[1073,135077,135078,135080,135081,135084],{},[538,135079,134814],{}," 是元素 ",[538,135082,135083],{},"固定于浏览器可视区的位置"," 。（认死理型）",[1073,135086,135087],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[1073,135089,135090],{},"语法:",[19,135092,135093],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,135094,135095,135101,135113,135127,135141],{"__ignoreMap":28},[52,135096,135097,135099],{"class":54,"line":55},[52,135098,132768],{"class":58},[52,135100,18528],{"class":622},[52,135102,135103,135105,135107,135109,135111],{"class":54,"line":69},[52,135104,134726],{"class":90},[52,135106,54368],{"class":622},[52,135108,57694],{"class":90},[52,135110,132783],{"class":622},[52,135112,134735],{"class":332},[52,135114,135115,135117,135119,135121,135123,135125],{"class":54,"line":82},[52,135116,134740],{"class":90},[52,135118,54368],{"class":622},[52,135120,3559],{"class":90},[52,135122,54423],{"class":160},[52,135124,134749],{"class":622},[52,135126,134752],{"class":332},[52,135128,135129,135131,135133,135135,135137,135139],{"class":54,"line":97},[52,135130,134757],{"class":90},[52,135132,54368],{"class":622},[52,135134,3812],{"class":90},[52,135136,54423],{"class":160},[52,135138,134766],{"class":622},[52,135140,134769],{"class":332},[52,135142,135143],{"class":54,"line":112},[52,135144,4543],{"class":622},[4118,135146,135147,135156],{},[1073,135148,135149,135150,135152,135153,135155],{},"特点:",[56646,135151],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[56646,135154],{},"  ②固定定位不再占有原先的位置,完全脱标",[1073,135157,135158,135159,135161,135162,135164,135165,135167],{},"固定在版心位置的方法:",[56646,135160],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[56646,135163],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[56646,135166],{},"  实例：",[19,135169,135170],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,135171,135172,135178,135190,135204,135218],{"__ignoreMap":28},[52,135173,135174,135176],{"class":54,"line":55},[52,135175,132768],{"class":58},[52,135177,18528],{"class":622},[52,135179,135180,135182,135184,135186,135188],{"class":54,"line":69},[52,135181,134726],{"class":90},[52,135183,54368],{"class":622},[52,135185,57694],{"class":90},[52,135187,132783],{"class":622},[52,135189,134735],{"class":332},[52,135191,135192,135194,135196,135198,135200,135202],{"class":54,"line":82},[52,135193,134740],{"class":90},[52,135195,54368],{"class":622},[52,135197,3559],{"class":90},[52,135199,54423],{"class":160},[52,135201,134749],{"class":622},[52,135203,134752],{"class":332},[52,135205,135206,135208,135210,135212,135214,135216],{"class":54,"line":97},[52,135207,134757],{"class":90},[52,135209,54368],{"class":622},[52,135211,3812],{"class":90},[52,135213,54423],{"class":160},[52,135215,134766],{"class":622},[52,135217,134769],{"class":332},[52,135219,135220],{"class":54,"line":112},[52,135221,4543],{"class":622},[280,135223],{"style":128776,"src":135224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[274,135226,135227],{},"(5)粘性定位",[4118,135229,135230,135233],{},[1073,135231,135232],{},"粘性定位可以被认为是相对定位和固定定位的混合",[1073,135234,8140],{},[19,135236,135237],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,135238,135239,135245,135257,135271,135285],{"__ignoreMap":28},[52,135240,135241,135243],{"class":54,"line":55},[52,135242,132768],{"class":58},[52,135244,18528],{"class":622},[52,135246,135247,135249,135251,135253,135255],{"class":54,"line":69},[52,135248,134726],{"class":90},[52,135250,54368],{"class":622},[52,135252,57694],{"class":90},[52,135254,132783],{"class":622},[52,135256,134735],{"class":332},[52,135258,135259,135261,135263,135265,135267,135269],{"class":54,"line":82},[52,135260,134740],{"class":90},[52,135262,54368],{"class":622},[52,135264,3559],{"class":90},[52,135266,54423],{"class":160},[52,135268,134749],{"class":622},[52,135270,134752],{"class":332},[52,135272,135273,135275,135277,135279,135281,135283],{"class":54,"line":97},[52,135274,134757],{"class":90},[52,135276,54368],{"class":622},[52,135278,3812],{"class":90},[52,135280,54423],{"class":160},[52,135282,134766],{"class":622},[52,135284,134769],{"class":332},[52,135286,135287],{"class":54,"line":112},[52,135288,4543],{"class":622},[4118,135290,135291],{},[1073,135292,135293,135294,135296,135297,135299,135300,135302,135303,135306,135307,135309],{},"粘性定位的特点：",[56646,135295],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[56646,135298],{},"  ②粘性定位占有原先的位置（相对定位特点）",[56646,135301],{},"  ③必须添加 top 、left、right、bottom ",[538,135304,135305],{},"其中一个"," 才有效",[56646,135308],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[19,135311,135312],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,135313,135314,135320,135332,135346,135360],{"__ignoreMap":28},[52,135315,135316,135318],{"class":54,"line":55},[52,135317,132768],{"class":58},[52,135319,18528],{"class":622},[52,135321,135322,135324,135326,135328,135330],{"class":54,"line":69},[52,135323,134726],{"class":90},[52,135325,54368],{"class":622},[52,135327,57694],{"class":90},[52,135329,132783],{"class":622},[52,135331,134735],{"class":332},[52,135333,135334,135336,135338,135340,135342,135344],{"class":54,"line":82},[52,135335,134740],{"class":90},[52,135337,54368],{"class":622},[52,135339,3559],{"class":90},[52,135341,54423],{"class":160},[52,135343,134749],{"class":622},[52,135345,134752],{"class":332},[52,135347,135348,135350,135352,135354,135356,135358],{"class":54,"line":97},[52,135349,134757],{"class":90},[52,135351,54368],{"class":622},[52,135353,3812],{"class":90},[52,135355,54423],{"class":160},[52,135357,134766],{"class":622},[52,135359,134769],{"class":332},[52,135361,135362],{"class":54,"line":112},[52,135363,4543],{"class":622},[280,135365],{"style":128776,"src":135366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[274,135368,135369],{},"(6)总结",[3253,135371,135372,135387],{},[3256,135373,135374],{},[3259,135375,135376,135378,135381,135384],{},[3262,135377,134710],{"align":26688},[3262,135379,135380],{"align":26688},"是否脱标",[3262,135382,135383],{"align":26688},"移动位置",[3262,135385,135386],{"align":26688},"是否常用",[3299,135388,135389,135402,135416,135430,135443],{},[3259,135390,135391,135394,135396,135399],{},[3304,135392,135393],{"align":26688},"Static 静态定位",[3304,135395,107598],{"align":26688},[3304,135397,135398],{"align":26688},"不能使用边偏移",[3304,135400,135401],{"align":26688},"很少",[3259,135403,135404,135407,135410,135413],{},[3304,135405,135406],{"align":26688},"Relative 相对定位",[3304,135408,135409],{"align":26688},"否(占有位置)",[3304,135411,135412],{"align":26688},"相对于自身位置移动",[3304,135414,135415],{"align":26688},"基本单独使用",[3259,135417,135418,135421,135424,135427],{},[3304,135419,135420],{"align":26688},"Absolute 绝对定位",[3304,135422,135423],{"align":26688},"是(不占有位置)",[3304,135425,135426],{"align":26688},"带有定位的父级",[3304,135428,135429],{"align":26688},"要和定位父级元素搭配使用",[3259,135431,135432,135435,135437,135440],{},[3304,135433,135434],{"align":26688},"Fixed 固定定位",[3304,135436,135423],{"align":26688},[3304,135438,135439],{"align":26688},"浏览器可视区",[3304,135441,135442],{"align":26688},"单独使用,不需要父级",[3259,135444,135445,135448,135450,135452],{},[3304,135446,135447],{"align":26688},"Sticky 粘性定位",[3304,135449,135409],{"align":26688},[3304,135451,135439],{"align":26688},[3304,135453,135454],{"align":26688},"当前阶段少",[1070,135456,135457],{"start":69},[1073,135458,135459,135462],{},[538,135460,135461],{},"边偏移"," 则决定了该元素的最终位置",[3253,135464,135465,135476],{},[3256,135466,135467],{},[3259,135468,135469,135472,135474],{},[3262,135470,135471],{"align":26688},"边偏移属性",[3262,135473,30427],{"align":26688},[3262,135475,30424],{"align":26688},[3299,135477,135478,135489,135500,135510],{},[3259,135479,135480,135483,135486],{},[3304,135481,135482],{"align":26688},"top",[3304,135484,135485],{"align":26688},"top: 80px;",[3304,135487,135488],{"align":26688},"顶端偏移量，定义元素相对于父元素上边线的距离",[3259,135490,135491,135494,135497],{},[3304,135492,135493],{"align":26688},"bottom",[3304,135495,135496],{"align":26688},"bottom: 80px ;",[3304,135498,135499],{"align":26688},"底部偏移量，定义元素相对于其父元素下边线的距离",[3259,135501,135502,135504,135507],{},[3304,135503,26688],{"align":26688},[3304,135505,135506],{"align":26688},"left: 80px ;",[3304,135508,135509],{"align":26688},"左侧偏移量，定义元素相对于其父元素左边线的距离",[3259,135511,135512,135514,135517],{},[3304,135513,75450],{"align":26688},[3304,135515,135516],{"align":26688},"right: 80px ;",[3304,135518,135519],{"align":26688},"右侧偏移量，定义元素相对于其父元素右边线的距离",[4118,135521,135522],{},[1073,135523,11981,135524,135526,135527,135529,135530,135532,135533,135536,135537,135539,135540,135542],{},[56646,135525],{},"  ① ",[538,135528,135461],{}," 需要和 ",[538,135531,134710],{}," 联合使用， ",[538,135534,135535],{},"单独使用无效"," ；",[56646,135538],{},"  ②top和bottom不要同时使用",[56646,135541],{},"  ③left和right不要同时使用",[1486,135544,135546],{"id":135545},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[274,135548,135549],{},"子级是绝对定位的话，父级要用相对定位",[4118,135551,135552,135555,135558,135561],{},[1073,135553,135554],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[1073,135556,135557],{},"父盒子需要加定位限制子盒子在父盒子内显示",[1073,135559,135560],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[1073,135562,135563,135564,135567],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[538,135565,135566],{},"子绝父绝"," 也会遇到",[1486,135569,135571],{"id":135570},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[4118,135573,135574,135589],{},[1073,135575,135576,135577,135580,135581,135584,135585,135588],{},"在使用 ",[538,135578,135579],{},"定位"," 布局时，可能会 ",[538,135582,135583],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[538,135586,135587],{},"z-index"," 来控制盒子的前后次序 (z轴)",[1073,135590,8140],{},[19,135592,135593],{"className":128920,"code":134713,"language":128922,"meta":28,"style":28},[26,135594,135595,135601,135613,135627,135641],{"__ignoreMap":28},[52,135596,135597,135599],{"class":54,"line":55},[52,135598,132768],{"class":58},[52,135600,18528],{"class":622},[52,135602,135603,135605,135607,135609,135611],{"class":54,"line":69},[52,135604,134726],{"class":90},[52,135606,54368],{"class":622},[52,135608,57694],{"class":90},[52,135610,132783],{"class":622},[52,135612,134735],{"class":332},[52,135614,135615,135617,135619,135621,135623,135625],{"class":54,"line":82},[52,135616,134740],{"class":90},[52,135618,54368],{"class":622},[52,135620,3559],{"class":90},[52,135622,54423],{"class":160},[52,135624,134749],{"class":622},[52,135626,134752],{"class":332},[52,135628,135629,135631,135633,135635,135637,135639],{"class":54,"line":97},[52,135630,134757],{"class":90},[52,135632,54368],{"class":622},[52,135634,3812],{"class":90},[52,135636,54423],{"class":160},[52,135638,134766],{"class":622},[52,135640,134769],{"class":332},[52,135642,135643],{"class":54,"line":112},[52,135644,4543],{"class":622},[4118,135646,135647],{},[1073,135648,135649,135650,135526,135652,135654,135655,130083,135658,85467,135661,135663,135664,135666,135667,135670,135671,135536,135674,135676,135677,135680,135682],{},"z-index的特性",[56646,135651],{},[538,135653,129384],{}," ： ",[538,135656,135657],{},"正整数",[538,135659,135660],{},"负整数",[538,135662,3306],{}," ，默认值是 0，数值越大，盒子越靠上；",[56646,135665],{},"  ②如果 ",[538,135668,135669],{},"属性值相同"," ，则按照书写顺序， ",[538,135672,135673],{},"后来居上",[56646,135675],{},"  ③数字后面 ",[538,135678,135679],{},"不能加单位",[56646,135681],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[1486,135684,135686],{"id":135685},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[274,135688,135689],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[274,135691,135692],{},"方法:",[4118,135694,135695,135705],{},[1073,135696,135697,135698,135701,135702],{},"left: 50%; 让 ",[538,135699,135700],{},"盒子的左侧"," 移动到 ",[538,135703,135704],{},"父级元素的水平中心位置",[1073,135706,135707,135708,135711,135712],{},"margin-left: -100px; 让盒子 ",[538,135709,135710],{},"向左"," 移动 ",[538,135713,135714],{},"自身宽度的一半",[1486,135716,135718],{"id":135717},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1070,135720,135721,135724],{},[1073,135722,135723],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[1073,135725,135726],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[274,135728,135729],{},"也就是说绝对定位和固定定位和浮动类似",[1070,135731,135732],{"start":82},[1073,135733,135734],{},"display 是显示模式， 可以改变显示模式有以下方式:",[4118,135736,135737,135740,135743],{},[1073,135738,135739],{},"可以用inline-block 转换为行内块",[1073,135741,135742],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[1073,135744,135745],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[274,135747,135748],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[1486,135750,135752],{"id":135751},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1070,135754,135755,135758,135761,135764],{},[1073,135756,135757],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[1073,135759,135760],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[1073,135762,135763],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[1073,135765,135766],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[19,135768,135769],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,135770,135771,135777,135787,135791,135797,135807],{"__ignoreMap":28},[52,135772,135773,135775],{"class":54,"line":55},[52,135774,133393],{"class":58},[52,135776,18528],{"class":622},[52,135778,135779,135781,135783,135785],{"class":54,"line":69},[52,135780,133400],{"class":90},[52,135782,54368],{"class":622},[52,135784,26688],{"class":90},[52,135786,4272],{"class":622},[52,135788,135789],{"class":54,"line":82},[52,135790,4543],{"class":622},[52,135792,135793,135795],{"class":54,"line":97},[52,135794,133415],{"class":58},[52,135796,18528],{"class":622},[52,135798,135799,135801,135803,135805],{"class":54,"line":112},[52,135800,133400],{"class":90},[52,135802,54368],{"class":622},[52,135804,75450],{"class":90},[52,135806,4272],{"class":622},[52,135808,135809],{"class":54,"line":119},[52,135810,4543],{"class":622},[280,135812],{"style":128776,"src":135813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[1486,135815,135817],{"id":135816},"_11138-轮播图","11.1.3.8 轮播图",[280,135819],{"style":128776,"src":135820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1070,135822,135823],{},[1073,135824,135825],{},"制作顺序:",[4118,135827,135828,135831,135834,135843],{},[1073,135829,135830],{},"大盒子我们类名为： tb-promo 淘宝广告",[1073,135832,135833],{},"里面先放一张图片",[1073,135835,135836,135837,135839,135840,135842],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[56646,135838],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[56646,135841],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[1073,135844,135845,135846,135848,135849,135851],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[56646,135847],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[56646,135850],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1070,135853,135854],{"start":69},[1073,135855,135856],{},"代码模块",[19,135858,135860],{"className":128920,"code":135859,"language":128922,"meta":28,"style":28},"\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",[26,135861,135862,135867,135874,135884,135894,135904,135908,135913,135920,135930],{"__ignoreMap":28},[52,135863,135864],{"class":54,"line":55},[52,135865,135866],{"class":332},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[52,135868,135869,135872],{"class":54,"line":69},[52,135870,135871],{"class":58},".son",[52,135873,18528],{"class":622},[52,135875,135876,135878,135880,135882],{"class":54,"line":82},[52,135877,134726],{"class":90},[52,135879,54368],{"class":622},[52,135881,57761],{"class":90},[52,135883,4272],{"class":622},[52,135885,135886,135888,135890,135892],{"class":54,"line":97},[52,135887,134740],{"class":90},[52,135889,54368],{"class":622},[52,135891,3306],{"class":90},[52,135893,4272],{"class":622},[52,135895,135896,135898,135900,135902],{"class":54,"line":112},[52,135897,134757],{"class":90},[52,135899,54368],{"class":622},[52,135901,3306],{"class":90},[52,135903,4272],{"class":622},[52,135905,135906],{"class":54,"line":119},[52,135907,4543],{"class":622},[52,135909,135910],{"class":54,"line":130},[52,135911,135912],{"class":332},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[52,135914,135915,135918],{"class":54,"line":136},[52,135916,135917],{"class":58},".father",[52,135919,18528],{"class":622},[52,135921,135922,135924,135926,135928],{"class":54,"line":141},[52,135923,134726],{"class":90},[52,135925,54368],{"class":622},[52,135927,57694],{"class":90},[52,135929,4272],{"class":622},[52,135931,135932],{"class":54,"line":146},[52,135933,4543],{"class":622},[274,135935,135936],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[30,135938,135940],{"id":135939},"_1114-定位数值的移动","11.1.4 定位数值的移动",[280,135942],{"style":128776,"src":135943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[274,135945,135946],{},"✨ 黄金口诀：",[274,135948,135949],{},"\"TOP正下负上，LEFT正右负左\"",[274,135951,135952],{},"\"RIGHT正左负右，BOTTOM正上负下",[274,135954,135955],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[274,135957,135958],{},"✨ 简单记：",[274,135960,135961],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[3015,135963,135964],{},"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":28,"searchDepth":69,"depth":69,"links":135966},[135967],{"id":134494,"depth":69,"text":134495,"children":135968},[135969,135970,135971,135972],{"id":134498,"depth":82,"text":134499},{"id":134513,"depth":82,"text":134514},{"id":134681,"depth":82,"text":134682},{"id":135939,"depth":82,"text":135940},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134486,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135979,"title":135980,"body":135981,"description":3046,"extension":3047,"meta":137404,"navigation":115,"path":137405,"seo":137406,"stem":137407,"__hash__":137408},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135982,"toc":137383},[135983,135986,135990,135998,136002,136007,136015,136027,136031,136036,136044,136055,136059,136064,136105,136113,136117,136120,136123,136126,136220,136223,136317,136320,136414,136417,136420,136455,136458,136461,136491,136494,136497,136500,136503,136506,136509,136512,136582,136585,136589,136593,136634,136638,136644,136647,136650,136654,136657,136660,136663,136744,136747,136750,136754,136758,136761,136764,136767,136770,136773,136779,136788,136792,136811,136815,136825,136828,136831,136834,136837,136840,136843,136846,136849,136858,136862,136871,136874,136879,136932,136937,137103,137106,137109,137114,137117,137120,137123,137126,137131,137279,137282,137285,137290,137293,137298,137332,137335,137338,137342,137345,137352,137355,137358,137361,137364,137367,137370,137373,137377,137380],[10,135984,135980],{"id":135985},"_12-显示隐藏与图形资源",[14,135987,135989],{"id":135988},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[4118,135991,135992,135995],{},[1073,135993,135994],{},"目的:让一个元素在页面中消失或者显示出来",[1073,135996,135997],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[30,135999,136001],{"id":136000},"_1211-display-显示","12.1.1 display 显示",[1070,136003,136004],{},[1073,136005,136006],{},"display 设置或检索对象是否及如何显示",[4118,136008,136009,136012],{},[1073,136010,136011],{},"display: none;隐藏对象",[1073,136013,136014],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1070,136016,136017,136024],{"start":69},[1073,136018,136019,136020,136023],{},"特点： display 隐藏元素后， ",[538,136021,136022],{},"不再占"," 有原来的位置",[1073,136025,136026],{},"在js中使用非常的广泛",[30,136028,136030],{"id":136029},"_1212-visibility可见性","12.1.2 visibility可见性",[1070,136032,136033],{},[1073,136034,136035],{},"visibility 属性用于指定一个元素应可见还是隐藏",[4118,136037,136038,136041],{},[1073,136039,136040],{},"visibility： visible；元素可见",[1073,136042,136043],{},"visibility：hidden；元素隐藏",[1070,136045,136046,136049,136052],{"start":69},[1073,136047,136048],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[1073,136050,136051],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[1073,136053,136054],{},"隐藏后继续占有原有位置",[30,136056,136058],{"id":136057},"_1213-overflow溢出","12.1.3 overflow溢出",[4118,136060,136061],{},[1073,136062,136063],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[3253,136065,136066,136074],{},[3256,136067,136068],{},[3259,136069,136070,136072],{},[3262,136071,129384],{"align":26688},[3262,136073,30424],{"align":26688},[3299,136075,136076,136084,136091,136098],{},[3259,136077,136078,136081],{},[3304,136079,136080],{"align":26688},"visible",[3304,136082,136083],{"align":26688},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[3259,136085,136086,136088],{},[3304,136087,64644],{"align":26688},[3304,136089,136090],{"align":26688},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[3259,136092,136093,136095],{},[3304,136094,131340],{"align":26688},[3304,136096,136097],{"align":26688},"不管超出内容否，总是显示滚动条",[3259,136099,136100,136102],{},[3304,136101,75591],{"align":26688},[3304,136103,136104],{"align":26688},"超出自动显示滚动条，不超出不显示滚动条",[4118,136106,136107,136110],{},[1073,136108,136109],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[1073,136111,136112],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[30,136114,136116],{"id":136115},"_1214-案例收获","12.1.4 案例收获",[280,136118],{"style":128776,"src":136119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[274,136121,136122],{},"问题：没做出来动态效果，使用hover没实现",[274,136124,136125],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[19,136127,136128],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},[26,136129,136130,136134,136148,136152,136166,136170,136184,136188,136202,136206],{"__ignoreMap":28},[52,136131,136132],{"class":54,"line":55},[52,136133,134359],{"class":332},[52,136135,136136,136138,136140,136142,136144,136146],{"class":54,"line":69},[52,136137,134364],{"class":58},[52,136139,82735],{"class":622},[52,136141,131280],{"class":90},[52,136143,54368],{"class":622},[52,136145,134373],{"class":90},[52,136147,131850],{"class":622},[52,136149,136150],{"class":54,"line":82},[52,136151,134380],{"class":332},[52,136153,136154,136156,136158,136160,136162,136164],{"class":54,"line":97},[52,136155,134385],{"class":58},[52,136157,82735],{"class":622},[52,136159,131280],{"class":90},[52,136161,54368],{"class":622},[52,136163,57694],{"class":90},[52,136165,131850],{"class":622},[52,136167,136168],{"class":54,"line":112},[52,136169,134400],{"class":332},[52,136171,136172,136174,136176,136178,136180,136182],{"class":54,"line":119},[52,136173,134405],{"class":58},[52,136175,82735],{"class":622},[52,136177,131280],{"class":90},[52,136179,54368],{"class":622},[52,136181,57761],{"class":90},[52,136183,131850],{"class":622},[52,136185,136186],{"class":54,"line":130},[52,136187,134420],{"class":332},[52,136189,136190,136192,136194,136196,136198,136200],{"class":54,"line":136},[52,136191,134425],{"class":58},[52,136193,82735],{"class":622},[52,136195,131280],{"class":90},[52,136197,54368],{"class":622},[52,136199,89161],{"class":90},[52,136201,131850],{"class":622},[52,136203,136204],{"class":54,"line":141},[52,136205,134440],{"class":332},[52,136207,136208,136210,136212,136214,136216,136218],{"class":54,"line":146},[52,136209,134445],{"class":58},[52,136211,82735],{"class":622},[52,136213,131280],{"class":90},[52,136215,54368],{"class":622},[52,136217,134454],{"class":90},[52,136219,131850],{"class":622},[274,136221,136222],{},"完整代码：",[19,136224,136225],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},[26,136226,136227,136231,136245,136249,136263,136267,136281,136285,136299,136303],{"__ignoreMap":28},[52,136228,136229],{"class":54,"line":55},[52,136230,134359],{"class":332},[52,136232,136233,136235,136237,136239,136241,136243],{"class":54,"line":69},[52,136234,134364],{"class":58},[52,136236,82735],{"class":622},[52,136238,131280],{"class":90},[52,136240,54368],{"class":622},[52,136242,134373],{"class":90},[52,136244,131850],{"class":622},[52,136246,136247],{"class":54,"line":82},[52,136248,134380],{"class":332},[52,136250,136251,136253,136255,136257,136259,136261],{"class":54,"line":97},[52,136252,134385],{"class":58},[52,136254,82735],{"class":622},[52,136256,131280],{"class":90},[52,136258,54368],{"class":622},[52,136260,57694],{"class":90},[52,136262,131850],{"class":622},[52,136264,136265],{"class":54,"line":112},[52,136266,134400],{"class":332},[52,136268,136269,136271,136273,136275,136277,136279],{"class":54,"line":119},[52,136270,134405],{"class":58},[52,136272,82735],{"class":622},[52,136274,131280],{"class":90},[52,136276,54368],{"class":622},[52,136278,57761],{"class":90},[52,136280,131850],{"class":622},[52,136282,136283],{"class":54,"line":130},[52,136284,134420],{"class":332},[52,136286,136287,136289,136291,136293,136295,136297],{"class":54,"line":136},[52,136288,134425],{"class":58},[52,136290,82735],{"class":622},[52,136292,131280],{"class":90},[52,136294,54368],{"class":622},[52,136296,89161],{"class":90},[52,136298,131850],{"class":622},[52,136300,136301],{"class":54,"line":141},[52,136302,134440],{"class":332},[52,136304,136305,136307,136309,136311,136313,136315],{"class":54,"line":146},[52,136306,134445],{"class":58},[52,136308,82735],{"class":622},[52,136310,131280],{"class":90},[52,136312,54368],{"class":622},[52,136314,134454],{"class":90},[52,136316,131850],{"class":622},[274,136318,136319],{},"分布思路重点详解：",[19,136321,136322],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},[26,136323,136324,136328,136342,136346,136360,136364,136378,136382,136396,136400],{"__ignoreMap":28},[52,136325,136326],{"class":54,"line":55},[52,136327,134359],{"class":332},[52,136329,136330,136332,136334,136336,136338,136340],{"class":54,"line":69},[52,136331,134364],{"class":58},[52,136333,82735],{"class":622},[52,136335,131280],{"class":90},[52,136337,54368],{"class":622},[52,136339,134373],{"class":90},[52,136341,131850],{"class":622},[52,136343,136344],{"class":54,"line":82},[52,136345,134380],{"class":332},[52,136347,136348,136350,136352,136354,136356,136358],{"class":54,"line":97},[52,136349,134385],{"class":58},[52,136351,82735],{"class":622},[52,136353,131280],{"class":90},[52,136355,54368],{"class":622},[52,136357,57694],{"class":90},[52,136359,131850],{"class":622},[52,136361,136362],{"class":54,"line":112},[52,136363,134400],{"class":332},[52,136365,136366,136368,136370,136372,136374,136376],{"class":54,"line":119},[52,136367,134405],{"class":58},[52,136369,82735],{"class":622},[52,136371,131280],{"class":90},[52,136373,54368],{"class":622},[52,136375,57761],{"class":90},[52,136377,131850],{"class":622},[52,136379,136380],{"class":54,"line":130},[52,136381,134420],{"class":332},[52,136383,136384,136386,136388,136390,136392,136394],{"class":54,"line":136},[52,136385,134425],{"class":58},[52,136387,82735],{"class":622},[52,136389,131280],{"class":90},[52,136391,54368],{"class":622},[52,136393,89161],{"class":90},[52,136395,131850],{"class":622},[52,136397,136398],{"class":54,"line":141},[52,136399,134440],{"class":332},[52,136401,136402,136404,136406,136408,136410,136412],{"class":54,"line":146},[52,136403,134445],{"class":58},[52,136405,82735],{"class":622},[52,136407,131280],{"class":90},[52,136409,54368],{"class":622},[52,136411,134454],{"class":90},[52,136413,131850],{"class":622},[280,136415],{"style":128776,"src":136416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[274,136418,136419],{},"图片太大，盒子太小，此时需要修改图片的大小",[19,136421,136423],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[26,136424,136425],{"__ignoreMap":28},[52,136426,136427,136429,136431,136433,136435,136438,136440,136442,136445,136448,136450,136453],{"class":54,"line":55},[52,136428,4022],{"class":622},[52,136430,280],{"class":54231},[52,136432,58169],{"class":58},[52,136434,2099],{"class":622},[52,136436,136437],{"class":62},"\"images\u002Fpic.jpg\"",[52,136439,58177],{"class":58},[52,136441,2099],{"class":622},[52,136443,136444],{"class":62},"\"描述文字\"",[52,136446,136447],{"class":58}," title",[52,136449,2099],{"class":622},[52,136451,136452],{"class":62},"\"悬停提示\"",[52,136454,54238],{"class":622},[280,136456],{"style":128776,"src":136457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[274,136459,136460],{},"制造遮罩层",[19,136462,136463],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,136464,136465],{"__ignoreMap":28},[52,136466,136467,136469,136471,136473,136475,136477,136479,136481,136483,136485,136487,136489],{"class":54,"line":55},[52,136468,4022],{"class":622},[52,136470,280],{"class":54231},[52,136472,58169],{"class":58},[52,136474,2099],{"class":622},[52,136476,136437],{"class":62},[52,136478,58177],{"class":58},[52,136480,2099],{"class":622},[52,136482,136444],{"class":62},[52,136484,136447],{"class":58},[52,136486,2099],{"class":622},[52,136488,136452],{"class":62},[52,136490,54238],{"class":622},[274,136492,136493],{},"此时是这样的为标准流",[280,136495],{"style":128776,"src":136496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[274,136498,136499],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[274,136501,136502],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[274,136504,136505],{},"让他在中间，用center(background-position)",[274,136507,136508],{},"将需要变的尽可能放到一个盒子中",[274,136510,136511],{},"放大盒子上内部盒子发生变化",[19,136513,136515],{"className":128920,"code":136514,"language":128922,"meta":28,"style":28},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[26,136516,136517,136523,136533,136537,136544,136554,136566,136578],{"__ignoreMap":28},[52,136518,136519,136521],{"class":54,"line":55},[52,136520,129987],{"class":58},[52,136522,18528],{"class":622},[52,136524,136525,136527,136529,136531],{"class":54,"line":69},[52,136526,134726],{"class":90},[52,136528,54368],{"class":622},[52,136530,57694],{"class":90},[52,136532,4272],{"class":622},[52,136534,136535],{"class":54,"line":82},[52,136536,4543],{"class":622},[52,136538,136539,136542],{"class":54,"line":97},[52,136540,136541],{"class":58},".child",[52,136543,18528],{"class":622},[52,136545,136546,136548,136550,136552],{"class":54,"line":112},[52,136547,134726],{"class":90},[52,136549,54368],{"class":622},[52,136551,57761],{"class":90},[52,136553,4272],{"class":622},[52,136555,136556,136558,136560,136562,136564],{"class":54,"line":119},[52,136557,134740],{"class":90},[52,136559,54368],{"class":622},[52,136561,3768],{"class":90},[52,136563,3441],{"class":160},[52,136565,4272],{"class":622},[52,136567,136568,136570,136572,136574,136576],{"class":54,"line":130},[52,136569,134757],{"class":90},[52,136571,54368],{"class":622},[52,136573,3768],{"class":90},[52,136575,3441],{"class":160},[52,136577,4272],{"class":622},[52,136579,136580],{"class":54,"line":136},[52,136581,4543],{"class":622},[274,136583,136584],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136586,136588],{"id":136587},"_122-精灵图","12.2 精灵图",[30,136590,136592],{"id":136591},"_1221-理解","12.2.1 理解",[1070,136594,136595,136613],{},[1073,136596,136597,136598,134826,136601,136604,136605,136608,136609,136612],{},"目的： ",[538,136599,136600],{},"为了有效地减少服务器接收和发送请求的次数",[538,136602,136603],{},"提高"," 页面的 ",[538,136606,136607],{},"加载速度"," ，出现了 ",[538,136610,136611],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[1073,136614,136615,136616,136618,136619,136621,136622,136624,136625,136627,136628,136630,136631,136633],{},"使用精灵图核心：",[56646,136617],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[56646,136620],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[56646,136623],{},"  ③移动背景图片位置， 此时可以使用 background-position",[56646,136626],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[56646,136629],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[56646,136632],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[30,136635,136637],{"id":136636},"_1222-扒图","12.2.2 扒图",[19,136639,136642],{"className":136640,"code":136641,"language":24},[22],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[26,136643,136641],{"__ignoreMap":28},[280,136645],{"style":128776,"src":136646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[280,136648],{"style":128776,"src":136649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[30,136651,136653],{"id":136652},"_1223-精灵图的实现","12.2.3 精灵图的实现",[280,136655],{"style":128776,"src":136656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[274,136658,136659],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[280,136661],{"style":128776,"src":136662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[19,136664,136666],{"className":128920,"code":136665,"language":128922,"meta":28,"style":28},"\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",[26,136667,136668,136673,136680,136692,136704,136723,136740],{"__ignoreMap":28},[52,136669,136670],{"class":54,"line":55},[52,136671,136672],{"class":332},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[52,136674,136675,136678],{"class":54,"line":69},[52,136676,136677],{"class":58},".icon",[52,136679,18528],{"class":622},[52,136681,136682,136684,136686,136688,136690],{"class":54,"line":82},[52,136683,73496],{"class":90},[52,136685,54368],{"class":622},[52,136687,3812],{"class":90},[52,136689,54423],{"class":160},[52,136691,4272],{"class":622},[52,136693,136694,136696,136698,136700,136702],{"class":54,"line":97},[52,136695,73716],{"class":90},[52,136697,54368],{"class":622},[52,136699,3812],{"class":90},[52,136701,54423],{"class":160},[52,136703,4272],{"class":622},[52,136705,136706,136708,136710,136712,136714,136717,136719,136721],{"class":54,"line":112},[52,136707,73539],{"class":90},[52,136709,54368],{"class":622},[52,136711,64656],{"class":90},[52,136713,3121],{"class":622},[52,136715,136716],{"class":8172},"sprites.png",[52,136718,16670],{"class":622},[52,136720,64666],{"class":90},[52,136722,4272],{"class":622},[52,136724,136725,136727,136729,136731,136733,136736,136738],{"class":54,"line":119},[52,136726,131180],{"class":90},[52,136728,54368],{"class":622},[52,136730,54694],{"class":90},[52,136732,54423],{"class":160},[52,136734,136735],{"class":90}," -20",[52,136737,54423],{"class":160},[52,136739,4272],{"class":622},[52,136741,136742],{"class":54,"line":130},[52,136743,4543],{"class":622},[280,136745],{"style":128776,"src":136746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[274,136748,136749],{},"在前端中坐标轴的正方向是右和下",[14,136751,136753],{"id":136752},"_123-字体图标","12.3 字体图标",[30,136755,136757],{"id":136756},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[274,136759,136760],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[274,136762,136763],{},"精灵图是有诸多优点的，但是缺点很明显。",[274,136765,136766],{},"1.图片文件还是比较大的。",[274,136768,136769],{},"2.图片本身放大和缩小会失真。",[274,136771,136772],{},"3.一旦图片制作完毕想要更换非常复杂。",[274,136774,136775,136776,28685],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[538,136777,136778],{},"字体图标 iconfont",[274,136780,136781,136784,136785,31319],{},[538,136782,136783],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[538,136786,136787],{},"展示的是图标，本质属于字体",[30,136789,136791],{"id":136790},"_1232-字体图标的优点","12.3.2 字体图标的优点",[4118,136793,136794,136799,136802,136805,136808],{},[1073,136795,136796,136798],{},[538,136797,28821],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[1073,136800,136801],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[1073,136803,136804],{},"兼容性：几乎支持所有的浏览器，请放心使用",[1073,136806,136807],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[1073,136809,136810],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[30,136812,136814],{"id":136813},"_1233-字体库下载网站","12.3.3 字体库下载网站",[4118,136816,136817],{},[1073,136818,136819,136820],{},"icomoon字体库：",[300,136821,136824],{"href":136822,"rel":136823},"http:\u002F\u002Ficomoon.io\u002F",[304],"http:\u002F\u002Ficomoon.io",[274,136826,136827],{},"进去之后点icomoon app",[280,136829],{"style":128776,"src":136830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[274,136832,136833],{},"可以对其编辑：",[280,136835],{"style":128776,"src":136836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[274,136838,136839],{},"生成字体：",[280,136841],{"style":128776,"src":136842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[274,136844,136845],{},"下载：",[280,136847],{"style":128776,"src":136848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[4118,136850,136851],{},[1073,136852,136853,136854],{},"阿里iconfont字体库： ",[300,136855,136856],{"href":136856,"rel":136857},"http:\u002F\u002Fwww.iconfont.cn\u002F",[304],[30,136859,136861],{"id":136860},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1070,136863,136864],{},[1073,136865,136866,136867,136870],{},"把下载包里面的 ",[538,136868,136869],{},"fonts"," 文件夹放入页面根目录下",[280,136872],{"style":128776,"src":136873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1070,136875,136876],{"start":69},[1073,136877,136878],{},"字体文件格式",[3253,136880,136881,136890],{},[3256,136882,136883],{},[3259,136884,136885,136888],{},[3262,136886,136887],{"align":26688},"格式",[3262,136889,26692],{"align":26688},[3299,136891,136892,136902,136912,136922],{},[3259,136893,136894,136899],{},[3304,136895,136896],{"align":26688},[538,136897,136898],{},".ttf",[3304,136900,136901],{"align":26688},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[3259,136903,136904,136909],{},[3304,136905,136906],{"align":26688},[538,136907,136908],{},".woff",[3304,136910,136911],{"align":26688},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[3259,136913,136914,136919],{},[3304,136915,136916],{"align":26688},[538,136917,136918],{},".eot",[3304,136920,136921],{"align":26688},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[3259,136923,136924,136929],{},[3304,136925,136926],{"align":26688},[538,136927,136928],{},"svg",[3304,136930,136931],{"align":26688},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1070,136933,136934],{"start":82},[1073,136935,136936],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[19,136938,136940],{"className":128920,"code":136939,"language":128922,"meta":28,"style":28},"\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",[26,136941,136942,136947,136954,136966,136982,137007,137028,137048,137068,137072,137078,137088,137099],{"__ignoreMap":28},[52,136943,136944],{"class":54,"line":55},[52,136945,136946],{"class":332},"\u002F* 引入字体图标 *\u002F\n",[52,136948,136949,136952],{"class":54,"line":69},[52,136950,136951],{"class":160},"@font-face",[52,136953,18528],{"class":622},[52,136955,136956,136959,136961,136964],{"class":54,"line":82},[52,136957,136958],{"class":90},"  font-family",[52,136960,54368],{"class":622},[52,136962,136963],{"class":62},"'icomoon'",[52,136965,4272],{"class":622},[52,136967,136968,136971,136973,136975,136977,136980],{"class":54,"line":97},[52,136969,136970],{"class":90},"  src",[52,136972,54368],{"class":622},[52,136974,64656],{"class":90},[52,136976,3121],{"class":622},[52,136978,136979],{"class":62},"'fonts\u002Ficomoon.eot'",[52,136981,5679],{"class":622},[52,136983,136984,136986,136988,136990,136992,136995,136997,137000,137002,137005],{"class":54,"line":112},[52,136985,136970],{"class":90},[52,136987,54368],{"class":622},[52,136989,64656],{"class":90},[52,136991,3121],{"class":622},[52,136993,136994],{"class":62},"'fonts\u002Ficomoon.eot?#iefix'",[52,136996,16670],{"class":622},[52,136998,136999],{"class":90},"format",[52,137001,3121],{"class":622},[52,137003,137004],{"class":62},"'embedded-opentype'",[52,137006,40979],{"class":622},[52,137008,137009,137012,137014,137017,137019,137021,137023,137026],{"class":54,"line":119},[52,137010,137011],{"class":90},"       url",[52,137013,3121],{"class":622},[52,137015,137016],{"class":62},"'fonts\u002Ficomoon.woff'",[52,137018,16670],{"class":622},[52,137020,136999],{"class":90},[52,137022,3121],{"class":622},[52,137024,137025],{"class":62},"'woff'",[52,137027,40979],{"class":622},[52,137029,137030,137032,137034,137037,137039,137041,137043,137046],{"class":54,"line":130},[52,137031,137011],{"class":90},[52,137033,3121],{"class":622},[52,137035,137036],{"class":62},"'fonts\u002Ficomoon.ttf'",[52,137038,16670],{"class":622},[52,137040,136999],{"class":90},[52,137042,3121],{"class":622},[52,137044,137045],{"class":62},"'truetype'",[52,137047,40979],{"class":622},[52,137049,137050,137052,137054,137057,137059,137061,137063,137066],{"class":54,"line":136},[52,137051,137011],{"class":90},[52,137053,3121],{"class":622},[52,137055,137056],{"class":62},"'fonts\u002Ficomoon.svg#icomoon'",[52,137058,16670],{"class":622},[52,137060,136999],{"class":90},[52,137062,3121],{"class":622},[52,137064,137065],{"class":62},"'svg'",[52,137067,5679],{"class":622},[52,137069,137070],{"class":54,"line":141},[52,137071,4543],{"class":622},[52,137073,137074,137076],{"class":54,"line":146},[52,137075,136677],{"class":58},[52,137077,18528],{"class":622},[52,137079,137080,137082,137084,137086],{"class":54,"line":152},[52,137081,136958],{"class":90},[52,137083,54368],{"class":622},[52,137085,136963],{"class":62},[52,137087,4272],{"class":622},[52,137089,137090,137093,137095,137097],{"class":54,"line":157},[52,137091,137092],{"class":90},"  font-style",[52,137094,54368],{"class":622},[52,137096,66771],{"class":90},[52,137098,4272],{"class":622},[52,137100,137101],{"class":54,"line":173},[52,137102,4543],{"class":622},[274,137104,137105],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[280,137107],{"style":128776,"src":137108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1070,137110,137111],{"start":97},[1073,137112,137113],{},"添加字体",[280,137115],{"style":128776,"src":137116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[274,137118,137119],{},"复制：",[280,137121],{"style":128776,"src":137122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[274,137124,137125],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1070,137127,137128],{"start":112},[1073,137129,137130],{},"代码展示：",[19,137132,137133],{"className":128920,"code":136939,"language":128922,"meta":28,"style":28},[26,137134,137135,137139,137145,137155,137169,137191,137209,137227,137245,137249,137255,137265,137275],{"__ignoreMap":28},[52,137136,137137],{"class":54,"line":55},[52,137138,136946],{"class":332},[52,137140,137141,137143],{"class":54,"line":69},[52,137142,136951],{"class":160},[52,137144,18528],{"class":622},[52,137146,137147,137149,137151,137153],{"class":54,"line":82},[52,137148,136958],{"class":90},[52,137150,54368],{"class":622},[52,137152,136963],{"class":62},[52,137154,4272],{"class":622},[52,137156,137157,137159,137161,137163,137165,137167],{"class":54,"line":97},[52,137158,136970],{"class":90},[52,137160,54368],{"class":622},[52,137162,64656],{"class":90},[52,137164,3121],{"class":622},[52,137166,136979],{"class":62},[52,137168,5679],{"class":622},[52,137170,137171,137173,137175,137177,137179,137181,137183,137185,137187,137189],{"class":54,"line":112},[52,137172,136970],{"class":90},[52,137174,54368],{"class":622},[52,137176,64656],{"class":90},[52,137178,3121],{"class":622},[52,137180,136994],{"class":62},[52,137182,16670],{"class":622},[52,137184,136999],{"class":90},[52,137186,3121],{"class":622},[52,137188,137004],{"class":62},[52,137190,40979],{"class":622},[52,137192,137193,137195,137197,137199,137201,137203,137205,137207],{"class":54,"line":119},[52,137194,137011],{"class":90},[52,137196,3121],{"class":622},[52,137198,137016],{"class":62},[52,137200,16670],{"class":622},[52,137202,136999],{"class":90},[52,137204,3121],{"class":622},[52,137206,137025],{"class":62},[52,137208,40979],{"class":622},[52,137210,137211,137213,137215,137217,137219,137221,137223,137225],{"class":54,"line":130},[52,137212,137011],{"class":90},[52,137214,3121],{"class":622},[52,137216,137036],{"class":62},[52,137218,16670],{"class":622},[52,137220,136999],{"class":90},[52,137222,3121],{"class":622},[52,137224,137045],{"class":62},[52,137226,40979],{"class":622},[52,137228,137229,137231,137233,137235,137237,137239,137241,137243],{"class":54,"line":136},[52,137230,137011],{"class":90},[52,137232,3121],{"class":622},[52,137234,137056],{"class":62},[52,137236,16670],{"class":622},[52,137238,136999],{"class":90},[52,137240,3121],{"class":622},[52,137242,137065],{"class":62},[52,137244,5679],{"class":622},[52,137246,137247],{"class":54,"line":141},[52,137248,4543],{"class":622},[52,137250,137251,137253],{"class":54,"line":146},[52,137252,136677],{"class":58},[52,137254,18528],{"class":622},[52,137256,137257,137259,137261,137263],{"class":54,"line":152},[52,137258,136958],{"class":90},[52,137260,54368],{"class":622},[52,137262,136963],{"class":62},[52,137264,4272],{"class":622},[52,137266,137267,137269,137271,137273],{"class":54,"line":157},[52,137268,137092],{"class":90},[52,137270,54368],{"class":622},[52,137272,66771],{"class":90},[52,137274,4272],{"class":622},[52,137276,137277],{"class":54,"line":173},[52,137278,4543],{"class":622},[280,137280],{"style":128776,"src":137281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[274,137283,137284],{},"更加细节展示：",[1070,137286,137287],{},[1073,137288,137289],{},"html 标签内添加小图标",[280,137291],{"style":128776,"src":137292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1070,137294,137295],{"start":69},[1073,137296,137297],{},"给标签定义字体",[19,137299,137300],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,137301,137302,137306,137320,137324],{"__ignoreMap":28},[52,137303,137304],{"class":54,"line":55},[52,137305,133031],{"class":332},[52,137307,137308,137310,137312,137314,137316,137318],{"class":54,"line":69},[52,137309,4022],{"class":622},[52,137311,54542],{"class":54231},[52,137313,56416],{"class":58},[52,137315,2099],{"class":622},[52,137317,133044],{"class":62},[52,137319,54238],{"class":622},[52,137321,137322],{"class":54,"line":82},[52,137323,133051],{"class":622},[52,137325,137326,137328,137330],{"class":54,"line":97},[52,137327,54716],{"class":622},[52,137329,54542],{"class":54231},[52,137331,54238],{"class":622},[274,137333,137334],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[280,137336],{"style":128776,"src":137337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[30,137339,137341],{"id":137340},"_1235-字体图标的追加","12.3.5 字体图标的追加",[274,137343,137344],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[274,137346,137347,137348,137351],{},"把压缩包里面的 ",[538,137349,137350],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[274,137353,137354],{},"打开网站，点下方：",[280,137356],{"style":128776,"src":137357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[280,137359],{"style":128776,"src":137360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[280,137362],{"style":128776,"src":137363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[274,137365,137366],{},"点yes重新加载",[274,137368,137369],{},"然后重复之前的操作就可以实现了",[274,137371,137372],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[30,137374,137376],{"id":137375},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[280,137378],{"style":128776,"src":137379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[3015,137381,137382],{},"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":28,"searchDepth":69,"depth":69,"links":137384},[137385,137391,137396],{"id":135988,"depth":69,"text":135989,"children":137386},[137387,137388,137389,137390],{"id":136000,"depth":82,"text":136001},{"id":136029,"depth":82,"text":136030},{"id":136057,"depth":82,"text":136058},{"id":136115,"depth":82,"text":136116},{"id":136587,"depth":69,"text":136588,"children":137392},[137393,137394,137395],{"id":136591,"depth":82,"text":136592},{"id":136636,"depth":82,"text":136637},{"id":136652,"depth":82,"text":136653},{"id":136752,"depth":69,"text":136753,"children":137397},[137398,137399,137400,137401,137402,137403],{"id":136756,"depth":82,"text":136757},{"id":136790,"depth":82,"text":136791},{"id":136813,"depth":82,"text":136814},{"id":136860,"depth":82,"text":136861},{"id":137340,"depth":82,"text":137341},{"id":137375,"depth":82,"text":137376},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135980,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137410,"title":137411,"body":137412,"description":3046,"extension":3047,"meta":138639,"navigation":115,"path":138640,"seo":138641,"stem":138642,"__hash__":138643},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137413,"toc":138620},[137414,137417,137421,137424,137438,137506,137536,137539,137543,137547,137649,137696,137700,137703,137706,137740,137743,137746,137749,137752,137755,137758,137761,137763,137766,137769,137772,137775,137778,137781,137784,137812,137815,137819,137822,137829,137832,137835,137861,137864,137868,137871,137874,137881,137885,137888,137890,137922,137925,137928,137940,137946,137949,137952,137955,137957,137961,137964,137967,137970,138015,138019,138021,138024,138031,138073,138076,138080,138085,138099,138103,138106,138109,138112,138115,138118,138152,138155,138158,138212,138215,138218,138221,138224,138276,138279,138282,138331,138335,138337,138340,138343,138346,138349,138352,138410,138413,138419,138422,138425,138457,138460,138464,138468,138471,138503,138507,138510,138554,138558,138561,138564,138567,138570,138573,138576,138579,138581,138584,138586,138589,138592,138595,138598,138603,138606,138608,138611,138614,138617],[10,137415,137411],{"id":137416},"_13-界面样式与布局技巧",[14,137418,137420],{"id":137419},"_131-css三角","13.1 css三角",[274,137422,137423],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[4118,137425,137426,137429,137432,137435],{},[1073,137427,137428],{},"用css 边框可以模拟三角效果",[1073,137430,137431],{},"宽度高度为0",[1073,137433,137434],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[1073,137436,137437],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[19,137439,137441],{"className":128920,"code":137440,"language":128922,"meta":28,"style":28},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[26,137442,137443,137448,137455,137465,137475,137491,137502],{"__ignoreMap":28},[52,137444,137445],{"class":54,"line":55},[52,137446,137447],{"class":332},"\u002F* CSS 实现三角形 *\u002F\n",[52,137449,137450,137453],{"class":54,"line":69},[52,137451,137452],{"class":58},".triangle",[52,137454,18528],{"class":622},[52,137456,137457,137459,137461,137463],{"class":54,"line":82},[52,137458,73496],{"class":90},[52,137460,54368],{"class":622},[52,137462,3306],{"class":90},[52,137464,4272],{"class":622},[52,137466,137467,137469,137471,137473],{"class":54,"line":97},[52,137468,73716],{"class":90},[52,137470,54368],{"class":622},[52,137472,3306],{"class":90},[52,137474,4272],{"class":622},[52,137476,137477,137479,137481,137483,137485,137487,137489],{"class":54,"line":112},[52,137478,73824],{"class":90},[52,137480,54368],{"class":622},[52,137482,3559],{"class":90},[52,137484,54423],{"class":160},[52,137486,54452],{"class":90},[52,137488,66921],{"class":90},[52,137490,4272],{"class":622},[52,137492,137493,137496,137498,137500],{"class":54,"line":119},[52,137494,137495],{"class":90},"  border-bottom-color",[52,137497,54368],{"class":622},[52,137499,65299],{"class":90},[52,137501,4272],{"class":622},[52,137503,137504],{"class":54,"line":130},[52,137505,4543],{"class":622},[19,137507,137508],{"className":128920,"code":133077,"language":128922,"meta":28,"style":28},[26,137509,137510,137516,137532],{"__ignoreMap":28},[52,137511,137512,137514],{"class":54,"line":55},[52,137513,54542],{"class":54231},[52,137515,18528],{"class":622},[52,137517,137518,137520,137522,137524,137526,137528,137530],{"class":54,"line":69},[52,137519,73824],{"class":90},[52,137521,54368],{"class":622},[52,137523,3332],{"class":90},[52,137525,54423],{"class":160},[52,137527,54452],{"class":90},[52,137529,132312],{"class":90},[52,137531,4272],{"class":622},[52,137533,137534],{"class":54,"line":82},[52,137535,4543],{"class":622},[280,137537],{"style":128776,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137540,137542],{"id":137541},"_132-css用户界面样式","13.2 css用户界面样式",[30,137544,137546],{"id":137545},"_1321-鼠标样式","13.2.1 鼠标样式",[19,137548,137550],{"className":128920,"code":137549,"language":128922,"meta":28,"style":28},"\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",[26,137551,137552,137557,137576,137594,137613,137630],{"__ignoreMap":28},[52,137553,137554],{"class":54,"line":55},[52,137555,137556],{"class":332},"\u002F* 鼠标样式 *\u002F\n",[52,137558,137559,137561,137563,137566,137568,137570,137573],{"class":54,"line":69},[52,137560,54542],{"class":54231},[52,137562,82735],{"class":622},[52,137564,137565],{"class":90},"cursor",[52,137567,54368],{"class":622},[52,137569,64960],{"class":90},[52,137571,137572],{"class":622},"; }   ",[52,137574,137575],{"class":332},"\u002F* 手型 *\u002F\n",[52,137577,137578,137580,137582,137584,137586,137589,137591],{"class":54,"line":82},[52,137579,54542],{"class":54231},[52,137581,82735],{"class":622},[52,137583,137565],{"class":90},[52,137585,54368],{"class":622},[52,137587,137588],{"class":90},"default",[52,137590,137572],{"class":622},[52,137592,137593],{"class":332},"\u002F* 默认 *\u002F\n",[52,137595,137596,137598,137600,137602,137604,137607,137610],{"class":54,"line":97},[52,137597,54542],{"class":54231},[52,137599,82735],{"class":622},[52,137601,137565],{"class":90},[52,137603,54368],{"class":622},[52,137605,137606],{"class":90},"move",[52,137608,137609],{"class":622},"; }      ",[52,137611,137612],{"class":332},"\u002F* 移动 *\u002F\n",[52,137614,137615,137617,137619,137621,137623,137625,137627],{"class":54,"line":112},[52,137616,54542],{"class":54231},[52,137618,82735],{"class":622},[52,137620,137565],{"class":90},[52,137622,54368],{"class":622},[52,137624,24],{"class":90},[52,137626,137609],{"class":622},[52,137628,137629],{"class":332},"\u002F* 文本 *\u002F\n",[52,137631,137632,137634,137636,137638,137640,137643,137646],{"class":54,"line":119},[52,137633,54542],{"class":54231},[52,137635,82735],{"class":622},[52,137637,137565],{"class":90},[52,137639,54368],{"class":622},[52,137641,137642],{"class":90},"not-allowed",[52,137644,137645],{"class":622},"; } ",[52,137647,137648],{"class":332},"\u002F* 禁止 *\u002F\n",[3253,137650,137651,137659],{},[3256,137652,137653],{},[3259,137654,137655,137657],{},[3262,137656,129384],{"align":26688},[3262,137658,30424],{"align":26688},[3299,137660,137661,137668,137675,137682,137689],{},[3259,137662,137663,137665],{},[3304,137664,137588],{"align":26688},[3304,137666,137667],{"align":26688},"小白 默认",[3259,137669,137670,137672],{},[3304,137671,64960],{"align":26688},[3304,137673,137674],{"align":26688},"小手",[3259,137676,137677,137679],{},[3304,137678,137606],{"align":26688},[3304,137680,137681],{"align":26688},"移动",[3259,137683,137684,137686],{},[3304,137685,24],{"align":26688},[3304,137687,137688],{"align":26688},"文本",[3259,137690,137691,137693],{},[3304,137692,137642],{"align":26688},[3304,137694,137695],{"align":26688},"禁止",[30,137697,137699],{"id":137698},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[274,137701,137702],{},"去除表单轮廓线",[274,137704,137705],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[19,137707,137708],{"className":128920,"code":132284,"language":128922,"meta":28,"style":28},[26,137709,137710,137714,137720,137736],{"__ignoreMap":28},[52,137711,137712],{"class":54,"line":55},[52,137713,132291],{"class":332},[52,137715,137716,137718],{"class":54,"line":69},[52,137717,54542],{"class":54231},[52,137719,18528],{"class":622},[52,137721,137722,137724,137726,137728,137730,137732,137734],{"class":54,"line":82},[52,137723,73824],{"class":90},[52,137725,54368],{"class":622},[52,137727,3332],{"class":90},[52,137729,54423],{"class":160},[52,137731,54452],{"class":90},[52,137733,132312],{"class":90},[52,137735,4272],{"class":622},[52,137737,137738],{"class":54,"line":97},[52,137739,4543],{"class":622},[274,137741,137742],{},"文本域：",[280,137744],{"style":128776,"src":137745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[274,137747,137748],{},"此时会有一个空白区域",[280,137750],{"style":128776,"src":137751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[274,137753,137754],{},"写在同一行就不会出现这个问题",[280,137756],{"style":128776,"src":137757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[274,137759,137760],{},"文本域是行内块元素，一定记住！！！",[274,137762,101161],{},[280,137764],{"style":128776,"src":137765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[274,137767,137768],{},"文本域尽量放在一行",[274,137770,137771],{},"知识回顾：cols是列，rols是行",[280,137773],{"style":128776,"src":137774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[274,137776,137777],{},"它可以进行拖动，显然这是我们不愿意看到的",[280,137779],{"style":128776,"src":137780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[274,137782,137783],{},"使用resize进行解决",[19,137785,137787],{"className":128920,"code":137786,"language":128922,"meta":28,"style":28},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[26,137788,137789,137795,137808],{"__ignoreMap":28},[52,137790,137791,137793],{"class":54,"line":55},[52,137792,56751],{"class":54231},[52,137794,18528],{"class":622},[52,137796,137797,137799,137801,137803,137805],{"class":54,"line":69},[52,137798,73726],{"class":90},[52,137800,54368],{"class":622},[52,137802,57667],{"class":90},[52,137804,132783],{"class":622},[52,137806,137807],{"class":332},"\u002F* 取消表单轮廓线 *\u002F\n",[52,137809,137810],{"class":54,"line":82},[52,137811,4543],{"class":622},[274,137813,137814],{},"此时就无法通过右下方实现拖动了",[30,137816,137818],{"id":137817},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[274,137820,137821],{},"实现一个盒子中的文字和图片对齐",[274,137823,137824,137825,137828],{},"用于设置一个元素的 ",[538,137826,137827],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[274,137830,137831],{},"图片和文字默认是基线对齐",[280,137833],{"style":128776,"src":137834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[19,137836,137837],{"className":128920,"code":137786,"language":128922,"meta":28,"style":28},[26,137838,137839,137845,137857],{"__ignoreMap":28},[52,137840,137841,137843],{"class":54,"line":55},[52,137842,56751],{"class":54231},[52,137844,18528],{"class":622},[52,137846,137847,137849,137851,137853,137855],{"class":54,"line":69},[52,137848,73726],{"class":90},[52,137850,54368],{"class":622},[52,137852,57667],{"class":90},[52,137854,132783],{"class":622},[52,137856,137807],{"class":332},[52,137858,137859],{"class":54,"line":82},[52,137860,4543],{"class":622},[280,137862],{"style":128776,"src":137863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[1486,137865,137867],{"id":137866},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[274,137869,137870],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[280,137872],{"style":128776,"src":137873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[274,137875,137876,137877,137880],{},"此时可以给图片、表单这些行内块元素的 ",[538,137878,137879],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[1486,137882,137884],{"id":137883},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[274,137886,137887],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[274,137889,17589],{},[19,137891,137893],{"className":128920,"code":137892,"language":128922,"meta":28,"style":28},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[26,137894,137895,137900,137906,137918],{"__ignoreMap":28},[52,137896,137897],{"class":54,"line":55},[52,137898,137899],{"class":332},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[52,137901,137902,137904],{"class":54,"line":69},[52,137903,280],{"class":54231},[52,137905,18528],{"class":622},[52,137907,137908,137911,137913,137916],{"class":54,"line":82},[52,137909,137910],{"class":90},"  vertical-align",[52,137912,54368],{"class":622},[52,137914,137915],{"class":90},"middle",[52,137917,4272],{"class":622},[52,137919,137920],{"class":54,"line":97},[52,137921,4543],{"class":622},[280,137923],{"style":128776,"src":137924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[274,137926,137927],{},"主要解决方法有两种：",[1070,137929,137930],{},[1073,137931,137932,137935,137936,137939],{},[538,137933,137934],{},"给图片"," 添加 ",[538,137937,137938],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[274,137941,137942,137943],{},"2.把图片转换为块级元素 ",[538,137944,137945],{},"display: block",[274,137947,137948],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[274,137950,137951],{},"img {",[274,137953,137954],{},"vertical-align:middle;",[274,137956,4058],{},[30,137958,137960],{"id":137959},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[274,137962,137963],{},"效果：",[280,137965],{"style":128776,"src":137966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[274,137968,137969],{},"单行文本溢出显示省略号--必须满足三个条件：",[19,137971,137973],{"className":128920,"code":137972,"language":128922,"meta":28,"style":28},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[26,137974,137975,137980,137986,137996,138001,138011],{"__ignoreMap":28},[52,137976,137977],{"class":54,"line":55},[52,137978,137979],{"class":332},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[52,137981,137982,137984],{"class":54,"line":69},[52,137983,280],{"class":54231},[52,137985,18528],{"class":622},[52,137987,137988,137990,137992,137994],{"class":54,"line":82},[52,137989,137910],{"class":90},[52,137991,54368],{"class":622},[52,137993,137915],{"class":90},[52,137995,4272],{"class":622},[52,137997,137998],{"class":54,"line":97},[52,137999,138000],{"class":332},"  \u002F* 或 *\u002F\n",[52,138002,138003,138005,138007,138009],{"class":54,"line":112},[52,138004,130536],{"class":90},[52,138006,54368],{"class":622},[52,138008,63799],{"class":90},[52,138010,4272],{"class":622},[52,138012,138013],{"class":54,"line":119},[52,138014,4543],{"class":622},[30,138016,138018],{"id":138017},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[274,138020,137963],{},[280,138022],{"style":128776,"src":138023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[274,138025,138026,138027,138030],{},"多行文本溢出显示省略号， ",[538,138028,138029],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[19,138032,138033],{"className":128920,"code":137972,"language":128922,"meta":28,"style":28},[26,138034,138035,138039,138045,138055,138059,138069],{"__ignoreMap":28},[52,138036,138037],{"class":54,"line":55},[52,138038,137979],{"class":332},[52,138040,138041,138043],{"class":54,"line":69},[52,138042,280],{"class":54231},[52,138044,18528],{"class":622},[52,138046,138047,138049,138051,138053],{"class":54,"line":82},[52,138048,137910],{"class":90},[52,138050,54368],{"class":622},[52,138052,137915],{"class":90},[52,138054,4272],{"class":622},[52,138056,138057],{"class":54,"line":97},[52,138058,138000],{"class":332},[52,138060,138061,138063,138065,138067],{"class":54,"line":112},[52,138062,130536],{"class":90},[52,138064,54368],{"class":622},[52,138066,63799],{"class":90},[52,138068,4272],{"class":622},[52,138070,138071],{"class":54,"line":119},[52,138072,4543],{"class":622},[274,138074,138075],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,138077,138079],{"id":138078},"_133-常见布局技巧","13.3 常见布局技巧",[274,138081,138082],{},[538,138083,138084],{},"巧妙利用一个技术更快更好的布局：",[1070,138086,138087,138090,138093,138096],{},[1073,138088,138089],{},"margin负值的运用",[1073,138091,138092],{},"文字围绕浮动元素",[1073,138094,138095],{},"行内块的巧妙运用",[1073,138097,138098],{},"CSS三角强化",[30,138100,138102],{"id":138101},"_1331-margin负值的运用","13.3.1 margin负值的运用",[274,138104,138105],{},"应用场景：",[280,138107],{"style":128776,"src":138108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[280,138110],{"style":128776,"src":138111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[274,138113,138114],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[274,138116,138117],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[19,138119,138120],{"className":128920,"code":132284,"language":128922,"meta":28,"style":28},[26,138121,138122,138126,138132,138148],{"__ignoreMap":28},[52,138123,138124],{"class":54,"line":55},[52,138125,132291],{"class":332},[52,138127,138128,138130],{"class":54,"line":69},[52,138129,54542],{"class":54231},[52,138131,18528],{"class":622},[52,138133,138134,138136,138138,138140,138142,138144,138146],{"class":54,"line":82},[52,138135,73824],{"class":90},[52,138137,54368],{"class":622},[52,138139,3332],{"class":90},[52,138141,54423],{"class":160},[52,138143,54452],{"class":90},[52,138145,132312],{"class":90},[52,138147,4272],{"class":622},[52,138149,138150],{"class":54,"line":97},[52,138151,4543],{"class":622},[280,138153],{"style":128776,"src":138154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[274,138156,138157],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[19,138159,138161],{"className":128920,"code":138160,"language":128922,"meta":28,"style":28},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,138162,138163,138168,138174,138184,138196,138208],{"__ignoreMap":28},[52,138164,138165],{"class":54,"line":55},[52,138166,138167],{"class":332},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[52,138169,138170,138172],{"class":54,"line":69},[52,138171,132768],{"class":58},[52,138173,18528],{"class":622},[52,138175,138176,138178,138180,138182],{"class":54,"line":82},[52,138177,134726],{"class":90},[52,138179,54368],{"class":622},[52,138181,57694],{"class":90},[52,138183,4272],{"class":622},[52,138185,138186,138188,138190,138192,138194],{"class":54,"line":97},[52,138187,134740],{"class":90},[52,138189,54368],{"class":622},[52,138191,3559],{"class":90},[52,138193,54423],{"class":160},[52,138195,4272],{"class":622},[52,138197,138198,138200,138202,138204,138206],{"class":54,"line":112},[52,138199,134757],{"class":90},[52,138201,54368],{"class":622},[52,138203,3812],{"class":90},[52,138205,54423],{"class":160},[52,138207,4272],{"class":622},[52,138209,138210],{"class":54,"line":119},[52,138211,4543],{"class":622},[274,138213,138214],{},"加上上述代码会发现：",[280,138216],{"style":128776,"src":138217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[274,138219,138220],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[274,138222,138223],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[19,138225,138226],{"className":128920,"code":138160,"language":128922,"meta":28,"style":28},[26,138227,138228,138232,138238,138248,138260,138272],{"__ignoreMap":28},[52,138229,138230],{"class":54,"line":55},[52,138231,138167],{"class":332},[52,138233,138234,138236],{"class":54,"line":69},[52,138235,132768],{"class":58},[52,138237,18528],{"class":622},[52,138239,138240,138242,138244,138246],{"class":54,"line":82},[52,138241,134726],{"class":90},[52,138243,54368],{"class":622},[52,138245,57694],{"class":90},[52,138247,4272],{"class":622},[52,138249,138250,138252,138254,138256,138258],{"class":54,"line":97},[52,138251,134740],{"class":90},[52,138253,54368],{"class":622},[52,138255,3559],{"class":90},[52,138257,54423],{"class":160},[52,138259,4272],{"class":622},[52,138261,138262,138264,138266,138268,138270],{"class":54,"line":112},[52,138263,134757],{"class":90},[52,138265,54368],{"class":622},[52,138267,3812],{"class":90},[52,138269,54423],{"class":160},[52,138271,4272],{"class":622},[52,138273,138274],{"class":54,"line":119},[52,138275,4543],{"class":622},[274,138277,138278],{},"解决方式2：",[274,138280,138281],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[19,138283,138285],{"className":128920,"code":138284,"language":128922,"meta":28,"style":28},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[26,138286,138287,138293,138303,138315,138327],{"__ignoreMap":28},[52,138288,138289,138291],{"class":54,"line":55},[52,138290,54542],{"class":54231},[52,138292,18528],{"class":622},[52,138294,138295,138297,138299,138301],{"class":54,"line":69},[52,138296,134726],{"class":90},[52,138298,54368],{"class":622},[52,138300,57694],{"class":90},[52,138302,4272],{"class":622},[52,138304,138305,138307,138309,138311,138313],{"class":54,"line":82},[52,138306,134740],{"class":90},[52,138308,54368],{"class":622},[52,138310,3559],{"class":90},[52,138312,54423],{"class":160},[52,138314,4272],{"class":622},[52,138316,138317,138319,138321,138323,138325],{"class":54,"line":97},[52,138318,134757],{"class":90},[52,138320,54368],{"class":622},[52,138322,3812],{"class":90},[52,138324,54423],{"class":160},[52,138326,4272],{"class":622},[52,138328,138329],{"class":54,"line":112},[52,138330,4543],{"class":622},[30,138332,138334],{"id":138333},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[274,138336,138105],{},[280,138338],{"style":128776,"src":138339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[274,138341,138342],{},"实现结构图：",[280,138344],{"style":128776,"src":138345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[274,138347,138348],{},"巧妙运用浮动元素不会压住文字的特性",[274,138350,138351],{},"代码显示：",[19,138353,138355],{"className":128920,"code":138354,"language":128922,"meta":28,"style":28},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[26,138356,138357,138363,138373,138377,138382,138386,138392,138406],{"__ignoreMap":28},[52,138358,138359,138361],{"class":54,"line":55},[52,138360,132768],{"class":58},[52,138362,18528],{"class":622},[52,138364,138365,138367,138369,138371],{"class":54,"line":69},[52,138366,133400],{"class":90},[52,138368,54368],{"class":622},[52,138370,26688],{"class":90},[52,138372,4272],{"class":622},[52,138374,138375],{"class":54,"line":82},[52,138376,4543],{"class":622},[52,138378,138379],{"class":54,"line":97},[52,138380,138381],{"class":622},"```Css\n",[52,138383,138384],{"class":54,"line":112},[52,138385,132763],{"class":332},[52,138387,138388,138390],{"class":54,"line":119},[52,138389,132768],{"class":58},[52,138391,18528],{"class":622},[52,138393,138394,138396,138398,138400,138402,138404],{"class":54,"line":130},[52,138395,73398],{"class":90},[52,138397,54368],{"class":622},[52,138399,3306],{"class":90},[52,138401,54487],{"class":90},[52,138403,132783],{"class":622},[52,138405,132786],{"class":332},[52,138407,138408],{"class":54,"line":136},[52,138409,4543],{"class":622},[274,138411,138412],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[19,138414,138417],{"className":138415,"code":138416,"language":24},[22],"\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",[26,138418,138416],{"__ignoreMap":28},[280,138420],{"style":128776,"src":138421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[274,138423,138424],{},"最终展示结果：",[19,138426,138427],{"className":128920,"code":132756,"language":128922,"meta":28,"style":28},[26,138428,138429,138433,138439,138453],{"__ignoreMap":28},[52,138430,138431],{"class":54,"line":55},[52,138432,132763],{"class":332},[52,138434,138435,138437],{"class":54,"line":69},[52,138436,132768],{"class":58},[52,138438,18528],{"class":622},[52,138440,138441,138443,138445,138447,138449,138451],{"class":54,"line":82},[52,138442,73398],{"class":90},[52,138444,54368],{"class":622},[52,138446,3306],{"class":90},[52,138448,54487],{"class":90},[52,138450,132783],{"class":622},[52,138452,132786],{"class":332},[52,138454,138455],{"class":54,"line":97},[52,138456,4543],{"class":622},[280,138458],{"style":128776,"src":138459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138461,138463],{"id":138462},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[30,138465,138467],{"id":138466},"_1341-原理","13.4.1 原理",[280,138469],{"style":128776,"src":138470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[19,138472,138473],{"className":128920,"code":132756,"language":128922,"meta":28,"style":28},[26,138474,138475,138479,138485,138499],{"__ignoreMap":28},[52,138476,138477],{"class":54,"line":55},[52,138478,132763],{"class":332},[52,138480,138481,138483],{"class":54,"line":69},[52,138482,132768],{"class":58},[52,138484,18528],{"class":622},[52,138486,138487,138489,138491,138493,138495,138497],{"class":54,"line":82},[52,138488,73398],{"class":90},[52,138490,54368],{"class":622},[52,138492,3306],{"class":90},[52,138494,54487],{"class":90},[52,138496,132783],{"class":622},[52,138498,132786],{"class":332},[52,138500,138501],{"class":54,"line":97},[52,138502,4543],{"class":622},[30,138504,138506],{"id":138505},"_1342-实例","13.4.2 实例",[280,138508],{"style":128776,"src":138509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[19,138511,138512],{"className":128920,"code":133386,"language":128922,"meta":28,"style":28},[26,138513,138514,138520,138530,138534,138540,138550],{"__ignoreMap":28},[52,138515,138516,138518],{"class":54,"line":55},[52,138517,133393],{"class":58},[52,138519,18528],{"class":622},[52,138521,138522,138524,138526,138528],{"class":54,"line":69},[52,138523,133400],{"class":90},[52,138525,54368],{"class":622},[52,138527,26688],{"class":90},[52,138529,4272],{"class":622},[52,138531,138532],{"class":54,"line":82},[52,138533,4543],{"class":622},[52,138535,138536,138538],{"class":54,"line":97},[52,138537,133415],{"class":58},[52,138539,18528],{"class":622},[52,138541,138542,138544,138546,138548],{"class":54,"line":112},[52,138543,133400],{"class":90},[52,138545,54368],{"class":622},[52,138547,75450],{"class":90},[52,138549,4272],{"class":622},[52,138551,138552],{"class":54,"line":119},[52,138553,4543],{"class":622},[14,138555,138557],{"id":138556},"_135-css的初始化","13.5 css的初始化",[274,138559,138560],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[274,138562,138563],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[274,138565,138566],{},"每个网页都必须首先进行 CSS初始化。",[274,138568,138569],{},"这里我们以 京东CSS初始化代码为例。",[274,138571,138572],{},"在网页右键查看网页源代码",[274,138574,138575],{},"找到css的link引入语句",[274,138577,138578],{},"然后ctrl+f 输入body",[274,138580,80154],{},[280,138582],{"style":128776,"src":138583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[274,138585,80177],{},[280,138587],{"style":128776,"src":138588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[274,138590,138591],{},"③打开了网页上传压缩的代码",[280,138593],{"style":128776,"src":138594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[274,138596,138597],{},"④从body前可以查看这个网页的初始化代码",[274,138599,138600],{},[538,138601,138602],{},"Unicode编码字体：",[274,138604,138605],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[274,138607,86135],{},[274,138609,138610],{},"黑体 \\9ED1\\4F53",[274,138612,138613],{},"宋体 \\5B8B\\4F53",[274,138615,138616],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[3015,138618,138619],{},"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":28,"searchDepth":69,"depth":69,"links":138621},[138622,138623,138630,138634,138638],{"id":137419,"depth":69,"text":137420},{"id":137541,"depth":69,"text":137542,"children":138624},[138625,138626,138627,138628,138629],{"id":137545,"depth":82,"text":137546},{"id":137698,"depth":82,"text":137699},{"id":137817,"depth":82,"text":137818},{"id":137959,"depth":82,"text":137960},{"id":138017,"depth":82,"text":138018},{"id":138078,"depth":69,"text":138079,"children":138631},[138632,138633],{"id":138101,"depth":82,"text":138102},{"id":138333,"depth":82,"text":138334},{"id":138462,"depth":69,"text":138463,"children":138635},[138636,138637],{"id":138466,"depth":82,"text":138467},{"id":138505,"depth":82,"text":138506},{"id":138556,"depth":69,"text":138557},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137411,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138645,"title":138646,"body":138647,"description":3046,"extension":3047,"meta":140333,"navigation":115,"path":140334,"seo":140335,"stem":140336,"__hash__":140337},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138648,"toc":140322},[138649,138652,138656,138660,138663,138670,138673,138676,138714,138717,138719,138733,138737,138746,138750,138755,138758,138761,138764,138799,138804,138807,138837,138840,138845,138848,138851,138881,138884,138938,138941,138945,138950,138962,138965,138969,138999,139002,139007,139010,139040,139043,139047,139064,139068,139072,139075,139108,139111,139115,139118,139121,139124,139127,139130,139241,139244,139247,139250,139352,139355,139359,139363,139367,139370,139410,139413,139415,139431,139435,139438,139443,139524,139527,139530,139656,139661,139664,139672,139675,139680,139765,139768,139772,139775,139778,139782,139802,139807,139891,139894,139899,139902,139905,139983,139986,139989,139992,139995,139998,140003,140006,140009,140081,140084,140089,140092,140189,140192,140198,140201,140204,140207,140210,140213,140216,140219,140222,140226,140231,140234,140267,140272,140275,140316,140319],[10,138650,138646],{"id":138651},"_14-html5与css3新特性",[14,138653,138655],{"id":138654},"_141-html5的新特性","14.1 HTML5的新特性",[30,138657,138659],{"id":138658},"_1411-基本标签","14.1.1 基本标签",[274,138661,138662],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[274,138664,138665,138666,138669],{},"这些新特性都有兼容性问题，基本是 ",[538,138667,138668],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[274,138671,138672],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[274,138674,138675],{},"现在使用的是新特性：",[4118,138677,138678,138684,138690,138696,138702,138708],{},[1073,138679,138680,138683],{},[26,138681,138682],{},"\u003Cheader>"," 头部标签",[1073,138685,138686,138689],{},[26,138687,138688],{},"\u003Cnav>"," 导航标签",[1073,138691,138692,138695],{},[26,138693,138694],{},"\u003Carticle>"," 内容标签",[1073,138697,138698,138701],{},[26,138699,138700],{},"\u003Csection>"," 定义文档某个区域",[1073,138703,138704,138707],{},[26,138705,138706],{},"\u003Caside>"," 侧边栏标签",[1073,138709,138710,138713],{},[26,138711,138712],{},"\u003Cfooter>"," 尾部标签",[280,138715],{"style":128776,"src":138716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[274,138718,3149],{},[4118,138720,138721,138724,138727,138730],{},[1073,138722,138723],{},"这种语义化标准主要是针对搜索引擎的",[1073,138725,138726],{},"这些标签页面中可以经常使用",[1073,138728,138729],{},"在IE9中，需要把这些元素转换为块级元素",[1073,138731,138732],{},"移动端更喜欢使用这些标签",[30,138734,138736],{"id":138735},"_1412-多媒体标签","14.1.2 多媒体标签",[274,138738,138739,138740,138742,138743,138745],{},"音频 ",[538,138741,31108],{}," 和视频 ",[538,138744,31117],{}," 两个标签",[1486,138747,138749],{"id":138748},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1070,138751,138752],{},[1073,138753,138754],{},"支持格式：",[280,138756],{"style":128776,"src":138757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[274,138759,138760],{},"尽量使用MP4，兼容性好",[274,138762,138763],{},"用MP4就可以",[19,138765,138767],{"className":129667,"code":138766,"language":129669,"meta":28,"style":28},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[26,138768,138769],{"__ignoreMap":28},[52,138770,138771,138773,138775,138777,138779,138782,138784,138787,138790,138793,138795,138797],{"class":54,"line":55},[52,138772,4022],{"class":622},[52,138774,31117],{"class":54231},[52,138776,58169],{"class":58},[52,138778,2099],{"class":622},[52,138780,138781],{"class":62},"\"movie.mp4\"",[52,138783,95351],{"class":58},[52,138785,138786],{"class":58}," autoplay",[52,138788,138789],{"class":58}," muted",[52,138791,138792],{"class":58}," loop",[52,138794,58244],{"class":622},[52,138796,31117],{"class":54231},[52,138798,54238],{"class":622},[1070,138800,138801],{"start":69},[1073,138802,138803],{},"兼容写法",[274,138805,138806],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[19,138808,138809],{"className":129667,"code":138766,"language":129669,"meta":28,"style":28},[26,138810,138811],{"__ignoreMap":28},[52,138812,138813,138815,138817,138819,138821,138823,138825,138827,138829,138831,138833,138835],{"class":54,"line":55},[52,138814,4022],{"class":622},[52,138816,31117],{"class":54231},[52,138818,58169],{"class":58},[52,138820,2099],{"class":622},[52,138822,138781],{"class":62},[52,138824,95351],{"class":58},[52,138826,138786],{"class":58},[52,138828,138789],{"class":58},[52,138830,138792],{"class":58},[52,138832,58244],{"class":622},[52,138834,31117],{"class":54231},[52,138836,54238],{"class":622},[274,138838,138839],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1070,138841,138842],{"start":82},[1073,138843,138844],{},"video常用属性",[280,138846],{"style":128776,"src":138847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[274,138849,138850],{},"poster属性后面是跟的等待加载图片的地址",[19,138852,138853],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,138854,138855],{"__ignoreMap":28},[52,138856,138857,138859,138861,138863,138865,138867,138869,138871,138873,138875,138877,138879],{"class":54,"line":55},[52,138858,4022],{"class":622},[52,138860,280],{"class":54231},[52,138862,58169],{"class":58},[52,138864,2099],{"class":622},[52,138866,136437],{"class":62},[52,138868,58177],{"class":58},[52,138870,2099],{"class":622},[52,138872,136444],{"class":62},[52,138874,136447],{"class":58},[52,138876,2099],{"class":622},[52,138878,136452],{"class":62},[52,138880,54238],{"class":622},[274,138882,138883],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[19,138885,138887],{"className":128920,"code":138886,"language":128922,"meta":28,"style":28},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[26,138888,138889,138894,138900,138924,138929,138934],{"__ignoreMap":28},[52,138890,138891],{"class":54,"line":55},[52,138892,138893],{"class":332},"\u002F* 2D 位移 *\u002F\n",[52,138895,138896,138898],{"class":54,"line":69},[52,138897,54542],{"class":54231},[52,138899,18528],{"class":622},[52,138901,138902,138905,138907,138910,138912,138914,138916,138918,138920,138922],{"class":54,"line":82},[52,138903,138904],{"class":90},"  transform",[52,138906,54368],{"class":622},[52,138908,138909],{"class":90},"translate",[52,138911,3121],{"class":622},[52,138913,3424],{"class":90},[52,138915,54423],{"class":160},[52,138917,15391],{"class":622},[52,138919,3768],{"class":90},[52,138921,54423],{"class":160},[52,138923,5679],{"class":622},[52,138925,138926],{"class":54,"line":97},[52,138927,138928],{"class":332},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[52,138930,138931],{"class":54,"line":112},[52,138932,138933],{"class":332},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[52,138935,138936],{"class":54,"line":119},[52,138937,4543],{"class":622},[274,138939,138940],{},"muted:自动静音属性",[1486,138942,138944],{"id":138943},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1070,138946,138947],{},[1073,138948,138949],{},"基本使用",[274,138951,138952,138953,138958,138959],{},"当前 ",[538,138954,138955],{},[26,138956,138957],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[538,138960,138961],{},"mp3格式",[280,138963],{"style":128776,"src":138964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1070,138966,138967],{"start":69},[1073,138968,138803],{},[19,138970,138971],{"className":129667,"code":138766,"language":129669,"meta":28,"style":28},[26,138972,138973],{"__ignoreMap":28},[52,138974,138975,138977,138979,138981,138983,138985,138987,138989,138991,138993,138995,138997],{"class":54,"line":55},[52,138976,4022],{"class":622},[52,138978,31117],{"class":54231},[52,138980,58169],{"class":58},[52,138982,2099],{"class":622},[52,138984,138781],{"class":62},[52,138986,95351],{"class":58},[52,138988,138786],{"class":58},[52,138990,138789],{"class":58},[52,138992,138792],{"class":58},[52,138994,58244],{"class":622},[52,138996,31117],{"class":54231},[52,138998,54238],{"class":622},[274,139000,139001],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1070,139003,139004],{"start":82},[1073,139005,139006],{},"常用属性",[280,139008],{"style":128776,"src":139009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[19,139011,139012],{"className":129667,"code":138766,"language":129669,"meta":28,"style":28},[26,139013,139014],{"__ignoreMap":28},[52,139015,139016,139018,139020,139022,139024,139026,139028,139030,139032,139034,139036,139038],{"class":54,"line":55},[52,139017,4022],{"class":622},[52,139019,31117],{"class":54231},[52,139021,58169],{"class":58},[52,139023,2099],{"class":622},[52,139025,138781],{"class":62},[52,139027,95351],{"class":58},[52,139029,138786],{"class":58},[52,139031,138789],{"class":58},[52,139033,138792],{"class":58},[52,139035,58244],{"class":622},[52,139037,31117],{"class":54231},[52,139039,54238],{"class":622},[274,139041,139042],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[1486,139044,139046],{"id":139045},"_14123-总结","14.1.2.3 总结",[4118,139048,139049,139052,139055,139058,139061],{},[1073,139050,139051],{},"音频标签和视频标签使用方式基本一致",[1073,139053,139054],{},"浏览器支持情况不同",[1073,139056,139057],{},"谷歌浏览器把音频和视频自动播放禁止了",[1073,139059,139060],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[1073,139062,139063],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[30,139065,139067],{"id":139066},"_1413-表单元素","14.1.3 表单元素",[1486,139069,139071],{"id":139070},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[280,139073],{"style":128776,"src":139074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[19,139076,139078],{"className":129667,"code":139077,"language":129669,"meta":28,"style":28},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[26,139079,139080],{"__ignoreMap":28},[52,139081,139082,139084,139086,139088,139090,139092,139094,139096,139099,139101,139103,139106],{"class":54,"line":55},[52,139083,4022],{"class":622},[52,139085,56751],{"class":54231},[52,139087,56754],{"class":58},[52,139089,2099],{"class":622},[52,139091,65629],{"class":62},[52,139093,17876],{"class":58},[52,139095,2099],{"class":622},[52,139097,139098],{"class":62},"\"username\"",[52,139100,63950],{"class":58},[52,139102,2099],{"class":622},[52,139104,139105],{"class":62},"\"请输入用户名\"",[52,139107,54238],{"class":622},[280,139109],{"style":128776,"src":139110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[1486,139112,139114],{"id":139113},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[280,139116],{"style":128776,"src":139117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[274,139119,139120],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[274,139122,139123],{},"快捷操作：",[280,139125],{"style":128776,"src":139126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[274,139128,139129],{},"例子1：",[19,139131,139133],{"className":129667,"code":139132,"language":129669,"meta":28,"style":28},"\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",[26,139134,139135,139158,139185,139214,139233],{"__ignoreMap":28},[52,139136,139137,139139,139141,139143,139145,139148,139151,139153,139156],{"class":54,"line":55},[52,139138,4022],{"class":622},[52,139140,69554],{"class":54231},[52,139142,69557],{"class":58},[52,139144,2099],{"class":622},[52,139146,139147],{"class":62},"\"\u002Fsubmit\"",[52,139149,139150],{"class":58}," method",[52,139152,2099],{"class":622},[52,139154,139155],{"class":62},"\"post\"",[52,139157,54238],{"class":622},[52,139159,139160,139162,139164,139166,139168,139170,139172,139174,139176,139178,139180,139183],{"class":54,"line":69},[52,139161,55075],{"class":622},[52,139163,56751],{"class":54231},[52,139165,56754],{"class":58},[52,139167,2099],{"class":622},[52,139169,65629],{"class":62},[52,139171,17876],{"class":58},[52,139173,2099],{"class":622},[52,139175,139098],{"class":62},[52,139177,63950],{"class":58},[52,139179,2099],{"class":622},[52,139181,139182],{"class":62},"\"用户名\"",[52,139184,54238],{"class":622},[52,139186,139187,139189,139191,139193,139195,139198,139200,139202,139205,139207,139209,139212],{"class":54,"line":82},[52,139188,55075],{"class":622},[52,139190,56751],{"class":54231},[52,139192,56754],{"class":58},[52,139194,2099],{"class":622},[52,139196,139197],{"class":62},"\"password\"",[52,139199,17876],{"class":58},[52,139201,2099],{"class":622},[52,139203,139204],{"class":62},"\"pwd\"",[52,139206,63950],{"class":58},[52,139208,2099],{"class":622},[52,139210,139211],{"class":62},"\"密码\"",[52,139213,54238],{"class":622},[52,139215,139216,139218,139220,139222,139224,139226,139229,139231],{"class":54,"line":97},[52,139217,55075],{"class":622},[52,139219,56817],{"class":54231},[52,139221,56754],{"class":58},[52,139223,2099],{"class":622},[52,139225,69577],{"class":62},[52,139227,139228],{"class":622},">提交\u003C\u002F",[52,139230,56817],{"class":54231},[52,139232,54238],{"class":622},[52,139234,139235,139237,139239],{"class":54,"line":112},[52,139236,54716],{"class":622},[52,139238,69554],{"class":54231},[52,139240,54238],{"class":622},[280,139242],{"style":128776,"src":139243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[274,139245,139246],{},"value是表单域的内容",[274,139248,139249],{},"例子2：",[19,139251,139252],{"className":129667,"code":139132,"language":129669,"meta":28,"style":28},[26,139253,139254,139274,139300,139326,139344],{"__ignoreMap":28},[52,139255,139256,139258,139260,139262,139264,139266,139268,139270,139272],{"class":54,"line":55},[52,139257,4022],{"class":622},[52,139259,69554],{"class":54231},[52,139261,69557],{"class":58},[52,139263,2099],{"class":622},[52,139265,139147],{"class":62},[52,139267,139150],{"class":58},[52,139269,2099],{"class":622},[52,139271,139155],{"class":62},[52,139273,54238],{"class":622},[52,139275,139276,139278,139280,139282,139284,139286,139288,139290,139292,139294,139296,139298],{"class":54,"line":69},[52,139277,55075],{"class":622},[52,139279,56751],{"class":54231},[52,139281,56754],{"class":58},[52,139283,2099],{"class":622},[52,139285,65629],{"class":62},[52,139287,17876],{"class":58},[52,139289,2099],{"class":622},[52,139291,139098],{"class":62},[52,139293,63950],{"class":58},[52,139295,2099],{"class":622},[52,139297,139182],{"class":62},[52,139299,54238],{"class":622},[52,139301,139302,139304,139306,139308,139310,139312,139314,139316,139318,139320,139322,139324],{"class":54,"line":82},[52,139303,55075],{"class":622},[52,139305,56751],{"class":54231},[52,139307,56754],{"class":58},[52,139309,2099],{"class":622},[52,139311,139197],{"class":62},[52,139313,17876],{"class":58},[52,139315,2099],{"class":622},[52,139317,139204],{"class":62},[52,139319,63950],{"class":58},[52,139321,2099],{"class":622},[52,139323,139211],{"class":62},[52,139325,54238],{"class":622},[52,139327,139328,139330,139332,139334,139336,139338,139340,139342],{"class":54,"line":97},[52,139329,55075],{"class":622},[52,139331,56817],{"class":54231},[52,139333,56754],{"class":58},[52,139335,2099],{"class":622},[52,139337,69577],{"class":62},[52,139339,139228],{"class":622},[52,139341,56817],{"class":54231},[52,139343,54238],{"class":622},[52,139345,139346,139348,139350],{"class":54,"line":112},[52,139347,54716],{"class":622},[52,139349,69554],{"class":54231},[52,139351,54238],{"class":622},[280,139353],{"style":128776,"src":139354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139356,139358],{"id":139357},"_142-css新特性","14.2 CSS新特性",[30,139360,139362],{"id":139361},"_1421-新增选择器","14.2.1 新增选择器",[1486,139364,139366],{"id":139365},"_14211-属性选择器","14.2.1.1 属性选择器",[280,139368],{"style":128776,"src":139369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[19,139371,139373],{"className":128920,"code":139372,"language":128922,"meta":28,"style":28},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[26,139374,139375,139390,139406],{"__ignoreMap":28},[52,139376,139377,139379,139381,139383,139385,139387],{"class":54,"line":55},[52,139378,56751],{"class":54231},[52,139380,4002],{"class":622},[52,139382,106027],{"class":58},[52,139384,2099],{"class":160},[52,139386,65629],{"class":62},[52,139388,139389],{"class":622},"] {\n",[52,139391,139392,139394,139396,139398,139400,139402,139404],{"class":54,"line":69},[52,139393,73824],{"class":90},[52,139395,54368],{"class":622},[52,139397,3332],{"class":90},[52,139399,54423],{"class":160},[52,139401,54452],{"class":90},[52,139403,132500],{"class":90},[52,139405,4272],{"class":622},[52,139407,139408],{"class":54,"line":82},[52,139409,4543],{"class":622},[280,139411],{"style":128776,"src":139412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[274,139414,3149],{},[4118,139416,139417,139420,139423,139426],{},[1073,139418,139419],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[1073,139421,139422],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[1073,139424,139425],{},"属性选择器也可以选择出来自定义的属性",[1073,139427,139428,139430],{},[538,139429,11981],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[1486,139432,139434],{"id":139433},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[280,139436],{"style":128776,"src":139437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1070,139439,139440],{},[1073,139441,139442],{},"fist-child",[19,139444,139446],{"className":128920,"code":139445,"language":128922,"meta":28,"style":28},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[26,139447,139448,139453,139468,139488,139506],{"__ignoreMap":28},[52,139449,139450],{"class":54,"line":55},[52,139451,139452],{"class":332},"\u002F* 属性选择器 *\u002F\n",[52,139454,139455,139457,139459,139461,139463,139465],{"class":54,"line":69},[52,139456,56751],{"class":54231},[52,139458,4002],{"class":622},[52,139460,106027],{"class":58},[52,139462,2099],{"class":160},[52,139464,65629],{"class":62},[52,139466,139467],{"class":622},"] { }\n",[52,139469,139470,139472,139474,139476,139479,139482,139485],{"class":54,"line":82},[52,139471,56751],{"class":54231},[52,139473,4002],{"class":622},[52,139475,17650],{"class":58},[52,139477,139478],{"class":160},"^=",[52,139480,139481],{"class":62},"\"icon\"",[52,139483,139484],{"class":622},"] { }  ",[52,139486,139487],{"class":332},"\u002F* 以 icon 开头 *\u002F\n",[52,139489,139490,139492,139494,139496,139499,139501,139503],{"class":54,"line":97},[52,139491,56751],{"class":54231},[52,139493,4002],{"class":622},[52,139495,17650],{"class":58},[52,139497,139498],{"class":160},"$=",[52,139500,139481],{"class":62},[52,139502,139484],{"class":622},[52,139504,139505],{"class":332},"\u002F* 以 icon 结尾 *\u002F\n",[52,139507,139508,139510,139512,139514,139517,139519,139521],{"class":54,"line":112},[52,139509,56751],{"class":54231},[52,139511,4002],{"class":622},[52,139513,17650],{"class":58},[52,139515,139516],{"class":160},"*=",[52,139518,139481],{"class":62},[52,139520,139484],{"class":622},[52,139522,139523],{"class":332},"\u002F* 包含 icon *\u002F\n",[274,139525,139526],{},"ul的第一个儿子文本为红色",[274,139528,139529],{},"一定要在冒号前加空格，不然就是选中所有的了",[19,139531,139533],{"className":128920,"code":139532,"language":128922,"meta":28,"style":28},".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",[26,139534,139535,139541,139551,139555,139559,139564,139577,139590,139606,139623,139640],{"__ignoreMap":28},[52,139536,139537,139539],{"class":54,"line":55},[52,139538,129211],{"class":58},[52,139540,18528],{"class":622},[52,139542,139543,139545,139547,139549],{"class":54,"line":69},[52,139544,73833],{"class":90},[52,139546,54368],{"class":622},[52,139548,60351],{"class":90},[52,139550,4272],{"class":622},[52,139552,139553],{"class":54,"line":82},[52,139554,4543],{"class":622},[52,139556,139557],{"class":54,"line":97},[52,139558,138381],{"class":622},[52,139560,139561],{"class":54,"line":112},[52,139562,139563],{"class":332},"\u002F* 结构伪类选择器 *\u002F\n",[52,139565,139566,139568,139571,139574],{"class":54,"line":119},[52,139567,1073],{"class":54231},[52,139569,139570],{"class":58},":first-child",[52,139572,139573],{"class":622}," { }           ",[52,139575,139576],{"class":332},"\u002F* 第一个 *\u002F\n",[52,139578,139579,139581,139584,139587],{"class":54,"line":130},[52,139580,1073],{"class":54231},[52,139582,139583],{"class":58},":last-child",[52,139585,139586],{"class":622}," { }            ",[52,139588,139589],{"class":332},"\u002F* 最后一个 *\u002F\n",[52,139591,139592,139594,139596,139598,139600,139603],{"class":54,"line":136},[52,139593,1073],{"class":54231},[52,139595,131834],{"class":58},[52,139597,3121],{"class":622},[52,139599,3194],{"class":90},[52,139601,139602],{"class":622},") { }          ",[52,139604,139605],{"class":332},"\u002F* 第2个 *\u002F\n",[52,139607,139608,139610,139612,139614,139617,139620],{"class":54,"line":141},[52,139609,1073],{"class":54231},[52,139611,131834],{"class":58},[52,139613,3121],{"class":622},[52,139615,139616],{"class":90},"2n",[52,139618,139619],{"class":622},") { }         ",[52,139621,139622],{"class":332},"\u002F* 偶数 *\u002F\n",[52,139624,139625,139627,139629,139631,139634,139637],{"class":54,"line":146},[52,139626,1073],{"class":54231},[52,139628,131834],{"class":58},[52,139630,3121],{"class":622},[52,139632,139633],{"class":90},"2n+1",[52,139635,139636],{"class":622},") { }       ",[52,139638,139639],{"class":332},"\u002F* 奇数 *\u002F\n",[52,139641,139642,139644,139646,139648,139651,139653],{"class":54,"line":152},[52,139643,1073],{"class":54231},[52,139645,131834],{"class":58},[52,139647,3121],{"class":622},[52,139649,139650],{"class":90},"-n+3",[52,139652,139636],{"class":622},[52,139654,139655],{"class":332},"\u002F* 前3个 *\u002F\n",[54542,139657,139660],{"className":139658},[139659],"example","\n  示例内容\n",[274,139662,139663],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[4118,139665,139666],{},[1073,139667,139668,139671],{},[26,139669,139670],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[274,139673,139674],{},"也就是说它选择的是熊大",[1070,139676,139677],{"start":119},[1073,139678,139679],{},"权重",[19,139681,139683],{"className":128920,"code":139682,"language":128922,"meta":28,"style":28},"\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",[26,139684,139685,139689,139699,139709,139723,139737,139751],{"__ignoreMap":28},[52,139686,139687],{"class":54,"line":55},[52,139688,139563],{"class":332},[52,139690,139691,139693,139695,139697],{"class":54,"line":69},[52,139692,1073],{"class":54231},[52,139694,139570],{"class":58},[52,139696,139573],{"class":622},[52,139698,139576],{"class":332},[52,139700,139701,139703,139705,139707],{"class":54,"line":82},[52,139702,1073],{"class":54231},[52,139704,139583],{"class":58},[52,139706,139586],{"class":622},[52,139708,139589],{"class":332},[52,139710,139711,139713,139715,139717,139719,139721],{"class":54,"line":97},[52,139712,1073],{"class":54231},[52,139714,131834],{"class":58},[52,139716,3121],{"class":622},[52,139718,3194],{"class":90},[52,139720,139602],{"class":622},[52,139722,139605],{"class":332},[52,139724,139725,139727,139729,139731,139733,139735],{"class":54,"line":112},[52,139726,1073],{"class":54231},[52,139728,131834],{"class":58},[52,139730,3121],{"class":622},[52,139732,139616],{"class":90},[52,139734,139619],{"class":622},[52,139736,139622],{"class":332},[52,139738,139739,139741,139743,139745,139747,139749],{"class":54,"line":119},[52,139740,1073],{"class":54231},[52,139742,131834],{"class":58},[52,139744,3121],{"class":622},[52,139746,139633],{"class":90},[52,139748,139636],{"class":622},[52,139750,139639],{"class":332},[52,139752,139753,139755,139757,139759,139761,139763],{"class":54,"line":130},[52,139754,1073],{"class":54231},[52,139756,131834],{"class":58},[52,139758,3121],{"class":622},[52,139760,139650],{"class":90},[52,139762,139636],{"class":622},[52,139764,139655],{"class":332},[274,139766,139767],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[1486,139769,139771],{"id":139770},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[274,139773,139774],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[280,139776],{"style":128776,"src":139777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1070,139779,139780],{},[1073,139781,3149],{},[4118,139783,139784,139787,139790,139793,139796,139799],{},[1073,139785,139786],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[1073,139788,139789],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[1073,139791,139792],{},"语法： element::before {}",[1073,139794,139795],{},"before 和 after 必须有 content 属性",[1073,139797,139798],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[1073,139800,139801],{},"伪元素选择器和标签选择器一样，权重为 1",[1070,139803,139804],{"start":69},[1073,139805,139806],{},"实例",[19,139808,139809],{"className":128920,"code":139682,"language":128922,"meta":28,"style":28},[26,139810,139811,139815,139825,139835,139849,139863,139877],{"__ignoreMap":28},[52,139812,139813],{"class":54,"line":55},[52,139814,139563],{"class":332},[52,139816,139817,139819,139821,139823],{"class":54,"line":69},[52,139818,1073],{"class":54231},[52,139820,139570],{"class":58},[52,139822,139573],{"class":622},[52,139824,139576],{"class":332},[52,139826,139827,139829,139831,139833],{"class":54,"line":82},[52,139828,1073],{"class":54231},[52,139830,139583],{"class":58},[52,139832,139586],{"class":622},[52,139834,139589],{"class":332},[52,139836,139837,139839,139841,139843,139845,139847],{"class":54,"line":97},[52,139838,1073],{"class":54231},[52,139840,131834],{"class":58},[52,139842,3121],{"class":622},[52,139844,3194],{"class":90},[52,139846,139602],{"class":622},[52,139848,139605],{"class":332},[52,139850,139851,139853,139855,139857,139859,139861],{"class":54,"line":112},[52,139852,1073],{"class":54231},[52,139854,131834],{"class":58},[52,139856,3121],{"class":622},[52,139858,139616],{"class":90},[52,139860,139619],{"class":622},[52,139862,139622],{"class":332},[52,139864,139865,139867,139869,139871,139873,139875],{"class":54,"line":119},[52,139866,1073],{"class":54231},[52,139868,131834],{"class":58},[52,139870,3121],{"class":622},[52,139872,139633],{"class":90},[52,139874,139636],{"class":622},[52,139876,139639],{"class":332},[52,139878,139879,139881,139883,139885,139887,139889],{"class":54,"line":130},[52,139880,1073],{"class":54231},[52,139882,131834],{"class":58},[52,139884,3121],{"class":622},[52,139886,139650],{"class":90},[52,139888,139636],{"class":622},[52,139890,139655],{"class":332},[280,139892],{"style":128776,"src":139893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1070,139895,139896],{"start":82},[1073,139897,139898],{},"使用场景1",[280,139900],{"style":128776,"src":139901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[274,139903,139904],{},"不需要再加盒子来整红色那部分了",[19,139906,139908],{"className":128920,"code":139907,"language":128922,"meta":28,"style":28},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[26,139909,139910,139915,139924,139935,139945,139949,139958,139969,139979],{"__ignoreMap":28},[52,139911,139912],{"class":54,"line":55},[52,139913,139914],{"class":332},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[52,139916,139917,139919,139922],{"class":54,"line":69},[52,139918,54542],{"class":54231},[52,139920,139921],{"class":58},"::before",[52,139923,18528],{"class":622},[52,139925,139926,139929,139931,139933],{"class":54,"line":82},[52,139927,139928],{"class":90},"  content",[52,139930,54368],{"class":622},[52,139932,10608],{"class":62},[52,139934,4272],{"class":622},[52,139936,139937,139939,139941,139943],{"class":54,"line":97},[52,139938,130536],{"class":90},[52,139940,54368],{"class":622},[52,139942,63799],{"class":90},[52,139944,4272],{"class":622},[52,139946,139947],{"class":54,"line":112},[52,139948,4543],{"class":622},[52,139950,139951,139953,139956],{"class":54,"line":119},[52,139952,54542],{"class":54231},[52,139954,139955],{"class":58},"::after",[52,139957,18528],{"class":622},[52,139959,139960,139962,139964,139967],{"class":54,"line":130},[52,139961,139928],{"class":90},[52,139963,54368],{"class":622},[52,139965,139966],{"class":62},"\"→\"",[52,139968,4272],{"class":622},[52,139970,139971,139973,139975,139977],{"class":54,"line":136},[52,139972,73833],{"class":90},[52,139974,54368],{"class":622},[52,139976,65000],{"class":90},[52,139978,4272],{"class":622},[52,139980,139981],{"class":54,"line":141},[52,139982,4543],{"class":622},[280,139984],{"style":128776,"src":139985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[274,139987,139988],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[280,139990],{"style":128776,"src":139991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[274,139993,139994],{},"但是在引用时需要先转义一下",[274,139996,139997],{},"content='\\e930'",[1070,139999,140000],{"start":97},[1073,140001,140002],{},"使用场景2",[274,140004,140005],{},"仿土豆效果",[274,140007,140008],{},"通过使用伪元素选择器可以减少body中盒子的数量",[19,140010,140011],{"className":128920,"code":139907,"language":128922,"meta":28,"style":28},[26,140012,140013,140017,140025,140035,140045,140049,140057,140067,140077],{"__ignoreMap":28},[52,140014,140015],{"class":54,"line":55},[52,140016,139914],{"class":332},[52,140018,140019,140021,140023],{"class":54,"line":69},[52,140020,54542],{"class":54231},[52,140022,139921],{"class":58},[52,140024,18528],{"class":622},[52,140026,140027,140029,140031,140033],{"class":54,"line":82},[52,140028,139928],{"class":90},[52,140030,54368],{"class":622},[52,140032,10608],{"class":62},[52,140034,4272],{"class":622},[52,140036,140037,140039,140041,140043],{"class":54,"line":97},[52,140038,130536],{"class":90},[52,140040,54368],{"class":622},[52,140042,63799],{"class":90},[52,140044,4272],{"class":622},[52,140046,140047],{"class":54,"line":112},[52,140048,4543],{"class":622},[52,140050,140051,140053,140055],{"class":54,"line":119},[52,140052,54542],{"class":54231},[52,140054,139955],{"class":58},[52,140056,18528],{"class":622},[52,140058,140059,140061,140063,140065],{"class":54,"line":130},[52,140060,139928],{"class":90},[52,140062,54368],{"class":622},[52,140064,139966],{"class":62},[52,140066,4272],{"class":622},[52,140068,140069,140071,140073,140075],{"class":54,"line":136},[52,140070,73833],{"class":90},[52,140072,54368],{"class":622},[52,140074,65000],{"class":90},[52,140076,4272],{"class":622},[52,140078,140079],{"class":54,"line":141},[52,140080,4543],{"class":622},[280,140082],{"style":128776,"src":140083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1070,140085,140086],{"start":112},[1073,140087,140088],{},"使用场景3",[274,140090,140091],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[19,140093,140095],{"className":128920,"code":140094,"language":128922,"meta":28,"style":28},".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",[26,140096,140097,140103,140113,140117,140121,140125,140133,140143,140153,140157,140165,140175,140185],{"__ignoreMap":28},[52,140098,140099,140101],{"class":54,"line":55},[52,140100,132768],{"class":58},[52,140102,18528],{"class":622},[52,140104,140105,140107,140109,140111],{"class":54,"line":69},[52,140106,133400],{"class":90},[52,140108,54368],{"class":622},[52,140110,26688],{"class":90},[52,140112,4272],{"class":622},[52,140114,140115],{"class":54,"line":82},[52,140116,4543],{"class":622},[52,140118,140119],{"class":54,"line":97},[52,140120,138381],{"class":622},[52,140122,140123],{"class":54,"line":112},[52,140124,139914],{"class":332},[52,140126,140127,140129,140131],{"class":54,"line":119},[52,140128,54542],{"class":54231},[52,140130,139921],{"class":58},[52,140132,18528],{"class":622},[52,140134,140135,140137,140139,140141],{"class":54,"line":130},[52,140136,139928],{"class":90},[52,140138,54368],{"class":622},[52,140140,10608],{"class":62},[52,140142,4272],{"class":622},[52,140144,140145,140147,140149,140151],{"class":54,"line":136},[52,140146,130536],{"class":90},[52,140148,54368],{"class":622},[52,140150,63799],{"class":90},[52,140152,4272],{"class":622},[52,140154,140155],{"class":54,"line":141},[52,140156,4543],{"class":622},[52,140158,140159,140161,140163],{"class":54,"line":146},[52,140160,54542],{"class":54231},[52,140162,139955],{"class":58},[52,140164,18528],{"class":622},[52,140166,140167,140169,140171,140173],{"class":54,"line":152},[52,140168,139928],{"class":90},[52,140170,54368],{"class":622},[52,140172,139966],{"class":62},[52,140174,4272],{"class":622},[52,140176,140177,140179,140181,140183],{"class":54,"line":157},[52,140178,73833],{"class":90},[52,140180,54368],{"class":622},[52,140182,65000],{"class":90},[52,140184,4272],{"class":622},[52,140186,140187],{"class":54,"line":173},[52,140188,4543],{"class":622},[274,140190,140191],{},"div {\nmargin: 0 auto;\n}",[19,140193,140196],{"className":140194,"code":140195,"language":24},[22],"\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",[26,140197,140195],{"__ignoreMap":28},[274,140199,140200],{},"如果想让多个元素都发生变化",[274,140202,140203],{},"不能如下操作：",[274,140205,140206],{},"transition: width 2s ease 0.5s;",[274,140208,140209],{},"transition: height 2s ease 0.5s;不对！！！",[274,140211,140212],{},"上方会样式冲突，导致不显示任何过渡效果",[274,140214,140215],{},"使用如下：加逗号隔开",[274,140217,140218],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[274,140220,140221],{},"transition all 2s ease;",[30,140223,140225],{"id":140224},"_1426-过渡练习","14.2.6 过渡练习",[1070,140227,140228],{},[1073,140229,140230],{},"进度条",[280,140232],{"style":128776,"src":140233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[19,140235,140237],{"className":128920,"code":140236,"language":128922,"meta":28,"style":28},"div {\n  transition: all 0.3s ease;\n}\n",[26,140238,140239,140245,140263],{"__ignoreMap":28},[52,140240,140241,140243],{"class":54,"line":55},[52,140242,54542],{"class":54231},[52,140244,18528],{"class":622},[52,140246,140247,140250,140252,140254,140257,140259,140261],{"class":54,"line":69},[52,140248,140249],{"class":90},"  transition",[52,140251,54368],{"class":622},[52,140253,31055],{"class":90},[52,140255,140256],{"class":90}," 0.3",[52,140258,3807],{"class":160},[52,140260,81608],{"class":90},[52,140262,4272],{"class":622},[52,140264,140265],{"class":54,"line":82},[52,140266,4543],{"class":622},[1070,140268,140269],{"start":69},[1073,140270,140271],{},"小米logo",[274,140273,140274],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[19,140276,140278],{"className":128920,"code":140277,"language":128922,"meta":28,"style":28},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[26,140279,140280,140285,140291,140307,140312],{"__ignoreMap":28},[52,140281,140282],{"class":54,"line":55},[52,140283,140284],{"class":332},"\u002F* CSS3 过渡 *\u002F\n",[52,140286,140287,140289],{"class":54,"line":69},[52,140288,54542],{"class":54231},[52,140290,18528],{"class":622},[52,140292,140293,140295,140297,140299,140301,140303,140305],{"class":54,"line":82},[52,140294,140249],{"class":90},[52,140296,54368],{"class":622},[52,140298,31055],{"class":90},[52,140300,140256],{"class":90},[52,140302,3807],{"class":160},[52,140304,81608],{"class":90},[52,140306,4272],{"class":622},[52,140308,140309],{"class":54,"line":97},[52,140310,140311],{"class":332},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[52,140313,140314],{"class":54,"line":112},[52,140315,4543],{"class":622},[274,140317,140318],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[3015,140320,140321],{},"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":28,"searchDepth":69,"depth":69,"links":140323},[140324,140329],{"id":138654,"depth":69,"text":138655,"children":140325},[140326,140327,140328],{"id":138658,"depth":82,"text":138659},{"id":138735,"depth":82,"text":138736},{"id":139066,"depth":82,"text":139067},{"id":139357,"depth":69,"text":139358,"children":140330},[140331,140332],{"id":139361,"depth":82,"text":139362},{"id":140224,"depth":82,"text":140225},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138646,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140339,"title":140340,"body":140341,"description":3046,"extension":3047,"meta":142085,"navigation":115,"path":142086,"seo":142087,"stem":142088,"__hash__":142089},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140342,"toc":142066},[140343,140346,140350,140353,140359,140365,140369,140371,140374,140377,140380,140383,140386,140389,140392,140396,140400,140403,140406,140409,140413,140416,140419,140424,140427,140430,140433,140437,140440,140449,140452,140455,140459,140462,140465,140470,140477,140491,140499,140506,140511,140514,140517,140520,140527,140531,140537,140543,140546,140549,140554,140560,140562,140570,140575,140578,140584,140586,140591,140596,140599,140601,140606,140609,140614,140619,140653,140657,140661,140664,140668,140671,140757,140760,140797,140800,140836,140840,140845,140858,140912,140914,140942,140944,140972,140978,140992,140994,141038,141040,141084,141087,141094,141105,141107,141134,141136,141162,141169,141185,141187,141281,141283,141377,141384,141387,141392,141398,141472,141475,141477,141513,141515,141551,141554,141561,141580,141583,141586,141588,141613,141615,141639,141642,141645,141675,141679,141682,141745,141747,141813,141815,141879,141882,141914,141916,141942,141944,141970,141973,142004,142006,142032,142034,142060,142063],[10,140344,140340],{"id":140345},"_15-品优购项目上篇-搭建与公共模块",[14,140347,140349],{"id":140348},"_151-项目规划","15.1 项目规划",[280,140351],{"style":128776,"src":140352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[274,140354,140355,140358],{},[538,140356,140357],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[274,140360,140361,140364],{},[538,140362,140363],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140366,140368],{"id":140367},"_152-项目介绍","15.2 项目介绍",[274,140370,140357],{},[280,140372],{"style":128776,"src":140373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[274,140375,140376],{},"主页：",[280,140378],{"style":128776,"src":140379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[274,140381,140382],{},"列表页：",[280,140384],{"style":128776,"src":140385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[274,140387,140388],{},"注册页：",[280,140390],{"style":128776,"src":140391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140393,140395],{"id":140394},"_153-项目搭建工作","15.3 项目搭建工作",[30,140397,140399],{"id":140398},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[280,140401],{"style":128776,"src":140402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[274,140404,140405],{},"经常更换的图片要放到upload文件夹中",[274,140407,140408],{},"不经常换的放到images文件夹中",[30,140410,140412],{"id":140411},"_1532-创建文件如下","15.3.2 创建文件如下",[280,140414],{"style":128776,"src":140415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[280,140417],{"style":128776,"src":140418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[274,140420,140421],{},[538,140422,140423],{},"初始化样式：",[274,140425,140426],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[274,140428,140429],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[274,140431,140432],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[30,140434,140436],{"id":140435},"_1533-项目模块化开发","15.3.3 项目模块化开发",[274,140438,140439],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[274,140441,140442,140443,140448],{},"这里最典型的应用就是 ",[538,140444,140445],{},[26,140446,140447],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[280,140450],{"style":128776,"src":140451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[274,140453,140454],{},"通过link方法来引入",[30,140456,140458],{"id":140457},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[280,140460],{"style":128776,"src":140461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[274,140463,140464],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1070,140466,140467],{},[1073,140468,140469],{},"制作favicon图标",[274,140471,140472,140473,140476],{},"①把品优购图标切成 ",[26,140474,140475],{},"png"," 图片",[274,140478,140479,140480,140482,140483,140486,140487],{},"②把 ",[26,140481,140475],{}," 图片转换为 ",[26,140484,140485],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[300,140488,140489],{"href":140489,"rel":140490},"http:\u002F\u002Fwww.bitbug.net\u002F",[304],[1070,140492,140493,140496],{"start":69},[1073,140494,140495],{},"favicon图标放到网站根目录下",[1073,140497,140498],{},"HTML页面引入favicon",[274,140500,140501,140502,140505],{},"在html 页面里面的 ",[26,140503,140504],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[274,140507,140508],{},[26,140509,140510],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[274,140512,140513],{},"复制这行代码或者在生成这个的网站进行复制",[280,140515],{"style":128776,"src":140516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[274,140518,140519],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[274,140521,140522,140523],{},"例如:",[300,140524,140525],{"href":140525,"rel":140526},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[304],[30,140528,140530],{"id":140529},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[274,140532,140533,140536],{},[538,140534,140535],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[274,140538,140539,140542],{},[538,140540,140541],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[274,140544,140545],{},"页面必须有三个标签用来符合 SEO 优化",[280,140547],{"style":128776,"src":140548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1070,140550,140551],{},[1073,140552,140553],{},"title网站标题",[274,140555,140556,140559],{},[538,140557,140558],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[274,140561,71719],{},[4118,140563,140564,140567],{},[1073,140565,140566],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[1073,140568,140569],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1070,140571,140572],{"start":69},[1073,140573,140574],{},"description网站描述",[274,140576,140577],{},"简要说明我们网站主要是做什么的",[274,140579,140580,140583],{},[538,140581,140582],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[274,140585,71719],{},[274,140587,140588],{},[26,140589,140590],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1070,140592,140593],{"start":82},[1073,140594,140595],{},"keywords关键词",[274,140597,140598],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[274,140600,71719],{},[274,140602,140603],{},[26,140604,140605],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[274,140607,140608],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[274,140610,140611],{},[538,140612,140613],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1070,140615,140616],{"start":97},[1073,140617,140618],{},"代码总结",[19,140620,140621],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,140622,140623,140627,140641,140645],{"__ignoreMap":28},[52,140624,140625],{"class":54,"line":55},[52,140626,133031],{"class":332},[52,140628,140629,140631,140633,140635,140637,140639],{"class":54,"line":69},[52,140630,4022],{"class":622},[52,140632,54542],{"class":54231},[52,140634,56416],{"class":58},[52,140636,2099],{"class":622},[52,140638,133044],{"class":62},[52,140640,54238],{"class":622},[52,140642,140643],{"class":54,"line":82},[52,140644,133051],{"class":622},[52,140646,140647,140649,140651],{"class":54,"line":97},[52,140648,54716],{"class":622},[52,140650,54542],{"class":54231},[52,140652,54238],{"class":622},[14,140654,140656],{"id":140655},"_154-项目公共部分制作","15.4 项目公共部分制作",[30,140658,140660],{"id":140659},"_1541-常用模块类命名","15.4.1 常用模块类命名",[280,140662],{"style":128776,"src":140663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[30,140665,140667],{"id":140666},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[274,140669,140670],{},"布局思路：",[4118,140672,140673,140676,140679,140701,140734],{},[1073,140674,140675],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[1073,140677,140678],{},"里面包含版心的盒子",[1073,140680,140681,140682],{},"版心盒子里面包含 1 号左侧盒子左浮动",[4118,140683,140684,140692,140698],{},[1073,140685,140686,140687,24455,140689,140691],{},"1 号盒子 里面包含一个",[26,140688,4118],{},[26,140690,4118],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[1073,140693,140694,140695,140697],{},"里面的内容是水平排列，所以需要给",[26,140696,1073],{},"设置浮动",[1073,140699,140700],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[1073,140702,140703,140704],{},"版心盒子里面包含 2 号右侧盒子右浮动",[4118,140705,140706,140720,140725],{},[1073,140707,140708,140709,24455,140711,140713,140714,140716,140717,140719],{},"2 号盒子 里面包含一个",[26,140710,4118],{},[26,140712,4118],{},"包裹",[26,140715,1073],{},"，中间的",[26,140718,4033],{},"可以用样式去设置，也可以用字符 |",[1073,140721,140722,140723,140697],{},"里面内容水平排列，给",[26,140724,1073],{},[1073,140726,140727,140728,140730,140731,140733],{},"找到里面所有偶数的 ",[26,140729,1073],{}," 设置样式（偶数的 ",[26,140732,1073],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[1073,140735,140736,140737],{},"需要用到字体图标",[4118,140738,140739,140745,140748,140751,140754],{},[1073,140740,140741,140742],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[26,140743,140744],{},"arrow-icon",[1073,140746,140747],{},"先要引入字体图片的资源",[1073,140749,140750],{},"在样式里面利用 font-face 来进行声明",[1073,140752,140753],{},"在伪元素的 content属性设置 图标的编码",[1073,140755,140756],{},"给伪元素设置font-family属性",[274,140758,140759],{},"结构实例代码：",[19,140761,140763],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},"div::before {\n  content: \"\";\n  display: block;\n}\n",[26,140764,140765,140773,140783,140793],{"__ignoreMap":28},[52,140766,140767,140769,140771],{"class":54,"line":55},[52,140768,54542],{"class":54231},[52,140770,139921],{"class":58},[52,140772,18528],{"class":622},[52,140774,140775,140777,140779,140781],{"class":54,"line":69},[52,140776,139928],{"class":90},[52,140778,54368],{"class":622},[52,140780,10608],{"class":62},[52,140782,4272],{"class":622},[52,140784,140785,140787,140789,140791],{"class":54,"line":82},[52,140786,130536],{"class":90},[52,140788,54368],{"class":622},[52,140790,63799],{"class":90},[52,140792,4272],{"class":622},[52,140794,140795],{"class":54,"line":97},[52,140796,4543],{"class":622},[274,140798,140799],{},"样式实例代码：",[19,140801,140802],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},[26,140803,140804,140812,140822,140832],{"__ignoreMap":28},[52,140805,140806,140808,140810],{"class":54,"line":55},[52,140807,54542],{"class":54231},[52,140809,139921],{"class":58},[52,140811,18528],{"class":622},[52,140813,140814,140816,140818,140820],{"class":54,"line":69},[52,140815,139928],{"class":90},[52,140817,54368],{"class":622},[52,140819,10608],{"class":62},[52,140821,4272],{"class":622},[52,140823,140824,140826,140828,140830],{"class":54,"line":82},[52,140825,130536],{"class":90},[52,140827,54368],{"class":622},[52,140829,63799],{"class":90},[52,140831,4272],{"class":622},[52,140833,140834],{"class":54,"line":97},[52,140835,4543],{"class":622},[30,140837,140839],{"id":140838},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[4118,140841,140842],{},[1073,140843,140844],{},"header 盒子必须要有高度",[274,140846,140847,140848,140850,140851],{},"1 号盒子是 ",[26,140849,133932],{}," 标志定位，在正常开发过程中， ",[538,140852,140853,140854,140857],{},"logo的布局其实是有讲究的，需要进行 ",[26,140855,140856],{},"logoSEO","的优化 （★★★）",[4118,140859,140860,140868,140876,140903],{},[1073,140861,140862,140864,140865,140867],{},[26,140863,133932],{}," 里面首先放一个 ",[26,140866,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[1073,140869,140870,140872,140873,140875],{},[26,140871,10],{}," 里面再放一个链接，可以返回首页的，把 ",[26,140874,133932],{}," 的背景图片给链接即可",[1073,140877,140878,140879],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[4118,140880,140881,140896],{},[1073,140882,140883,140884,140887,140888,140891,140892,140895],{},"方法1：",[26,140885,140886],{},"text-indent"," 移到盒子外面（",[26,140889,140890],{},"text-indent: -9999px",") ，然后 ",[26,140893,140894],{},"overflow:hidden"," ，淘宝的做法",[1073,140897,140898,140899,140902],{},"方法2：直接给 ",[26,140900,140901],{},"font-size: 0;"," 就看不到文字了，京东的做法",[1073,140904,140905,140906,140908,140909,140911],{},"最后给链接一个 ",[26,140907,54338],{}," 属性，这样鼠标放到 ",[26,140910,133932],{}," 上就可以看到提示文字了",[274,140913,140759],{},[19,140915,140916],{"className":129667,"code":134153,"language":129669,"meta":28,"style":28},[26,140917,140918],{"__ignoreMap":28},[52,140919,140920,140922,140924,140926,140928,140930,140932,140934,140936,140938,140940],{"class":54,"line":55},[52,140921,4022],{"class":622},[52,140923,300],{"class":54231},[52,140925,63987],{"class":58},[52,140927,2099],{"class":622},[52,140929,134168],{"class":62},[52,140931,134171],{"class":58},[52,140933,2099],{"class":622},[52,140935,134176],{"class":62},[52,140937,134179],{"class":622},[52,140939,300],{"class":54231},[52,140941,54238],{"class":622},[274,140943,140799],{},[19,140945,140946],{"className":129667,"code":134153,"language":129669,"meta":28,"style":28},[26,140947,140948],{"__ignoreMap":28},[52,140949,140950,140952,140954,140956,140958,140960,140962,140964,140966,140968,140970],{"class":54,"line":55},[52,140951,4022],{"class":622},[52,140953,300],{"class":54231},[52,140955,63987],{"class":58},[52,140957,2099],{"class":622},[52,140959,134168],{"class":62},[52,140961,134171],{"class":58},[52,140963,2099],{"class":622},[52,140965,134176],{"class":62},[52,140967,134179],{"class":622},[52,140969,300],{"class":54231},[52,140971,54238],{"class":622},[274,140973,140974,140975,140977],{},"2 号盒子是 ",[26,140976,133945],{}," 搜索模块定位",[4118,140979,140980,140983,140986,140989],{},[1073,140981,140982],{},"search盒子利用定位的方式放在对应的位置",[1073,140984,140985],{},"search盒子设置绝对定位，header盒子设置相对定位",[1073,140987,140988],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[1073,140990,140991],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[274,140993,140759],{},[19,140995,140996],{"className":128920,"code":134240,"language":128922,"meta":28,"style":28},[26,140997,140998,141020,141024,141034],{"__ignoreMap":28},[52,140999,141000,141002,141004,141006,141008,141010,141012,141014,141016,141018],{"class":54,"line":55},[52,141001,54542],{"class":54231},[52,141003,15391],{"class":622},[52,141005,274],{"class":54231},[52,141007,15391],{"class":622},[52,141009,10],{"class":54231},[52,141011,15391],{"class":622},[52,141013,4118],{"class":54231},[52,141015,15391],{"class":622},[52,141017,1073],{"class":54231},[52,141019,18528],{"class":622},[52,141021,141022],{"class":54,"line":69},[52,141023,134269],{"class":332},[52,141025,141026,141028,141030,141032],{"class":54,"line":82},[52,141027,130536],{"class":90},[52,141029,54368],{"class":622},[52,141031,63799],{"class":90},[52,141033,4272],{"class":622},[52,141035,141036],{"class":54,"line":97},[52,141037,4543],{"class":622},[274,141039,140799],{},[19,141041,141042],{"className":128920,"code":134240,"language":128922,"meta":28,"style":28},[26,141043,141044,141066,141070,141080],{"__ignoreMap":28},[52,141045,141046,141048,141050,141052,141054,141056,141058,141060,141062,141064],{"class":54,"line":55},[52,141047,54542],{"class":54231},[52,141049,15391],{"class":622},[52,141051,274],{"class":54231},[52,141053,15391],{"class":622},[52,141055,10],{"class":54231},[52,141057,15391],{"class":622},[52,141059,4118],{"class":54231},[52,141061,15391],{"class":622},[52,141063,1073],{"class":54231},[52,141065,18528],{"class":622},[52,141067,141068],{"class":54,"line":69},[52,141069,134269],{"class":332},[52,141071,141072,141074,141076,141078],{"class":54,"line":82},[52,141073,130536],{"class":90},[52,141075,54368],{"class":622},[52,141077,63799],{"class":90},[52,141079,4272],{"class":622},[52,141081,141082],{"class":54,"line":97},[52,141083,4543],{"class":622},[274,141085,141086],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[274,141088,141089,141090,141093],{},"3 号盒子是 ",[26,141091,141092],{},"hotwords"," 热词模块定位",[4118,141095,141096,141099,141102],{},[1073,141097,141098],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[1073,141100,141101],{},"给里面所有的a标签设置 左右10px的外边距",[1073,141103,141104],{},"给第一个a标签设置文字变红色（#c81623）",[274,141106,140759],{},[19,141108,141110],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},"div {\n  margin: 0 auto;\n}\n",[26,141111,141112,141118,141130],{"__ignoreMap":28},[52,141113,141114,141116],{"class":54,"line":55},[52,141115,54542],{"class":54231},[52,141117,18528],{"class":622},[52,141119,141120,141122,141124,141126,141128],{"class":54,"line":69},[52,141121,73398],{"class":90},[52,141123,54368],{"class":622},[52,141125,3306],{"class":90},[52,141127,54487],{"class":90},[52,141129,4272],{"class":622},[52,141131,141132],{"class":54,"line":82},[52,141133,4543],{"class":622},[274,141135,140799],{},[19,141137,141138],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,141139,141140,141146,141158],{"__ignoreMap":28},[52,141141,141142,141144],{"class":54,"line":55},[52,141143,54542],{"class":54231},[52,141145,18528],{"class":622},[52,141147,141148,141150,141152,141154,141156],{"class":54,"line":69},[52,141149,73398],{"class":90},[52,141151,54368],{"class":622},[52,141153,3306],{"class":90},[52,141155,54487],{"class":90},[52,141157,4272],{"class":622},[52,141159,141160],{"class":54,"line":82},[52,141161,4543],{"class":622},[274,141163,141164,141165,141168],{},"4 号盒子是 ",[26,141166,141167],{},"shopcar"," 购物车模块",[4118,141170,141171,141176,141179,141182],{},[1073,141172,125703,141173,141175],{},[26,141174,141167],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[1073,141177,141178],{},"count 统计部分用绝对定位做",[1073,141180,141181],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[1073,141183,141184],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[274,141186,140759],{},[19,141188,141189],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},[26,141190,141191,141195,141209,141213,141227,141231,141245,141249,141263,141267],{"__ignoreMap":28},[52,141192,141193],{"class":54,"line":55},[52,141194,134359],{"class":332},[52,141196,141197,141199,141201,141203,141205,141207],{"class":54,"line":69},[52,141198,134364],{"class":58},[52,141200,82735],{"class":622},[52,141202,131280],{"class":90},[52,141204,54368],{"class":622},[52,141206,134373],{"class":90},[52,141208,131850],{"class":622},[52,141210,141211],{"class":54,"line":82},[52,141212,134380],{"class":332},[52,141214,141215,141217,141219,141221,141223,141225],{"class":54,"line":97},[52,141216,134385],{"class":58},[52,141218,82735],{"class":622},[52,141220,131280],{"class":90},[52,141222,54368],{"class":622},[52,141224,57694],{"class":90},[52,141226,131850],{"class":622},[52,141228,141229],{"class":54,"line":112},[52,141230,134400],{"class":332},[52,141232,141233,141235,141237,141239,141241,141243],{"class":54,"line":119},[52,141234,134405],{"class":58},[52,141236,82735],{"class":622},[52,141238,131280],{"class":90},[52,141240,54368],{"class":622},[52,141242,57761],{"class":90},[52,141244,131850],{"class":622},[52,141246,141247],{"class":54,"line":130},[52,141248,134420],{"class":332},[52,141250,141251,141253,141255,141257,141259,141261],{"class":54,"line":136},[52,141252,134425],{"class":58},[52,141254,82735],{"class":622},[52,141256,131280],{"class":90},[52,141258,54368],{"class":622},[52,141260,89161],{"class":90},[52,141262,131850],{"class":622},[52,141264,141265],{"class":54,"line":141},[52,141266,134440],{"class":332},[52,141268,141269,141271,141273,141275,141277,141279],{"class":54,"line":146},[52,141270,134445],{"class":58},[52,141272,82735],{"class":622},[52,141274,131280],{"class":90},[52,141276,54368],{"class":622},[52,141278,134454],{"class":90},[52,141280,131850],{"class":622},[274,141282,140799],{},[19,141284,141285],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},[26,141286,141287,141291,141305,141309,141323,141327,141341,141345,141359,141363],{"__ignoreMap":28},[52,141288,141289],{"class":54,"line":55},[52,141290,134359],{"class":332},[52,141292,141293,141295,141297,141299,141301,141303],{"class":54,"line":69},[52,141294,134364],{"class":58},[52,141296,82735],{"class":622},[52,141298,131280],{"class":90},[52,141300,54368],{"class":622},[52,141302,134373],{"class":90},[52,141304,131850],{"class":622},[52,141306,141307],{"class":54,"line":82},[52,141308,134380],{"class":332},[52,141310,141311,141313,141315,141317,141319,141321],{"class":54,"line":97},[52,141312,134385],{"class":58},[52,141314,82735],{"class":622},[52,141316,131280],{"class":90},[52,141318,54368],{"class":622},[52,141320,57694],{"class":90},[52,141322,131850],{"class":622},[52,141324,141325],{"class":54,"line":112},[52,141326,134400],{"class":332},[52,141328,141329,141331,141333,141335,141337,141339],{"class":54,"line":119},[52,141330,134405],{"class":58},[52,141332,82735],{"class":622},[52,141334,131280],{"class":90},[52,141336,54368],{"class":622},[52,141338,57761],{"class":90},[52,141340,131850],{"class":622},[52,141342,141343],{"class":54,"line":130},[52,141344,134420],{"class":332},[52,141346,141347,141349,141351,141353,141355,141357],{"class":54,"line":136},[52,141348,134425],{"class":58},[52,141350,82735],{"class":622},[52,141352,131280],{"class":90},[52,141354,54368],{"class":622},[52,141356,89161],{"class":90},[52,141358,131850],{"class":622},[52,141360,141361],{"class":54,"line":141},[52,141362,134440],{"class":332},[52,141364,141365,141367,141369,141371,141373,141375],{"class":54,"line":146},[52,141366,134445],{"class":58},[52,141368,82735],{"class":622},[52,141370,131280],{"class":90},[52,141372,54368],{"class":622},[52,141374,134454],{"class":90},[52,141376,131850],{"class":622},[30,141378,141380,141381,141383],{"id":141379},"_1544-nav导航模块制作","15.4.4 ",[26,141382,56643],{},"导航模块制作",[280,141385],{"style":128776,"src":141386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[274,141388,141389,141391],{},[26,141390,56643],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[274,141393,141394,141395],{},"1 号盒子左侧浮动，",[26,141396,141397],{},"dropdown",[4118,141399,141400,141410,141418,141424,141432,141442,141450,141461],{},[1073,141401,141402,141403,103940,141406,141409],{},"1号盒子有讲究，根据相关性 里面包含 ",[26,141404,141405],{},".dt",[26,141407,141408],{},".dd"," 两个盒子",[1073,141411,141412,141414,141415,141417],{},[26,141413,141405],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[26,141416,141408],{}," 挤到下面去了",[1073,141419,141420,141421,141423],{},"给 ",[26,141422,141408],{}," 盒子设置宽度 和 高度，以及背景颜色",[1073,141425,141420,141426,141428,141429,1834],{},[26,141427,141408],{}," 盒子里面定义 无序列表 （",[26,141430,141431],{},"ul > li > a",[1073,141433,141434,141435,141437,141438,141441],{},"每个 ",[26,141436,1073],{}," 都有一个高度（",[26,141439,141440],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[1073,141443,141420,141444,141446,141447,1834],{},[26,141445,1073],{}," 里面的a设置文字大小（",[26,141448,141449],{},"14px",[1073,141451,141420,141452,141454,141455,141457,141458,141460],{},[26,141453,1073],{}," 设置 ",[26,141456,130081],{},"，当鼠标移入的时候，让",[26,141459,1073],{},"的背景变成白色，让里面的文字变成红色",[1073,141462,141463,141465,141466,141468,141469,141471],{},[26,141464,1073],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[26,141467,1073],{},"的右侧，那么给",[26,141470,1073],{},"设置相对定位",[274,141473,141474],{},"一定要注意相关性",[274,141476,140759],{},[19,141478,141479],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},[26,141480,141481,141489,141499,141509],{"__ignoreMap":28},[52,141482,141483,141485,141487],{"class":54,"line":55},[52,141484,54542],{"class":54231},[52,141486,139921],{"class":58},[52,141488,18528],{"class":622},[52,141490,141491,141493,141495,141497],{"class":54,"line":69},[52,141492,139928],{"class":90},[52,141494,54368],{"class":622},[52,141496,10608],{"class":62},[52,141498,4272],{"class":622},[52,141500,141501,141503,141505,141507],{"class":54,"line":82},[52,141502,130536],{"class":90},[52,141504,54368],{"class":622},[52,141506,63799],{"class":90},[52,141508,4272],{"class":622},[52,141510,141511],{"class":54,"line":97},[52,141512,4543],{"class":622},[274,141514,140799],{},[19,141516,141517],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},[26,141518,141519,141527,141537,141547],{"__ignoreMap":28},[52,141520,141521,141523,141525],{"class":54,"line":55},[52,141522,54542],{"class":54231},[52,141524,139921],{"class":58},[52,141526,18528],{"class":622},[52,141528,141529,141531,141533,141535],{"class":54,"line":69},[52,141530,139928],{"class":90},[52,141532,54368],{"class":622},[52,141534,10608],{"class":62},[52,141536,4272],{"class":622},[52,141538,141539,141541,141543,141545],{"class":54,"line":82},[52,141540,130536],{"class":90},[52,141542,54368],{"class":622},[52,141544,63799],{"class":90},[52,141546,4272],{"class":622},[52,141548,141549],{"class":54,"line":97},[52,141550,4543],{"class":622},[274,141552,141553],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[274,141555,141556,141557,141560],{},"2 号盒子左侧浮动，",[26,141558,141559],{},"navitems"," 导航栏组",[4118,141562,141563,141568,141577],{},[1073,141564,141565,141566],{},"里面结构是 ",[26,141567,141431],{},[1073,141569,141570,141571,141573,141574,141576],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[26,141572,300],{},"左右的",[26,141575,33815],{},"把两侧撑开",[1073,141578,141579],{},"让文字垂直居中（行高等于高度）",[280,141581],{"style":128776,"src":141582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[274,141584,141585],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[274,141587,140759],{},[19,141589,141591],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},".box {\n  float: left;\n}\n",[26,141592,141593,141599,141609],{"__ignoreMap":28},[52,141594,141595,141597],{"class":54,"line":55},[52,141596,132768],{"class":58},[52,141598,18528],{"class":622},[52,141600,141601,141603,141605,141607],{"class":54,"line":69},[52,141602,133400],{"class":90},[52,141604,54368],{"class":622},[52,141606,26688],{"class":90},[52,141608,4272],{"class":622},[52,141610,141611],{"class":54,"line":82},[52,141612,4543],{"class":622},[274,141614,140799],{},[19,141616,141617],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,141618,141619,141625,141635],{"__ignoreMap":28},[52,141620,141621,141623],{"class":54,"line":55},[52,141622,132768],{"class":58},[52,141624,18528],{"class":622},[52,141626,141627,141629,141631,141633],{"class":54,"line":69},[52,141628,133400],{"class":90},[52,141630,54368],{"class":622},[52,141632,26688],{"class":90},[52,141634,4272],{"class":622},[52,141636,141637],{"class":54,"line":82},[52,141638,4543],{"class":622},[274,141640,141641],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[280,141643],{"style":128776,"src":141644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[19,141646,141647],{"className":128920,"code":133077,"language":128922,"meta":28,"style":28},[26,141648,141649,141655,141671],{"__ignoreMap":28},[52,141650,141651,141653],{"class":54,"line":55},[52,141652,54542],{"class":54231},[52,141654,18528],{"class":622},[52,141656,141657,141659,141661,141663,141665,141667,141669],{"class":54,"line":69},[52,141658,73824],{"class":90},[52,141660,54368],{"class":622},[52,141662,3332],{"class":90},[52,141664,54423],{"class":160},[52,141666,54452],{"class":90},[52,141668,132312],{"class":90},[52,141670,4272],{"class":622},[52,141672,141673],{"class":54,"line":82},[52,141674,4543],{"class":622},[30,141676,141678],{"id":141677},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[280,141680],{"style":128776,"src":141681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[4118,141683,141684,141689,141694],{},[1073,141685,141686,141688],{},[26,141687,134123],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[1073,141690,141691,141693],{},[26,141692,134123],{}," 里面有一个大的版心",[1073,141695,141696,141697,141700,141701],{},"版心里面包含 1 号盒子，",[26,141698,141699],{},"mod_service"," 是服务模块，mod 是模块的意思",[4118,141702,141703,141708,141721,141737,141742],{},[1073,141704,141420,141705,141707],{},[26,141706,141699],{}," 设置高度（80px）和下边框",[1073,141709,141710,141711,141714,141715,141717,141718,141720],{},"在里面定义 ",[26,141712,141713],{},"ul > li"," ,每个",[26,141716,1073],{}," 宽度是300px 高度是 50px，给每个",[26,141719,1073],{},"设置35px的左内边距",[1073,141722,141723,141724,141726,141727,141729,141730,141732,141733,2509,141735,1834],{},"在每个",[26,141725,1073],{},"里面，放一个 ",[26,141728,1491],{},"（里面放图标），一个",[26,141731,54542],{},"（里面放",[26,141734,54542],{},[26,141736,274],{},[1073,141738,141420,141739,141741],{},[26,141740,1491],{},"设置浮动，让h5与这个div左右排列",[1073,141743,141744],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[274,141746,140759],{},[19,141748,141750],{"className":128920,"code":141749,"language":128922,"meta":28,"style":28},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[26,141751,141752,141758,141770,141782,141809],{"__ignoreMap":28},[52,141753,141754,141756],{"class":54,"line":55},[52,141755,136677],{"class":58},[52,141757,18528],{"class":622},[52,141759,141760,141762,141764,141766,141768],{"class":54,"line":69},[52,141761,73496],{"class":90},[52,141763,54368],{"class":622},[52,141765,3812],{"class":90},[52,141767,54423],{"class":160},[52,141769,4272],{"class":622},[52,141771,141772,141774,141776,141778,141780],{"class":54,"line":82},[52,141773,73716],{"class":90},[52,141775,54368],{"class":622},[52,141777,3812],{"class":90},[52,141779,54423],{"class":160},[52,141781,4272],{"class":622},[52,141783,141784,141786,141788,141790,141792,141794,141796,141798,141801,141803,141805,141807],{"class":54,"line":97},[52,141785,73539],{"class":90},[52,141787,54368],{"class":622},[52,141789,64656],{"class":90},[52,141791,3121],{"class":622},[52,141793,136716],{"class":8172},[52,141795,16670],{"class":622},[52,141797,64666],{"class":90},[52,141799,141800],{"class":90}," -10",[52,141802,54423],{"class":160},[52,141804,136735],{"class":90},[52,141806,54423],{"class":160},[52,141808,4272],{"class":622},[52,141810,141811],{"class":54,"line":112},[52,141812,4543],{"class":622},[274,141814,140799],{},[19,141816,141817],{"className":128920,"code":141749,"language":128922,"meta":28,"style":28},[26,141818,141819,141825,141837,141849,141875],{"__ignoreMap":28},[52,141820,141821,141823],{"class":54,"line":55},[52,141822,136677],{"class":58},[52,141824,18528],{"class":622},[52,141826,141827,141829,141831,141833,141835],{"class":54,"line":69},[52,141828,73496],{"class":90},[52,141830,54368],{"class":622},[52,141832,3812],{"class":90},[52,141834,54423],{"class":160},[52,141836,4272],{"class":622},[52,141838,141839,141841,141843,141845,141847],{"class":54,"line":82},[52,141840,73716],{"class":90},[52,141842,54368],{"class":622},[52,141844,3812],{"class":90},[52,141846,54423],{"class":160},[52,141848,4272],{"class":622},[52,141850,141851,141853,141855,141857,141859,141861,141863,141865,141867,141869,141871,141873],{"class":54,"line":97},[52,141852,73539],{"class":90},[52,141854,54368],{"class":622},[52,141856,64656],{"class":90},[52,141858,3121],{"class":622},[52,141860,136716],{"class":8172},[52,141862,16670],{"class":622},[52,141864,64666],{"class":90},[52,141866,141800],{"class":90},[52,141868,54423],{"class":160},[52,141870,136735],{"class":90},[52,141872,54423],{"class":160},[52,141874,4272],{"class":622},[52,141876,141877],{"class":54,"line":112},[52,141878,4543],{"class":622},[274,141880,141881],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[4118,141883,141884,141887,141893,141899,141911],{},[1073,141885,141886],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[1073,141888,141889,141890,1834],{},"里面的布局利用 自定义列表来实现（",[26,141891,141892],{},"dl > dt + dd",[1073,141894,141420,141895,141898],{},[26,141896,141897],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[1073,141900,141420,141901,141904,141905,2509,141907,141910],{},[26,141902,141903],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[26,141906,141903],{},[26,141908,141909],{},"dd","之间有些距离",[1073,141912,141913],{},"最后一个 dl 结构和样式不一样，需要单独设置",[274,141915,140759],{},[19,141917,141918],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,141919,141920,141926,141938],{"__ignoreMap":28},[52,141921,141922,141924],{"class":54,"line":55},[52,141923,54542],{"class":54231},[52,141925,18528],{"class":622},[52,141927,141928,141930,141932,141934,141936],{"class":54,"line":69},[52,141929,73398],{"class":90},[52,141931,54368],{"class":622},[52,141933,3306],{"class":90},[52,141935,54487],{"class":90},[52,141937,4272],{"class":622},[52,141939,141940],{"class":54,"line":82},[52,141941,4543],{"class":622},[274,141943,140799],{},[19,141945,141946],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,141947,141948,141954,141966],{"__ignoreMap":28},[52,141949,141950,141952],{"class":54,"line":55},[52,141951,54542],{"class":54231},[52,141953,18528],{"class":622},[52,141955,141956,141958,141960,141962,141964],{"class":54,"line":69},[52,141957,73398],{"class":90},[52,141959,54368],{"class":622},[52,141961,3306],{"class":90},[52,141963,54487],{"class":90},[52,141965,4272],{"class":622},[52,141967,141968],{"class":54,"line":82},[52,141969,4543],{"class":622},[274,141971,141972],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[4118,141974,141975,141984,141987,141998],{},[1073,141976,141977,141978,141980,141981,141983],{},"分为上下两块，上面是 ",[26,141979,134140],{}," 友情链接，下面是 ",[26,141982,134133],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[1073,141985,141986],{},"把内容分别复制到相应模块中",[1073,141988,141420,141989,141991,141992,141994,141995,141997],{},[26,141990,134140],{}," 设置 15px 的下外边距，给",[26,141993,134140],{}," 里面 的 ",[26,141996,300],{}," 标签设置 左右 3px 的外边距",[1073,141999,142000,142001,142003],{},"给",[26,142002,134133],{}," 设置 20px 的行高",[274,142005,140759],{},[19,142007,142008],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,142009,142010,142016,142028],{"__ignoreMap":28},[52,142011,142012,142014],{"class":54,"line":55},[52,142013,54542],{"class":54231},[52,142015,18528],{"class":622},[52,142017,142018,142020,142022,142024,142026],{"class":54,"line":69},[52,142019,73398],{"class":90},[52,142021,54368],{"class":622},[52,142023,3306],{"class":90},[52,142025,54487],{"class":90},[52,142027,4272],{"class":622},[52,142029,142030],{"class":54,"line":82},[52,142031,4543],{"class":622},[274,142033,140799],{},[19,142035,142036],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,142037,142038,142044,142056],{"__ignoreMap":28},[52,142039,142040,142042],{"class":54,"line":55},[52,142041,54542],{"class":54231},[52,142043,18528],{"class":622},[52,142045,142046,142048,142050,142052,142054],{"class":54,"line":69},[52,142047,73398],{"class":90},[52,142049,54368],{"class":622},[52,142051,3306],{"class":90},[52,142053,54487],{"class":90},[52,142055,4272],{"class":622},[52,142057,142058],{"class":54,"line":82},[52,142059,4543],{"class":622},[274,142061,142062],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[3015,142064,142065],{},"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":28,"searchDepth":69,"depth":69,"links":142067},[142068,142069,142070,142077],{"id":140348,"depth":69,"text":140349},{"id":140367,"depth":69,"text":140368},{"id":140394,"depth":69,"text":140395,"children":142071},[142072,142073,142074,142075,142076],{"id":140398,"depth":82,"text":140399},{"id":140411,"depth":82,"text":140412},{"id":140435,"depth":82,"text":140436},{"id":140457,"depth":82,"text":140458},{"id":140529,"depth":82,"text":140530},{"id":140655,"depth":69,"text":140656,"children":142078},[142079,142080,142081,142082,142084],{"id":140659,"depth":82,"text":140660},{"id":140666,"depth":82,"text":140667},{"id":140838,"depth":82,"text":140839},{"id":141379,"depth":82,"text":142083},"15.4.4 nav导航模块制作",{"id":141677,"depth":82,"text":141678},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140340,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":142091,"title":142092,"body":142093,"description":3046,"extension":3047,"meta":144495,"navigation":115,"path":144496,"seo":144497,"stem":144498,"__hash__":144499},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":142094,"toc":144472},[142095,142098,142102,142106,142118,142121,142124,142127,142138,142140,142164,142166,142190,142195,142198,142200,142236,142238,142274,142277,142282,142285,142288,142291,142321,142328,142331,142341,142343,142377,142380,142414,142420,142437,142439,142475,142477,142513,142518,142543,142545,142571,142573,142597,142604,142607,142671,142673,142715,142717,142757,142764,142769,142771,142801,142803,142833,142837,142840,142847,142859,142861,142887,142889,142913,142916,142918,142942,142948,142958,142960,142990,142992,143022,143029,143070,143072,143108,143110,143146,143150,143153,143156,143159,143165,143170,143173,143196,143199,143223,143226,143250,143255,143258,143261,143264,143267,143270,143344,143346,143376,143378,143408,143411,143414,143446,143450,143454,143468,143477,143480,143485,143487,143581,143583,143677,143700,143702,143726,143728,143752,143759,143762,143772,143774,143798,143803,143811,143813,143843,143848,143888,143890,143916,143918,143944,143948,143951,143956,143959,143963,143971,143978,143986,143988,144018,144020,144050,144058,144061,144064,144066,144096,144098,144128,144131,144136,144138,144162,144164,144188,144191,144276,144278,144302,144304,144328,144332,144334,144358,144360,144394,144398,144412,144415,144420,144423,144428,144431,144461,144469],[10,142096,142092],{"id":142097},"_16-品优购项目下篇-主体与页面开发",[14,142099,142101],{"id":142100},"_161-项目主体模块制作","16.1 项目主体模块制作",[30,142103,142105],{"id":142104},"_1611-首页制作","16.1.1 首页制作",[274,142107,142108,142110,142111,142113,142114,142117],{},[538,142109,104978],{}," 主体模块是 ",[538,142112,76986],{}," 里面专有的，注意需要新的样式文件 ",[538,142115,142116],{},"index.css，"," 就不要写在common.css中了",[280,142119],{"style":128776,"src":142120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[280,142122],{"style":128776,"src":142123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[274,142125,142126],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[4118,142128,142129,142132,142135],{},[1073,142130,142131],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[1073,142133,142134],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[1073,142136,142137],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[274,142139,140759],{},[19,142141,142142],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,142143,142144,142150,142160],{"__ignoreMap":28},[52,142145,142146,142148],{"class":54,"line":55},[52,142147,132768],{"class":58},[52,142149,18528],{"class":622},[52,142151,142152,142154,142156,142158],{"class":54,"line":69},[52,142153,133400],{"class":90},[52,142155,54368],{"class":622},[52,142157,26688],{"class":90},[52,142159,4272],{"class":622},[52,142161,142162],{"class":54,"line":82},[52,142163,4543],{"class":622},[274,142165,140799],{},[19,142167,142168],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,142169,142170,142176,142186],{"__ignoreMap":28},[52,142171,142172,142174],{"class":54,"line":55},[52,142173,132768],{"class":58},[52,142175,18528],{"class":622},[52,142177,142178,142180,142182,142184],{"class":54,"line":69},[52,142179,133400],{"class":90},[52,142181,54368],{"class":622},[52,142183,26688],{"class":90},[52,142185,4272],{"class":622},[52,142187,142188],{"class":54,"line":82},[52,142189,4543],{"class":622},[1070,142191,142192],{},[1073,142193,142194],{},"左侧focus模块制作",[280,142196],{"style":128776,"src":142197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[274,142199,140759],{},[19,142201,142202],{"className":128920,"code":130243,"language":128922,"meta":28,"style":28},[26,142203,142204,142212,142222,142232],{"__ignoreMap":28},[52,142205,142206,142208,142210],{"class":54,"line":55},[52,142207,56751],{"class":54231},[52,142209,64830],{"class":58},[52,142211,18528],{"class":622},[52,142213,142214,142216,142218,142220],{"class":54,"line":69},[52,142215,130258],{"class":90},[52,142217,54368],{"class":622},[52,142219,57819],{"class":90},[52,142221,4272],{"class":622},[52,142223,142224,142226,142228,142230],{"class":54,"line":82},[52,142225,73726],{"class":90},[52,142227,54368],{"class":622},[52,142229,57667],{"class":90},[52,142231,4272],{"class":622},[52,142233,142234],{"class":54,"line":97},[52,142235,4543],{"class":622},[274,142237,140799],{},[19,142239,142240],{"className":128920,"code":130243,"language":128922,"meta":28,"style":28},[26,142241,142242,142250,142260,142270],{"__ignoreMap":28},[52,142243,142244,142246,142248],{"class":54,"line":55},[52,142245,56751],{"class":54231},[52,142247,64830],{"class":58},[52,142249,18528],{"class":622},[52,142251,142252,142254,142256,142258],{"class":54,"line":69},[52,142253,130258],{"class":90},[52,142255,54368],{"class":622},[52,142257,57819],{"class":90},[52,142259,4272],{"class":622},[52,142261,142262,142264,142266,142268],{"class":54,"line":82},[52,142263,73726],{"class":90},[52,142265,54368],{"class":622},[52,142267,57667],{"class":90},[52,142269,4272],{"class":622},[52,142271,142272],{"class":54,"line":97},[52,142273,4543],{"class":622},[274,142275,142276],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1070,142278,142279],{"start":69},[1073,142280,142281],{},"右侧newsflash模块制作",[280,142283],{"style":128776,"src":142284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[274,142286,142287],{},"右侧的模块 分为上中下三个盒子",[274,142289,142290],{},"结构代码：",[19,142292,142293],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,142294,142295],{"__ignoreMap":28},[52,142296,142297,142299,142301,142303,142305,142307,142309,142311,142313,142315,142317,142319],{"class":54,"line":55},[52,142298,4022],{"class":622},[52,142300,280],{"class":54231},[52,142302,58169],{"class":58},[52,142304,2099],{"class":622},[52,142306,136437],{"class":62},[52,142308,58177],{"class":58},[52,142310,2099],{"class":622},[52,142312,136444],{"class":62},[52,142314,136447],{"class":58},[52,142316,2099],{"class":622},[52,142318,136452],{"class":62},[52,142320,54238],{"class":622},[274,142322,142323,142324,142327],{},"1 号盒子为 ",[26,142325,142326],{},"news"," 新闻模块 高度为 165px",[280,142329],{"style":128776,"src":142330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[274,142332,142333,142334,142337,142338],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[26,142335,142336],{},"news-hd","，下面是 ",[26,142339,142340],{},"news-bd",[274,142342,142290],{},[19,142344,142345],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,142346,142347,142351,142365,142369],{"__ignoreMap":28},[52,142348,142349],{"class":54,"line":55},[52,142350,133031],{"class":332},[52,142352,142353,142355,142357,142359,142361,142363],{"class":54,"line":69},[52,142354,4022],{"class":622},[52,142356,54542],{"class":54231},[52,142358,56416],{"class":58},[52,142360,2099],{"class":622},[52,142362,133044],{"class":62},[52,142364,54238],{"class":622},[52,142366,142367],{"class":54,"line":82},[52,142368,133051],{"class":622},[52,142370,142371,142373,142375],{"class":54,"line":97},[52,142372,54716],{"class":622},[52,142374,54542],{"class":54231},[52,142376,54238],{"class":622},[274,142378,142379],{},"样式代码：",[19,142381,142382],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,142383,142384,142388,142402,142406],{"__ignoreMap":28},[52,142385,142386],{"class":54,"line":55},[52,142387,133031],{"class":332},[52,142389,142390,142392,142394,142396,142398,142400],{"class":54,"line":69},[52,142391,4022],{"class":622},[52,142393,54542],{"class":54231},[52,142395,56416],{"class":58},[52,142397,2099],{"class":622},[52,142399,133044],{"class":62},[52,142401,54238],{"class":622},[52,142403,142404],{"class":54,"line":82},[52,142405,133051],{"class":622},[52,142407,142408,142410,142412],{"class":54,"line":97},[52,142409,54716],{"class":622},[52,142411,54542],{"class":54231},[52,142413,54238],{"class":622},[274,142415,142416,142417,142419],{},"上面是",[26,142418,142336],{},"，设置高度是 33px，设置下边框",[4118,142421,142422,142428],{},[1073,142423,142424,142425,142427],{},"里面放一个",[26,142426,1491],{}," 标题",[1073,142429,142430,142431,142433,142434,142436],{},"放一个a",[26,142432,105613],{},"，内容是 更多，然后让 ",[26,142435,300],{}," 进行右浮动，三角用伪元素设置字体图标就好",[274,142438,142290],{},[19,142440,142441],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},[26,142442,142443,142451,142461,142471],{"__ignoreMap":28},[52,142444,142445,142447,142449],{"class":54,"line":55},[52,142446,54542],{"class":54231},[52,142448,139921],{"class":58},[52,142450,18528],{"class":622},[52,142452,142453,142455,142457,142459],{"class":54,"line":69},[52,142454,139928],{"class":90},[52,142456,54368],{"class":622},[52,142458,10608],{"class":62},[52,142460,4272],{"class":622},[52,142462,142463,142465,142467,142469],{"class":54,"line":82},[52,142464,130536],{"class":90},[52,142466,54368],{"class":622},[52,142468,63799],{"class":90},[52,142470,4272],{"class":622},[52,142472,142473],{"class":54,"line":97},[52,142474,4543],{"class":622},[274,142476,142379],{},[19,142478,142479],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},[26,142480,142481,142489,142499,142509],{"__ignoreMap":28},[52,142482,142483,142485,142487],{"class":54,"line":55},[52,142484,54542],{"class":54231},[52,142486,139921],{"class":58},[52,142488,18528],{"class":622},[52,142490,142491,142493,142495,142497],{"class":54,"line":69},[52,142492,139928],{"class":90},[52,142494,54368],{"class":622},[52,142496,10608],{"class":62},[52,142498,4272],{"class":622},[52,142500,142501,142503,142505,142507],{"class":54,"line":82},[52,142502,130536],{"class":90},[52,142504,54368],{"class":622},[52,142506,63799],{"class":90},[52,142508,4272],{"class":622},[52,142510,142511],{"class":54,"line":97},[52,142512,4543],{"class":622},[274,142514,142515,142516],{},"下面是",[26,142517,142340],{},[4118,142519,142520,142528],{},[1073,142521,142522,142523,103940,142525,142527],{},"里面包含 ",[26,142524,4118],{},[26,142526,1073],{}," 还有链接",[1073,142529,142000,142530,142532,142533,142535,142536,142539,142540],{},[26,142531,1073],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[26,142534,133586],{}," 2.设置 ",[26,142537,142538],{},"white-space: nowrap;"," 3. 设置 ",[26,142541,142542],{},"text-overflow: ellipsis;",[274,142544,142290],{},[19,142546,142548],{"className":128920,"code":142547,"language":128922,"meta":28,"style":28},"div {\n  overflow: hidden;\n}\n",[26,142549,142550,142556,142567],{"__ignoreMap":28},[52,142551,142552,142554],{"class":54,"line":55},[52,142553,54542],{"class":54231},[52,142555,18528],{"class":622},[52,142557,142558,142561,142563,142565],{"class":54,"line":69},[52,142559,142560],{"class":90},"  overflow",[52,142562,54368],{"class":622},[52,142564,64644],{"class":90},[52,142566,4272],{"class":622},[52,142568,142569],{"class":54,"line":82},[52,142570,4543],{"class":622},[274,142572,142379],{},[19,142574,142575],{"className":128920,"code":142547,"language":128922,"meta":28,"style":28},[26,142576,142577,142583,142593],{"__ignoreMap":28},[52,142578,142579,142581],{"class":54,"line":55},[52,142580,54542],{"class":54231},[52,142582,18528],{"class":622},[52,142584,142585,142587,142589,142591],{"class":54,"line":69},[52,142586,142560],{"class":90},[52,142588,54368],{"class":622},[52,142590,64644],{"class":90},[52,142592,4272],{"class":622},[52,142594,142595],{"class":54,"line":82},[52,142596,4543],{"class":622},[274,142598,142599,142600,142603],{},"2 号盒子为 ",[26,142601,142602],{},"lifeservice"," 生活服务模块 高度为 209px",[280,142605],{"style":128776,"src":142606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[4118,142608,142609,142612,142622,142646,142657],{},[1073,142610,142611],{},"设置边框（左右下边框）",[1073,142613,142614,142615,142618,142619,142621],{},"里面的内容 是 ",[26,142616,142617],{},"ul > 12*li","，给",[26,142620,1073],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[1073,142623,142624,142625],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[4118,142626,142627,142632,142641],{},[1073,142628,142629,142631],{},[26,142630,142602],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[1073,142633,142634,142635,142637,142638,142640],{},"可以让 ",[26,142636,142602],{}," 里面的 ",[26,142639,4118],{}," 宽度为 252，就可以装的下 4 个 小 li",[1073,142642,142643,142645],{},[26,142644,142602],{}," 盒子 overflow 隐藏多余的部分就可以了",[1073,142647,119386,142648,142650,142651,142653,142654,142656],{},[26,142649,1073],{}," 里面放一个 ",[26,142652,3554],{},"（里面放图标），下面的文本用 ",[26,142655,274],{}," 标签包裹",[1073,142658,141420,142659,142661,142662,142664,142665,141454,142667,142670],{},[26,142660,3554],{}," 设置 24px宽和28px的高（注意 ",[26,142663,3554],{}," 是行内元素， 转成行内块），给 ",[26,142666,1073],{},[26,142668,142669],{},"text-align:center"," 让里面内容居中显示",[274,142672,142290],{},[19,142674,142676],{"className":128920,"code":142675,"language":128922,"meta":28,"style":28},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[26,142677,142678,142696,142701,142711],{"__ignoreMap":28},[52,142679,142680,142682,142684,142686,142688,142690,142692,142694],{"class":54,"line":55},[52,142681,52],{"class":54231},[52,142683,15391],{"class":622},[52,142685,300],{"class":54231},[52,142687,15391],{"class":622},[52,142689,1605],{"class":54231},[52,142691,15391],{"class":622},[52,142693,538],{"class":54231},[52,142695,18528],{"class":622},[52,142697,142698],{"class":54,"line":69},[52,142699,142700],{"class":332},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[52,142702,142703,142705,142707,142709],{"class":54,"line":82},[52,142704,130536],{"class":90},[52,142706,54368],{"class":622},[52,142708,130598],{"class":90},[52,142710,4272],{"class":622},[52,142712,142713],{"class":54,"line":97},[52,142714,4543],{"class":622},[274,142716,142379],{},[19,142718,142719],{"className":128920,"code":142675,"language":128922,"meta":28,"style":28},[26,142720,142721,142739,142743,142753],{"__ignoreMap":28},[52,142722,142723,142725,142727,142729,142731,142733,142735,142737],{"class":54,"line":55},[52,142724,52],{"class":54231},[52,142726,15391],{"class":622},[52,142728,300],{"class":54231},[52,142730,15391],{"class":622},[52,142732,1605],{"class":54231},[52,142734,15391],{"class":622},[52,142736,538],{"class":54231},[52,142738,18528],{"class":622},[52,142740,142741],{"class":54,"line":69},[52,142742,142700],{"class":332},[52,142744,142745,142747,142749,142751],{"class":54,"line":82},[52,142746,130536],{"class":90},[52,142748,54368],{"class":622},[52,142750,130598],{"class":90},[52,142752,4272],{"class":622},[52,142754,142755],{"class":54,"line":97},[52,142756,4543],{"class":622},[274,142758,142759,142760,142763],{},"3 号盒子为 ",[26,142761,142762],{},"bargain"," 特价商品",[4118,142765,142766],{},[1073,142767,142768],{},"这个比较简单，直接插入一张图片即可",[274,142770,142290],{},[19,142772,142773],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,142774,142775],{"__ignoreMap":28},[52,142776,142777,142779,142781,142783,142785,142787,142789,142791,142793,142795,142797,142799],{"class":54,"line":55},[52,142778,4022],{"class":622},[52,142780,280],{"class":54231},[52,142782,58169],{"class":58},[52,142784,2099],{"class":622},[52,142786,136437],{"class":62},[52,142788,58177],{"class":58},[52,142790,2099],{"class":622},[52,142792,136444],{"class":62},[52,142794,136447],{"class":58},[52,142796,2099],{"class":622},[52,142798,136452],{"class":62},[52,142800,54238],{"class":622},[274,142802,142379],{},[19,142804,142805],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,142806,142807],{"__ignoreMap":28},[52,142808,142809,142811,142813,142815,142817,142819,142821,142823,142825,142827,142829,142831],{"class":54,"line":55},[52,142810,4022],{"class":622},[52,142812,280],{"class":54231},[52,142814,58169],{"class":58},[52,142816,2099],{"class":622},[52,142818,136437],{"class":62},[52,142820,58177],{"class":58},[52,142822,2099],{"class":622},[52,142824,136444],{"class":62},[52,142826,136447],{"class":58},[52,142828,2099],{"class":622},[52,142830,136452],{"class":62},[52,142832,54238],{"class":622},[30,142834,142836],{"id":142835},"_1612-推荐模块制作","16.1.2 推荐模块制作",[280,142838],{"style":128776,"src":142839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[274,142841,142842,142843,142846],{},"大盒子 ",[26,142844,142845],{},"recom"," 推荐模块 recommend",[4118,142848,142849],{},[1073,142850,142851,142852,142854,142855,142858],{},"给这个 ",[26,142853,142845],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[26,142856,142857],{},"#ebebeb","），设置距离上边 12px",[274,142860,142290],{},[19,142862,142864],{"className":128920,"code":142863,"language":128922,"meta":28,"style":28},"div {\n  background-color: #f0f0f0;\n}\n",[26,142865,142866,142872,142883],{"__ignoreMap":28},[52,142867,142868,142870],{"class":54,"line":55},[52,142869,54542],{"class":54231},[52,142871,18528],{"class":622},[52,142873,142874,142876,142878,142881],{"class":54,"line":69},[52,142875,73806],{"class":90},[52,142877,54368],{"class":622},[52,142879,142880],{"class":90},"#f0f0f0",[52,142882,4272],{"class":622},[52,142884,142885],{"class":54,"line":82},[52,142886,4543],{"class":622},[274,142888,142379],{},[19,142890,142891],{"className":128920,"code":142863,"language":128922,"meta":28,"style":28},[26,142892,142893,142899,142909],{"__ignoreMap":28},[52,142894,142895,142897],{"class":54,"line":55},[52,142896,54542],{"class":54231},[52,142898,18528],{"class":622},[52,142900,142901,142903,142905,142907],{"class":54,"line":69},[52,142902,73806],{"class":90},[52,142904,54368],{"class":622},[52,142906,142880],{"class":90},[52,142908,4272],{"class":622},[52,142910,142911],{"class":54,"line":82},[52,142912,4543],{"class":622},[274,142914,142915],{},"里面包含 2 个盒子， 浮动即可",[274,142917,142290],{},[19,142919,142920],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,142921,142922,142928,142938],{"__ignoreMap":28},[52,142923,142924,142926],{"class":54,"line":55},[52,142925,132768],{"class":58},[52,142927,18528],{"class":622},[52,142929,142930,142932,142934,142936],{"class":54,"line":69},[52,142931,133400],{"class":90},[52,142933,54368],{"class":622},[52,142935,26688],{"class":90},[52,142937,4272],{"class":622},[52,142939,142940],{"class":54,"line":82},[52,142941,4543],{"class":622},[274,142943,142944,142945],{},"1 号盒子 ",[26,142946,142947],{},"recom_hd",[4118,142949,142950,142953],{},[1073,142951,142952],{},"设置宽度205px，高度163px",[1073,142954,142424,142955,142957],{},[26,142956,280],{},"标签，插入图片即可",[274,142959,142290],{},[19,142961,142962],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,142963,142964],{"__ignoreMap":28},[52,142965,142966,142968,142970,142972,142974,142976,142978,142980,142982,142984,142986,142988],{"class":54,"line":55},[52,142967,4022],{"class":622},[52,142969,280],{"class":54231},[52,142971,58169],{"class":58},[52,142973,2099],{"class":622},[52,142975,136437],{"class":62},[52,142977,58177],{"class":58},[52,142979,2099],{"class":622},[52,142981,136444],{"class":62},[52,142983,136447],{"class":58},[52,142985,2099],{"class":622},[52,142987,136452],{"class":62},[52,142989,54238],{"class":622},[274,142991,142379],{},[19,142993,142994],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,142995,142996],{"__ignoreMap":28},[52,142997,142998,143000,143002,143004,143006,143008,143010,143012,143014,143016,143018,143020],{"class":54,"line":55},[52,142999,4022],{"class":622},[52,143001,280],{"class":54231},[52,143003,58169],{"class":58},[52,143005,2099],{"class":622},[52,143007,136437],{"class":62},[52,143009,58177],{"class":58},[52,143011,2099],{"class":622},[52,143013,136444],{"class":62},[52,143015,136447],{"class":58},[52,143017,2099],{"class":622},[52,143019,136452],{"class":62},[52,143021,54238],{"class":622},[274,143023,143024,143025,143028],{},"2 号盒子 ",[26,143026,143027],{},"recom_bd"," ，注意里面的小竖线",[4118,143030,143031,143042,143045,143050,143055],{},[1073,143032,143033,143034,143036,143037,143039,143040],{},"右侧结构里面放 ",[26,143035,4118],{}," 包含 4个 ",[26,143038,1073],{},"，每个li里面包含一个",[26,143041,280],{},[1073,143043,143044],{},"直接利用切片工具把里面的内容当成一张图片",[1073,143046,141420,143047,143049],{},[26,143048,1073],{}," 设置浮动",[1073,143051,141420,143052,143054],{},[26,143053,280],{}," 设置宽高，宽度 248px，高度 163px",[1073,143056,143057,143058,142618,143061,143063,143064,143066,143067],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[26,143059,143060],{},"top 10px",[26,143062,1073],{},"设置相对定位（注意，最后一个",[26,143065,1073],{},"不用设置伪元素），可以利用 ",[26,143068,143069],{},"nth-child(-n+3){...}",[274,143071,142290],{},[19,143073,143074],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},[26,143075,143076,143084,143094,143104],{"__ignoreMap":28},[52,143077,143078,143080,143082],{"class":54,"line":55},[52,143079,54542],{"class":54231},[52,143081,139921],{"class":58},[52,143083,18528],{"class":622},[52,143085,143086,143088,143090,143092],{"class":54,"line":69},[52,143087,139928],{"class":90},[52,143089,54368],{"class":622},[52,143091,10608],{"class":62},[52,143093,4272],{"class":622},[52,143095,143096,143098,143100,143102],{"class":54,"line":82},[52,143097,130536],{"class":90},[52,143099,54368],{"class":622},[52,143101,63799],{"class":90},[52,143103,4272],{"class":622},[52,143105,143106],{"class":54,"line":97},[52,143107,4543],{"class":622},[274,143109,142379],{},[19,143111,143112],{"className":128920,"code":140762,"language":128922,"meta":28,"style":28},[26,143113,143114,143122,143132,143142],{"__ignoreMap":28},[52,143115,143116,143118,143120],{"class":54,"line":55},[52,143117,54542],{"class":54231},[52,143119,139921],{"class":58},[52,143121,18528],{"class":622},[52,143123,143124,143126,143128,143130],{"class":54,"line":69},[52,143125,139928],{"class":90},[52,143127,54368],{"class":622},[52,143129,10608],{"class":62},[52,143131,4272],{"class":622},[52,143133,143134,143136,143138,143140],{"class":54,"line":82},[52,143135,130536],{"class":90},[52,143137,54368],{"class":622},[52,143139,63799],{"class":90},[52,143141,4272],{"class":622},[52,143143,143144],{"class":54,"line":97},[52,143145,4543],{"class":622},[30,143147,143149],{"id":143148},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[280,143151],{"style":128776,"src":143152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[274,143154,143155],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[274,143157,143158],{},"第一楼是家用电器模块： 里面包含两个盒子",[274,143160,143161,143164],{},[26,143162,143163],{},"box_hd"," 制作",[274,143166,142944,143167,143169],{},[26,143168,143163],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[280,143171],{"style":128776,"src":143172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[4118,143174,143175,143180,143185,143188],{},[1073,143176,143177,143179],{},[26,143178,143163],{}," 给 30px 的高度，2个像素的下边框",[1073,143181,143182,143183],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[26,143184,141431],{},[1073,143186,143187],{},"左侧盒左浮动，右侧盒子右浮动",[1073,143189,143190,143192,143193,143195],{},[26,143191,300],{},"标签之间的距离用左右的",[26,143194,33815],{},"撑开即可",[274,143197,143198],{},"结构代码",[19,143200,143201],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,143202,143203,143209,143219],{"__ignoreMap":28},[52,143204,143205,143207],{"class":54,"line":55},[52,143206,132768],{"class":58},[52,143208,18528],{"class":622},[52,143210,143211,143213,143215,143217],{"class":54,"line":69},[52,143212,133400],{"class":90},[52,143214,54368],{"class":622},[52,143216,26688],{"class":90},[52,143218,4272],{"class":622},[52,143220,143221],{"class":54,"line":82},[52,143222,4543],{"class":622},[274,143224,143225],{},"样式代码",[19,143227,143228],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,143229,143230,143236,143246],{"__ignoreMap":28},[52,143231,143232,143234],{"class":54,"line":55},[52,143233,132768],{"class":58},[52,143235,18528],{"class":622},[52,143237,143238,143240,143242,143244],{"class":54,"line":69},[52,143239,133400],{"class":90},[52,143241,54368],{"class":622},[52,143243,26688],{"class":90},[52,143245,4272],{"class":622},[52,143247,143248],{"class":54,"line":82},[52,143249,4543],{"class":622},[274,143251,143252,143164],{},[26,143253,143254],{},"box_bd",[274,143256,143257],{},"2 号盒子 box_bd，不要给高度",[280,143259],{"style":128776,"src":143260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[274,143262,143263],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[274,143265,143266],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[274,143268,143269],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[4118,143271,143272,143284,143300],{},[1073,143273,143274,143276,143277,143280,143281,143283],{},[26,143275,143254],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[26,143278,143279],{},"tab_content","，在",[26,143282,143279],{}," 里面包裹tab选项卡对应的内容",[1073,143285,143286,143287,143290,143291,143293,143294,143296,143297,143299],{},"内容被一个大盒子包裹（",[26,143288,143289],{},"tab_list_item","），里面是 ",[26,143292,4118],{}," 包裹 5个 ",[26,143295,1073],{},"，每个",[26,143298,1073],{},"设置对应的宽度，然后设置浮动",[1073,143301,143302,143303,143305,143306,143308,143309],{},"而这5个",[26,143304,1073],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[26,143307,1073],{},"设置",[4118,143310,143311,143329,143332],{},[1073,143312,143313,143314,143316,143317,143319,143320,143322,143323,143325,143326,143328],{},"第一个小 ",[26,143315,1073],{}," 分为上下结构，上面是 ",[26,143318,4118],{}," 包裹 ",[26,143321,1073],{}," ，",[26,143324,1073],{},"里面包裹 ",[26,143327,300],{},"，下面插入一张图片",[1073,143330,143331],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[1073,143333,143334,143335,143337,143338,143340,143341,143343],{},"后面的小 ",[26,143336,1073],{}," 里面先放一个",[26,143339,300],{},"标签，然后在",[26,143342,300],{},"标签里面插入图片即可",[274,143345,143198],{},[19,143347,143348],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,143349,143350],{"__ignoreMap":28},[52,143351,143352,143354,143356,143358,143360,143362,143364,143366,143368,143370,143372,143374],{"class":54,"line":55},[52,143353,4022],{"class":622},[52,143355,280],{"class":54231},[52,143357,58169],{"class":58},[52,143359,2099],{"class":622},[52,143361,136437],{"class":62},[52,143363,58177],{"class":58},[52,143365,2099],{"class":622},[52,143367,136444],{"class":62},[52,143369,136447],{"class":58},[52,143371,2099],{"class":622},[52,143373,136452],{"class":62},[52,143375,54238],{"class":622},[274,143377,143225],{},[19,143379,143380],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,143381,143382],{"__ignoreMap":28},[52,143383,143384,143386,143388,143390,143392,143394,143396,143398,143400,143402,143404,143406],{"class":54,"line":55},[52,143385,4022],{"class":622},[52,143387,280],{"class":54231},[52,143389,58169],{"class":58},[52,143391,2099],{"class":622},[52,143393,136437],{"class":62},[52,143395,58177],{"class":58},[52,143397,2099],{"class":622},[52,143399,136444],{"class":62},[52,143401,136447],{"class":58},[52,143403,2099],{"class":622},[52,143405,136452],{"class":62},[52,143407,54238],{"class":622},[274,143409,143410],{},"tab栏切换需求！！！！！！介绍：",[280,143412],{"style":128776,"src":143413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[4118,143415,143416,143424,143430,143433],{},[1073,143417,143418,143421,143422],{},[26,143419,143420],{},"tab","栏的布局是 ",[26,143423,141431],{},[1073,143425,143426,143427,143429],{},"有多少个",[26,143428,143420],{},"选项卡，那么对应就有多少个内容",[1073,143431,143432],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[1073,143434,143435,143436,143439,143440,143442,143443,143445],{},"等后面我们学习了",[26,143437,143438],{},"js","之后，我们就会配合",[26,143441,143438],{},"来实现，",[26,143444,143420],{},"栏的切换",[14,143447,143449],{"id":143448},"_162-列表制作","16.2 列表制作",[30,143451,143453],{"id":143452},"_1621-准备工作","16.2.1 准备工作",[4118,143455,143456,143459,143462,143465],{},[1073,143457,143458],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[1073,143460,143461],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[1073,143463,143464],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[1073,143466,143467],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[30,143469,143471,143472,103940,143474,143476],{"id":143470},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[26,143473,133925],{},[26,143475,56643],{}," 修改",[280,143478],{"style":128776,"src":143479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[4118,143481,143482],{},[1073,143483,143484],{},"秒杀盒子 sk（ second kill ） 定位即可",[274,143486,142290],{},[19,143488,143489],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},[26,143490,143491,143495,143509,143513,143527,143531,143545,143549,143563,143567],{"__ignoreMap":28},[52,143492,143493],{"class":54,"line":55},[52,143494,134359],{"class":332},[52,143496,143497,143499,143501,143503,143505,143507],{"class":54,"line":69},[52,143498,134364],{"class":58},[52,143500,82735],{"class":622},[52,143502,131280],{"class":90},[52,143504,54368],{"class":622},[52,143506,134373],{"class":90},[52,143508,131850],{"class":622},[52,143510,143511],{"class":54,"line":82},[52,143512,134380],{"class":332},[52,143514,143515,143517,143519,143521,143523,143525],{"class":54,"line":97},[52,143516,134385],{"class":58},[52,143518,82735],{"class":622},[52,143520,131280],{"class":90},[52,143522,54368],{"class":622},[52,143524,57694],{"class":90},[52,143526,131850],{"class":622},[52,143528,143529],{"class":54,"line":112},[52,143530,134400],{"class":332},[52,143532,143533,143535,143537,143539,143541,143543],{"class":54,"line":119},[52,143534,134405],{"class":58},[52,143536,82735],{"class":622},[52,143538,131280],{"class":90},[52,143540,54368],{"class":622},[52,143542,57761],{"class":90},[52,143544,131850],{"class":622},[52,143546,143547],{"class":54,"line":130},[52,143548,134420],{"class":332},[52,143550,143551,143553,143555,143557,143559,143561],{"class":54,"line":136},[52,143552,134425],{"class":58},[52,143554,82735],{"class":622},[52,143556,131280],{"class":90},[52,143558,54368],{"class":622},[52,143560,89161],{"class":90},[52,143562,131850],{"class":622},[52,143564,143565],{"class":54,"line":141},[52,143566,134440],{"class":332},[52,143568,143569,143571,143573,143575,143577,143579],{"class":54,"line":146},[52,143570,134445],{"class":58},[52,143572,82735],{"class":622},[52,143574,131280],{"class":90},[52,143576,54368],{"class":622},[52,143578,134454],{"class":90},[52,143580,131850],{"class":622},[274,143582,142379],{},[19,143584,143585],{"className":128920,"code":134352,"language":128922,"meta":28,"style":28},[26,143586,143587,143591,143605,143609,143623,143627,143641,143645,143659,143663],{"__ignoreMap":28},[52,143588,143589],{"class":54,"line":55},[52,143590,134359],{"class":332},[52,143592,143593,143595,143597,143599,143601,143603],{"class":54,"line":69},[52,143594,134364],{"class":58},[52,143596,82735],{"class":622},[52,143598,131280],{"class":90},[52,143600,54368],{"class":622},[52,143602,134373],{"class":90},[52,143604,131850],{"class":622},[52,143606,143607],{"class":54,"line":82},[52,143608,134380],{"class":332},[52,143610,143611,143613,143615,143617,143619,143621],{"class":54,"line":97},[52,143612,134385],{"class":58},[52,143614,82735],{"class":622},[52,143616,131280],{"class":90},[52,143618,54368],{"class":622},[52,143620,57694],{"class":90},[52,143622,131850],{"class":622},[52,143624,143625],{"class":54,"line":112},[52,143626,134400],{"class":332},[52,143628,143629,143631,143633,143635,143637,143639],{"class":54,"line":119},[52,143630,134405],{"class":58},[52,143632,82735],{"class":622},[52,143634,131280],{"class":90},[52,143636,54368],{"class":622},[52,143638,57761],{"class":90},[52,143640,131850],{"class":622},[52,143642,143643],{"class":54,"line":130},[52,143644,134420],{"class":332},[52,143646,143647,143649,143651,143653,143655,143657],{"class":54,"line":136},[52,143648,134425],{"class":58},[52,143650,82735],{"class":622},[52,143652,131280],{"class":90},[52,143654,54368],{"class":622},[52,143656,89161],{"class":90},[52,143658,131850],{"class":622},[52,143660,143661],{"class":54,"line":141},[52,143662,134440],{"class":332},[52,143664,143665,143667,143669,143671,143673,143675],{"class":54,"line":146},[52,143666,134445],{"class":58},[52,143668,82735],{"class":622},[52,143670,131280],{"class":90},[52,143672,54368],{"class":622},[52,143674,134454],{"class":90},[52,143676,131850],{"class":622},[4118,143678,143679,143690],{},[1073,143680,143681,143682,143685,143686,103940,143688],{},"1 号盒子左侧浮动 ",[26,143683,143684],{},"sk_list"," 里面包含 ",[26,143687,4118],{},[26,143689,1073],{},[1073,143691,143692,143693,143685,143696,103940,143698],{},"2 号盒子左侧浮动 ",[26,143694,143695],{},"sk_con",[26,143697,4118],{},[26,143699,1073],{},[274,143701,142290],{},[19,143703,143704],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,143705,143706,143712,143722],{"__ignoreMap":28},[52,143707,143708,143710],{"class":54,"line":55},[52,143709,132768],{"class":58},[52,143711,18528],{"class":622},[52,143713,143714,143716,143718,143720],{"class":54,"line":69},[52,143715,133400],{"class":90},[52,143717,54368],{"class":622},[52,143719,26688],{"class":90},[52,143721,4272],{"class":622},[52,143723,143724],{"class":54,"line":82},[52,143725,4543],{"class":622},[274,143727,142379],{},[19,143729,143730],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,143731,143732,143738,143748],{"__ignoreMap":28},[52,143733,143734,143736],{"class":54,"line":55},[52,143735,132768],{"class":58},[52,143737,18528],{"class":622},[52,143739,143740,143742,143744,143746],{"class":54,"line":69},[52,143741,133400],{"class":90},[52,143743,54368],{"class":622},[52,143745,26688],{"class":90},[52,143747,4272],{"class":622},[52,143749,143750],{"class":54,"line":82},[52,143751,4543],{"class":622},[30,143753,143755,143756],{"id":143754},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[26,143757,143758],{},"sk_container",[280,143760],{"style":128776,"src":143761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[4118,143763,143764,143769],{},[1073,143765,142944,143766,143768],{},[26,143767,143758],{}," 给宽度 1200，不要给高度",[1073,143770,143771],{},"一定不要忘记清除浮动",[274,143773,142290],{},[19,143775,143776],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,143777,143778,143784,143794],{"__ignoreMap":28},[52,143779,143780,143782],{"class":54,"line":55},[52,143781,132768],{"class":58},[52,143783,18528],{"class":622},[52,143785,143786,143788,143790,143792],{"class":54,"line":69},[52,143787,133400],{"class":90},[52,143789,54368],{"class":622},[52,143791,26688],{"class":90},[52,143793,4272],{"class":622},[52,143795,143796],{"class":54,"line":82},[52,143797,4543],{"class":622},[1070,143799,143800],{},[1073,143801,143802],{},"sk_hd制作",[4118,143804,143805],{},[1073,143806,143024,143807,143810],{},[26,143808,143809],{},"sk_hd"," ，插入图片即可",[274,143812,142290],{},[19,143814,143815],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,143816,143817],{"__ignoreMap":28},[52,143818,143819,143821,143823,143825,143827,143829,143831,143833,143835,143837,143839,143841],{"class":54,"line":55},[52,143820,4022],{"class":622},[52,143822,280],{"class":54231},[52,143824,58169],{"class":58},[52,143826,2099],{"class":622},[52,143828,136437],{"class":62},[52,143830,58177],{"class":58},[52,143832,2099],{"class":622},[52,143834,136444],{"class":62},[52,143836,136447],{"class":58},[52,143838,2099],{"class":622},[52,143840,136452],{"class":62},[52,143842,54238],{"class":622},[1070,143844,143845],{"start":69},[1073,143846,143847],{},"sk_bd制作",[4118,143849,143850],{},[1073,143851,143852,143853,143856,143857,103940,143859,143861],{},"3 号盒子 ",[26,143854,143855],{},"sk_bd"," ，里面包含很多的 ",[26,143858,4118],{},[26,143860,1073],{},[4118,143862,143863,143872],{},[1073,143864,143865,143866,143868,143869,143871],{},"当鼠标移入到 ",[26,143867,1073],{}," 上面的时候显示红色的边框，在这里先给 ",[26,143870,1073],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[1073,143873,143874,143875,143877,143878,143880,143881,143884,143885,143887],{},"由于给每个 ",[26,143876,1073],{}," 都设置了外边距，导致一行的最后一个 ",[26,143879,1073],{}," 掉了下来，在这里我们利用 ",[26,143882,143883],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[26,143886,1073],{},"，去掉外边距就好了",[274,143889,142290],{},[19,143891,143892],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,143893,143894,143900,143912],{"__ignoreMap":28},[52,143895,143896,143898],{"class":54,"line":55},[52,143897,54542],{"class":54231},[52,143899,18528],{"class":622},[52,143901,143902,143904,143906,143908,143910],{"class":54,"line":69},[52,143903,73398],{"class":90},[52,143905,54368],{"class":622},[52,143907,3306],{"class":90},[52,143909,54487],{"class":90},[52,143911,4272],{"class":622},[52,143913,143914],{"class":54,"line":82},[52,143915,4543],{"class":622},[274,143917,142379],{},[19,143919,143920],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,143921,143922,143928,143940],{"__ignoreMap":28},[52,143923,143924,143926],{"class":54,"line":55},[52,143925,54542],{"class":54231},[52,143927,18528],{"class":622},[52,143929,143930,143932,143934,143936,143938],{"class":54,"line":69},[52,143931,73398],{"class":90},[52,143933,54368],{"class":622},[52,143935,3306],{"class":90},[52,143937,54487],{"class":90},[52,143939,4272],{"class":622},[52,143941,143942],{"class":54,"line":82},[52,143943,4543],{"class":622},[14,143945,143947],{"id":143946},"_163-注册页面制作","16.3 注册页面制作",[280,143949],{"style":128776,"src":143950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[274,143952,143953,143955],{},[538,143954,11981],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[280,143957],{"style":128776,"src":143958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[30,143960,143962],{"id":143961},"_1631-准备工作","16.3.1 准备工作",[4118,143964,143965,143968],{},[1073,143966,143967],{},"创建register.html，引入 base.css，引入favicon图标",[1073,143969,143970],{},"创建register.css ，在html页面进行引入",[30,143972,143974,143975,143977],{"id":143973},"_1632-header-头部实现","16.3.2 ",[26,143976,133925],{}," 头部实现",[4118,143979,143980,143983],{},[1073,143981,143982],{},"整个内容用 版心 进行包裹",[1073,143984,143985],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[274,143987,142290],{},[19,143989,143990],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,143991,143992],{"__ignoreMap":28},[52,143993,143994,143996,143998,144000,144002,144004,144006,144008,144010,144012,144014,144016],{"class":54,"line":55},[52,143995,4022],{"class":622},[52,143997,280],{"class":54231},[52,143999,58169],{"class":58},[52,144001,2099],{"class":622},[52,144003,136437],{"class":62},[52,144005,58177],{"class":58},[52,144007,2099],{"class":622},[52,144009,136444],{"class":62},[52,144011,136447],{"class":58},[52,144013,2099],{"class":622},[52,144015,136452],{"class":62},[52,144017,54238],{"class":622},[274,144019,142379],{},[19,144021,144022],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,144023,144024],{"__ignoreMap":28},[52,144025,144026,144028,144030,144032,144034,144036,144038,144040,144042,144044,144046,144048],{"class":54,"line":55},[52,144027,4022],{"class":622},[52,144029,280],{"class":54231},[52,144031,58169],{"class":58},[52,144033,2099],{"class":622},[52,144035,136437],{"class":62},[52,144037,58177],{"class":58},[52,144039,2099],{"class":622},[52,144041,136444],{"class":62},[52,144043,136447],{"class":58},[52,144045,2099],{"class":622},[52,144047,136452],{"class":62},[52,144049,54238],{"class":622},[30,144051,144053,144054,144057],{"id":144052},"_1633-registerarea-主体模块实现","16.3.3 ",[26,144055,144056],{},"registerarea"," 主体模块实现",[280,144059],{"style":128776,"src":144060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[274,144062,144063],{},"整个大盒子 高度为 522px，设置4个边框",[274,144065,142290],{},[19,144067,144068],{"className":128920,"code":133077,"language":128922,"meta":28,"style":28},[26,144069,144070,144076,144092],{"__ignoreMap":28},[52,144071,144072,144074],{"class":54,"line":55},[52,144073,54542],{"class":54231},[52,144075,18528],{"class":622},[52,144077,144078,144080,144082,144084,144086,144088,144090],{"class":54,"line":69},[52,144079,73824],{"class":90},[52,144081,54368],{"class":622},[52,144083,3332],{"class":90},[52,144085,54423],{"class":160},[52,144087,54452],{"class":90},[52,144089,132312],{"class":90},[52,144091,4272],{"class":622},[52,144093,144094],{"class":54,"line":82},[52,144095,4543],{"class":622},[274,144097,142379],{},[19,144099,144100],{"className":128920,"code":133077,"language":128922,"meta":28,"style":28},[26,144101,144102,144108,144124],{"__ignoreMap":28},[52,144103,144104,144106],{"class":54,"line":55},[52,144105,54542],{"class":54231},[52,144107,18528],{"class":622},[52,144109,144110,144112,144114,144116,144118,144120,144122],{"class":54,"line":69},[52,144111,73824],{"class":90},[52,144113,54368],{"class":622},[52,144115,3332],{"class":90},[52,144117,54423],{"class":160},[52,144119,54452],{"class":90},[52,144121,132312],{"class":90},[52,144123,4272],{"class":622},[52,144125,144126],{"class":54,"line":82},[52,144127,4543],{"class":622},[274,144129,144130],{},"1号盒子 是一个 h3 标签，放标题",[4118,144132,144133],{},[1073,144134,144135],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[274,144137,142290],{},[19,144139,144140],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,144141,144142,144148,144158],{"__ignoreMap":28},[52,144143,144144,144146],{"class":54,"line":55},[52,144145,132768],{"class":58},[52,144147,18528],{"class":622},[52,144149,144150,144152,144154,144156],{"class":54,"line":69},[52,144151,133400],{"class":90},[52,144153,54368],{"class":622},[52,144155,26688],{"class":90},[52,144157,4272],{"class":622},[52,144159,144160],{"class":54,"line":82},[52,144161,4543],{"class":622},[274,144163,142379],{},[19,144165,144166],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,144167,144168,144174,144184],{"__ignoreMap":28},[52,144169,144170,144172],{"class":54,"line":55},[52,144171,132768],{"class":58},[52,144173,18528],{"class":622},[52,144175,144176,144178,144180,144182],{"class":54,"line":69},[52,144177,133400],{"class":90},[52,144179,54368],{"class":622},[52,144181,26688],{"class":90},[52,144183,4272],{"class":622},[52,144185,144186],{"class":54,"line":82},[52,144187,4543],{"class":622},[274,144189,144190],{},"2号盒子 里面放注册的内容",[4118,144192,144193,144196,144205,144219,144232,144235,144238,144256,144270],{},[1073,144194,144195],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[1073,144197,144198,144199,144201,144202,144204],{},"里面的内容利用 ",[26,144200,4118],{}," 包含 ",[26,144203,1073],{}," 来实现的（不需要用表格）",[1073,144206,141434,144207,144209,144210,144212,144213,144215,144216,144218],{},[26,144208,1073],{}," 里面，左侧放 ",[26,144211,36540],{}," 标签， 中间放",[26,144214,56751],{}," 标签， 右侧放 ",[26,144217,52],{}," 提示信息",[1073,144220,144221,144222,144224,144225,144227,144228,144231],{},"左侧 ",[26,144223,36540],{},"里面的文字都是右对齐，我们可以给",[26,144226,36540],{},"设置一个宽度（88px），然后利用",[26,144229,144230],{},"text-align"," 来设置右对齐",[1073,144233,144234],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[1073,144236,144237],{},"右侧 span修饰一下文字颜色",[1073,144239,144240,144241],{},"提示信息的样式优化",[4118,144242,144243,144246,144249],{},[1073,144244,144245],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[1073,144247,144248],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[1073,144250,144251,144252,144255],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[26,144253,144254],{},"vertical-algin"," 来设置 图片与文字对齐方式",[1073,144257,144258,144259],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[4118,144260,144261,144267],{},[1073,144262,144263,144264,144266],{},"设置 ",[26,144265,1605],{}," 的 左右 12px 的内边距，设置一下文字颜色",[1073,144268,144269],{},"分别设置 背景颜色",[1073,144271,144272,144273,144275],{},"同意协议 和 完成注册 都是用 ",[26,144274,1073],{}," 进行包裹",[274,144277,142290],{},[19,144279,144280],{"className":128920,"code":142863,"language":128922,"meta":28,"style":28},[26,144281,144282,144288,144298],{"__ignoreMap":28},[52,144283,144284,144286],{"class":54,"line":55},[52,144285,54542],{"class":54231},[52,144287,18528],{"class":622},[52,144289,144290,144292,144294,144296],{"class":54,"line":69},[52,144291,73806],{"class":90},[52,144293,54368],{"class":622},[52,144295,142880],{"class":90},[52,144297,4272],{"class":622},[52,144299,144300],{"class":54,"line":82},[52,144301,4543],{"class":622},[274,144303,142379],{},[19,144305,144306],{"className":128920,"code":142863,"language":128922,"meta":28,"style":28},[26,144307,144308,144314,144324],{"__ignoreMap":28},[52,144309,144310,144312],{"class":54,"line":55},[52,144311,54542],{"class":54231},[52,144313,18528],{"class":622},[52,144315,144316,144318,144320,144322],{"class":54,"line":69},[52,144317,73806],{"class":90},[52,144319,54368],{"class":622},[52,144321,142880],{"class":90},[52,144323,4272],{"class":622},[52,144325,144326],{"class":54,"line":82},[52,144327,4543],{"class":622},[30,144329,144331],{"id":144330},"_1634-底部实现","16.3.4 底部实现",[274,144333,142290],{},[19,144335,144336],{"className":128920,"code":142863,"language":128922,"meta":28,"style":28},[26,144337,144338,144344,144354],{"__ignoreMap":28},[52,144339,144340,144342],{"class":54,"line":55},[52,144341,54542],{"class":54231},[52,144343,18528],{"class":622},[52,144345,144346,144348,144350,144352],{"class":54,"line":69},[52,144347,73806],{"class":90},[52,144349,54368],{"class":622},[52,144351,142880],{"class":90},[52,144353,4272],{"class":622},[52,144355,144356],{"class":54,"line":82},[52,144357,4543],{"class":622},[274,144359,142379],{},[19,144361,144362],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,144363,144364,144368,144382,144386],{"__ignoreMap":28},[52,144365,144366],{"class":54,"line":55},[52,144367,133031],{"class":332},[52,144369,144370,144372,144374,144376,144378,144380],{"class":54,"line":69},[52,144371,4022],{"class":622},[52,144373,54542],{"class":54231},[52,144375,56416],{"class":58},[52,144377,2099],{"class":622},[52,144379,133044],{"class":62},[52,144381,54238],{"class":622},[52,144383,144384],{"class":54,"line":82},[52,144385,133051],{"class":622},[52,144387,144388,144390,144392],{"class":54,"line":97},[52,144389,54716],{"class":622},[52,144391,54542],{"class":54231},[52,144393,54238],{"class":622},[14,144395,144397],{"id":144396},"_164-项目总结","16.4 项目总结",[1070,144399,144400,144403,144406,144409],{},[1073,144401,144402],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[1073,144404,144405],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[1073,144407,144408],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[1073,144410,144411],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[280,144413],{"style":128776,"src":144414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1070,144416,144417],{"start":112},[1073,144418,144419],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[280,144421],{"style":128776,"src":144422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1070,144424,144425],{"start":119},[1073,144426,144427],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[280,144429],{"style":128776,"src":144430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[19,144432,144433],{"className":129667,"code":139077,"language":129669,"meta":28,"style":28},[26,144434,144435],{"__ignoreMap":28},[52,144436,144437,144439,144441,144443,144445,144447,144449,144451,144453,144455,144457,144459],{"class":54,"line":55},[52,144438,4022],{"class":622},[52,144440,56751],{"class":54231},[52,144442,56754],{"class":58},[52,144444,2099],{"class":622},[52,144446,65629],{"class":62},[52,144448,17876],{"class":58},[52,144450,2099],{"class":622},[52,144452,139098],{"class":62},[52,144454,63950],{"class":58},[52,144456,2099],{"class":622},[52,144458,139105],{"class":62},[52,144460,54238],{"class":622},[1070,144462,144463,144466],{"start":130},[1073,144464,144465],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[1073,144467,144468],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[3015,144470,144471],{},"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":28,"searchDepth":69,"depth":69,"links":144473},[144474,144479,144486,144494],{"id":142100,"depth":69,"text":142101,"children":144475},[144476,144477,144478],{"id":142104,"depth":82,"text":142105},{"id":142835,"depth":82,"text":142836},{"id":143148,"depth":82,"text":143149},{"id":143448,"depth":69,"text":143449,"children":144480},[144481,144482,144484],{"id":143452,"depth":82,"text":143453},{"id":143470,"depth":82,"text":144483},"16.2.2 列表页 header 和 nav 修改",{"id":143754,"depth":82,"text":144485},"16.2.3 列表页主体 sk_container",{"id":143946,"depth":69,"text":143947,"children":144487},[144488,144489,144491,144493],{"id":143961,"depth":82,"text":143962},{"id":143973,"depth":82,"text":144490},"16.3.2 header 头部实现",{"id":144052,"depth":82,"text":144492},"16.3.3 registerarea 主体模块实现",{"id":144330,"depth":82,"text":144331},{"id":144396,"depth":69,"text":144397},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":142092,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144501,"title":144502,"body":144503,"description":3046,"extension":3047,"meta":144611,"navigation":115,"path":144612,"seo":144613,"stem":144614,"__hash__":144615},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144504,"toc":144606},[144505,144508,144512,144515,144518,144527,144536,144540,144545,144552,144570,144573,144576,144579,144582,144585,144588,144591,144594,144597,144600,144603],[10,144506,144502],{"id":144507},"_17-web服务器与网站发布",[14,144509,144511],{"id":144510},"_171-web服务器","17.1 Web服务器",[274,144513,144514],{},"把自己网站上传到服务器上，可以让其他人访问",[280,144516],{"style":128776,"src":144517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[274,144519,144520,144523,144524],{},[538,144521,144522],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[538,144525,144526],{},"Web 服务器等",[274,144528,144529,144530,103940,144533,28685],{},"根据服务器在网络中所在的位置不同，又可分为 ",[538,144531,144532],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[538,144534,144535],{},"远程服务器",[30,144537,144539],{"id":144538},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[274,144541,144542],{},[538,144543,144544],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[274,144546,144547,144548],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[300,144549,144550],{"href":144550,"rel":144551},"http:\u002F\u002Ffree.3v.do\u002F",[304],[4118,144553,144554,144557,144560,144567],{},[1073,144555,144556],{},"去免费空间网站注册账号。",[1073,144558,144559],{},"记录下主机名、用户名、密码、域名。",[1073,144561,144562,144563,144566],{},"利用 ",[26,144564,144565],{},"utftp"," 软件 上传网站到远程服务器",[1073,144568,144569],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[274,144571,144572],{},"使用软件上传，对上传软件文件进行解压",[280,144574],{"style":128776,"src":144575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[280,144577],{"style":128776,"src":144578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[274,144580,144581],{},"输入刚刚申请的服务器账号信息：",[280,144583],{"style":128776,"src":144584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[280,144586],{"style":128776,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[280,144589],{"style":128776,"src":144590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[280,144592],{"style":128776,"src":144593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[274,144595,144596],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[280,144598],{"style":128776,"src":144599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[274,144601,144602],{},"浏览器输入域名即可访问",[274,144604,144605],{},"首页一定必须是index",{"title":28,"searchDepth":69,"depth":69,"links":144607},[144608],{"id":144510,"depth":69,"text":144511,"children":144609},[144610],{"id":144538,"depth":82,"text":144539},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144502,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144617,"title":144618,"body":144619,"description":3046,"extension":3047,"meta":145546,"navigation":115,"path":145547,"seo":145548,"stem":145549,"__hash__":145550},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144620,"toc":145529},[144621,144624,144628,144631,144634,144645,144648,144652,144656,144661,144664,144667,144670,144673,144677,144703,144707,144711,144714,144717,144721,144754,144758,144761,144764,144828,144832,144836,144839,144842,144845,144849,144894,144898,144901,144931,144935,144939,144942,144945,144949,144952,145021,145024,145132,145134,145140,145144,145147,145150,145246,145249,145253,145277,145281,145284,145288,145291,145295,145298,145301,145304,145307,145311,145314,145317,145321,145325,145328,145331,145334,145337,145341,145344,145348,145351,145354,145399,145403,145407,145410,145413,145416,145448,145452,145455,145489,145493,145496,145526],[10,144622,144618],{"id":144623},"_18-2d动画与3d转换",[14,144625,144627],{"id":144626},"_181-css3-2d转换","18.1 CSS3 2D转换",[274,144629,144630],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[274,144632,144633],{},"转换（transform）你可以简单理解为变形",[4118,144635,144636,144639,144642],{},[1073,144637,144638],{},"移动：translate",[1073,144640,144641],{},"旋转：rotate",[1073,144643,144644],{},"缩放：scale",[280,144646],{"style":128776,"src":144647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[30,144649,144651],{"id":144650},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[1486,144653,144655],{"id":144654},"_18111-translate介绍","18.1.1.1 translate介绍",[274,144657,144658,144659],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[538,144660,135579],{},[280,144662],{"style":128776,"src":144663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[274,144665,144666],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[274,144668,144669],{},"对于行内元素无效",[274,144671,144672],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[1486,144674,144676],{"id":144675},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[19,144678,144679],{"className":128920,"code":141109,"language":128922,"meta":28,"style":28},[26,144680,144681,144687,144699],{"__ignoreMap":28},[52,144682,144683,144685],{"class":54,"line":55},[52,144684,54542],{"class":54231},[52,144686,18528],{"class":622},[52,144688,144689,144691,144693,144695,144697],{"class":54,"line":69},[52,144690,73398],{"class":90},[52,144692,54368],{"class":622},[52,144694,3306],{"class":90},[52,144696,54487],{"class":90},[52,144698,4272],{"class":622},[52,144700,144701],{"class":54,"line":82},[52,144702,4543],{"class":622},[30,144704,144706],{"id":144705},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[1486,144708,144710],{"id":144709},"_18121-rotate介绍","18.1.2.1 rotate介绍",[274,144712,144713],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[280,144715],{"style":128776,"src":144716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[1486,144718,144720],{"id":144719},"_18122-旋转效果","18.1.2.2 旋转效果",[19,144722,144724],{"className":128920,"code":144723,"language":128922,"meta":28,"style":28},"div {\n  transform: rotate(45deg);\n}\n",[26,144725,144726,144732,144750],{"__ignoreMap":28},[52,144727,144728,144730],{"class":54,"line":55},[52,144729,54542],{"class":54231},[52,144731,18528],{"class":622},[52,144733,144734,144736,144738,144741,144743,144745,144748],{"class":54,"line":69},[52,144735,138904],{"class":90},[52,144737,54368],{"class":622},[52,144739,144740],{"class":90},"rotate",[52,144742,3121],{"class":622},[52,144744,3641],{"class":90},[52,144746,144747],{"class":160},"deg",[52,144749,5679],{"class":622},[52,144751,144752],{"class":54,"line":82},[52,144753,4543],{"class":622},[1486,144755,144757],{"id":144756},"_18123-三角做法","18.1.2.3 三角做法",[274,144759,144760],{},"该下标当经过最外层大盒子时会实现向上反转",[280,144762],{"style":128776,"src":144763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[19,144765,144766],{"className":128920,"code":137440,"language":128922,"meta":28,"style":28},[26,144767,144768,144772,144778,144788,144798,144814,144824],{"__ignoreMap":28},[52,144769,144770],{"class":54,"line":55},[52,144771,137447],{"class":332},[52,144773,144774,144776],{"class":54,"line":69},[52,144775,137452],{"class":58},[52,144777,18528],{"class":622},[52,144779,144780,144782,144784,144786],{"class":54,"line":82},[52,144781,73496],{"class":90},[52,144783,54368],{"class":622},[52,144785,3306],{"class":90},[52,144787,4272],{"class":622},[52,144789,144790,144792,144794,144796],{"class":54,"line":97},[52,144791,73716],{"class":90},[52,144793,54368],{"class":622},[52,144795,3306],{"class":90},[52,144797,4272],{"class":622},[52,144799,144800,144802,144804,144806,144808,144810,144812],{"class":54,"line":112},[52,144801,73824],{"class":90},[52,144803,54368],{"class":622},[52,144805,3559],{"class":90},[52,144807,54423],{"class":160},[52,144809,54452],{"class":90},[52,144811,66921],{"class":90},[52,144813,4272],{"class":622},[52,144815,144816,144818,144820,144822],{"class":54,"line":119},[52,144817,137495],{"class":90},[52,144819,54368],{"class":622},[52,144821,65299],{"class":90},[52,144823,4272],{"class":622},[52,144825,144826],{"class":54,"line":130},[52,144827,4543],{"class":622},[30,144829,144831],{"id":144830},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[1486,144833,144835],{"id":144834},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[274,144837,144838],{},"设置中心点",[280,144840],{"style":128776,"src":144841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[274,144843,144844],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[1486,144846,144848],{"id":144847},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[19,144850,144852],{"className":128920,"code":144851,"language":128922,"meta":28,"style":28},"\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",[26,144853,144854,144859,144865,144880,144885,144890],{"__ignoreMap":28},[52,144855,144856],{"class":54,"line":55},[52,144857,144858],{"class":332},"\u002F* 转换中心点 *\u002F\n",[52,144860,144861,144863],{"class":54,"line":69},[52,144862,54542],{"class":54231},[52,144864,18528],{"class":622},[52,144866,144867,144870,144872,144874,144876,144878],{"class":54,"line":82},[52,144868,144869],{"class":90},"  transform-origin",[52,144871,54368],{"class":622},[52,144873,54523],{"class":90},[52,144875,20100],{"class":90},[52,144877,132783],{"class":622},[52,144879,137593],{"class":332},[52,144881,144882],{"class":54,"line":97},[52,144883,144884],{"class":332},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[52,144886,144887],{"class":54,"line":112},[52,144888,144889],{"class":332},"  \u002F* transform-origin: left top; *\u002F\n",[52,144891,144892],{"class":54,"line":119},[52,144893,4543],{"class":622},[1486,144895,144897],{"id":144896},"_18133-旋转案例","18.1.3.3 旋转案例",[280,144899],{"style":128776,"src":144900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[19,144902,144903],{"className":128920,"code":144723,"language":128922,"meta":28,"style":28},[26,144904,144905,144911,144927],{"__ignoreMap":28},[52,144906,144907,144909],{"class":54,"line":55},[52,144908,54542],{"class":54231},[52,144910,18528],{"class":622},[52,144912,144913,144915,144917,144919,144921,144923,144925],{"class":54,"line":69},[52,144914,138904],{"class":90},[52,144916,54368],{"class":622},[52,144918,144740],{"class":90},[52,144920,3121],{"class":622},[52,144922,3641],{"class":90},[52,144924,144747],{"class":160},[52,144926,5679],{"class":622},[52,144928,144929],{"class":54,"line":82},[52,144930,4543],{"class":622},[30,144932,144934],{"id":144933},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[1486,144936,144938],{"id":144937},"_18141-scale介绍","18.1.4.1 scale介绍",[274,144940,144941],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[280,144943],{"style":128776,"src":144944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[1486,144946,144948],{"id":144947},"_18142-分页按钮","18.1.4.2 分页按钮",[280,144950],{"style":128776,"src":144951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[19,144953,144955],{"className":128920,"code":144954,"language":128922,"meta":28,"style":28},"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",[26,144956,144957,144963,144979,144983,144987,144992,144998,145012,145017],{"__ignoreMap":28},[52,144958,144959,144961],{"class":54,"line":55},[52,144960,54542],{"class":54231},[52,144962,18528],{"class":622},[52,144964,144965,144967,144969,144972,144974,144977],{"class":54,"line":69},[52,144966,138904],{"class":90},[52,144968,54368],{"class":622},[52,144970,144971],{"class":90},"scale",[52,144973,3121],{"class":622},[52,144975,144976],{"class":90},"1.2",[52,144978,5679],{"class":622},[52,144980,144981],{"class":54,"line":82},[52,144982,4543],{"class":622},[52,144984,144985],{"class":54,"line":97},[52,144986,138381],{"class":622},[52,144988,144989],{"class":54,"line":112},[52,144990,144991],{"class":332},"\u002F* 2D 缩放 *\u002F\n",[52,144993,144994,144996],{"class":54,"line":119},[52,144995,54542],{"class":54231},[52,144997,18528],{"class":622},[52,144999,145000,145002,145004,145006,145008,145010],{"class":54,"line":130},[52,145001,138904],{"class":90},[52,145003,54368],{"class":622},[52,145005,144971],{"class":90},[52,145007,3121],{"class":622},[52,145009,144976],{"class":90},[52,145011,5679],{"class":622},[52,145013,145014],{"class":54,"line":136},[52,145015,145016],{"class":332},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[52,145018,145019],{"class":54,"line":141},[52,145020,4543],{"class":622},[274,145022,145023],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[19,145025,145027],{"className":128920,"code":145026,"language":128922,"meta":28,"style":28},"\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",[26,145028,145029,145034,145044,145065,145086,145090,145095,145101,145128],{"__ignoreMap":28},[52,145030,145031],{"class":54,"line":55},[52,145032,145033],{"class":332},"\u002F* 定义动画 *\u002F\n",[52,145035,145036,145039,145042],{"class":54,"line":69},[52,145037,145038],{"class":160},"@keyframes",[52,145040,145041],{"class":8172}," move",[52,145043,18528],{"class":622},[52,145045,145046,145049,145051,145053,145055,145058,145060,145062],{"class":54,"line":82},[52,145047,145048],{"class":58},"  0%",[52,145050,82735],{"class":622},[52,145052,51065],{"class":90},[52,145054,54368],{"class":622},[52,145056,145057],{"class":90},"translateX",[52,145059,3121],{"class":622},[52,145061,3306],{"class":90},[52,145063,145064],{"class":622},"); }\n",[52,145066,145067,145070,145072,145074,145076,145078,145080,145082,145084],{"class":54,"line":97},[52,145068,145069],{"class":58},"  100%",[52,145071,82735],{"class":622},[52,145073,51065],{"class":90},[52,145075,54368],{"class":622},[52,145077,145057],{"class":90},[52,145079,3121],{"class":622},[52,145081,3424],{"class":90},[52,145083,54423],{"class":160},[52,145085,145064],{"class":622},[52,145087,145088],{"class":54,"line":112},[52,145089,4543],{"class":622},[52,145091,145092],{"class":54,"line":119},[52,145093,145094],{"class":332},"\u002F* 调用动画 *\u002F\n",[52,145096,145097,145099],{"class":54,"line":130},[52,145098,54542],{"class":54231},[52,145100,18528],{"class":622},[52,145102,145103,145106,145108,145110,145112,145114,145116,145118,145120,145123,145126],{"class":54,"line":136},[52,145104,145105],{"class":90},"  animation",[52,145107,54368],{"class":622},[52,145109,137606],{"class":90},[52,145111,28064],{"class":90},[52,145113,3807],{"class":160},[52,145115,81608],{"class":90},[52,145117,7052],{"class":90},[52,145119,3807],{"class":160},[52,145121,145122],{"class":90}," infinite",[52,145124,145125],{"class":90}," alternate",[52,145127,4272],{"class":622},[52,145129,145130],{"class":54,"line":141},[52,145131,4543],{"class":622},[274,145133,145023],{},[19,145135,145138],{"className":145136,"code":145137,"language":24},[22],"\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",[26,145139,145137],{"__ignoreMap":28},[1486,145141,145143],{"id":145142},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[274,145145,145146],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[280,145148],{"style":128776,"src":145149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[19,145151,145152],{"className":128920,"code":145026,"language":128922,"meta":28,"style":28},[26,145153,145154,145158,145166,145184,145204,145208,145212,145218,145242],{"__ignoreMap":28},[52,145155,145156],{"class":54,"line":55},[52,145157,145033],{"class":332},[52,145159,145160,145162,145164],{"class":54,"line":69},[52,145161,145038],{"class":160},[52,145163,145041],{"class":8172},[52,145165,18528],{"class":622},[52,145167,145168,145170,145172,145174,145176,145178,145180,145182],{"class":54,"line":82},[52,145169,145048],{"class":58},[52,145171,82735],{"class":622},[52,145173,51065],{"class":90},[52,145175,54368],{"class":622},[52,145177,145057],{"class":90},[52,145179,3121],{"class":622},[52,145181,3306],{"class":90},[52,145183,145064],{"class":622},[52,145185,145186,145188,145190,145192,145194,145196,145198,145200,145202],{"class":54,"line":97},[52,145187,145069],{"class":58},[52,145189,82735],{"class":622},[52,145191,51065],{"class":90},[52,145193,54368],{"class":622},[52,145195,145057],{"class":90},[52,145197,3121],{"class":622},[52,145199,3424],{"class":90},[52,145201,54423],{"class":160},[52,145203,145064],{"class":622},[52,145205,145206],{"class":54,"line":112},[52,145207,4543],{"class":622},[52,145209,145210],{"class":54,"line":119},[52,145211,145094],{"class":332},[52,145213,145214,145216],{"class":54,"line":130},[52,145215,54542],{"class":54231},[52,145217,18528],{"class":622},[52,145219,145220,145222,145224,145226,145228,145230,145232,145234,145236,145238,145240],{"class":54,"line":136},[52,145221,145105],{"class":90},[52,145223,54368],{"class":622},[52,145225,137606],{"class":90},[52,145227,28064],{"class":90},[52,145229,3807],{"class":160},[52,145231,81608],{"class":90},[52,145233,7052],{"class":90},[52,145235,3807],{"class":160},[52,145237,145122],{"class":90},[52,145239,145125],{"class":90},[52,145241,4272],{"class":622},[52,145243,145244],{"class":54,"line":141},[52,145245,4543],{"class":622},[274,145247,145248],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[30,145250,145252],{"id":145251},"_1823-知识点回顾","18.2.3 知识点回顾",[19,145254,145255],{"className":128920,"code":131089,"language":128922,"meta":28,"style":28},[26,145256,145257,145263,145273],{"__ignoreMap":28},[52,145258,145259,145261],{"class":54,"line":55},[52,145260,54542],{"class":54231},[52,145262,18528],{"class":622},[52,145264,145265,145267,145269,145271],{"class":54,"line":69},[52,145266,131102],{"class":90},[52,145268,54368],{"class":622},[52,145270,64666],{"class":90},[52,145272,4272],{"class":622},[52,145274,145275],{"class":54,"line":82},[52,145276,4543],{"class":622},[14,145278,145280],{"id":145279},"_183-3d-转换","18.3 3D 转换",[274,145282,145283],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[30,145285,145287],{"id":145286},"_1831-坐标轴认识","18.3.1 坐标轴认识",[280,145289],{"style":128776,"src":145290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[30,145292,145294],{"id":145293},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[280,145296],{"style":128776,"src":145297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[274,145299,145300],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[274,145302,145303],{},"translate3d的效果需要搭配透视perspective来使用",[280,145305],{"style":128776,"src":145306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[30,145308,145310],{"id":145309},"_1833-透视-perspective","18.3.3 透视 perspective",[280,145312],{"style":128776,"src":145313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[274,145315,145316],{},"透视写在父盒子上，单位为像素",[30,145318,145320],{"id":145319},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[1486,145322,145324],{"id":145323},"_18341-分开解释","18.3.4.1 分开解释",[280,145326],{"style":128776,"src":145327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[280,145329],{"style":128776,"src":145330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[280,145332],{"style":128776,"src":145333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[274,145335,145336],{},"总结来说就是左手原则",[1486,145338,145340],{"id":145339},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[280,145342],{"style":128776,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[30,145345,145347],{"id":145346},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[280,145349],{"style":128776,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[280,145352],{"style":128776,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[19,145355,145357],{"className":128920,"code":145356,"language":128922,"meta":28,"style":28},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[26,145358,145359,145365,145378,145395],{"__ignoreMap":28},[52,145360,145361,145363],{"class":54,"line":55},[52,145362,54542],{"class":54231},[52,145364,18528],{"class":622},[52,145366,145367,145370,145372,145374,145376],{"class":54,"line":69},[52,145368,145369],{"class":90},"  perspective",[52,145371,54368],{"class":622},[52,145373,68003],{"class":90},[52,145375,54423],{"class":160},[52,145377,4272],{"class":622},[52,145379,145380,145382,145384,145387,145389,145391,145393],{"class":54,"line":82},[52,145381,138904],{"class":90},[52,145383,54368],{"class":622},[52,145385,145386],{"class":90},"rotateX",[52,145388,3121],{"class":622},[52,145390,3641],{"class":90},[52,145392,144747],{"class":160},[52,145394,5679],{"class":622},[52,145396,145397],{"class":54,"line":97},[52,145398,4543],{"class":622},[30,145400,145402],{"id":145401},"_1836-案例","18.3.6 案例",[1486,145404,145406],{"id":145405},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[280,145408],{"style":128776,"src":145409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[280,145411],{"style":128776,"src":145412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[280,145414],{"style":128776,"src":145415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[19,145417,145419],{"className":128920,"code":145418,"language":128922,"meta":28,"style":28},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[26,145420,145421,145426,145432,145444],{"__ignoreMap":28},[52,145422,145423],{"class":54,"line":55},[52,145424,145425],{"class":332},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[52,145427,145428,145430],{"class":54,"line":69},[52,145429,135917],{"class":58},[52,145431,18528],{"class":622},[52,145433,145434,145436,145438,145440,145442],{"class":54,"line":82},[52,145435,145369],{"class":90},[52,145437,54368],{"class":622},[52,145439,68003],{"class":90},[52,145441,54423],{"class":160},[52,145443,4272],{"class":622},[52,145445,145446],{"class":54,"line":97},[52,145447,4543],{"class":622},[1486,145449,145451],{"id":145450},"_18362-3d导航栏","18.3.6.2 3D导航栏",[280,145453],{"style":128776,"src":145454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[19,145456,145457],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,145458,145459,145463,145477,145481],{"__ignoreMap":28},[52,145460,145461],{"class":54,"line":55},[52,145462,133031],{"class":332},[52,145464,145465,145467,145469,145471,145473,145475],{"class":54,"line":69},[52,145466,4022],{"class":622},[52,145468,54542],{"class":54231},[52,145470,56416],{"class":58},[52,145472,2099],{"class":622},[52,145474,133044],{"class":62},[52,145476,54238],{"class":622},[52,145478,145479],{"class":54,"line":82},[52,145480,133051],{"class":622},[52,145482,145483,145485,145487],{"class":54,"line":97},[52,145484,54716],{"class":622},[52,145486,54542],{"class":54231},[52,145488,54238],{"class":622},[1486,145490,145492],{"id":145491},"_18363-旋转木马","18.3.6.3 旋转木马",[280,145494],{"style":128776,"src":145495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[19,145497,145498],{"className":128920,"code":144723,"language":128922,"meta":28,"style":28},[26,145499,145500,145506,145522],{"__ignoreMap":28},[52,145501,145502,145504],{"class":54,"line":55},[52,145503,54542],{"class":54231},[52,145505,18528],{"class":622},[52,145507,145508,145510,145512,145514,145516,145518,145520],{"class":54,"line":69},[52,145509,138904],{"class":90},[52,145511,54368],{"class":622},[52,145513,144740],{"class":90},[52,145515,3121],{"class":622},[52,145517,3641],{"class":90},[52,145519,144747],{"class":160},[52,145521,5679],{"class":622},[52,145523,145524],{"class":54,"line":82},[52,145525,4543],{"class":622},[3015,145527,145528],{},"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":28,"searchDepth":69,"depth":69,"links":145530},[145531,145538],{"id":144626,"depth":69,"text":144627,"children":145532},[145533,145534,145535,145536,145537],{"id":144650,"depth":82,"text":144651},{"id":144705,"depth":82,"text":144706},{"id":144830,"depth":82,"text":144831},{"id":144933,"depth":82,"text":144934},{"id":145251,"depth":82,"text":145252},{"id":145279,"depth":69,"text":145280,"children":145539},[145540,145541,145542,145543,145544,145545],{"id":145286,"depth":82,"text":145287},{"id":145293,"depth":82,"text":145294},{"id":145309,"depth":82,"text":145310},{"id":145319,"depth":82,"text":145320},{"id":145346,"depth":82,"text":145347},{"id":145401,"depth":82,"text":145402},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144618,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145552,"title":145553,"body":145554,"description":3046,"extension":3047,"meta":145757,"navigation":115,"path":145758,"seo":145759,"stem":145760,"__hash__":145761},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145555,"toc":145746},[145556,145559,145563,145566,145569,145573,145576,145579,145582,145586,145589,145593,145596,145600,145603,145607,145621,145625,145650,145653,145656,145673,145677,145681,145684,145687,145691,145694,145697,145715,145719,145722,145736,145740,145743],[10,145557,145553],{"id":145558},"_19-移动端基础-前缀现状与视口",[14,145560,145562],{"id":145561},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[280,145564],{"style":128776,"src":145565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[274,145567,145568],{},"意思就是加个前缀，增加兼容性",[14,145570,145572],{"id":145571},"_192-移动端现状认识","19.2 移动端现状认识",[280,145574],{"style":128776,"src":145575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[274,145577,145578],{},"调试方法：",[280,145580],{"style":128776,"src":145581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145583,145585],{"id":145584},"_193-视口","19.3 视口",[274,145587,145588],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[30,145590,145592],{"id":145591},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[280,145594],{"style":128776,"src":145595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[30,145597,145599],{"id":145598},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[280,145601],{"style":128776,"src":145602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[30,145604,145606],{"id":145605},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[4118,145608,145609,145612,145615,145618],{},[1073,145610,145611],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[1073,145613,145614],{},"理想视口，对设备来讲，是最理想的视口尺寸",[1073,145616,145617],{},"需要手动添写meta视口标签通知浏览器操作",[1073,145619,145620],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[30,145622,145624],{"id":145623},"_1934-meta视口标签","19.3.4 meta视口标签",[19,145626,145628],{"className":129667,"code":145627,"language":129669,"meta":28,"style":28},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[26,145629,145630],{"__ignoreMap":28},[52,145631,145632,145634,145636,145638,145640,145642,145644,145646,145648],{"class":54,"line":55},[52,145633,4022],{"class":622},[52,145635,54275],{"class":54231},[52,145637,17876],{"class":58},[52,145639,2099],{"class":622},[52,145641,54322],{"class":62},[52,145643,54302],{"class":58},[52,145645,2099],{"class":622},[52,145647,54329],{"class":62},[52,145649,54238],{"class":622},[280,145651],{"style":128776,"src":145652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[274,145654,145655],{},"标准视口设置：",[1070,145657,145658,145661,145664,145667,145670],{},[1073,145659,145660],{},"视口宽度和设备保持一致",[1073,145662,145663],{},"视口的默认缩放比例1.0",[1073,145665,145666],{},"不允许用户自行缩放",[1073,145668,145669],{},"最大允许的缩放比例1.0",[1073,145671,145672],{},"最小允许的缩放比例1.0",[30,145674,145676],{"id":145675},"_1935-二倍图","19.3.5 二倍图",[1486,145678,145680],{"id":145679},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[280,145682],{"style":128776,"src":145683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[280,145685],{"style":128776,"src":145686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[1486,145688,145690],{"id":145689},"_19352-多倍图","19.3.5.2 多倍图",[280,145692],{"style":128776,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[274,145695,145696],{},"二倍图法，代码如下：",[19,145698,145700],{"className":128920,"code":145699,"language":128922,"meta":28,"style":28},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[26,145701,145702,145707],{"__ignoreMap":28},[52,145703,145704],{"class":54,"line":55},[52,145705,145706],{"class":332},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[52,145708,145709,145712],{"class":54,"line":69},[52,145710,145711],{"class":54231},"background-size",[52,145713,145714],{"class":622},": 50% 50%;\n",[1486,145716,145718],{"id":145717},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[280,145720],{"style":128776,"src":145721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1070,145723,145724,145727,145730,145733],{},[1073,145725,145726],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[1073,145728,145729],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[1073,145731,145732],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[1073,145734,145735],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[1486,145737,145739],{"id":145738},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[280,145741],{"style":128776,"src":145742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[3015,145744,145745],{},"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":28,"searchDepth":69,"depth":69,"links":145747},[145748,145749,145750],{"id":145561,"depth":69,"text":145562},{"id":145571,"depth":69,"text":145572},{"id":145584,"depth":69,"text":145585,"children":145751},[145752,145753,145754,145755,145756],{"id":145591,"depth":82,"text":145592},{"id":145598,"depth":82,"text":145599},{"id":145605,"depth":82,"text":145606},{"id":145623,"depth":82,"text":145624},{"id":145675,"depth":82,"text":145676},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145553,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145763,"title":145764,"body":145765,"description":3046,"extension":3047,"meta":146642,"navigation":115,"path":146643,"seo":146644,"stem":146645,"__hash__":146646},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145766,"toc":146626},[145767,145770,145774,145781,145784,145791,145794,145799,145802,145806,145810,145817,145820,145823,145827,145830,145833,145836,145839,145842,145846,145849,145853,145855,145858,145861,145864,145867,145869,145872,145874,145904,145906,145936,145940,145943,145947,145950,145967,145970,145973,146049,146051,146054,146057,146060,146063,146065,146068,146071,146075,146097,146100,146103,146107,146110,146116,146119,146123,146126,146129,146133,146136,146139,146142,146146,146149,146152,146155,146158,146162,146165,146169,146176,146179,146182,146185,146188,146198,146201,146204,146211,146214,146218,146221,146224,146228,146231,146234,146237,146282,146285,146288,146291,146293,146422,146424,146462,146465,146468,146470,146588,146590,146624],[10,145768,145764],{"id":145769},"_20-移动端布局实战上篇",[14,145771,145773],{"id":145772},"_201-移动端主流方案","20.1 移动端主流方案",[1070,145775,145776],{},[1073,145777,145778],{},[538,145779,145780],{},"单独移动端页面（主流）",[280,145782],{"style":128776,"src":145783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1070,145785,145786],{"start":69},[1073,145787,145788],{},[538,145789,145790],{},"响应式兼容PC移动端",[280,145792],{"style":128776,"src":145793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1070,145795,145796],{"start":82},[1073,145797,145798],{},"两种页面选型布局方式",[280,145800],{"style":128776,"src":145801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145803,145805],{"id":145804},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[30,145807,145809],{"id":145808},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[274,145811,145812,145813],{},"官网地址： ",[300,145814,145815],{"href":145815,"rel":145816},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[304],[280,145818],{"style":128776,"src":145819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[280,145821],{"style":128776,"src":145822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[30,145824,145826],{"id":145825},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[280,145828],{"style":128776,"src":145829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[280,145831],{"style":128776,"src":145832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[274,145834,145835],{},"去除高亮：",[274,145837,145838],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[274,145840,145841],{},"-webkit- tap-highlight-color: transparent;",[14,145843,145845],{"id":145844},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[280,145847],{"style":128776,"src":145848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145850,145852],{"id":145851},"_204-流式布局案例","20.4 流式布局案例",[274,145854,3149],{},[274,145856,145857],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[274,145859,145860],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[274,145862,145863],{},"图片格式：",[280,145865],{"style":128776,"src":145866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[274,145868,137963],{},[280,145870],{"style":128776,"src":145871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[274,145873,142290],{},[19,145875,145876],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,145877,145878],{"__ignoreMap":28},[52,145879,145880,145882,145884,145886,145888,145890,145892,145894,145896,145898,145900,145902],{"class":54,"line":55},[52,145881,4022],{"class":622},[52,145883,280],{"class":54231},[52,145885,58169],{"class":58},[52,145887,2099],{"class":622},[52,145889,136437],{"class":62},[52,145891,58177],{"class":58},[52,145893,2099],{"class":622},[52,145895,136444],{"class":62},[52,145897,136447],{"class":58},[52,145899,2099],{"class":622},[52,145901,136452],{"class":62},[52,145903,54238],{"class":622},[274,145905,142379],{},[19,145907,145908],{"className":129667,"code":136422,"language":129669,"meta":28,"style":28},[26,145909,145910],{"__ignoreMap":28},[52,145911,145912,145914,145916,145918,145920,145922,145924,145926,145928,145930,145932,145934],{"class":54,"line":55},[52,145913,4022],{"class":622},[52,145915,280],{"class":54231},[52,145917,58169],{"class":58},[52,145919,2099],{"class":622},[52,145921,136437],{"class":62},[52,145923,58177],{"class":58},[52,145925,2099],{"class":622},[52,145927,136444],{"class":62},[52,145929,136447],{"class":58},[52,145931,2099],{"class":622},[52,145933,136452],{"class":62},[52,145935,54238],{"class":622},[14,145937,145939],{"id":145938},"_205-flex布局","20.5 flex布局",[280,145941],{"style":128776,"src":145942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[30,145944,145946],{"id":145945},"_2051-布局原理","20.5.1 布局原理",[274,145948,145949],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[4118,145951,145952,145955,145958,145961,145964],{},[1073,145953,145954],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[1073,145956,145957],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[1073,145959,145960],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[1073,145962,145963],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[1073,145965,145966],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[274,145968,145969],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[274,145971,145972],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[19,145974,145976],{"className":128920,"code":145975,"language":128922,"meta":28,"style":28},"\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",[26,145977,145978,145983,145990,146000,146012,146023,146034,146045],{"__ignoreMap":28},[52,145979,145980],{"class":54,"line":55},[52,145981,145982],{"class":332},"\u002F* Flex 弹性布局 *\u002F\n",[52,145984,145985,145988],{"class":54,"line":69},[52,145986,145987],{"class":58},".container",[52,145989,18528],{"class":622},[52,145991,145992,145994,145996,145998],{"class":54,"line":82},[52,145993,130536],{"class":90},[52,145995,54368],{"class":622},[52,145997,54408],{"class":90},[52,145999,4272],{"class":622},[52,146001,146002,146005,146007,146010],{"class":54,"line":97},[52,146003,146004],{"class":90},"  flex-direction",[52,146006,54368],{"class":622},[52,146008,146009],{"class":90},"row",[52,146011,4272],{"class":622},[52,146013,146014,146017,146019,146021],{"class":54,"line":112},[52,146015,146016],{"class":90},"  justify-content",[52,146018,54368],{"class":622},[52,146020,54599],{"class":90},[52,146022,4272],{"class":622},[52,146024,146025,146028,146030,146032],{"class":54,"line":119},[52,146026,146027],{"class":90},"  align-items",[52,146029,54368],{"class":622},[52,146031,54523],{"class":90},[52,146033,4272],{"class":622},[52,146035,146036,146039,146041,146043],{"class":54,"line":130},[52,146037,146038],{"class":90},"  flex-wrap",[52,146040,54368],{"class":622},[52,146042,81538],{"class":90},[52,146044,4272],{"class":622},[52,146046,146047],{"class":54,"line":136},[52,146048,4543],{"class":622},[274,146050,73381],{},[274,146052,146053],{},".form-item .male-label {",[274,146055,146056],{},"   margin-right: 20px;",[274,146058,146059],{},"   display: inline-flex;",[274,146061,146062],{},"   align-items: center;",[274,146064,4058],{},[280,146066],{"style":128776,"src":146067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[280,146069],{"style":128776,"src":146070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[30,146072,146074],{"id":146073},"_2052-常见父项属性","20.5.2 常见父项属性",[1070,146076,146077,146080,146083,146086,146089,146092,146095],{},[1073,146078,146079],{},"flex-direction：设置主轴的方向",[1073,146081,146082],{},"justify-content：设置主轴上的子元素排列方式",[1073,146084,146085],{},"flex-wrap：设置子元素是否换行",[1073,146087,146088],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[1073,146090,146091],{},"align-items：设置侧轴上的子元素排列方式（单行）",[1073,146093,146094],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[1073,146096,146079],{},[280,146098],{"style":128776,"src":146099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[280,146101],{"style":128776,"src":146102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1070,146104,146105],{"start":69},[1073,146106,146082],{},[280,146108],{"style":128776,"src":146109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[274,146111,146112,146115],{},[26,146113,146114],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[274,146117,146118],{},"跟着主轴走",[1070,146120,146121],{"start":82},[1073,146122,146085],{},[280,146124],{"style":128776,"src":146125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[274,146127,146128],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1070,146130,146131],{"start":97},[1073,146132,146088],{},[280,146134],{"style":128776,"src":146135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[274,146137,146138],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[274,146140,146141],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1070,146143,146144],{"start":112},[1073,146145,146091],{},[280,146147],{"style":128776,"src":146148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[274,146150,146151],{},"align-items与align-content之间的区别：",[274,146153,146154],{},"单找items，多找content",[280,146156],{"style":128776,"src":146157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1070,146159,146160],{"start":119},[1073,146161,146094],{},[280,146163],{"style":128776,"src":146164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[30,146166,146168],{"id":146167},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1070,146170,146171],{},[1073,146172,146173],{},[538,146174,146175],{},"flex 属性",[274,146177,146178],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[280,146180],{"style":128776,"src":146181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[274,146183,146184],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[274,146186,146187],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1070,146189,146190],{"start":69},[1073,146191,146192,16751,146195],{},[538,146193,146194],{},"align-self",[538,146196,146197],{},"控制子项自己在侧轴上的排列方式",[280,146199],{"style":128776,"src":146200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[274,146202,146203],{},"单个子盒子在父盒子侧轴上的排列方式",[1070,146205,146206],{"start":82},[1073,146207,146208,146210],{},[538,146209,98225],{}," 属性定义项目的排列顺序",[280,146212],{"style":128776,"src":146213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[30,146215,146217],{"id":146216},"_2054-背景线性渐变","20.5.4 背景线性渐变",[280,146219],{"style":128776,"src":146220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[274,146222,146223],{},"必须要添加浏览器的私有前缀",[30,146225,146227],{"id":146226},"_2055-携程网首页案例","20.5.5 携程网首页案例",[274,146229,146230],{},"学到最重要的知识：",[274,146232,146233],{},"flex处理这样的布局思路",[280,146235],{"style":128776,"src":146236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[19,146238,146240],{"className":128920,"code":146239,"language":128922,"meta":28,"style":28},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[26,146241,146242,146248,146258,146268,146278],{"__ignoreMap":28},[52,146243,146244,146246],{"class":54,"line":55},[52,146245,145987],{"class":58},[52,146247,18528],{"class":622},[52,146249,146250,146252,146254,146256],{"class":54,"line":69},[52,146251,130536],{"class":90},[52,146253,54368],{"class":622},[52,146255,54408],{"class":90},[52,146257,4272],{"class":622},[52,146259,146260,146262,146264,146266],{"class":54,"line":82},[52,146261,146016],{"class":90},[52,146263,54368],{"class":622},[52,146265,54523],{"class":90},[52,146267,4272],{"class":622},[52,146269,146270,146272,146274,146276],{"class":54,"line":97},[52,146271,146027],{"class":90},[52,146273,54368],{"class":622},[52,146275,54523],{"class":90},[52,146277,4272],{"class":622},[52,146279,146280],{"class":54,"line":112},[52,146281,4543],{"class":622},[274,146283,146284],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[274,146286,146287],{},"使用属性选择器",[280,146289],{"style":128776,"src":146290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[274,146292,71818],{},[19,146294,146296],{"className":129667,"code":146295,"language":129669,"meta":28,"style":28},"\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",[26,146297,146298,146303,146317,146322,146342,146347,146366,146371,146390,146395,146414],{"__ignoreMap":28},[52,146299,146300],{"class":54,"line":55},[52,146301,146302],{"class":332},"\u003C!-- 携程网移动端案例结构 -->\n",[52,146304,146305,146307,146309,146311,146313,146315],{"class":54,"line":69},[52,146306,4022],{"class":622},[52,146308,54542],{"class":54231},[52,146310,56416],{"class":58},[52,146312,2099],{"class":622},[52,146314,95251],{"class":62},[52,146316,54238],{"class":622},[52,146318,146319],{"class":54,"line":82},[52,146320,146321],{"class":332},"  \u003C!-- 搜索栏 -->\n",[52,146323,146324,146326,146328,146330,146332,146335,146338,146340],{"class":54,"line":97},[52,146325,55075],{"class":622},[52,146327,54542],{"class":54231},[52,146329,56416],{"class":58},[52,146331,2099],{"class":622},[52,146333,146334],{"class":62},"\"search-index\"",[52,146336,146337],{"class":622},">...\u003C\u002F",[52,146339,54542],{"class":54231},[52,146341,54238],{"class":622},[52,146343,146344],{"class":54,"line":112},[52,146345,146346],{"class":332},"  \u003C!-- 焦点图 -->\n",[52,146348,146349,146351,146353,146355,146357,146360,146362,146364],{"class":54,"line":119},[52,146350,55075],{"class":622},[52,146352,54542],{"class":54231},[52,146354,56416],{"class":58},[52,146356,2099],{"class":622},[52,146358,146359],{"class":62},"\"focus\"",[52,146361,146337],{"class":622},[52,146363,54542],{"class":54231},[52,146365,54238],{"class":622},[52,146367,146368],{"class":54,"line":130},[52,146369,146370],{"class":332},"  \u003C!-- 主导航 -->\n",[52,146372,146373,146375,146377,146379,146381,146384,146386,146388],{"class":54,"line":136},[52,146374,55075],{"class":622},[52,146376,54542],{"class":54231},[52,146378,56416],{"class":58},[52,146380,2099],{"class":622},[52,146382,146383],{"class":62},"\"local-nav\"",[52,146385,146337],{"class":622},[52,146387,54542],{"class":54231},[52,146389,54238],{"class":622},[52,146391,146392],{"class":54,"line":141},[52,146393,146394],{"class":332},"  \u003C!-- 子导航 -->\n",[52,146396,146397,146399,146401,146403,146405,146408,146410,146412],{"class":54,"line":146},[52,146398,55075],{"class":622},[52,146400,54542],{"class":54231},[52,146402,56416],{"class":58},[52,146404,2099],{"class":622},[52,146406,146407],{"class":62},"\"nav-common\"",[52,146409,146337],{"class":622},[52,146411,54542],{"class":54231},[52,146413,54238],{"class":622},[52,146415,146416,146418,146420],{"class":54,"line":152},[52,146417,54716],{"class":622},[52,146419,54542],{"class":54231},[52,146421,54238],{"class":622},[274,146423,73381],{},[19,146425,146426],{"className":128920,"code":139372,"language":128922,"meta":28,"style":28},[26,146427,146428,146442,146458],{"__ignoreMap":28},[52,146429,146430,146432,146434,146436,146438,146440],{"class":54,"line":55},[52,146431,56751],{"class":54231},[52,146433,4002],{"class":622},[52,146435,106027],{"class":58},[52,146437,2099],{"class":160},[52,146439,65629],{"class":62},[52,146441,139389],{"class":622},[52,146443,146444,146446,146448,146450,146452,146454,146456],{"class":54,"line":69},[52,146445,73824],{"class":90},[52,146447,54368],{"class":622},[52,146449,3332],{"class":90},[52,146451,54423],{"class":160},[52,146453,54452],{"class":90},[52,146455,132500],{"class":90},[52,146457,4272],{"class":622},[52,146459,146460],{"class":54,"line":82},[52,146461,4543],{"class":622},[274,146463,146464],{},"总代码和效果展示：",[280,146466],{"style":128776,"src":146467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[274,146469,71818],{},[19,146471,146472],{"className":129667,"code":146295,"language":129669,"meta":28,"style":28},[26,146473,146474,146478,146492,146496,146514,146518,146536,146540,146558,146562,146580],{"__ignoreMap":28},[52,146475,146476],{"class":54,"line":55},[52,146477,146302],{"class":332},[52,146479,146480,146482,146484,146486,146488,146490],{"class":54,"line":69},[52,146481,4022],{"class":622},[52,146483,54542],{"class":54231},[52,146485,56416],{"class":58},[52,146487,2099],{"class":622},[52,146489,95251],{"class":62},[52,146491,54238],{"class":622},[52,146493,146494],{"class":54,"line":82},[52,146495,146321],{"class":332},[52,146497,146498,146500,146502,146504,146506,146508,146510,146512],{"class":54,"line":97},[52,146499,55075],{"class":622},[52,146501,54542],{"class":54231},[52,146503,56416],{"class":58},[52,146505,2099],{"class":622},[52,146507,146334],{"class":62},[52,146509,146337],{"class":622},[52,146511,54542],{"class":54231},[52,146513,54238],{"class":622},[52,146515,146516],{"class":54,"line":112},[52,146517,146346],{"class":332},[52,146519,146520,146522,146524,146526,146528,146530,146532,146534],{"class":54,"line":119},[52,146521,55075],{"class":622},[52,146523,54542],{"class":54231},[52,146525,56416],{"class":58},[52,146527,2099],{"class":622},[52,146529,146359],{"class":62},[52,146531,146337],{"class":622},[52,146533,54542],{"class":54231},[52,146535,54238],{"class":622},[52,146537,146538],{"class":54,"line":130},[52,146539,146370],{"class":332},[52,146541,146542,146544,146546,146548,146550,146552,146554,146556],{"class":54,"line":136},[52,146543,55075],{"class":622},[52,146545,54542],{"class":54231},[52,146547,56416],{"class":58},[52,146549,2099],{"class":622},[52,146551,146383],{"class":62},[52,146553,146337],{"class":622},[52,146555,54542],{"class":54231},[52,146557,54238],{"class":622},[52,146559,146560],{"class":54,"line":141},[52,146561,146394],{"class":332},[52,146563,146564,146566,146568,146570,146572,146574,146576,146578],{"class":54,"line":146},[52,146565,55075],{"class":622},[52,146567,54542],{"class":54231},[52,146569,56416],{"class":58},[52,146571,2099],{"class":622},[52,146573,146407],{"class":62},[52,146575,146337],{"class":622},[52,146577,54542],{"class":54231},[52,146579,54238],{"class":622},[52,146581,146582,146584,146586],{"class":54,"line":152},[52,146583,54716],{"class":622},[52,146585,54542],{"class":54231},[52,146587,54238],{"class":622},[274,146589,73381],{},[19,146591,146592],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,146593,146594,146598,146612,146616],{"__ignoreMap":28},[52,146595,146596],{"class":54,"line":55},[52,146597,133031],{"class":332},[52,146599,146600,146602,146604,146606,146608,146610],{"class":54,"line":69},[52,146601,4022],{"class":622},[52,146603,54542],{"class":54231},[52,146605,56416],{"class":58},[52,146607,2099],{"class":622},[52,146609,133044],{"class":62},[52,146611,54238],{"class":622},[52,146613,146614],{"class":54,"line":82},[52,146615,133051],{"class":622},[52,146617,146618,146620,146622],{"class":54,"line":97},[52,146619,54716],{"class":622},[52,146621,54542],{"class":54231},[52,146623,54238],{"class":622},[3015,146625,140321],{},{"title":28,"searchDepth":69,"depth":69,"links":146627},[146628,146629,146633,146634,146635],{"id":145772,"depth":69,"text":145773},{"id":145804,"depth":69,"text":145805,"children":146630},[146631,146632],{"id":145808,"depth":82,"text":145809},{"id":145825,"depth":82,"text":145826},{"id":145844,"depth":69,"text":145845},{"id":145851,"depth":69,"text":145852},{"id":145938,"depth":69,"text":145939,"children":146636},[146637,146638,146639,146640,146641],{"id":145945,"depth":82,"text":145946},{"id":146073,"depth":82,"text":146074},{"id":146167,"depth":82,"text":146168},{"id":146216,"depth":82,"text":146217},{"id":146226,"depth":82,"text":146227},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145764,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146648,"title":146649,"body":146650,"description":3046,"extension":3047,"meta":147877,"navigation":115,"path":147878,"seo":147879,"stem":147880,"__hash__":147881},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146651,"toc":147855},[146652,146655,146659,146663,146666,146669,146673,146678,146681,146684,146687,146690,146693,146750,146753,146758,146761,146764,146768,146779,146783,146786,146789,146796,146801,146805,146808,146814,146817,146821,146824,146831,146834,146837,146844,146847,146854,146857,146860,146867,146870,146873,146875,146892,146896,146899,146902,146905,146909,146912,146915,146918,146921,146924,146927,146929,146932,146935,146997,147000,147110,147117,147123,147126,147129,147133,147136,147140,147145,147148,147155,147158,147164,147169,147172,147175,147178,147181,147184,147187,147190,147193,147249,147251,147277,147281,147284,147287,147290,147298,147301,147304,147308,147364,147367,147371,147377,147388,147391,147396,147399,147402,147408,147411,147414,147417,147420,147423,147426,147429,147432,147457,147463,147466,147469,147472,147475,147478,147481,147486,147489,147492,147495,147503,147506,147513,147516,147519,147521,147545,147547,147550,147553,147556,147559,147562,147565,147568,147602,147605,147608,147642,147649,147652,147655,147658,147661,147664,147667,147674,147677,147680,147683,147686,147693,147696,147699,147706,147709,147712,147716,147719,147722,147725,147728,147731,147734,147737,147740,147742,147766,147768,147792,147796,147807,147810,147813,147816,147819,147822,147825,147828,147831,147834,147837,147840,147843,147846,147849,147852],[10,146653,146649],{"id":146654},"_21-移动端布局实战下篇",[14,146656,146658],{"id":146657},"_211-rem适配布局","21.1 rem适配布局",[30,146660,146662],{"id":146661},"_2111-rem单位","21.1.1 rem单位",[280,146664],{"style":128776,"src":146665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[274,146667,146668],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[30,146670,146672],{"id":146671},"_2112-媒体查询","21.1.2 媒体查询",[1070,146674,146675],{},[1073,146676,146677],{},"参数介绍",[280,146679],{"style":128776,"src":146680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[280,146682],{"style":128776,"src":146683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[280,146685],{"style":128776,"src":146686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[280,146688],{"style":128776,"src":146689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[280,146691],{"style":128776,"src":146692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[19,146694,146696],{"className":128920,"code":146695,"language":128922,"meta":28,"style":28},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[26,146697,146698,146703,146722,146729,146742,146746],{"__ignoreMap":28},[52,146699,146700],{"class":54,"line":55},[52,146701,146702],{"class":332},"\u002F* 媒体查询 *\u002F\n",[52,146704,146705,146708,146710,146713,146715,146718,146720],{"class":54,"line":69},[52,146706,146707],{"class":160},"@media",[52,146709,4629],{"class":622},[52,146711,146712],{"class":90},"max-width",[52,146714,54368],{"class":622},[52,146716,146717],{"class":90},"768",[52,146719,54423],{"class":160},[52,146721,15398],{"class":622},[52,146723,146724,146727],{"class":54,"line":82},[52,146725,146726],{"class":58},"  .container",[52,146728,18528],{"class":622},[52,146730,146731,146734,146736,146738,146740],{"class":54,"line":97},[52,146732,146733],{"class":90},"    width",[52,146735,54368],{"class":622},[52,146737,3424],{"class":90},[52,146739,3441],{"class":160},[52,146741,4272],{"class":622},[52,146743,146744],{"class":54,"line":112},[52,146745,129716],{"class":622},[52,146747,146748],{"class":54,"line":119},[52,146749,4543],{"class":622},[274,146751,146752],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1070,146754,146755],{"start":69},[1073,146756,146757],{},"引入资源",[280,146759],{"style":128776,"src":146760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[274,146762,146763],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[30,146765,146767],{"id":146766},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[4118,146769,146770,146773,146776],{},[1073,146771,146772],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[1073,146774,146775],{},"媒体查询可以根据不同设备宽度来修改样式",[1073,146777,146778],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146780,146782],{"id":146781},"_212-less基础","21.2 Less基础",[274,146784,146785],{},"css冗余度较高，不利于复用，没有很好的计算能力",[274,146787,146788],{},"Less可以解决该问题，它是css的扩展语言",[274,146790,146791,146792],{},"Less中文网址： ",[300,146793,146794],{"href":146794,"rel":146795},"http:\u002F\u002Flesscss.cn\u002F",[304],[274,146797,146798],{},[538,146799,146800],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[30,146802,146804],{"id":146803},"_2121-less安装","21.2.1 less安装",[274,146806,146807],{},"如果使用vscode，则无需进行下方安装步骤",[274,146809,146810],{},[300,146811,146812],{"href":146812,"rel":146813},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[304],[280,146815],{"style":128776,"src":146816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[30,146818,146820],{"id":146819},"_2122-less使用","21.2.2 less使用",[274,146822,146823],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1070,146825,146826],{},[1073,146827,146828],{},[538,146829,146830],{},"Less 变量",[280,146832],{"style":128776,"src":146833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[280,146835],{"style":128776,"src":146836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1070,146838,146839],{"start":69},[1073,146840,146841],{},[538,146842,146843],{},"Less 编译",[280,146845],{"style":128776,"src":146846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1070,146848,146849],{"start":82},[1073,146850,146851],{},[538,146852,146853],{},"Less 嵌套",[280,146855],{"style":128776,"src":146856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[280,146858],{"style":128776,"src":146859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1070,146861,146862],{"start":97},[1073,146863,146864],{},[538,146865,146866],{},"Less 运算",[280,146868],{"style":128776,"src":146869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[274,146871,146872],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[274,146874,3149],{},[4118,146876,146877,146880,146883,146886,146889],{},[1073,146878,146879],{},"乘号（*）和除号（\u002F）的写法",[1073,146881,146882],{},"运算符中间左右有个空格隔开 1px + 5",[1073,146884,146885],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[1073,146887,146888],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[1073,146890,146891],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146893,146895],{"id":146894},"_213-rem-适配方案","21.3 rem 适配方案",[274,146897,146898],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[274,146900,146901],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[280,146903],{"style":128776,"src":146904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[30,146906,146908],{"id":146907},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[274,146910,146911],{},"rem + 媒体查询 + less 技术",[280,146913],{"style":128776,"src":146914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[274,146916,146917],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[274,146919,146920],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[280,146922],{"style":128776,"src":146923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[274,146925,146926],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[274,146928,17589],{},[280,146930],{"style":128776,"src":146931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[274,146933,146934],{},"index.html:",[19,146936,146938],{"className":128920,"code":146937,"language":128922,"meta":28,"style":28},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[26,146939,146940,146945,146951,146967,146971,146977,146993],{"__ignoreMap":28},[52,146941,146942],{"class":54,"line":55},[52,146943,146944],{"class":332},"\u002F* rem 适配方案 *\u002F\n",[52,146946,146947,146949],{"class":54,"line":69},[52,146948,53566],{"class":54231},[52,146950,18528],{"class":622},[52,146952,146953,146955,146957,146960,146962,146964],{"class":54,"line":82},[52,146954,73554],{"class":90},[52,146956,54368],{"class":622},[52,146958,146959],{"class":90},"62.5",[52,146961,3441],{"class":160},[52,146963,132783],{"class":622},[52,146965,146966],{"class":332},"\u002F* 1rem = 10px *\u002F\n",[52,146968,146969],{"class":54,"line":97},[52,146970,4543],{"class":622},[52,146972,146973,146975],{"class":54,"line":112},[52,146974,132768],{"class":58},[52,146976,18528],{"class":622},[52,146978,146979,146981,146983,146985,146988,146990],{"class":54,"line":119},[52,146980,73496],{"class":90},[52,146982,54368],{"class":622},[52,146984,3559],{"class":90},[52,146986,146987],{"class":160},"rem",[52,146989,132783],{"class":622},[52,146991,146992],{"class":332},"\u002F* 100px *\u002F\n",[52,146994,146995],{"class":54,"line":130},[52,146996,4543],{"class":622},[274,146998,146999],{},"common.less",[19,147001,147003],{"className":128920,"code":147002,"language":128922,"meta":28,"style":28},"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",[26,147004,147005,147011,147026,147030,147036,147050,147054,147058,147062,147068,147082,147086,147092,147106],{"__ignoreMap":28},[52,147006,147007,147009],{"class":54,"line":55},[52,147008,53566],{"class":54231},[52,147010,18528],{"class":622},[52,147012,147013,147015,147017,147019,147021,147023],{"class":54,"line":69},[52,147014,73554],{"class":90},[52,147016,54368],{"class":622},[52,147018,146959],{"class":90},[52,147020,3441],{"class":160},[52,147022,29012],{"class":622},[52,147024,147025],{"class":332},"\u002F* 10px *\u002F\n",[52,147027,147028],{"class":54,"line":82},[52,147029,4543],{"class":622},[52,147031,147032,147034],{"class":54,"line":97},[52,147033,54542],{"class":54231},[52,147035,18528],{"class":622},[52,147037,147038,147040,147042,147044,147046,147048],{"class":54,"line":112},[52,147039,73496],{"class":90},[52,147041,54368],{"class":622},[52,147043,3559],{"class":90},[52,147045,146987],{"class":160},[52,147047,29012],{"class":622},[52,147049,146992],{"class":332},[52,147051,147052],{"class":54,"line":119},[52,147053,4543],{"class":622},[52,147055,147056],{"class":54,"line":130},[52,147057,138381],{"class":622},[52,147059,147060],{"class":54,"line":136},[52,147061,146944],{"class":332},[52,147063,147064,147066],{"class":54,"line":141},[52,147065,53566],{"class":54231},[52,147067,18528],{"class":622},[52,147069,147070,147072,147074,147076,147078,147080],{"class":54,"line":146},[52,147071,73554],{"class":90},[52,147073,54368],{"class":622},[52,147075,146959],{"class":90},[52,147077,3441],{"class":160},[52,147079,132783],{"class":622},[52,147081,146966],{"class":332},[52,147083,147084],{"class":54,"line":152},[52,147085,4543],{"class":622},[52,147087,147088,147090],{"class":54,"line":157},[52,147089,132768],{"class":58},[52,147091,18528],{"class":622},[52,147093,147094,147096,147098,147100,147102,147104],{"class":54,"line":173},[52,147095,73496],{"class":90},[52,147097,54368],{"class":622},[52,147099,3559],{"class":90},[52,147101,146987],{"class":160},[52,147103,132783],{"class":622},[52,147105,146992],{"class":332},[52,147107,147108],{"class":54,"line":178},[52,147109,4543],{"class":622},[274,147111,147112,147113,147116],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[1605,147114,147115],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[19,147118,147121],{"className":147119,"code":147120,"language":24},[22],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[26,147122,147120],{"__ignoreMap":28},[274,147124,147125],{},"less保存时会自动变成.css文件",[274,147127,147128],{},"好好搞懂上述代码写法",[30,147130,147132],{"id":147131},"_2132-样式导入样式","21.3.2 样式导入样式",[280,147134],{"style":128776,"src":147135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[30,147137,147139],{"id":147138},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1070,147141,147142],{},[1073,147143,147144],{},"准备工作",[280,147146],{"style":128776,"src":147147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[274,147149,147150,147151],{},"github地址：",[300,147152,147153],{"href":147153,"rel":147154},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[304],[274,147156,147157],{},"下载之后，将index.js文件拖到项目中就可以了",[274,147159,147160,147161],{},"js文件引入到index.html中使用的是",[26,147162,147163],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1070,147165,147166],{"start":69},[1073,147167,147168],{},"vscode插件",[280,147170],{"style":128776,"src":147171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[274,147173,147174],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[274,147176,147177],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[280,147179],{"style":128776,"src":147180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[274,147182,147183],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[280,147185],{"style":128776,"src":147186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[274,147188,147189],{},"修改成75就可以，alt+z为快捷键",[274,147191,147192],{},"index.css：",[19,147194,147195],{"className":128920,"code":146937,"language":128922,"meta":28,"style":28},[26,147196,147197,147201,147207,147221,147225,147231,147245],{"__ignoreMap":28},[52,147198,147199],{"class":54,"line":55},[52,147200,146944],{"class":332},[52,147202,147203,147205],{"class":54,"line":69},[52,147204,53566],{"class":54231},[52,147206,18528],{"class":622},[52,147208,147209,147211,147213,147215,147217,147219],{"class":54,"line":82},[52,147210,73554],{"class":90},[52,147212,54368],{"class":622},[52,147214,146959],{"class":90},[52,147216,3441],{"class":160},[52,147218,132783],{"class":622},[52,147220,146966],{"class":332},[52,147222,147223],{"class":54,"line":97},[52,147224,4543],{"class":622},[52,147226,147227,147229],{"class":54,"line":112},[52,147228,132768],{"class":58},[52,147230,18528],{"class":622},[52,147232,147233,147235,147237,147239,147241,147243],{"class":54,"line":119},[52,147234,73496],{"class":90},[52,147236,54368],{"class":622},[52,147238,3559],{"class":90},[52,147240,146987],{"class":160},[52,147242,132783],{"class":622},[52,147244,146992],{"class":332},[52,147246,147247],{"class":54,"line":130},[52,147248,4543],{"class":622},[274,147250,146934],{},[19,147252,147253],{"className":128920,"code":129324,"language":128922,"meta":28,"style":28},[26,147254,147255,147261,147273],{"__ignoreMap":28},[52,147256,147257,147259],{"class":54,"line":55},[52,147258,54731],{"class":54231},[52,147260,18528],{"class":622},[52,147262,147263,147265,147267,147269,147271],{"class":54,"line":69},[52,147264,73554],{"class":90},[52,147266,54368],{"class":622},[52,147268,3713],{"class":90},[52,147270,54423],{"class":160},[52,147272,4272],{"class":622},[52,147274,147275],{"class":54,"line":82},[52,147276,4543],{"class":622},[14,147278,147280],{"id":147279},"_214-响应式开发","21.4 响应式开发",[274,147282,147283],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[280,147285],{"style":128776,"src":147286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[274,147288,147289],{},"做法：",[4118,147291,147292,147295],{},[1073,147293,147294],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[1073,147296,147297],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[280,147299],{"style":128776,"src":147300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[274,147302,147303],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[30,147305,147307],{"id":147306},"_2141-简单代码示范","21.4.1 简单代码示范",[19,147309,147310],{"className":128920,"code":146937,"language":128922,"meta":28,"style":28},[26,147311,147312,147316,147322,147336,147340,147346,147360],{"__ignoreMap":28},[52,147313,147314],{"class":54,"line":55},[52,147315,146944],{"class":332},[52,147317,147318,147320],{"class":54,"line":69},[52,147319,53566],{"class":54231},[52,147321,18528],{"class":622},[52,147323,147324,147326,147328,147330,147332,147334],{"class":54,"line":82},[52,147325,73554],{"class":90},[52,147327,54368],{"class":622},[52,147329,146959],{"class":90},[52,147331,3441],{"class":160},[52,147333,132783],{"class":622},[52,147335,146966],{"class":332},[52,147337,147338],{"class":54,"line":97},[52,147339,4543],{"class":622},[52,147341,147342,147344],{"class":54,"line":112},[52,147343,132768],{"class":58},[52,147345,18528],{"class":622},[52,147347,147348,147350,147352,147354,147356,147358],{"class":54,"line":119},[52,147349,73496],{"class":90},[52,147351,54368],{"class":622},[52,147353,3559],{"class":90},[52,147355,146987],{"class":160},[52,147357,132783],{"class":622},[52,147359,146992],{"class":332},[52,147361,147362],{"class":54,"line":130},[52,147363,4543],{"class":622},[274,147365,147366],{},"父盒子一般命名为container",[30,147368,147370],{"id":147369},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[274,147372,147373,147374],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[538,147375,147376],{},"使得 Web 开发更加快捷",[4118,147378,147379],{},[1073,147380,147381,147382],{},"官网：",[538,147383,147384],{},[300,147385,147386],{"href":147386,"rel":147387},"http:\u002F\u002Fgetbootstrap.com\u002F",[304],[274,147389,147390],{},"可以直接去官网拿现成的东西",[1070,147392,147393],{},[1073,147394,147395],{},"Bootstrap的使用",[274,147397,147398],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[274,147400,147401],{},"Bootstrap 使用四步曲：",[274,147403,147404,147407],{},[538,147405,147406],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[280,147409],{"style":128776,"src":147410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[274,147412,147413],{},"打开Bootstrap官网，然后下载",[280,147415],{"style":128776,"src":147416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[280,147418],{"style":128776,"src":147419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[274,147421,147422],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[274,147424,147425],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[274,147427,147428],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[280,147430],{"style":128776,"src":147431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[19,147433,147435],{"className":128920,"code":147434,"language":128922,"meta":28,"style":28},".center {\n  color: red;\n}\n",[26,147436,147437,147443,147453],{"__ignoreMap":28},[52,147438,147439,147441],{"class":54,"line":55},[52,147440,129211],{"class":58},[52,147442,18528],{"class":622},[52,147444,147445,147447,147449,147451],{"class":54,"line":69},[52,147446,73833],{"class":90},[52,147448,54368],{"class":622},[52,147450,60351],{"class":90},[52,147452,4272],{"class":622},[52,147454,147455],{"class":54,"line":82},[52,147456,4543],{"class":622},[274,147458,147459,147462],{},[26,147460,147461],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[280,147464],{"style":128776,"src":147465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[280,147467],{"style":128776,"src":147468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[280,147470],{"style":128776,"src":147471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[274,147473,147474],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[280,147476],{"style":128776,"src":147477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[274,147479,147480],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1070,147482,147483],{"start":69},[1073,147484,147485],{},"布局容器",[280,147487],{"style":128776,"src":147488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[274,147490,147491],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[274,147493,147494],{},"container-fluid用于移动式布局比较方便",[1070,147496,147497],{"start":82},[1073,147498,147499,147500],{},"bootstrap ",[538,147501,147502],{},"栅格系统原理",[280,147504],{"style":128776,"src":147505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1070,147507,147508],{"start":97},[1073,147509,147510],{},[538,147511,147512],{},"栅格选项参数",[280,147514],{"style":128776,"src":147515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[274,147517,147518],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[274,147520,17589],{},[19,147522,147523],{"className":128920,"code":147434,"language":128922,"meta":28,"style":28},[26,147524,147525,147531,147541],{"__ignoreMap":28},[52,147526,147527,147529],{"class":54,"line":55},[52,147528,129211],{"class":58},[52,147530,18528],{"class":622},[52,147532,147533,147535,147537,147539],{"class":54,"line":69},[52,147534,73833],{"class":90},[52,147536,54368],{"class":622},[52,147538,60351],{"class":90},[52,147540,4272],{"class":622},[52,147542,147543],{"class":54,"line":82},[52,147544,4543],{"class":622},[274,147546,137963],{},[280,147548],{"style":128776,"src":147549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[274,147551,147552],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[274,147554,147555],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[274,147557,147558],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[274,147560,147561],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[274,147563,147564],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[274,147566,147567],{},"汇总展示说明：",[19,147569,147570],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,147571,147572,147576,147590,147594],{"__ignoreMap":28},[52,147573,147574],{"class":54,"line":55},[52,147575,133031],{"class":332},[52,147577,147578,147580,147582,147584,147586,147588],{"class":54,"line":69},[52,147579,4022],{"class":622},[52,147581,54542],{"class":54231},[52,147583,56416],{"class":58},[52,147585,2099],{"class":622},[52,147587,133044],{"class":62},[52,147589,54238],{"class":622},[52,147591,147592],{"class":54,"line":82},[52,147593,133051],{"class":622},[52,147595,147596,147598,147600],{"class":54,"line":97},[52,147597,54716],{"class":622},[52,147599,54542],{"class":54231},[52,147601,54238],{"class":622},[280,147603],{"style":128776,"src":147604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[274,147606,147607],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[19,147609,147610],{"className":129667,"code":133024,"language":129669,"meta":28,"style":28},[26,147611,147612,147616,147630,147634],{"__ignoreMap":28},[52,147613,147614],{"class":54,"line":55},[52,147615,133031],{"class":332},[52,147617,147618,147620,147622,147624,147626,147628],{"class":54,"line":69},[52,147619,4022],{"class":622},[52,147621,54542],{"class":54231},[52,147623,56416],{"class":58},[52,147625,2099],{"class":622},[52,147627,133044],{"class":62},[52,147629,54238],{"class":622},[52,147631,147632],{"class":54,"line":82},[52,147633,133051],{"class":622},[52,147635,147636,147638,147640],{"class":54,"line":97},[52,147637,54716],{"class":622},[52,147639,54542],{"class":54231},[52,147641,54238],{"class":622},[1070,147643,147644],{"start":112},[1073,147645,147646],{},[538,147647,147648],{},"列嵌套",[280,147650],{"style":128776,"src":147651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[274,147653,147654],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[274,147656,147657],{},"没加row内部这样：",[280,147659],{"style":128776,"src":147660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[274,147662,147663],{},"加上row之后内部为：",[280,147665],{"style":128776,"src":147666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1070,147668,147669],{"start":119},[1073,147670,147671],{},[538,147672,147673],{},"列偏移",[280,147675],{"style":128776,"src":147676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[274,147678,147679],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[274,147681,147682],{},"要加偏移量，即偏移份数",[274,147684,147685],{},"偏移的份数=12-两个盒子的份数",[1070,147687,147688],{"start":130},[1073,147689,147690],{},[538,147691,147692],{},"列排序",[280,147694],{"style":128776,"src":147695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[274,147697,147698],{},"pull拉左；push推右",[1070,147700,147701],{"start":136},[1073,147702,147703],{},[538,147704,147705],{},"响应式工具",[280,147707],{"style":128776,"src":147708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[274,147710,147711],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[30,147713,147715],{"id":147714},"_2143-响应式小项目","21.4.3 响应式小项目",[274,147717,147718],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[274,147720,147721],{},"ul {",[274,147723,147724],{},"list-style: none;",[274,147726,147727],{},"margin:0;",[274,147729,147730],{},"padding:0; }",[280,147732],{"style":128776,"src":147733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[280,147735],{"style":128776,"src":147736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[274,147738,147739],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[274,147741,71818],{},[19,147743,147744],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,147745,147746,147752,147762],{"__ignoreMap":28},[52,147747,147748,147750],{"class":54,"line":55},[52,147749,132768],{"class":58},[52,147751,18528],{"class":622},[52,147753,147754,147756,147758,147760],{"class":54,"line":69},[52,147755,133400],{"class":90},[52,147757,54368],{"class":622},[52,147759,26688],{"class":90},[52,147761,4272],{"class":622},[52,147763,147764],{"class":54,"line":82},[52,147765,4543],{"class":622},[274,147767,73381],{},[19,147769,147770],{"className":128920,"code":141590,"language":128922,"meta":28,"style":28},[26,147771,147772,147778,147788],{"__ignoreMap":28},[52,147773,147774,147776],{"class":54,"line":55},[52,147775,132768],{"class":58},[52,147777,18528],{"class":622},[52,147779,147780,147782,147784,147786],{"class":54,"line":69},[52,147781,133400],{"class":90},[52,147783,54368],{"class":622},[52,147785,26688],{"class":90},[52,147787,4272],{"class":622},[52,147789,147790],{"class":54,"line":82},[52,147791,4543],{"class":622},[14,147793,147795],{"id":147794},"_215-swiper-插件使用","21.5 swiper 插件使用",[4118,147797,147798,147801,147804],{},[1073,147799,147800],{},"下载需要的css和js文件html页面中 引入相关文件",[1073,147802,147803],{},"官网找到类似案例，复制html结构，css样式 js 语法",[1073,147805,147806],{},"根据需求定制修改模块",[280,147808],{"style":128776,"src":147809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[274,147811,147812],{},"解压后将这两部分放到项目中",[280,147814],{"style":128776,"src":147815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[274,147817,147818],{},"这个插件可以帮助我们实现轮播图效果",[274,147820,147821],{},"用法：",[280,147823],{"style":128776,"src":147824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[274,147826,147827],{},"找到自己喜欢的",[280,147829],{"style":128776,"src":147830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[274,147832,147833],{},"右键，查看网页源代码",[280,147835],{"style":128776,"src":147836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[274,147838,147839],{},"复制人家的结构内容",[274,147841,147842],{},"然后去看API文档：",[280,147844],{"style":128776,"src":147845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[274,147847,147848],{},"可以看看如何修改样式",[274,147850,147851],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[3015,147853,147854],{},"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":28,"searchDepth":69,"depth":69,"links":147856},[147857,147862,147866,147871,147876],{"id":146657,"depth":69,"text":146658,"children":147858},[147859,147860,147861],{"id":146661,"depth":82,"text":146662},{"id":146671,"depth":82,"text":146672},{"id":146766,"depth":82,"text":146767},{"id":146781,"depth":69,"text":146782,"children":147863},[147864,147865],{"id":146803,"depth":82,"text":146804},{"id":146819,"depth":82,"text":146820},{"id":146894,"depth":69,"text":146895,"children":147867},[147868,147869,147870],{"id":146907,"depth":82,"text":146908},{"id":147131,"depth":82,"text":147132},{"id":147138,"depth":82,"text":147139},{"id":147279,"depth":69,"text":147280,"children":147872},[147873,147874,147875],{"id":147306,"depth":82,"text":147307},{"id":147369,"depth":82,"text":147370},{"id":147714,"depth":82,"text":147715},{"id":147794,"depth":69,"text":147795},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146649,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147883,"title":147884,"body":147885,"description":3046,"extension":3047,"meta":148105,"navigation":115,"path":148106,"seo":148107,"stem":148108,"__hash__":148109},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147886,"toc":148101},[147887,147890,147894,147897,147912,147917,147920,147925,147960,147965,147977,147982,147995,148000,148017,148022,148042,148047,148065,148068,148071,148074,148077,148081,148084,148087,148090,148093,148096,148099],[10,147888,147884],{"id":147889},"_22-代码提交与新型相对单位",[14,147891,147893],{"id":147892},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[274,147895,147896],{},"法1：",[1070,147898,147899,147906,147909],{},[1073,147900,147901,147902],{},"登录网站注册：",[300,147903,147904],{"href":147904,"rel":147905},"https:\u002F\u002Fgitee.com\u002F",[304],[1073,147907,147908],{},"码云创建新的仓库",[1073,147910,147911],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[4118,147913,147914],{},[1073,147915,147916],{},"在网站根目录右键-- Git Bash Here",[280,147918],{"style":128776,"src":147919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[4118,147921,147922],{},[1073,147923,147924],{},"如果是第一次利用git提交，请配置好全局选项",[19,147926,147928],{"className":323,"code":147927,"language":325,"meta":28,"style":28},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[26,147929,147930,147946],{"__ignoreMap":28},[52,147931,147932,147935,147937,147940,147943],{"class":54,"line":55},[52,147933,147934],{"class":58},"git",[52,147936,1302],{"class":62},[52,147938,147939],{"class":90}," --global",[52,147941,147942],{"class":62}," user.name",[52,147944,147945],{"class":62}," \"你的名字\"\n",[52,147947,147948,147950,147952,147954,147957],{"class":54,"line":69},[52,147949,147934],{"class":58},[52,147951,1302],{"class":62},[52,147953,147939],{"class":90},[52,147955,147956],{"class":62}," user.email",[52,147958,147959],{"class":62}," \"你的邮箱\"\n",[4118,147961,147962],{},[1073,147963,147964],{},"初始化仓库",[19,147966,147968],{"className":323,"code":147967,"language":325,"meta":28,"style":28},"git init\n",[26,147969,147970],{"__ignoreMap":28},[52,147971,147972,147974],{"class":54,"line":55},[52,147973,147934],{"class":58},[52,147975,147976],{"class":62}," init\n",[4118,147978,147979],{},[1073,147980,147981],{},"把本地文件放到暂存区",[19,147983,147985],{"className":323,"code":147984,"language":325,"meta":28,"style":28},"git add .\n",[26,147986,147987],{"__ignoreMap":28},[52,147988,147989,147991,147993],{"class":54,"line":55},[52,147990,147934],{"class":58},[52,147992,2018],{"class":62},[52,147994,31675],{"class":62},[4118,147996,147997],{},[1073,147998,147999],{},"把本地文件放到本地仓库里面",[19,148001,148003],{"className":323,"code":148002,"language":325,"meta":28,"style":28},"git commit -m \"first commit\"\n",[26,148004,148005],{"__ignoreMap":28},[52,148006,148007,148009,148012,148014],{"class":54,"line":55},[52,148008,147934],{"class":58},[52,148010,148011],{"class":62}," commit",[52,148013,1366],{"class":90},[52,148015,148016],{"class":62}," \"first commit\"\n",[4118,148018,148019],{},[1073,148020,148021],{},"链接远程仓库",[19,148023,148025],{"className":323,"code":148024,"language":325,"meta":28,"style":28},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[26,148026,148027],{"__ignoreMap":28},[52,148028,148029,148031,148034,148036,148039],{"class":54,"line":55},[52,148030,147934],{"class":58},[52,148032,148033],{"class":62}," remote",[52,148035,2018],{"class":62},[52,148037,148038],{"class":62}," origin",[52,148040,148041],{"class":62}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[4118,148043,148044],{},[1073,148045,148046],{},"把本地仓库的文件推送到远程仓库 push",[19,148048,148050],{"className":323,"code":148049,"language":325,"meta":28,"style":28},"git push -u origin master\n",[26,148051,148052],{"__ignoreMap":28},[52,148053,148054,148056,148058,148060,148062],{"class":54,"line":55},[52,148055,147934],{"class":58},[52,148057,31950],{"class":62},[52,148059,31224],{"class":90},[52,148061,148038],{"class":62},[52,148063,148064],{"class":62}," master\n",[280,148066],{"style":128776,"src":148067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[274,148069,148070],{},"上方方法暂未实现，后边学完git后在整",[274,148072,148073],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[280,148075],{"style":128776,"src":148076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,148078,148080],{"id":148079},"_222-新型相对单位","22.2 新型相对单位",[280,148082],{"style":128776,"src":148083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[280,148085],{"style":128776,"src":148086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[274,148088,148089],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[274,148091,148092],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[280,148094],{"style":128776,"src":148095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[274,148097,148098],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[3015,148100,26908],{},{"title":28,"searchDepth":69,"depth":69,"links":148102},[148103,148104],{"id":147892,"depth":69,"text":147893},{"id":148079,"depth":69,"text":148080},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147884,"description":3046},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":148111,"title":148112,"body":148113,"description":148117,"extension":3047,"meta":148118,"navigation":115,"path":148119,"seo":148120,"stem":148121,"__hash__":148122},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":148114,"toc":148115},[],{"title":28,"searchDepth":69,"depth":69,"links":148116},[],"自己正经开始学编程的第一门语言！",{"category":95767},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":148112,"description":148117},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":148124,"title":148125,"body":148126,"description":3046,"extension":3047,"meta":149273,"navigation":115,"path":149274,"seo":149275,"stem":149276,"__hash__":149277},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":148127,"toc":149249},[148128,148131,148135,148138,148141,148166,148169,148175,148179,148182,148209,148212,148252,148255,148267,148270,148276,148280,148284,148311,148328,148335,148339,148342,148368,148371,148375,148378,148418,148421,148438,148444,148448,148453,148497,148500,148518,148521,148589,148593,148600,148603,148618,148621,148630,148633,148644,148647,148656,148659,148676,148679,148694,148698,148702,148705,148707,148727,148731,148734,148737,148748,148751,148757,148761,148767,148794,148797,148809,148812,148823,148826,148832,148836,148842,148892,148895,148937,148940,148973,148976,149010,149014,149017,149037,149040,149076,149079,149092,149096,149100,149106,149109,149122,149126,149129,149135,149138,149142,149145,149148,149197,149201,149217,149223,149230,149236,149246],[10,148129,148125],{"id":148130},"_1-python环境与第一个程序",[14,148132,148134],{"id":148133},"_11-什么是python","1.1 什么是Python",[274,148136,148137],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[274,148139,148140],{},"理解 Python 时抓住三个关键词：",[1070,148142,148143,148146,148149],{},[1073,148144,148145],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[1073,148147,148148],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[1073,148150,148151,148152,3327,148155,3327,148158,3327,148161,3327,148163,31319],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[26,148153,148154],{},"os",[26,148156,148157],{},"sys",[26,148159,148160],{},"json",[26,148162,60790],{},[26,148164,148165],{},"datetime",[274,148167,148168],{},"Python 程序的运行链路：",[19,148170,148173],{"className":148171,"code":148172,"language":24,"meta":28},[22],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[26,148174,148172],{"__ignoreMap":28},[14,148176,148178],{"id":148177},"_12-python解释器","1.2 Python解释器",[274,148180,148181],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[19,148183,148185],{"className":26774,"code":148184,"language":26776,"meta":28,"style":28},"python --version\npython3 --version\npython\npython3\n",[26,148186,148187,148193,148199,148204],{"__ignoreMap":28},[52,148188,148189,148191],{"class":54,"line":55},[52,148190,33312],{"class":58},[52,148192,1285],{"class":90},[52,148194,148195,148197],{"class":54,"line":69},[52,148196,1363],{"class":58},[52,148198,1285],{"class":90},[52,148200,148201],{"class":54,"line":82},[52,148202,148203],{"class":58},"python\n",[52,148205,148206],{"class":54,"line":97},[52,148207,148208],{"class":58},"python3\n",[274,148210,148211],{},"进入交互模式后，可以直接输入表达式：",[19,148213,148215],{"className":33310,"code":148214,"language":33312,"meta":28,"style":28},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[26,148216,148217,148228,148233,148247],{"__ignoreMap":28},[52,148218,148219,148222,148224,148226],{"class":54,"line":55},[52,148220,148221],{"class":160},">>>",[52,148223,28064],{"class":90},[52,148225,48498],{"class":160},[52,148227,2391],{"class":90},[52,148229,148230],{"class":54,"line":69},[52,148231,148232],{"class":90},"3\n",[52,148234,148235,148237,148240,148242,148245],{"class":54,"line":82},[52,148236,148221],{"class":160},[52,148238,148239],{"class":90}," print",[52,148241,3121],{"class":622},[52,148243,148244],{"class":62},"\"hello python\"",[52,148246,170],{"class":622},[52,148248,148249],{"class":54,"line":97},[52,148250,148251],{"class":622},"hello python\n",[274,148253,148254],{},"退出交互模式：",[19,148256,148258],{"className":33310,"code":148257,"language":33312,"meta":28,"style":28},"exit()\n",[26,148259,148260],{"__ignoreMap":28},[52,148261,148262,148265],{"class":54,"line":55},[52,148263,148264],{"class":90},"exit",[52,148266,4938],{"class":622},[274,148268,148269],{},"或使用快捷键：",[19,148271,148274],{"className":148272,"code":148273,"language":24,"meta":28},[22],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[26,148275,148273],{"__ignoreMap":28},[14,148277,148279],{"id":148278},"_13-安装python","1.3 安装Python",[30,148281,148283],{"id":148282},"_131-windows安装","1.3.1 Windows安装",[1070,148285,148286,148293,148296,148302,148308],{},[1073,148287,148288,148289],{},"打开 Python 官网：",[300,148290,148291],{"href":148291,"rel":148292},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[304],[1073,148294,148295],{},"下载 Windows Installer。",[1073,148297,148298,148299,31319],{},"安装时勾选 ",[26,148300,148301],{},"Add Python to PATH",[1073,148303,148304,148305,31319],{},"点击 ",[26,148306,148307],{},"Install Now",[1073,148309,148310],{},"安装完成后打开命令提示符验证：",[19,148312,148314],{"className":26774,"code":148313,"language":26776,"meta":28,"style":28},"python --version\npip --version\n",[26,148315,148316,148322],{"__ignoreMap":28},[52,148317,148318,148320],{"class":54,"line":55},[52,148319,33312],{"class":58},[52,148321,1285],{"class":90},[52,148323,148324,148326],{"class":54,"line":69},[52,148325,26783],{"class":58},[52,148327,1285],{"class":90},[274,148329,148330,148331,148334],{},"如果提示 ",[26,148332,148333],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[30,148336,148338],{"id":148337},"_132-macos安装","1.3.2 macOS安装",[274,148340,148341],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[19,148343,148345],{"className":26774,"code":148344,"language":26776,"meta":28,"style":28},"brew install python\npython3 --version\npip3 --version\n",[26,148346,148347,148356,148362],{"__ignoreMap":28},[52,148348,148349,148352,148354],{"class":54,"line":55},[52,148350,148351],{"class":58},"brew",[52,148353,76],{"class":62},[52,148355,126686],{"class":62},[52,148357,148358,148360],{"class":54,"line":69},[52,148359,1363],{"class":58},[52,148361,1285],{"class":90},[52,148363,148364,148366],{"class":54,"line":82},[52,148365,1282],{"class":58},[52,148367,1285],{"class":90},[274,148369,148370],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[30,148372,148374],{"id":148373},"_133-linux安装","1.3.3 Linux安装",[274,148376,148377],{},"Ubuntu\u002FDebian：",[19,148379,148381],{"className":26774,"code":148380,"language":26776,"meta":28,"style":28},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[26,148382,148383,148391,148406,148412],{"__ignoreMap":28},[52,148384,148385,148387,148389],{"class":54,"line":55},[52,148386,59],{"class":58},[52,148388,63],{"class":62},[52,148390,66],{"class":62},[52,148392,148393,148395,148397,148399,148401,148403],{"class":54,"line":69},[52,148394,59],{"class":58},[52,148396,63],{"class":62},[52,148398,76],{"class":62},[52,148400,107323],{"class":62},[52,148402,103726],{"class":62},[52,148404,148405],{"class":62}," python3-venv\n",[52,148407,148408,148410],{"class":54,"line":82},[52,148409,1363],{"class":58},[52,148411,1285],{"class":90},[52,148413,148414,148416],{"class":54,"line":97},[52,148415,1282],{"class":58},[52,148417,1285],{"class":90},[274,148419,148420],{},"Fedora：",[19,148422,148424],{"className":26774,"code":148423,"language":26776,"meta":28,"style":28},"sudo dnf install python3 python3-pip\n",[26,148425,148426],{"__ignoreMap":28},[52,148427,148428,148430,148432,148434,148436],{"class":54,"line":55},[52,148429,59],{"class":58},[52,148431,2938],{"class":62},[52,148433,76],{"class":62},[52,148435,107323],{"class":62},[52,148437,1349],{"class":62},[274,148439,148440,148441,148443],{},"Linux 上通常使用 ",[26,148442,1363],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148445,148447],{"id":148446},"_14-pip包管理器","1.4 pip包管理器",[274,148449,148450,148452],{},[26,148451,26783],{}," 用来安装第三方库。",[19,148454,148456],{"className":26774,"code":148455,"language":26776,"meta":28,"style":28},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[26,148457,148458,148467,148476,148484,148490],{"__ignoreMap":28},[52,148459,148460,148462,148464],{"class":54,"line":55},[52,148461,26783],{"class":58},[52,148463,76],{"class":62},[52,148465,148466],{"class":62}," requests\n",[52,148468,148469,148471,148474],{"class":54,"line":69},[52,148470,26783],{"class":58},[52,148472,148473],{"class":62}," uninstall",[52,148475,148466],{"class":62},[52,148477,148478,148480,148482],{"class":54,"line":82},[52,148479,26783],{"class":58},[52,148481,120490],{"class":62},[52,148483,148466],{"class":62},[52,148485,148486,148488],{"class":54,"line":97},[52,148487,26783],{"class":58},[52,148489,528],{"class":62},[52,148491,148492,148494],{"class":54,"line":112},[52,148493,26783],{"class":58},[52,148495,148496],{"class":62}," freeze\n",[274,148498,148499],{},"国内网络较慢时可以临时使用镜像：",[19,148501,148503],{"className":26774,"code":148502,"language":26776,"meta":28,"style":28},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[26,148504,148505],{"__ignoreMap":28},[52,148506,148507,148509,148511,148514,148516],{"class":54,"line":55},[52,148508,26783],{"class":58},[52,148510,76],{"class":62},[52,148512,148513],{"class":62}," requests",[52,148515,1374],{"class":90},[52,148517,1311],{"class":62},[274,148519,148520],{},"常见第三方库：",[3253,148522,148523,148532],{},[3256,148524,148525],{},[3259,148526,148527,148530],{},[3262,148528,148529],{},"库",[3262,148531,105616],{},[3299,148533,148534,148542,148549,148557,148565,148573,148581],{},[3259,148535,148536,148539],{},[3304,148537,148538],{},"requests",[3304,148540,148541],{},"网络请求",[3259,148543,148544,148546],{},[3304,148545,103554],{},[3304,148547,148548],{},"数值计算",[3259,148550,148551,148554],{},[3304,148552,148553],{},"pandas",[3304,148555,148556],{},"表格数据处理",[3259,148558,148559,148562],{},[3304,148560,148561],{},"matplotlib",[3304,148563,148564],{},"绘图",[3259,148566,148567,148570],{},[3304,148568,148569],{},"pyecharts",[3304,148571,148572],{},"ECharts 图表",[3259,148574,148575,148578],{},[3304,148576,148577],{},"flask",[3304,148579,148580],{},"Web 后端",[3259,148582,148583,148586],{},[3304,148584,148585],{},"pytest",[3304,148587,148588],{},"自动化测试",[14,148590,148592],{"id":148591},"_15-虚拟环境","1.5 虚拟环境",[274,148594,148595,148596,148599],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[26,148597,148598],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[274,148601,148602],{},"创建虚拟环境：",[19,148604,148606],{"className":26774,"code":148605,"language":26776,"meta":28,"style":28},"python -m venv .venv\n",[26,148607,148608],{"__ignoreMap":28},[52,148609,148610,148612,148614,148616],{"class":54,"line":55},[52,148611,33312],{"class":58},[52,148613,1366],{"class":90},[52,148615,103811],{"class":62},[52,148617,103814],{"class":62},[274,148619,148620],{},"Windows 激活：",[19,148622,148624],{"className":26774,"code":148623,"language":26776,"meta":28,"style":28},".venv\\Scripts\\activate\n",[26,148625,148626],{"__ignoreMap":28},[52,148627,148628],{"class":54,"line":55},[52,148629,148623],{"class":58},[274,148631,148632],{},"macOS\u002FLinux 激活：",[19,148634,148636],{"className":26774,"code":148635,"language":26776,"meta":28,"style":28},"source .venv\u002Fbin\u002Factivate\n",[26,148637,148638],{"__ignoreMap":28},[52,148639,148640,148642],{"class":54,"line":55},[52,148641,2134],{"class":90},[52,148643,103821],{"class":62},[274,148645,148646],{},"退出虚拟环境：",[19,148648,148650],{"className":26774,"code":148649,"language":26776,"meta":28,"style":28},"deactivate\n",[26,148651,148652],{"__ignoreMap":28},[52,148653,148654],{"class":54,"line":55},[52,148655,148649],{"class":58},[274,148657,148658],{},"保存依赖：",[19,148660,148662],{"className":26774,"code":148661,"language":26776,"meta":28,"style":28},"pip freeze > requirements.txt\n",[26,148663,148664],{"__ignoreMap":28},[52,148665,148666,148668,148671,148673],{"class":54,"line":55},[52,148667,26783],{"class":58},[52,148669,148670],{"class":62}," freeze",[52,148672,29165],{"class":160},[52,148674,148675],{"class":62}," requirements.txt\n",[274,148677,148678],{},"安装依赖：",[19,148680,148682],{"className":26774,"code":148681,"language":26776,"meta":28,"style":28},"pip install -r requirements.txt\n",[26,148683,148684],{"__ignoreMap":28},[52,148685,148686,148688,148690,148692],{"class":54,"line":55},[52,148687,26783],{"class":58},[52,148689,76],{"class":62},[52,148691,1221],{"class":90},[52,148693,148675],{"class":62},[14,148695,148697],{"id":148696},"_16-开发工具","1.6 开发工具",[30,148699,148701],{"id":148700},"_161-pycharm","1.6.1 PyCharm",[274,148703,148704],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[274,148706,124430],{},[1070,148708,148709,148712,148715,148721,148724],{},[1073,148710,148711],{},"New Project：创建项目。",[1073,148713,148714],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[1073,148716,148717,148718,128351],{},"New Python File：创建 ",[26,148719,148720],{},".py",[1073,148722,148723],{},"Run：运行当前文件。",[1073,148725,148726],{},"Debug：断点调试。",[30,148728,148730],{"id":148729},"_162-vs-code","1.6.2 VS Code",[274,148732,148733],{},"VS Code 轻量，适合后续多语言开发。",[274,148735,148736],{},"建议安装插件：",[1070,148738,148739,148742,148745],{},[1073,148740,148741],{},"Python。",[1073,148743,148744],{},"Pylance。",[1073,148746,148747],{},"Jupyter。",[274,148749,148750],{},"选择解释器：",[19,148752,148755],{"className":148753,"code":148754,"language":24,"meta":28},[22],"Ctrl + Shift + P -> Python: Select Interpreter\n",[26,148756,148754],{"__ignoreMap":28},[14,148758,148760],{"id":148759},"_17-第一个python程序","1.7 第一个Python程序",[274,148762,148763,148764,27567],{},"创建文件 ",[26,148765,148766],{},"hello.py",[19,148768,148770],{"className":33310,"code":148769,"language":33312,"meta":28,"style":28},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[26,148771,148772,148783],{"__ignoreMap":28},[52,148773,148774,148776,148778,148781],{"class":54,"line":55},[52,148775,33347],{"class":90},[52,148777,3121],{"class":622},[52,148779,148780],{"class":62},"\"Hello World\"",[52,148782,170],{"class":622},[52,148784,148785,148787,148789,148792],{"class":54,"line":69},[52,148786,33347],{"class":90},[52,148788,3121],{"class":622},[52,148790,148791],{"class":62},"\"你好，Python\"",[52,148793,170],{"class":622},[274,148795,148796],{},"在终端运行：",[19,148798,148800],{"className":26774,"code":148799,"language":26776,"meta":28,"style":28},"python hello.py\n",[26,148801,148802],{"__ignoreMap":28},[52,148803,148804,148806],{"class":54,"line":55},[52,148805,33312],{"class":58},[52,148807,148808],{"class":62}," hello.py\n",[274,148810,148811],{},"或：",[19,148813,148815],{"className":26774,"code":148814,"language":26776,"meta":28,"style":28},"python3 hello.py\n",[26,148816,148817],{"__ignoreMap":28},[52,148818,148819,148821],{"class":54,"line":55},[52,148820,1363],{"class":58},[52,148822,148808],{"class":62},[274,148824,148825],{},"输出：",[19,148827,148830],{"className":148828,"code":148829,"language":24,"meta":28},[22],"Hello World\n你好，Python\n",[26,148831,148829],{"__ignoreMap":28},[14,148833,148835],{"id":148834},"_18-print函数","1.8 print函数",[274,148837,148838,148841],{},[26,148839,148840],{},"print()"," 用来输出内容。",[19,148843,148845],{"className":33310,"code":148844,"language":33312,"meta":28,"style":28},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[26,148846,148847,148857,148867,148877],{"__ignoreMap":28},[52,148848,148849,148851,148853,148855],{"class":54,"line":55},[52,148850,33347],{"class":90},[52,148852,3121],{"class":622},[52,148854,8800],{"class":62},[52,148856,170],{"class":622},[52,148858,148859,148861,148863,148865],{"class":54,"line":69},[52,148860,33347],{"class":90},[52,148862,3121],{"class":622},[52,148864,3424],{"class":90},[52,148866,170],{"class":622},[52,148868,148869,148871,148873,148875],{"class":54,"line":82},[52,148870,33347],{"class":90},[52,148872,3121],{"class":622},[52,148874,3167],{"class":90},[52,148876,170],{"class":622},[52,148878,148879,148881,148883,148886,148888,148890],{"class":54,"line":97},[52,148880,33347],{"class":90},[52,148882,3121],{"class":622},[52,148884,148885],{"class":62},"\"年龄:\"",[52,148887,15391],{"class":622},[52,148889,3762],{"class":90},[52,148891,170],{"class":622},[274,148893,148894],{},"多个内容用逗号隔开，默认中间加空格：",[19,148896,148898],{"className":33310,"code":148897,"language":33312,"meta":28,"style":28},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[26,148899,148900,148910,148920],{"__ignoreMap":28},[52,148901,148902,148905,148907],{"class":54,"line":55},[52,148903,148904],{"class":622},"name ",[52,148906,2099],{"class":160},[52,148908,148909],{"class":62}," \"张三\"\n",[52,148911,148912,148915,148917],{"class":54,"line":69},[52,148913,148914],{"class":622},"age ",[52,148916,2099],{"class":160},[52,148918,148919],{"class":90}," 18\n",[52,148921,148922,148924,148926,148929,148932,148934],{"class":54,"line":82},[52,148923,33347],{"class":90},[52,148925,3121],{"class":622},[52,148927,148928],{"class":62},"\"姓名:\"",[52,148930,148931],{"class":622},", name, ",[52,148933,148885],{"class":62},[52,148935,148936],{"class":622},", age)\n",[274,148938,148939],{},"修改分隔符：",[19,148941,148943],{"className":33310,"code":148942,"language":33312,"meta":28,"style":28},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[26,148944,148945],{"__ignoreMap":28},[52,148946,148947,148949,148951,148954,148956,148958,148960,148962,148964,148967,148969,148971],{"class":54,"line":55},[52,148948,33347],{"class":90},[52,148950,3121],{"class":622},[52,148952,148953],{"class":62},"\"2024\"",[52,148955,15391],{"class":622},[52,148957,57246],{"class":62},[52,148959,15391],{"class":622},[52,148961,57246],{"class":62},[52,148963,15391],{"class":622},[52,148965,148966],{"class":8172},"sep",[52,148968,2099],{"class":160},[52,148970,35415],{"class":62},[52,148972,170],{"class":622},[274,148974,148975],{},"修改结尾符：",[19,148977,148979],{"className":33310,"code":148978,"language":33312,"meta":28,"style":28},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[26,148980,148981,148999],{"__ignoreMap":28},[52,148982,148983,148985,148987,148989,148991,148993,148995,148997],{"class":54,"line":55},[52,148984,33347],{"class":90},[52,148986,3121],{"class":622},[52,148988,8800],{"class":62},[52,148990,15391],{"class":622},[52,148992,48733],{"class":8172},[52,148994,2099],{"class":160},[52,148996,7318],{"class":62},[52,148998,170],{"class":622},[52,149000,149001,149003,149005,149008],{"class":54,"line":69},[52,149002,33347],{"class":90},[52,149004,3121],{"class":622},[52,149006,149007],{"class":62},"\"python\"",[52,149009,170],{"class":622},[14,149011,149013],{"id":149012},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[274,149015,149016],{},"交互运行适合临时验证：",[19,149018,149020],{"className":33310,"code":149019,"language":33312,"meta":28,"style":28},">>> 10 * 3\n30\n",[26,149021,149022,149032],{"__ignoreMap":28},[52,149023,149024,149026,149028,149030],{"class":54,"line":55},[52,149025,148221],{"class":160},[52,149027,5000],{"class":90},[52,149029,9474],{"class":160},[52,149031,1629],{"class":90},[52,149033,149034],{"class":54,"line":69},[52,149035,149036],{"class":90},"30\n",[274,149038,149039],{},"脚本运行适合保存程序：",[19,149041,149043],{"className":33310,"code":149042,"language":33312,"meta":28,"style":28},"price = 8\ncount = 5\nprint(price * count)\n",[26,149044,149045,149055,149064],{"__ignoreMap":28},[52,149046,149047,149050,149052],{"class":54,"line":55},[52,149048,149049],{"class":622},"price ",[52,149051,2099],{"class":160},[52,149053,149054],{"class":90}," 8\n",[52,149056,149057,149060,149062],{"class":54,"line":69},[52,149058,149059],{"class":622},"count ",[52,149061,2099],{"class":160},[52,149063,57357],{"class":90},[52,149065,149066,149068,149071,149073],{"class":54,"line":82},[52,149067,33347],{"class":90},[52,149069,149070],{"class":622},"(price ",[52,149072,1095],{"class":160},[52,149074,149075],{"class":622}," count)\n",[274,149077,149078],{},"实际学习中推荐：",[1070,149080,149081,149084,149089],{},[1073,149082,149083],{},"临时试一个语法，用交互模式。",[1073,149085,149086,149087,128351],{},"写完整练习，用 ",[26,149088,148720],{},[1073,149090,149091],{},"写项目，用独立目录和虚拟环境。",[14,149093,149095],{"id":149094},"_110-常见错误","1.10 常见错误",[30,149097,149099],{"id":149098},"_1101-命令找不到","1.10.1 命令找不到",[19,149101,149104],{"className":149102,"code":149103,"language":24,"meta":28},[22],"python: command not found\n",[26,149105,149103],{"__ignoreMap":28},[274,149107,149108],{},"原因：",[1070,149110,149111,149114,149117],{},[1073,149112,149113],{},"没安装 Python。",[1073,149115,149116],{},"PATH 没配置。",[1073,149118,149119,149120,31319],{},"Linux\u002FmacOS 应该使用 ",[26,149121,1363],{},[30,149123,149125],{"id":149124},"_1102-文件名冲突","1.10.2 文件名冲突",[274,149127,149128],{},"不要把文件命名为：",[19,149130,149133],{"className":149131,"code":149132,"language":24,"meta":28},[22],"random.py\njson.py\ntime.py\nrequests.py\n",[26,149134,149132],{"__ignoreMap":28},[274,149136,149137],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[30,149139,149141],{"id":149140},"_1103-中文乱码","1.10.3 中文乱码",[274,149143,149144],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[274,149146,149147],{},"如果读写文件出现乱码，要明确指定编码：",[19,149149,149151],{"className":33310,"code":149150,"language":33312,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[26,149152,149153,149187],{"__ignoreMap":28},[52,149154,149155,149157,149160,149162,149165,149167,149170,149172,149175,149177,149180,149182,149184],{"class":54,"line":55},[52,149156,110753],{"class":160},[52,149158,149159],{"class":90}," open",[52,149161,3121],{"class":622},[52,149163,149164],{"class":62},"\"data.txt\"",[52,149166,15391],{"class":622},[52,149168,149169],{"class":62},"\"r\"",[52,149171,15391],{"class":622},[52,149173,149174],{"class":8172},"encoding",[52,149176,2099],{"class":160},[52,149178,149179],{"class":62},"\"utf-8\"",[52,149181,16670],{"class":622},[52,149183,34315],{"class":160},[52,149185,149186],{"class":622}," f:\n",[52,149188,149189,149192,149194],{"class":54,"line":69},[52,149190,149191],{"class":622},"    content ",[52,149193,2099],{"class":160},[52,149195,149196],{"class":622}," f.read()\n",[14,149198,149200],{"id":149199},"_111-本章练习","1.11 本章练习",[1070,149202,149203,149206,149212],{},[1073,149204,149205],{},"安装 Python，并在终端输出版本号。",[1073,149207,149208,149209,149211],{},"新建 ",[26,149210,148766],{},"，输出自己的姓名、年龄、学习目标。",[1073,149213,107286,149214,149216],{},[26,149215,148840],{}," 输出下面格式：",[19,149218,149221],{"className":149219,"code":149220,"language":24,"meta":28},[22],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[26,149222,149220],{"__ignoreMap":28},[1070,149224,149225],{"start":97},[1073,149226,107286,149227,149229],{},[26,149228,148966],{}," 输出日期：",[19,149231,149234],{"className":149232,"code":149233,"language":24,"meta":28},[22],"2024-10-10\n",[26,149235,149233],{"__ignoreMap":28},[1070,149237,149238],{"start":112},[1073,149239,107286,149240,149242,149243,149245],{},[26,149241,48733],{}," 让两次 ",[26,149244,148840],{}," 输出在同一行。",[3015,149247,149248],{},"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":28,"searchDepth":69,"depth":69,"links":149250},[149251,149252,149253,149258,149259,149260,149264,149265,149266,149267,149272],{"id":148133,"depth":69,"text":148134},{"id":148177,"depth":69,"text":148178},{"id":148278,"depth":69,"text":148279,"children":149254},[149255,149256,149257],{"id":148282,"depth":82,"text":148283},{"id":148337,"depth":82,"text":148338},{"id":148373,"depth":82,"text":148374},{"id":148446,"depth":69,"text":148447},{"id":148591,"depth":69,"text":148592},{"id":148696,"depth":69,"text":148697,"children":149261},[149262,149263],{"id":148700,"depth":82,"text":148701},{"id":148729,"depth":82,"text":148730},{"id":148759,"depth":69,"text":148760},{"id":148834,"depth":69,"text":148835},{"id":149012,"depth":69,"text":149013},{"id":149094,"depth":69,"text":149095,"children":149268},[149269,149270,149271],{"id":149098,"depth":82,"text":149099},{"id":149124,"depth":82,"text":149125},{"id":149140,"depth":82,"text":149141},{"id":149199,"depth":69,"text":149200},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":148125,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149279,"title":149280,"body":149281,"description":3046,"extension":3047,"meta":151685,"navigation":115,"path":151686,"seo":151687,"stem":151688,"__hash__":151689},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149282,"toc":151670},[149283,149286,149290,149293,149296,149313,149316,149358,149361,149365,149368,149371,149408,149411,149445,149448,149540,149544,149558,149561,149588,149591,149595,149698,149705,149708,149725,149729,149736,149925,149928,150001,150005,150008,150092,150095,150127,150131,150335,150338,150342,150348,150450,150453,150709,150713,150716,150719,150733,150735,150921,150925,151287,151293,151297,151300,151424,151427,151606,151609,151613,151646,151650,151667],[10,149284,149280],{"id":149285},"_10-json与pyecharts折线图",[14,149287,149289],{"id":149288},"_101-数据可视化","10.1 数据可视化",[274,149291,149292],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[274,149294,149295],{},"常见图表：",[1070,149297,149298,149301,149304,149307,149310],{},[1073,149299,149300],{},"折线图：看趋势。",[1073,149302,149303],{},"柱状图：看分类对比。",[1073,149305,149306],{},"饼图：看占比。",[1073,149308,149309],{},"地图：看地域分布。",[1073,149311,149312],{},"散点图：看两个变量之间的关系。",[274,149314,149315],{},"Python 可视化常用库：",[3253,149317,149318,149326],{},[3256,149319,149320],{},[3259,149321,149322,149324],{},[3262,149323,148529],{},[3262,149325,26692],{},[3299,149327,149328,149335,149343,149350],{},[3259,149329,149330,149332],{},[3304,149331,148561],{},[3304,149333,149334],{},"基础、经典、可定制",[3259,149336,149337,149340],{},[3304,149338,149339],{},"seaborn",[3304,149341,149342],{},"统计图表更美观",[3259,149344,149345,149347],{},[3304,149346,148569],{},[3304,149348,149349],{},"生成交互式网页图表",[3259,149351,149352,149355],{},[3304,149353,149354],{},"plotly",[3304,149356,149357],{},"交互图表能力强",[274,149359,149360],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149362,149364],{"id":149363},"_102-json回顾","10.2 JSON回顾",[274,149366,149367],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[274,149369,149370],{},"Python 字典：",[19,149372,149374],{"className":33310,"code":149373,"language":33312,"meta":28,"style":28},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[26,149375,149376,149384,149395,149404],{"__ignoreMap":28},[52,149377,149378,149380,149382],{"class":54,"line":55},[52,149379,104578],{"class":622},[52,149381,2099],{"class":160},[52,149383,18528],{"class":622},[52,149385,149386,149389,149391,149393],{"class":54,"line":69},[52,149387,149388],{"class":62},"    \"name\"",[52,149390,54368],{"class":622},[52,149392,72198],{"class":62},[52,149394,34398],{"class":622},[52,149396,149397,149400,149402],{"class":54,"line":82},[52,149398,149399],{"class":62},"    \"value\"",[52,149401,54368],{"class":622},[52,149403,100386],{"class":90},[52,149405,149406],{"class":54,"line":97},[52,149407,4543],{"class":622},[274,149409,149410],{},"JSON 字符串：",[19,149412,149415],{"className":149413,"code":149414,"language":148160,"meta":28,"style":28},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[26,149416,149417,149421,149432,149441],{"__ignoreMap":28},[52,149418,149419],{"class":54,"line":55},[52,149420,4524],{"class":622},[52,149422,149423,149426,149428,149430],{"class":54,"line":69},[52,149424,149425],{"class":90},"  \"name\"",[52,149427,54368],{"class":622},[52,149429,72198],{"class":62},[52,149431,34398],{"class":622},[52,149433,149434,149437,149439],{"class":54,"line":82},[52,149435,149436],{"class":90},"  \"value\"",[52,149438,54368],{"class":622},[52,149440,100386],{"class":90},[52,149442,149443],{"class":54,"line":97},[52,149444,4543],{"class":622},[274,149446,149447],{},"Python 与 JSON 的转换：",[19,149449,149451],{"className":33310,"code":149450,"language":33312,"meta":28,"style":28},"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",[26,149452,149453,149460,149464,149489,149493,149512,149519,149523,149533],{"__ignoreMap":28},[52,149454,149455,149457],{"class":54,"line":55},[52,149456,33324],{"class":160},[52,149458,149459],{"class":622}," json\n",[52,149461,149462],{"class":54,"line":69},[52,149463,116],{"emptyLinePlaceholder":115},[52,149465,149466,149468,149470,149472,149474,149476,149478,149480,149483,149485,149487],{"class":54,"line":82},[52,149467,104578],{"class":622},[52,149469,2099],{"class":160},[52,149471,7407],{"class":622},[52,149473,65609],{"class":62},[52,149475,54368],{"class":622},[52,149477,72198],{"class":62},[52,149479,15391],{"class":622},[52,149481,149482],{"class":62},"\"value\"",[52,149484,54368],{"class":622},[52,149486,3424],{"class":90},[52,149488,4543],{"class":622},[52,149490,149491],{"class":54,"line":97},[52,149492,116],{"emptyLinePlaceholder":115},[52,149494,149495,149498,149500,149503,149506,149508,149510],{"class":54,"line":112},[52,149496,149497],{"class":622},"json_text ",[52,149499,2099],{"class":160},[52,149501,149502],{"class":622}," json.dumps(data, ",[52,149504,149505],{"class":8172},"ensure_ascii",[52,149507,2099],{"class":160},[52,149509,36919],{"class":90},[52,149511,170],{"class":622},[52,149513,149514,149516],{"class":54,"line":119},[52,149515,33347],{"class":90},[52,149517,149518],{"class":622},"(json_text)\n",[52,149520,149521],{"class":54,"line":130},[52,149522,116],{"emptyLinePlaceholder":115},[52,149524,149525,149528,149530],{"class":54,"line":136},[52,149526,149527],{"class":622},"new_data ",[52,149529,2099],{"class":160},[52,149531,149532],{"class":622}," json.loads(json_text)\n",[52,149534,149535,149537],{"class":54,"line":141},[52,149536,33347],{"class":90},[52,149538,149539],{"class":622},"(new_data)\n",[14,149541,149543],{"id":149542},"_103-安装pyecharts","10.3 安装pyecharts",[19,149545,149547],{"className":26774,"code":149546,"language":26776,"meta":28,"style":28},"pip install pyecharts\n",[26,149548,149549],{"__ignoreMap":28},[52,149550,149551,149553,149555],{"class":54,"line":55},[52,149552,26783],{"class":58},[52,149554,76],{"class":62},[52,149556,149557],{"class":62}," pyecharts\n",[274,149559,149560],{},"验证：",[19,149562,149564],{"className":33310,"code":149563,"language":33312,"meta":28,"style":28},"import pyecharts\n\nprint(pyecharts.__version__)\n",[26,149565,149566,149572,149576],{"__ignoreMap":28},[52,149567,149568,149570],{"class":54,"line":55},[52,149569,33324],{"class":160},[52,149571,149557],{"class":622},[52,149573,149574],{"class":54,"line":69},[52,149575,116],{"emptyLinePlaceholder":115},[52,149577,149578,149580,149583,149586],{"class":54,"line":82},[52,149579,33347],{"class":90},[52,149581,149582],{"class":622},"(pyecharts.",[52,149584,149585],{"class":90},"__version__",[52,149587,170],{"class":622},[274,149589,149590],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149592,149594],{"id":149593},"_104-第一个折线图","10.4 第一个折线图",[19,149596,149598],{"className":33310,"code":149597,"language":33312,"meta":28,"style":28},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[26,149599,149600,149612,149616,149626,149656,149688],{"__ignoreMap":28},[52,149601,149602,149604,149607,149609],{"class":54,"line":55},[52,149603,33669],{"class":160},[52,149605,149606],{"class":622}," pyecharts.charts ",[52,149608,33324],{"class":160},[52,149610,149611],{"class":622}," Line\n",[52,149613,149614],{"class":54,"line":69},[52,149615,116],{"emptyLinePlaceholder":115},[52,149617,149618,149621,149623],{"class":54,"line":82},[52,149619,149620],{"class":622},"line ",[52,149622,2099],{"class":160},[52,149624,149625],{"class":622}," Line()\n",[52,149627,149628,149631,149634,149636,149639,149641,149644,149646,149649,149651,149654],{"class":54,"line":97},[52,149629,149630],{"class":622},"line.add_xaxis([",[52,149632,149633],{"class":62},"\"周一\"",[52,149635,15391],{"class":622},[52,149637,149638],{"class":62},"\"周二\"",[52,149640,15391],{"class":622},[52,149642,149643],{"class":62},"\"周三\"",[52,149645,15391],{"class":622},[52,149647,149648],{"class":62},"\"周四\"",[52,149650,15391],{"class":622},[52,149652,149653],{"class":62},"\"周五\"",[52,149655,7616],{"class":622},[52,149657,149658,149661,149664,149666,149668,149670,149672,149674,149676,149678,149681,149683,149686],{"class":54,"line":112},[52,149659,149660],{"class":622},"line.add_yaxis(",[52,149662,149663],{"class":62},"\"销售额\"",[52,149665,80446],{"class":622},[52,149667,3424],{"class":90},[52,149669,15391],{"class":622},[52,149671,3929],{"class":90},[52,149673,15391],{"class":622},[52,149675,3974],{"class":90},[52,149677,15391],{"class":622},[52,149679,149680],{"class":90},"150",[52,149682,15391],{"class":622},[52,149684,149685],{"class":90},"180",[52,149687,7616],{"class":622},[52,149689,149690,149693,149696],{"class":54,"line":119},[52,149691,149692],{"class":622},"line.render(",[52,149694,149695],{"class":62},"\"line.html\"",[52,149697,170],{"class":622},[274,149699,149700,149701,149704],{},"运行后会生成 ",[26,149702,149703],{},"line.html","，用浏览器打开即可看到图表。",[274,149706,149707],{},"核心步骤：",[1070,149709,149710,149713,149716,149719,149722],{},[1073,149711,149712],{},"导入图表类。",[1073,149714,149715],{},"创建图表对象。",[1073,149717,149718],{},"添加 x 轴数据。",[1073,149720,149721],{},"添加 y 轴数据。",[1073,149723,149724],{},"渲染为 HTML。",[14,149726,149728],{"id":149727},"_105-全局配置","10.5 全局配置",[274,149730,149731,149732,149735],{},"常用配置在 ",[26,149733,149734],{},"pyecharts.options"," 中。",[19,149737,149739],{"className":33310,"code":149738,"language":33312,"meta":28,"style":28},"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",[26,149740,149741,149758,149768,149772,149780,149804,149832,149837,149856,149875,149893,149913,149917],{"__ignoreMap":28},[52,149742,149743,149745,149748,149750,149753,149755],{"class":54,"line":55},[52,149744,33669],{"class":160},[52,149746,149747],{"class":622}," pyecharts ",[52,149749,33324],{"class":160},[52,149751,149752],{"class":622}," options ",[52,149754,34315],{"class":160},[52,149756,149757],{"class":622}," opts\n",[52,149759,149760,149762,149764,149766],{"class":54,"line":69},[52,149761,33669],{"class":160},[52,149763,149606],{"class":622},[52,149765,33324],{"class":160},[52,149767,149611],{"class":622},[52,149769,149770],{"class":54,"line":82},[52,149771,116],{"emptyLinePlaceholder":115},[52,149773,149774,149776,149778],{"class":54,"line":97},[52,149775,149620],{"class":622},[52,149777,2099],{"class":160},[52,149779,149625],{"class":622},[52,149781,149782,149784,149786,149788,149790,149792,149794,149796,149798,149800,149802],{"class":54,"line":112},[52,149783,149630],{"class":622},[52,149785,149633],{"class":62},[52,149787,15391],{"class":622},[52,149789,149638],{"class":62},[52,149791,15391],{"class":622},[52,149793,149643],{"class":62},[52,149795,15391],{"class":622},[52,149797,149648],{"class":62},[52,149799,15391],{"class":622},[52,149801,149653],{"class":62},[52,149803,7616],{"class":622},[52,149805,149806,149808,149810,149812,149814,149816,149818,149820,149822,149824,149826,149828,149830],{"class":54,"line":119},[52,149807,149660],{"class":622},[52,149809,149663],{"class":62},[52,149811,80446],{"class":622},[52,149813,3424],{"class":90},[52,149815,15391],{"class":622},[52,149817,3929],{"class":90},[52,149819,15391],{"class":622},[52,149821,3974],{"class":90},[52,149823,15391],{"class":622},[52,149825,149680],{"class":90},[52,149827,15391],{"class":622},[52,149829,149685],{"class":90},[52,149831,7616],{"class":622},[52,149833,149834],{"class":54,"line":130},[52,149835,149836],{"class":622},"line.set_global_opts(\n",[52,149838,149839,149842,149844,149847,149849,149851,149854],{"class":54,"line":136},[52,149840,149841],{"class":8172},"    title_opts",[52,149843,2099],{"class":160},[52,149845,149846],{"class":622},"opts.TitleOpts(",[52,149848,54338],{"class":8172},[52,149850,2099],{"class":160},[52,149852,149853],{"class":62},"\"一周销售额\"",[52,149855,40979],{"class":622},[52,149857,149858,149861,149863,149866,149868,149870,149873],{"class":54,"line":141},[52,149859,149860],{"class":8172},"    xaxis_opts",[52,149862,2099],{"class":160},[52,149864,149865],{"class":622},"opts.AxisOpts(",[52,149867,82738],{"class":8172},[52,149869,2099],{"class":160},[52,149871,149872],{"class":62},"\"日期\"",[52,149874,40979],{"class":622},[52,149876,149877,149880,149882,149884,149886,149888,149891],{"class":54,"line":146},[52,149878,149879],{"class":8172},"    yaxis_opts",[52,149881,2099],{"class":160},[52,149883,149865],{"class":622},[52,149885,82738],{"class":8172},[52,149887,2099],{"class":160},[52,149889,149890],{"class":62},"\"金额\"",[52,149892,40979],{"class":622},[52,149894,149895,149898,149900,149903,149906,149908,149911],{"class":54,"line":152},[52,149896,149897],{"class":8172},"    tooltip_opts",[52,149899,2099],{"class":160},[52,149901,149902],{"class":622},"opts.TooltipOpts(",[52,149904,149905],{"class":8172},"trigger",[52,149907,2099],{"class":160},[52,149909,149910],{"class":62},"\"axis\"",[52,149912,40979],{"class":622},[52,149914,149915],{"class":54,"line":157},[52,149916,170],{"class":622},[52,149918,149919,149921,149923],{"class":54,"line":173},[52,149920,149692],{"class":622},[52,149922,149695],{"class":62},[52,149924,170],{"class":622},[274,149926,149927],{},"常见全局配置：",[3253,149929,149930,149939],{},[3256,149931,149932],{},[3259,149933,149934,149937],{},[3262,149935,149936],{},"配置",[3262,149938,105616],{},[3299,149940,149941,149951,149961,149971,149981,149991],{},[3259,149942,149943,149948],{},[3304,149944,149945],{},[26,149946,149947],{},"TitleOpts",[3304,149949,149950],{},"标题",[3259,149952,149953,149958],{},[3304,149954,149955],{},[26,149956,149957],{},"LegendOpts",[3304,149959,149960],{},"图例",[3259,149962,149963,149968],{},[3304,149964,149965],{},[26,149966,149967],{},"TooltipOpts",[3304,149969,149970],{},"提示框",[3259,149972,149973,149978],{},[3304,149974,149975],{},[26,149976,149977],{},"AxisOpts",[3304,149979,149980],{},"坐标轴",[3259,149982,149983,149988],{},[3304,149984,149985],{},[26,149986,149987],{},"VisualMapOpts",[3304,149989,149990],{},"视觉映射",[3259,149992,149993,149998],{},[3304,149994,149995],{},[26,149996,149997],{},"DataZoomOpts",[3304,149999,150000],{},"区域缩放",[14,150002,150004],{"id":150003},"_106-系列配置","10.6 系列配置",[274,150006,150007],{},"系列配置作用于某一组数据。",[19,150009,150011],{"className":33310,"code":150010,"language":33312,"meta":28,"style":28},"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",[26,150012,150013,150018,150029,150058,150069,150088],{"__ignoreMap":28},[52,150014,150015],{"class":54,"line":55},[52,150016,150017],{"class":622},"line.add_yaxis(\n",[52,150019,150020,150023,150025,150027],{"class":54,"line":69},[52,150021,150022],{"class":8172},"    series_name",[52,150024,2099],{"class":160},[52,150026,149663],{"class":62},[52,150028,34398],{"class":622},[52,150030,150031,150034,150036,150038,150040,150042,150044,150046,150048,150050,150052,150054,150056],{"class":54,"line":82},[52,150032,150033],{"class":8172},"    y_axis",[52,150035,2099],{"class":160},[52,150037,4002],{"class":622},[52,150039,3424],{"class":90},[52,150041,15391],{"class":622},[52,150043,3929],{"class":90},[52,150045,15391],{"class":622},[52,150047,3974],{"class":90},[52,150049,15391],{"class":622},[52,150051,149680],{"class":90},[52,150053,15391],{"class":622},[52,150055,149685],{"class":90},[52,150057,90764],{"class":622},[52,150059,150060,150063,150065,150067],{"class":54,"line":97},[52,150061,150062],{"class":8172},"    is_smooth",[52,150064,2099],{"class":160},[52,150066,34408],{"class":90},[52,150068,34398],{"class":622},[52,150070,150071,150074,150076,150079,150082,150084,150086],{"class":54,"line":112},[52,150072,150073],{"class":8172},"    label_opts",[52,150075,2099],{"class":160},[52,150077,150078],{"class":622},"opts.LabelOpts(",[52,150080,150081],{"class":8172},"is_show",[52,150083,2099],{"class":160},[52,150085,34408],{"class":90},[52,150087,40979],{"class":622},[52,150089,150090],{"class":54,"line":119},[52,150091,170],{"class":622},[274,150093,150094],{},"常用参数：",[1070,150096,150097,150103,150109,150115,150121],{},[1073,150098,150099,150102],{},[26,150100,150101],{},"series_name","：系列名称。",[1073,150104,150105,150108],{},[26,150106,150107],{},"y_axis","：y 轴数据。",[1073,150110,150111,150114],{},[26,150112,150113],{},"is_smooth","：是否平滑曲线。",[1073,150116,150117,150120],{},[26,150118,150119],{},"label_opts","：标签配置。",[1073,150122,150123,150126],{},[26,150124,150125],{},"symbol_size","：标记点大小。",[14,150128,150130],{"id":150129},"_107-多条折线","10.7 多条折线",[19,150132,150134],{"className":33310,"code":150133,"language":33312,"meta":28,"style":28},"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",[26,150135,150136,150150,150160,150164,150193,150197,150205,150210,150248,150285,150289,150306,150322,150326],{"__ignoreMap":28},[52,150137,150138,150140,150142,150144,150146,150148],{"class":54,"line":55},[52,150139,33669],{"class":160},[52,150141,149747],{"class":622},[52,150143,33324],{"class":160},[52,150145,149752],{"class":622},[52,150147,34315],{"class":160},[52,150149,149757],{"class":622},[52,150151,150152,150154,150156,150158],{"class":54,"line":69},[52,150153,33669],{"class":160},[52,150155,149606],{"class":622},[52,150157,33324],{"class":160},[52,150159,149611],{"class":622},[52,150161,150162],{"class":54,"line":82},[52,150163,116],{"emptyLinePlaceholder":115},[52,150165,150166,150169,150171,150173,150175,150177,150179,150181,150183,150185,150187,150189,150191],{"class":54,"line":97},[52,150167,150168],{"class":622},"dates ",[52,150170,2099],{"class":160},[52,150172,55157],{"class":622},[52,150174,149633],{"class":62},[52,150176,15391],{"class":622},[52,150178,149638],{"class":62},[52,150180,15391],{"class":622},[52,150182,149643],{"class":62},[52,150184,15391],{"class":622},[52,150186,149648],{"class":62},[52,150188,15391],{"class":622},[52,150190,149653],{"class":62},[52,150192,36178],{"class":622},[52,150194,150195],{"class":54,"line":112},[52,150196,116],{"emptyLinePlaceholder":115},[52,150198,150199,150201,150203],{"class":54,"line":119},[52,150200,149620],{"class":622},[52,150202,2099],{"class":160},[52,150204,149625],{"class":622},[52,150206,150207],{"class":54,"line":130},[52,150208,150209],{"class":622},"line.add_xaxis(dates)\n",[52,150211,150212,150214,150217,150219,150221,150223,150226,150228,150230,150232,150234,150236,150238,150240,150242,150244,150246],{"class":54,"line":136},[52,150213,149660],{"class":622},[52,150215,150216],{"class":62},"\"线上销售\"",[52,150218,80446],{"class":622},[52,150220,3424],{"class":90},[52,150222,15391],{"class":622},[52,150224,150225],{"class":90},"130",[52,150227,15391],{"class":622},[52,150229,3929],{"class":90},[52,150231,15391],{"class":622},[52,150233,24003],{"class":90},[52,150235,15391],{"class":622},[52,150237,4689],{"class":90},[52,150239,115122],{"class":622},[52,150241,150113],{"class":8172},[52,150243,2099],{"class":160},[52,150245,34408],{"class":90},[52,150247,170],{"class":622},[52,150249,150250,150252,150255,150257,150259,150261,150263,150265,150267,150269,150271,150273,150275,150277,150279,150281,150283],{"class":54,"line":141},[52,150251,149660],{"class":622},[52,150253,150254],{"class":62},"\"线下销售\"",[52,150256,80446],{"class":622},[52,150258,3724],{"class":90},[52,150260,15391],{"class":622},[52,150262,3974],{"class":90},[52,150264,15391],{"class":622},[52,150266,3424],{"class":90},[52,150268,15391],{"class":622},[52,150270,3929],{"class":90},[52,150272,15391],{"class":622},[52,150274,149680],{"class":90},[52,150276,115122],{"class":622},[52,150278,150113],{"class":8172},[52,150280,2099],{"class":160},[52,150282,34408],{"class":90},[52,150284,170],{"class":622},[52,150286,150287],{"class":54,"line":146},[52,150288,149836],{"class":622},[52,150290,150291,150293,150295,150297,150299,150301,150304],{"class":54,"line":152},[52,150292,149841],{"class":8172},[52,150294,2099],{"class":160},[52,150296,149846],{"class":622},[52,150298,54338],{"class":8172},[52,150300,2099],{"class":160},[52,150302,150303],{"class":62},"\"线上线下销售趋势\"",[52,150305,40979],{"class":622},[52,150307,150308,150310,150312,150314,150316,150318,150320],{"class":54,"line":157},[52,150309,149897],{"class":8172},[52,150311,2099],{"class":160},[52,150313,149902],{"class":622},[52,150315,149905],{"class":8172},[52,150317,2099],{"class":160},[52,150319,149910],{"class":62},[52,150321,40979],{"class":622},[52,150323,150324],{"class":54,"line":173},[52,150325,170],{"class":622},[52,150327,150328,150330,150333],{"class":54,"line":178},[52,150329,149692],{"class":622},[52,150331,150332],{"class":62},"\"sales.html\"",[52,150334,170],{"class":622},[274,150336,150337],{},"多条折线适合比较不同指标或不同地区。",[14,150339,150341],{"id":150340},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[274,150343,150344,150345,27567],{},"假设 ",[26,150346,150347],{},"sales.json",[19,150349,150351],{"className":149413,"code":150350,"language":148160,"meta":28,"style":28},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[26,150352,150353,150358,150390,150418,150446],{"__ignoreMap":28},[52,150354,150355],{"class":54,"line":55},[52,150356,150357],{"class":622},"[\n",[52,150359,150360,150363,150366,150368,150370,150372,150375,150377,150379,150381,150384,150386,150388],{"class":54,"line":69},[52,150361,150362],{"class":622},"  {",[52,150364,150365],{"class":90},"\"date\"",[52,150367,54368],{"class":622},[52,150369,149633],{"class":62},[52,150371,15391],{"class":622},[52,150373,150374],{"class":90},"\"online\"",[52,150376,54368],{"class":622},[52,150378,3424],{"class":90},[52,150380,15391],{"class":622},[52,150382,150383],{"class":90},"\"offline\"",[52,150385,54368],{"class":622},[52,150387,3724],{"class":90},[52,150389,7889],{"class":622},[52,150391,150392,150394,150396,150398,150400,150402,150404,150406,150408,150410,150412,150414,150416],{"class":54,"line":82},[52,150393,150362],{"class":622},[52,150395,150365],{"class":90},[52,150397,54368],{"class":622},[52,150399,149638],{"class":62},[52,150401,15391],{"class":622},[52,150403,150374],{"class":90},[52,150405,54368],{"class":622},[52,150407,150225],{"class":90},[52,150409,15391],{"class":622},[52,150411,150383],{"class":90},[52,150413,54368],{"class":622},[52,150415,3974],{"class":90},[52,150417,7889],{"class":622},[52,150419,150420,150422,150424,150426,150428,150430,150432,150434,150436,150438,150440,150442,150444],{"class":54,"line":97},[52,150421,150362],{"class":622},[52,150423,150365],{"class":90},[52,150425,54368],{"class":622},[52,150427,149643],{"class":62},[52,150429,15391],{"class":622},[52,150431,150374],{"class":90},[52,150433,54368],{"class":622},[52,150435,3929],{"class":90},[52,150437,15391],{"class":622},[52,150439,150383],{"class":90},[52,150441,54368],{"class":622},[52,150443,3424],{"class":90},[52,150445,4543],{"class":622},[52,150447,150448],{"class":54,"line":112},[52,150449,36178],{"class":622},[274,150451,150452],{},"读取并绘图：",[19,150454,150456],{"className":33310,"code":150455,"language":33312,"meta":28,"style":28},"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",[26,150457,150458,150464,150478,150488,150492,150524,150537,150541,150549,150558,150567,150571,150583,150592,150601,150610,150614,150622,150626,150643,150660,150664,150681,150697,150701],{"__ignoreMap":28},[52,150459,150460,150462],{"class":54,"line":55},[52,150461,33324],{"class":160},[52,150463,149459],{"class":622},[52,150465,150466,150468,150470,150472,150474,150476],{"class":54,"line":69},[52,150467,33669],{"class":160},[52,150469,149747],{"class":622},[52,150471,33324],{"class":160},[52,150473,149752],{"class":622},[52,150475,34315],{"class":160},[52,150477,149757],{"class":622},[52,150479,150480,150482,150484,150486],{"class":54,"line":82},[52,150481,33669],{"class":160},[52,150483,149606],{"class":622},[52,150485,33324],{"class":160},[52,150487,149611],{"class":622},[52,150489,150490],{"class":54,"line":97},[52,150491,116],{"emptyLinePlaceholder":115},[52,150493,150494,150496,150498,150500,150503,150505,150507,150509,150511,150513,150515,150517,150519,150522],{"class":54,"line":112},[52,150495,110753],{"class":160},[52,150497,149159],{"class":90},[52,150499,3121],{"class":622},[52,150501,150502],{"class":62},"\"sales.json\"",[52,150504,15391],{"class":622},[52,150506,149169],{"class":62},[52,150508,15391],{"class":622},[52,150510,149174],{"class":8172},[52,150512,2099],{"class":160},[52,150514,149179],{"class":62},[52,150516,16670],{"class":622},[52,150518,34315],{"class":160},[52,150520,150521],{"class":8172}," file",[52,150523,6698],{"class":622},[52,150525,150526,150528,150530,150533,150535],{"class":54,"line":119},[52,150527,104341],{"class":622},[52,150529,2099],{"class":160},[52,150531,150532],{"class":622}," json.load(",[52,150534,48286],{"class":8172},[52,150536,170],{"class":622},[52,150538,150539],{"class":54,"line":130},[52,150540,116],{"emptyLinePlaceholder":115},[52,150542,150543,150545,150547],{"class":54,"line":136},[52,150544,150168],{"class":622},[52,150546,2099],{"class":160},[52,150548,54769],{"class":622},[52,150550,150551,150554,150556],{"class":54,"line":141},[52,150552,150553],{"class":622},"online_sales ",[52,150555,2099],{"class":160},[52,150557,54769],{"class":622},[52,150559,150560,150563,150565],{"class":54,"line":146},[52,150561,150562],{"class":622},"offline_sales ",[52,150564,2099],{"class":160},[52,150566,54769],{"class":622},[52,150568,150569],{"class":54,"line":152},[52,150570,116],{"emptyLinePlaceholder":115},[52,150572,150573,150575,150578,150580],{"class":54,"line":157},[52,150574,5985],{"class":160},[52,150576,150577],{"class":622}," item ",[52,150579,28988],{"class":160},[52,150581,150582],{"class":622}," data:\n",[52,150584,150585,150588,150590],{"class":54,"line":173},[52,150586,150587],{"class":622},"    dates.append(item[",[52,150589,150365],{"class":62},[52,150591,7616],{"class":622},[52,150593,150594,150597,150599],{"class":54,"line":178},[52,150595,150596],{"class":622},"    online_sales.append(item[",[52,150598,150374],{"class":62},[52,150600,7616],{"class":622},[52,150602,150603,150606,150608],{"class":54,"line":184},[52,150604,150605],{"class":622},"    offline_sales.append(item[",[52,150607,150383],{"class":62},[52,150609,7616],{"class":622},[52,150611,150612],{"class":54,"line":189},[52,150613,116],{"emptyLinePlaceholder":115},[52,150615,150616,150618,150620],{"class":54,"line":201},[52,150617,149620],{"class":622},[52,150619,2099],{"class":160},[52,150621,149625],{"class":622},[52,150623,150624],{"class":54,"line":206},[52,150625,150209],{"class":622},[52,150627,150628,150630,150632,150635,150637,150639,150641],{"class":54,"line":224},[52,150629,149660],{"class":622},[52,150631,150216],{"class":62},[52,150633,150634],{"class":622},", online_sales, ",[52,150636,150113],{"class":8172},[52,150638,2099],{"class":160},[52,150640,34408],{"class":90},[52,150642,170],{"class":622},[52,150644,150645,150647,150649,150652,150654,150656,150658],{"class":54,"line":229},[52,150646,149660],{"class":622},[52,150648,150254],{"class":62},[52,150650,150651],{"class":622},", offline_sales, ",[52,150653,150113],{"class":8172},[52,150655,2099],{"class":160},[52,150657,34408],{"class":90},[52,150659,170],{"class":622},[52,150661,150662],{"class":54,"line":241},[52,150663,149836],{"class":622},[52,150665,150666,150668,150670,150672,150674,150676,150679],{"class":54,"line":246},[52,150667,149841],{"class":8172},[52,150669,2099],{"class":160},[52,150671,149846],{"class":622},[52,150673,54338],{"class":8172},[52,150675,2099],{"class":160},[52,150677,150678],{"class":62},"\"销售趋势\"",[52,150680,40979],{"class":622},[52,150682,150683,150685,150687,150689,150691,150693,150695],{"class":54,"line":252},[52,150684,149897],{"class":8172},[52,150686,2099],{"class":160},[52,150688,149902],{"class":622},[52,150690,149905],{"class":8172},[52,150692,2099],{"class":160},[52,150694,149910],{"class":62},[52,150696,40979],{"class":622},[52,150698,150699],{"class":54,"line":257},[52,150700,170],{"class":622},[52,150702,150703,150705,150707],{"class":54,"line":266},[52,150704,149692],{"class":622},[52,150706,150332],{"class":62},[52,150708,170],{"class":622},[14,150710,150712],{"id":150711},"_109-数据清洗","10.9 数据清洗",[274,150714,150715],{},"真实数据经常不整齐，需要清洗。",[274,150717,150718],{},"常见问题：",[1070,150720,150721,150724,150727,150730],{},[1073,150722,150723],{},"数字是字符串。",[1073,150725,150726],{},"字段缺失。",[1073,150728,150729],{},"空值。",[1073,150731,150732],{},"日期格式不统一。",[274,150734,18091],{},[19,150736,150738],{"className":33310,"code":150737,"language":33312,"meta":28,"style":28},"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",[26,150739,150740,150749,150772,150792,150813,150817,150821,150829,150838,150842,150853,150867,150876,150881,150885,150893,150903,150907,150914],{"__ignoreMap":28},[52,150741,150742,150745,150747],{"class":54,"line":55},[52,150743,150744],{"class":622},"raw_data ",[52,150746,2099],{"class":160},[52,150748,58377],{"class":622},[52,150750,150751,150754,150756,150758,150760,150762,150765,150767,150770],{"class":54,"line":69},[52,150752,150753],{"class":622},"    {",[52,150755,150365],{"class":62},[52,150757,54368],{"class":622},[52,150759,149633],{"class":62},[52,150761,15391],{"class":622},[52,150763,150764],{"class":62},"\"sales\"",[52,150766,54368],{"class":622},[52,150768,150769],{"class":62},"\"100\"",[52,150771,7889],{"class":622},[52,150773,150774,150776,150778,150780,150782,150784,150786,150788,150790],{"class":54,"line":82},[52,150775,150753],{"class":622},[52,150777,150365],{"class":62},[52,150779,54368],{"class":622},[52,150781,149638],{"class":62},[52,150783,15391],{"class":622},[52,150785,150764],{"class":62},[52,150787,54368],{"class":622},[52,150789,10608],{"class":62},[52,150791,7889],{"class":622},[52,150793,150794,150796,150798,150800,150802,150804,150806,150808,150811],{"class":54,"line":97},[52,150795,150753],{"class":622},[52,150797,150365],{"class":62},[52,150799,54368],{"class":622},[52,150801,149643],{"class":62},[52,150803,15391],{"class":622},[52,150805,150764],{"class":62},[52,150807,54368],{"class":622},[52,150809,150810],{"class":62},"\"120\"",[52,150812,7889],{"class":622},[52,150814,150815],{"class":54,"line":112},[52,150816,36178],{"class":622},[52,150818,150819],{"class":54,"line":119},[52,150820,116],{"emptyLinePlaceholder":115},[52,150822,150823,150825,150827],{"class":54,"line":130},[52,150824,150168],{"class":622},[52,150826,2099],{"class":160},[52,150828,54769],{"class":622},[52,150830,150831,150834,150836],{"class":54,"line":136},[52,150832,150833],{"class":622},"sales ",[52,150835,2099],{"class":160},[52,150837,54769],{"class":622},[52,150839,150840],{"class":54,"line":141},[52,150841,116],{"emptyLinePlaceholder":115},[52,150843,150844,150846,150848,150850],{"class":54,"line":146},[52,150845,5985],{"class":160},[52,150847,150577],{"class":622},[52,150849,28988],{"class":160},[52,150851,150852],{"class":622}," raw_data:\n",[52,150854,150855,150858,150860,150863,150865],{"class":54,"line":152},[52,150856,150857],{"class":622},"    value ",[52,150859,2099],{"class":160},[52,150861,150862],{"class":622}," item.get(",[52,150864,150764],{"class":62},[52,150866,170],{"class":622},[52,150868,150869,150871,150873],{"class":54,"line":157},[52,150870,6060],{"class":160},[52,150872,41862],{"class":160},[52,150874,150875],{"class":622}," value:\n",[52,150877,150878],{"class":54,"line":173},[52,150879,150880],{"class":160},"        continue\n",[52,150882,150883],{"class":54,"line":178},[52,150884,116],{"emptyLinePlaceholder":115},[52,150886,150887,150889,150891],{"class":54,"line":184},[52,150888,150587],{"class":622},[52,150890,150365],{"class":62},[52,150892,7616],{"class":622},[52,150894,150895,150898,150900],{"class":54,"line":189},[52,150896,150897],{"class":622},"    sales.append(",[52,150899,3124],{"class":90},[52,150901,150902],{"class":622},"(value))\n",[52,150904,150905],{"class":54,"line":201},[52,150906,116],{"emptyLinePlaceholder":115},[52,150908,150909,150911],{"class":54,"line":206},[52,150910,33347],{"class":90},[52,150912,150913],{"class":622},"(dates)\n",[52,150915,150916,150918],{"class":54,"line":224},[52,150917,33347],{"class":90},[52,150919,150920],{"class":622},"(sales)\n",[14,150922,150924],{"id":150923},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[19,150926,150928],{"className":33310,"code":150927,"language":33312,"meta":28,"style":28},"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",[26,150929,150930,150944,150954,150958,150966,150987,151009,151031,151053,151075,151079,151083,151105,151126,151130,151138,151142,151146,151156,151165,151175,151191,151195,151199,151216,151232,151248,151264,151274,151278],{"__ignoreMap":28},[52,150931,150932,150934,150936,150938,150940,150942],{"class":54,"line":55},[52,150933,33669],{"class":160},[52,150935,149747],{"class":622},[52,150937,33324],{"class":160},[52,150939,149752],{"class":622},[52,150941,34315],{"class":160},[52,150943,149757],{"class":622},[52,150945,150946,150948,150950,150952],{"class":54,"line":69},[52,150947,33669],{"class":160},[52,150949,149606],{"class":622},[52,150951,33324],{"class":160},[52,150953,149611],{"class":622},[52,150955,150956],{"class":54,"line":82},[52,150957,116],{"emptyLinePlaceholder":115},[52,150959,150960,150962,150964],{"class":54,"line":97},[52,150961,150833],{"class":622},[52,150963,2099],{"class":160},[52,150965,58377],{"class":622},[52,150967,150968,150970,150972,150974,150977,150979,150981,150983,150985],{"class":54,"line":112},[52,150969,150753],{"class":622},[52,150971,150365],{"class":62},[52,150973,54368],{"class":622},[52,150975,150976],{"class":62},"\"2024-10-01\"",[52,150978,15391],{"class":622},[52,150980,87012],{"class":62},[52,150982,54368],{"class":622},[52,150984,94951],{"class":90},[52,150986,7889],{"class":622},[52,150988,150989,150991,150993,150995,150998,151000,151002,151004,151007],{"class":54,"line":119},[52,150990,150753],{"class":622},[52,150992,150365],{"class":62},[52,150994,54368],{"class":622},[52,150996,150997],{"class":62},"\"2024-10-02\"",[52,150999,15391],{"class":622},[52,151001,87012],{"class":62},[52,151003,54368],{"class":622},[52,151005,151006],{"class":90},"1800",[52,151008,7889],{"class":622},[52,151010,151011,151013,151015,151017,151020,151022,151024,151026,151029],{"class":54,"line":130},[52,151012,150753],{"class":622},[52,151014,150365],{"class":62},[52,151016,54368],{"class":622},[52,151018,151019],{"class":62},"\"2024-10-03\"",[52,151021,15391],{"class":622},[52,151023,87012],{"class":62},[52,151025,54368],{"class":622},[52,151027,151028],{"class":90},"1500",[52,151030,7889],{"class":622},[52,151032,151033,151035,151037,151039,151042,151044,151046,151048,151051],{"class":54,"line":136},[52,151034,150753],{"class":622},[52,151036,150365],{"class":62},[52,151038,54368],{"class":622},[52,151040,151041],{"class":62},"\"2024-10-04\"",[52,151043,15391],{"class":622},[52,151045,87012],{"class":62},[52,151047,54368],{"class":622},[52,151049,151050],{"class":90},"2100",[52,151052,7889],{"class":622},[52,151054,151055,151057,151059,151061,151064,151066,151068,151070,151073],{"class":54,"line":141},[52,151056,150753],{"class":622},[52,151058,150365],{"class":62},[52,151060,54368],{"class":622},[52,151062,151063],{"class":62},"\"2024-10-05\"",[52,151065,15391],{"class":622},[52,151067,87012],{"class":62},[52,151069,54368],{"class":622},[52,151071,151072],{"class":90},"2600",[52,151074,7889],{"class":622},[52,151076,151077],{"class":54,"line":146},[52,151078,36178],{"class":622},[52,151080,151081],{"class":54,"line":152},[52,151082,116],{"emptyLinePlaceholder":115},[52,151084,151085,151087,151089,151092,151094,151096,151098,151100,151102],{"class":54,"line":157},[52,151086,150168],{"class":622},[52,151088,2099],{"class":160},[52,151090,151091],{"class":622}," [item[",[52,151093,150365],{"class":62},[52,151095,7402],{"class":622},[52,151097,5985],{"class":160},[52,151099,150577],{"class":622},[52,151101,28988],{"class":160},[52,151103,151104],{"class":622}," sales]\n",[52,151106,151107,151110,151112,151114,151116,151118,151120,151122,151124],{"class":54,"line":173},[52,151108,151109],{"class":622},"amounts ",[52,151111,2099],{"class":160},[52,151113,151091],{"class":622},[52,151115,87012],{"class":62},[52,151117,7402],{"class":622},[52,151119,5985],{"class":160},[52,151121,150577],{"class":622},[52,151123,28988],{"class":160},[52,151125,151104],{"class":622},[52,151127,151128],{"class":54,"line":178},[52,151129,116],{"emptyLinePlaceholder":115},[52,151131,151132,151134,151136],{"class":54,"line":184},[52,151133,149620],{"class":622},[52,151135,2099],{"class":160},[52,151137,149625],{"class":622},[52,151139,151140],{"class":54,"line":189},[52,151141,150209],{"class":622},[52,151143,151144],{"class":54,"line":201},[52,151145,150017],{"class":622},[52,151147,151148,151150,151152,151154],{"class":54,"line":206},[52,151149,150022],{"class":8172},[52,151151,2099],{"class":160},[52,151153,149663],{"class":62},[52,151155,34398],{"class":622},[52,151157,151158,151160,151162],{"class":54,"line":224},[52,151159,150033],{"class":8172},[52,151161,2099],{"class":160},[52,151163,151164],{"class":622},"amounts,\n",[52,151166,151167,151169,151171,151173],{"class":54,"line":229},[52,151168,150062],{"class":8172},[52,151170,2099],{"class":160},[52,151172,34408],{"class":90},[52,151174,34398],{"class":622},[52,151176,151177,151179,151181,151183,151185,151187,151189],{"class":54,"line":241},[52,151178,150073],{"class":8172},[52,151180,2099],{"class":160},[52,151182,150078],{"class":622},[52,151184,150081],{"class":8172},[52,151186,2099],{"class":160},[52,151188,34408],{"class":90},[52,151190,40979],{"class":622},[52,151192,151193],{"class":54,"line":246},[52,151194,170],{"class":622},[52,151196,151197],{"class":54,"line":252},[52,151198,149836],{"class":622},[52,151200,151201,151203,151205,151207,151209,151211,151214],{"class":54,"line":257},[52,151202,149841],{"class":8172},[52,151204,2099],{"class":160},[52,151206,149846],{"class":622},[52,151208,54338],{"class":8172},[52,151210,2099],{"class":160},[52,151212,151213],{"class":62},"\"每日销售额\"",[52,151215,40979],{"class":622},[52,151217,151218,151220,151222,151224,151226,151228,151230],{"class":54,"line":266},[52,151219,149860],{"class":8172},[52,151221,2099],{"class":160},[52,151223,149865],{"class":622},[52,151225,82738],{"class":8172},[52,151227,2099],{"class":160},[52,151229,149872],{"class":62},[52,151231,40979],{"class":622},[52,151233,151234,151236,151238,151240,151242,151244,151246],{"class":54,"line":4722},[52,151235,149879],{"class":8172},[52,151237,2099],{"class":160},[52,151239,149865],{"class":622},[52,151241,82738],{"class":8172},[52,151243,2099],{"class":160},[52,151245,149890],{"class":62},[52,151247,40979],{"class":622},[52,151249,151250,151252,151254,151256,151258,151260,151262],{"class":54,"line":4727},[52,151251,149897],{"class":8172},[52,151253,2099],{"class":160},[52,151255,149902],{"class":622},[52,151257,149905],{"class":8172},[52,151259,2099],{"class":160},[52,151261,149910],{"class":62},[52,151263,40979],{"class":622},[52,151265,151266,151269,151271],{"class":54,"line":4741},[52,151267,151268],{"class":8172},"    datazoom_opts",[52,151270,2099],{"class":160},[52,151272,151273],{"class":622},"[opts.DataZoomOpts()],\n",[52,151275,151276],{"class":54,"line":4746},[52,151277,170],{"class":622},[52,151279,151280,151282,151285],{"class":54,"line":5538},[52,151281,149692],{"class":622},[52,151283,151284],{"class":62},"\"daily_sales.html\"",[52,151286,170],{"class":622},[274,151288,151289,151292],{},[26,151290,151291],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151294,151296],{"id":151295},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[274,151298,151299],{},"如果数据结构如下：",[19,151301,151303],{"className":33310,"code":151302,"language":33312,"meta":28,"style":28},"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",[26,151304,151305,151313,151321,151343,151364,151369,151376,151396,151416,151420],{"__ignoreMap":28},[52,151306,151307,151309,151311],{"class":54,"line":55},[52,151308,104578],{"class":622},[52,151310,2099],{"class":160},[52,151312,18528],{"class":622},[52,151314,151315,151318],{"class":54,"line":69},[52,151316,151317],{"class":62},"    \"北京\"",[52,151319,151320],{"class":622},": [\n",[52,151322,151323,151325,151327,151329,151332,151334,151337,151339,151341],{"class":54,"line":82},[52,151324,7876],{"class":622},[52,151326,150365],{"class":62},[52,151328,54368],{"class":622},[52,151330,151331],{"class":62},"\"2024-01-01\"",[52,151333,15391],{"class":622},[52,151335,151336],{"class":62},"\"confirm\"",[52,151338,54368],{"class":622},[52,151340,3559],{"class":90},[52,151342,7889],{"class":622},[52,151344,151345,151347,151349,151351,151354,151356,151358,151360,151362],{"class":54,"line":97},[52,151346,7876],{"class":622},[52,151348,150365],{"class":62},[52,151350,54368],{"class":622},[52,151352,151353],{"class":62},"\"2024-01-02\"",[52,151355,15391],{"class":622},[52,151357,151336],{"class":62},[52,151359,54368],{"class":622},[52,151361,3610],{"class":90},[52,151363,7889],{"class":622},[52,151365,151366],{"class":54,"line":112},[52,151367,151368],{"class":622},"    ],\n",[52,151370,151371,151374],{"class":54,"line":119},[52,151372,151373],{"class":62},"    \"上海\"",[52,151375,151320],{"class":622},[52,151377,151378,151380,151382,151384,151386,151388,151390,151392,151394],{"class":54,"line":130},[52,151379,7876],{"class":622},[52,151381,150365],{"class":62},[52,151383,54368],{"class":622},[52,151385,151331],{"class":62},[52,151387,15391],{"class":622},[52,151389,151336],{"class":62},[52,151391,54368],{"class":622},[52,151393,3508],{"class":90},[52,151395,7889],{"class":622},[52,151397,151398,151400,151402,151404,151406,151408,151410,151412,151414],{"class":54,"line":136},[52,151399,7876],{"class":622},[52,151401,150365],{"class":62},[52,151403,54368],{"class":622},[52,151405,151353],{"class":62},[52,151407,15391],{"class":622},[52,151409,151336],{"class":62},[52,151411,54368],{"class":622},[52,151413,3635],{"class":90},[52,151415,7889],{"class":622},[52,151417,151418],{"class":54,"line":141},[52,151419,151368],{"class":622},[52,151421,151422],{"class":54,"line":146},[52,151423,4543],{"class":622},[274,151425,151426],{},"绘制多地区趋势：",[19,151428,151430],{"className":33310,"code":151429,"language":33312,"meta":28,"style":28},"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",[26,151431,151432,151446,151456,151460,151485,151489,151497,151501,151505,151517,151539,151552,151556,151560,151577,151593,151597],{"__ignoreMap":28},[52,151433,151434,151436,151438,151440,151442,151444],{"class":54,"line":55},[52,151435,33669],{"class":160},[52,151437,149747],{"class":622},[52,151439,33324],{"class":160},[52,151441,149752],{"class":622},[52,151443,34315],{"class":160},[52,151445,149757],{"class":622},[52,151447,151448,151450,151452,151454],{"class":54,"line":69},[52,151449,33669],{"class":160},[52,151451,149606],{"class":622},[52,151453,33324],{"class":160},[52,151455,149611],{"class":622},[52,151457,151458],{"class":54,"line":82},[52,151459,116],{"emptyLinePlaceholder":115},[52,151461,151462,151464,151466,151468,151470,151472,151474,151476,151478,151481,151483],{"class":54,"line":97},[52,151463,150168],{"class":622},[52,151465,2099],{"class":160},[52,151467,151091],{"class":622},[52,151469,150365],{"class":62},[52,151471,7402],{"class":622},[52,151473,5985],{"class":160},[52,151475,150577],{"class":622},[52,151477,28988],{"class":160},[52,151479,151480],{"class":622}," data[",[52,151482,72198],{"class":62},[52,151484,80455],{"class":622},[52,151486,151487],{"class":54,"line":112},[52,151488,116],{"emptyLinePlaceholder":115},[52,151490,151491,151493,151495],{"class":54,"line":119},[52,151492,149620],{"class":622},[52,151494,2099],{"class":160},[52,151496,149625],{"class":622},[52,151498,151499],{"class":54,"line":130},[52,151500,150209],{"class":622},[52,151502,151503],{"class":54,"line":136},[52,151504,116],{"emptyLinePlaceholder":115},[52,151506,151507,151509,151512,151514],{"class":54,"line":141},[52,151508,5985],{"class":160},[52,151510,151511],{"class":622}," city, records ",[52,151513,28988],{"class":160},[52,151515,151516],{"class":622}," data.items():\n",[52,151518,151519,151522,151524,151526,151528,151530,151532,151534,151536],{"class":54,"line":146},[52,151520,151521],{"class":622},"    values ",[52,151523,2099],{"class":160},[52,151525,151091],{"class":622},[52,151527,151336],{"class":62},[52,151529,7402],{"class":622},[52,151531,5985],{"class":160},[52,151533,150577],{"class":622},[52,151535,28988],{"class":160},[52,151537,151538],{"class":622}," records]\n",[52,151540,151541,151544,151546,151548,151550],{"class":54,"line":152},[52,151542,151543],{"class":622},"    line.add_yaxis(city, values, ",[52,151545,150113],{"class":8172},[52,151547,2099],{"class":160},[52,151549,34408],{"class":90},[52,151551,170],{"class":622},[52,151553,151554],{"class":54,"line":157},[52,151555,116],{"emptyLinePlaceholder":115},[52,151557,151558],{"class":54,"line":173},[52,151559,149836],{"class":622},[52,151561,151562,151564,151566,151568,151570,151572,151575],{"class":54,"line":178},[52,151563,149841],{"class":8172},[52,151565,2099],{"class":160},[52,151567,149846],{"class":622},[52,151569,54338],{"class":8172},[52,151571,2099],{"class":160},[52,151573,151574],{"class":62},"\"多地区趋势图\"",[52,151576,40979],{"class":622},[52,151578,151579,151581,151583,151585,151587,151589,151591],{"class":54,"line":184},[52,151580,149897],{"class":8172},[52,151582,2099],{"class":160},[52,151584,149902],{"class":622},[52,151586,149905],{"class":8172},[52,151588,2099],{"class":160},[52,151590,149910],{"class":62},[52,151592,40979],{"class":622},[52,151594,151595],{"class":54,"line":189},[52,151596,170],{"class":622},[52,151598,151599,151601,151604],{"class":54,"line":201},[52,151600,149692],{"class":622},[52,151602,151603],{"class":62},"\"trend.html\"",[52,151605,170],{"class":622},[274,151607,151608],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151610,151612],{"id":151611},"_1012-易错点","10.12 易错点",[1070,151614,151615,151621,151627,151637,151643],{},[1073,151616,151617,151620],{},[26,151618,151619],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[1073,151622,151623,151626],{},[26,151624,151625],{},"render()"," 生成的是 HTML，不是图片。",[1073,151628,151629,151630,151633,151634,31319],{},"JSON 字符串用 ",[26,151631,151632],{},"json.loads()","，JSON 文件用 ",[26,151635,151636],{},"json.load()",[1073,151638,151639,151640,31319],{},"中文 JSON 保存时加 ",[26,151641,151642],{},"ensure_ascii=False",[1073,151644,151645],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151647,151649],{"id":151648},"_1013-本章练习","10.13 本章练习",[1070,151651,151652,151655,151658,151661,151664],{},[1073,151653,151654],{},"安装 pyecharts 并生成第一个折线图。",[1073,151656,151657],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[1073,151659,151660],{},"绘制两条折线，对比线上和线下销售额。",[1073,151662,151663],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[1073,151665,151666],{},"对含有空值的销售数据进行清洗后再绘图。",[3015,151668,151669],{},"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":28,"searchDepth":69,"depth":69,"links":151671},[151672,151673,151674,151675,151676,151677,151678,151679,151680,151681,151682,151683,151684],{"id":149288,"depth":69,"text":149289},{"id":149363,"depth":69,"text":149364},{"id":149542,"depth":69,"text":149543},{"id":149593,"depth":69,"text":149594},{"id":149727,"depth":69,"text":149728},{"id":150003,"depth":69,"text":150004},{"id":150129,"depth":69,"text":150130},{"id":150340,"depth":69,"text":150341},{"id":150711,"depth":69,"text":150712},{"id":150923,"depth":69,"text":150924},{"id":151295,"depth":69,"text":151296},{"id":151611,"depth":69,"text":151612},{"id":151648,"depth":69,"text":151649},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149280,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151691,"title":151692,"body":151693,"description":3046,"extension":3047,"meta":154053,"navigation":115,"path":154054,"seo":154055,"stem":154056,"__hash__":154057},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151694,"toc":154030},[151695,151698,151702,151705,151708,151784,151787,151878,151881,151885,151888,151932,151945,151949,151952,152019,152022,152026,152029,152113,152121,152125,152130,152271,152274,152285,152291,152297,152411,152415,152418,152421,152674,152677,152681,152684,152788,152791,152795,152946,152950,152957,153070,153074,153077,153183,153186,153190,153193,153224,153227,153332,153335,153339,153343,153353,153421,153425,153432,153496,153499,153503,153509,153605,153614,153618,153942,153951,153955,153983,153987,154027],[10,151696,151692],{"id":151697},"_11-面向对象基础",[14,151699,151701],{"id":151700},"_111-什么是面向对象","11.1 什么是面向对象",[274,151703,151704],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[274,151706,151707],{},"面向过程：",[19,151709,151711],{"className":33310,"code":151710,"language":33312,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[26,151712,151713,151722,151730,151734,151744,151775,151779],{"__ignoreMap":28},[52,151714,151715,151717,151719],{"class":54,"line":55},[52,151716,148904],{"class":622},[52,151718,2099],{"class":160},[52,151720,151721],{"class":62}," \"小明\"\n",[52,151723,151724,151726,151728],{"class":54,"line":69},[52,151725,148914],{"class":622},[52,151727,2099],{"class":160},[52,151729,148919],{"class":90},[52,151731,151732],{"class":54,"line":82},[52,151733,116],{"emptyLinePlaceholder":115},[52,151735,151736,151738,151741],{"class":54,"line":97},[52,151737,34879],{"class":160},[52,151739,151740],{"class":58}," introduce",[52,151742,151743],{"class":622},"(name, age):\n",[52,151745,151746,151748,151750,151752,151755,151757,151759,151761,151764,151766,151768,151770,151773],{"class":54,"line":112},[52,151747,34231],{"class":90},[52,151749,3121],{"class":622},[52,151751,3170],{"class":160},[52,151753,151754],{"class":62},"\"我叫",[52,151756,4008],{"class":90},[52,151758,82738],{"class":622},[52,151760,4058],{"class":90},[52,151762,151763],{"class":62},"，今年",[52,151765,4008],{"class":90},[52,151767,73149],{"class":622},[52,151769,4058],{"class":90},[52,151771,151772],{"class":62},"岁\"",[52,151774,170],{"class":622},[52,151776,151777],{"class":54,"line":119},[52,151778,116],{"emptyLinePlaceholder":115},[52,151780,151781],{"class":54,"line":130},[52,151782,151783],{"class":622},"introduce(name, age)\n",[274,151785,151786],{},"面向对象：",[19,151788,151790],{"className":33310,"code":151789,"language":33312,"meta":28,"style":28},"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",[26,151791,151792,151800,151808,151837,151841,151845,151855,151864,151873],{"__ignoreMap":28},[52,151793,151794,151796,151798],{"class":54,"line":55},[52,151795,17650],{"class":160},[52,151797,10854],{"class":58},[52,151799,6698],{"class":622},[52,151801,151802,151804,151806],{"class":54,"line":69},[52,151803,33733],{"class":160},[52,151805,151740],{"class":58},[52,151807,33739],{"class":622},[52,151809,151810,151812,151814,151816,151818,151821,151823,151825,151827,151829,151831,151833,151835],{"class":54,"line":82},[52,151811,35383],{"class":90},[52,151813,3121],{"class":622},[52,151815,3170],{"class":160},[52,151817,151754],{"class":62},[52,151819,151820],{"class":90},"{self",[52,151822,83229],{"class":622},[52,151824,4058],{"class":90},[52,151826,151763],{"class":62},[52,151828,151820],{"class":90},[52,151830,83241],{"class":622},[52,151832,4058],{"class":90},[52,151834,151772],{"class":62},[52,151836,170],{"class":622},[52,151838,151839],{"class":54,"line":97},[52,151840,116],{"emptyLinePlaceholder":115},[52,151842,151843],{"class":54,"line":112},[52,151844,116],{"emptyLinePlaceholder":115},[52,151846,151847,151850,151852],{"class":54,"line":119},[52,151848,151849],{"class":622},"student ",[52,151851,2099],{"class":160},[52,151853,151854],{"class":622}," Student()\n",[52,151856,151857,151860,151862],{"class":54,"line":130},[52,151858,151859],{"class":622},"student.name ",[52,151861,2099],{"class":160},[52,151863,151721],{"class":62},[52,151865,151866,151869,151871],{"class":54,"line":136},[52,151867,151868],{"class":622},"student.age ",[52,151870,2099],{"class":160},[52,151872,148919],{"class":90},[52,151874,151875],{"class":54,"line":141},[52,151876,151877],{"class":622},"student.introduce()\n",[274,151879,151880],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151882,151884],{"id":151883},"_112-类和对象","11.2 类和对象",[274,151886,151887],{},"类是模板，对象是根据模板创建出来的具体实例。",[19,151889,151891],{"className":33310,"code":151890,"language":33312,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[26,151892,151893,151901,151906,151910,151914,151923],{"__ignoreMap":28},[52,151894,151895,151897,151899],{"class":54,"line":55},[52,151896,17650],{"class":160},[52,151898,10854],{"class":58},[52,151900,6698],{"class":622},[52,151902,151903],{"class":54,"line":69},[52,151904,151905],{"class":160},"    pass\n",[52,151907,151908],{"class":54,"line":82},[52,151909,116],{"emptyLinePlaceholder":115},[52,151911,151912],{"class":54,"line":97},[52,151913,116],{"emptyLinePlaceholder":115},[52,151915,151916,151919,151921],{"class":54,"line":112},[52,151917,151918],{"class":622},"student1 ",[52,151920,2099],{"class":160},[52,151922,151854],{"class":622},[52,151924,151925,151928,151930],{"class":54,"line":119},[52,151926,151927],{"class":622},"student2 ",[52,151929,2099],{"class":160},[52,151931,151854],{"class":622},[274,151933,151934,151937,151938,103940,151941,151944],{},[26,151935,151936],{},"Student"," 是类，",[26,151939,151940],{},"student1",[26,151942,151943],{},"student2"," 是对象。",[14,151946,151948],{"id":151947},"_113-属性","11.3 属性",[274,151950,151951],{},"属性是对象保存的数据。",[19,151953,151955],{"className":33310,"code":151954,"language":33312,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[26,151956,151957,151965,151969,151973,151977,151985,151993,152001,152005,152012],{"__ignoreMap":28},[52,151958,151959,151961,151963],{"class":54,"line":55},[52,151960,17650],{"class":160},[52,151962,10854],{"class":58},[52,151964,6698],{"class":622},[52,151966,151967],{"class":54,"line":69},[52,151968,151905],{"class":160},[52,151970,151971],{"class":54,"line":82},[52,151972,116],{"emptyLinePlaceholder":115},[52,151974,151975],{"class":54,"line":97},[52,151976,116],{"emptyLinePlaceholder":115},[52,151978,151979,151981,151983],{"class":54,"line":112},[52,151980,151849],{"class":622},[52,151982,2099],{"class":160},[52,151984,151854],{"class":622},[52,151986,151987,151989,151991],{"class":54,"line":119},[52,151988,151859],{"class":622},[52,151990,2099],{"class":160},[52,151992,151721],{"class":62},[52,151994,151995,151997,151999],{"class":54,"line":130},[52,151996,151868],{"class":622},[52,151998,2099],{"class":160},[52,152000,148919],{"class":90},[52,152002,152003],{"class":54,"line":136},[52,152004,116],{"emptyLinePlaceholder":115},[52,152006,152007,152009],{"class":54,"line":141},[52,152008,33347],{"class":90},[52,152010,152011],{"class":622},"(student.name)\n",[52,152013,152014,152016],{"class":54,"line":146},[52,152015,33347],{"class":90},[52,152017,152018],{"class":622},"(student.age)\n",[274,152020,152021],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,152023,152025],{"id":152024},"_114-方法","11.4 方法",[274,152027,152028],{},"类中的函数叫方法。",[19,152030,152031],{"className":33310,"code":151789,"language":33312,"meta":28,"style":28},[26,152032,152033,152041,152049,152077,152081,152085,152093,152101,152109],{"__ignoreMap":28},[52,152034,152035,152037,152039],{"class":54,"line":55},[52,152036,17650],{"class":160},[52,152038,10854],{"class":58},[52,152040,6698],{"class":622},[52,152042,152043,152045,152047],{"class":54,"line":69},[52,152044,33733],{"class":160},[52,152046,151740],{"class":58},[52,152048,33739],{"class":622},[52,152050,152051,152053,152055,152057,152059,152061,152063,152065,152067,152069,152071,152073,152075],{"class":54,"line":82},[52,152052,35383],{"class":90},[52,152054,3121],{"class":622},[52,152056,3170],{"class":160},[52,152058,151754],{"class":62},[52,152060,151820],{"class":90},[52,152062,83229],{"class":622},[52,152064,4058],{"class":90},[52,152066,151763],{"class":62},[52,152068,151820],{"class":90},[52,152070,83241],{"class":622},[52,152072,4058],{"class":90},[52,152074,151772],{"class":62},[52,152076,170],{"class":622},[52,152078,152079],{"class":54,"line":97},[52,152080,116],{"emptyLinePlaceholder":115},[52,152082,152083],{"class":54,"line":112},[52,152084,116],{"emptyLinePlaceholder":115},[52,152086,152087,152089,152091],{"class":54,"line":119},[52,152088,151849],{"class":622},[52,152090,2099],{"class":160},[52,152092,151854],{"class":622},[52,152094,152095,152097,152099],{"class":54,"line":130},[52,152096,151859],{"class":622},[52,152098,2099],{"class":160},[52,152100,151721],{"class":62},[52,152102,152103,152105,152107],{"class":54,"line":136},[52,152104,151868],{"class":622},[52,152106,2099],{"class":160},[52,152108,148919],{"class":90},[52,152110,152111],{"class":54,"line":141},[52,152112,151877],{"class":622},[274,152114,152115,152117,152118,152120],{},[26,152116,33755],{}," 表示当前对象。调用方法时不需要手动传入 ",[26,152119,33755],{},"，Python 会自动传。",[14,152122,152124],{"id":152123},"_115-构造方法__init__","11.5 构造方法__init__",[274,152126,152127,152129],{},[26,152128,33761],{}," 在对象创建时自动执行，用于初始化属性。",[19,152131,152133],{"className":33310,"code":152132,"language":33312,"meta":28,"style":28},"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",[26,152134,152135,152143,152152,152164,152176,152187,152191,152199,152237,152241,152245,152267],{"__ignoreMap":28},[52,152136,152137,152139,152141],{"class":54,"line":55},[52,152138,17650],{"class":160},[52,152140,10854],{"class":58},[52,152142,6698],{"class":622},[52,152144,152145,152147,152149],{"class":54,"line":69},[52,152146,33733],{"class":160},[52,152148,33736],{"class":90},[52,152150,152151],{"class":622},"(self, name, age, score):\n",[52,152153,152154,152156,152159,152161],{"class":54,"line":82},[52,152155,33777],{"class":90},[52,152157,152158],{"class":622},".name ",[52,152160,2099],{"class":160},[52,152162,152163],{"class":622}," name\n",[52,152165,152166,152168,152171,152173],{"class":54,"line":97},[52,152167,33777],{"class":90},[52,152169,152170],{"class":622},".age ",[52,152172,2099],{"class":160},[52,152174,152175],{"class":622}," age\n",[52,152177,152178,152180,152183,152185],{"class":54,"line":112},[52,152179,33777],{"class":90},[52,152181,152182],{"class":622},".score ",[52,152184,2099],{"class":160},[52,152186,4557],{"class":622},[52,152188,152189],{"class":54,"line":119},[52,152190,116],{"emptyLinePlaceholder":115},[52,152192,152193,152195,152197],{"class":54,"line":130},[52,152194,33733],{"class":160},[52,152196,151740],{"class":58},[52,152198,33739],{"class":622},[52,152200,152201,152203,152205,152207,152209,152211,152213,152215,152217,152219,152221,152223,152226,152228,152231,152233,152235],{"class":54,"line":136},[52,152202,35383],{"class":90},[52,152204,3121],{"class":622},[52,152206,3170],{"class":160},[52,152208,151754],{"class":62},[52,152210,151820],{"class":90},[52,152212,83229],{"class":622},[52,152214,4058],{"class":90},[52,152216,151763],{"class":62},[52,152218,151820],{"class":90},[52,152220,83241],{"class":622},[52,152222,4058],{"class":90},[52,152224,152225],{"class":62},"岁，成绩",[52,152227,151820],{"class":90},[52,152229,152230],{"class":622},".score",[52,152232,4058],{"class":90},[52,152234,3364],{"class":62},[52,152236,170],{"class":622},[52,152238,152239],{"class":54,"line":141},[52,152240,116],{"emptyLinePlaceholder":115},[52,152242,152243],{"class":54,"line":146},[52,152244,116],{"emptyLinePlaceholder":115},[52,152246,152247,152249,152251,152254,152257,152259,152261,152263,152265],{"class":54,"line":152},[52,152248,151849],{"class":622},[52,152250,2099],{"class":160},[52,152252,152253],{"class":622}," Student(",[52,152255,152256],{"class":62},"\"小明\"",[52,152258,15391],{"class":622},[52,152260,3762],{"class":90},[52,152262,15391],{"class":622},[52,152264,4100],{"class":90},[52,152266,170],{"class":622},[52,152268,152269],{"class":54,"line":157},[52,152270,151877],{"class":622},[274,152272,152273],{},"构造方法的好处：",[1070,152275,152276,152279,152282],{},[1073,152277,152278],{},"创建对象时必须提供必要数据。",[1073,152280,152281],{},"属性初始化集中，不容易漏。",[1073,152283,152284],{},"对象状态更完整。",[14,152286,152288,152289],{"id":152287},"_116-str","11.6 ",[538,152290,4281],{},[274,152292,152293,152294,31319],{},"直接打印对象时，默认输出不直观。可以定义 ",[26,152295,152296],{},"__str__",[19,152298,152300],{"className":33310,"code":152299,"language":33312,"meta":28,"style":28},"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",[26,152301,152302,152310,152319,152329,152339,152343,152352,152380,152384,152388,152404],{"__ignoreMap":28},[52,152303,152304,152306,152308],{"class":54,"line":55},[52,152305,17650],{"class":160},[52,152307,10854],{"class":58},[52,152309,6698],{"class":622},[52,152311,152312,152314,152316],{"class":54,"line":69},[52,152313,33733],{"class":160},[52,152315,33736],{"class":90},[52,152317,152318],{"class":622},"(self, name, age):\n",[52,152320,152321,152323,152325,152327],{"class":54,"line":82},[52,152322,33777],{"class":90},[52,152324,152158],{"class":622},[52,152326,2099],{"class":160},[52,152328,152163],{"class":622},[52,152330,152331,152333,152335,152337],{"class":54,"line":97},[52,152332,33777],{"class":90},[52,152334,152170],{"class":622},[52,152336,2099],{"class":160},[52,152338,152175],{"class":622},[52,152340,152341],{"class":54,"line":112},[52,152342,116],{"emptyLinePlaceholder":115},[52,152344,152345,152347,152350],{"class":54,"line":119},[52,152346,33733],{"class":160},[52,152348,152349],{"class":90}," __str__",[52,152351,33739],{"class":622},[52,152353,152354,152356,152359,152362,152364,152366,152368,152371,152373,152375,152377],{"class":54,"line":130},[52,152355,17708],{"class":160},[52,152357,152358],{"class":160}," f",[52,152360,152361],{"class":62},"\"Student(name=",[52,152363,151820],{"class":90},[52,152365,83229],{"class":622},[52,152367,4058],{"class":90},[52,152369,152370],{"class":62},", age=",[52,152372,151820],{"class":90},[52,152374,83241],{"class":622},[52,152376,4058],{"class":90},[52,152378,152379],{"class":62},")\"\n",[52,152381,152382],{"class":54,"line":136},[52,152383,116],{"emptyLinePlaceholder":115},[52,152385,152386],{"class":54,"line":141},[52,152387,116],{"emptyLinePlaceholder":115},[52,152389,152390,152392,152394,152396,152398,152400,152402],{"class":54,"line":146},[52,152391,151849],{"class":622},[52,152393,2099],{"class":160},[52,152395,152253],{"class":622},[52,152397,152256],{"class":62},[52,152399,15391],{"class":622},[52,152401,3762],{"class":90},[52,152403,170],{"class":622},[52,152405,152406,152408],{"class":54,"line":152},[52,152407,33347],{"class":90},[52,152409,152410],{"class":622},"(student)\n",[14,152412,152414],{"id":152413},"_117-封装","11.7 封装",[274,152416,152417],{},"封装就是把数据和方法放到类中，并控制访问方式。",[274,152419,152420],{},"Python 中以双下划线开头的属性通常视为私有属性。",[19,152422,152424],{"className":33310,"code":152423,"language":33312,"meta":28,"style":28},"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",[26,152425,152426,152435,152444,152456,152468,152472,152481,152490,152494,152504,152517,152528,152533,152544,152548,152557,152569,152580,152584,152597,152608,152612,152623,152627,152631,152649,152658,152667],{"__ignoreMap":28},[52,152427,152428,152430,152433],{"class":54,"line":55},[52,152429,17650],{"class":160},[52,152431,152432],{"class":58}," Account",[52,152434,6698],{"class":622},[52,152436,152437,152439,152441],{"class":54,"line":69},[52,152438,33733],{"class":160},[52,152440,33736],{"class":90},[52,152442,152443],{"class":622},"(self, owner, balance):\n",[52,152445,152446,152448,152451,152453],{"class":54,"line":82},[52,152447,33777],{"class":90},[52,152449,152450],{"class":622},".owner ",[52,152452,2099],{"class":160},[52,152454,152455],{"class":622}," owner\n",[52,152457,152458,152460,152463,152465],{"class":54,"line":97},[52,152459,33777],{"class":90},[52,152461,152462],{"class":622},".__balance ",[52,152464,2099],{"class":160},[52,152466,152467],{"class":622}," balance\n",[52,152469,152470],{"class":54,"line":112},[52,152471,116],{"emptyLinePlaceholder":115},[52,152473,152474,152476,152479],{"class":54,"line":119},[52,152475,33733],{"class":160},[52,152477,152478],{"class":58}," get_balance",[52,152480,33739],{"class":622},[52,152482,152483,152485,152487],{"class":54,"line":130},[52,152484,17708],{"class":160},[52,152486,41805],{"class":90},[52,152488,152489],{"class":622},".__balance\n",[52,152491,152492],{"class":54,"line":136},[52,152493,116],{"emptyLinePlaceholder":115},[52,152495,152496,152498,152501],{"class":54,"line":141},[52,152497,33733],{"class":160},[52,152499,152500],{"class":58}," deposit",[52,152502,152503],{"class":622},"(self, money):\n",[52,152505,152506,152508,152511,152513,152515],{"class":54,"line":146},[52,152507,5458],{"class":160},[52,152509,152510],{"class":622}," money ",[52,152512,4566],{"class":160},[52,152514,7052],{"class":90},[52,152516,6698],{"class":622},[52,152518,152519,152521,152523,152526],{"class":54,"line":152},[52,152520,37582],{"class":90},[52,152522,3121],{"class":622},[52,152524,152525],{"class":62},"\"存款金额必须大于0\"",[52,152527,170],{"class":622},[52,152529,152530],{"class":54,"line":157},[52,152531,152532],{"class":160},"            return\n",[52,152534,152535,152537,152539,152541],{"class":54,"line":173},[52,152536,33777],{"class":90},[52,152538,152462],{"class":622},[52,152540,12433],{"class":160},[52,152542,152543],{"class":622}," money\n",[52,152545,152546],{"class":54,"line":178},[52,152547,116],{"emptyLinePlaceholder":115},[52,152549,152550,152552,152555],{"class":54,"line":184},[52,152551,33733],{"class":160},[52,152553,152554],{"class":58}," withdraw",[52,152556,152503],{"class":622},[52,152558,152559,152561,152563,152565,152567],{"class":54,"line":189},[52,152560,5458],{"class":160},[52,152562,152510],{"class":622},[52,152564,4566],{"class":160},[52,152566,7052],{"class":90},[52,152568,6698],{"class":622},[52,152570,152571,152573,152575,152578],{"class":54,"line":201},[52,152572,37582],{"class":90},[52,152574,3121],{"class":622},[52,152576,152577],{"class":62},"\"取款金额必须大于0\"",[52,152579,170],{"class":622},[52,152581,152582],{"class":54,"line":206},[52,152583,152532],{"class":160},[52,152585,152586,152588,152590,152592,152594],{"class":54,"line":224},[52,152587,5458],{"class":160},[52,152589,152510],{"class":622},[52,152591,4072],{"class":160},[52,152593,41805],{"class":90},[52,152595,152596],{"class":622},".__balance:\n",[52,152598,152599,152601,152603,152606],{"class":54,"line":229},[52,152600,37582],{"class":90},[52,152602,3121],{"class":622},[52,152604,152605],{"class":62},"\"余额不足\"",[52,152607,170],{"class":622},[52,152609,152610],{"class":54,"line":241},[52,152611,152532],{"class":160},[52,152613,152614,152616,152618,152621],{"class":54,"line":246},[52,152615,33777],{"class":90},[52,152617,152462],{"class":622},[52,152619,152620],{"class":160},"-=",[52,152622,152543],{"class":622},[52,152624,152625],{"class":54,"line":252},[52,152626,116],{"emptyLinePlaceholder":115},[52,152628,152629],{"class":54,"line":257},[52,152630,116],{"emptyLinePlaceholder":115},[52,152632,152633,152636,152638,152641,152643,152645,152647],{"class":54,"line":266},[52,152634,152635],{"class":622},"account ",[52,152637,2099],{"class":160},[52,152639,152640],{"class":622}," Account(",[52,152642,152256],{"class":62},[52,152644,15391],{"class":622},[52,152646,9366],{"class":90},[52,152648,170],{"class":622},[52,152650,152651,152654,152656],{"class":54,"line":4722},[52,152652,152653],{"class":622},"account.deposit(",[52,152655,4689],{"class":90},[52,152657,170],{"class":622},[52,152659,152660,152663,152665],{"class":54,"line":4727},[52,152661,152662],{"class":622},"account.withdraw(",[52,152664,3424],{"class":90},[52,152666,170],{"class":622},[52,152668,152669,152671],{"class":54,"line":4741},[52,152670,33347],{"class":90},[52,152672,152673],{"class":622},"(account.get_balance())\n",[274,152675,152676],{},"封装的意义是避免外部随意修改内部状态。",[14,152678,152680],{"id":152679},"_118-继承","11.8 继承",[274,152682,152683],{},"继承可以让子类复用父类的属性和方法。",[19,152685,152687],{"className":33310,"code":152686,"language":33312,"meta":28,"style":28},"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",[26,152688,152689,152698,152707,152718,152722,152726,152740,152749,152760,152764,152768,152778,152783],{"__ignoreMap":28},[52,152690,152691,152693,152696],{"class":54,"line":55},[52,152692,17650],{"class":160},[52,152694,152695],{"class":58}," Animal",[52,152697,6698],{"class":622},[52,152699,152700,152702,152705],{"class":54,"line":69},[52,152701,33733],{"class":160},[52,152703,152704],{"class":58}," eat",[52,152706,33739],{"class":622},[52,152708,152709,152711,152713,152716],{"class":54,"line":82},[52,152710,35383],{"class":90},[52,152712,3121],{"class":622},[52,152714,152715],{"class":62},"\"吃东西\"",[52,152717,170],{"class":622},[52,152719,152720],{"class":54,"line":97},[52,152721,116],{"emptyLinePlaceholder":115},[52,152723,152724],{"class":54,"line":112},[52,152725,116],{"emptyLinePlaceholder":115},[52,152727,152728,152730,152733,152735,152738],{"class":54,"line":119},[52,152729,17650],{"class":160},[52,152731,152732],{"class":58}," Dog",[52,152734,3121],{"class":622},[52,152736,152737],{"class":58},"Animal",[52,152739,33718],{"class":622},[52,152741,152742,152744,152747],{"class":54,"line":130},[52,152743,33733],{"class":160},[52,152745,152746],{"class":58}," bark",[52,152748,33739],{"class":622},[52,152750,152751,152753,152755,152758],{"class":54,"line":136},[52,152752,35383],{"class":90},[52,152754,3121],{"class":622},[52,152756,152757],{"class":62},"\"汪汪\"",[52,152759,170],{"class":622},[52,152761,152762],{"class":54,"line":141},[52,152763,116],{"emptyLinePlaceholder":115},[52,152765,152766],{"class":54,"line":146},[52,152767,116],{"emptyLinePlaceholder":115},[52,152769,152770,152773,152775],{"class":54,"line":152},[52,152771,152772],{"class":622},"dog ",[52,152774,2099],{"class":160},[52,152776,152777],{"class":622}," Dog()\n",[52,152779,152780],{"class":54,"line":157},[52,152781,152782],{"class":622},"dog.eat()\n",[52,152784,152785],{"class":54,"line":173},[52,152786,152787],{"class":622},"dog.bark()\n",[274,152789,152790],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152792,152794],{"id":152793},"_119-方法重写","11.9 方法重写",[19,152796,152798],{"className":33310,"code":152797,"language":33312,"meta":28,"style":28},"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",[26,152799,152800,152808,152817,152828,152832,152836,152848,152856,152866,152870,152874,152887,152895,152906,152910,152914,152922,152932,152936,152941],{"__ignoreMap":28},[52,152801,152802,152804,152806],{"class":54,"line":55},[52,152803,17650],{"class":160},[52,152805,152695],{"class":58},[52,152807,6698],{"class":622},[52,152809,152810,152812,152815],{"class":54,"line":69},[52,152811,33733],{"class":160},[52,152813,152814],{"class":58}," speak",[52,152816,33739],{"class":622},[52,152818,152819,152821,152823,152826],{"class":54,"line":82},[52,152820,35383],{"class":90},[52,152822,3121],{"class":622},[52,152824,152825],{"class":62},"\"动物叫\"",[52,152827,170],{"class":622},[52,152829,152830],{"class":54,"line":97},[52,152831,116],{"emptyLinePlaceholder":115},[52,152833,152834],{"class":54,"line":112},[52,152835,116],{"emptyLinePlaceholder":115},[52,152837,152838,152840,152842,152844,152846],{"class":54,"line":119},[52,152839,17650],{"class":160},[52,152841,152732],{"class":58},[52,152843,3121],{"class":622},[52,152845,152737],{"class":58},[52,152847,33718],{"class":622},[52,152849,152850,152852,152854],{"class":54,"line":130},[52,152851,33733],{"class":160},[52,152853,152814],{"class":58},[52,152855,33739],{"class":622},[52,152857,152858,152860,152862,152864],{"class":54,"line":136},[52,152859,35383],{"class":90},[52,152861,3121],{"class":622},[52,152863,152757],{"class":62},[52,152865,170],{"class":622},[52,152867,152868],{"class":54,"line":141},[52,152869,116],{"emptyLinePlaceholder":115},[52,152871,152872],{"class":54,"line":146},[52,152873,116],{"emptyLinePlaceholder":115},[52,152875,152876,152878,152881,152883,152885],{"class":54,"line":152},[52,152877,17650],{"class":160},[52,152879,152880],{"class":58}," Cat",[52,152882,3121],{"class":622},[52,152884,152737],{"class":58},[52,152886,33718],{"class":622},[52,152888,152889,152891,152893],{"class":54,"line":157},[52,152890,33733],{"class":160},[52,152892,152814],{"class":58},[52,152894,33739],{"class":622},[52,152896,152897,152899,152901,152904],{"class":54,"line":173},[52,152898,35383],{"class":90},[52,152900,3121],{"class":622},[52,152902,152903],{"class":62},"\"喵喵\"",[52,152905,170],{"class":622},[52,152907,152908],{"class":54,"line":178},[52,152909,116],{"emptyLinePlaceholder":115},[52,152911,152912],{"class":54,"line":184},[52,152913,116],{"emptyLinePlaceholder":115},[52,152915,152916,152918,152920],{"class":54,"line":189},[52,152917,152772],{"class":622},[52,152919,2099],{"class":160},[52,152921,152777],{"class":622},[52,152923,152924,152927,152929],{"class":54,"line":201},[52,152925,152926],{"class":622},"cat ",[52,152928,2099],{"class":160},[52,152930,152931],{"class":622}," Cat()\n",[52,152933,152934],{"class":54,"line":206},[52,152935,116],{"emptyLinePlaceholder":115},[52,152937,152938],{"class":54,"line":224},[52,152939,152940],{"class":622},"dog.speak()\n",[52,152942,152943],{"class":54,"line":229},[52,152944,152945],{"class":622},"cat.speak()\n",[14,152947,152949],{"id":152948},"_1110-super","11.10 super",[274,152951,152952,152953,152956],{},"子类可以通过 ",[26,152954,152955],{},"super()"," 调用父类方法。",[19,152958,152960],{"className":33310,"code":152959,"language":33312,"meta":28,"style":28},"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",[26,152961,152962,152970,152979,152989,152993,152997,153009,153018,153029,153039,153043,153047,153063],{"__ignoreMap":28},[52,152963,152964,152966,152968],{"class":54,"line":55},[52,152965,17650],{"class":160},[52,152967,18525],{"class":58},[52,152969,6698],{"class":622},[52,152971,152972,152974,152976],{"class":54,"line":69},[52,152973,33733],{"class":160},[52,152975,33736],{"class":90},[52,152977,152978],{"class":622},"(self, name):\n",[52,152980,152981,152983,152985,152987],{"class":54,"line":82},[52,152982,33777],{"class":90},[52,152984,152158],{"class":622},[52,152986,2099],{"class":160},[52,152988,152163],{"class":622},[52,152990,152991],{"class":54,"line":97},[52,152992,116],{"emptyLinePlaceholder":115},[52,152994,152995],{"class":54,"line":112},[52,152996,116],{"emptyLinePlaceholder":115},[52,152998,152999,153001,153003,153005,153007],{"class":54,"line":119},[52,153000,17650],{"class":160},[52,153002,10854],{"class":58},[52,153004,3121],{"class":622},[52,153006,22001],{"class":58},[52,153008,33718],{"class":622},[52,153010,153011,153013,153015],{"class":54,"line":130},[52,153012,33733],{"class":160},[52,153014,33736],{"class":90},[52,153016,153017],{"class":622},"(self, name, score):\n",[52,153019,153020,153022,153024,153026],{"class":54,"line":136},[52,153021,33749],{"class":90},[52,153023,20217],{"class":622},[52,153025,33761],{"class":90},[52,153027,153028],{"class":622},"(name)\n",[52,153030,153031,153033,153035,153037],{"class":54,"line":141},[52,153032,33777],{"class":90},[52,153034,152182],{"class":622},[52,153036,2099],{"class":160},[52,153038,4557],{"class":622},[52,153040,153041],{"class":54,"line":146},[52,153042,116],{"emptyLinePlaceholder":115},[52,153044,153045],{"class":54,"line":152},[52,153046,116],{"emptyLinePlaceholder":115},[52,153048,153049,153051,153053,153055,153057,153059,153061],{"class":54,"line":157},[52,153050,151849],{"class":622},[52,153052,2099],{"class":160},[52,153054,152253],{"class":622},[52,153056,152256],{"class":62},[52,153058,15391],{"class":622},[52,153060,4100],{"class":90},[52,153062,170],{"class":622},[52,153064,153065,153067],{"class":54,"line":173},[52,153066,33347],{"class":90},[52,153068,153069],{"class":622},"(student.name, student.score)\n",[14,153071,153073],{"id":153072},"_1111-多态","11.11 多态",[274,153075,153076],{},"多态指不同对象响应同一个方法，表现出不同结果。",[19,153078,153080],{"className":33310,"code":153079,"language":33312,"meta":28,"style":28},"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",[26,153081,153082,153090,153098,153108,153112,153116,153124,153132,153142,153146,153150,153160,153165,153169,153173,153178],{"__ignoreMap":28},[52,153083,153084,153086,153088],{"class":54,"line":55},[52,153085,17650],{"class":160},[52,153087,152732],{"class":58},[52,153089,6698],{"class":622},[52,153091,153092,153094,153096],{"class":54,"line":69},[52,153093,33733],{"class":160},[52,153095,152814],{"class":58},[52,153097,33739],{"class":622},[52,153099,153100,153102,153104,153106],{"class":54,"line":82},[52,153101,35383],{"class":90},[52,153103,3121],{"class":622},[52,153105,152757],{"class":62},[52,153107,170],{"class":622},[52,153109,153110],{"class":54,"line":97},[52,153111,116],{"emptyLinePlaceholder":115},[52,153113,153114],{"class":54,"line":112},[52,153115,116],{"emptyLinePlaceholder":115},[52,153117,153118,153120,153122],{"class":54,"line":119},[52,153119,17650],{"class":160},[52,153121,152880],{"class":58},[52,153123,6698],{"class":622},[52,153125,153126,153128,153130],{"class":54,"line":130},[52,153127,33733],{"class":160},[52,153129,152814],{"class":58},[52,153131,33739],{"class":622},[52,153133,153134,153136,153138,153140],{"class":54,"line":136},[52,153135,35383],{"class":90},[52,153137,3121],{"class":622},[52,153139,152903],{"class":62},[52,153141,170],{"class":622},[52,153143,153144],{"class":54,"line":141},[52,153145,116],{"emptyLinePlaceholder":115},[52,153147,153148],{"class":54,"line":146},[52,153149,116],{"emptyLinePlaceholder":115},[52,153151,153152,153154,153157],{"class":54,"line":152},[52,153153,34879],{"class":160},[52,153155,153156],{"class":58}," make_sound",[52,153158,153159],{"class":622},"(animal):\n",[52,153161,153162],{"class":54,"line":157},[52,153163,153164],{"class":622},"    animal.speak()\n",[52,153166,153167],{"class":54,"line":173},[52,153168,116],{"emptyLinePlaceholder":115},[52,153170,153171],{"class":54,"line":178},[52,153172,116],{"emptyLinePlaceholder":115},[52,153174,153175],{"class":54,"line":184},[52,153176,153177],{"class":622},"make_sound(Dog())\n",[52,153179,153180],{"class":54,"line":189},[52,153181,153182],{"class":622},"make_sound(Cat())\n",[274,153184,153185],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153187,153189],{"id":153188},"_1112-类属性和实例属性","11.12 类属性和实例属性",[274,153191,153192],{},"实例属性属于对象：",[19,153194,153196],{"className":33310,"code":153195,"language":33312,"meta":28,"style":28},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[26,153197,153198,153206,153214],{"__ignoreMap":28},[52,153199,153200,153202,153204],{"class":54,"line":55},[52,153201,17650],{"class":160},[52,153203,10854],{"class":58},[52,153205,6698],{"class":622},[52,153207,153208,153210,153212],{"class":54,"line":69},[52,153209,33733],{"class":160},[52,153211,33736],{"class":90},[52,153213,152978],{"class":622},[52,153215,153216,153218,153220,153222],{"class":54,"line":82},[52,153217,33777],{"class":90},[52,153219,152158],{"class":622},[52,153221,2099],{"class":160},[52,153223,152163],{"class":622},[274,153225,153226],{},"类属性属于类，所有对象共享：",[19,153228,153230],{"className":33310,"code":153229,"language":33312,"meta":28,"style":28},"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",[26,153231,153232,153240,153250,153254,153262,153272,153276,153280,153293,153307,153311,153318,153325],{"__ignoreMap":28},[52,153233,153234,153236,153238],{"class":54,"line":55},[52,153235,17650],{"class":160},[52,153237,10854],{"class":58},[52,153239,6698],{"class":622},[52,153241,153242,153245,153247],{"class":54,"line":69},[52,153243,153244],{"class":622},"    school ",[52,153246,2099],{"class":160},[52,153248,153249],{"class":62}," \"黑马学校\"\n",[52,153251,153252],{"class":54,"line":82},[52,153253,116],{"emptyLinePlaceholder":115},[52,153255,153256,153258,153260],{"class":54,"line":97},[52,153257,33733],{"class":160},[52,153259,33736],{"class":90},[52,153261,152978],{"class":622},[52,153263,153264,153266,153268,153270],{"class":54,"line":112},[52,153265,33777],{"class":90},[52,153267,152158],{"class":622},[52,153269,2099],{"class":160},[52,153271,152163],{"class":622},[52,153273,153274],{"class":54,"line":119},[52,153275,116],{"emptyLinePlaceholder":115},[52,153277,153278],{"class":54,"line":130},[52,153279,116],{"emptyLinePlaceholder":115},[52,153281,153282,153285,153287,153289,153291],{"class":54,"line":136},[52,153283,153284],{"class":622},"s1 ",[52,153286,2099],{"class":160},[52,153288,152253],{"class":622},[52,153290,152256],{"class":62},[52,153292,170],{"class":622},[52,153294,153295,153298,153300,153302,153305],{"class":54,"line":141},[52,153296,153297],{"class":622},"s2 ",[52,153299,2099],{"class":160},[52,153301,152253],{"class":622},[52,153303,153304],{"class":62},"\"小红\"",[52,153306,170],{"class":622},[52,153308,153309],{"class":54,"line":146},[52,153310,116],{"emptyLinePlaceholder":115},[52,153312,153313,153315],{"class":54,"line":152},[52,153314,33347],{"class":90},[52,153316,153317],{"class":622},"(s1.school)\n",[52,153319,153320,153322],{"class":54,"line":157},[52,153321,33347],{"class":90},[52,153323,153324],{"class":622},"(s2.school)\n",[52,153326,153327,153329],{"class":54,"line":173},[52,153328,33347],{"class":90},[52,153330,153331],{"class":622},"(Student.school)\n",[274,153333,153334],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153336,153338],{"id":153337},"_1113-类方法和静态方法","11.13 类方法和静态方法",[30,153340,153342],{"id":153341},"_11131-类方法","11.13.1 类方法",[274,153344,153345,153346,153349,153350,31319],{},"类方法使用 ",[26,153347,153348],{},"@classmethod","，第一个参数通常是 ",[26,153351,153352],{},"cls",[19,153354,153356],{"className":33310,"code":153355,"language":33312,"meta":28,"style":28},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[26,153357,153358,153366,153374,153378,153386,153396,153406,153410,153414],{"__ignoreMap":28},[52,153359,153360,153362,153364],{"class":54,"line":55},[52,153361,17650],{"class":160},[52,153363,10854],{"class":58},[52,153365,6698],{"class":622},[52,153367,153368,153370,153372],{"class":54,"line":69},[52,153369,153244],{"class":622},[52,153371,2099],{"class":160},[52,153373,153249],{"class":62},[52,153375,153376],{"class":54,"line":82},[52,153377,116],{"emptyLinePlaceholder":115},[52,153379,153380,153383],{"class":54,"line":97},[52,153381,153382],{"class":58},"    @",[52,153384,153385],{"class":90},"classmethod\n",[52,153387,153388,153390,153393],{"class":54,"line":112},[52,153389,33733],{"class":160},[52,153391,153392],{"class":58}," get_school",[52,153394,153395],{"class":622},"(cls):\n",[52,153397,153398,153400,153403],{"class":54,"line":119},[52,153399,17708],{"class":160},[52,153401,153402],{"class":90}," cls",[52,153404,153405],{"class":622},".school\n",[52,153407,153408],{"class":54,"line":130},[52,153409,116],{"emptyLinePlaceholder":115},[52,153411,153412],{"class":54,"line":136},[52,153413,116],{"emptyLinePlaceholder":115},[52,153415,153416,153418],{"class":54,"line":141},[52,153417,33347],{"class":90},[52,153419,153420],{"class":622},"(Student.get_school())\n",[30,153422,153424],{"id":153423},"_11132-静态方法","11.13.2 静态方法",[274,153426,153427,153428,153431],{},"静态方法使用 ",[26,153429,153430],{},"@staticmethod","，不需要访问实例和类。",[19,153433,153435],{"className":33310,"code":153434,"language":33312,"meta":28,"style":28},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[26,153436,153437,153446,153453,153462,153473,153477,153481],{"__ignoreMap":28},[52,153438,153439,153441,153444],{"class":54,"line":55},[52,153440,17650],{"class":160},[52,153442,153443],{"class":58}," MathUtils",[52,153445,6698],{"class":622},[52,153447,153448,153450],{"class":54,"line":69},[52,153449,153382],{"class":58},[52,153451,153452],{"class":90},"staticmethod\n",[52,153454,153455,153457,153459],{"class":54,"line":82},[52,153456,33733],{"class":160},[52,153458,2018],{"class":58},[52,153460,153461],{"class":622},"(a, b):\n",[52,153463,153464,153466,153468,153470],{"class":54,"line":97},[52,153465,17708],{"class":160},[52,153467,13825],{"class":622},[52,153469,3593],{"class":160},[52,153471,153472],{"class":622}," b\n",[52,153474,153475],{"class":54,"line":112},[52,153476,116],{"emptyLinePlaceholder":115},[52,153478,153479],{"class":54,"line":119},[52,153480,116],{"emptyLinePlaceholder":115},[52,153482,153483,153485,153488,153490,153492,153494],{"class":54,"line":130},[52,153484,33347],{"class":90},[52,153486,153487],{"class":622},"(MathUtils.add(",[52,153489,3332],{"class":90},[52,153491,15391],{"class":622},[52,153493,3194],{"class":90},[52,153495,33429],{"class":622},[274,153497,153498],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153500,153502],{"id":153501},"_1114-dataclass","11.14 dataclass",[274,153504,153505,153508],{},[26,153506,153507],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[19,153510,153512],{"className":33310,"code":153511,"language":33312,"meta":28,"style":28},"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",[26,153513,153514,153526,153530,153534,153539,153547,153555,153563,153571,153575,153579,153599],{"__ignoreMap":28},[52,153515,153516,153518,153521,153523],{"class":54,"line":55},[52,153517,33669],{"class":160},[52,153519,153520],{"class":622}," dataclasses ",[52,153522,33324],{"class":160},[52,153524,153525],{"class":622}," dataclass\n",[52,153527,153528],{"class":54,"line":69},[52,153529,116],{"emptyLinePlaceholder":115},[52,153531,153532],{"class":54,"line":82},[52,153533,116],{"emptyLinePlaceholder":115},[52,153535,153536],{"class":54,"line":97},[52,153537,153538],{"class":58},"@dataclass\n",[52,153540,153541,153543,153545],{"class":54,"line":112},[52,153542,17650],{"class":160},[52,153544,10854],{"class":58},[52,153546,6698],{"class":622},[52,153548,153549,153552],{"class":54,"line":119},[52,153550,153551],{"class":622},"    name: ",[52,153553,153554],{"class":90},"str\n",[52,153556,153557,153560],{"class":54,"line":130},[52,153558,153559],{"class":622},"    age: ",[52,153561,153562],{"class":90},"int\n",[52,153564,153565,153568],{"class":54,"line":136},[52,153566,153567],{"class":622},"    score: ",[52,153569,153570],{"class":90},"float\n",[52,153572,153573],{"class":54,"line":141},[52,153574,116],{"emptyLinePlaceholder":115},[52,153576,153577],{"class":54,"line":146},[52,153578,116],{"emptyLinePlaceholder":115},[52,153580,153581,153583,153585,153587,153589,153591,153593,153595,153597],{"class":54,"line":152},[52,153582,151849],{"class":622},[52,153584,2099],{"class":160},[52,153586,152253],{"class":622},[52,153588,152256],{"class":62},[52,153590,15391],{"class":622},[52,153592,3762],{"class":90},[52,153594,15391],{"class":622},[52,153596,4100],{"class":90},[52,153598,170],{"class":622},[52,153600,153601,153603],{"class":54,"line":157},[52,153602,33347],{"class":90},[52,153604,152410],{"class":622},[274,153606,153607,153608,3327,153610,153613],{},"它会自动生成 ",[26,153609,33761],{},[26,153611,153612],{},"__repr__"," 等方法。适合数据模型类。",[14,153615,153617],{"id":153616},"_1115-小案例学生类","11.15 小案例：学生类",[19,153619,153621],{"className":33310,"code":153620,"language":33312,"meta":28,"style":28},"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",[26,153622,153623,153631,153640,153652,153662,153672,153682,153686,153695,153708,153712,153721,153727,153739,153751,153763,153775,153779,153783,153789,153799,153808,153818,153826,153834,153843,153847,153851,153859,153895,153899,153903,153928,153935],{"__ignoreMap":28},[52,153624,153625,153627,153629],{"class":54,"line":55},[52,153626,17650],{"class":160},[52,153628,10854],{"class":58},[52,153630,6698],{"class":622},[52,153632,153633,153635,153637],{"class":54,"line":69},[52,153634,33733],{"class":160},[52,153636,33736],{"class":90},[52,153638,153639],{"class":622},"(self, student_id, name, age, score):\n",[52,153641,153642,153644,153647,153649],{"class":54,"line":82},[52,153643,33777],{"class":90},[52,153645,153646],{"class":622},".student_id ",[52,153648,2099],{"class":160},[52,153650,153651],{"class":622}," student_id\n",[52,153653,153654,153656,153658,153660],{"class":54,"line":97},[52,153655,33777],{"class":90},[52,153657,152158],{"class":622},[52,153659,2099],{"class":160},[52,153661,152163],{"class":622},[52,153663,153664,153666,153668,153670],{"class":54,"line":112},[52,153665,33777],{"class":90},[52,153667,152170],{"class":622},[52,153669,2099],{"class":160},[52,153671,152175],{"class":622},[52,153673,153674,153676,153678,153680],{"class":54,"line":119},[52,153675,33777],{"class":90},[52,153677,152182],{"class":622},[52,153679,2099],{"class":160},[52,153681,4557],{"class":622},[52,153683,153684],{"class":54,"line":130},[52,153685,116],{"emptyLinePlaceholder":115},[52,153687,153688,153690,153693],{"class":54,"line":136},[52,153689,33733],{"class":160},[52,153691,153692],{"class":58}," is_passed",[52,153694,33739],{"class":622},[52,153696,153697,153699,153701,153703,153705],{"class":54,"line":141},[52,153698,17708],{"class":160},[52,153700,41805],{"class":90},[52,153702,152182],{"class":622},[52,153704,4677],{"class":160},[52,153706,153707],{"class":90}," 60\n",[52,153709,153710],{"class":54,"line":146},[52,153711,116],{"emptyLinePlaceholder":115},[52,153713,153714,153716,153719],{"class":54,"line":152},[52,153715,33733],{"class":160},[52,153717,153718],{"class":58}," to_dict",[52,153720,33739],{"class":622},[52,153722,153723,153725],{"class":54,"line":157},[52,153724,17708],{"class":160},[52,153726,18528],{"class":622},[52,153728,153729,153732,153734,153736],{"class":54,"line":173},[52,153730,153731],{"class":62},"            \"student_id\"",[52,153733,54368],{"class":622},[52,153735,33755],{"class":90},[52,153737,153738],{"class":622},".student_id,\n",[52,153740,153741,153744,153746,153748],{"class":54,"line":178},[52,153742,153743],{"class":62},"            \"name\"",[52,153745,54368],{"class":622},[52,153747,33755],{"class":90},[52,153749,153750],{"class":622},".name,\n",[52,153752,153753,153756,153758,153760],{"class":54,"line":184},[52,153754,153755],{"class":62},"            \"age\"",[52,153757,54368],{"class":622},[52,153759,33755],{"class":90},[52,153761,153762],{"class":622},".age,\n",[52,153764,153765,153768,153770,153772],{"class":54,"line":189},[52,153766,153767],{"class":62},"            \"score\"",[52,153769,54368],{"class":622},[52,153771,33755],{"class":90},[52,153773,153774],{"class":622},".score,\n",[52,153776,153777],{"class":54,"line":201},[52,153778,5490],{"class":622},[52,153780,153781],{"class":54,"line":206},[52,153782,116],{"emptyLinePlaceholder":115},[52,153784,153785,153787],{"class":54,"line":224},[52,153786,153382],{"class":58},[52,153788,153385],{"class":90},[52,153790,153791,153793,153796],{"class":54,"line":229},[52,153792,33733],{"class":160},[52,153794,153795],{"class":58}," from_dict",[52,153797,153798],{"class":622},"(cls, data):\n",[52,153800,153801,153803,153805],{"class":54,"line":241},[52,153802,17708],{"class":160},[52,153804,153402],{"class":90},[52,153806,153807],{"class":622},"(\n",[52,153809,153810,153813,153816],{"class":54,"line":246},[52,153811,153812],{"class":622},"            data[",[52,153814,153815],{"class":62},"\"student_id\"",[52,153817,90764],{"class":622},[52,153819,153820,153822,153824],{"class":54,"line":252},[52,153821,153812],{"class":622},[52,153823,65609],{"class":62},[52,153825,90764],{"class":622},[52,153827,153828,153830,153832],{"class":54,"line":257},[52,153829,153812],{"class":622},[52,153831,72053],{"class":62},[52,153833,90764],{"class":622},[52,153835,153836,153838,153841],{"class":54,"line":266},[52,153837,153812],{"class":622},[52,153839,153840],{"class":62},"\"score\"",[52,153842,90764],{"class":622},[52,153844,153845],{"class":54,"line":4722},[52,153846,41058],{"class":622},[52,153848,153849],{"class":54,"line":4727},[52,153850,116],{"emptyLinePlaceholder":115},[52,153852,153853,153855,153857],{"class":54,"line":4741},[52,153854,33733],{"class":160},[52,153856,152349],{"class":90},[52,153858,33739],{"class":622},[52,153860,153861,153863,153865,153867,153869,153872,153874,153877,153879,153881,153883,153885,153887,153889,153891,153893],{"class":54,"line":4746},[52,153862,17708],{"class":160},[52,153864,152358],{"class":160},[52,153866,3364],{"class":62},[52,153868,151820],{"class":90},[52,153870,153871],{"class":622},".student_id",[52,153873,4058],{"class":90},[52,153875,153876],{"class":90}," {self",[52,153878,83229],{"class":622},[52,153880,4058],{"class":90},[52,153882,153876],{"class":90},[52,153884,83241],{"class":622},[52,153886,4058],{"class":90},[52,153888,153876],{"class":90},[52,153890,152230],{"class":622},[52,153892,4058],{"class":90},[52,153894,28079],{"class":62},[52,153896,153897],{"class":54,"line":5538},[52,153898,116],{"emptyLinePlaceholder":115},[52,153900,153901],{"class":54,"line":5552},[52,153902,116],{"emptyLinePlaceholder":115},[52,153904,153905,153907,153909,153911,153914,153916,153918,153920,153922,153924,153926],{"class":54,"line":5560},[52,153906,151849],{"class":622},[52,153908,2099],{"class":160},[52,153910,152253],{"class":622},[52,153912,153913],{"class":62},"\"001\"",[52,153915,15391],{"class":622},[52,153917,152256],{"class":62},[52,153919,15391],{"class":622},[52,153921,3762],{"class":90},[52,153923,15391],{"class":622},[52,153925,4100],{"class":90},[52,153927,170],{"class":622},[52,153929,153930,153932],{"class":54,"line":5565},[52,153931,33347],{"class":90},[52,153933,153934],{"class":622},"(student.is_passed())\n",[52,153936,153937,153939],{"class":54,"line":5571},[52,153938,33347],{"class":90},[52,153940,153941],{"class":622},"(student.to_dict())\n",[274,153943,153944,103940,153947,153950],{},[26,153945,153946],{},"to_dict()",[26,153948,153949],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153952,153954],{"id":153953},"_1116-易错点","11.16 易错点",[1070,153956,153957,153963,153969,153974,153977,153980],{},[1073,153958,153959,153960,31319],{},"类名推荐使用大驼峰，如 ",[26,153961,153962],{},"StudentManager",[1073,153964,153965,153966,153968],{},"方法第一个参数必须写 ",[26,153967,33755],{},"，调用时不用传。",[1073,153970,153971,153973],{},[26,153972,33761],{}," 不是普通方法，它在创建对象时自动执行。",[1073,153975,153976],{},"私有属性不是绝对安全，只是约定和名称改写。",[1073,153978,153979],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[1073,153981,153982],{},"类中方法太多时，说明职责可能过重。",[14,153984,153986],{"id":153985},"_1117-本章练习","11.17 本章练习",[1070,153988,153989,153995,154001,154006,154019],{},[1073,153990,153991,153992,153994],{},"定义 ",[26,153993,151936],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[1073,153996,153991,153997,154000],{},[26,153998,153999],{},"Account"," 类，实现存款、取款、查询余额。",[1073,154002,153991,154003,154005],{},[26,154004,20182],{}," 类，计算圆的周长和面积。",[1073,154007,153991,154008,3327,154011,154014,154015,154018],{},[26,154009,154010],{},"Dog",[26,154012,154013],{},"Cat"," 类，并用同一个函数调用它们的 ",[26,154016,154017],{},"speak()"," 方法。",[1073,154020,107286,154021,154023,154024,31319],{},[26,154022,153507],{}," 定义一个商品类 ",[26,154025,154026],{},"Product",[3015,154028,154029],{},"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":28,"searchDepth":69,"depth":69,"links":154031},[154032,154033,154034,154035,154036,154037,154039,154040,154041,154042,154043,154044,154045,154049,154050,154051,154052],{"id":151700,"depth":69,"text":151701},{"id":151883,"depth":69,"text":151884},{"id":151947,"depth":69,"text":151948},{"id":152024,"depth":69,"text":152025},{"id":152123,"depth":69,"text":152124},{"id":152287,"depth":69,"text":154038},"11.6 str",{"id":152413,"depth":69,"text":152414},{"id":152679,"depth":69,"text":152680},{"id":152793,"depth":69,"text":152794},{"id":152948,"depth":69,"text":152949},{"id":153072,"depth":69,"text":153073},{"id":153188,"depth":69,"text":153189},{"id":153337,"depth":69,"text":153338,"children":154046},[154047,154048],{"id":153341,"depth":82,"text":153342},{"id":153423,"depth":82,"text":153424},{"id":153501,"depth":69,"text":153502},{"id":153616,"depth":69,"text":153617},{"id":153953,"depth":69,"text":153954},{"id":153985,"depth":69,"text":153986},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151692,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":154059,"title":154060,"body":154061,"description":3046,"extension":3047,"meta":157374,"navigation":115,"path":157375,"seo":157376,"stem":157377,"__hash__":157378},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":154062,"toc":157350},[154063,154066,154070,154073,154076,154105,154108,154116,154120,154124,154127,154150,154153,154159,154163,155609,155612,155633,155637,155640,155652,155655,155839,155842,155968,155971,155975,155979,156115,156119,156205,156209,156291,156295,156332,156336,156525,156529,156532,156762,156766,156769,156950,156953,156957,156960,156966,156969,156995,156999,157002,157016,157019,157044,157047,157061,157064,157081,157084,157101,157104,157121,157125,157151,157155,157178,157182,157185,157187,157193,157195,157216,157219,157225,157231,157235,157238,157314,157317,157321,157347],[10,154064,154060],{"id":154065},"_12-综合案例与复习路线",[14,154067,154069],{"id":154068},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[274,154071,154072],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[274,154074,154075],{},"一个合格的入门综合项目最好覆盖：",[1070,154077,154078,154081,154084,154087,154090,154093,154096,154099,154102],{},[1073,154079,154080],{},"输入输出。",[1073,154082,154083],{},"判断和循环。",[1073,154085,154086],{},"函数拆分。",[1073,154088,154089],{},"列表、字典等容器。",[1073,154091,154092],{},"文件持久化。",[1073,154094,154095],{},"异常处理。",[1073,154097,154098],{},"模块拆分。",[1073,154100,154101],{},"可选：面向对象。",[1073,154103,154104],{},"可选：数据可视化。",[274,154106,154107],{},"本章整理两个方向：",[1070,154109,154110,154113],{},[1073,154111,154112],{},"学生管理系统。",[1073,154114,154115],{},"销售数据统计和可视化。",[14,154117,154119],{"id":154118},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[30,154121,154123],{"id":154122},"_1221-需求","12.2.1 需求",[274,154125,154126],{},"实现一个命令行学生管理系统：",[1070,154128,154129,154132,154135,154138,154141,154144,154147],{},[1073,154130,154131],{},"添加学生。",[1073,154133,154134],{},"删除学生。",[1073,154136,154137],{},"修改学生。",[1073,154139,154140],{},"查询学生。",[1073,154142,154143],{},"显示所有学生。",[1073,154145,154146],{},"保存到 JSON 文件。",[1073,154148,154149],{},"程序启动时自动读取 JSON 文件。",[274,154151,154152],{},"学生字段：",[19,154154,154157],{"className":154155,"code":154156,"language":24,"meta":28},[22],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[26,154158,154156],{"__ignoreMap":28},[14,154160,154162],{"id":154161},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[19,154164,154166],{"className":33310,"code":154165,"language":33312,"meta":28,"style":28},"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",[26,154167,154168,154174,154184,154188,154202,154206,154210,154219,154231,154237,154241,154247,154278,154288,154295,154306,154312,154316,154320,154330,154361,154387,154391,154395,154404,154415,154426,154437,154448,154459,154470,154481,154485,154489,154499,154511,154527,154534,154541,154545,154549,154559,154567,154574,154587,154597,154608,154612,154616,154625,154633,154639,154651,154659,154670,154674,154678,154687,154703,154707,154714,154725,154730,154734,154750,154765,154780,154784,154789,154797,154805,154813,154821,154825,154830,154841,154845,154849,154858,154873,154883,154887,154899,154910,154914,154918,154923,154927,154938,154942,154946,154955,154970,154978,154982,154994,155004,155008,155012,155027,155040,155053,155057,155070,155082,155094,155098,155102,155113,155117,155121,155130,155145,155153,155157,155169,155179,155183,155187,155192,155196,155200,155210,155216,155238,155257,155276,155295,155300,155304,155308,155317,155325,155336,155340,155344,155370,155380,155385,155389,155393,155401,155411,155415,155423,155428,155444,155448,155462,155467,155481,155486,155499,155504,155517,155522,155535,155540,155553,155564,155568,155574,155585,155589,155593,155605],{"__ignoreMap":28},[52,154169,154170,154172],{"class":54,"line":55},[52,154171,33324],{"class":160},[52,154173,149459],{"class":622},[52,154175,154176,154178,154180,154182],{"class":54,"line":69},[52,154177,33669],{"class":160},[52,154179,111231],{"class":622},[52,154181,33324],{"class":160},[52,154183,111236],{"class":622},[52,154185,154186],{"class":54,"line":82},[52,154187,116],{"emptyLinePlaceholder":115},[52,154189,154190,154193,154195,154197,154200],{"class":54,"line":97},[52,154191,154192],{"class":90},"DATA_FILE",[52,154194,16520],{"class":160},[52,154196,111465],{"class":622},[52,154198,154199],{"class":62},"\"students.json\"",[52,154201,170],{"class":622},[52,154203,154204],{"class":54,"line":112},[52,154205,116],{"emptyLinePlaceholder":115},[52,154207,154208],{"class":54,"line":119},[52,154209,116],{"emptyLinePlaceholder":115},[52,154211,154212,154214,154217],{"class":54,"line":130},[52,154213,34879],{"class":160},[52,154215,154216],{"class":58}," load_students",[52,154218,34885],{"class":622},[52,154220,154221,154223,154225,154228],{"class":54,"line":136},[52,154222,6060],{"class":160},[52,154224,41862],{"class":160},[52,154226,154227],{"class":90}," DATA_FILE",[52,154229,154230],{"class":622},".exists():\n",[52,154232,154233,154235],{"class":54,"line":141},[52,154234,17708],{"class":160},[52,154236,54769],{"class":622},[52,154238,154239],{"class":54,"line":146},[52,154240,116],{"emptyLinePlaceholder":115},[52,154242,154243,154245],{"class":54,"line":152},[52,154244,128152],{"class":160},[52,154246,6698],{"class":622},[52,154248,154249,154252,154254,154256,154258,154260,154262,154264,154266,154268,154270,154272,154274,154276],{"class":54,"line":157},[52,154250,154251],{"class":160},"        with",[52,154253,149159],{"class":90},[52,154255,3121],{"class":622},[52,154257,154192],{"class":90},[52,154259,15391],{"class":622},[52,154261,149169],{"class":62},[52,154263,15391],{"class":622},[52,154265,149174],{"class":8172},[52,154267,2099],{"class":160},[52,154269,149179],{"class":62},[52,154271,16670],{"class":622},[52,154273,34315],{"class":160},[52,154275,150521],{"class":8172},[52,154277,6698],{"class":622},[52,154279,154280,154282,154284,154286],{"class":54,"line":173},[52,154281,18688],{"class":160},[52,154283,150532],{"class":622},[52,154285,48286],{"class":8172},[52,154287,170],{"class":622},[52,154289,154290,154292],{"class":54,"line":178},[52,154291,128180],{"class":160},[52,154293,154294],{"class":622}," json.JSONDecodeError:\n",[52,154296,154297,154299,154301,154304],{"class":54,"line":184},[52,154298,35383],{"class":90},[52,154300,3121],{"class":622},[52,154302,154303],{"class":62},"\"数据文件格式错误，已使用空数据启动\"",[52,154305,170],{"class":622},[52,154307,154308,154310],{"class":54,"line":189},[52,154309,17708],{"class":160},[52,154311,54769],{"class":622},[52,154313,154314],{"class":54,"line":201},[52,154315,116],{"emptyLinePlaceholder":115},[52,154317,154318],{"class":54,"line":206},[52,154319,116],{"emptyLinePlaceholder":115},[52,154321,154322,154324,154327],{"class":54,"line":224},[52,154323,34879],{"class":160},[52,154325,154326],{"class":58}," save_students",[52,154328,154329],{"class":622},"(students):\n",[52,154331,154332,154334,154336,154338,154340,154342,154345,154347,154349,154351,154353,154355,154357,154359],{"class":54,"line":229},[52,154333,37110],{"class":160},[52,154335,149159],{"class":90},[52,154337,3121],{"class":622},[52,154339,154192],{"class":90},[52,154341,15391],{"class":622},[52,154343,154344],{"class":62},"\"w\"",[52,154346,15391],{"class":622},[52,154348,149174],{"class":8172},[52,154350,2099],{"class":160},[52,154352,149179],{"class":62},[52,154354,16670],{"class":622},[52,154356,34315],{"class":160},[52,154358,150521],{"class":8172},[52,154360,6698],{"class":622},[52,154362,154363,154366,154368,154370,154372,154374,154376,154378,154381,154383,154385],{"class":54,"line":241},[52,154364,154365],{"class":622},"        json.dump(students, ",[52,154367,48286],{"class":8172},[52,154369,15391],{"class":622},[52,154371,149505],{"class":8172},[52,154373,2099],{"class":160},[52,154375,36919],{"class":90},[52,154377,15391],{"class":622},[52,154379,154380],{"class":8172},"indent",[52,154382,2099],{"class":160},[52,154384,3194],{"class":90},[52,154386,170],{"class":622},[52,154388,154389],{"class":54,"line":246},[52,154390,116],{"emptyLinePlaceholder":115},[52,154392,154393],{"class":54,"line":252},[52,154394,116],{"emptyLinePlaceholder":115},[52,154396,154397,154399,154402],{"class":54,"line":257},[52,154398,34879],{"class":160},[52,154400,154401],{"class":58}," show_menu",[52,154403,34885],{"class":622},[52,154405,154406,154408,154410,154413],{"class":54,"line":266},[52,154407,34231],{"class":90},[52,154409,3121],{"class":622},[52,154411,154412],{"class":62},"\"====== 学生管理系统 ======\"",[52,154414,170],{"class":622},[52,154416,154417,154419,154421,154424],{"class":54,"line":4722},[52,154418,34231],{"class":90},[52,154420,3121],{"class":622},[52,154422,154423],{"class":62},"\"1. 添加学生\"",[52,154425,170],{"class":622},[52,154427,154428,154430,154432,154435],{"class":54,"line":4727},[52,154429,34231],{"class":90},[52,154431,3121],{"class":622},[52,154433,154434],{"class":62},"\"2. 删除学生\"",[52,154436,170],{"class":622},[52,154438,154439,154441,154443,154446],{"class":54,"line":4741},[52,154440,34231],{"class":90},[52,154442,3121],{"class":622},[52,154444,154445],{"class":62},"\"3. 修改学生\"",[52,154447,170],{"class":622},[52,154449,154450,154452,154454,154457],{"class":54,"line":4746},[52,154451,34231],{"class":90},[52,154453,3121],{"class":622},[52,154455,154456],{"class":62},"\"4. 查询学生\"",[52,154458,170],{"class":622},[52,154460,154461,154463,154465,154468],{"class":54,"line":5538},[52,154462,34231],{"class":90},[52,154464,3121],{"class":622},[52,154466,154467],{"class":62},"\"5. 显示所有学生\"",[52,154469,170],{"class":622},[52,154471,154472,154474,154476,154479],{"class":54,"line":5552},[52,154473,34231],{"class":90},[52,154475,3121],{"class":622},[52,154477,154478],{"class":62},"\"0. 退出系统\"",[52,154480,170],{"class":622},[52,154482,154483],{"class":54,"line":5560},[52,154484,116],{"emptyLinePlaceholder":115},[52,154486,154487],{"class":54,"line":5565},[52,154488,116],{"emptyLinePlaceholder":115},[52,154490,154491,154493,154496],{"class":54,"line":5571},[52,154492,34879],{"class":160},[52,154494,154495],{"class":58}," find_student",[52,154497,154498],{"class":622},"(students, student_id):\n",[52,154500,154501,154503,154506,154508],{"class":54,"line":5577},[52,154502,6160],{"class":160},[52,154504,154505],{"class":622}," student ",[52,154507,28988],{"class":160},[52,154509,154510],{"class":622}," students:\n",[52,154512,154513,154515,154518,154520,154522,154524],{"class":54,"line":5582},[52,154514,5458],{"class":160},[52,154516,154517],{"class":622}," student[",[52,154519,153815],{"class":62},[52,154521,7402],{"class":622},[52,154523,5909],{"class":160},[52,154525,154526],{"class":622}," student_id:\n",[52,154528,154529,154531],{"class":54,"line":10904},[52,154530,18688],{"class":160},[52,154532,154533],{"class":622}," student\n",[52,154535,154536,154538],{"class":54,"line":10928},[52,154537,7049],{"class":160},[52,154539,154540],{"class":90}," None\n",[52,154542,154543],{"class":54,"line":10933},[52,154544,116],{"emptyLinePlaceholder":115},[52,154546,154547],{"class":54,"line":10939},[52,154548,116],{"emptyLinePlaceholder":115},[52,154550,154551,154553,154556],{"class":54,"line":10966},[52,154552,34879],{"class":160},[52,154554,154555],{"class":58}," input_int",[52,154557,154558],{"class":622},"(prompt):\n",[52,154560,154561,154563,154565],{"class":54,"line":10971},[52,154562,5213],{"class":160},[52,154564,98220],{"class":90},[52,154566,6698],{"class":622},[52,154568,154569,154572],{"class":54,"line":10977},[52,154570,154571],{"class":160},"        try",[52,154573,6698],{"class":622},[52,154575,154576,154578,154580,154582,154584],{"class":54,"line":10989},[52,154577,18688],{"class":160},[52,154579,5344],{"class":90},[52,154581,3121],{"class":622},[52,154583,56751],{"class":90},[52,154585,154586],{"class":622},"(prompt))\n",[52,154588,154589,154592,154595],{"class":54,"line":11001},[52,154590,154591],{"class":160},"        except",[52,154593,154594],{"class":90}," ValueError",[52,154596,6698],{"class":622},[52,154598,154599,154601,154603,154606],{"class":54,"line":11013},[52,154600,37582],{"class":90},[52,154602,3121],{"class":622},[52,154604,154605],{"class":62},"\"请输入整数\"",[52,154607,170],{"class":622},[52,154609,154610],{"class":54,"line":12672},[52,154611,116],{"emptyLinePlaceholder":115},[52,154613,154614],{"class":54,"line":12697},[52,154615,116],{"emptyLinePlaceholder":115},[52,154617,154618,154620,154623],{"class":54,"line":12720},[52,154619,34879],{"class":160},[52,154621,154622],{"class":58}," input_float",[52,154624,154558],{"class":622},[52,154626,154627,154629,154631],{"class":54,"line":12744},[52,154628,5213],{"class":160},[52,154630,98220],{"class":90},[52,154632,6698],{"class":622},[52,154634,154635,154637],{"class":54,"line":12749},[52,154636,154571],{"class":160},[52,154638,6698],{"class":622},[52,154640,154641,154643,154645,154647,154649],{"class":54,"line":12754},[52,154642,18688],{"class":160},[52,154644,112717],{"class":90},[52,154646,3121],{"class":622},[52,154648,56751],{"class":90},[52,154650,154586],{"class":622},[52,154652,154653,154655,154657],{"class":54,"line":12759},[52,154654,154591],{"class":160},[52,154656,154594],{"class":90},[52,154658,6698],{"class":622},[52,154660,154661,154663,154665,154668],{"class":54,"line":12768},[52,154662,37582],{"class":90},[52,154664,3121],{"class":622},[52,154666,154667],{"class":62},"\"请输入数字\"",[52,154669,170],{"class":622},[52,154671,154672],{"class":54,"line":12773},[52,154673,116],{"emptyLinePlaceholder":115},[52,154675,154676],{"class":54,"line":12779},[52,154677,116],{"emptyLinePlaceholder":115},[52,154679,154680,154682,154685],{"class":54,"line":12800},[52,154681,34879],{"class":160},[52,154683,154684],{"class":58}," add_student",[52,154686,154329],{"class":622},[52,154688,154689,154692,154694,154696,154698,154701],{"class":54,"line":12806},[52,154690,154691],{"class":622},"    student_id ",[52,154693,2099],{"class":160},[52,154695,63535],{"class":90},[52,154697,3121],{"class":622},[52,154699,154700],{"class":62},"\"请输入学号:\"",[52,154702,170],{"class":622},[52,154704,154705],{"class":54,"line":12820},[52,154706,116],{"emptyLinePlaceholder":115},[52,154708,154709,154711],{"class":54,"line":12826},[52,154710,6060],{"class":160},[52,154712,154713],{"class":622}," find_student(students, student_id):\n",[52,154715,154716,154718,154720,154723],{"class":54,"line":12853},[52,154717,35383],{"class":90},[52,154719,3121],{"class":622},[52,154721,154722],{"class":62},"\"学号已存在\"",[52,154724,170],{"class":622},[52,154726,154727],{"class":54,"line":12862},[52,154728,154729],{"class":160},"        return\n",[52,154731,154732],{"class":54,"line":12868},[52,154733,116],{"emptyLinePlaceholder":115},[52,154735,154736,154739,154741,154743,154745,154748],{"class":54,"line":12876},[52,154737,154738],{"class":622},"    name ",[52,154740,2099],{"class":160},[52,154742,63535],{"class":90},[52,154744,3121],{"class":622},[52,154746,154747],{"class":62},"\"请输入姓名:\"",[52,154749,170],{"class":622},[52,154751,154752,154755,154757,154760,154763],{"class":54,"line":12881},[52,154753,154754],{"class":622},"    age ",[52,154756,2099],{"class":160},[52,154758,154759],{"class":622}," input_int(",[52,154761,154762],{"class":62},"\"请输入年龄:\"",[52,154764,170],{"class":622},[52,154766,154767,154770,154772,154775,154778],{"class":54,"line":19560},[52,154768,154769],{"class":622},"    score ",[52,154771,2099],{"class":160},[52,154773,154774],{"class":622}," input_float(",[52,154776,154777],{"class":62},"\"请输入成绩:\"",[52,154779,170],{"class":622},[52,154781,154782],{"class":54,"line":19566},[52,154783,116],{"emptyLinePlaceholder":115},[52,154785,154786],{"class":54,"line":19589},[52,154787,154788],{"class":622},"    students.append({\n",[52,154790,154791,154794],{"class":54,"line":19595},[52,154792,154793],{"class":62},"        \"student_id\"",[52,154795,154796],{"class":622},": student_id,\n",[52,154798,154799,154802],{"class":54,"line":19618},[52,154800,154801],{"class":62},"        \"name\"",[52,154803,154804],{"class":622},": name,\n",[52,154806,154807,154810],{"class":54,"line":19632},[52,154808,154809],{"class":62},"        \"age\"",[52,154811,154812],{"class":622},": age,\n",[52,154814,154815,154818],{"class":54,"line":19652},[52,154816,154817],{"class":62},"        \"score\"",[52,154819,154820],{"class":622},": score,\n",[52,154822,154823],{"class":54,"line":19658},[52,154824,36393],{"class":622},[52,154826,154827],{"class":54,"line":19669},[52,154828,154829],{"class":622},"    save_students(students)\n",[52,154831,154832,154834,154836,154839],{"class":54,"line":19692},[52,154833,34231],{"class":90},[52,154835,3121],{"class":622},[52,154837,154838],{"class":62},"\"添加成功\"",[52,154840,170],{"class":622},[52,154842,154843],{"class":54,"line":19714},[52,154844,116],{"emptyLinePlaceholder":115},[52,154846,154847],{"class":54,"line":19719},[52,154848,116],{"emptyLinePlaceholder":115},[52,154850,154851,154853,154856],{"class":54,"line":19725},[52,154852,34879],{"class":160},[52,154854,154855],{"class":58}," delete_student",[52,154857,154329],{"class":622},[52,154859,154860,154862,154864,154866,154868,154871],{"class":54,"line":19739},[52,154861,154691],{"class":622},[52,154863,2099],{"class":160},[52,154865,63535],{"class":90},[52,154867,3121],{"class":622},[52,154869,154870],{"class":62},"\"请输入要删除的学号:\"",[52,154872,170],{"class":622},[52,154874,154875,154878,154880],{"class":54,"line":19752},[52,154876,154877],{"class":622},"    student ",[52,154879,2099],{"class":160},[52,154881,154882],{"class":622}," find_student(students, student_id)\n",[52,154884,154885],{"class":54,"line":19757},[52,154886,116],{"emptyLinePlaceholder":115},[52,154888,154889,154891,154893,154895,154897],{"class":54,"line":19771},[52,154890,6060],{"class":160},[52,154892,154505],{"class":622},[52,154894,41859],{"class":160},[52,154896,41865],{"class":90},[52,154898,6698],{"class":622},[52,154900,154901,154903,154905,154908],{"class":54,"line":19776},[52,154902,35383],{"class":90},[52,154904,3121],{"class":622},[52,154906,154907],{"class":62},"\"学生不存在\"",[52,154909,170],{"class":622},[52,154911,154912],{"class":54,"line":19782},[52,154913,154729],{"class":160},[52,154915,154916],{"class":54,"line":19787},[52,154917,116],{"emptyLinePlaceholder":115},[52,154919,154920],{"class":54,"line":19801},[52,154921,154922],{"class":622},"    students.remove(student)\n",[52,154924,154925],{"class":54,"line":19806},[52,154926,154829],{"class":622},[52,154928,154929,154931,154933,154936],{"class":54,"line":19811},[52,154930,34231],{"class":90},[52,154932,3121],{"class":622},[52,154934,154935],{"class":62},"\"删除成功\"",[52,154937,170],{"class":622},[52,154939,154940],{"class":54,"line":19825},[52,154941,116],{"emptyLinePlaceholder":115},[52,154943,154944],{"class":54,"line":19837},[52,154945,116],{"emptyLinePlaceholder":115},[52,154947,154948,154950,154953],{"class":54,"line":19842},[52,154949,34879],{"class":160},[52,154951,154952],{"class":58}," update_student",[52,154954,154329],{"class":622},[52,154956,154957,154959,154961,154963,154965,154968],{"class":54,"line":19855},[52,154958,154691],{"class":622},[52,154960,2099],{"class":160},[52,154962,63535],{"class":90},[52,154964,3121],{"class":622},[52,154966,154967],{"class":62},"\"请输入要修改的学号:\"",[52,154969,170],{"class":622},[52,154971,154972,154974,154976],{"class":54,"line":19860},[52,154973,154877],{"class":622},[52,154975,2099],{"class":160},[52,154977,154882],{"class":622},[52,154979,154980],{"class":54,"line":19865},[52,154981,116],{"emptyLinePlaceholder":115},[52,154983,154984,154986,154988,154990,154992],{"class":54,"line":19870},[52,154985,6060],{"class":160},[52,154987,154505],{"class":622},[52,154989,41859],{"class":160},[52,154991,41865],{"class":90},[52,154993,6698],{"class":622},[52,154995,154996,154998,155000,155002],{"class":54,"line":19883},[52,154997,35383],{"class":90},[52,154999,3121],{"class":622},[52,155001,154907],{"class":62},[52,155003,170],{"class":622},[52,155005,155006],{"class":54,"line":19888},[52,155007,154729],{"class":160},[52,155009,155010],{"class":54,"line":35565},[52,155011,116],{"emptyLinePlaceholder":115},[52,155013,155014,155016,155018,155020,155022,155025],{"class":54,"line":35571},[52,155015,154738],{"class":622},[52,155017,2099],{"class":160},[52,155019,63535],{"class":90},[52,155021,3121],{"class":622},[52,155023,155024],{"class":62},"\"请输入新姓名:\"",[52,155026,170],{"class":622},[52,155028,155029,155031,155033,155035,155038],{"class":54,"line":35577},[52,155030,154754],{"class":622},[52,155032,2099],{"class":160},[52,155034,154759],{"class":622},[52,155036,155037],{"class":62},"\"请输入新年龄:\"",[52,155039,170],{"class":622},[52,155041,155042,155044,155046,155048,155051],{"class":54,"line":35583},[52,155043,154769],{"class":622},[52,155045,2099],{"class":160},[52,155047,154774],{"class":622},[52,155049,155050],{"class":62},"\"请输入新成绩:\"",[52,155052,170],{"class":622},[52,155054,155055],{"class":54,"line":35589},[52,155056,116],{"emptyLinePlaceholder":115},[52,155058,155059,155062,155064,155066,155068],{"class":54,"line":35600},[52,155060,155061],{"class":622},"    student[",[52,155063,65609],{"class":62},[52,155065,7402],{"class":622},[52,155067,2099],{"class":160},[52,155069,152163],{"class":622},[52,155071,155072,155074,155076,155078,155080],{"class":54,"line":35606},[52,155073,155061],{"class":622},[52,155075,72053],{"class":62},[52,155077,7402],{"class":622},[52,155079,2099],{"class":160},[52,155081,152175],{"class":622},[52,155083,155084,155086,155088,155090,155092],{"class":54,"line":35626},[52,155085,155061],{"class":622},[52,155087,153840],{"class":62},[52,155089,7402],{"class":622},[52,155091,2099],{"class":160},[52,155093,4557],{"class":622},[52,155095,155096],{"class":54,"line":35632},[52,155097,116],{"emptyLinePlaceholder":115},[52,155099,155100],{"class":54,"line":35643},[52,155101,154829],{"class":622},[52,155103,155104,155106,155108,155111],{"class":54,"line":35649},[52,155105,34231],{"class":90},[52,155107,3121],{"class":622},[52,155109,155110],{"class":62},"\"修改成功\"",[52,155112,170],{"class":622},[52,155114,155115],{"class":54,"line":35655},[52,155116,116],{"emptyLinePlaceholder":115},[52,155118,155119],{"class":54,"line":35661},[52,155120,116],{"emptyLinePlaceholder":115},[52,155122,155123,155125,155128],{"class":54,"line":35667},[52,155124,34879],{"class":160},[52,155126,155127],{"class":58}," query_student",[52,155129,154329],{"class":622},[52,155131,155132,155134,155136,155138,155140,155143],{"class":54,"line":35673},[52,155133,154691],{"class":622},[52,155135,2099],{"class":160},[52,155137,63535],{"class":90},[52,155139,3121],{"class":622},[52,155141,155142],{"class":62},"\"请输入要查询的学号:\"",[52,155144,170],{"class":622},[52,155146,155147,155149,155151],{"class":54,"line":35679},[52,155148,154877],{"class":622},[52,155150,2099],{"class":160},[52,155152,154882],{"class":622},[52,155154,155155],{"class":54,"line":35685},[52,155156,116],{"emptyLinePlaceholder":115},[52,155158,155159,155161,155163,155165,155167],{"class":54,"line":35705},[52,155160,6060],{"class":160},[52,155162,154505],{"class":622},[52,155164,41859],{"class":160},[52,155166,41865],{"class":90},[52,155168,6698],{"class":622},[52,155170,155171,155173,155175,155177],{"class":54,"line":35711},[52,155172,35383],{"class":90},[52,155174,3121],{"class":622},[52,155176,154907],{"class":62},[52,155178,170],{"class":622},[52,155180,155181],{"class":54,"line":35727},[52,155182,154729],{"class":160},[52,155184,155185],{"class":54,"line":35733},[52,155186,116],{"emptyLinePlaceholder":115},[52,155188,155189],{"class":54,"line":35747},[52,155190,155191],{"class":622},"    print_student(student)\n",[52,155193,155194],{"class":54,"line":35753},[52,155195,116],{"emptyLinePlaceholder":115},[52,155197,155198],{"class":54,"line":35768},[52,155199,116],{"emptyLinePlaceholder":115},[52,155201,155202,155204,155207],{"class":54,"line":35774},[52,155203,34879],{"class":160},[52,155205,155206],{"class":58}," print_student",[52,155208,155209],{"class":622},"(student):\n",[52,155211,155212,155214],{"class":54,"line":35783},[52,155213,34231],{"class":90},[52,155215,153807],{"class":622},[52,155217,155218,155221,155223,155225,155228,155231,155233,155236],{"class":54,"line":35789},[52,155219,155220],{"class":160},"        f",[52,155222,3364],{"class":62},[52,155224,4008],{"class":90},[52,155226,155227],{"class":622},"student[",[52,155229,155230],{"class":62},"'student_id'",[52,155232,4052],{"class":622},[52,155234,155235],{"class":90},"}\\t",[52,155237,28079],{"class":62},[52,155239,155240,155242,155244,155246,155248,155251,155253,155255],{"class":54,"line":35798},[52,155241,155220],{"class":160},[52,155243,3364],{"class":62},[52,155245,4008],{"class":90},[52,155247,155227],{"class":622},[52,155249,155250],{"class":62},"'name'",[52,155252,4052],{"class":622},[52,155254,155235],{"class":90},[52,155256,28079],{"class":62},[52,155258,155259,155261,155263,155265,155267,155270,155272,155274],{"class":54,"line":35804},[52,155260,155220],{"class":160},[52,155262,3364],{"class":62},[52,155264,4008],{"class":90},[52,155266,155227],{"class":622},[52,155268,155269],{"class":62},"'age'",[52,155271,4052],{"class":622},[52,155273,155235],{"class":90},[52,155275,28079],{"class":62},[52,155277,155278,155280,155282,155284,155286,155289,155291,155293],{"class":54,"line":35810},[52,155279,155220],{"class":160},[52,155281,3364],{"class":62},[52,155283,4008],{"class":90},[52,155285,155227],{"class":622},[52,155287,155288],{"class":62},"'score'",[52,155290,4052],{"class":622},[52,155292,4058],{"class":90},[52,155294,28079],{"class":62},[52,155296,155297],{"class":54,"line":35819},[52,155298,155299],{"class":622},"    )\n",[52,155301,155302],{"class":54,"line":35825},[52,155303,116],{"emptyLinePlaceholder":115},[52,155305,155306],{"class":54,"line":35836},[52,155307,116],{"emptyLinePlaceholder":115},[52,155309,155310,155312,155315],{"class":54,"line":35842},[52,155311,34879],{"class":160},[52,155313,155314],{"class":58}," show_all_students",[52,155316,154329],{"class":622},[52,155318,155319,155321,155323],{"class":54,"line":35861},[52,155320,6060],{"class":160},[52,155322,41862],{"class":160},[52,155324,154510],{"class":622},[52,155326,155327,155329,155331,155334],{"class":54,"line":35867},[52,155328,35383],{"class":90},[52,155330,3121],{"class":622},[52,155332,155333],{"class":62},"\"暂无学生\"",[52,155335,170],{"class":622},[52,155337,155338],{"class":54,"line":35878},[52,155339,154729],{"class":160},[52,155341,155342],{"class":54,"line":35884},[52,155343,116],{"emptyLinePlaceholder":115},[52,155345,155346,155348,155350,155353,155355,155358,155360,155363,155365,155368],{"class":54,"line":35904},[52,155347,34231],{"class":90},[52,155349,3121],{"class":622},[52,155351,155352],{"class":62},"\"学号",[52,155354,4212],{"class":90},[52,155356,155357],{"class":62},"姓名",[52,155359,4212],{"class":90},[52,155361,155362],{"class":62},"年龄",[52,155364,4212],{"class":90},[52,155366,155367],{"class":62},"成绩\"",[52,155369,170],{"class":622},[52,155371,155372,155374,155376,155378],{"class":54,"line":35920},[52,155373,6160],{"class":160},[52,155375,154505],{"class":622},[52,155377,28988],{"class":160},[52,155379,154510],{"class":622},[52,155381,155382],{"class":54,"line":35926},[52,155383,155384],{"class":622},"        print_student(student)\n",[52,155386,155387],{"class":54,"line":35940},[52,155388,116],{"emptyLinePlaceholder":115},[52,155390,155391],{"class":54,"line":35946},[52,155392,116],{"emptyLinePlaceholder":115},[52,155394,155395,155397,155399],{"class":54,"line":35952},[52,155396,34879],{"class":160},[52,155398,4935],{"class":58},[52,155400,34885],{"class":622},[52,155402,155403,155406,155408],{"class":54,"line":35963},[52,155404,155405],{"class":622},"    students ",[52,155407,2099],{"class":160},[52,155409,155410],{"class":622}," load_students()\n",[52,155412,155413],{"class":54,"line":35969},[52,155414,116],{"emptyLinePlaceholder":115},[52,155416,155417,155419,155421],{"class":54,"line":35975},[52,155418,5213],{"class":160},[52,155420,98220],{"class":90},[52,155422,6698],{"class":622},[52,155424,155425],{"class":54,"line":35985},[52,155426,155427],{"class":622},"        show_menu()\n",[52,155429,155430,155433,155435,155437,155439,155442],{"class":54,"line":35991},[52,155431,155432],{"class":622},"        choice ",[52,155434,2099],{"class":160},[52,155436,63535],{"class":90},[52,155438,3121],{"class":622},[52,155440,155441],{"class":62},"\"请输入操作:\"",[52,155443,170],{"class":622},[52,155445,155446],{"class":54,"line":36002},[52,155447,116],{"emptyLinePlaceholder":115},[52,155449,155450,155452,155455,155457,155460],{"class":54,"line":36008},[52,155451,5458],{"class":160},[52,155453,155454],{"class":622}," choice ",[52,155456,5909],{"class":160},[52,155458,155459],{"class":62}," \"1\"",[52,155461,6698],{"class":622},[52,155463,155464],{"class":54,"line":36018},[52,155465,155466],{"class":622},"            add_student(students)\n",[52,155468,155469,155472,155474,155476,155479],{"class":54,"line":36023},[52,155470,155471],{"class":160},"        elif",[52,155473,155454],{"class":622},[52,155475,5909],{"class":160},[52,155477,155478],{"class":62}," \"2\"",[52,155480,6698],{"class":622},[52,155482,155483],{"class":54,"line":36029},[52,155484,155485],{"class":622},"            delete_student(students)\n",[52,155487,155488,155490,155492,155494,155497],{"class":54,"line":36078},[52,155489,155471],{"class":160},[52,155491,155454],{"class":622},[52,155493,5909],{"class":160},[52,155495,155496],{"class":62}," \"3\"",[52,155498,6698],{"class":622},[52,155500,155501],{"class":54,"line":36125},[52,155502,155503],{"class":622},"            update_student(students)\n",[52,155505,155506,155508,155510,155512,155515],{"class":54,"line":36130},[52,155507,155471],{"class":160},[52,155509,155454],{"class":622},[52,155511,5909],{"class":160},[52,155513,155514],{"class":62}," \"4\"",[52,155516,6698],{"class":622},[52,155518,155519],{"class":54,"line":36136},[52,155520,155521],{"class":622},"            query_student(students)\n",[52,155523,155524,155526,155528,155530,155533],{"class":54,"line":36155},[52,155525,155471],{"class":160},[52,155527,155454],{"class":622},[52,155529,5909],{"class":160},[52,155531,155532],{"class":62}," \"5\"",[52,155534,6698],{"class":622},[52,155536,155537],{"class":54,"line":36161},[52,155538,155539],{"class":622},"            show_all_students(students)\n",[52,155541,155542,155544,155546,155548,155551],{"class":54,"line":36181},[52,155543,155471],{"class":160},[52,155545,155454],{"class":622},[52,155547,5909],{"class":160},[52,155549,155550],{"class":62}," \"0\"",[52,155552,6698],{"class":622},[52,155554,155555,155557,155559,155562],{"class":54,"line":36187},[52,155556,37582],{"class":90},[52,155558,3121],{"class":622},[52,155560,155561],{"class":62},"\"退出系统\"",[52,155563,170],{"class":622},[52,155565,155566],{"class":54,"line":36193},[52,155567,118018],{"class":160},[52,155569,155570,155572],{"class":54,"line":36203},[52,155571,5495],{"class":160},[52,155573,6698],{"class":622},[52,155575,155576,155578,155580,155583],{"class":54,"line":36208},[52,155577,37582],{"class":90},[52,155579,3121],{"class":622},[52,155581,155582],{"class":62},"\"输入错误\"",[52,155584,170],{"class":622},[52,155586,155587],{"class":54,"line":36214},[52,155588,116],{"emptyLinePlaceholder":115},[52,155590,155591],{"class":54,"line":36230},[52,155592,116],{"emptyLinePlaceholder":115},[52,155594,155595,155597,155599,155601,155603],{"class":54,"line":36275},[52,155596,4509],{"class":160},[52,155598,34152],{"class":90},[52,155600,104479],{"class":160},[52,155602,104482],{"class":62},[52,155604,6698],{"class":622},[52,155606,155607],{"class":54,"line":36281},[52,155608,104489],{"class":622},[274,155610,155611],{},"这个项目串联了：",[1070,155613,155614,155617,155620,155623,155626,155628],{},[1073,155615,155616],{},"菜单循环。",[1073,155618,155619],{},"函数封装。",[1073,155621,155622],{},"列表字典。",[1073,155624,155625],{},"JSON 读写。",[1073,155627,154095],{},[1073,155629,155630,31319],{},[26,155631,155632],{},"if __name__ == \"__main__\"",[14,155634,155636],{"id":155635},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[274,155638,155639],{},"可以进一步拆成两个类：",[1070,155641,155642,155647],{},[1073,155643,155644,155646],{},[26,155645,151936],{},"：表示单个学生。",[1073,155648,155649,155651],{},[26,155650,153962],{},"：负责学生增删改查和文件保存。",[274,155653,155654],{},"示意代码：",[19,155656,155658],{"className":33310,"code":155657,"language":33312,"meta":28,"style":28},"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",[26,155659,155660,155670,155674,155678,155682,155690,155697,155703,155709,155715,155719,155727,155733,155743,155753,155763,155773,155777,155781,155787,155795,155803,155811,155819,155827,155835],{"__ignoreMap":28},[52,155661,155662,155664,155666,155668],{"class":54,"line":55},[52,155663,33669],{"class":160},[52,155665,153520],{"class":622},[52,155667,33324],{"class":160},[52,155669,153525],{"class":622},[52,155671,155672],{"class":54,"line":69},[52,155673,116],{"emptyLinePlaceholder":115},[52,155675,155676],{"class":54,"line":82},[52,155677,116],{"emptyLinePlaceholder":115},[52,155679,155680],{"class":54,"line":97},[52,155681,153538],{"class":58},[52,155683,155684,155686,155688],{"class":54,"line":112},[52,155685,17650],{"class":160},[52,155687,10854],{"class":58},[52,155689,6698],{"class":622},[52,155691,155692,155695],{"class":54,"line":119},[52,155693,155694],{"class":622},"    student_id: ",[52,155696,153554],{"class":90},[52,155698,155699,155701],{"class":54,"line":130},[52,155700,153551],{"class":622},[52,155702,153554],{"class":90},[52,155704,155705,155707],{"class":54,"line":136},[52,155706,153559],{"class":622},[52,155708,153562],{"class":90},[52,155710,155711,155713],{"class":54,"line":141},[52,155712,153567],{"class":622},[52,155714,153570],{"class":90},[52,155716,155717],{"class":54,"line":146},[52,155718,116],{"emptyLinePlaceholder":115},[52,155720,155721,155723,155725],{"class":54,"line":152},[52,155722,33733],{"class":160},[52,155724,153718],{"class":58},[52,155726,33739],{"class":622},[52,155728,155729,155731],{"class":54,"line":157},[52,155730,17708],{"class":160},[52,155732,18528],{"class":622},[52,155734,155735,155737,155739,155741],{"class":54,"line":173},[52,155736,153731],{"class":62},[52,155738,54368],{"class":622},[52,155740,33755],{"class":90},[52,155742,153738],{"class":622},[52,155744,155745,155747,155749,155751],{"class":54,"line":178},[52,155746,153743],{"class":62},[52,155748,54368],{"class":622},[52,155750,33755],{"class":90},[52,155752,153750],{"class":622},[52,155754,155755,155757,155759,155761],{"class":54,"line":184},[52,155756,153755],{"class":62},[52,155758,54368],{"class":622},[52,155760,33755],{"class":90},[52,155762,153762],{"class":622},[52,155764,155765,155767,155769,155771],{"class":54,"line":189},[52,155766,153767],{"class":62},[52,155768,54368],{"class":622},[52,155770,33755],{"class":90},[52,155772,153774],{"class":622},[52,155774,155775],{"class":54,"line":201},[52,155776,5490],{"class":622},[52,155778,155779],{"class":54,"line":206},[52,155780,116],{"emptyLinePlaceholder":115},[52,155782,155783,155785],{"class":54,"line":224},[52,155784,153382],{"class":58},[52,155786,153385],{"class":90},[52,155788,155789,155791,155793],{"class":54,"line":229},[52,155790,33733],{"class":160},[52,155792,153795],{"class":58},[52,155794,153798],{"class":622},[52,155796,155797,155799,155801],{"class":54,"line":241},[52,155798,17708],{"class":160},[52,155800,153402],{"class":90},[52,155802,153807],{"class":622},[52,155804,155805,155807,155809],{"class":54,"line":246},[52,155806,153812],{"class":622},[52,155808,153815],{"class":62},[52,155810,90764],{"class":622},[52,155812,155813,155815,155817],{"class":54,"line":252},[52,155814,153812],{"class":622},[52,155816,65609],{"class":62},[52,155818,90764],{"class":622},[52,155820,155821,155823,155825],{"class":54,"line":257},[52,155822,153812],{"class":622},[52,155824,72053],{"class":62},[52,155826,90764],{"class":622},[52,155828,155829,155831,155833],{"class":54,"line":266},[52,155830,153812],{"class":622},[52,155832,153840],{"class":62},[52,155834,90764],{"class":622},[52,155836,155837],{"class":54,"line":4722},[52,155838,41058],{"class":622},[274,155840,155841],{},"管理器示意：",[19,155843,155845],{"className":33310,"code":155844,"language":33312,"meta":28,"style":28},"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",[26,155846,155847,155856,155864,155875,155879,155889,155902,155913,155920,155926,155930,155939,155948,155954,155961],{"__ignoreMap":28},[52,155848,155849,155851,155854],{"class":54,"line":55},[52,155850,17650],{"class":160},[52,155852,155853],{"class":58}," StudentManager",[52,155855,6698],{"class":622},[52,155857,155858,155860,155862],{"class":54,"line":69},[52,155859,33733],{"class":160},[52,155861,33736],{"class":90},[52,155863,33739],{"class":622},[52,155865,155866,155868,155871,155873],{"class":54,"line":82},[52,155867,33777],{"class":90},[52,155869,155870],{"class":622},".students ",[52,155872,2099],{"class":160},[52,155874,54769],{"class":622},[52,155876,155877],{"class":54,"line":97},[52,155878,116],{"emptyLinePlaceholder":115},[52,155880,155881,155883,155886],{"class":54,"line":112},[52,155882,33733],{"class":160},[52,155884,155885],{"class":58}," find_by_id",[52,155887,155888],{"class":622},"(self, student_id):\n",[52,155890,155891,155893,155895,155897,155899],{"class":54,"line":119},[52,155892,6362],{"class":160},[52,155894,154505],{"class":622},[52,155896,28988],{"class":160},[52,155898,41805],{"class":90},[52,155900,155901],{"class":622},".students:\n",[52,155903,155904,155906,155909,155911],{"class":54,"line":130},[52,155905,7601],{"class":160},[52,155907,155908],{"class":622}," student.student_id ",[52,155910,5909],{"class":160},[52,155912,154526],{"class":622},[52,155914,155915,155918],{"class":54,"line":136},[52,155916,155917],{"class":160},"                return",[52,155919,154533],{"class":622},[52,155921,155922,155924],{"class":54,"line":141},[52,155923,17708],{"class":160},[52,155925,154540],{"class":90},[52,155927,155928],{"class":54,"line":146},[52,155929,116],{"emptyLinePlaceholder":115},[52,155931,155932,155934,155936],{"class":54,"line":152},[52,155933,33733],{"class":160},[52,155935,2018],{"class":58},[52,155937,155938],{"class":622},"(self, student):\n",[52,155940,155941,155943,155945],{"class":54,"line":157},[52,155942,5458],{"class":160},[52,155944,41805],{"class":90},[52,155946,155947],{"class":622},".find_by_id(student.student_id):\n",[52,155949,155950,155952],{"class":54,"line":173},[52,155951,18688],{"class":160},[52,155953,128175],{"class":90},[52,155955,155956,155958],{"class":54,"line":178},[52,155957,33777],{"class":90},[52,155959,155960],{"class":622},".students.append(student)\n",[52,155962,155963,155965],{"class":54,"line":184},[52,155964,17708],{"class":160},[52,155966,155967],{"class":90}," True\n",[274,155969,155970],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155972,155974],{"id":155973},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[30,155976,155978],{"id":155977},"_1251-数据结构","12.5.1 数据结构",[19,155980,155982],{"className":33310,"code":155981,"language":33312,"meta":28,"style":28},"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",[26,155983,155984,155992,156023,156053,156082,156111],{"__ignoreMap":28},[52,155985,155986,155988,155990],{"class":54,"line":55},[52,155987,150833],{"class":622},[52,155989,2099],{"class":160},[52,155991,58377],{"class":622},[52,155993,155994,155996,155998,156000,156002,156004,156007,156009,156012,156014,156016,156018,156021],{"class":54,"line":69},[52,155995,150753],{"class":622},[52,155997,150365],{"class":62},[52,155999,54368],{"class":622},[52,156001,150976],{"class":62},[52,156003,15391],{"class":622},[52,156005,156006],{"class":62},"\"category\"",[52,156008,54368],{"class":622},[52,156010,156011],{"class":62},"\"手机\"",[52,156013,15391],{"class":622},[52,156015,87012],{"class":62},[52,156017,54368],{"class":622},[52,156019,156020],{"class":90},"12000",[52,156022,7889],{"class":622},[52,156024,156025,156027,156029,156031,156033,156035,156037,156039,156042,156044,156046,156048,156051],{"class":54,"line":82},[52,156026,150753],{"class":622},[52,156028,150365],{"class":62},[52,156030,54368],{"class":622},[52,156032,150976],{"class":62},[52,156034,15391],{"class":622},[52,156036,156006],{"class":62},[52,156038,54368],{"class":622},[52,156040,156041],{"class":62},"\"电脑\"",[52,156043,15391],{"class":622},[52,156045,87012],{"class":62},[52,156047,54368],{"class":622},[52,156049,156050],{"class":90},"18000",[52,156052,7889],{"class":622},[52,156054,156055,156057,156059,156061,156063,156065,156067,156069,156071,156073,156075,156077,156080],{"class":54,"line":97},[52,156056,150753],{"class":622},[52,156058,150365],{"class":62},[52,156060,54368],{"class":622},[52,156062,150997],{"class":62},[52,156064,15391],{"class":622},[52,156066,156006],{"class":62},[52,156068,54368],{"class":622},[52,156070,156011],{"class":62},[52,156072,15391],{"class":622},[52,156074,87012],{"class":62},[52,156076,54368],{"class":622},[52,156078,156079],{"class":90},"15000",[52,156081,7889],{"class":622},[52,156083,156084,156086,156088,156090,156092,156094,156096,156098,156100,156102,156104,156106,156109],{"class":54,"line":112},[52,156085,150753],{"class":622},[52,156087,150365],{"class":62},[52,156089,54368],{"class":622},[52,156091,150997],{"class":62},[52,156093,15391],{"class":622},[52,156095,156006],{"class":62},[52,156097,54368],{"class":622},[52,156099,156041],{"class":62},[52,156101,15391],{"class":622},[52,156103,87012],{"class":62},[52,156105,54368],{"class":622},[52,156107,156108],{"class":90},"16000",[52,156110,7889],{"class":622},[52,156112,156113],{"class":54,"line":119},[52,156114,36178],{"class":622},[30,156116,156118],{"id":156117},"_1252-按日期统计","12.5.2 按日期统计",[19,156120,156122],{"className":33310,"code":156121,"language":33312,"meta":28,"style":28},"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",[26,156123,156124,156133,156137,156148,156162,156175,156194,156198],{"__ignoreMap":28},[52,156125,156126,156129,156131],{"class":54,"line":55},[52,156127,156128],{"class":622},"daily_total ",[52,156130,2099],{"class":160},[52,156132,90796],{"class":622},[52,156134,156135],{"class":54,"line":69},[52,156136,116],{"emptyLinePlaceholder":115},[52,156138,156139,156141,156143,156145],{"class":54,"line":82},[52,156140,5985],{"class":160},[52,156142,150577],{"class":622},[52,156144,28988],{"class":160},[52,156146,156147],{"class":622}," sales:\n",[52,156149,156150,156153,156155,156158,156160],{"class":54,"line":97},[52,156151,156152],{"class":622},"    date ",[52,156154,2099],{"class":160},[52,156156,156157],{"class":622}," item[",[52,156159,150365],{"class":62},[52,156161,36178],{"class":622},[52,156163,156164,156167,156169,156171,156173],{"class":54,"line":112},[52,156165,156166],{"class":622},"    amount ",[52,156168,2099],{"class":160},[52,156170,156157],{"class":622},[52,156172,87012],{"class":62},[52,156174,36178],{"class":622},[52,156176,156177,156180,156182,156185,156187,156189,156191],{"class":54,"line":119},[52,156178,156179],{"class":622},"    daily_total[date] ",[52,156181,2099],{"class":160},[52,156183,156184],{"class":622}," daily_total.get(date, ",[52,156186,3306],{"class":90},[52,156188,16670],{"class":622},[52,156190,3593],{"class":160},[52,156192,156193],{"class":622}," amount\n",[52,156195,156196],{"class":54,"line":130},[52,156197,116],{"emptyLinePlaceholder":115},[52,156199,156200,156202],{"class":54,"line":136},[52,156201,33347],{"class":90},[52,156203,156204],{"class":622},"(daily_total)\n",[30,156206,156208],{"id":156207},"_1253-按类别统计","12.5.3 按类别统计",[19,156210,156212],{"className":33310,"code":156211,"language":33312,"meta":28,"style":28},"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",[26,156213,156214,156223,156227,156237,156250,156262,156280,156284],{"__ignoreMap":28},[52,156215,156216,156219,156221],{"class":54,"line":55},[52,156217,156218],{"class":622},"category_total ",[52,156220,2099],{"class":160},[52,156222,90796],{"class":622},[52,156224,156225],{"class":54,"line":69},[52,156226,116],{"emptyLinePlaceholder":115},[52,156228,156229,156231,156233,156235],{"class":54,"line":82},[52,156230,5985],{"class":160},[52,156232,150577],{"class":622},[52,156234,28988],{"class":160},[52,156236,156147],{"class":622},[52,156238,156239,156242,156244,156246,156248],{"class":54,"line":97},[52,156240,156241],{"class":622},"    category ",[52,156243,2099],{"class":160},[52,156245,156157],{"class":622},[52,156247,156006],{"class":62},[52,156249,36178],{"class":622},[52,156251,156252,156254,156256,156258,156260],{"class":54,"line":112},[52,156253,156166],{"class":622},[52,156255,2099],{"class":160},[52,156257,156157],{"class":622},[52,156259,87012],{"class":62},[52,156261,36178],{"class":622},[52,156263,156264,156267,156269,156272,156274,156276,156278],{"class":54,"line":119},[52,156265,156266],{"class":622},"    category_total[category] ",[52,156268,2099],{"class":160},[52,156270,156271],{"class":622}," category_total.get(category, ",[52,156273,3306],{"class":90},[52,156275,16670],{"class":622},[52,156277,3593],{"class":160},[52,156279,156193],{"class":622},[52,156281,156282],{"class":54,"line":130},[52,156283,116],{"emptyLinePlaceholder":115},[52,156285,156286,156288],{"class":54,"line":136},[52,156287,33347],{"class":90},[52,156289,156290],{"class":622},"(category_total)\n",[30,156292,156294],{"id":156293},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[19,156296,156298],{"className":33310,"code":156297,"language":33312,"meta":28,"style":28},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[26,156299,156300,156325],{"__ignoreMap":28},[52,156301,156302,156305,156307,156309,156312,156315,156318,156321,156323],{"class":54,"line":55},[52,156303,156304],{"class":622},"top_date, top_amount ",[52,156306,2099],{"class":160},[52,156308,8907],{"class":90},[52,156310,156311],{"class":622},"(daily_total.items(), ",[52,156313,156314],{"class":8172},"key",[52,156316,156317],{"class":160},"=lambda",[52,156319,156320],{"class":622}," item: item[",[52,156322,3332],{"class":90},[52,156324,7616],{"class":622},[52,156326,156327,156329],{"class":54,"line":69},[52,156328,33347],{"class":90},[52,156330,156331],{"class":622},"(top_date, top_amount)\n",[14,156333,156335],{"id":156334},"_126-绘制柱状图","12.6 绘制柱状图",[19,156337,156339],{"className":33310,"code":156338,"language":33312,"meta":28,"style":28},"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",[26,156340,156341,156355,156366,156370,156378,156390,156402,156413,156417,156421,156431,156442,156456,156461,156478,156495,156511,156515],{"__ignoreMap":28},[52,156342,156343,156345,156347,156349,156351,156353],{"class":54,"line":55},[52,156344,33669],{"class":160},[52,156346,149747],{"class":622},[52,156348,33324],{"class":160},[52,156350,149752],{"class":622},[52,156352,34315],{"class":160},[52,156354,149757],{"class":622},[52,156356,156357,156359,156361,156363],{"class":54,"line":69},[52,156358,33669],{"class":160},[52,156360,149606],{"class":622},[52,156362,33324],{"class":160},[52,156364,156365],{"class":622}," Bar\n",[52,156367,156368],{"class":54,"line":82},[52,156369,116],{"emptyLinePlaceholder":115},[52,156371,156372,156374,156376],{"class":54,"line":97},[52,156373,156218],{"class":622},[52,156375,2099],{"class":160},[52,156377,18528],{"class":622},[52,156379,156380,156383,156385,156388],{"class":54,"line":112},[52,156381,156382],{"class":62},"    \"手机\"",[52,156384,54368],{"class":622},[52,156386,156387],{"class":90},"27000",[52,156389,34398],{"class":622},[52,156391,156392,156395,156397,156400],{"class":54,"line":119},[52,156393,156394],{"class":62},"    \"电脑\"",[52,156396,54368],{"class":622},[52,156398,156399],{"class":90},"34000",[52,156401,34398],{"class":622},[52,156403,156404,156407,156409,156411],{"class":54,"line":130},[52,156405,156406],{"class":62},"    \"耳机\"",[52,156408,54368],{"class":622},[52,156410,126767],{"class":90},[52,156412,34398],{"class":622},[52,156414,156415],{"class":54,"line":136},[52,156416,4543],{"class":622},[52,156418,156419],{"class":54,"line":141},[52,156420,116],{"emptyLinePlaceholder":115},[52,156422,156423,156426,156428],{"class":54,"line":146},[52,156424,156425],{"class":622},"bar ",[52,156427,2099],{"class":160},[52,156429,156430],{"class":622}," Bar()\n",[52,156432,156433,156436,156439],{"class":54,"line":152},[52,156434,156435],{"class":622},"bar.add_xaxis(",[52,156437,156438],{"class":90},"list",[52,156440,156441],{"class":622},"(category_total.keys()))\n",[52,156443,156444,156447,156449,156451,156453],{"class":54,"line":157},[52,156445,156446],{"class":622},"bar.add_yaxis(",[52,156448,149663],{"class":62},[52,156450,15391],{"class":622},[52,156452,156438],{"class":90},[52,156454,156455],{"class":622},"(category_total.values()))\n",[52,156457,156458],{"class":54,"line":173},[52,156459,156460],{"class":622},"bar.set_global_opts(\n",[52,156462,156463,156465,156467,156469,156471,156473,156476],{"class":54,"line":178},[52,156464,149841],{"class":8172},[52,156466,2099],{"class":160},[52,156468,149846],{"class":622},[52,156470,54338],{"class":8172},[52,156472,2099],{"class":160},[52,156474,156475],{"class":62},"\"品类销售额\"",[52,156477,40979],{"class":622},[52,156479,156480,156482,156484,156486,156488,156490,156493],{"class":54,"line":184},[52,156481,149860],{"class":8172},[52,156483,2099],{"class":160},[52,156485,149865],{"class":622},[52,156487,82738],{"class":8172},[52,156489,2099],{"class":160},[52,156491,156492],{"class":62},"\"品类\"",[52,156494,40979],{"class":622},[52,156496,156497,156499,156501,156503,156505,156507,156509],{"class":54,"line":189},[52,156498,149879],{"class":8172},[52,156500,2099],{"class":160},[52,156502,149865],{"class":622},[52,156504,82738],{"class":8172},[52,156506,2099],{"class":160},[52,156508,149663],{"class":62},[52,156510,40979],{"class":622},[52,156512,156513],{"class":54,"line":201},[52,156514,170],{"class":622},[52,156516,156517,156520,156523],{"class":54,"line":206},[52,156518,156519],{"class":622},"bar.render(",[52,156521,156522],{"class":62},"\"category_sales.html\"",[52,156524,170],{"class":622},[14,156526,156528],{"id":156527},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[274,156530,156531],{},"时间线适合展示不同日期、月份、年份的数据变化。",[19,156533,156535],{"className":33310,"code":156534,"language":33312,"meta":28,"style":28},"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",[26,156536,156537,156551,156562,156566,156574,156598,156621,156646,156650,156654,156664,156668,156679,156688,156698,156712,156743,156748,156752],{"__ignoreMap":28},[52,156538,156539,156541,156543,156545,156547,156549],{"class":54,"line":55},[52,156540,33669],{"class":160},[52,156542,149747],{"class":622},[52,156544,33324],{"class":160},[52,156546,149752],{"class":622},[52,156548,34315],{"class":160},[52,156550,149757],{"class":622},[52,156552,156553,156555,156557,156559],{"class":54,"line":69},[52,156554,33669],{"class":160},[52,156556,149606],{"class":622},[52,156558,33324],{"class":160},[52,156560,156561],{"class":622}," Bar, Timeline\n",[52,156563,156564],{"class":54,"line":82},[52,156565,116],{"emptyLinePlaceholder":115},[52,156567,156568,156570,156572],{"class":54,"line":97},[52,156569,104578],{"class":622},[52,156571,2099],{"class":160},[52,156573,18528],{"class":622},[52,156575,156576,156579,156582,156584,156586,156588,156590,156592,156594,156596],{"class":54,"line":112},[52,156577,156578],{"class":62},"    \"2024-10-01\"",[52,156580,156581],{"class":622},": {",[52,156583,156011],{"class":62},[52,156585,54368],{"class":622},[52,156587,156020],{"class":90},[52,156589,15391],{"class":622},[52,156591,156041],{"class":62},[52,156593,54368],{"class":622},[52,156595,156050],{"class":90},[52,156597,7889],{"class":622},[52,156599,156600,156603,156605,156607,156609,156611,156613,156615,156617,156619],{"class":54,"line":119},[52,156601,156602],{"class":62},"    \"2024-10-02\"",[52,156604,156581],{"class":622},[52,156606,156011],{"class":62},[52,156608,54368],{"class":622},[52,156610,156079],{"class":90},[52,156612,15391],{"class":622},[52,156614,156041],{"class":62},[52,156616,54368],{"class":622},[52,156618,156108],{"class":90},[52,156620,7889],{"class":622},[52,156622,156623,156626,156628,156630,156632,156635,156637,156639,156641,156644],{"class":54,"line":130},[52,156624,156625],{"class":62},"    \"2024-10-03\"",[52,156627,156581],{"class":622},[52,156629,156011],{"class":62},[52,156631,54368],{"class":622},[52,156633,156634],{"class":90},"17000",[52,156636,15391],{"class":622},[52,156638,156041],{"class":62},[52,156640,54368],{"class":622},[52,156642,156643],{"class":90},"19000",[52,156645,7889],{"class":622},[52,156647,156648],{"class":54,"line":136},[52,156649,4543],{"class":622},[52,156651,156652],{"class":54,"line":141},[52,156653,116],{"emptyLinePlaceholder":115},[52,156655,156656,156659,156661],{"class":54,"line":146},[52,156657,156658],{"class":622},"timeline ",[52,156660,2099],{"class":160},[52,156662,156663],{"class":622}," Timeline()\n",[52,156665,156666],{"class":54,"line":152},[52,156667,116],{"emptyLinePlaceholder":115},[52,156669,156670,156672,156675,156677],{"class":54,"line":157},[52,156671,5985],{"class":160},[52,156673,156674],{"class":622}," date, category_data ",[52,156676,28988],{"class":160},[52,156678,151516],{"class":622},[52,156680,156681,156684,156686],{"class":54,"line":173},[52,156682,156683],{"class":622},"    bar ",[52,156685,2099],{"class":160},[52,156687,156430],{"class":622},[52,156689,156690,156693,156695],{"class":54,"line":178},[52,156691,156692],{"class":622},"    bar.add_xaxis(",[52,156694,156438],{"class":90},[52,156696,156697],{"class":622},"(category_data.keys()))\n",[52,156699,156700,156703,156705,156707,156709],{"class":54,"line":184},[52,156701,156702],{"class":622},"    bar.add_yaxis(",[52,156704,149663],{"class":62},[52,156706,15391],{"class":622},[52,156708,156438],{"class":90},[52,156710,156711],{"class":622},"(category_data.values()))\n",[52,156713,156714,156717,156720,156722,156724,156726,156728,156730,156732,156734,156736,156738,156741],{"class":54,"line":189},[52,156715,156716],{"class":622},"    bar.set_global_opts(",[52,156718,156719],{"class":8172},"title_opts",[52,156721,2099],{"class":160},[52,156723,149846],{"class":622},[52,156725,54338],{"class":8172},[52,156727,2099],{"class":160},[52,156729,3170],{"class":160},[52,156731,3364],{"class":62},[52,156733,4008],{"class":90},[52,156735,76854],{"class":622},[52,156737,4058],{"class":90},[52,156739,156740],{"class":62},"销售额\"",[52,156742,33429],{"class":622},[52,156744,156745],{"class":54,"line":201},[52,156746,156747],{"class":622},"    timeline.add(bar, date)\n",[52,156749,156750],{"class":54,"line":206},[52,156751,116],{"emptyLinePlaceholder":115},[52,156753,156754,156757,156760],{"class":54,"line":224},[52,156755,156756],{"class":622},"timeline.render(",[52,156758,156759],{"class":62},"\"timeline_sales.html\"",[52,156761,170],{"class":622},[14,156763,156765],{"id":156764},"_128-绘制地图","12.8 绘制地图",[274,156767,156768],{},"地图适合展示地区数据。",[19,156770,156772],{"className":33310,"code":156771,"language":33312,"meta":28,"style":28},"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",[26,156773,156774,156788,156799,156803,156811,156824,156836,156849,156862,156866,156870,156880,156895,156900,156917,156936,156940],{"__ignoreMap":28},[52,156775,156776,156778,156780,156782,156784,156786],{"class":54,"line":55},[52,156777,33669],{"class":160},[52,156779,149747],{"class":622},[52,156781,33324],{"class":160},[52,156783,149752],{"class":622},[52,156785,34315],{"class":160},[52,156787,149757],{"class":622},[52,156789,156790,156792,156794,156796],{"class":54,"line":69},[52,156791,33669],{"class":160},[52,156793,149606],{"class":622},[52,156795,33324],{"class":160},[52,156797,156798],{"class":622}," Map\n",[52,156800,156801],{"class":54,"line":82},[52,156802,116],{"emptyLinePlaceholder":115},[52,156804,156805,156807,156809],{"class":54,"line":97},[52,156806,104578],{"class":622},[52,156808,2099],{"class":160},[52,156810,58377],{"class":622},[52,156812,156813,156816,156818,156820,156822],{"class":54,"line":112},[52,156814,156815],{"class":622},"    (",[52,156817,72198],{"class":62},[52,156819,15391],{"class":622},[52,156821,3929],{"class":90},[52,156823,40979],{"class":622},[52,156825,156826,156828,156830,156832,156834],{"class":54,"line":119},[52,156827,156815],{"class":622},[52,156829,72218],{"class":62},[52,156831,15391],{"class":622},[52,156833,149680],{"class":90},[52,156835,40979],{"class":622},[52,156837,156838,156840,156843,156845,156847],{"class":54,"line":130},[52,156839,156815],{"class":622},[52,156841,156842],{"class":62},"\"广东\"",[52,156844,15391],{"class":622},[52,156846,4689],{"class":90},[52,156848,40979],{"class":622},[52,156850,156851,156853,156856,156858,156860],{"class":54,"line":136},[52,156852,156815],{"class":622},[52,156854,156855],{"class":62},"\"浙江\"",[52,156857,15391],{"class":622},[52,156859,149685],{"class":90},[52,156861,40979],{"class":622},[52,156863,156864],{"class":54,"line":141},[52,156865,36178],{"class":622},[52,156867,156868],{"class":54,"line":146},[52,156869,116],{"emptyLinePlaceholder":115},[52,156871,156872,156875,156877],{"class":54,"line":152},[52,156873,156874],{"class":622},"map_chart ",[52,156876,2099],{"class":160},[52,156878,156879],{"class":622}," Map()\n",[52,156881,156882,156885,156887,156890,156893],{"class":54,"line":157},[52,156883,156884],{"class":622},"map_chart.add(",[52,156886,149663],{"class":62},[52,156888,156889],{"class":622},", data, ",[52,156891,156892],{"class":62},"\"china\"",[52,156894,170],{"class":622},[52,156896,156897],{"class":54,"line":173},[52,156898,156899],{"class":622},"map_chart.set_global_opts(\n",[52,156901,156902,156904,156906,156908,156910,156912,156915],{"class":54,"line":178},[52,156903,149841],{"class":8172},[52,156905,2099],{"class":160},[52,156907,149846],{"class":622},[52,156909,54338],{"class":8172},[52,156911,2099],{"class":160},[52,156913,156914],{"class":62},"\"地区销售额\"",[52,156916,40979],{"class":622},[52,156918,156919,156922,156924,156927,156930,156932,156934],{"class":54,"line":184},[52,156920,156921],{"class":8172},"    visualmap_opts",[52,156923,2099],{"class":160},[52,156925,156926],{"class":622},"opts.VisualMapOpts(",[52,156928,156929],{"class":8172},"max_",[52,156931,2099],{"class":160},[52,156933,4689],{"class":90},[52,156935,40979],{"class":622},[52,156937,156938],{"class":54,"line":189},[52,156939,170],{"class":622},[52,156941,156942,156945,156948],{"class":54,"line":201},[52,156943,156944],{"class":622},"map_chart.render(",[52,156946,156947],{"class":62},"\"map_sales.html\"",[52,156949,170],{"class":622},[274,156951,156952],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156954,156956],{"id":156955},"_129-项目拆分建议","12.9 项目拆分建议",[274,156958,156959],{},"当代码超过一个文件时，可以这样组织：",[19,156961,156964],{"className":156962,"code":156963,"language":24,"meta":28},[22],"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",[26,156965,156963],{"__ignoreMap":28},[274,156967,156968],{},"职责：",[1070,156970,156971,156977,156983,156989],{},[1073,156972,156973,156976],{},[26,156974,156975],{},"main.py","：程序入口。",[1073,156978,156979,156982],{},[26,156980,156981],{},"file_utils.py","：读写 JSON。",[1073,156984,156985,156988],{},[26,156986,156987],{},"sales_service.py","：统计销售数据。",[1073,156990,156991,156994],{},[26,156992,156993],{},"chart_builder.py","：生成图表。",[14,156996,156998],{"id":156997},"_1210-python基础复习清单","12.10 Python基础复习清单",[274,157000,157001],{},"语法基础：",[1070,157003,157004,157007,157010,157013],{},[1073,157005,157006],{},"会写变量、注释、输入输出。",[1073,157008,157009],{},"会使用 int、float、str、bool。",[1073,157011,157012],{},"会做类型转换。",[1073,157014,157015],{},"会使用 f-string 格式化输出。",[274,157017,157018],{},"流程控制：",[1070,157020,157021,157027,157033,157041],{},[1073,157022,157023,157024,31319],{},"会写 ",[26,157025,157026],{},"if elif else",[1073,157028,157023,157029,103940,157031,31319],{},[26,157030,111583],{},[26,157032,5985],{},[1073,157034,157035,157036,103940,157038,31319],{},"理解 ",[26,157037,5015],{},[26,157039,157040],{},"continue",[1073,157042,157043],{},"能写嵌套循环。",[274,157045,157046],{},"函数：",[1070,157048,157049,157052,157055,157058],{},[1073,157050,157051],{},"会定义和调用函数。",[1073,157053,157054],{},"理解参数和返回值。",[1073,157056,157057],{},"知道局部变量和全局变量。",[1073,157059,157060],{},"会使用默认参数、关键字参数、不定长参数。",[274,157062,157063],{},"容器：",[1070,157065,157066,157069,157072,157075,157078],{},[1073,157067,157068],{},"会使用列表增删改查。",[1073,157070,157071],{},"会遍历列表、字典。",[1073,157073,157074],{},"会使用切片。",[1073,157076,157077],{},"会用集合去重。",[1073,157079,157080],{},"会处理列表嵌套字典。",[274,157082,157083],{},"文件和模块：",[1070,157085,157086,157089,157092,157095,157098],{},[1073,157087,157088],{},"会读写文本文件。",[1073,157090,157091],{},"会读写 JSON。",[1073,157093,157094],{},"会捕获常见异常。",[1073,157096,157097],{},"会导入模块和第三方包。",[1073,157099,157100],{},"会创建简单包结构。",[274,157102,157103],{},"项目能力：",[1070,157105,157106,157109,157112,157115,157118],{},[1073,157107,157108],{},"能把代码拆成函数。",[1073,157110,157111],{},"能把数据保存到文件。",[1073,157113,157114],{},"能处理用户输入错误。",[1073,157116,157117],{},"能写一个完整菜单程序。",[1073,157119,157120],{},"能用 pyecharts 生成图表。",[14,157122,157124],{"id":157123},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1070,157126,157127,157130,157133,157136,157139,157142,157145,157148],{},[1073,157128,157129],{},"猜数字游戏。",[1073,157131,157132],{},"ATM 菜单程序。",[1073,157134,157135],{},"学生成绩统计。",[1073,157137,157138],{},"学生管理系统函数版。",[1073,157140,157141],{},"学生管理系统文件持久化版。",[1073,157143,157144],{},"学生管理系统面向对象版。",[1073,157146,157147],{},"销售数据统计。",[1073,157149,157150],{},"销售数据可视化。",[14,157152,157154],{"id":157153},"_1212-常见学习误区","12.12 常见学习误区",[1070,157156,157157,157160,157163,157166,157169,157172,157175],{},[1073,157158,157159],{},"只看视频不敲代码。",[1073,157161,157162],{},"一报错就复制错误去搜，不先读报错位置。",[1073,157164,157165],{},"变量名随便写，后续自己看不懂。",[1073,157167,157168],{},"所有代码都写在一个文件一个函数里。",[1073,157170,157171],{},"不保存练习代码，复习时没有材料。",[1073,157173,157174],{},"还没掌握列表字典就急着学框架。",[1073,157176,157177],{},"不会读官方文档，只依赖教程。",[14,157179,157181],{"id":157180},"_1213-如何读报错","12.13 如何读报错",[274,157183,157184],{},"报错通常从下往上看最后几行。",[274,157186,18091],{},[19,157188,157191],{"className":157189,"code":157190,"language":24,"meta":28},[22],"ValueError: invalid literal for int() with base 10: 'abc'\n",[26,157192,157190],{"__ignoreMap":28},[274,157194,27548],{},[1070,157196,157197,157203,157213],{},[1073,157198,157199,157200,31319],{},"异常类型是 ",[26,157201,157202],{},"ValueError",[1073,157204,110265,157205,157208,157209,157212],{},[26,157206,157207],{},"int()"," 无法把 ",[26,157210,157211],{},"'abc'"," 转成整数。",[1073,157214,157215],{},"应该检查输入内容或增加异常处理。",[274,157217,157218],{},"再看文件名和行号：",[19,157220,157223],{"className":157221,"code":157222,"language":24,"meta":28},[22],"File \"main.py\", line 10, in \u003Cmodule>\n",[26,157224,157222],{"__ignoreMap":28},[274,157226,157227,157228,157230],{},"表示错误发生在 ",[26,157229,156975],{}," 第 10 行。",[14,157232,157234],{"id":157233},"_1214-后续学习方向","12.14 后续学习方向",[274,157236,157237],{},"Python 基础完成后，可以按兴趣选择方向：",[1070,157239,157240,157252,157261,157273,157284,157293,157303],{},[1073,157241,157242,157243,3327,157246,3327,157249,31319],{},"自动化办公：",[26,157244,157245],{},"openpyxl",[26,157247,157248],{},"python-docx",[26,157250,157251],{},"pdfplumber",[1073,157253,157254,157255,3327,157257,3327,157259,31319],{},"数据分析：",[26,157256,103554],{},[26,157258,148553],{},[26,157260,148561],{},[1073,157262,157263,157264,3327,157267,3327,157270,31319],{},"Web 后端：",[26,157265,157266],{},"Flask",[26,157268,157269],{},"FastAPI",[26,157271,157272],{},"Django",[1073,157274,157275,157276,3327,157278,3327,157281,31319],{},"爬虫：",[26,157277,148538],{},[26,157279,157280],{},"BeautifulSoup",[26,157282,157283],{},"Scrapy",[1073,157285,157286,157287,3327,157289,157292],{},"测试开发：",[26,157288,148585],{},[26,157290,157291],{},"selenium","、接口测试。",[1073,157294,157295,157296,3327,157298,3327,157300,31319],{},"人工智能：",[26,157297,103554],{},[26,157299,148553],{},[26,157301,157302],{},"pytorch",[1073,157304,157305,157306,3327,157308,3327,157311,31319],{},"运维脚本：",[26,157307,148154],{},[26,157309,157310],{},"subprocess",[26,157312,157313],{},"paramiko",[274,157315,157316],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157318,157320],{"id":157319},"_1215-结课练习","12.15 结课练习",[1070,157322,157323,157326,157329,157332,157335,157338,157341,157344],{},[1073,157324,157325],{},"完成函数版学生管理系统。",[1073,157327,157328],{},"给学生管理系统增加 JSON 持久化。",[1073,157330,157331],{},"给学生管理系统增加异常处理。",[1073,157333,157334],{},"把学生管理系统改成面向对象版。",[1073,157336,157337],{},"使用 pyecharts 绘制学生成绩柱状图。",[1073,157339,157340],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[1073,157342,157343],{},"按品类统计销售额并绘制柱状图。",[1073,157345,157346],{},"写一份自己的 Python 学习路线图。",[3015,157348,157349],{},"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":28,"searchDepth":69,"depth":69,"links":157351},[157352,157353,157356,157357,157358,157364,157365,157366,157367,157368,157369,157370,157371,157372,157373],{"id":154068,"depth":69,"text":154069},{"id":154118,"depth":69,"text":154119,"children":157354},[157355],{"id":154122,"depth":82,"text":154123},{"id":154161,"depth":69,"text":154162},{"id":155635,"depth":69,"text":155636},{"id":155973,"depth":69,"text":155974,"children":157359},[157360,157361,157362,157363],{"id":155977,"depth":82,"text":155978},{"id":156117,"depth":82,"text":156118},{"id":156207,"depth":82,"text":156208},{"id":156293,"depth":82,"text":156294},{"id":156334,"depth":69,"text":156335},{"id":156527,"depth":69,"text":156528},{"id":156764,"depth":69,"text":156765},{"id":156955,"depth":69,"text":156956},{"id":156997,"depth":69,"text":156998},{"id":157123,"depth":69,"text":157124},{"id":157153,"depth":69,"text":157154},{"id":157180,"depth":69,"text":157181},{"id":157233,"depth":69,"text":157234},{"id":157319,"depth":69,"text":157320},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":154060,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157380,"title":157381,"body":157382,"description":3046,"extension":3047,"meta":159851,"navigation":115,"path":159852,"seo":159853,"stem":159854,"__hash__":159855},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157383,"toc":159826},[157384,157387,157391,157394,157397,157417,157420,157443,157446,157449,157471,157474,157496,157500,157503,157543,157546,157667,157671,157674,157714,157717,157741,157744,157748,157751,157765,157798,157801,157836,157839,157862,157865,157898,157901,157903,157909,157984,157987,157993,158010,158050,158054,158057,158103,158105,158143,158146,158181,158184,158219,158222,158254,158257,158276,158280,158284,158397,158399,158474,158478,158524,158527,158553,158562,158566,158569,158632,158640,158668,158672,158712,158777,158781,158784,158823,158826,158871,158874,158935,158939,158966,158969,158997,159000,159004,159008,159073,159076,159114,159117,159149,159153,159252,159256,159259,159332,159335,159383,159387,159393,159433,159436,159483,159486,159535,159539,159541,159555,159557,159738,159742,159769,159789,159796,159800,159817,159823],[10,157385,157381],{"id":157386},"_2-基础语法变量与字符串",[14,157388,157390],{"id":157389},"_21-注释","2.1 注释",[274,157392,157393],{},"注释是给人看的说明文字，不会被 Python 执行。",[274,157395,157396],{},"单行注释：",[19,157398,157400],{"className":33310,"code":157399,"language":33312,"meta":28,"style":28},"# 这是单行注释\nprint(\"hello\")\n",[26,157401,157402,157407],{"__ignoreMap":28},[52,157403,157404],{"class":54,"line":55},[52,157405,157406],{"class":332},"# 这是单行注释\n",[52,157408,157409,157411,157413,157415],{"class":54,"line":69},[52,157410,33347],{"class":90},[52,157412,3121],{"class":622},[52,157414,8800],{"class":62},[52,157416,170],{"class":622},[274,157418,157419],{},"多行说明常用三引号：",[19,157421,157423],{"className":33310,"code":157422,"language":33312,"meta":28,"style":28},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[26,157424,157425,157429,157434,157439],{"__ignoreMap":28},[52,157426,157427],{"class":54,"line":55},[52,157428,98626],{"class":62},[52,157430,157431],{"class":54,"line":69},[52,157432,157433],{"class":62},"这是多行说明。\n",[52,157435,157436],{"class":54,"line":82},[52,157437,157438],{"class":62},"常用于文件顶部说明、函数说明等。\n",[52,157440,157441],{"class":54,"line":97},[52,157442,98626],{"class":62},[274,157444,157445],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[274,157447,157448],{},"不好：",[19,157450,157452],{"className":33310,"code":157451,"language":33312,"meta":28,"style":28},"# age 加 1\nage = age + 1\n",[26,157453,157454,157459],{"__ignoreMap":28},[52,157455,157456],{"class":54,"line":55},[52,157457,157458],{"class":332},"# age 加 1\n",[52,157460,157461,157463,157465,157467,157469],{"class":54,"line":69},[52,157462,148914],{"class":622},[52,157464,2099],{"class":160},[52,157466,18663],{"class":622},[52,157468,3593],{"class":160},[52,157470,58629],{"class":90},[274,157472,157473],{},"较好：",[19,157475,157477],{"className":33310,"code":157476,"language":33312,"meta":28,"style":28},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[26,157478,157479,157484],{"__ignoreMap":28},[52,157480,157481],{"class":54,"line":55},[52,157482,157483],{"class":332},"# 用户过完生日后，年龄增加一岁\n",[52,157485,157486,157488,157490,157492,157494],{"class":54,"line":69},[52,157487,148914],{"class":622},[52,157489,2099],{"class":160},[52,157491,18663],{"class":622},[52,157493,3593],{"class":160},[52,157495,58629],{"class":90},[14,157497,157499],{"id":157498},"_22-字面量","2.2 字面量",[274,157501,157502],{},"字面量就是代码中直接写出来的数据。",[19,157504,157506],{"className":33310,"code":157505,"language":33312,"meta":28,"style":28},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[26,157507,157508,157515,157522,157529,157536],{"__ignoreMap":28},[52,157509,157510,157512],{"class":54,"line":55},[52,157511,3424],{"class":90},[52,157513,157514],{"class":332},"          # 整数\n",[52,157516,157517,157519],{"class":54,"line":69},[52,157518,3167],{"class":90},[52,157520,157521],{"class":332},"         # 小数\n",[52,157523,157524,157526],{"class":54,"line":82},[52,157525,8800],{"class":62},[52,157527,157528],{"class":332},"      # 字符串\n",[52,157530,157531,157533],{"class":54,"line":97},[52,157532,34408],{"class":90},[52,157534,157535],{"class":332},"         # 布尔值\n",[52,157537,157538,157540],{"class":54,"line":112},[52,157539,98614],{"class":90},[52,157541,157542],{"class":332},"         # 空值\n",[274,157544,157545],{},"常见字面量类型：",[3253,157547,157548,157558],{},[3256,157549,157550],{},[3259,157551,157552,157554,157556],{},[3262,157553,26689],{},[3262,157555,30427],{},[3262,157557,28814],{},[3299,157559,157560,157571,157582,157593,157605,157617,157629,157642,157654],{},[3259,157561,157562,157564,157568],{},[3304,157563,3124],{},[3304,157565,157566],{},[26,157567,3424],{},[3304,157569,157570],{},"整数",[3259,157572,157573,157575,157579],{},[3304,157574,3159],{},[3304,157576,157577],{},[26,157578,3167],{},[3304,157580,157581],{},"浮点数",[3259,157583,157584,157586,157590],{},[3304,157585,4281],{},[3304,157587,157588],{},[26,157589,8800],{},[3304,157591,157592],{},"字符串",[3259,157594,157595,157597,157603],{},[3304,157596,4333],{},[3304,157598,157599,3327,157601],{},[26,157600,34408],{},[26,157602,36919],{},[3304,157604,68944],{},[3259,157606,157607,157610,157614],{},[3304,157608,157609],{},"NoneType",[3304,157611,157612],{},[26,157613,98614],{},[3304,157615,157616],{},"空值",[3259,157618,157619,157621,157626],{},[3304,157620,156438],{},[3304,157622,157623],{},[26,157624,157625],{},"[1, 2, 3]",[3304,157627,157628],{},"列表",[3259,157630,157631,157634,157639],{},[3304,157632,157633],{},"tuple",[3304,157635,157636],{},[26,157637,157638],{},"(1, 2, 3)",[3304,157640,157641],{},"元组",[3259,157643,157644,157646,157651],{},[3304,157645,117466],{},[3304,157647,157648],{},[26,157649,157650],{},"{\"name\": \"张三\"}",[3304,157652,157653],{},"字典",[3259,157655,157656,157659,157664],{},[3304,157657,157658],{},"set",[3304,157660,157661],{},[26,157662,157663],{},"{1, 2, 3}",[3304,157665,157666],{},"集合",[14,157668,157670],{"id":157669},"_23-变量","2.3 变量",[274,157672,157673],{},"变量是保存数据的名字。",[19,157675,157677],{"className":33310,"code":157676,"language":33312,"meta":28,"style":28},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[26,157678,157679,157687,157695,157705],{"__ignoreMap":28},[52,157680,157681,157683,157685],{"class":54,"line":55},[52,157682,148904],{"class":622},[52,157684,2099],{"class":160},[52,157686,151721],{"class":62},[52,157688,157689,157691,157693],{"class":54,"line":69},[52,157690,148914],{"class":622},[52,157692,2099],{"class":160},[52,157694,148919],{"class":90},[52,157696,157697,157700,157702],{"class":54,"line":82},[52,157698,157699],{"class":622},"height ",[52,157701,2099],{"class":160},[52,157703,157704],{"class":90}," 1.75\n",[52,157706,157707,157710,157712],{"class":54,"line":97},[52,157708,157709],{"class":622},"is_student ",[52,157711,2099],{"class":160},[52,157713,155967],{"class":90},[274,157715,157716],{},"Python 的变量不需要提前声明类型：",[19,157718,157720],{"className":33310,"code":157719,"language":33312,"meta":28,"style":28},"score = 100\nscore = \"满分\"\n",[26,157721,157722,157732],{"__ignoreMap":28},[52,157723,157724,157727,157729],{"class":54,"line":55},[52,157725,157726],{"class":622},"score ",[52,157728,2099],{"class":160},[52,157730,157731],{"class":90}," 100\n",[52,157733,157734,157736,157738],{"class":54,"line":69},[52,157735,157726],{"class":622},[52,157737,2099],{"class":160},[52,157739,157740],{"class":62}," \"满分\"\n",[274,157742,157743],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157745,157747],{"id":157746},"_24-变量命名规则","2.4 变量命名规则",[274,157749,157750],{},"硬性规则：",[1070,157752,157753,157756,157759,157762],{},[1073,157754,157755],{},"只能由字母、数字、下划线组成。",[1073,157757,157758],{},"不能以数字开头。",[1073,157760,157761],{},"不能使用 Python 关键字。",[1073,157763,157764],{},"区分大小写。",[19,157766,157768],{"className":33310,"code":157767,"language":33312,"meta":28,"style":28},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[26,157769,157770,157779,157788],{"__ignoreMap":28},[52,157771,157772,157775,157777],{"class":54,"line":55},[52,157773,157774],{"class":622},"user_name ",[52,157776,2099],{"class":160},[52,157778,148909],{"class":62},[52,157780,157781,157784,157786],{"class":54,"line":69},[52,157782,157783],{"class":622},"age2 ",[52,157785,2099],{"class":160},[52,157787,148919],{"class":90},[52,157789,157790,157793,157795],{"class":54,"line":82},[52,157791,157792],{"class":622},"_token ",[52,157794,2099],{"class":160},[52,157796,157797],{"class":62}," \"abc\"\n",[274,157799,157800],{},"错误写法：",[19,157802,157804],{"className":33310,"code":157803,"language":33312,"meta":28,"style":28},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[26,157805,157806,157815,157827],{"__ignoreMap":28},[52,157807,157808,157811,157813],{"class":54,"line":55},[52,157809,157810],{"class":80331},"2age",[52,157812,16520],{"class":160},[52,157814,148919],{"class":90},[52,157816,157817,157819,157821,157823,157825],{"class":54,"line":69},[52,157818,133952],{"class":622},[52,157820,3644],{"class":160},[52,157822,148904],{"class":622},[52,157824,2099],{"class":160},[52,157826,148909],{"class":62},[52,157828,157829,157831,157833],{"class":54,"line":82},[52,157830,17650],{"class":160},[52,157832,16520],{"class":160},[52,157834,157835],{"class":62}," \"一班\"\n",[274,157837,157838],{},"查看关键字：",[19,157840,157842],{"className":33310,"code":157841,"language":33312,"meta":28,"style":28},"import keyword\n\nprint(keyword.kwlist)\n",[26,157843,157844,157851,157855],{"__ignoreMap":28},[52,157845,157846,157848],{"class":54,"line":55},[52,157847,33324],{"class":160},[52,157849,157850],{"class":622}," keyword\n",[52,157852,157853],{"class":54,"line":69},[52,157854,116],{"emptyLinePlaceholder":115},[52,157856,157857,157859],{"class":54,"line":82},[52,157858,33347],{"class":90},[52,157860,157861],{"class":622},"(keyword.kwlist)\n",[274,157863,157864],{},"推荐命名风格：",[19,157866,157868],{"className":33310,"code":157867,"language":33312,"meta":28,"style":28},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[26,157869,157870,157879,157889],{"__ignoreMap":28},[52,157871,157872,157875,157877],{"class":54,"line":55},[52,157873,157874],{"class":622},"student_name ",[52,157876,2099],{"class":160},[52,157878,151721],{"class":62},[52,157880,157881,157884,157886],{"class":54,"line":69},[52,157882,157883],{"class":622},"total_price ",[52,157885,2099],{"class":160},[52,157887,157888],{"class":90}," 99.8\n",[52,157890,157891,157894,157896],{"class":54,"line":82},[52,157892,157893],{"class":622},"is_finished ",[52,157895,2099],{"class":160},[52,157897,128175],{"class":90},[274,157899,157900],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157902,53663],{"id":53662},[274,157904,107286,157905,157908],{},[26,157906,157907],{},"type()"," 查看数据类型：",[19,157910,157912],{"className":33310,"code":157911,"language":33312,"meta":28,"style":28},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[26,157913,157914,157928,157942,157956,157970],{"__ignoreMap":28},[52,157915,157916,157918,157920,157922,157924,157926],{"class":54,"line":55},[52,157917,33347],{"class":90},[52,157919,3121],{"class":622},[52,157921,106027],{"class":90},[52,157923,3121],{"class":622},[52,157925,3424],{"class":90},[52,157927,33429],{"class":622},[52,157929,157930,157932,157934,157936,157938,157940],{"class":54,"line":69},[52,157931,33347],{"class":90},[52,157933,3121],{"class":622},[52,157935,106027],{"class":90},[52,157937,3121],{"class":622},[52,157939,3167],{"class":90},[52,157941,33429],{"class":622},[52,157943,157944,157946,157948,157950,157952,157954],{"class":54,"line":82},[52,157945,33347],{"class":90},[52,157947,3121],{"class":622},[52,157949,106027],{"class":90},[52,157951,3121],{"class":622},[52,157953,8800],{"class":62},[52,157955,33429],{"class":622},[52,157957,157958,157960,157962,157964,157966,157968],{"class":54,"line":97},[52,157959,33347],{"class":90},[52,157961,3121],{"class":622},[52,157963,106027],{"class":90},[52,157965,3121],{"class":622},[52,157967,34408],{"class":90},[52,157969,33429],{"class":622},[52,157971,157972,157974,157976,157978,157980,157982],{"class":54,"line":112},[52,157973,33347],{"class":90},[52,157975,3121],{"class":622},[52,157977,106027],{"class":90},[52,157979,3121],{"class":622},[52,157981,98614],{"class":90},[52,157983,33429],{"class":622},[274,157985,157986],{},"输出类似：",[19,157988,157991],{"className":157989,"code":157990,"language":24,"meta":28},[22],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[26,157992,157990],{"__ignoreMap":28},[274,157994,11981,157995,110203,157997,157999,158000,158002,158003,24455,158005,158002,158007,158009],{},[26,157996,4333],{},[26,157998,3124],{}," 的子类，",[26,158001,34408],{}," 可以当作 ",[26,158004,3332],{},[26,158006,36919],{},[26,158008,3306],{},"，但业务代码中不要滥用。",[19,158011,158013],{"className":33310,"code":158012,"language":33312,"meta":28,"style":28},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[26,158014,158015,158033],{"__ignoreMap":28},[52,158016,158017,158019,158021,158023,158025,158027,158030],{"class":54,"line":55},[52,158018,33347],{"class":90},[52,158020,3121],{"class":622},[52,158022,34408],{"class":90},[52,158024,48498],{"class":160},[52,158026,28064],{"class":90},[52,158028,158029],{"class":622},")   ",[52,158031,158032],{"class":332},"# 2\n",[52,158034,158035,158037,158039,158041,158043,158045,158047],{"class":54,"line":69},[52,158036,33347],{"class":90},[52,158038,3121],{"class":622},[52,158040,36919],{"class":90},[52,158042,48498],{"class":160},[52,158044,28064],{"class":90},[52,158046,48740],{"class":622},[52,158048,158049],{"class":332},"# 1\n",[14,158051,158053],{"id":158052},"_26-类型转换","2.6 类型转换",[274,158055,158056],{},"常用转换函数：",[19,158058,158060],{"className":33310,"code":158059,"language":33312,"meta":28,"style":28},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[26,158061,158062,158072,158083,158093],{"__ignoreMap":28},[52,158063,158064,158066,158068,158070],{"class":54,"line":55},[52,158065,3124],{"class":90},[52,158067,3121],{"class":622},[52,158069,57246],{"class":62},[52,158071,170],{"class":622},[52,158073,158074,158076,158078,158081],{"class":54,"line":69},[52,158075,3159],{"class":90},[52,158077,3121],{"class":622},[52,158079,158080],{"class":62},"\"3.14\"",[52,158082,170],{"class":622},[52,158084,158085,158087,158089,158091],{"class":54,"line":82},[52,158086,4281],{"class":90},[52,158088,3121],{"class":622},[52,158090,3424],{"class":90},[52,158092,170],{"class":622},[52,158094,158095,158097,158099,158101],{"class":54,"line":97},[52,158096,4333],{"class":90},[52,158098,3121],{"class":622},[52,158100,3332],{"class":90},[52,158102,170],{"class":622},[274,158104,18091],{},[19,158106,158108],{"className":33310,"code":158107,"language":33312,"meta":28,"style":28},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[26,158109,158110,158119,158130],{"__ignoreMap":28},[52,158111,158112,158114,158116],{"class":54,"line":55},[52,158113,148914],{"class":622},[52,158115,2099],{"class":160},[52,158117,158118],{"class":62}," \"18\"\n",[52,158120,158121,158123,158125,158127],{"class":54,"line":69},[52,158122,148914],{"class":622},[52,158124,2099],{"class":160},[52,158126,5344],{"class":90},[52,158128,158129],{"class":622},"(age)\n",[52,158131,158132,158134,158137,158139,158141],{"class":54,"line":82},[52,158133,33347],{"class":90},[52,158135,158136],{"class":622},"(age ",[52,158138,3593],{"class":160},[52,158140,28064],{"class":90},[52,158142,170],{"class":622},[274,158144,158145],{},"输入得到的内容永远是字符串：",[19,158147,158149],{"className":33310,"code":158148,"language":33312,"meta":28,"style":28},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[26,158150,158151,158167],{"__ignoreMap":28},[52,158152,158153,158156,158158,158160,158162,158165],{"class":54,"line":55},[52,158154,158155],{"class":622},"num ",[52,158157,2099],{"class":160},[52,158159,63535],{"class":90},[52,158161,3121],{"class":622},[52,158163,158164],{"class":62},"\"请输入数字:\"",[52,158166,170],{"class":622},[52,158168,158169,158171,158173,158175,158178],{"class":54,"line":69},[52,158170,33347],{"class":90},[52,158172,3121],{"class":622},[52,158174,106027],{"class":90},[52,158176,158177],{"class":622},"(num))  ",[52,158179,158180],{"class":332},"# str\n",[274,158182,158183],{},"如果要做数学运算，必须转换：",[19,158185,158187],{"className":33310,"code":158186,"language":33312,"meta":28,"style":28},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[26,158188,158189,158207],{"__ignoreMap":28},[52,158190,158191,158193,158195,158197,158199,158201,158203,158205],{"class":54,"line":55},[52,158192,158155],{"class":622},[52,158194,2099],{"class":160},[52,158196,5344],{"class":90},[52,158198,3121],{"class":622},[52,158200,56751],{"class":90},[52,158202,3121],{"class":622},[52,158204,158164],{"class":62},[52,158206,33429],{"class":622},[52,158208,158209,158211,158213,158215,158217],{"class":54,"line":69},[52,158210,33347],{"class":90},[52,158212,48551],{"class":622},[52,158214,3593],{"class":160},[52,158216,5000],{"class":90},[52,158218,170],{"class":622},[274,158220,158221],{},"常见错误：",[19,158223,158225],{"className":33310,"code":158224,"language":33312,"meta":28,"style":28},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[26,158226,158227,158240],{"__ignoreMap":28},[52,158228,158229,158231,158233,158235,158237],{"class":54,"line":55},[52,158230,3124],{"class":90},[52,158232,3121],{"class":622},[52,158234,158080],{"class":62},[52,158236,158029],{"class":622},[52,158238,158239],{"class":332},"# 错误\n",[52,158241,158242,158244,158246,158249,158252],{"class":54,"line":69},[52,158243,3124],{"class":90},[52,158245,3121],{"class":622},[52,158247,158248],{"class":62},"\"abc\"",[52,158250,158251],{"class":622},")    ",[52,158253,158239],{"class":332},[274,158255,158256],{},"正确写法：",[19,158258,158260],{"className":33310,"code":158259,"language":33312,"meta":28,"style":28},"num = float(\"3.14\")\n",[26,158261,158262],{"__ignoreMap":28},[52,158263,158264,158266,158268,158270,158272,158274],{"class":54,"line":55},[52,158265,158155],{"class":622},[52,158267,2099],{"class":160},[52,158269,112717],{"class":90},[52,158271,3121],{"class":622},[52,158273,158080],{"class":62},[52,158275,170],{"class":622},[14,158277,158279],{"id":158278},"_27-运算符","2.7 运算符",[30,158281,158283],{"id":158282},"_271-算术运算符","2.7.1 算术运算符",[3253,158285,158286,158297],{},[3256,158287,158288],{},[3259,158289,158290,158293,158295],{},[3262,158291,158292],{},"运算符",[3262,158294,28814],{},[3262,158296,30427],{},[3299,158298,158299,158313,158327,158341,158355,158369,158383],{},[3259,158300,158301,158305,158308],{},[3304,158302,158303],{},[26,158304,3593],{},[3304,158306,158307],{},"加法",[3304,158309,158310],{},[26,158311,158312],{},"1 + 2",[3259,158314,158315,158319,158322],{},[3304,158316,158317],{},[26,158318,3644],{},[3304,158320,158321],{},"减法",[3304,158323,158324],{},[26,158325,158326],{},"5 - 3",[3259,158328,158329,158333,158336],{},[3304,158330,158331],{},[26,158332,1095],{},[3304,158334,158335],{},"乘法",[3304,158337,158338],{},[26,158339,158340],{},"2 * 3",[3259,158342,158343,158347,158350],{},[3304,158344,158345],{},[26,158346,3696],{},[3304,158348,158349],{},"除法，结果是浮点数",[3304,158351,158352],{},[26,158353,158354],{},"5 \u002F 2",[3259,158356,158357,158361,158364],{},[3304,158358,158359],{},[26,158360,36261],{},[3304,158362,158363],{},"整除",[3304,158365,158366],{},[26,158367,158368],{},"5 \u002F\u002F 2",[3259,158370,158371,158375,158378],{},[3304,158372,158373],{},[26,158374,3441],{},[3304,158376,158377],{},"取余",[3304,158379,158380],{},[26,158381,158382],{},"5 % 2",[3259,158384,158385,158389,158392],{},[3304,158386,158387],{},[26,158388,13617],{},[3304,158390,158391],{},"幂运算",[3304,158393,158394],{},[26,158395,158396],{},"2 ** 3",[274,158398,18091],{},[19,158400,158402],{"className":33310,"code":158401,"language":33312,"meta":28,"style":28},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[26,158403,158404,158422,158439,158456],{"__ignoreMap":28},[52,158405,158406,158408,158410,158412,158415,158417,158419],{"class":54,"line":55},[52,158407,33347],{"class":90},[52,158409,3121],{"class":622},[52,158411,3432],{"class":90},[52,158413,158414],{"class":160}," \u002F",[52,158416,17711],{"class":90},[52,158418,158029],{"class":622},[52,158420,158421],{"class":332},"# 2.5\n",[52,158423,158424,158426,158428,158430,158433,158435,158437],{"class":54,"line":69},[52,158425,33347],{"class":90},[52,158427,3121],{"class":622},[52,158429,3432],{"class":90},[52,158431,158432],{"class":160}," \u002F\u002F",[52,158434,17711],{"class":90},[52,158436,48740],{"class":622},[52,158438,158032],{"class":332},[52,158440,158441,158443,158445,158447,158450,158452,158454],{"class":54,"line":82},[52,158442,33347],{"class":90},[52,158444,3121],{"class":622},[52,158446,3432],{"class":90},[52,158448,158449],{"class":160}," %",[52,158451,17711],{"class":90},[52,158453,158029],{"class":622},[52,158455,158049],{"class":332},[52,158457,158458,158460,158462,158464,158467,158469,158471],{"class":54,"line":97},[52,158459,33347],{"class":90},[52,158461,3121],{"class":622},[52,158463,3194],{"class":90},[52,158465,158466],{"class":160}," **",[52,158468,80998],{"class":90},[52,158470,48740],{"class":622},[52,158472,158473],{"class":332},"# 8\n",[30,158475,158477],{"id":158476},"_272-赋值运算符","2.7.2 赋值运算符",[19,158479,158481],{"className":33310,"code":158480,"language":33312,"meta":28,"style":28},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[26,158482,158483,158491,158499,158507,158515],{"__ignoreMap":28},[52,158484,158485,158487,158489],{"class":54,"line":55},[52,158486,158155],{"class":622},[52,158488,2099],{"class":160},[52,158490,61358],{"class":90},[52,158492,158493,158495,158497],{"class":54,"line":69},[52,158494,158155],{"class":622},[52,158496,12433],{"class":160},[52,158498,57357],{"class":90},[52,158500,158501,158503,158505],{"class":54,"line":82},[52,158502,158155],{"class":622},[52,158504,152620],{"class":160},[52,158506,2391],{"class":90},[52,158508,158509,158511,158513],{"class":54,"line":97},[52,158510,158155],{"class":622},[52,158512,139516],{"class":160},[52,158514,1629],{"class":90},[52,158516,158517,158519,158522],{"class":54,"line":112},[52,158518,158155],{"class":622},[52,158520,158521],{"class":160},"\u002F=",[52,158523,2391],{"class":90},[274,158525,158526],{},"等价关系：",[19,158528,158530],{"className":33310,"code":158529,"language":33312,"meta":28,"style":28},"num += 1\nnum = num + 1\n",[26,158531,158532,158540],{"__ignoreMap":28},[52,158533,158534,158536,158538],{"class":54,"line":55},[52,158535,158155],{"class":622},[52,158537,12433],{"class":160},[52,158539,58629],{"class":90},[52,158541,158542,158544,158546,158549,158551],{"class":54,"line":69},[52,158543,158155],{"class":622},[52,158545,2099],{"class":160},[52,158547,158548],{"class":622}," num ",[52,158550,3593],{"class":160},[52,158552,58629],{"class":90},[274,158554,158555,158556,103940,158559,31319],{},"Python 没有 ",[26,158557,158558],{},"num++",[26,158560,158561],{},"num--",[30,158563,158565],{"id":158564},"_273-比较运算符","2.7.3 比较运算符",[274,158567,158568],{},"比较运算结果是布尔值。",[19,158570,158572],{"className":33310,"code":158571,"language":33312,"meta":28,"style":28},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[26,158573,158574,158588,158603,158617],{"__ignoreMap":28},[52,158575,158576,158578,158580,158582,158584,158586],{"class":54,"line":55},[52,158577,33347],{"class":90},[52,158579,3121],{"class":622},[52,158581,3559],{"class":90},[52,158583,29165],{"class":160},[52,158585,5110],{"class":90},[52,158587,170],{"class":622},[52,158589,158590,158592,158594,158596,158599,158601],{"class":54,"line":69},[52,158591,33347],{"class":90},[52,158593,3121],{"class":622},[52,158595,3559],{"class":90},[52,158597,158598],{"class":160}," >=",[52,158600,5000],{"class":90},[52,158602,170],{"class":622},[52,158604,158605,158607,158609,158611,158613,158615],{"class":54,"line":82},[52,158606,33347],{"class":90},[52,158608,3121],{"class":622},[52,158610,3559],{"class":90},[52,158612,104479],{"class":160},[52,158614,5045],{"class":90},[52,158616,170],{"class":622},[52,158618,158619,158621,158623,158625,158628,158630],{"class":54,"line":97},[52,158620,33347],{"class":90},[52,158622,3121],{"class":622},[52,158624,3559],{"class":90},[52,158626,158627],{"class":160}," !=",[52,158629,5045],{"class":90},[52,158631,170],{"class":622},[274,158633,158634,158635,158637,158638,31319],{},"注意：判断相等用 ",[26,158636,5909],{},"，赋值用 ",[26,158639,2099],{},[19,158641,158643],{"className":33310,"code":158642,"language":33312,"meta":28,"style":28},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[26,158644,158645,158657],{"__ignoreMap":28},[52,158646,158647,158649,158651,158654],{"class":54,"line":55},[52,158648,148914],{"class":622},[52,158650,2099],{"class":160},[52,158652,158653],{"class":90}," 18",[52,158655,158656],{"class":332},"       # 赋值\n",[52,158658,158659,158661,158663,158665],{"class":54,"line":69},[52,158660,148914],{"class":622},[52,158662,5909],{"class":160},[52,158664,158653],{"class":90},[52,158666,158667],{"class":332},"      # 判断是否相等\n",[30,158669,158671],{"id":158670},"_274-逻辑运算符","2.7.4 逻辑运算符",[3253,158673,158674,158682],{},[3256,158675,158676],{},[3259,158677,158678,158680],{},[3262,158679,158292],{},[3262,158681,28814],{},[3299,158683,158684,158693,158702],{},[3259,158685,158686,158690],{},[3304,158687,158688],{},[26,158689,33394],{},[3304,158691,158692],{},"并且",[3259,158694,158695,158699],{},[3304,158696,158697],{},[26,158698,118010],{},[3304,158700,158701],{},"或者",[3259,158703,158704,158709],{},[3304,158705,158706],{},[26,158707,158708],{},"not",[3304,158710,158711],{},"取反",[19,158713,158715],{"className":33310,"code":158714,"language":33312,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[26,158716,158717,158725,158734,158738,158753,158767],{"__ignoreMap":28},[52,158718,158719,158721,158723],{"class":54,"line":55},[52,158720,148914],{"class":622},[52,158722,2099],{"class":160},[52,158724,90993],{"class":90},[52,158726,158727,158730,158732],{"class":54,"line":69},[52,158728,158729],{"class":622},"has_ticket ",[52,158731,2099],{"class":160},[52,158733,155967],{"class":90},[52,158735,158736],{"class":54,"line":82},[52,158737,116],{"emptyLinePlaceholder":115},[52,158739,158740,158742,158744,158746,158748,158750],{"class":54,"line":97},[52,158741,33347],{"class":90},[52,158743,158136],{"class":622},[52,158745,4677],{"class":160},[52,158747,158653],{"class":90},[52,158749,2030],{"class":160},[52,158751,158752],{"class":622}," has_ticket)\n",[52,158754,158755,158757,158759,158761,158763,158765],{"class":54,"line":112},[52,158756,33347],{"class":90},[52,158758,158136],{"class":622},[52,158760,4022],{"class":160},[52,158762,158653],{"class":90},[52,158764,117121],{"class":160},[52,158766,158752],{"class":622},[52,158768,158769,158771,158773,158775],{"class":54,"line":119},[52,158770,33347],{"class":90},[52,158772,3121],{"class":622},[52,158774,158708],{"class":160},[52,158776,158752],{"class":622},[14,158778,158780],{"id":158779},"_28-字符串定义","2.8 字符串定义",[274,158782,158783],{},"三种常见写法：",[19,158785,158787],{"className":33310,"code":158786,"language":33312,"meta":28,"style":28},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[26,158788,158789,158799,158808,158818],{"__ignoreMap":28},[52,158790,158791,158794,158796],{"class":54,"line":55},[52,158792,158793],{"class":622},"name1 ",[52,158795,2099],{"class":160},[52,158797,158798],{"class":62}," '小明'\n",[52,158800,158801,158804,158806],{"class":54,"line":69},[52,158802,158803],{"class":622},"name2 ",[52,158805,2099],{"class":160},[52,158807,151721],{"class":62},[52,158809,158810,158813,158815],{"class":54,"line":82},[52,158811,158812],{"class":622},"text ",[52,158814,2099],{"class":160},[52,158816,158817],{"class":62}," \"\"\"这是多行字符串\n",[52,158819,158820],{"class":54,"line":97},[52,158821,158822],{"class":62},"可以换行\"\"\"\n",[274,158824,158825],{},"字符串中包含引号：",[19,158827,158829],{"className":33310,"code":158828,"language":33312,"meta":28,"style":28},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[26,158830,158831,158841,158851],{"__ignoreMap":28},[52,158832,158833,158836,158838],{"class":54,"line":55},[52,158834,158835],{"class":622},"msg ",[52,158837,2099],{"class":160},[52,158839,158840],{"class":62}," \"他说:'你好'\"\n",[52,158842,158843,158846,158848],{"class":54,"line":69},[52,158844,158845],{"class":622},"msg2 ",[52,158847,2099],{"class":160},[52,158849,158850],{"class":62}," '他说:\"你好\"'\n",[52,158852,158853,158856,158858,158861,158864,158867,158869],{"class":54,"line":82},[52,158854,158855],{"class":622},"msg3 ",[52,158857,2099],{"class":160},[52,158859,158860],{"class":62}," \"他说:",[52,158862,158863],{"class":90},"\\\"",[52,158865,158866],{"class":62},"你好",[52,158868,158863],{"class":90},[52,158870,28079],{"class":62},[274,158872,158873],{},"常见转义字符：",[3253,158875,158876,158885],{},[3256,158877,158878],{},[3259,158879,158880,158883],{},[3262,158881,158882],{},"写法",[3262,158884,103628],{},[3299,158886,158887,158897,158906,158916,158925],{},[3259,158888,158889,158894],{},[3304,158890,158891],{},[26,158892,158893],{},"\\n",[3304,158895,158896],{},"换行",[3259,158898,158899,158903],{},[3304,158900,158901],{},[26,158902,4212],{},[3304,158904,158905],{},"制表符",[3259,158907,158908,158913],{},[3304,158909,158910],{},[26,158911,158912],{},"\\\\",[3304,158914,158915],{},"反斜杠",[3259,158917,158918,158922],{},[3304,158919,158920],{},[26,158921,158863],{},[3304,158923,158924],{},"双引号",[3259,158926,158927,158932],{},[3304,158928,158929],{},[26,158930,158931],{},"\\'",[3304,158933,158934],{},"单引号",[14,158936,158938],{"id":158937},"_29-字符串拼接","2.9 字符串拼接",[19,158940,158942],{"className":33310,"code":158941,"language":33312,"meta":28,"style":28},"name = \"小明\"\nprint(\"你好，\" + name)\n",[26,158943,158944,158952],{"__ignoreMap":28},[52,158945,158946,158948,158950],{"class":54,"line":55},[52,158947,148904],{"class":622},[52,158949,2099],{"class":160},[52,158951,151721],{"class":62},[52,158953,158954,158956,158958,158961,158963],{"class":54,"line":69},[52,158955,33347],{"class":90},[52,158957,3121],{"class":622},[52,158959,158960],{"class":62},"\"你好，\"",[52,158962,48498],{"class":160},[52,158964,158965],{"class":622}," name)\n",[274,158967,158968],{},"字符串只能和字符串拼接：",[19,158970,158972],{"className":33310,"code":158971,"language":33312,"meta":28,"style":28},"age = 18\nprint(\"年龄:\" + str(age))\n",[26,158973,158974,158982],{"__ignoreMap":28},[52,158975,158976,158978,158980],{"class":54,"line":55},[52,158977,148914],{"class":622},[52,158979,2099],{"class":160},[52,158981,148919],{"class":90},[52,158983,158984,158986,158988,158990,158992,158994],{"class":54,"line":69},[52,158985,33347],{"class":90},[52,158987,3121],{"class":622},[52,158989,148885],{"class":62},[52,158991,48498],{"class":160},[52,158993,76847],{"class":90},[52,158995,158996],{"class":622},"(age))\n",[274,158998,158999],{},"更推荐使用格式化字符串。",[14,159001,159003],{"id":159002},"_210-字符串格式化","2.10 字符串格式化",[30,159005,159007],{"id":159006},"_2101-百分号格式化","2.10.1 百分号格式化",[19,159009,159011],{"className":33310,"code":159010,"language":33312,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[26,159012,159013,159021,159029,159038,159042],{"__ignoreMap":28},[52,159014,159015,159017,159019],{"class":54,"line":55},[52,159016,148904],{"class":622},[52,159018,2099],{"class":160},[52,159020,151721],{"class":62},[52,159022,159023,159025,159027],{"class":54,"line":69},[52,159024,148914],{"class":622},[52,159026,2099],{"class":160},[52,159028,148919],{"class":90},[52,159030,159031,159033,159035],{"class":54,"line":82},[52,159032,157726],{"class":622},[52,159034,2099],{"class":160},[52,159036,159037],{"class":90}," 95.5\n",[52,159039,159040],{"class":54,"line":97},[52,159041,116],{"emptyLinePlaceholder":115},[52,159043,159044,159046,159048,159051,159054,159057,159060,159063,159066,159068,159070],{"class":54,"line":112},[52,159045,33347],{"class":90},[52,159047,3121],{"class":622},[52,159049,159050],{"class":62},"\"姓名:",[52,159052,159053],{"class":90},"%s",[52,159055,159056],{"class":62}," 年龄:",[52,159058,159059],{"class":90},"%d",[52,159061,159062],{"class":62}," 分数:",[52,159064,159065],{"class":90},"%.1f",[52,159067,3364],{"class":62},[52,159069,158449],{"class":160},[52,159071,159072],{"class":622}," (name, age, score))\n",[274,159074,159075],{},"常用占位符：",[3253,159077,159078,159087],{},[3256,159079,159080],{},[3259,159081,159082,159085],{},[3262,159083,159084],{},"占位符",[3262,159086,28814],{},[3299,159088,159089,159097,159105],{},[3259,159090,159091,159095],{},[3304,159092,159093],{},[26,159094,159053],{},[3304,159096,157592],{},[3259,159098,159099,159103],{},[3304,159100,159101],{},[26,159102,159059],{},[3304,159104,157570],{},[3259,159106,159107,159112],{},[3304,159108,159109],{},[26,159110,159111],{},"%f",[3304,159113,157581],{},[274,159115,159116],{},"精度控制：",[19,159118,159120],{"className":33310,"code":159119,"language":33312,"meta":28,"style":28},"price = 12.3456\nprint(\"%.2f\" % price)\n",[26,159121,159122,159131],{"__ignoreMap":28},[52,159123,159124,159126,159128],{"class":54,"line":55},[52,159125,149049],{"class":622},[52,159127,2099],{"class":160},[52,159129,159130],{"class":90}," 12.3456\n",[52,159132,159133,159135,159137,159139,159142,159144,159146],{"class":54,"line":69},[52,159134,33347],{"class":90},[52,159136,3121],{"class":622},[52,159138,3364],{"class":62},[52,159140,159141],{"class":90},"%.2f",[52,159143,3364],{"class":62},[52,159145,158449],{"class":160},[52,159147,159148],{"class":622}," price)\n",[30,159150,159152],{"id":159151},"_2102-format方法","2.10.2 format方法",[19,159154,159156],{"className":33310,"code":159155,"language":33312,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[26,159157,159158,159166,159174,159178,159197,159217],{"__ignoreMap":28},[52,159159,159160,159162,159164],{"class":54,"line":55},[52,159161,148904],{"class":622},[52,159163,2099],{"class":160},[52,159165,151721],{"class":62},[52,159167,159168,159170,159172],{"class":54,"line":69},[52,159169,148914],{"class":622},[52,159171,2099],{"class":160},[52,159173,148919],{"class":90},[52,159175,159176],{"class":54,"line":82},[52,159177,116],{"emptyLinePlaceholder":115},[52,159179,159180,159182,159184,159186,159188,159190,159192,159194],{"class":54,"line":97},[52,159181,33347],{"class":90},[52,159183,3121],{"class":622},[52,159185,159050],{"class":62},[52,159187,35391],{"class":90},[52,159189,159056],{"class":62},[52,159191,35391],{"class":90},[52,159193,3364],{"class":62},[52,159195,159196],{"class":622},".format(name, age))\n",[52,159198,159199,159201,159203,159205,159208,159210,159213,159215],{"class":54,"line":112},[52,159200,33347],{"class":90},[52,159202,3121],{"class":622},[52,159204,159050],{"class":62},[52,159206,159207],{"class":90},"{0}",[52,159209,159056],{"class":62},[52,159211,159212],{"class":90},"{1}",[52,159214,3364],{"class":62},[52,159216,159196],{"class":622},[52,159218,159219,159221,159223,159225,159228,159230,159233,159235,159238,159240,159242,159245,159247,159249],{"class":54,"line":119},[52,159220,33347],{"class":90},[52,159222,3121],{"class":622},[52,159224,159050],{"class":62},[52,159226,159227],{"class":90},"{name}",[52,159229,159056],{"class":62},[52,159231,159232],{"class":90},"{age}",[52,159234,3364],{"class":62},[52,159236,159237],{"class":622},".format(",[52,159239,82738],{"class":8172},[52,159241,2099],{"class":160},[52,159243,159244],{"class":622},"name, ",[52,159246,73149],{"class":8172},[52,159248,2099],{"class":160},[52,159250,159251],{"class":622},"age))\n",[30,159253,159255],{"id":159254},"_2103-f-string","2.10.3 f-string",[274,159257,159258],{},"推荐写法：",[19,159260,159262],{"className":33310,"code":159261,"language":33312,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[26,159263,159264,159272,159280,159288,159292],{"__ignoreMap":28},[52,159265,159266,159268,159270],{"class":54,"line":55},[52,159267,148904],{"class":622},[52,159269,2099],{"class":160},[52,159271,151721],{"class":62},[52,159273,159274,159276,159278],{"class":54,"line":69},[52,159275,148914],{"class":622},[52,159277,2099],{"class":160},[52,159279,148919],{"class":90},[52,159281,159282,159284,159286],{"class":54,"line":82},[52,159283,157726],{"class":622},[52,159285,2099],{"class":160},[52,159287,159037],{"class":90},[52,159289,159290],{"class":54,"line":97},[52,159291,116],{"emptyLinePlaceholder":115},[52,159293,159294,159296,159298,159300,159302,159304,159306,159308,159310,159312,159314,159316,159318,159320,159323,159326,159328,159330],{"class":54,"line":112},[52,159295,33347],{"class":90},[52,159297,3121],{"class":622},[52,159299,3170],{"class":160},[52,159301,159050],{"class":62},[52,159303,4008],{"class":90},[52,159305,82738],{"class":622},[52,159307,4058],{"class":90},[52,159309,159056],{"class":62},[52,159311,4008],{"class":90},[52,159313,73149],{"class":622},[52,159315,4058],{"class":90},[52,159317,159062],{"class":62},[52,159319,4008],{"class":90},[52,159321,159322],{"class":622},"score",[52,159324,159325],{"class":160},":.1f",[52,159327,4058],{"class":90},[52,159329,3364],{"class":62},[52,159331,170],{"class":622},[274,159333,159334],{},"表达式也可以放进去：",[19,159336,159338],{"className":33310,"code":159337,"language":33312,"meta":28,"style":28},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[26,159339,159340,159348,159356],{"__ignoreMap":28},[52,159341,159342,159344,159346],{"class":54,"line":55},[52,159343,149049],{"class":622},[52,159345,2099],{"class":160},[52,159347,149054],{"class":90},[52,159349,159350,159352,159354],{"class":54,"line":69},[52,159351,149059],{"class":622},[52,159353,2099],{"class":160},[52,159355,57357],{"class":90},[52,159357,159358,159360,159362,159364,159367,159369,159371,159373,159376,159378,159381],{"class":54,"line":82},[52,159359,33347],{"class":90},[52,159361,3121],{"class":622},[52,159363,3170],{"class":160},[52,159365,159366],{"class":62},"\"总价:",[52,159368,4008],{"class":90},[52,159370,149049],{"class":622},[52,159372,1095],{"class":160},[52,159374,159375],{"class":622}," count",[52,159377,4058],{"class":90},[52,159379,159380],{"class":62},"元\"",[52,159382,170],{"class":622},[14,159384,159386],{"id":159385},"_211-input输入","2.11 input输入",[274,159388,159389,159392],{},[26,159390,159391],{},"input()"," 会暂停程序，等待用户输入。",[19,159394,159396],{"className":33310,"code":159395,"language":33312,"meta":28,"style":28},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[26,159397,159398,159412],{"__ignoreMap":28},[52,159399,159400,159402,159404,159406,159408,159410],{"class":54,"line":55},[52,159401,148904],{"class":622},[52,159403,2099],{"class":160},[52,159405,63535],{"class":90},[52,159407,3121],{"class":622},[52,159409,154747],{"class":62},[52,159411,170],{"class":622},[52,159413,159414,159416,159418,159420,159423,159425,159427,159429,159431],{"class":54,"line":69},[52,159415,33347],{"class":90},[52,159417,3121],{"class":622},[52,159419,3170],{"class":160},[52,159421,159422],{"class":62},"\"你好，",[52,159424,4008],{"class":90},[52,159426,82738],{"class":622},[52,159428,4058],{"class":90},[52,159430,3364],{"class":62},[52,159432,170],{"class":622},[274,159434,159435],{},"输入整数：",[19,159437,159439],{"className":33310,"code":159438,"language":33312,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[26,159440,159441,159459],{"__ignoreMap":28},[52,159442,159443,159445,159447,159449,159451,159453,159455,159457],{"class":54,"line":55},[52,159444,148914],{"class":622},[52,159446,2099],{"class":160},[52,159448,5344],{"class":90},[52,159450,3121],{"class":622},[52,159452,56751],{"class":90},[52,159454,3121],{"class":622},[52,159456,154762],{"class":62},[52,159458,33429],{"class":622},[52,159460,159461,159463,159465,159467,159470,159472,159474,159476,159479,159481],{"class":54,"line":69},[52,159462,33347],{"class":90},[52,159464,3121],{"class":622},[52,159466,3170],{"class":160},[52,159468,159469],{"class":62},"\"明年你",[52,159471,4008],{"class":90},[52,159473,148914],{"class":622},[52,159475,3593],{"class":160},[52,159477,159478],{"class":90}," 1}",[52,159480,151772],{"class":62},[52,159482,170],{"class":622},[274,159484,159485],{},"输入小数：",[19,159487,159489],{"className":33310,"code":159488,"language":33312,"meta":28,"style":28},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[26,159490,159491,159510],{"__ignoreMap":28},[52,159492,159493,159495,159497,159499,159501,159503,159505,159508],{"class":54,"line":55},[52,159494,157699],{"class":622},[52,159496,2099],{"class":160},[52,159498,112717],{"class":90},[52,159500,3121],{"class":622},[52,159502,56751],{"class":90},[52,159504,3121],{"class":622},[52,159506,159507],{"class":62},"\"请输入身高:\"",[52,159509,33429],{"class":622},[52,159511,159512,159514,159516,159518,159521,159523,159525,159528,159530,159533],{"class":54,"line":69},[52,159513,33347],{"class":90},[52,159515,3121],{"class":622},[52,159517,3170],{"class":160},[52,159519,159520],{"class":62},"\"身高:",[52,159522,4008],{"class":90},[52,159524,27930],{"class":622},[52,159526,159527],{"class":160},":.2f",[52,159529,4058],{"class":90},[52,159531,159532],{"class":62},"米\"",[52,159534,170],{"class":622},[14,159536,159538],{"id":159537},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[274,159540,125660],{},[1070,159542,159543,159546,159549,159552],{},[1073,159544,159545],{},"输入商品单价。",[1073,159547,159548],{},"输入购买数量。",[1073,159550,159551],{},"输入折扣，例如 0.8 表示八折。",[1073,159553,159554],{},"输出最终金额，保留两位小数。",[274,159556,12991],{},[19,159558,159560],{"className":33310,"code":159559,"language":33312,"meta":28,"style":28},"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",[26,159561,159562,159581,159600,159620,159624,159644,159648,159671,159692,159714],{"__ignoreMap":28},[52,159563,159564,159566,159568,159570,159572,159574,159576,159579],{"class":54,"line":55},[52,159565,149049],{"class":622},[52,159567,2099],{"class":160},[52,159569,112717],{"class":90},[52,159571,3121],{"class":622},[52,159573,56751],{"class":90},[52,159575,3121],{"class":622},[52,159577,159578],{"class":62},"\"请输入商品单价:\"",[52,159580,33429],{"class":622},[52,159582,159583,159585,159587,159589,159591,159593,159595,159598],{"class":54,"line":69},[52,159584,149059],{"class":622},[52,159586,2099],{"class":160},[52,159588,5344],{"class":90},[52,159590,3121],{"class":622},[52,159592,56751],{"class":90},[52,159594,3121],{"class":622},[52,159596,159597],{"class":62},"\"请输入购买数量:\"",[52,159599,33429],{"class":622},[52,159601,159602,159605,159607,159609,159611,159613,159615,159618],{"class":54,"line":82},[52,159603,159604],{"class":622},"discount ",[52,159606,2099],{"class":160},[52,159608,112717],{"class":90},[52,159610,3121],{"class":622},[52,159612,56751],{"class":90},[52,159614,3121],{"class":622},[52,159616,159617],{"class":62},"\"请输入折扣:\"",[52,159619,33429],{"class":622},[52,159621,159622],{"class":54,"line":97},[52,159623,116],{"emptyLinePlaceholder":115},[52,159625,159626,159629,159631,159634,159636,159639,159641],{"class":54,"line":112},[52,159627,159628],{"class":622},"total ",[52,159630,2099],{"class":160},[52,159632,159633],{"class":622}," price ",[52,159635,1095],{"class":160},[52,159637,159638],{"class":622}," count ",[52,159640,1095],{"class":160},[52,159642,159643],{"class":622}," discount\n",[52,159645,159646],{"class":54,"line":119},[52,159647,116],{"emptyLinePlaceholder":115},[52,159649,159650,159652,159654,159656,159659,159661,159663,159665,159667,159669],{"class":54,"line":130},[52,159651,33347],{"class":90},[52,159653,3121],{"class":622},[52,159655,3170],{"class":160},[52,159657,159658],{"class":62},"\"商品单价:",[52,159660,4008],{"class":90},[52,159662,82743],{"class":622},[52,159664,159527],{"class":160},[52,159666,4058],{"class":90},[52,159668,3364],{"class":62},[52,159670,170],{"class":622},[52,159672,159673,159675,159677,159679,159682,159684,159686,159688,159690],{"class":54,"line":136},[52,159674,33347],{"class":90},[52,159676,3121],{"class":622},[52,159678,3170],{"class":160},[52,159680,159681],{"class":62},"\"购买数量:",[52,159683,4008],{"class":90},[52,159685,87362],{"class":622},[52,159687,4058],{"class":90},[52,159689,3364],{"class":62},[52,159691,170],{"class":622},[52,159693,159694,159696,159698,159700,159703,159705,159708,159710,159712],{"class":54,"line":141},[52,159695,33347],{"class":90},[52,159697,3121],{"class":622},[52,159699,3170],{"class":160},[52,159701,159702],{"class":62},"\"折扣:",[52,159704,4008],{"class":90},[52,159706,159707],{"class":622},"discount",[52,159709,4058],{"class":90},[52,159711,3364],{"class":62},[52,159713,170],{"class":622},[52,159715,159716,159718,159720,159722,159725,159727,159730,159732,159734,159736],{"class":54,"line":146},[52,159717,33347],{"class":90},[52,159719,3121],{"class":622},[52,159721,3170],{"class":160},[52,159723,159724],{"class":62},"\"应付金额:",[52,159726,4008],{"class":90},[52,159728,159729],{"class":622},"total",[52,159731,159527],{"class":160},[52,159733,4058],{"class":90},[52,159735,159380],{"class":62},[52,159737,170],{"class":622},[14,159739,159741],{"id":159740},"_213-易错点","2.13 易错点",[1070,159743,159744,159749,159755,159763,159766],{},[1073,159745,159746,159748],{},[26,159747,159391],{}," 的结果是字符串，做运算前要转换。",[1073,159750,159751,159752,31319],{},"字符串拼接时，数字要先 ",[26,159753,159754],{},"str()",[1073,159756,159757,159759,159760,159762],{},[26,159758,2099],{}," 是赋值，",[26,159761,5909],{}," 是比较。",[1073,159764,159765],{},"Python 没有自增自减运算符。",[1073,159767,159768],{},"浮点数计算可能有精度误差：",[19,159770,159772],{"className":33310,"code":159771,"language":33312,"meta":28,"style":28},"print(0.1 + 0.2)\n",[26,159773,159774],{"__ignoreMap":28},[52,159775,159776,159778,159780,159782,159784,159787],{"class":54,"line":55},[52,159777,33347],{"class":90},[52,159779,3121],{"class":622},[52,159781,89138],{"class":90},[52,159783,48498],{"class":160},[52,159785,159786],{"class":90}," 0.2",[52,159788,170],{"class":622},[274,159790,159791,159792,159795],{},"金额计算如果要求严格，可以后续学习 ",[26,159793,159794],{},"decimal"," 模块。",[14,159797,159799],{"id":159798},"_214-本章练习","2.14 本章练习",[1070,159801,159802,159805,159808,159811,159814],{},[1073,159803,159804],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[1073,159806,159807],{},"输入圆的半径，计算面积，保留两位小数。",[1073,159809,159810],{},"输入工资和奖金，计算总收入。",[1073,159812,159813],{},"输入摄氏温度，转换为华氏温度。",[1073,159815,159816],{},"写一个 BMI 计算程序：",[19,159818,159821],{"className":159819,"code":159820,"language":24,"meta":28},[22],"BMI = 体重kg \u002F 身高m ** 2\n",[26,159822,159820],{"__ignoreMap":28},[3015,159824,159825],{},"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":28,"searchDepth":69,"depth":69,"links":159827},[159828,159829,159830,159831,159832,159833,159834,159840,159841,159842,159847,159848,159849,159850],{"id":157389,"depth":69,"text":157390},{"id":157498,"depth":69,"text":157499},{"id":157669,"depth":69,"text":157670},{"id":157746,"depth":69,"text":157747},{"id":53662,"depth":69,"text":53663},{"id":158052,"depth":69,"text":158053},{"id":158278,"depth":69,"text":158279,"children":159835},[159836,159837,159838,159839],{"id":158282,"depth":82,"text":158283},{"id":158476,"depth":82,"text":158477},{"id":158564,"depth":82,"text":158565},{"id":158670,"depth":82,"text":158671},{"id":158779,"depth":69,"text":158780},{"id":158937,"depth":69,"text":158938},{"id":159002,"depth":69,"text":159003,"children":159843},[159844,159845,159846],{"id":159006,"depth":82,"text":159007},{"id":159151,"depth":82,"text":159152},{"id":159254,"depth":82,"text":159255},{"id":159385,"depth":69,"text":159386},{"id":159537,"depth":69,"text":159538},{"id":159740,"depth":69,"text":159741},{"id":159798,"depth":69,"text":159799},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157381,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159857,"title":159858,"body":159859,"description":3046,"extension":3047,"meta":161495,"navigation":115,"path":161496,"seo":161497,"stem":161498,"__hash__":161499},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159860,"toc":161476},[159861,159864,159868,159871,159886,159889,159917,159921,159971,159973,159989,159992,160018,160021,160025,160092,160095,160111,160115,160118,160236,160239,160246,160295,160301,160305,160308,160421,160424,160428,160432,160435,160485,160489,160492,160542,160546,160549,160587,160591,160594,160640,160643,160678,160682,160687,160690,160736,160738,160805,160809,160815,160926,160935,160939,160941,160952,160954,161120,161124,161126,161140,161142,161356,161360,161379,161396,161399,161445,161449,161473],[10,159862,159858],{"id":159863},"_3-判断语句",[14,159865,159867],{"id":159866},"_31-布尔值","3.1 布尔值",[274,159869,159870],{},"判断语句依赖布尔值：",[19,159872,159874],{"className":33310,"code":159873,"language":33312,"meta":28,"style":28},"True\nFalse\n",[26,159875,159876,159881],{"__ignoreMap":28},[52,159877,159878],{"class":54,"line":55},[52,159879,159880],{"class":90},"True\n",[52,159882,159883],{"class":54,"line":69},[52,159884,159885],{"class":90},"False\n",[274,159887,159888],{},"比较表达式会产生布尔值：",[19,159890,159892],{"className":33310,"code":159891,"language":33312,"meta":28,"style":28},"age = 18\nprint(age >= 18)  # True\n",[26,159893,159894,159902],{"__ignoreMap":28},[52,159895,159896,159898,159900],{"class":54,"line":55},[52,159897,148914],{"class":622},[52,159899,2099],{"class":160},[52,159901,148919],{"class":90},[52,159903,159904,159906,159908,159910,159912,159914],{"class":54,"line":69},[52,159905,33347],{"class":90},[52,159907,158136],{"class":622},[52,159909,4677],{"class":160},[52,159911,158653],{"class":90},[52,159913,48740],{"class":622},[52,159915,159916],{"class":332},"# True\n",[14,159918,159920],{"id":159919},"_32-if基础语法","3.2 if基础语法",[19,159922,159924],{"className":33310,"code":159923,"language":33312,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[26,159925,159926,159944,159948,159960],{"__ignoreMap":28},[52,159927,159928,159930,159932,159934,159936,159938,159940,159942],{"class":54,"line":55},[52,159929,148914],{"class":622},[52,159931,2099],{"class":160},[52,159933,5344],{"class":90},[52,159935,3121],{"class":622},[52,159937,56751],{"class":90},[52,159939,3121],{"class":622},[52,159941,154762],{"class":62},[52,159943,33429],{"class":622},[52,159945,159946],{"class":54,"line":69},[52,159947,116],{"emptyLinePlaceholder":115},[52,159949,159950,159952,159954,159956,159958],{"class":54,"line":82},[52,159951,4509],{"class":160},[52,159953,18663],{"class":622},[52,159955,4677],{"class":160},[52,159957,158653],{"class":90},[52,159959,6698],{"class":622},[52,159961,159962,159964,159966,159969],{"class":54,"line":97},[52,159963,34231],{"class":90},[52,159965,3121],{"class":622},[52,159967,159968],{"class":62},"\"可以进入网吧\"",[52,159970,170],{"class":622},[274,159972,11981],{},[1070,159974,159975,159980,159983,159986],{},[1073,159976,159977,159979],{},[26,159978,4509],{}," 后面是条件表达式。",[1073,159981,159982],{},"条件后面必须写冒号。",[1073,159984,159985],{},"条件成立时执行缩进代码块。",[1073,159987,159988],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[274,159990,159991],{},"错误示例：",[19,159993,159995],{"className":33310,"code":159994,"language":33312,"meta":28,"style":28},"if age >= 18\n    print(\"可以进入\")\n",[26,159996,159997,160007],{"__ignoreMap":28},[52,159998,159999,160001,160003,160005],{"class":54,"line":55},[52,160000,4509],{"class":160},[52,160002,18663],{"class":622},[52,160004,4677],{"class":160},[52,160006,148919],{"class":90},[52,160008,160009,160011,160013,160016],{"class":54,"line":69},[52,160010,34231],{"class":90},[52,160012,3121],{"class":622},[52,160014,160015],{"class":62},"\"可以进入\"",[52,160017,170],{"class":622},[274,160019,160020],{},"缺少冒号。",[14,160022,160024],{"id":160023},"_33-if-else","3.3 if else",[19,160026,160028],{"className":33310,"code":160027,"language":33312,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[26,160029,160030,160048,160052,160064,160075,160081],{"__ignoreMap":28},[52,160031,160032,160034,160036,160038,160040,160042,160044,160046],{"class":54,"line":55},[52,160033,148914],{"class":622},[52,160035,2099],{"class":160},[52,160037,5344],{"class":90},[52,160039,3121],{"class":622},[52,160041,56751],{"class":90},[52,160043,3121],{"class":622},[52,160045,154762],{"class":62},[52,160047,33429],{"class":622},[52,160049,160050],{"class":54,"line":69},[52,160051,116],{"emptyLinePlaceholder":115},[52,160053,160054,160056,160058,160060,160062],{"class":54,"line":82},[52,160055,4509],{"class":160},[52,160057,18663],{"class":622},[52,160059,4677],{"class":160},[52,160061,158653],{"class":90},[52,160063,6698],{"class":622},[52,160065,160066,160068,160070,160073],{"class":54,"line":97},[52,160067,34231],{"class":90},[52,160069,3121],{"class":622},[52,160071,160072],{"class":62},"\"成年人\"",[52,160074,170],{"class":622},[52,160076,160077,160079],{"class":54,"line":112},[52,160078,4668],{"class":160},[52,160080,6698],{"class":622},[52,160082,160083,160085,160087,160090],{"class":54,"line":119},[52,160084,34231],{"class":90},[52,160086,3121],{"class":622},[52,160088,160089],{"class":62},"\"未成年人\"",[52,160091,170],{"class":622},[274,160093,160094],{},"执行逻辑：",[1070,160096,160097,160103,160108],{},[1073,160098,160099,160100,160102],{},"条件成立，执行 ",[26,160101,4509],{}," 代码块。",[1073,160104,160105,160106,160102],{},"条件不成立，执行 ",[26,160107,4668],{},[1073,160109,160110],{},"两个代码块只会执行其中一个。",[14,160112,160114],{"id":160113},"_34-if-elif-else","3.4 if elif else",[274,160116,160117],{},"多条件判断：",[19,160119,160121],{"className":33310,"code":160120,"language":33312,"meta":28,"style":28},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[26,160122,160123,160141,160145,160159,160170,160184,160195,160208,160219,160225],{"__ignoreMap":28},[52,160124,160125,160127,160129,160131,160133,160135,160137,160139],{"class":54,"line":55},[52,160126,157726],{"class":622},[52,160128,2099],{"class":160},[52,160130,5344],{"class":90},[52,160132,3121],{"class":622},[52,160134,56751],{"class":90},[52,160136,3121],{"class":622},[52,160138,154777],{"class":62},[52,160140,33429],{"class":622},[52,160142,160143],{"class":54,"line":69},[52,160144,116],{"emptyLinePlaceholder":115},[52,160146,160147,160149,160152,160154,160157],{"class":54,"line":82},[52,160148,4509],{"class":160},[52,160150,160151],{"class":622}," score ",[52,160153,4677],{"class":160},[52,160155,160156],{"class":90}," 90",[52,160158,6698],{"class":622},[52,160160,160161,160163,160165,160168],{"class":54,"line":97},[52,160162,34231],{"class":90},[52,160164,3121],{"class":622},[52,160166,160167],{"class":62},"\"优秀\"",[52,160169,170],{"class":622},[52,160171,160172,160175,160177,160179,160182],{"class":54,"line":112},[52,160173,160174],{"class":160},"elif",[52,160176,160151],{"class":622},[52,160178,4677],{"class":160},[52,160180,160181],{"class":90}," 80",[52,160183,6698],{"class":622},[52,160185,160186,160188,160190,160193],{"class":54,"line":119},[52,160187,34231],{"class":90},[52,160189,3121],{"class":622},[52,160191,160192],{"class":62},"\"良好\"",[52,160194,170],{"class":622},[52,160196,160197,160199,160201,160203,160206],{"class":54,"line":130},[52,160198,160174],{"class":160},[52,160200,160151],{"class":622},[52,160202,4677],{"class":160},[52,160204,160205],{"class":90}," 60",[52,160207,6698],{"class":622},[52,160209,160210,160212,160214,160217],{"class":54,"line":136},[52,160211,34231],{"class":90},[52,160213,3121],{"class":622},[52,160215,160216],{"class":62},"\"及格\"",[52,160218,170],{"class":622},[52,160220,160221,160223],{"class":54,"line":141},[52,160222,4668],{"class":160},[52,160224,6698],{"class":622},[52,160226,160227,160229,160231,160234],{"class":54,"line":146},[52,160228,34231],{"class":90},[52,160230,3121],{"class":622},[52,160232,160233],{"class":62},"\"不及格\"",[52,160235,170],{"class":622},[274,160237,160238],{},"注意判断顺序很重要。",[274,160240,160241,160242,160245],{},"如果把 ",[26,160243,160244],{},"score >= 60"," 放在最前面：",[19,160247,160249],{"className":33310,"code":160248,"language":33312,"meta":28,"style":28},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[26,160250,160251,160263,160273,160285],{"__ignoreMap":28},[52,160252,160253,160255,160257,160259,160261],{"class":54,"line":55},[52,160254,4509],{"class":160},[52,160256,160151],{"class":622},[52,160258,4677],{"class":160},[52,160260,160205],{"class":90},[52,160262,6698],{"class":622},[52,160264,160265,160267,160269,160271],{"class":54,"line":69},[52,160266,34231],{"class":90},[52,160268,3121],{"class":622},[52,160270,160216],{"class":62},[52,160272,170],{"class":622},[52,160274,160275,160277,160279,160281,160283],{"class":54,"line":82},[52,160276,160174],{"class":160},[52,160278,160151],{"class":622},[52,160280,4677],{"class":160},[52,160282,160156],{"class":90},[52,160284,6698],{"class":622},[52,160286,160287,160289,160291,160293],{"class":54,"line":97},[52,160288,34231],{"class":90},[52,160290,3121],{"class":622},[52,160292,160167],{"class":62},[52,160294,170],{"class":622},[274,160296,160297,160298,160300],{},"成绩 95 会先满足 ",[26,160299,160244],{},"，后面的优秀分支就不会执行。",[14,160302,160304],{"id":160303},"_35-判断语句嵌套","3.5 判断语句嵌套",[274,160306,160307],{},"嵌套判断就是在一个判断内部再写判断。",[19,160309,160311],{"className":33310,"code":160310,"language":33312,"meta":28,"style":28},"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",[26,160312,160313,160331,160346,160350,160362,160376,160386,160393,160404,160410],{"__ignoreMap":28},[52,160314,160315,160317,160319,160321,160323,160325,160327,160329],{"class":54,"line":55},[52,160316,148914],{"class":622},[52,160318,2099],{"class":160},[52,160320,5344],{"class":90},[52,160322,3121],{"class":622},[52,160324,56751],{"class":90},[52,160326,3121],{"class":622},[52,160328,154762],{"class":62},[52,160330,33429],{"class":622},[52,160332,160333,160335,160337,160339,160341,160344],{"class":54,"line":69},[52,160334,158729],{"class":622},[52,160336,2099],{"class":160},[52,160338,63535],{"class":90},[52,160340,3121],{"class":622},[52,160342,160343],{"class":62},"\"是否有票(y\u002Fn):\"",[52,160345,170],{"class":622},[52,160347,160348],{"class":54,"line":82},[52,160349,116],{"emptyLinePlaceholder":115},[52,160351,160352,160354,160356,160358,160360],{"class":54,"line":97},[52,160353,4509],{"class":160},[52,160355,18663],{"class":622},[52,160357,4677],{"class":160},[52,160359,158653],{"class":90},[52,160361,6698],{"class":622},[52,160363,160364,160366,160369,160371,160374],{"class":54,"line":112},[52,160365,6060],{"class":160},[52,160367,160368],{"class":622}," has_ticket ",[52,160370,5909],{"class":160},[52,160372,160373],{"class":62}," \"y\"",[52,160375,6698],{"class":622},[52,160377,160378,160380,160382,160384],{"class":54,"line":119},[52,160379,35383],{"class":90},[52,160381,3121],{"class":622},[52,160383,160015],{"class":62},[52,160385,170],{"class":622},[52,160387,160388,160391],{"class":54,"line":130},[52,160389,160390],{"class":160},"    else",[52,160392,6698],{"class":622},[52,160394,160395,160397,160399,160402],{"class":54,"line":136},[52,160396,35383],{"class":90},[52,160398,3121],{"class":622},[52,160400,160401],{"class":62},"\"请先买票\"",[52,160403,170],{"class":622},[52,160405,160406,160408],{"class":54,"line":141},[52,160407,4668],{"class":160},[52,160409,6698],{"class":622},[52,160411,160412,160414,160416,160419],{"class":54,"line":146},[52,160413,34231],{"class":90},[52,160415,3121],{"class":622},[52,160417,160418],{"class":62},"\"未成年人禁止进入\"",[52,160420,170],{"class":622},[274,160422,160423],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160425,160427],{"id":160426},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[30,160429,160431],{"id":160430},"_361-and","3.6.1 and",[274,160433,160434],{},"两个条件都成立才成立。",[19,160436,160438],{"className":33310,"code":160437,"language":33312,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[26,160439,160440,160448,160456,160460,160475],{"__ignoreMap":28},[52,160441,160442,160444,160446],{"class":54,"line":55},[52,160443,148914],{"class":622},[52,160445,2099],{"class":160},[52,160447,90993],{"class":90},[52,160449,160450,160452,160454],{"class":54,"line":69},[52,160451,158729],{"class":622},[52,160453,2099],{"class":160},[52,160455,155967],{"class":90},[52,160457,160458],{"class":54,"line":82},[52,160459,116],{"emptyLinePlaceholder":115},[52,160461,160462,160464,160466,160468,160470,160472],{"class":54,"line":97},[52,160463,4509],{"class":160},[52,160465,18663],{"class":622},[52,160467,4677],{"class":160},[52,160469,158653],{"class":90},[52,160471,2030],{"class":160},[52,160473,160474],{"class":622}," has_ticket:\n",[52,160476,160477,160479,160481,160483],{"class":54,"line":112},[52,160478,34231],{"class":90},[52,160480,3121],{"class":622},[52,160482,160015],{"class":62},[52,160484,170],{"class":622},[30,160486,160488],{"id":160487},"_362-or","3.6.2 or",[274,160490,160491],{},"只要一个条件成立就成立。",[19,160493,160495],{"className":33310,"code":160494,"language":33312,"meta":28,"style":28},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[26,160496,160497,160506,160515,160519,160531],{"__ignoreMap":28},[52,160498,160499,160502,160504],{"class":54,"line":55},[52,160500,160501],{"class":622},"is_vip ",[52,160503,2099],{"class":160},[52,160505,128175],{"class":90},[52,160507,160508,160511,160513],{"class":54,"line":69},[52,160509,160510],{"class":622},"coupon ",[52,160512,2099],{"class":160},[52,160514,155967],{"class":90},[52,160516,160517],{"class":54,"line":82},[52,160518,116],{"emptyLinePlaceholder":115},[52,160520,160521,160523,160526,160528],{"class":54,"line":97},[52,160522,4509],{"class":160},[52,160524,160525],{"class":622}," is_vip ",[52,160527,118010],{"class":160},[52,160529,160530],{"class":622}," coupon:\n",[52,160532,160533,160535,160537,160540],{"class":54,"line":112},[52,160534,34231],{"class":90},[52,160536,3121],{"class":622},[52,160538,160539],{"class":62},"\"可以享受优惠\"",[52,160541,170],{"class":622},[30,160543,160545],{"id":160544},"_363-not","3.6.3 not",[274,160547,160548],{},"取反。",[19,160550,160552],{"className":33310,"code":160551,"language":33312,"meta":28,"style":28},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[26,160553,160554,160563,160567,160576],{"__ignoreMap":28},[52,160555,160556,160559,160561],{"class":54,"line":55},[52,160557,160558],{"class":622},"is_closed ",[52,160560,2099],{"class":160},[52,160562,128175],{"class":90},[52,160564,160565],{"class":54,"line":69},[52,160566,116],{"emptyLinePlaceholder":115},[52,160568,160569,160571,160573],{"class":54,"line":82},[52,160570,4509],{"class":160},[52,160572,41862],{"class":160},[52,160574,160575],{"class":622}," is_closed:\n",[52,160577,160578,160580,160582,160585],{"class":54,"line":97},[52,160579,34231],{"class":90},[52,160581,3121],{"class":622},[52,160583,160584],{"class":62},"\"店铺营业中\"",[52,160586,170],{"class":622},[14,160588,160590],{"id":160589},"_37-链式比较","3.7 链式比较",[274,160592,160593],{},"Python 支持链式比较：",[19,160595,160597],{"className":33310,"code":160596,"language":33312,"meta":28,"style":28},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[26,160598,160599,160608,160612,160629],{"__ignoreMap":28},[52,160600,160601,160603,160605],{"class":54,"line":55},[52,160602,157726],{"class":622},[52,160604,2099],{"class":160},[52,160606,160607],{"class":90}," 85\n",[52,160609,160610],{"class":54,"line":69},[52,160611,116],{"emptyLinePlaceholder":115},[52,160613,160614,160616,160618,160621,160623,160625,160627],{"class":54,"line":82},[52,160615,4509],{"class":160},[52,160617,7052],{"class":90},[52,160619,160620],{"class":160}," \u003C=",[52,160622,160151],{"class":622},[52,160624,4566],{"class":160},[52,160626,8710],{"class":90},[52,160628,6698],{"class":622},[52,160630,160631,160633,160635,160638],{"class":54,"line":97},[52,160632,34231],{"class":90},[52,160634,3121],{"class":622},[52,160636,160637],{"class":62},"\"成绩合法\"",[52,160639,170],{"class":622},[274,160641,160642],{},"等价于：",[19,160644,160646],{"className":33310,"code":160645,"language":33312,"meta":28,"style":28},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[26,160647,160648,160668],{"__ignoreMap":28},[52,160649,160650,160652,160654,160656,160658,160660,160662,160664,160666],{"class":54,"line":55},[52,160651,4509],{"class":160},[52,160653,160151],{"class":622},[52,160655,4677],{"class":160},[52,160657,7052],{"class":90},[52,160659,2030],{"class":160},[52,160661,160151],{"class":622},[52,160663,4566],{"class":160},[52,160665,8710],{"class":90},[52,160667,6698],{"class":622},[52,160669,160670,160672,160674,160676],{"class":54,"line":69},[52,160671,34231],{"class":90},[52,160673,3121],{"class":622},[52,160675,160637],{"class":62},[52,160677,170],{"class":622},[14,160679,160681],{"id":160680},"_38-真值和假值","3.8 真值和假值",[274,160683,119386,160684,160686],{},[26,160685,4509],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[274,160688,160689],{},"假值：",[19,160691,160693],{"className":33310,"code":160692,"language":33312,"meta":28,"style":28},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[26,160694,160695,160699,160704,160708,160712,160717,160721,160725,160730],{"__ignoreMap":28},[52,160696,160697],{"class":54,"line":55},[52,160698,159885],{"class":90},[52,160700,160701],{"class":54,"line":69},[52,160702,160703],{"class":90},"None\n",[52,160705,160706],{"class":54,"line":82},[52,160707,2719],{"class":90},[52,160709,160710],{"class":54,"line":97},[52,160711,35274],{"class":90},[52,160713,160714],{"class":54,"line":112},[52,160715,160716],{"class":62},"\"\"\n",[52,160718,160719],{"class":54,"line":119},[52,160720,35289],{"class":622},[52,160722,160723],{"class":54,"line":130},[52,160724,4938],{"class":622},[52,160726,160727],{"class":54,"line":136},[52,160728,160729],{"class":622},"{}\n",[52,160731,160732,160734],{"class":54,"line":141},[52,160733,157658],{"class":90},[52,160735,4938],{"class":622},[274,160737,18091],{},[19,160739,160741],{"className":33310,"code":160740,"language":33312,"meta":28,"style":28},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[26,160742,160743,160757,160761,160768,160788,160794],{"__ignoreMap":28},[52,160744,160745,160747,160749,160751,160753,160755],{"class":54,"line":55},[52,160746,148904],{"class":622},[52,160748,2099],{"class":160},[52,160750,63535],{"class":90},[52,160752,3121],{"class":622},[52,160754,154747],{"class":62},[52,160756,170],{"class":622},[52,160758,160759],{"class":54,"line":69},[52,160760,116],{"emptyLinePlaceholder":115},[52,160762,160763,160765],{"class":54,"line":82},[52,160764,4509],{"class":160},[52,160766,160767],{"class":622}," name:\n",[52,160769,160770,160772,160774,160776,160778,160780,160782,160784,160786],{"class":54,"line":97},[52,160771,34231],{"class":90},[52,160773,3121],{"class":622},[52,160775,3170],{"class":160},[52,160777,159422],{"class":62},[52,160779,4008],{"class":90},[52,160781,82738],{"class":622},[52,160783,4058],{"class":90},[52,160785,3364],{"class":62},[52,160787,170],{"class":622},[52,160789,160790,160792],{"class":54,"line":112},[52,160791,4668],{"class":160},[52,160793,6698],{"class":622},[52,160795,160796,160798,160800,160803],{"class":54,"line":119},[52,160797,34231],{"class":90},[52,160799,3121],{"class":622},[52,160801,160802],{"class":62},"\"姓名不能为空\"",[52,160804,170],{"class":622},[14,160806,160808],{"id":160807},"_39-match语句","3.9 match语句",[274,160810,160811,160812,160814],{},"Python 3.10 开始支持 ",[26,160813,74193],{},"。它适合处理固定选项。",[19,160816,160818],{"className":33310,"code":160817,"language":33312,"meta":28,"style":28},"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",[26,160819,160820,160836,160840,160847,160857,160868,160877,160888,160897,160908,160915],{"__ignoreMap":28},[52,160821,160822,160825,160827,160829,160831,160834],{"class":54,"line":55},[52,160823,160824],{"class":622},"command ",[52,160826,2099],{"class":160},[52,160828,63535],{"class":90},[52,160830,3121],{"class":622},[52,160832,160833],{"class":62},"\"请输入命令:\"",[52,160835,170],{"class":622},[52,160837,160838],{"class":54,"line":69},[52,160839,116],{"emptyLinePlaceholder":115},[52,160841,160842,160844],{"class":54,"line":82},[52,160843,74193],{"class":160},[52,160845,160846],{"class":622}," command:\n",[52,160848,160849,160852,160855],{"class":54,"line":97},[52,160850,160851],{"class":160},"    case",[52,160853,160854],{"class":62}," \"start\"",[52,160856,6698],{"class":622},[52,160858,160859,160861,160863,160866],{"class":54,"line":112},[52,160860,35383],{"class":90},[52,160862,3121],{"class":622},[52,160864,160865],{"class":62},"\"启动\"",[52,160867,170],{"class":622},[52,160869,160870,160872,160875],{"class":54,"line":119},[52,160871,160851],{"class":160},[52,160873,160874],{"class":62}," \"stop\"",[52,160876,6698],{"class":622},[52,160878,160879,160881,160883,160886],{"class":54,"line":130},[52,160880,35383],{"class":90},[52,160882,3121],{"class":622},[52,160884,160885],{"class":62},"\"停止\"",[52,160887,170],{"class":622},[52,160889,160890,160892,160895],{"class":54,"line":136},[52,160891,160851],{"class":160},[52,160893,160894],{"class":62}," \"restart\"",[52,160896,6698],{"class":622},[52,160898,160899,160901,160903,160906],{"class":54,"line":141},[52,160900,35383],{"class":90},[52,160902,3121],{"class":622},[52,160904,160905],{"class":62},"\"重启\"",[52,160907,170],{"class":622},[52,160909,160910,160912],{"class":54,"line":146},[52,160911,160851],{"class":160},[52,160913,160914],{"class":622}," _:\n",[52,160916,160917,160919,160921,160924],{"class":54,"line":152},[52,160918,35383],{"class":90},[52,160920,3121],{"class":622},[52,160922,160923],{"class":62},"\"未知命令\"",[52,160925,170],{"class":622},[274,160927,160928,160929,160931,160932,160934],{},"入门阶段掌握 ",[26,160930,157026],{}," 更重要，",[26,160933,74193],{}," 可以作为补充。",[14,160936,160938],{"id":160937},"_310-小案例成绩等级","3.10 小案例：成绩等级",[274,160940,125660],{},[1070,160942,160943,160946,160949],{},[1073,160944,160945],{},"输入成绩。",[1073,160947,160948],{},"判断成绩是否合法。",[1073,160950,160951],{},"输出等级。",[274,160953,12991],{},[19,160955,160957],{"className":33310,"code":160956,"language":33312,"meta":28,"style":28},"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",[26,160958,160959,160977,160981,160999,161010,161022,161033,161045,161056,161069,161080,161092,161103,161109],{"__ignoreMap":28},[52,160960,160961,160963,160965,160967,160969,160971,160973,160975],{"class":54,"line":55},[52,160962,157726],{"class":622},[52,160964,2099],{"class":160},[52,160966,112717],{"class":90},[52,160968,3121],{"class":622},[52,160970,56751],{"class":90},[52,160972,3121],{"class":622},[52,160974,154777],{"class":62},[52,160976,33429],{"class":622},[52,160978,160979],{"class":54,"line":69},[52,160980,116],{"emptyLinePlaceholder":115},[52,160982,160983,160985,160987,160989,160991,160993,160995,160997],{"class":54,"line":82},[52,160984,4509],{"class":160},[52,160986,41862],{"class":160},[52,160988,7052],{"class":90},[52,160990,160620],{"class":160},[52,160992,160151],{"class":622},[52,160994,4566],{"class":160},[52,160996,8710],{"class":90},[52,160998,6698],{"class":622},[52,161000,161001,161003,161005,161008],{"class":54,"line":97},[52,161002,34231],{"class":90},[52,161004,3121],{"class":622},[52,161006,161007],{"class":62},"\"成绩不合法\"",[52,161009,170],{"class":622},[52,161011,161012,161014,161016,161018,161020],{"class":54,"line":112},[52,161013,160174],{"class":160},[52,161015,160151],{"class":622},[52,161017,4677],{"class":160},[52,161019,160156],{"class":90},[52,161021,6698],{"class":622},[52,161023,161024,161026,161028,161031],{"class":54,"line":119},[52,161025,34231],{"class":90},[52,161027,3121],{"class":622},[52,161029,161030],{"class":62},"\"等级:A\"",[52,161032,170],{"class":622},[52,161034,161035,161037,161039,161041,161043],{"class":54,"line":130},[52,161036,160174],{"class":160},[52,161038,160151],{"class":622},[52,161040,4677],{"class":160},[52,161042,160181],{"class":90},[52,161044,6698],{"class":622},[52,161046,161047,161049,161051,161054],{"class":54,"line":136},[52,161048,34231],{"class":90},[52,161050,3121],{"class":622},[52,161052,161053],{"class":62},"\"等级:B\"",[52,161055,170],{"class":622},[52,161057,161058,161060,161062,161064,161067],{"class":54,"line":141},[52,161059,160174],{"class":160},[52,161061,160151],{"class":622},[52,161063,4677],{"class":160},[52,161065,161066],{"class":90}," 70",[52,161068,6698],{"class":622},[52,161070,161071,161073,161075,161078],{"class":54,"line":146},[52,161072,34231],{"class":90},[52,161074,3121],{"class":622},[52,161076,161077],{"class":62},"\"等级:C\"",[52,161079,170],{"class":622},[52,161081,161082,161084,161086,161088,161090],{"class":54,"line":152},[52,161083,160174],{"class":160},[52,161085,160151],{"class":622},[52,161087,4677],{"class":160},[52,161089,160205],{"class":90},[52,161091,6698],{"class":622},[52,161093,161094,161096,161098,161101],{"class":54,"line":157},[52,161095,34231],{"class":90},[52,161097,3121],{"class":622},[52,161099,161100],{"class":62},"\"等级:D\"",[52,161102,170],{"class":622},[52,161104,161105,161107],{"class":54,"line":173},[52,161106,4668],{"class":160},[52,161108,6698],{"class":622},[52,161110,161111,161113,161115,161118],{"class":54,"line":178},[52,161112,34231],{"class":90},[52,161114,3121],{"class":622},[52,161116,161117],{"class":62},"\"等级:E\"",[52,161119,170],{"class":622},[14,161121,161123],{"id":161122},"_311-小案例会员折扣","3.11 小案例：会员折扣",[274,161125,125660],{},[1070,161127,161128,161131,161134,161137],{},[1073,161129,161130],{},"输入消费金额。",[1073,161132,161133],{},"输入会员等级，普通、银卡、金卡。",[1073,161135,161136],{},"普通不打折，银卡 9 折，金卡 8 折。",[1073,161138,161139],{},"满 500 再减 50。",[274,161141,12991],{},[19,161143,161145],{"className":33310,"code":161144,"language":33312,"meta":28,"style":28},"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",[26,161146,161147,161167,161183,161187,161195,161199,161213,161223,161236,161245,161258,161266,161272,161283,161287,161301,161305,161319,161329,161333],{"__ignoreMap":28},[52,161148,161149,161152,161154,161156,161158,161160,161162,161165],{"class":54,"line":55},[52,161150,161151],{"class":622},"amount ",[52,161153,2099],{"class":160},[52,161155,112717],{"class":90},[52,161157,3121],{"class":622},[52,161159,56751],{"class":90},[52,161161,3121],{"class":622},[52,161163,161164],{"class":62},"\"请输入消费金额:\"",[52,161166,33429],{"class":622},[52,161168,161169,161172,161174,161176,161178,161181],{"class":54,"line":69},[52,161170,161171],{"class":622},"level ",[52,161173,2099],{"class":160},[52,161175,63535],{"class":90},[52,161177,3121],{"class":622},[52,161179,161180],{"class":62},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[52,161182,170],{"class":622},[52,161184,161185],{"class":54,"line":82},[52,161186,116],{"emptyLinePlaceholder":115},[52,161188,161189,161191,161193],{"class":54,"line":97},[52,161190,159604],{"class":622},[52,161192,2099],{"class":160},[52,161194,58629],{"class":90},[52,161196,161197],{"class":54,"line":112},[52,161198,116],{"emptyLinePlaceholder":115},[52,161200,161201,161203,161206,161208,161211],{"class":54,"line":119},[52,161202,4509],{"class":160},[52,161204,161205],{"class":622}," level ",[52,161207,5909],{"class":160},[52,161209,161210],{"class":62}," \"银卡\"",[52,161212,6698],{"class":622},[52,161214,161215,161218,161220],{"class":54,"line":130},[52,161216,161217],{"class":622},"    discount ",[52,161219,2099],{"class":160},[52,161221,161222],{"class":90}," 0.9\n",[52,161224,161225,161227,161229,161231,161234],{"class":54,"line":136},[52,161226,160174],{"class":160},[52,161228,161205],{"class":622},[52,161230,5909],{"class":160},[52,161232,161233],{"class":62}," \"金卡\"",[52,161235,6698],{"class":622},[52,161237,161238,161240,161242],{"class":54,"line":141},[52,161239,161217],{"class":622},[52,161241,2099],{"class":160},[52,161243,161244],{"class":90}," 0.8\n",[52,161246,161247,161249,161251,161253,161256],{"class":54,"line":146},[52,161248,160174],{"class":160},[52,161250,161205],{"class":622},[52,161252,5909],{"class":160},[52,161254,161255],{"class":62}," \"普通\"",[52,161257,6698],{"class":622},[52,161259,161260,161262,161264],{"class":54,"line":152},[52,161261,161217],{"class":622},[52,161263,2099],{"class":160},[52,161265,58629],{"class":90},[52,161267,161268,161270],{"class":54,"line":157},[52,161269,4668],{"class":160},[52,161271,6698],{"class":622},[52,161273,161274,161276,161278,161281],{"class":54,"line":173},[52,161275,34231],{"class":90},[52,161277,3121],{"class":622},[52,161279,161280],{"class":62},"\"会员等级输入错误，按普通会员计算\"",[52,161282,170],{"class":622},[52,161284,161285],{"class":54,"line":178},[52,161286,116],{"emptyLinePlaceholder":115},[52,161288,161289,161292,161294,161297,161299],{"class":54,"line":184},[52,161290,161291],{"class":622},"pay ",[52,161293,2099],{"class":160},[52,161295,161296],{"class":622}," amount ",[52,161298,1095],{"class":160},[52,161300,159643],{"class":622},[52,161302,161303],{"class":54,"line":189},[52,161304,116],{"emptyLinePlaceholder":115},[52,161306,161307,161309,161312,161314,161317],{"class":54,"line":201},[52,161308,4509],{"class":160},[52,161310,161311],{"class":622}," pay ",[52,161313,4677],{"class":160},[52,161315,161316],{"class":90}," 500",[52,161318,6698],{"class":622},[52,161320,161321,161324,161326],{"class":54,"line":206},[52,161322,161323],{"class":622},"    pay ",[52,161325,152620],{"class":160},[52,161327,161328],{"class":90}," 50\n",[52,161330,161331],{"class":54,"line":224},[52,161332,116],{"emptyLinePlaceholder":115},[52,161334,161335,161337,161339,161341,161343,161345,161348,161350,161352,161354],{"class":54,"line":229},[52,161336,33347],{"class":90},[52,161338,3121],{"class":622},[52,161340,3170],{"class":160},[52,161342,159724],{"class":62},[52,161344,4008],{"class":90},[52,161346,161347],{"class":622},"pay",[52,161349,159527],{"class":160},[52,161351,4058],{"class":90},[52,161353,159380],{"class":62},[52,161355,170],{"class":622},[14,161357,161359],{"id":161358},"_312-易错点","3.12 易错点",[1070,161361,161362,161365,161368,161371,161376],{},[1073,161363,161364],{},"冒号不能漏。",[1073,161366,161367],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[1073,161369,161370],{},"多分支判断要注意顺序。",[1073,161372,161373,161374,31319],{},"判断相等用 ",[26,161375,5909],{},[1073,161377,161378],{},"字符串比较区分大小写：",[19,161380,161382],{"className":33310,"code":161381,"language":33312,"meta":28,"style":28},"\"Y\" == \"y\"  # False\n",[26,161383,161384],{"__ignoreMap":28},[52,161385,161386,161389,161391,161393],{"class":54,"line":55},[52,161387,161388],{"class":62},"\"Y\"",[52,161390,104479],{"class":160},[52,161392,160373],{"class":62},[52,161394,161395],{"class":332},"  # False\n",[274,161397,161398],{},"可转换后再判断：",[19,161400,161402],{"className":33310,"code":161401,"language":33312,"meta":28,"style":28},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[26,161403,161404,161421,161434],{"__ignoreMap":28},[52,161405,161406,161409,161411,161413,161415,161418],{"class":54,"line":55},[52,161407,161408],{"class":622},"answer ",[52,161410,2099],{"class":160},[52,161412,63535],{"class":90},[52,161414,3121],{"class":622},[52,161416,161417],{"class":62},"\"是否继续(y\u002Fn):\"",[52,161419,161420],{"class":622},").lower()\n",[52,161422,161423,161425,161428,161430,161432],{"class":54,"line":69},[52,161424,4509],{"class":160},[52,161426,161427],{"class":622}," answer ",[52,161429,5909],{"class":160},[52,161431,160373],{"class":62},[52,161433,6698],{"class":622},[52,161435,161436,161438,161440,161443],{"class":54,"line":82},[52,161437,34231],{"class":90},[52,161439,3121],{"class":622},[52,161441,161442],{"class":62},"\"继续\"",[52,161444,170],{"class":622},[14,161446,161448],{"id":161447},"_313-本章练习","3.13 本章练习",[1070,161450,161451,161454,161457,161460,161470],{},[1073,161452,161453],{},"输入年龄，判断是否成年。",[1073,161455,161456],{},"输入年份，判断是否为闰年。",[1073,161458,161459],{},"输入三个数字，输出最大值。",[1073,161461,161462,161463,161466,161467,161469],{},"写登录判断：用户名是 ",[26,161464,161465],{},"admin"," 且密码是 ",[26,161468,18040],{}," 才登录成功。",[1073,161471,161472],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[3015,161474,161475],{},"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":28,"searchDepth":69,"depth":69,"links":161477},[161478,161479,161480,161481,161482,161483,161488,161489,161490,161491,161492,161493,161494],{"id":159866,"depth":69,"text":159867},{"id":159919,"depth":69,"text":159920},{"id":160023,"depth":69,"text":160024},{"id":160113,"depth":69,"text":160114},{"id":160303,"depth":69,"text":160304},{"id":160426,"depth":69,"text":160427,"children":161484},[161485,161486,161487],{"id":160430,"depth":82,"text":160431},{"id":160487,"depth":82,"text":160488},{"id":160544,"depth":82,"text":160545},{"id":160589,"depth":69,"text":160590},{"id":160680,"depth":69,"text":160681},{"id":160807,"depth":69,"text":160808},{"id":160937,"depth":69,"text":160938},{"id":161122,"depth":69,"text":161123},{"id":161358,"depth":69,"text":161359},{"id":161447,"depth":69,"text":161448},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159858,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161501,"title":161502,"body":161503,"description":3046,"extension":3047,"meta":163272,"navigation":115,"path":163273,"seo":163274,"stem":163275,"__hash__":163276},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161504,"toc":163252},[161505,161508,161512,161518,161521,161538,161542,161544,161561,161563,161608,161610,161627,161631,161634,161700,161703,161721,161725,161886,161895,161899,161903,161908,161955,161957,161963,161967,161972,162019,162021,162027,162031,162036,162072,162075,162122,162126,162132,162190,162195,162226,162231,162235,162290,162293,162365,162368,162427,162431,162434,162509,162512,162516,162622,162625,162651,162655,162667,162736,162739,162831,162835,162837,162848,162850,162980,162984,163186,163194,163198,163228,163232,163249],[10,161506,161502],{"id":161507},"_4-循环语句",[14,161509,161511],{"id":161510},"_41-为什么需要循环","4.1 为什么需要循环",[274,161513,161514,161515,161517],{},"如果要输出 1 到 100，不应该写 100 行 ",[26,161516,148840],{},"，而应该用循环。",[274,161519,161520],{},"循环适合处理重复任务：",[1070,161522,161523,161526,161529,161532,161535],{},[1073,161524,161525],{},"重复输出。",[1073,161527,161528],{},"重复输入。",[1073,161530,161531],{},"遍历数据。",[1073,161533,161534],{},"持续执行菜单。",[1073,161536,161537],{},"批量处理文件或数据。",[14,161539,161541],{"id":161540},"_42-while循环","4.2 while循环",[274,161543,8140],{},[19,161545,161547],{"className":33310,"code":161546,"language":33312,"meta":28,"style":28},"while 条件:\n    循环体\n",[26,161548,161549,161556],{"__ignoreMap":28},[52,161550,161551,161553],{"class":54,"line":55},[52,161552,111583],{"class":160},[52,161554,161555],{"class":622}," 条件:\n",[52,161557,161558],{"class":54,"line":69},[52,161559,161560],{"class":622},"    循环体\n",[274,161562,18091],{},[19,161564,161566],{"className":33310,"code":161565,"language":33312,"meta":28,"style":28},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[26,161567,161568,161576,161580,161592,161599],{"__ignoreMap":28},[52,161569,161570,161572,161574],{"class":54,"line":55},[52,161571,103076],{"class":622},[52,161573,2099],{"class":160},[52,161575,58629],{"class":90},[52,161577,161578],{"class":54,"line":69},[52,161579,116],{"emptyLinePlaceholder":115},[52,161581,161582,161584,161586,161588,161590],{"class":54,"line":82},[52,161583,111583],{"class":160},[52,161585,12394],{"class":622},[52,161587,4566],{"class":160},[52,161589,5110],{"class":90},[52,161591,6698],{"class":622},[52,161593,161594,161596],{"class":54,"line":97},[52,161595,34231],{"class":90},[52,161597,161598],{"class":622},"(i)\n",[52,161600,161601,161604,161606],{"class":54,"line":112},[52,161602,161603],{"class":622},"    i ",[52,161605,12433],{"class":160},[52,161607,58629],{"class":90},[274,161609,83857],{},[1070,161611,161612,161618,161621,161624],{},[1073,161613,161614,161615,31319],{},"判断条件 ",[26,161616,161617],{},"i \u003C= 5",[1073,161619,161620],{},"条件成立，执行循环体。",[1073,161622,161623],{},"执行完后回到条件判断。",[1073,161625,161626],{},"条件不成立，退出循环。",[14,161628,161630],{"id":161629},"_43-while累加","4.3 while累加",[274,161632,161633],{},"计算 1 到 100 的和：",[19,161635,161637],{"className":33310,"code":161636,"language":33312,"meta":28,"style":28},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[26,161638,161639,161647,161655,161659,161671,161681,161689,161693],{"__ignoreMap":28},[52,161640,161641,161643,161645],{"class":54,"line":55},[52,161642,103076],{"class":622},[52,161644,2099],{"class":160},[52,161646,58629],{"class":90},[52,161648,161649,161651,161653],{"class":54,"line":69},[52,161650,159628],{"class":622},[52,161652,2099],{"class":160},[52,161654,50265],{"class":90},[52,161656,161657],{"class":54,"line":82},[52,161658,116],{"emptyLinePlaceholder":115},[52,161660,161661,161663,161665,161667,161669],{"class":54,"line":97},[52,161662,111583],{"class":160},[52,161664,12394],{"class":622},[52,161666,4566],{"class":160},[52,161668,8710],{"class":90},[52,161670,6698],{"class":622},[52,161672,161673,161676,161678],{"class":54,"line":112},[52,161674,161675],{"class":622},"    total ",[52,161677,12433],{"class":160},[52,161679,161680],{"class":622}," i\n",[52,161682,161683,161685,161687],{"class":54,"line":119},[52,161684,161603],{"class":622},[52,161686,12433],{"class":160},[52,161688,58629],{"class":90},[52,161690,161691],{"class":54,"line":130},[52,161692,116],{"emptyLinePlaceholder":115},[52,161694,161695,161697],{"class":54,"line":136},[52,161696,33347],{"class":90},[52,161698,161699],{"class":622},"(total)\n",[274,161701,161702],{},"核心思想：",[1070,161704,161705,161710,161715],{},[1073,161706,161707,161709],{},[26,161708,3554],{}," 控制循环次数。",[1073,161711,161712,161714],{},[26,161713,159729],{}," 保存累加结果。",[1073,161716,161717,161718,161720],{},"每轮循环都要更新 ",[26,161719,3554],{},"，否则可能死循环。",[14,161722,161724],{"id":161723},"_44-while猜数字","4.4 while猜数字",[19,161726,161728],{"className":33310,"code":161727,"language":33312,"meta":28,"style":28},"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",[26,161729,161730,161736,161740,161757,161765,161769,161777,161797,161806,161810,161822,161833,161843,161854,161860,161882],{"__ignoreMap":28},[52,161731,161732,161734],{"class":54,"line":55},[52,161733,33324],{"class":160},[52,161735,48260],{"class":622},[52,161737,161738],{"class":54,"line":69},[52,161739,116],{"emptyLinePlaceholder":115},[52,161741,161742,161744,161746,161749,161751,161753,161755],{"class":54,"line":82},[52,161743,161408],{"class":622},[52,161745,2099],{"class":160},[52,161747,161748],{"class":622}," random.randint(",[52,161750,3332],{"class":90},[52,161752,15391],{"class":622},[52,161754,3424],{"class":90},[52,161756,170],{"class":622},[52,161758,161759,161761,161763],{"class":54,"line":97},[52,161760,149059],{"class":622},[52,161762,2099],{"class":160},[52,161764,50265],{"class":90},[52,161766,161767],{"class":54,"line":112},[52,161768,116],{"emptyLinePlaceholder":115},[52,161770,161771,161773,161775],{"class":54,"line":119},[52,161772,111583],{"class":160},[52,161774,98220],{"class":90},[52,161776,6698],{"class":622},[52,161778,161779,161782,161784,161786,161788,161790,161792,161795],{"class":54,"line":130},[52,161780,161781],{"class":622},"    guess ",[52,161783,2099],{"class":160},[52,161785,5344],{"class":90},[52,161787,3121],{"class":622},[52,161789,56751],{"class":90},[52,161791,3121],{"class":622},[52,161793,161794],{"class":62},"\"请输入1到100之间的数字:\"",[52,161796,33429],{"class":622},[52,161798,161799,161802,161804],{"class":54,"line":136},[52,161800,161801],{"class":622},"    count ",[52,161803,12433],{"class":160},[52,161805,58629],{"class":90},[52,161807,161808],{"class":54,"line":141},[52,161809,116],{"emptyLinePlaceholder":115},[52,161811,161812,161814,161817,161819],{"class":54,"line":146},[52,161813,6060],{"class":160},[52,161815,161816],{"class":622}," guess ",[52,161818,4072],{"class":160},[52,161820,161821],{"class":622}," answer:\n",[52,161823,161824,161826,161828,161831],{"class":54,"line":152},[52,161825,35383],{"class":90},[52,161827,3121],{"class":622},[52,161829,161830],{"class":62},"\"猜大了\"",[52,161832,170],{"class":622},[52,161834,161835,161837,161839,161841],{"class":54,"line":157},[52,161836,42225],{"class":160},[52,161838,161816],{"class":622},[52,161840,4022],{"class":160},[52,161842,161821],{"class":622},[52,161844,161845,161847,161849,161852],{"class":54,"line":173},[52,161846,35383],{"class":90},[52,161848,3121],{"class":622},[52,161850,161851],{"class":62},"\"猜小了\"",[52,161853,170],{"class":622},[52,161855,161856,161858],{"class":54,"line":178},[52,161857,160390],{"class":160},[52,161859,6698],{"class":622},[52,161861,161862,161864,161866,161868,161871,161873,161875,161877,161880],{"class":54,"line":184},[52,161863,35383],{"class":90},[52,161865,3121],{"class":622},[52,161867,3170],{"class":160},[52,161869,161870],{"class":62},"\"猜对了，一共猜了",[52,161872,4008],{"class":90},[52,161874,87362],{"class":622},[52,161876,4058],{"class":90},[52,161878,161879],{"class":62},"次\"",[52,161881,170],{"class":622},[52,161883,161884],{"class":54,"line":189},[52,161885,34559],{"class":160},[274,161887,161888,161891,161892,161894],{},[26,161889,161890],{},"while True"," 表示无限循环，通常配合 ",[26,161893,5015],{}," 使用。",[14,161896,161898],{"id":161897},"_45-break和continue","4.5 break和continue",[30,161900,161902],{"id":161901},"_451-break","4.5.1 break",[274,161904,161905,161907],{},[26,161906,5015],{}," 直接结束整个循环。",[19,161909,161911],{"className":33310,"code":161910,"language":33312,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[26,161912,161913,161933,161945,161949],{"__ignoreMap":28},[52,161914,161915,161917,161919,161921,161923,161925,161927,161929,161931],{"class":54,"line":55},[52,161916,5985],{"class":160},[52,161918,12394],{"class":622},[52,161920,28988],{"class":160},[52,161922,35375],{"class":90},[52,161924,3121],{"class":622},[52,161926,3332],{"class":90},[52,161928,15391],{"class":622},[52,161930,3457],{"class":90},[52,161932,33718],{"class":622},[52,161934,161935,161937,161939,161941,161943],{"class":54,"line":69},[52,161936,6060],{"class":160},[52,161938,12394],{"class":622},[52,161940,5909],{"class":160},[52,161942,80998],{"class":90},[52,161944,6698],{"class":622},[52,161946,161947],{"class":54,"line":82},[52,161948,34559],{"class":160},[52,161950,161951,161953],{"class":54,"line":97},[52,161952,34231],{"class":90},[52,161954,161598],{"class":622},[274,161956,148825],{},[19,161958,161961],{"className":161959,"code":161960,"language":24,"meta":28},[22],"1\n2\n",[26,161962,161960],{"__ignoreMap":28},[30,161964,161966],{"id":161965},"_452-continue","4.5.2 continue",[274,161968,161969,161971],{},[26,161970,157040],{}," 跳过本轮剩余代码，进入下一轮循环。",[19,161973,161975],{"className":33310,"code":161974,"language":33312,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[26,161976,161977,161997,162009,162013],{"__ignoreMap":28},[52,161978,161979,161981,161983,161985,161987,161989,161991,161993,161995],{"class":54,"line":55},[52,161980,5985],{"class":160},[52,161982,12394],{"class":622},[52,161984,28988],{"class":160},[52,161986,35375],{"class":90},[52,161988,3121],{"class":622},[52,161990,3332],{"class":90},[52,161992,15391],{"class":622},[52,161994,3457],{"class":90},[52,161996,33718],{"class":622},[52,161998,161999,162001,162003,162005,162007],{"class":54,"line":69},[52,162000,6060],{"class":160},[52,162002,12394],{"class":622},[52,162004,5909],{"class":160},[52,162006,80998],{"class":90},[52,162008,6698],{"class":622},[52,162010,162011],{"class":54,"line":82},[52,162012,150880],{"class":160},[52,162014,162015,162017],{"class":54,"line":97},[52,162016,34231],{"class":90},[52,162018,161598],{"class":622},[274,162020,148825],{},[19,162022,162025],{"className":162023,"code":162024,"language":24,"meta":28},[22],"1\n2\n4\n5\n",[26,162026,162024],{"__ignoreMap":28},[14,162028,162030],{"id":162029},"_46-for循环","4.6 for循环",[274,162032,162033,162035],{},[26,162034,5985],{}," 常用于遍历序列。",[19,162037,162039],{"className":33310,"code":162038,"language":33312,"meta":28,"style":28},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[26,162040,162041,162050,162054,162065],{"__ignoreMap":28},[52,162042,162043,162045,162047],{"class":54,"line":55},[52,162044,148904],{"class":622},[52,162046,2099],{"class":160},[52,162048,162049],{"class":62}," \"python\"\n",[52,162051,162052],{"class":54,"line":69},[52,162053,116],{"emptyLinePlaceholder":115},[52,162055,162056,162058,162061,162063],{"class":54,"line":82},[52,162057,5985],{"class":160},[52,162059,162060],{"class":622}," ch ",[52,162062,28988],{"class":160},[52,162064,160767],{"class":622},[52,162066,162067,162069],{"class":54,"line":97},[52,162068,34231],{"class":90},[52,162070,162071],{"class":622},"(ch)\n",[274,162073,162074],{},"遍历列表：",[19,162076,162078],{"className":33310,"code":162077,"language":33312,"meta":28,"style":28},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[26,162079,162080,162102,162106,162116],{"__ignoreMap":28},[52,162081,162082,162085,162087,162089,162091,162093,162095,162097,162100],{"class":54,"line":55},[52,162083,162084],{"class":622},"students ",[52,162086,2099],{"class":160},[52,162088,55157],{"class":622},[52,162090,152256],{"class":62},[52,162092,15391],{"class":622},[52,162094,153304],{"class":62},[52,162096,15391],{"class":622},[52,162098,162099],{"class":62},"\"小刚\"",[52,162101,36178],{"class":622},[52,162103,162104],{"class":54,"line":69},[52,162105,116],{"emptyLinePlaceholder":115},[52,162107,162108,162110,162112,162114],{"class":54,"line":82},[52,162109,5985],{"class":160},[52,162111,154505],{"class":622},[52,162113,28988],{"class":160},[52,162115,154510],{"class":622},[52,162117,162118,162120],{"class":54,"line":97},[52,162119,34231],{"class":90},[52,162121,152410],{"class":622},[14,162123,162125],{"id":162124},"_47-range函数","4.7 range函数",[274,162127,162128,162131],{},[26,162129,162130],{},"range()"," 用于生成整数序列。",[19,162133,162135],{"className":33310,"code":162134,"language":33312,"meta":28,"style":28},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[26,162136,162137,162151,162169],{"__ignoreMap":28},[52,162138,162139,162141,162143,162145,162148],{"class":54,"line":55},[52,162140,36348],{"class":90},[52,162142,3121],{"class":622},[52,162144,3432],{"class":90},[52,162146,162147],{"class":622},")          ",[52,162149,162150],{"class":332},"# 0,1,2,3,4\n",[52,162152,162153,162155,162157,162159,162161,162163,162166],{"class":54,"line":69},[52,162154,36348],{"class":90},[52,162156,3121],{"class":622},[52,162158,3332],{"class":90},[52,162160,15391],{"class":622},[52,162162,3432],{"class":90},[52,162164,162165],{"class":622},")       ",[52,162167,162168],{"class":332},"# 1,2,3,4\n",[52,162170,162171,162173,162175,162177,162179,162181,162183,162185,162187],{"class":54,"line":82},[52,162172,36348],{"class":90},[52,162174,3121],{"class":622},[52,162176,3332],{"class":90},[52,162178,15391],{"class":622},[52,162180,3559],{"class":90},[52,162182,15391],{"class":622},[52,162184,3194],{"class":90},[52,162186,158029],{"class":622},[52,162188,162189],{"class":332},"# 1,3,5,7,9\n",[274,162191,162192,162193,27567],{},"配合 ",[26,162194,5985],{},[19,162196,162198],{"className":33310,"code":162197,"language":33312,"meta":28,"style":28},"for i in range(1, 6):\n    print(i)\n",[26,162199,162200,162220],{"__ignoreMap":28},[52,162201,162202,162204,162206,162208,162210,162212,162214,162216,162218],{"class":54,"line":55},[52,162203,5985],{"class":160},[52,162205,12394],{"class":622},[52,162207,28988],{"class":160},[52,162209,35375],{"class":90},[52,162211,3121],{"class":622},[52,162213,3332],{"class":90},[52,162215,15391],{"class":622},[52,162217,3457],{"class":90},[52,162219,33718],{"class":622},[52,162221,162222,162224],{"class":54,"line":69},[52,162223,34231],{"class":90},[52,162225,161598],{"class":622},[274,162227,11981,162228,162230],{},[26,162229,36348],{}," 的结束值不包含在内。",[14,162232,162234],{"id":162233},"_48-for循环求和","4.8 for循环求和",[19,162236,162238],{"className":33310,"code":162237,"language":33312,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[26,162239,162240,162248,162252,162272,162280,162284],{"__ignoreMap":28},[52,162241,162242,162244,162246],{"class":54,"line":55},[52,162243,159628],{"class":622},[52,162245,2099],{"class":160},[52,162247,50265],{"class":90},[52,162249,162250],{"class":54,"line":69},[52,162251,116],{"emptyLinePlaceholder":115},[52,162253,162254,162256,162258,162260,162262,162264,162266,162268,162270],{"class":54,"line":82},[52,162255,5985],{"class":160},[52,162257,12394],{"class":622},[52,162259,28988],{"class":160},[52,162261,35375],{"class":90},[52,162263,3121],{"class":622},[52,162265,3332],{"class":90},[52,162267,15391],{"class":622},[52,162269,3450],{"class":90},[52,162271,33718],{"class":622},[52,162273,162274,162276,162278],{"class":54,"line":97},[52,162275,161675],{"class":622},[52,162277,12433],{"class":160},[52,162279,161680],{"class":622},[52,162281,162282],{"class":54,"line":112},[52,162283,116],{"emptyLinePlaceholder":115},[52,162285,162286,162288],{"class":54,"line":119},[52,162287,33347],{"class":90},[52,162289,161699],{"class":622},[274,162291,162292],{},"求偶数和：",[19,162294,162296],{"className":33310,"code":162295,"language":33312,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[26,162297,162298,162306,162310,162330,162346,162355,162359],{"__ignoreMap":28},[52,162299,162300,162302,162304],{"class":54,"line":55},[52,162301,159628],{"class":622},[52,162303,2099],{"class":160},[52,162305,50265],{"class":90},[52,162307,162308],{"class":54,"line":69},[52,162309,116],{"emptyLinePlaceholder":115},[52,162311,162312,162314,162316,162318,162320,162322,162324,162326,162328],{"class":54,"line":82},[52,162313,5985],{"class":160},[52,162315,12394],{"class":622},[52,162317,28988],{"class":160},[52,162319,35375],{"class":90},[52,162321,3121],{"class":622},[52,162323,3332],{"class":90},[52,162325,15391],{"class":622},[52,162327,3450],{"class":90},[52,162329,33718],{"class":622},[52,162331,162332,162334,162336,162338,162340,162342,162344],{"class":54,"line":97},[52,162333,6060],{"class":160},[52,162335,12394],{"class":622},[52,162337,3441],{"class":160},[52,162339,17711],{"class":90},[52,162341,104479],{"class":160},[52,162343,7052],{"class":90},[52,162345,6698],{"class":622},[52,162347,162348,162351,162353],{"class":54,"line":112},[52,162349,162350],{"class":622},"        total ",[52,162352,12433],{"class":160},[52,162354,161680],{"class":622},[52,162356,162357],{"class":54,"line":119},[52,162358,116],{"emptyLinePlaceholder":115},[52,162360,162361,162363],{"class":54,"line":130},[52,162362,33347],{"class":90},[52,162364,161699],{"class":622},[274,162366,162367],{},"也可以：",[19,162369,162371],{"className":33310,"code":162370,"language":33312,"meta":28,"style":28},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[26,162372,162373,162381,162385,162409,162417,162421],{"__ignoreMap":28},[52,162374,162375,162377,162379],{"class":54,"line":55},[52,162376,159628],{"class":622},[52,162378,2099],{"class":160},[52,162380,50265],{"class":90},[52,162382,162383],{"class":54,"line":69},[52,162384,116],{"emptyLinePlaceholder":115},[52,162386,162387,162389,162391,162393,162395,162397,162399,162401,162403,162405,162407],{"class":54,"line":82},[52,162388,5985],{"class":160},[52,162390,12394],{"class":622},[52,162392,28988],{"class":160},[52,162394,35375],{"class":90},[52,162396,3121],{"class":622},[52,162398,3194],{"class":90},[52,162400,15391],{"class":622},[52,162402,3450],{"class":90},[52,162404,15391],{"class":622},[52,162406,3194],{"class":90},[52,162408,33718],{"class":622},[52,162410,162411,162413,162415],{"class":54,"line":97},[52,162412,161675],{"class":622},[52,162414,12433],{"class":160},[52,162416,161680],{"class":622},[52,162418,162419],{"class":54,"line":112},[52,162420,116],{"emptyLinePlaceholder":115},[52,162422,162423,162425],{"class":54,"line":119},[52,162424,33347],{"class":90},[52,162426,161699],{"class":622},[14,162428,162430],{"id":162429},"_49-循环嵌套","4.9 循环嵌套",[274,162432,162433],{},"嵌套循环就是循环里面再写循环。",[19,162435,162437],{"className":33310,"code":162436,"language":33312,"meta":28,"style":28},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[26,162438,162439,162459,162479],{"__ignoreMap":28},[52,162440,162441,162443,162445,162447,162449,162451,162453,162455,162457],{"class":54,"line":55},[52,162442,5985],{"class":160},[52,162444,12394],{"class":622},[52,162446,28988],{"class":160},[52,162448,35375],{"class":90},[52,162450,3121],{"class":622},[52,162452,3332],{"class":90},[52,162454,15391],{"class":622},[52,162456,3406],{"class":90},[52,162458,33718],{"class":622},[52,162460,162461,162463,162465,162467,162469,162471,162473,162475,162477],{"class":54,"line":69},[52,162462,6160],{"class":160},[52,162464,12456],{"class":622},[52,162466,28988],{"class":160},[52,162468,35375],{"class":90},[52,162470,3121],{"class":622},[52,162472,3332],{"class":90},[52,162474,15391],{"class":622},[52,162476,3406],{"class":90},[52,162478,33718],{"class":622},[52,162480,162481,162483,162485,162487,162490,162492,162494,162496,162499,162501,162503,162505,162507],{"class":54,"line":82},[52,162482,35383],{"class":90},[52,162484,3121],{"class":622},[52,162486,3170],{"class":160},[52,162488,162489],{"class":62},"\"i=",[52,162491,4008],{"class":90},[52,162493,3554],{"class":622},[52,162495,4058],{"class":90},[52,162497,162498],{"class":62},", j=",[52,162500,4008],{"class":90},[52,162502,3579],{"class":622},[52,162504,4058],{"class":90},[52,162506,3364],{"class":62},[52,162508,170],{"class":622},[274,162510,162511],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162513,162515],{"id":162514},"_410-九九乘法表","4.10 九九乘法表",[19,162517,162519],{"className":33310,"code":162518,"language":33312,"meta":28,"style":28},"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",[26,162520,162521,162541,162564,162616],{"__ignoreMap":28},[52,162522,162523,162525,162527,162529,162531,162533,162535,162537,162539],{"class":54,"line":55},[52,162524,5985],{"class":160},[52,162526,12394],{"class":622},[52,162528,28988],{"class":160},[52,162530,35375],{"class":90},[52,162532,3121],{"class":622},[52,162534,3332],{"class":90},[52,162536,15391],{"class":622},[52,162538,3559],{"class":90},[52,162540,33718],{"class":622},[52,162542,162543,162545,162547,162549,162551,162553,162555,162558,162560,162562],{"class":54,"line":69},[52,162544,6160],{"class":160},[52,162546,12456],{"class":622},[52,162548,28988],{"class":160},[52,162550,35375],{"class":90},[52,162552,3121],{"class":622},[52,162554,3332],{"class":90},[52,162556,162557],{"class":622},", i ",[52,162559,3593],{"class":160},[52,162561,28064],{"class":90},[52,162563,33718],{"class":622},[52,162565,162566,162568,162570,162572,162574,162576,162578,162580,162582,162584,162586,162588,162590,162592,162594,162596,162598,162600,162602,162604,162606,162608,162610,162612,162614],{"class":54,"line":82},[52,162567,35383],{"class":90},[52,162569,3121],{"class":622},[52,162571,3170],{"class":160},[52,162573,3364],{"class":62},[52,162575,4008],{"class":90},[52,162577,3579],{"class":622},[52,162579,4058],{"class":90},[52,162581,1095],{"class":62},[52,162583,4008],{"class":90},[52,162585,3554],{"class":622},[52,162587,4058],{"class":90},[52,162589,2099],{"class":62},[52,162591,4008],{"class":90},[52,162593,103076],{"class":622},[52,162595,1095],{"class":160},[52,162597,6369],{"class":622},[52,162599,4058],{"class":90},[52,162601,3364],{"class":62},[52,162603,15391],{"class":622},[52,162605,48733],{"class":8172},[52,162607,2099],{"class":160},[52,162609,3364],{"class":62},[52,162611,4212],{"class":90},[52,162613,3364],{"class":62},[52,162615,170],{"class":622},[52,162617,162618,162620],{"class":54,"line":97},[52,162619,34231],{"class":90},[52,162621,4938],{"class":622},[274,162623,162624],{},"关键点：",[1070,162626,162627,162633,162639,162645],{},[1073,162628,162629,162630,162632],{},"外层 ",[26,162631,3554],{}," 控制行。",[1073,162634,162635,162636,162638],{},"内层 ",[26,162637,3579],{}," 控制列。",[1073,162640,162641,162642,162644],{},"每行结束后用 ",[26,162643,148840],{}," 换行。",[1073,162646,162647,162650],{},[26,162648,162649],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162652,162654],{"id":162653},"_411-循环else","4.11 循环else",[274,162656,162657,162658,162660,162661,162663,162664,162666],{},"Python 的循环可以带 ",[26,162659,4668],{},"。当循环正常结束时执行 ",[26,162662,4668],{},"，如果被 ",[26,162665,5015],{}," 打断，则不执行。",[19,162668,162670],{"className":33310,"code":162669,"language":33312,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,162671,162672,162692,162704,162715,162719,162725],{"__ignoreMap":28},[52,162673,162674,162676,162678,162680,162682,162684,162686,162688,162690],{"class":54,"line":55},[52,162675,5985],{"class":160},[52,162677,12394],{"class":622},[52,162679,28988],{"class":160},[52,162681,35375],{"class":90},[52,162683,3121],{"class":622},[52,162685,3332],{"class":90},[52,162687,15391],{"class":622},[52,162689,3457],{"class":90},[52,162691,33718],{"class":622},[52,162693,162694,162696,162698,162700,162702],{"class":54,"line":69},[52,162695,6060],{"class":160},[52,162697,12394],{"class":622},[52,162699,5909],{"class":160},[52,162701,5000],{"class":90},[52,162703,6698],{"class":622},[52,162705,162706,162708,162710,162713],{"class":54,"line":82},[52,162707,35383],{"class":90},[52,162709,3121],{"class":622},[52,162711,162712],{"class":62},"\"找到了\"",[52,162714,170],{"class":622},[52,162716,162717],{"class":54,"line":97},[52,162718,34559],{"class":160},[52,162720,162721,162723],{"class":54,"line":112},[52,162722,4668],{"class":160},[52,162724,6698],{"class":622},[52,162726,162727,162729,162731,162734],{"class":54,"line":119},[52,162728,34231],{"class":90},[52,162730,3121],{"class":622},[52,162732,162733],{"class":62},"\"没找到\"",[52,162735,170],{"class":622},[274,162737,162738],{},"常用于搜索。",[19,162740,162742],{"className":33310,"code":162741,"language":33312,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[26,162743,162744,162765,162774,162778,162790,162801,162811,162815,162821],{"__ignoreMap":28},[52,162745,162746,162749,162751,162753,162755,162757,162759,162761,162763],{"class":54,"line":55},[52,162747,162748],{"class":622},"names ",[52,162750,2099],{"class":160},[52,162752,55157],{"class":622},[52,162754,152256],{"class":62},[52,162756,15391],{"class":622},[52,162758,153304],{"class":62},[52,162760,15391],{"class":622},[52,162762,162099],{"class":62},[52,162764,36178],{"class":622},[52,162766,162767,162769,162771],{"class":54,"line":69},[52,162768,114498],{"class":622},[52,162770,2099],{"class":160},[52,162772,162773],{"class":62}," \"小李\"\n",[52,162775,162776],{"class":54,"line":82},[52,162777,116],{"emptyLinePlaceholder":115},[52,162779,162780,162782,162785,162787],{"class":54,"line":97},[52,162781,5985],{"class":160},[52,162783,162784],{"class":622}," name ",[52,162786,28988],{"class":160},[52,162788,162789],{"class":622}," names:\n",[52,162791,162792,162794,162796,162798],{"class":54,"line":112},[52,162793,6060],{"class":160},[52,162795,162784],{"class":622},[52,162797,5909],{"class":160},[52,162799,162800],{"class":622}," target:\n",[52,162802,162803,162805,162807,162809],{"class":54,"line":119},[52,162804,35383],{"class":90},[52,162806,3121],{"class":622},[52,162808,162712],{"class":62},[52,162810,170],{"class":622},[52,162812,162813],{"class":54,"line":130},[52,162814,34559],{"class":160},[52,162816,162817,162819],{"class":54,"line":136},[52,162818,4668],{"class":160},[52,162820,6698],{"class":622},[52,162822,162823,162825,162827,162829],{"class":54,"line":141},[52,162824,34231],{"class":90},[52,162826,3121],{"class":622},[52,162828,162733],{"class":62},[52,162830,170],{"class":622},[14,162832,162834],{"id":162833},"_412-小案例登录重试","4.12 小案例：登录重试",[274,162836,125660],{},[1070,162838,162839,162842,162845],{},[1073,162840,162841],{},"用户最多输入 3 次密码。",[1073,162843,162844],{},"密码正确则登录成功。",[1073,162846,162847],{},"3 次都错误则锁定账号。",[274,162849,12991],{},[19,162851,162853],{"className":33310,"code":162852,"language":33312,"meta":28,"style":28},"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",[26,162854,162855,162865,162869,162885,162901,162905,162917,162928,162932,162938,162963,162969],{"__ignoreMap":28},[52,162856,162857,162860,162862],{"class":54,"line":55},[52,162858,162859],{"class":622},"password ",[52,162861,2099],{"class":160},[52,162863,162864],{"class":62}," \"123456\"\n",[52,162866,162867],{"class":54,"line":69},[52,162868,116],{"emptyLinePlaceholder":115},[52,162870,162871,162873,162875,162877,162879,162881,162883],{"class":54,"line":82},[52,162872,5985],{"class":160},[52,162874,12394],{"class":622},[52,162876,28988],{"class":160},[52,162878,35375],{"class":90},[52,162880,3121],{"class":622},[52,162882,3188],{"class":90},[52,162884,33718],{"class":622},[52,162886,162887,162890,162892,162894,162896,162899],{"class":54,"line":97},[52,162888,162889],{"class":622},"    user_password ",[52,162891,2099],{"class":160},[52,162893,63535],{"class":90},[52,162895,3121],{"class":622},[52,162897,162898],{"class":62},"\"请输入密码:\"",[52,162900,170],{"class":622},[52,162902,162903],{"class":54,"line":112},[52,162904,116],{"emptyLinePlaceholder":115},[52,162906,162907,162909,162912,162914],{"class":54,"line":119},[52,162908,6060],{"class":160},[52,162910,162911],{"class":622}," user_password ",[52,162913,5909],{"class":160},[52,162915,162916],{"class":622}," password:\n",[52,162918,162919,162921,162923,162926],{"class":54,"line":130},[52,162920,35383],{"class":90},[52,162922,3121],{"class":622},[52,162924,162925],{"class":62},"\"登录成功\"",[52,162927,170],{"class":622},[52,162929,162930],{"class":54,"line":136},[52,162931,34559],{"class":160},[52,162933,162934,162936],{"class":54,"line":141},[52,162935,160390],{"class":160},[52,162937,6698],{"class":622},[52,162939,162940,162942,162944,162946,162949,162952,162954,162956,162958,162961],{"class":54,"line":146},[52,162941,35383],{"class":90},[52,162943,3121],{"class":622},[52,162945,3170],{"class":160},[52,162947,162948],{"class":62},"\"密码错误，还剩",[52,162950,162951],{"class":90},"{2",[52,162953,1989],{"class":160},[52,162955,5992],{"class":622},[52,162957,4058],{"class":90},[52,162959,162960],{"class":62},"次机会\"",[52,162962,170],{"class":622},[52,162964,162965,162967],{"class":54,"line":152},[52,162966,4668],{"class":160},[52,162968,6698],{"class":622},[52,162970,162971,162973,162975,162978],{"class":54,"line":157},[52,162972,34231],{"class":90},[52,162974,3121],{"class":622},[52,162976,162977],{"class":62},"\"账号已锁定\"",[52,162979,170],{"class":622},[14,162981,162983],{"id":162982},"_413-小案例菜单程序","4.13 小案例：菜单程序",[19,162985,162987],{"className":33310,"code":162986,"language":33312,"meta":28,"style":28},"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",[26,162988,162989,162997,163008,163019,163030,163041,163052,163056,163071,163075,163087,163098,163110,163121,163133,163144,163156,163166,163170,163176],{"__ignoreMap":28},[52,162990,162991,162993,162995],{"class":54,"line":55},[52,162992,111583],{"class":160},[52,162994,98220],{"class":90},[52,162996,6698],{"class":622},[52,162998,162999,163001,163003,163006],{"class":54,"line":69},[52,163000,34231],{"class":90},[52,163002,3121],{"class":622},[52,163004,163005],{"class":62},"\"====== 菜单 ======\"",[52,163007,170],{"class":622},[52,163009,163010,163012,163014,163017],{"class":54,"line":82},[52,163011,34231],{"class":90},[52,163013,3121],{"class":622},[52,163015,163016],{"class":62},"\"1. 查询余额\"",[52,163018,170],{"class":622},[52,163020,163021,163023,163025,163028],{"class":54,"line":97},[52,163022,34231],{"class":90},[52,163024,3121],{"class":622},[52,163026,163027],{"class":62},"\"2. 存款\"",[52,163029,170],{"class":622},[52,163031,163032,163034,163036,163039],{"class":54,"line":112},[52,163033,34231],{"class":90},[52,163035,3121],{"class":622},[52,163037,163038],{"class":62},"\"3. 取款\"",[52,163040,170],{"class":622},[52,163042,163043,163045,163047,163050],{"class":54,"line":119},[52,163044,34231],{"class":90},[52,163046,3121],{"class":622},[52,163048,163049],{"class":62},"\"0. 退出\"",[52,163051,170],{"class":622},[52,163053,163054],{"class":54,"line":130},[52,163055,116],{"emptyLinePlaceholder":115},[52,163057,163058,163061,163063,163065,163067,163069],{"class":54,"line":136},[52,163059,163060],{"class":622},"    choice ",[52,163062,2099],{"class":160},[52,163064,63535],{"class":90},[52,163066,3121],{"class":622},[52,163068,155441],{"class":62},[52,163070,170],{"class":622},[52,163072,163073],{"class":54,"line":141},[52,163074,116],{"emptyLinePlaceholder":115},[52,163076,163077,163079,163081,163083,163085],{"class":54,"line":146},[52,163078,6060],{"class":160},[52,163080,155454],{"class":622},[52,163082,5909],{"class":160},[52,163084,155459],{"class":62},[52,163086,6698],{"class":622},[52,163088,163089,163091,163093,163096],{"class":54,"line":152},[52,163090,35383],{"class":90},[52,163092,3121],{"class":622},[52,163094,163095],{"class":62},"\"余额为1000元\"",[52,163097,170],{"class":622},[52,163099,163100,163102,163104,163106,163108],{"class":54,"line":157},[52,163101,42225],{"class":160},[52,163103,155454],{"class":622},[52,163105,5909],{"class":160},[52,163107,155478],{"class":62},[52,163109,6698],{"class":622},[52,163111,163112,163114,163116,163119],{"class":54,"line":173},[52,163113,35383],{"class":90},[52,163115,3121],{"class":622},[52,163117,163118],{"class":62},"\"存款功能\"",[52,163120,170],{"class":622},[52,163122,163123,163125,163127,163129,163131],{"class":54,"line":178},[52,163124,42225],{"class":160},[52,163126,155454],{"class":622},[52,163128,5909],{"class":160},[52,163130,155496],{"class":62},[52,163132,6698],{"class":622},[52,163134,163135,163137,163139,163142],{"class":54,"line":184},[52,163136,35383],{"class":90},[52,163138,3121],{"class":622},[52,163140,163141],{"class":62},"\"取款功能\"",[52,163143,170],{"class":622},[52,163145,163146,163148,163150,163152,163154],{"class":54,"line":189},[52,163147,42225],{"class":160},[52,163149,155454],{"class":622},[52,163151,5909],{"class":160},[52,163153,155550],{"class":62},[52,163155,6698],{"class":622},[52,163157,163158,163160,163162,163164],{"class":54,"line":201},[52,163159,35383],{"class":90},[52,163161,3121],{"class":622},[52,163163,155561],{"class":62},[52,163165,170],{"class":622},[52,163167,163168],{"class":54,"line":206},[52,163169,34559],{"class":160},[52,163171,163172,163174],{"class":54,"line":224},[52,163173,160390],{"class":160},[52,163175,6698],{"class":622},[52,163177,163178,163180,163182,163184],{"class":54,"line":229},[52,163179,35383],{"class":90},[52,163181,3121],{"class":622},[52,163183,155582],{"class":62},[52,163185,170],{"class":622},[274,163187,163188,163189,163191,163192,31319],{},"菜单类程序通常使用 ",[26,163190,161890],{},"，用户选择退出时 ",[26,163193,5015],{},[14,163195,163197],{"id":163196},"_414-易错点","4.14 易错点",[1070,163199,163200,163205,163211,163219,163225],{},[1073,163201,163202,163204],{},[26,163203,111583],{}," 循环必须更新控制变量。",[1073,163206,163207,163210],{},[26,163208,163209],{},"range(1, 10)"," 不包含 10。",[1073,163212,163213,163215,163216,163218],{},[26,163214,5015],{}," 结束整个循环，",[26,163217,157040],{}," 只跳过本轮。",[1073,163220,163221,163222,163224],{},"嵌套循环中，",[26,163223,5015],{}," 只跳出当前所在的一层循环。",[1073,163226,163227],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163229,163231],{"id":163230},"_415-本章练习","4.15 本章练习",[1070,163233,163234,163237,163240,163243,163246],{},[1073,163235,163236],{},"输出 1 到 100。",[1073,163238,163239],{},"计算 1 到 100 的偶数和。",[1073,163241,163242],{},"输出 100 以内能被 3 和 5 同时整除的数。",[1073,163244,163245],{},"编写猜数字游戏，限制最多猜 7 次。",[1073,163247,163248],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[3015,163250,163251],{},"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":28,"searchDepth":69,"depth":69,"links":163253},[163254,163255,163256,163257,163258,163262,163263,163264,163265,163266,163267,163268,163269,163270,163271],{"id":161510,"depth":69,"text":161511},{"id":161540,"depth":69,"text":161541},{"id":161629,"depth":69,"text":161630},{"id":161723,"depth":69,"text":161724},{"id":161897,"depth":69,"text":161898,"children":163259},[163260,163261],{"id":161901,"depth":82,"text":161902},{"id":161965,"depth":82,"text":161966},{"id":162029,"depth":69,"text":162030},{"id":162124,"depth":69,"text":162125},{"id":162233,"depth":69,"text":162234},{"id":162429,"depth":69,"text":162430},{"id":162514,"depth":69,"text":162515},{"id":162653,"depth":69,"text":162654},{"id":162833,"depth":69,"text":162834},{"id":162982,"depth":69,"text":162983},{"id":163196,"depth":69,"text":163197},{"id":163230,"depth":69,"text":163231},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161502,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163278,"title":163279,"body":163280,"description":3046,"extension":3047,"meta":165285,"navigation":115,"path":165286,"seo":165287,"stem":165288,"__hash__":165289},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163281,"toc":165265},[163282,163285,163289,163292,163295,163309,163312,163326,163330,163332,163351,163353,163400,163402,163416,163420,163494,163497,163501,163504,163563,163571,163574,163627,163630,163634,163639,163694,163702,163752,163756,163761,163769,163868,163874,163878,163883,163886,163897,163938,163951,163955,163958,163994,163997,164010,164013,164073,164077,164081,164084,164135,164139,164142,164189,164195,164261,164264,164268,164271,164387,164390,164394,164397,164503,164507,164510,164548,164551,164593,164596,164656,164659,164663,165127,165130,165134,165161,165167,165228,165232,165262],[10,163283,163279],{"id":163284},"_5-函数基础",[14,163286,163288],{"id":163287},"_51-为什么需要函数","5.1 为什么需要函数",[274,163290,163291],{},"函数用于封装一段可以重复使用的代码。",[274,163293,163294],{},"不使用函数的问题：",[1070,163296,163297,163300,163303,163306],{},[1073,163298,163299],{},"重复代码多。",[1073,163301,163302],{},"修改逻辑时容易漏改。",[1073,163304,163305],{},"主流程不清晰。",[1073,163307,163308],{},"程序越写越长，难以维护。",[274,163310,163311],{},"使用函数后的好处：",[1070,163313,163314,163317,163320,163323],{},[1073,163315,163316],{},"提高复用性。",[1073,163318,163319],{},"提高可读性。",[1073,163321,163322],{},"便于调试。",[1073,163324,163325],{},"便于分工。",[14,163327,163329],{"id":163328},"_52-函数定义","5.2 函数定义",[274,163331,8140],{},[19,163333,163335],{"className":33310,"code":163334,"language":33312,"meta":28,"style":28},"def 函数名():\n    函数体\n",[26,163336,163337,163346],{"__ignoreMap":28},[52,163338,163339,163341,163344],{"class":54,"line":55},[52,163340,34879],{"class":160},[52,163342,163343],{"class":58}," 函数名",[52,163345,34885],{"class":622},[52,163347,163348],{"class":54,"line":69},[52,163349,163350],{"class":622},"    函数体\n",[274,163352,18091],{},[19,163354,163356],{"className":33310,"code":163355,"language":33312,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[26,163357,163358,163367,163377,163387,163391,163395],{"__ignoreMap":28},[52,163359,163360,163362,163365],{"class":54,"line":55},[52,163361,34879],{"class":160},[52,163363,163364],{"class":58}," say_hello",[52,163366,34885],{"class":622},[52,163368,163369,163371,163373,163375],{"class":54,"line":69},[52,163370,34231],{"class":90},[52,163372,3121],{"class":622},[52,163374,8800],{"class":62},[52,163376,170],{"class":622},[52,163378,163379,163381,163383,163385],{"class":54,"line":82},[52,163380,34231],{"class":90},[52,163382,3121],{"class":622},[52,163384,149007],{"class":62},[52,163386,170],{"class":622},[52,163388,163389],{"class":54,"line":97},[52,163390,116],{"emptyLinePlaceholder":115},[52,163392,163393],{"class":54,"line":112},[52,163394,116],{"emptyLinePlaceholder":115},[52,163396,163397],{"class":54,"line":119},[52,163398,163399],{"class":622},"say_hello()\n",[274,163401,11981],{},[1070,163403,163404,163407,163410,163413],{},[1073,163405,163406],{},"函数必须先定义，再调用。",[1073,163408,163409],{},"函数名遵循变量命名规则。",[1073,163411,163412],{},"函数体需要缩进。",[1073,163414,163415],{},"函数不调用就不会执行。",[14,163417,163419],{"id":163418},"_53-函数调用","5.3 函数调用",[19,163421,163423],{"className":33310,"code":163422,"language":33312,"meta":28,"style":28},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[26,163424,163425,163434,163445,163456,163467,163477,163481,163485,163490],{"__ignoreMap":28},[52,163426,163427,163429,163432],{"class":54,"line":55},[52,163428,34879],{"class":160},[52,163430,163431],{"class":58}," print_menu",[52,163433,34885],{"class":622},[52,163435,163436,163438,163440,163443],{"class":54,"line":69},[52,163437,34231],{"class":90},[52,163439,3121],{"class":622},[52,163441,163442],{"class":62},"\"1. 查询\"",[52,163444,170],{"class":622},[52,163446,163447,163449,163451,163454],{"class":54,"line":82},[52,163448,34231],{"class":90},[52,163450,3121],{"class":622},[52,163452,163453],{"class":62},"\"2. 添加\"",[52,163455,170],{"class":622},[52,163457,163458,163460,163462,163465],{"class":54,"line":97},[52,163459,34231],{"class":90},[52,163461,3121],{"class":622},[52,163463,163464],{"class":62},"\"3. 删除\"",[52,163466,170],{"class":622},[52,163468,163469,163471,163473,163475],{"class":54,"line":112},[52,163470,34231],{"class":90},[52,163472,3121],{"class":622},[52,163474,163049],{"class":62},[52,163476,170],{"class":622},[52,163478,163479],{"class":54,"line":119},[52,163480,116],{"emptyLinePlaceholder":115},[52,163482,163483],{"class":54,"line":130},[52,163484,116],{"emptyLinePlaceholder":115},[52,163486,163487],{"class":54,"line":136},[52,163488,163489],{"class":622},"print_menu()\n",[52,163491,163492],{"class":54,"line":141},[52,163493,163489],{"class":622},[274,163495,163496],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163498,163500],{"id":163499},"_54-参数","5.4 参数",[274,163502,163503],{},"参数用于向函数传递数据。",[19,163505,163507],{"className":33310,"code":163506,"language":33312,"meta":28,"style":28},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[26,163508,163509,163518,163538,163542,163546,163555],{"__ignoreMap":28},[52,163510,163511,163513,163515],{"class":54,"line":55},[52,163512,34879],{"class":160},[52,163514,163364],{"class":58},[52,163516,163517],{"class":622},"(name):\n",[52,163519,163520,163522,163524,163526,163528,163530,163532,163534,163536],{"class":54,"line":69},[52,163521,34231],{"class":90},[52,163523,3121],{"class":622},[52,163525,3170],{"class":160},[52,163527,159422],{"class":62},[52,163529,4008],{"class":90},[52,163531,82738],{"class":622},[52,163533,4058],{"class":90},[52,163535,3364],{"class":62},[52,163537,170],{"class":622},[52,163539,163540],{"class":54,"line":82},[52,163541,116],{"emptyLinePlaceholder":115},[52,163543,163544],{"class":54,"line":97},[52,163545,116],{"emptyLinePlaceholder":115},[52,163547,163548,163551,163553],{"class":54,"line":112},[52,163549,163550],{"class":622},"say_hello(",[52,163552,152256],{"class":62},[52,163554,170],{"class":622},[52,163556,163557,163559,163561],{"class":54,"line":119},[52,163558,163550],{"class":622},[52,163560,153304],{"class":62},[52,163562,170],{"class":622},[274,163564,163565,163567,163568,163570],{},[26,163566,82738],{}," 是形参，",[26,163569,152256],{}," 是实参。",[274,163572,163573],{},"多个参数：",[19,163575,163577],{"className":33310,"code":163576,"language":33312,"meta":28,"style":28},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[26,163578,163579,163587,163600,163606,163610,163614],{"__ignoreMap":28},[52,163580,163581,163583,163585],{"class":54,"line":55},[52,163582,34879],{"class":160},[52,163584,2018],{"class":58},[52,163586,153461],{"class":622},[52,163588,163589,163592,163594,163596,163598],{"class":54,"line":69},[52,163590,163591],{"class":622},"    result ",[52,163593,2099],{"class":160},[52,163595,13825],{"class":622},[52,163597,3593],{"class":160},[52,163599,153472],{"class":622},[52,163601,163602,163604],{"class":54,"line":82},[52,163603,34231],{"class":90},[52,163605,79513],{"class":622},[52,163607,163608],{"class":54,"line":97},[52,163609,116],{"emptyLinePlaceholder":115},[52,163611,163612],{"class":54,"line":112},[52,163613,116],{"emptyLinePlaceholder":115},[52,163615,163616,163619,163621,163623,163625],{"class":54,"line":119},[52,163617,163618],{"class":622},"add(",[52,163620,3559],{"class":90},[52,163622,15391],{"class":622},[52,163624,3812],{"class":90},[52,163626,170],{"class":622},[274,163628,163629],{},"调用时参数数量必须匹配。",[14,163631,163633],{"id":163632},"_55-返回值","5.5 返回值",[274,163635,163636,163638],{},[26,163637,20002],{}," 用于把函数内部的结果返回给调用者。",[19,163640,163642],{"className":33310,"code":163641,"language":33312,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[26,163643,163644,163652,163662,163666,163670,163688],{"__ignoreMap":28},[52,163645,163646,163648,163650],{"class":54,"line":55},[52,163647,34879],{"class":160},[52,163649,2018],{"class":58},[52,163651,153461],{"class":622},[52,163653,163654,163656,163658,163660],{"class":54,"line":69},[52,163655,7049],{"class":160},[52,163657,13825],{"class":622},[52,163659,3593],{"class":160},[52,163661,153472],{"class":622},[52,163663,163664],{"class":54,"line":82},[52,163665,116],{"emptyLinePlaceholder":115},[52,163667,163668],{"class":54,"line":97},[52,163669,116],{"emptyLinePlaceholder":115},[52,163671,163672,163675,163677,163680,163682,163684,163686],{"class":54,"line":112},[52,163673,163674],{"class":622},"result ",[52,163676,2099],{"class":160},[52,163678,163679],{"class":622}," add(",[52,163681,3559],{"class":90},[52,163683,15391],{"class":622},[52,163685,3812],{"class":90},[52,163687,170],{"class":622},[52,163689,163690,163692],{"class":54,"line":119},[52,163691,33347],{"class":90},[52,163693,79513],{"class":622},[274,163695,163696,163697,163699,163700,31319],{},"如果函数没有写 ",[26,163698,20002],{},"，默认返回 ",[26,163701,98614],{},[19,163703,163705],{"className":33310,"code":163704,"language":33312,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[26,163706,163707,163715,163725,163729,163733,163742],{"__ignoreMap":28},[52,163708,163709,163711,163713],{"class":54,"line":55},[52,163710,34879],{"class":160},[52,163712,163364],{"class":58},[52,163714,34885],{"class":622},[52,163716,163717,163719,163721,163723],{"class":54,"line":69},[52,163718,34231],{"class":90},[52,163720,3121],{"class":622},[52,163722,8800],{"class":62},[52,163724,170],{"class":622},[52,163726,163727],{"class":54,"line":82},[52,163728,116],{"emptyLinePlaceholder":115},[52,163730,163731],{"class":54,"line":97},[52,163732,116],{"emptyLinePlaceholder":115},[52,163734,163735,163737,163739],{"class":54,"line":112},[52,163736,163674],{"class":622},[52,163738,2099],{"class":160},[52,163740,163741],{"class":622}," say_hello()\n",[52,163743,163744,163746,163749],{"class":54,"line":119},[52,163745,33347],{"class":90},[52,163747,163748],{"class":622},"(result)  ",[52,163750,163751],{"class":332},"# None\n",[14,163753,163755],{"id":163754},"_56-return的作用","5.6 return的作用",[274,163757,163758,163760],{},[26,163759,20002],{}," 有两个作用：",[1070,163762,163763,163766],{},[1073,163764,163765],{},"返回结果。",[1073,163767,163768],{},"结束函数。",[19,163770,163772],{"className":33310,"code":163771,"language":33312,"meta":28,"style":28},"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",[26,163773,163774,163784,163796,163803,163807,163819,163826,163830,163837,163841,163845,163856],{"__ignoreMap":28},[52,163775,163776,163778,163781],{"class":54,"line":55},[52,163777,34879],{"class":160},[52,163779,163780],{"class":58}," check_age",[52,163782,163783],{"class":622},"(age):\n",[52,163785,163786,163788,163790,163792,163794],{"class":54,"line":69},[52,163787,6060],{"class":160},[52,163789,18663],{"class":622},[52,163791,4022],{"class":160},[52,163793,7052],{"class":90},[52,163795,6698],{"class":622},[52,163797,163798,163800],{"class":54,"line":82},[52,163799,17708],{"class":160},[52,163801,163802],{"class":62}," \"年龄不合法\"\n",[52,163804,163805],{"class":54,"line":97},[52,163806,116],{"emptyLinePlaceholder":115},[52,163808,163809,163811,163813,163815,163817],{"class":54,"line":112},[52,163810,6060],{"class":160},[52,163812,18663],{"class":622},[52,163814,4677],{"class":160},[52,163816,158653],{"class":90},[52,163818,6698],{"class":622},[52,163820,163821,163823],{"class":54,"line":119},[52,163822,17708],{"class":160},[52,163824,163825],{"class":62}," \"成年人\"\n",[52,163827,163828],{"class":54,"line":130},[52,163829,116],{"emptyLinePlaceholder":115},[52,163831,163832,163834],{"class":54,"line":136},[52,163833,7049],{"class":160},[52,163835,163836],{"class":62}," \"未成年人\"\n",[52,163838,163839],{"class":54,"line":141},[52,163840,116],{"emptyLinePlaceholder":115},[52,163842,163843],{"class":54,"line":146},[52,163844,116],{"emptyLinePlaceholder":115},[52,163846,163847,163849,163852,163854],{"class":54,"line":152},[52,163848,33347],{"class":90},[52,163850,163851],{"class":622},"(check_age(",[52,163853,3812],{"class":90},[52,163855,33429],{"class":622},[52,163857,163858,163860,163862,163864,163866],{"class":54,"line":157},[52,163859,33347],{"class":90},[52,163861,163851],{"class":622},[52,163863,3644],{"class":160},[52,163865,3332],{"class":90},[52,163867,33429],{"class":622},[274,163869,163870,163871,163873],{},"函数执行到 ",[26,163872,20002],{}," 后，后面的代码不会继续执行。",[14,163875,163877],{"id":163876},"_57-none","5.7 None",[274,163879,163880,163882],{},[26,163881,98614],{}," 表示空值或没有结果。",[274,163884,163885],{},"常见使用场景：",[1070,163887,163888,163891,163894],{},[1073,163889,163890],{},"函数没有返回值。",[1073,163892,163893],{},"变量暂时没有具体值。",[1073,163895,163896],{},"表示查询不到结果。",[19,163898,163900],{"className":33310,"code":163899,"language":33312,"meta":28,"style":28},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[26,163901,163902,163910,163914,163927],{"__ignoreMap":28},[52,163903,163904,163906,163908],{"class":54,"line":55},[52,163905,163674],{"class":622},[52,163907,2099],{"class":160},[52,163909,154540],{"class":90},[52,163911,163912],{"class":54,"line":69},[52,163913,116],{"emptyLinePlaceholder":115},[52,163915,163916,163918,163921,163923,163925],{"class":54,"line":82},[52,163917,4509],{"class":160},[52,163919,163920],{"class":622}," result ",[52,163922,41859],{"class":160},[52,163924,41865],{"class":90},[52,163926,6698],{"class":622},[52,163928,163929,163931,163933,163936],{"class":54,"line":97},[52,163930,34231],{"class":90},[52,163932,3121],{"class":622},[52,163934,163935],{"class":62},"\"没有数据\"",[52,163937,170],{"class":622},[274,163939,163940,163941,163943,163944,163947,163948,31319],{},"判断 ",[26,163942,98614],{}," 推荐使用 ",[26,163945,163946],{},"is None","，不要写成 ",[26,163949,163950],{},"== None",[14,163952,163954],{"id":163953},"_58-函数文档字符串","5.8 函数文档字符串",[274,163956,163957],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[19,163959,163961],{"className":33310,"code":163960,"language":33312,"meta":28,"style":28},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[26,163962,163963,163973,163978],{"__ignoreMap":28},[52,163964,163965,163967,163970],{"class":54,"line":55},[52,163966,34879],{"class":160},[52,163968,163969],{"class":58}," calculate_bmi",[52,163971,163972],{"class":622},"(weight, height):\n",[52,163974,163975],{"class":54,"line":69},[52,163976,163977],{"class":62},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[52,163979,163980,163982,163985,163987,163990,163992],{"class":54,"line":82},[52,163981,7049],{"class":160},[52,163983,163984],{"class":622}," weight ",[52,163986,3696],{"class":160},[52,163988,163989],{"class":622}," height ",[52,163991,13617],{"class":160},[52,163993,2391],{"class":90},[274,163995,163996],{},"查看说明：",[19,163998,164000],{"className":33310,"code":163999,"language":33312,"meta":28,"style":28},"help(calculate_bmi)\n",[26,164001,164002],{"__ignoreMap":28},[52,164003,164004,164007],{"class":54,"line":55},[52,164005,164006],{"class":90},"help",[52,164008,164009],{"class":622},"(calculate_bmi)\n",[274,164011,164012],{},"较完整的写法：",[19,164014,164016],{"className":33310,"code":164015,"language":33312,"meta":28,"style":28},"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",[26,164017,164018,164026,164031,164036,164040,164045,164050,164055,164059],{"__ignoreMap":28},[52,164019,164020,164022,164024],{"class":54,"line":55},[52,164021,34879],{"class":160},[52,164023,163969],{"class":58},[52,164025,163972],{"class":622},[52,164027,164028],{"class":54,"line":69},[52,164029,164030],{"class":62},"    \"\"\"\n",[52,164032,164033],{"class":54,"line":82},[52,164034,164035],{"class":62},"    计算BMI。\n",[52,164037,164038],{"class":54,"line":97},[52,164039,116],{"emptyLinePlaceholder":115},[52,164041,164042],{"class":54,"line":112},[52,164043,164044],{"class":62},"    :param weight: 体重，单位kg\n",[52,164046,164047],{"class":54,"line":119},[52,164048,164049],{"class":62},"    :param height: 身高，单位m\n",[52,164051,164052],{"class":54,"line":130},[52,164053,164054],{"class":62},"    :return: BMI数值\n",[52,164056,164057],{"class":54,"line":136},[52,164058,164030],{"class":62},[52,164060,164061,164063,164065,164067,164069,164071],{"class":54,"line":141},[52,164062,7049],{"class":160},[52,164064,163984],{"class":622},[52,164066,3696],{"class":160},[52,164068,163989],{"class":622},[52,164070,13617],{"class":160},[52,164072,2391],{"class":90},[14,164074,164076],{"id":164075},"_59-变量作用域","5.9 变量作用域",[30,164078,164080],{"id":164079},"_591-局部变量","5.9.1 局部变量",[274,164082,164083],{},"在函数内部定义的变量，只能在函数内部使用。",[19,164085,164087],{"className":33310,"code":164086,"language":33312,"meta":28,"style":28},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[26,164088,164089,164098,164106,164112,164116,164120,164125],{"__ignoreMap":28},[52,164090,164091,164093,164096],{"class":54,"line":55},[52,164092,34879],{"class":160},[52,164094,164095],{"class":58}," test",[52,164097,34885],{"class":622},[52,164099,164100,164102,164104],{"class":54,"line":69},[52,164101,48525],{"class":622},[52,164103,2099],{"class":160},[52,164105,61358],{"class":90},[52,164107,164108,164110],{"class":54,"line":82},[52,164109,34231],{"class":90},[52,164111,3133],{"class":622},[52,164113,164114],{"class":54,"line":97},[52,164115,116],{"emptyLinePlaceholder":115},[52,164117,164118],{"class":54,"line":112},[52,164119,116],{"emptyLinePlaceholder":115},[52,164121,164122],{"class":54,"line":119},[52,164123,164124],{"class":622},"test()\n",[52,164126,164127,164129,164132],{"class":54,"line":130},[52,164128,33347],{"class":90},[52,164130,164131],{"class":622},"(num)  ",[52,164133,164134],{"class":332},"# 报错\n",[30,164136,164138],{"id":164137},"_592-全局变量","5.9.2 全局变量",[274,164140,164141],{},"在函数外部定义的变量，可以在函数内部读取。",[19,164143,164145],{"className":33310,"code":164144,"language":33312,"meta":28,"style":28},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[26,164146,164147,164155,164159,164163,164171,164177,164181,164185],{"__ignoreMap":28},[52,164148,164149,164151,164153],{"class":54,"line":55},[52,164150,148904],{"class":622},[52,164152,2099],{"class":160},[52,164154,151721],{"class":62},[52,164156,164157],{"class":54,"line":69},[52,164158,116],{"emptyLinePlaceholder":115},[52,164160,164161],{"class":54,"line":82},[52,164162,116],{"emptyLinePlaceholder":115},[52,164164,164165,164167,164169],{"class":54,"line":97},[52,164166,34879],{"class":160},[52,164168,163364],{"class":58},[52,164170,34885],{"class":622},[52,164172,164173,164175],{"class":54,"line":112},[52,164174,34231],{"class":90},[52,164176,153028],{"class":622},[52,164178,164179],{"class":54,"line":119},[52,164180,116],{"emptyLinePlaceholder":115},[52,164182,164183],{"class":54,"line":130},[52,164184,116],{"emptyLinePlaceholder":115},[52,164186,164187],{"class":54,"line":136},[52,164188,163399],{"class":622},[274,164190,164191,164192,31319],{},"如果要在函数内部修改全局变量，需要 ",[26,164193,164194],{},"global",[19,164196,164198],{"className":33310,"code":164197,"language":33312,"meta":28,"style":28},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[26,164199,164200,164208,164212,164216,164225,164233,164241,164245,164249,164254],{"__ignoreMap":28},[52,164201,164202,164204,164206],{"class":54,"line":55},[52,164203,149059],{"class":622},[52,164205,2099],{"class":160},[52,164207,50265],{"class":90},[52,164209,164210],{"class":54,"line":69},[52,164211,116],{"emptyLinePlaceholder":115},[52,164213,164214],{"class":54,"line":82},[52,164215,116],{"emptyLinePlaceholder":115},[52,164217,164218,164220,164223],{"class":54,"line":97},[52,164219,34879],{"class":160},[52,164221,164222],{"class":58}," add_count",[52,164224,34885],{"class":622},[52,164226,164227,164230],{"class":54,"line":112},[52,164228,164229],{"class":160},"    global",[52,164231,164232],{"class":622}," count\n",[52,164234,164235,164237,164239],{"class":54,"line":119},[52,164236,161801],{"class":622},[52,164238,12433],{"class":160},[52,164240,58629],{"class":90},[52,164242,164243],{"class":54,"line":130},[52,164244,116],{"emptyLinePlaceholder":115},[52,164246,164247],{"class":54,"line":136},[52,164248,116],{"emptyLinePlaceholder":115},[52,164250,164251],{"class":54,"line":141},[52,164252,164253],{"class":622},"add_count()\n",[52,164255,164256,164258],{"class":54,"line":146},[52,164257,33347],{"class":90},[52,164259,164260],{"class":622},"(count)\n",[274,164262,164263],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164265,164267],{"id":164266},"_510-函数嵌套调用","5.10 函数嵌套调用",[274,164269,164270],{},"一个函数中可以调用另一个函数。",[19,164272,164274],{"className":33310,"code":164273,"language":33312,"meta":28,"style":28},"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",[26,164275,164276,164285,164299,164303,164307,164316,164321,164341,164362,164366,164370,164374],{"__ignoreMap":28},[52,164277,164278,164280,164283],{"class":54,"line":55},[52,164279,34879],{"class":160},[52,164281,164282],{"class":58}," print_line",[52,164284,34885],{"class":622},[52,164286,164287,164289,164291,164293,164295,164297],{"class":54,"line":69},[52,164288,34231],{"class":90},[52,164290,3121],{"class":622},[52,164292,35415],{"class":62},[52,164294,9474],{"class":160},[52,164296,81593],{"class":90},[52,164298,170],{"class":622},[52,164300,164301],{"class":54,"line":82},[52,164302,116],{"emptyLinePlaceholder":115},[52,164304,164305],{"class":54,"line":97},[52,164306,116],{"emptyLinePlaceholder":115},[52,164308,164309,164311,164314],{"class":54,"line":112},[52,164310,34879],{"class":160},[52,164312,164313],{"class":58}," print_info",[52,164315,151743],{"class":622},[52,164317,164318],{"class":54,"line":119},[52,164319,164320],{"class":622},"    print_line()\n",[52,164322,164323,164325,164327,164329,164331,164333,164335,164337,164339],{"class":54,"line":130},[52,164324,34231],{"class":90},[52,164326,3121],{"class":622},[52,164328,3170],{"class":160},[52,164330,159050],{"class":62},[52,164332,4008],{"class":90},[52,164334,82738],{"class":622},[52,164336,4058],{"class":90},[52,164338,3364],{"class":62},[52,164340,170],{"class":622},[52,164342,164343,164345,164347,164349,164352,164354,164356,164358,164360],{"class":54,"line":136},[52,164344,34231],{"class":90},[52,164346,3121],{"class":622},[52,164348,3170],{"class":160},[52,164350,164351],{"class":62},"\"年龄:",[52,164353,4008],{"class":90},[52,164355,73149],{"class":622},[52,164357,4058],{"class":90},[52,164359,3364],{"class":62},[52,164361,170],{"class":622},[52,164363,164364],{"class":54,"line":141},[52,164365,164320],{"class":622},[52,164367,164368],{"class":54,"line":146},[52,164369,116],{"emptyLinePlaceholder":115},[52,164371,164372],{"class":54,"line":152},[52,164373,116],{"emptyLinePlaceholder":115},[52,164375,164376,164379,164381,164383,164385],{"class":54,"line":157},[52,164377,164378],{"class":622},"print_info(",[52,164380,152256],{"class":62},[52,164382,15391],{"class":622},[52,164384,3762],{"class":90},[52,164386,170],{"class":622},[274,164388,164389],{},"这种方式可以把小功能组合成大功能。",[14,164391,164393],{"id":164392},"_511-参数检查","5.11 参数检查",[274,164395,164396],{},"函数内部可以检查参数是否合法。",[19,164398,164400],{"className":33310,"code":164399,"language":33312,"meta":28,"style":28},"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",[26,164401,164402,164411,164423,164429,164439,164443,164447,164464,164468,164480,164491,164497],{"__ignoreMap":28},[52,164403,164404,164406,164409],{"class":54,"line":55},[52,164405,34879],{"class":160},[52,164407,164408],{"class":58}," divide",[52,164410,153461],{"class":622},[52,164412,164413,164415,164417,164419,164421],{"class":54,"line":69},[52,164414,6060],{"class":160},[52,164416,13838],{"class":622},[52,164418,5909],{"class":160},[52,164420,7052],{"class":90},[52,164422,6698],{"class":622},[52,164424,164425,164427],{"class":54,"line":82},[52,164426,17708],{"class":160},[52,164428,154540],{"class":90},[52,164430,164431,164433,164435,164437],{"class":54,"line":97},[52,164432,7049],{"class":160},[52,164434,13825],{"class":622},[52,164436,3696],{"class":160},[52,164438,153472],{"class":622},[52,164440,164441],{"class":54,"line":112},[52,164442,116],{"emptyLinePlaceholder":115},[52,164444,164445],{"class":54,"line":119},[52,164446,116],{"emptyLinePlaceholder":115},[52,164448,164449,164451,164453,164456,164458,164460,164462],{"class":54,"line":130},[52,164450,163674],{"class":622},[52,164452,2099],{"class":160},[52,164454,164455],{"class":622}," divide(",[52,164457,3559],{"class":90},[52,164459,15391],{"class":622},[52,164461,3306],{"class":90},[52,164463,170],{"class":622},[52,164465,164466],{"class":54,"line":136},[52,164467,116],{"emptyLinePlaceholder":115},[52,164469,164470,164472,164474,164476,164478],{"class":54,"line":141},[52,164471,4509],{"class":160},[52,164473,163920],{"class":622},[52,164475,41859],{"class":160},[52,164477,41865],{"class":90},[52,164479,6698],{"class":622},[52,164481,164482,164484,164486,164489],{"class":54,"line":146},[52,164483,34231],{"class":90},[52,164485,3121],{"class":622},[52,164487,164488],{"class":62},"\"除数不能为0\"",[52,164490,170],{"class":622},[52,164492,164493,164495],{"class":54,"line":152},[52,164494,4668],{"class":160},[52,164496,6698],{"class":622},[52,164498,164499,164501],{"class":54,"line":157},[52,164500,34231],{"class":90},[52,164502,79513],{"class":622},[14,164504,164506],{"id":164505},"_512-类型提示","5.12 类型提示",[274,164508,164509],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[19,164511,164513],{"className":33310,"code":164512,"language":33312,"meta":28,"style":28},"def add(a: int, b: int) -> int:\n    return a + b\n",[26,164514,164515,164538],{"__ignoreMap":28},[52,164516,164517,164519,164521,164524,164526,164529,164531,164534,164536],{"class":54,"line":55},[52,164518,34879],{"class":160},[52,164520,2018],{"class":58},[52,164522,164523],{"class":622},"(a: ",[52,164525,3124],{"class":90},[52,164527,164528],{"class":622},", b: ",[52,164530,3124],{"class":90},[52,164532,164533],{"class":622},") -> ",[52,164535,3124],{"class":90},[52,164537,6698],{"class":622},[52,164539,164540,164542,164544,164546],{"class":54,"line":69},[52,164541,7049],{"class":160},[52,164543,13825],{"class":622},[52,164545,3593],{"class":160},[52,164547,153472],{"class":622},[274,164549,164550],{},"字符串参数：",[19,164552,164554],{"className":33310,"code":164553,"language":33312,"meta":28,"style":28},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[26,164555,164556,164573],{"__ignoreMap":28},[52,164557,164558,164560,164562,164565,164567,164569,164571],{"class":54,"line":55},[52,164559,34879],{"class":160},[52,164561,163364],{"class":58},[52,164563,164564],{"class":622},"(name: ",[52,164566,4281],{"class":90},[52,164568,164533],{"class":622},[52,164570,98614],{"class":90},[52,164572,6698],{"class":622},[52,164574,164575,164577,164579,164581,164583,164585,164587,164589,164591],{"class":54,"line":69},[52,164576,34231],{"class":90},[52,164578,3121],{"class":622},[52,164580,3170],{"class":160},[52,164582,159422],{"class":62},[52,164584,4008],{"class":90},[52,164586,82738],{"class":622},[52,164588,4058],{"class":90},[52,164590,3364],{"class":62},[52,164592,170],{"class":622},[274,164594,164595],{},"列表参数：",[19,164597,164599],{"className":33310,"code":164598,"language":33312,"meta":28,"style":28},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[26,164600,164601,164620,164628,164640,164649],{"__ignoreMap":28},[52,164602,164603,164605,164608,164611,164613,164616,164618],{"class":54,"line":55},[52,164604,34879],{"class":160},[52,164606,164607],{"class":58}," get_total",[52,164609,164610],{"class":622},"(numbers: list[",[52,164612,3124],{"class":90},[52,164614,164615],{"class":622},"]) -> ",[52,164617,3124],{"class":90},[52,164619,6698],{"class":622},[52,164621,164622,164624,164626],{"class":54,"line":69},[52,164623,161675],{"class":622},[52,164625,2099],{"class":160},[52,164627,50265],{"class":90},[52,164629,164630,164632,164635,164637],{"class":54,"line":82},[52,164631,6160],{"class":160},[52,164633,164634],{"class":622}," number ",[52,164636,28988],{"class":160},[52,164638,164639],{"class":622}," numbers:\n",[52,164641,164642,164644,164646],{"class":54,"line":97},[52,164643,162350],{"class":622},[52,164645,12433],{"class":160},[52,164647,164648],{"class":622}," number\n",[52,164650,164651,164653],{"class":54,"line":112},[52,164652,7049],{"class":160},[52,164654,164655],{"class":622}," total\n",[274,164657,164658],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164660,164662],{"id":164661},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[19,164664,164666],{"className":33310,"code":164665,"language":33312,"meta":28,"style":28},"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",[26,164667,164668,164678,164682,164686,164694,164705,164715,164725,164735,164745,164749,164753,164762,164784,164788,164792,164801,164807,164827,164839,164850,164854,164863,164874,164879,164883,164887,164896,164902,164921,164933,164943,164947,164958,164968,164972,164980,164991,164995,164999,165003,165011,165016,165030,165034,165046,165051,165063,165068,165080,165085,165097,165107,165111,165117],{"__ignoreMap":28},[52,164669,164670,164673,164675],{"class":54,"line":55},[52,164671,164672],{"class":622},"balance ",[52,164674,2099],{"class":160},[52,164676,164677],{"class":90}," 1000\n",[52,164679,164680],{"class":54,"line":69},[52,164681,116],{"emptyLinePlaceholder":115},[52,164683,164684],{"class":54,"line":82},[52,164685,116],{"emptyLinePlaceholder":115},[52,164687,164688,164690,164692],{"class":54,"line":97},[52,164689,34879],{"class":160},[52,164691,154401],{"class":58},[52,164693,34885],{"class":622},[52,164695,164696,164698,164700,164703],{"class":54,"line":112},[52,164697,34231],{"class":90},[52,164699,3121],{"class":622},[52,164701,164702],{"class":62},"\"====== ATM ======\"",[52,164704,170],{"class":622},[52,164706,164707,164709,164711,164713],{"class":54,"line":119},[52,164708,34231],{"class":90},[52,164710,3121],{"class":622},[52,164712,163016],{"class":62},[52,164714,170],{"class":622},[52,164716,164717,164719,164721,164723],{"class":54,"line":130},[52,164718,34231],{"class":90},[52,164720,3121],{"class":622},[52,164722,163027],{"class":62},[52,164724,170],{"class":622},[52,164726,164727,164729,164731,164733],{"class":54,"line":136},[52,164728,34231],{"class":90},[52,164730,3121],{"class":622},[52,164732,163038],{"class":62},[52,164734,170],{"class":622},[52,164736,164737,164739,164741,164743],{"class":54,"line":141},[52,164738,34231],{"class":90},[52,164740,3121],{"class":622},[52,164742,163049],{"class":62},[52,164744,170],{"class":622},[52,164746,164747],{"class":54,"line":146},[52,164748,116],{"emptyLinePlaceholder":115},[52,164750,164751],{"class":54,"line":152},[52,164752,116],{"emptyLinePlaceholder":115},[52,164754,164755,164757,164760],{"class":54,"line":157},[52,164756,34879],{"class":160},[52,164758,164759],{"class":58}," show_balance",[52,164761,34885],{"class":622},[52,164763,164764,164766,164768,164770,164773,164775,164778,164780,164782],{"class":54,"line":173},[52,164765,34231],{"class":90},[52,164767,3121],{"class":622},[52,164769,3170],{"class":160},[52,164771,164772],{"class":62},"\"当前余额:",[52,164774,4008],{"class":90},[52,164776,164777],{"class":622},"balance",[52,164779,4058],{"class":90},[52,164781,159380],{"class":62},[52,164783,170],{"class":622},[52,164785,164786],{"class":54,"line":178},[52,164787,116],{"emptyLinePlaceholder":115},[52,164789,164790],{"class":54,"line":184},[52,164791,116],{"emptyLinePlaceholder":115},[52,164793,164794,164796,164799],{"class":54,"line":189},[52,164795,34879],{"class":160},[52,164797,164798],{"class":58}," save_money",[52,164800,34885],{"class":622},[52,164802,164803,164805],{"class":54,"line":201},[52,164804,164229],{"class":160},[52,164806,152467],{"class":622},[52,164808,164809,164812,164814,164816,164818,164820,164822,164825],{"class":54,"line":206},[52,164810,164811],{"class":622},"    money ",[52,164813,2099],{"class":160},[52,164815,112717],{"class":90},[52,164817,3121],{"class":622},[52,164819,56751],{"class":90},[52,164821,3121],{"class":622},[52,164823,164824],{"class":62},"\"请输入存款金额:\"",[52,164826,33429],{"class":622},[52,164828,164829,164831,164833,164835,164837],{"class":54,"line":224},[52,164830,6060],{"class":160},[52,164832,152510],{"class":622},[52,164834,4566],{"class":160},[52,164836,7052],{"class":90},[52,164838,6698],{"class":622},[52,164840,164841,164843,164845,164848],{"class":54,"line":229},[52,164842,35383],{"class":90},[52,164844,3121],{"class":622},[52,164846,164847],{"class":62},"\"金额必须大于0\"",[52,164849,170],{"class":622},[52,164851,164852],{"class":54,"line":241},[52,164853,154729],{"class":160},[52,164855,164856,164859,164861],{"class":54,"line":246},[52,164857,164858],{"class":622},"    balance ",[52,164860,12433],{"class":160},[52,164862,152543],{"class":622},[52,164864,164865,164867,164869,164872],{"class":54,"line":252},[52,164866,34231],{"class":90},[52,164868,3121],{"class":622},[52,164870,164871],{"class":62},"\"存款成功\"",[52,164873,170],{"class":622},[52,164875,164876],{"class":54,"line":257},[52,164877,164878],{"class":622},"    show_balance()\n",[52,164880,164881],{"class":54,"line":266},[52,164882,116],{"emptyLinePlaceholder":115},[52,164884,164885],{"class":54,"line":4722},[52,164886,116],{"emptyLinePlaceholder":115},[52,164888,164889,164891,164894],{"class":54,"line":4727},[52,164890,34879],{"class":160},[52,164892,164893],{"class":58}," withdraw_money",[52,164895,34885],{"class":622},[52,164897,164898,164900],{"class":54,"line":4741},[52,164899,164229],{"class":160},[52,164901,152467],{"class":622},[52,164903,164904,164906,164908,164910,164912,164914,164916,164919],{"class":54,"line":4746},[52,164905,164811],{"class":622},[52,164907,2099],{"class":160},[52,164909,112717],{"class":90},[52,164911,3121],{"class":622},[52,164913,56751],{"class":90},[52,164915,3121],{"class":622},[52,164917,164918],{"class":62},"\"请输入取款金额:\"",[52,164920,33429],{"class":622},[52,164922,164923,164925,164927,164929,164931],{"class":54,"line":5538},[52,164924,6060],{"class":160},[52,164926,152510],{"class":622},[52,164928,4566],{"class":160},[52,164930,7052],{"class":90},[52,164932,6698],{"class":622},[52,164934,164935,164937,164939,164941],{"class":54,"line":5552},[52,164936,35383],{"class":90},[52,164938,3121],{"class":622},[52,164940,164847],{"class":62},[52,164942,170],{"class":622},[52,164944,164945],{"class":54,"line":5560},[52,164946,154729],{"class":160},[52,164948,164949,164951,164953,164955],{"class":54,"line":5565},[52,164950,6060],{"class":160},[52,164952,152510],{"class":622},[52,164954,4072],{"class":160},[52,164956,164957],{"class":622}," balance:\n",[52,164959,164960,164962,164964,164966],{"class":54,"line":5571},[52,164961,35383],{"class":90},[52,164963,3121],{"class":622},[52,164965,152605],{"class":62},[52,164967,170],{"class":622},[52,164969,164970],{"class":54,"line":5577},[52,164971,154729],{"class":160},[52,164973,164974,164976,164978],{"class":54,"line":5582},[52,164975,164858],{"class":622},[52,164977,152620],{"class":160},[52,164979,152543],{"class":622},[52,164981,164982,164984,164986,164989],{"class":54,"line":10904},[52,164983,34231],{"class":90},[52,164985,3121],{"class":622},[52,164987,164988],{"class":62},"\"取款成功\"",[52,164990,170],{"class":622},[52,164992,164993],{"class":54,"line":10928},[52,164994,164878],{"class":622},[52,164996,164997],{"class":54,"line":10933},[52,164998,116],{"emptyLinePlaceholder":115},[52,165000,165001],{"class":54,"line":10939},[52,165002,116],{"emptyLinePlaceholder":115},[52,165004,165005,165007,165009],{"class":54,"line":10966},[52,165006,111583],{"class":160},[52,165008,98220],{"class":90},[52,165010,6698],{"class":622},[52,165012,165013],{"class":54,"line":10971},[52,165014,165015],{"class":622},"    show_menu()\n",[52,165017,165018,165020,165022,165024,165026,165028],{"class":54,"line":10977},[52,165019,163060],{"class":622},[52,165021,2099],{"class":160},[52,165023,63535],{"class":90},[52,165025,3121],{"class":622},[52,165027,155441],{"class":62},[52,165029,170],{"class":622},[52,165031,165032],{"class":54,"line":10989},[52,165033,116],{"emptyLinePlaceholder":115},[52,165035,165036,165038,165040,165042,165044],{"class":54,"line":11001},[52,165037,6060],{"class":160},[52,165039,155454],{"class":622},[52,165041,5909],{"class":160},[52,165043,155459],{"class":62},[52,165045,6698],{"class":622},[52,165047,165048],{"class":54,"line":11013},[52,165049,165050],{"class":622},"        show_balance()\n",[52,165052,165053,165055,165057,165059,165061],{"class":54,"line":12672},[52,165054,42225],{"class":160},[52,165056,155454],{"class":622},[52,165058,5909],{"class":160},[52,165060,155478],{"class":62},[52,165062,6698],{"class":622},[52,165064,165065],{"class":54,"line":12697},[52,165066,165067],{"class":622},"        save_money()\n",[52,165069,165070,165072,165074,165076,165078],{"class":54,"line":12720},[52,165071,42225],{"class":160},[52,165073,155454],{"class":622},[52,165075,5909],{"class":160},[52,165077,155496],{"class":62},[52,165079,6698],{"class":622},[52,165081,165082],{"class":54,"line":12744},[52,165083,165084],{"class":622},"        withdraw_money()\n",[52,165086,165087,165089,165091,165093,165095],{"class":54,"line":12749},[52,165088,42225],{"class":160},[52,165090,155454],{"class":622},[52,165092,5909],{"class":160},[52,165094,155550],{"class":62},[52,165096,6698],{"class":622},[52,165098,165099,165101,165103,165105],{"class":54,"line":12754},[52,165100,35383],{"class":90},[52,165102,3121],{"class":622},[52,165104,155561],{"class":62},[52,165106,170],{"class":622},[52,165108,165109],{"class":54,"line":12759},[52,165110,34559],{"class":160},[52,165112,165113,165115],{"class":54,"line":12768},[52,165114,160390],{"class":160},[52,165116,6698],{"class":622},[52,165118,165119,165121,165123,165125],{"class":54,"line":12773},[52,165120,35383],{"class":90},[52,165122,3121],{"class":622},[52,165124,155582],{"class":62},[52,165126,170],{"class":622},[274,165128,165129],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,165131,165133],{"id":165132},"_514-易错点","5.14 易错点",[1070,165135,165136,165139,165142,165147,165152,165155],{},[1073,165137,165138],{},"函数定义后必须调用才会执行。",[1073,165140,165141],{},"函数名后面有括号才是调用。",[1073,165143,165144,165146],{},[26,165145,20002],{}," 后面的代码不会执行。",[1073,165148,165149,165150,31319],{},"没有返回值的函数默认返回 ",[26,165151,98614],{},[1073,165153,165154],{},"局部变量不能在函数外部访问。",[1073,165156,165157,165158,165160],{},"不要滥用 ",[26,165159,164194],{},"，更好的方式是让函数返回新值。",[274,165162,165163,165164,165166],{},"例如不用 ",[26,165165,164194],{}," 改写存款：",[19,165168,165170],{"className":33310,"code":165169,"language":33312,"meta":28,"style":28},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[26,165171,165172,165181,165192,165196,165200,165208,165221],{"__ignoreMap":28},[52,165173,165174,165176,165178],{"class":54,"line":55},[52,165175,34879],{"class":160},[52,165177,164798],{"class":58},[52,165179,165180],{"class":622},"(balance, money):\n",[52,165182,165183,165185,165188,165190],{"class":54,"line":69},[52,165184,7049],{"class":160},[52,165186,165187],{"class":622}," balance ",[52,165189,3593],{"class":160},[52,165191,152543],{"class":622},[52,165193,165194],{"class":54,"line":82},[52,165195,116],{"emptyLinePlaceholder":115},[52,165197,165198],{"class":54,"line":97},[52,165199,116],{"emptyLinePlaceholder":115},[52,165201,165202,165204,165206],{"class":54,"line":112},[52,165203,164672],{"class":622},[52,165205,2099],{"class":160},[52,165207,164677],{"class":90},[52,165209,165210,165212,165214,165217,165219],{"class":54,"line":119},[52,165211,164672],{"class":622},[52,165213,2099],{"class":160},[52,165215,165216],{"class":622}," save_money(balance, ",[52,165218,4689],{"class":90},[52,165220,170],{"class":622},[52,165222,165223,165225],{"class":54,"line":130},[52,165224,33347],{"class":90},[52,165226,165227],{"class":622},"(balance)\n",[14,165229,165231],{"id":165230},"_515-本章练习","5.15 本章练习",[1070,165233,165234,165241,165247,165253,165259],{},[1073,165235,165236,165237,165240],{},"定义函数 ",[26,165238,165239],{},"print_student(name, age)","，输出学生信息。",[1073,165242,165236,165243,165246],{},[26,165244,165245],{},"get_max(a, b, c)","，返回三个数中的最大值。",[1073,165248,165236,165249,165252],{},[26,165250,165251],{},"is_even(num)","，判断一个数是否为偶数。",[1073,165254,165236,165255,165258],{},[26,165256,165257],{},"calculate_bmi(weight, height)","，返回 BMI。",[1073,165260,165261],{},"把第 4 章的菜单程序拆分成多个函数。",[3015,165263,165264],{},"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":28,"searchDepth":69,"depth":69,"links":165266},[165267,165268,165269,165270,165271,165272,165273,165274,165275,165279,165280,165281,165282,165283,165284],{"id":163287,"depth":69,"text":163288},{"id":163328,"depth":69,"text":163329},{"id":163418,"depth":69,"text":163419},{"id":163499,"depth":69,"text":163500},{"id":163632,"depth":69,"text":163633},{"id":163754,"depth":69,"text":163755},{"id":163876,"depth":69,"text":163877},{"id":163953,"depth":69,"text":163954},{"id":164075,"depth":69,"text":164076,"children":165276},[165277,165278],{"id":164079,"depth":82,"text":164080},{"id":164137,"depth":82,"text":164138},{"id":164266,"depth":69,"text":164267},{"id":164392,"depth":69,"text":164393},{"id":164505,"depth":69,"text":164506},{"id":164661,"depth":69,"text":164662},{"id":165132,"depth":69,"text":165133},{"id":165230,"depth":69,"text":165231},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163279,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165291,"title":165292,"body":165293,"description":3046,"extension":3047,"meta":168337,"navigation":115,"path":168338,"seo":168339,"stem":168340,"__hash__":168341},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165294,"toc":168318},[165295,165298,165302,165305,165308,165412,165415,165419,165422,165502,165505,165509,165512,165572,165575,165611,165614,165629,165633,165706,165709,165764,165767,165837,165840,165924,165934,165992,165996,166041,166044,166070,166073,166179,166183,166186,166228,166231,166295,166298,166302,166305,166366,166369,166399,166402,166440,166444,166447,166456,166459,166583,166586,166627,166631,166634,166645,166685,166688,166703,166708,166711,166778,166781,166871,166875,166878,166926,166929,166956,166958,166988,166991,167011,167014,167045,167048,167081,167085,167088,167112,167115,167139,167142,167166,167170,167173,167303,167306,167386,167389,167464,167468,167471,167521,167524,167566,167569,167593,167595,167619,167622,167677,167680,167746,167750,167753,167756,167794,167797,167850,167853,167899,167902,167935,167938,167942,168261,168265,168294,168298,168315],[10,165296,165292],{"id":165297},"_6-数据容器",[14,165299,165301],{"id":165300},"_61-什么是数据容器","6.1 什么是数据容器",[274,165303,165304],{},"数据容器用于一次保存多个数据。",[274,165306,165307],{},"常见容器：",[3253,165309,165310,165327],{},[3256,165311,165312],{},[3259,165313,165314,165316,165319,165322,165325],{},[3262,165315,28716],{},[3262,165317,165318],{},"是否有序",[3262,165320,165321],{},"是否可变",[3262,165323,165324],{},"是否允许重复",[3262,165326,30427],{},[3299,165328,165329,165347,165363,165378,165395],{},[3259,165330,165331,165334,165337,165340,165343],{},[3304,165332,165333],{},"list列表",[3304,165335,165336],{},"有序",[3304,165338,165339],{},"可变",[3304,165341,165342],{},"允许",[3304,165344,165345],{},[26,165346,157625],{},[3259,165348,165349,165352,165354,165357,165359],{},[3304,165350,165351],{},"tuple元组",[3304,165353,165336],{},[3304,165355,165356],{},"不可变",[3304,165358,165342],{},[3304,165360,165361],{},[26,165362,157638],{},[3259,165364,165365,165368,165370,165372,165374],{},[3304,165366,165367],{},"str字符串",[3304,165369,165336],{},[3304,165371,165356],{},[3304,165373,165342],{},[3304,165375,165376],{},[26,165377,158248],{},[3259,165379,165380,165383,165386,165388,165391],{},[3304,165381,165382],{},"set集合",[3304,165384,165385],{},"无序",[3304,165387,165339],{},[3304,165389,165390],{},"不允许",[3304,165392,165393],{},[26,165394,157663],{},[3259,165396,165397,165400,165402,165404,165407],{},[3304,165398,165399],{},"dict字典",[3304,165401,165336],{},[3304,165403,165339],{},[3304,165405,165406],{},"key不允许重复",[3304,165408,165409],{},[26,165410,165411],{},"{\"name\": \"小明\"}",[274,165413,165414],{},"Python 3.7 之后，字典保持插入顺序。",[14,165416,165418],{"id":165417},"_62-列表list","6.2 列表list",[274,165420,165421],{},"列表用于保存一组有顺序的数据。",[19,165423,165425],{"className":33310,"code":165424,"language":33312,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[26,165426,165427,165447,165472,165493],{"__ignoreMap":28},[52,165428,165429,165431,165433,165435,165437,165439,165441,165443,165445],{"class":54,"line":55},[52,165430,162748],{"class":622},[52,165432,2099],{"class":160},[52,165434,55157],{"class":622},[52,165436,152256],{"class":62},[52,165438,15391],{"class":622},[52,165440,153304],{"class":62},[52,165442,15391],{"class":622},[52,165444,162099],{"class":62},[52,165446,36178],{"class":622},[52,165448,165449,165452,165454,165456,165458,165460,165462,165464,165466,165468,165470],{"class":54,"line":69},[52,165450,165451],{"class":622},"numbers ",[52,165453,2099],{"class":160},[52,165455,55157],{"class":622},[52,165457,3332],{"class":90},[52,165459,15391],{"class":622},[52,165461,3194],{"class":90},[52,165463,15391],{"class":622},[52,165465,3188],{"class":90},[52,165467,15391],{"class":622},[52,165469,3406],{"class":90},[52,165471,36178],{"class":622},[52,165473,165474,165477,165479,165481,165483,165485,165487,165489,165491],{"class":54,"line":82},[52,165475,165476],{"class":622},"mixed ",[52,165478,2099],{"class":160},[52,165480,55157],{"class":622},[52,165482,152256],{"class":62},[52,165484,15391],{"class":622},[52,165486,3762],{"class":90},[52,165488,15391],{"class":622},[52,165490,34408],{"class":90},[52,165492,36178],{"class":622},[52,165494,165495,165498,165500],{"class":54,"line":97},[52,165496,165497],{"class":622},"empty ",[52,165499,2099],{"class":160},[52,165501,54769],{"class":622},[274,165503,165504],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165506,165508],{"id":165507},"_63-列表索引","6.3 列表索引",[274,165510,165511],{},"正向索引从 0 开始：",[19,165513,165515],{"className":33310,"code":165514,"language":33312,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[26,165516,165517,165537,165541,165552,165562],{"__ignoreMap":28},[52,165518,165519,165521,165523,165525,165527,165529,165531,165533,165535],{"class":54,"line":55},[52,165520,162748],{"class":622},[52,165522,2099],{"class":160},[52,165524,55157],{"class":622},[52,165526,152256],{"class":62},[52,165528,15391],{"class":622},[52,165530,153304],{"class":62},[52,165532,15391],{"class":622},[52,165534,162099],{"class":62},[52,165536,36178],{"class":622},[52,165538,165539],{"class":54,"line":69},[52,165540,116],{"emptyLinePlaceholder":115},[52,165542,165543,165545,165548,165550],{"class":54,"line":82},[52,165544,33347],{"class":90},[52,165546,165547],{"class":622},"(names[",[52,165549,3306],{"class":90},[52,165551,7616],{"class":622},[52,165553,165554,165556,165558,165560],{"class":54,"line":97},[52,165555,33347],{"class":90},[52,165557,165547],{"class":622},[52,165559,3332],{"class":90},[52,165561,7616],{"class":622},[52,165563,165564,165566,165568,165570],{"class":54,"line":112},[52,165565,33347],{"class":90},[52,165567,165547],{"class":622},[52,165569,3194],{"class":90},[52,165571,7616],{"class":622},[274,165573,165574],{},"反向索引从 -1 开始：",[19,165576,165578],{"className":33310,"code":165577,"language":33312,"meta":28,"style":28},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[26,165579,165580,165596],{"__ignoreMap":28},[52,165581,165582,165584,165586,165588,165590,165593],{"class":54,"line":55},[52,165583,33347],{"class":90},[52,165585,165547],{"class":622},[52,165587,3644],{"class":160},[52,165589,3332],{"class":90},[52,165591,165592],{"class":622},"])  ",[52,165594,165595],{"class":332},"# 小刚\n",[52,165597,165598,165600,165602,165604,165606,165608],{"class":54,"line":69},[52,165599,33347],{"class":90},[52,165601,165547],{"class":622},[52,165603,3644],{"class":160},[52,165605,3194],{"class":90},[52,165607,165592],{"class":622},[52,165609,165610],{"class":332},"# 小红\n",[274,165612,165613],{},"索引越界会报错：",[19,165615,165617],{"className":33310,"code":165616,"language":33312,"meta":28,"style":28},"print(names[3])\n",[26,165618,165619],{"__ignoreMap":28},[52,165620,165621,165623,165625,165627],{"class":54,"line":55},[52,165622,33347],{"class":90},[52,165624,165547],{"class":622},[52,165626,3188],{"class":90},[52,165628,7616],{"class":622},[14,165630,165632],{"id":165631},"_64-列表常用方法","6.4 列表常用方法",[19,165634,165636],{"className":33310,"code":165635,"language":33312,"meta":28,"style":28},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[26,165637,165638,165654,165658,165667,165681,165695,165699],{"__ignoreMap":28},[52,165639,165640,165642,165644,165646,165648,165650,165652],{"class":54,"line":55},[52,165641,162748],{"class":622},[52,165643,2099],{"class":160},[52,165645,55157],{"class":622},[52,165647,152256],{"class":62},[52,165649,15391],{"class":622},[52,165651,153304],{"class":62},[52,165653,36178],{"class":622},[52,165655,165656],{"class":54,"line":69},[52,165657,116],{"emptyLinePlaceholder":115},[52,165659,165660,165663,165665],{"class":54,"line":82},[52,165661,165662],{"class":622},"names.append(",[52,165664,162099],{"class":62},[52,165666,170],{"class":622},[52,165668,165669,165672,165674,165676,165679],{"class":54,"line":97},[52,165670,165671],{"class":622},"names.insert(",[52,165673,3332],{"class":90},[52,165675,15391],{"class":622},[52,165677,165678],{"class":62},"\"小李\"",[52,165680,170],{"class":622},[52,165682,165683,165686,165688,165690,165693],{"class":54,"line":112},[52,165684,165685],{"class":622},"names.extend([",[52,165687,11639],{"class":62},[52,165689,15391],{"class":622},[52,165691,165692],{"class":62},"\"小赵\"",[52,165694,7616],{"class":622},[52,165696,165697],{"class":54,"line":119},[52,165698,116],{"emptyLinePlaceholder":115},[52,165700,165701,165703],{"class":54,"line":130},[52,165702,33347],{"class":90},[52,165704,165705],{"class":622},"(names)\n",[274,165707,165708],{},"删除元素：",[19,165710,165712],{"className":33310,"code":165711,"language":33312,"meta":28,"style":28},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[26,165713,165714,165723,165733,165747,165759],{"__ignoreMap":28},[52,165715,165716,165719,165721],{"class":54,"line":55},[52,165717,165718],{"class":622},"names.remove(",[52,165720,153304],{"class":62},[52,165722,170],{"class":622},[52,165724,165725,165728,165730],{"class":54,"line":69},[52,165726,165727],{"class":622},"last ",[52,165729,2099],{"class":160},[52,165731,165732],{"class":622}," names.pop()\n",[52,165734,165735,165738,165740,165743,165745],{"class":54,"line":82},[52,165736,165737],{"class":622},"first ",[52,165739,2099],{"class":160},[52,165741,165742],{"class":622}," names.pop(",[52,165744,3306],{"class":90},[52,165746,170],{"class":622},[52,165748,165749,165752,165755,165757],{"class":54,"line":97},[52,165750,165751],{"class":160},"del",[52,165753,165754],{"class":622}," names[",[52,165756,3306],{"class":90},[52,165758,36178],{"class":622},[52,165760,165761],{"class":54,"line":112},[52,165762,165763],{"class":622},"names.clear()\n",[274,165765,165766],{},"查询和统计：",[19,165768,165770],{"className":33310,"code":165769,"language":33312,"meta":28,"style":28},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[26,165771,165772,165800,165804,165815,165826],{"__ignoreMap":28},[52,165773,165774,165776,165778,165780,165782,165784,165786,165788,165790,165792,165794,165796,165798],{"class":54,"line":55},[52,165775,165451],{"class":622},[52,165777,2099],{"class":160},[52,165779,55157],{"class":622},[52,165781,3332],{"class":90},[52,165783,15391],{"class":622},[52,165785,3194],{"class":90},[52,165787,15391],{"class":622},[52,165789,3188],{"class":90},[52,165791,15391],{"class":622},[52,165793,3194],{"class":90},[52,165795,15391],{"class":622},[52,165797,3406],{"class":90},[52,165799,36178],{"class":622},[52,165801,165802],{"class":54,"line":69},[52,165803,116],{"emptyLinePlaceholder":115},[52,165805,165806,165808,165811,165813],{"class":54,"line":82},[52,165807,33347],{"class":90},[52,165809,165810],{"class":622},"(numbers.index(",[52,165812,3188],{"class":90},[52,165814,33429],{"class":622},[52,165816,165817,165819,165822,165824],{"class":54,"line":97},[52,165818,33347],{"class":90},[52,165820,165821],{"class":622},"(numbers.count(",[52,165823,3194],{"class":90},[52,165825,33429],{"class":622},[52,165827,165828,165830,165832,165834],{"class":54,"line":112},[52,165829,33347],{"class":90},[52,165831,3121],{"class":622},[52,165833,10314],{"class":90},[52,165835,165836],{"class":622},"(numbers))\n",[274,165838,165839],{},"排序：",[19,165841,165843],{"className":33310,"code":165842,"language":33312,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[26,165844,165845,165869,165873,165878,165885,165889,165903,165909,165913,165918],{"__ignoreMap":28},[52,165846,165847,165849,165851,165853,165855,165857,165859,165861,165863,165865,165867],{"class":54,"line":55},[52,165848,165451],{"class":622},[52,165850,2099],{"class":160},[52,165852,55157],{"class":622},[52,165854,3188],{"class":90},[52,165856,15391],{"class":622},[52,165858,3332],{"class":90},[52,165860,15391],{"class":622},[52,165862,3432],{"class":90},[52,165864,15391],{"class":622},[52,165866,3194],{"class":90},[52,165868,36178],{"class":622},[52,165870,165871],{"class":54,"line":69},[52,165872,116],{"emptyLinePlaceholder":115},[52,165874,165875],{"class":54,"line":82},[52,165876,165877],{"class":622},"numbers.sort()\n",[52,165879,165880,165882],{"class":54,"line":97},[52,165881,33347],{"class":90},[52,165883,165884],{"class":622},"(numbers)\n",[52,165886,165887],{"class":54,"line":112},[52,165888,116],{"emptyLinePlaceholder":115},[52,165890,165891,165894,165897,165899,165901],{"class":54,"line":119},[52,165892,165893],{"class":622},"numbers.sort(",[52,165895,165896],{"class":8172},"reverse",[52,165898,2099],{"class":160},[52,165900,34408],{"class":90},[52,165902,170],{"class":622},[52,165904,165905,165907],{"class":54,"line":130},[52,165906,33347],{"class":90},[52,165908,165884],{"class":622},[52,165910,165911],{"class":54,"line":136},[52,165912,116],{"emptyLinePlaceholder":115},[52,165914,165915],{"class":54,"line":141},[52,165916,165917],{"class":622},"numbers.reverse()\n",[52,165919,165920,165922],{"class":54,"line":146},[52,165921,33347],{"class":90},[52,165923,165884],{"class":622},[274,165925,165926,165929,165930,165933],{},[26,165927,165928],{},"sort()"," 会修改原列表，",[26,165931,165932],{},"sorted()"," 返回新列表。",[19,165935,165937],{"className":33310,"code":165936,"language":33312,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[26,165938,165939,165963,165975,165979,165985],{"__ignoreMap":28},[52,165940,165941,165943,165945,165947,165949,165951,165953,165955,165957,165959,165961],{"class":54,"line":55},[52,165942,165451],{"class":622},[52,165944,2099],{"class":160},[52,165946,55157],{"class":622},[52,165948,3188],{"class":90},[52,165950,15391],{"class":622},[52,165952,3332],{"class":90},[52,165954,15391],{"class":622},[52,165956,3432],{"class":90},[52,165958,15391],{"class":622},[52,165960,3194],{"class":90},[52,165962,36178],{"class":622},[52,165964,165965,165968,165970,165973],{"class":54,"line":69},[52,165966,165967],{"class":622},"new_numbers ",[52,165969,2099],{"class":160},[52,165971,165972],{"class":90}," sorted",[52,165974,165884],{"class":622},[52,165976,165977],{"class":54,"line":82},[52,165978,116],{"emptyLinePlaceholder":115},[52,165980,165981,165983],{"class":54,"line":97},[52,165982,33347],{"class":90},[52,165984,165884],{"class":622},[52,165986,165987,165989],{"class":54,"line":112},[52,165988,33347],{"class":90},[52,165990,165991],{"class":622},"(new_numbers)\n",[14,165993,165995],{"id":165994},"_65-列表遍历","6.5 列表遍历",[19,165997,165999],{"className":33310,"code":165998,"language":33312,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[26,166000,166001,166021,166025,166035],{"__ignoreMap":28},[52,166002,166003,166005,166007,166009,166011,166013,166015,166017,166019],{"class":54,"line":55},[52,166004,162748],{"class":622},[52,166006,2099],{"class":160},[52,166008,55157],{"class":622},[52,166010,152256],{"class":62},[52,166012,15391],{"class":622},[52,166014,153304],{"class":62},[52,166016,15391],{"class":622},[52,166018,162099],{"class":62},[52,166020,36178],{"class":622},[52,166022,166023],{"class":54,"line":69},[52,166024,116],{"emptyLinePlaceholder":115},[52,166026,166027,166029,166031,166033],{"class":54,"line":82},[52,166028,5985],{"class":160},[52,166030,162784],{"class":622},[52,166032,28988],{"class":160},[52,166034,162789],{"class":622},[52,166036,166037,166039],{"class":54,"line":97},[52,166038,34231],{"class":90},[52,166040,153028],{"class":622},[274,166042,166043],{},"需要索引时：",[19,166045,166047],{"className":33310,"code":166046,"language":33312,"meta":28,"style":28},"for index, name in enumerate(names):\n    print(index, name)\n",[26,166048,166049,166063],{"__ignoreMap":28},[52,166050,166051,166053,166056,166058,166060],{"class":54,"line":55},[52,166052,5985],{"class":160},[52,166054,166055],{"class":622}," index, name ",[52,166057,28988],{"class":160},[52,166059,34538],{"class":90},[52,166061,166062],{"class":622},"(names):\n",[52,166064,166065,166067],{"class":54,"line":69},[52,166066,34231],{"class":90},[52,166068,166069],{"class":622},"(index, name)\n",[274,166071,166072],{},"统计总分：",[19,166074,166076],{"className":33310,"code":166075,"language":33312,"meta":28,"style":28},"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",[26,166077,166078,166103,166111,166115,166126,166134,166138,166155],{"__ignoreMap":28},[52,166079,166080,166083,166085,166087,166089,166091,166093,166095,166097,166099,166101],{"class":54,"line":55},[52,166081,166082],{"class":622},"scores ",[52,166084,2099],{"class":160},[52,166086,55157],{"class":622},[52,166088,3974],{"class":90},[52,166090,15391],{"class":622},[52,166092,3848],{"class":90},[52,166094,15391],{"class":622},[52,166096,3367],{"class":90},[52,166098,15391],{"class":622},[52,166100,3673],{"class":90},[52,166102,36178],{"class":622},[52,166104,166105,166107,166109],{"class":54,"line":69},[52,166106,159628],{"class":622},[52,166108,2099],{"class":160},[52,166110,50265],{"class":90},[52,166112,166113],{"class":54,"line":82},[52,166114,116],{"emptyLinePlaceholder":115},[52,166116,166117,166119,166121,166123],{"class":54,"line":97},[52,166118,5985],{"class":160},[52,166120,160151],{"class":622},[52,166122,28988],{"class":160},[52,166124,166125],{"class":622}," scores:\n",[52,166127,166128,166130,166132],{"class":54,"line":112},[52,166129,161675],{"class":622},[52,166131,12433],{"class":160},[52,166133,4557],{"class":622},[52,166135,166136],{"class":54,"line":119},[52,166137,116],{"emptyLinePlaceholder":115},[52,166139,166140,166143,166145,166148,166150,166152],{"class":54,"line":130},[52,166141,166142],{"class":622},"avg ",[52,166144,2099],{"class":160},[52,166146,166147],{"class":622}," total ",[52,166149,3696],{"class":160},[52,166151,10287],{"class":90},[52,166153,166154],{"class":622},"(scores)\n",[52,166156,166157,166159,166161,166163,166166,166168,166171,166173,166175,166177],{"class":54,"line":136},[52,166158,33347],{"class":90},[52,166160,3121],{"class":622},[52,166162,3170],{"class":160},[52,166164,166165],{"class":62},"\"平均分:",[52,166167,4008],{"class":90},[52,166169,166170],{"class":622},"avg",[52,166172,159527],{"class":160},[52,166174,4058],{"class":90},[52,166176,3364],{"class":62},[52,166178,170],{"class":622},[14,166180,166182],{"id":166181},"_66-元组tuple","6.6 元组tuple",[274,166184,166185],{},"元组和列表类似，但不可修改。",[19,166187,166189],{"className":33310,"code":166188,"language":33312,"meta":28,"style":28},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[26,166190,166191,166208],{"__ignoreMap":28},[52,166192,166193,166196,166198,166200,166202,166204,166206],{"class":54,"line":55},[52,166194,166195],{"class":622},"point ",[52,166197,2099],{"class":160},[52,166199,4629],{"class":622},[52,166201,3559],{"class":90},[52,166203,15391],{"class":622},[52,166205,3812],{"class":90},[52,166207,170],{"class":622},[52,166209,166210,166212,166214,166216,166218,166220,166222,166224,166226],{"class":54,"line":69},[52,166211,119233],{"class":622},[52,166213,2099],{"class":160},[52,166215,4629],{"class":622},[52,166217,152256],{"class":62},[52,166219,15391],{"class":622},[52,166221,3762],{"class":90},[52,166223,15391],{"class":622},[52,166225,72198],{"class":62},[52,166227,170],{"class":622},[274,166229,166230],{},"单元素元组必须加逗号：",[19,166232,166234],{"className":33310,"code":166233,"language":33312,"meta":28,"style":28},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[26,166235,166236,166250,166263,166267,166281],{"__ignoreMap":28},[52,166237,166238,166241,166243,166245,166247],{"class":54,"line":55},[52,166239,166240],{"class":622},"t1 ",[52,166242,2099],{"class":160},[52,166244,4629],{"class":622},[52,166246,3559],{"class":90},[52,166248,166249],{"class":622},",)\n",[52,166251,166252,166255,166257,166259,166261],{"class":54,"line":69},[52,166253,166254],{"class":622},"t2 ",[52,166256,2099],{"class":160},[52,166258,4629],{"class":622},[52,166260,3559],{"class":90},[52,166262,170],{"class":622},[52,166264,166265],{"class":54,"line":82},[52,166266,116],{"emptyLinePlaceholder":115},[52,166268,166269,166271,166273,166275,166278],{"class":54,"line":97},[52,166270,33347],{"class":90},[52,166272,3121],{"class":622},[52,166274,106027],{"class":90},[52,166276,166277],{"class":622},"(t1))  ",[52,166279,166280],{"class":332},"# tuple\n",[52,166282,166283,166285,166287,166289,166292],{"class":54,"line":112},[52,166284,33347],{"class":90},[52,166286,3121],{"class":622},[52,166288,106027],{"class":90},[52,166290,166291],{"class":622},"(t2))  ",[52,166293,166294],{"class":332},"# int\n",[274,166296,166297],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166299,166301],{"id":166300},"_67-字符串str","6.7 字符串str",[274,166303,166304],{},"字符串也是序列，可以索引、切片和遍历。",[19,166306,166308],{"className":33310,"code":166307,"language":33312,"meta":28,"style":28},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[26,166309,166310,166318,166322,166333,166345,166349,166360],{"__ignoreMap":28},[52,166311,166312,166314,166316],{"class":54,"line":55},[52,166313,158812],{"class":622},[52,166315,2099],{"class":160},[52,166317,162049],{"class":62},[52,166319,166320],{"class":54,"line":69},[52,166321,116],{"emptyLinePlaceholder":115},[52,166323,166324,166326,166329,166331],{"class":54,"line":82},[52,166325,33347],{"class":90},[52,166327,166328],{"class":622},"(text[",[52,166330,3306],{"class":90},[52,166332,7616],{"class":622},[52,166334,166335,166337,166339,166341,166343],{"class":54,"line":97},[52,166336,33347],{"class":90},[52,166338,166328],{"class":622},[52,166340,3644],{"class":160},[52,166342,3332],{"class":90},[52,166344,7616],{"class":622},[52,166346,166347],{"class":54,"line":112},[52,166348,116],{"emptyLinePlaceholder":115},[52,166350,166351,166353,166355,166357],{"class":54,"line":119},[52,166352,5985],{"class":160},[52,166354,162060],{"class":622},[52,166356,28988],{"class":160},[52,166358,166359],{"class":622}," text:\n",[52,166361,166362,166364],{"class":54,"line":130},[52,166363,34231],{"class":90},[52,166365,162071],{"class":622},[274,166367,166368],{},"字符串不可变：",[19,166370,166372],{"className":33310,"code":166371,"language":33312,"meta":28,"style":28},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[26,166373,166374,166382],{"__ignoreMap":28},[52,166375,166376,166378,166380],{"class":54,"line":55},[52,166377,158812],{"class":622},[52,166379,2099],{"class":160},[52,166381,162049],{"class":62},[52,166383,166384,166387,166389,166391,166393,166396],{"class":54,"line":69},[52,166385,166386],{"class":622},"text[",[52,166388,3306],{"class":90},[52,166390,7402],{"class":622},[52,166392,2099],{"class":160},[52,166394,166395],{"class":62}," \"P\"",[52,166397,166398],{"class":332},"  # 报错\n",[274,166400,166401],{},"如果要得到新字符串：",[19,166403,166405],{"className":33310,"code":166404,"language":33312,"meta":28,"style":28},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[26,166406,166407,166415,166433],{"__ignoreMap":28},[52,166408,166409,166411,166413],{"class":54,"line":55},[52,166410,158812],{"class":622},[52,166412,2099],{"class":160},[52,166414,162049],{"class":62},[52,166416,166417,166419,166421,166423,166425,166428,166430],{"class":54,"line":69},[52,166418,158812],{"class":622},[52,166420,2099],{"class":160},[52,166422,166395],{"class":62},[52,166424,48498],{"class":160},[52,166426,166427],{"class":622}," text[",[52,166429,3332],{"class":90},[52,166431,166432],{"class":622},":]\n",[52,166434,166435,166437],{"class":54,"line":82},[52,166436,33347],{"class":90},[52,166438,166439],{"class":622},"(text)\n",[14,166441,166443],{"id":166442},"_68-切片","6.8 切片",[274,166445,166446],{},"切片用于从序列中取一部分。",[19,166448,166450],{"className":33310,"code":166449,"language":33312,"meta":28,"style":28},"序列[开始:结束:步长]\n",[26,166451,166452],{"__ignoreMap":28},[52,166453,166454],{"class":54,"line":55},[52,166455,166449],{"class":622},[274,166457,166458],{},"结束位置不包含。",[19,166460,166462],{"className":33310,"code":166461,"language":33312,"meta":28,"style":28},"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",[26,166463,166464,166501,166505,166524,166539,166553,166567],{"__ignoreMap":28},[52,166465,166466,166469,166471,166473,166475,166477,166479,166481,166483,166485,166487,166489,166491,166493,166495,166497,166499],{"class":54,"line":55},[52,166467,166468],{"class":622},"nums ",[52,166470,2099],{"class":160},[52,166472,55157],{"class":622},[52,166474,3306],{"class":90},[52,166476,15391],{"class":622},[52,166478,3332],{"class":90},[52,166480,15391],{"class":622},[52,166482,3194],{"class":90},[52,166484,15391],{"class":622},[52,166486,3188],{"class":90},[52,166488,15391],{"class":622},[52,166490,3406],{"class":90},[52,166492,15391],{"class":622},[52,166494,3432],{"class":90},[52,166496,15391],{"class":622},[52,166498,3457],{"class":90},[52,166500,36178],{"class":622},[52,166502,166503],{"class":54,"line":69},[52,166504,116],{"emptyLinePlaceholder":115},[52,166506,166507,166509,166512,166514,166516,166518,166521],{"class":54,"line":82},[52,166508,33347],{"class":90},[52,166510,166511],{"class":622},"(nums[",[52,166513,3332],{"class":90},[52,166515,3971],{"class":622},[52,166517,3406],{"class":90},[52,166519,166520],{"class":622},"])    ",[52,166522,166523],{"class":332},"# [1, 2, 3]\n",[52,166525,166526,166528,166531,166533,166536],{"class":54,"line":97},[52,166527,33347],{"class":90},[52,166529,166530],{"class":622},"(nums[:",[52,166532,3188],{"class":90},[52,166534,166535],{"class":622},"])     ",[52,166537,166538],{"class":332},"# [0, 1, 2]\n",[52,166540,166541,166543,166545,166547,166550],{"class":54,"line":112},[52,166542,33347],{"class":90},[52,166544,166511],{"class":622},[52,166546,3188],{"class":90},[52,166548,166549],{"class":622},":])     ",[52,166551,166552],{"class":332},"# [3, 4, 5, 6]\n",[52,166554,166555,166557,166560,166562,166564],{"class":54,"line":119},[52,166556,33347],{"class":90},[52,166558,166559],{"class":622},"(nums[::",[52,166561,3194],{"class":90},[52,166563,166520],{"class":622},[52,166565,166566],{"class":332},"# [0, 2, 4, 6]\n",[52,166568,166569,166571,166573,166575,166577,166580],{"class":54,"line":130},[52,166570,33347],{"class":90},[52,166572,166559],{"class":622},[52,166574,3644],{"class":160},[52,166576,3332],{"class":90},[52,166578,166579],{"class":622},"])   ",[52,166581,166582],{"class":332},"# 反转\n",[274,166584,166585],{},"字符串切片：",[19,166587,166589],{"className":33310,"code":166588,"language":33312,"meta":28,"style":28},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[26,166590,166591,166600,166614],{"__ignoreMap":28},[52,166592,166593,166595,166597],{"class":54,"line":55},[52,166594,158812],{"class":622},[52,166596,2099],{"class":160},[52,166598,166599],{"class":62}," \"abcdef\"\n",[52,166601,166602,166604,166606,166608,166610,166612],{"class":54,"line":69},[52,166603,33347],{"class":90},[52,166605,166328],{"class":622},[52,166607,3332],{"class":90},[52,166609,3971],{"class":622},[52,166611,3406],{"class":90},[52,166613,7616],{"class":622},[52,166615,166616,166618,166621,166623,166625],{"class":54,"line":82},[52,166617,33347],{"class":90},[52,166619,166620],{"class":622},"(text[::",[52,166622,3644],{"class":160},[52,166624,3332],{"class":90},[52,166626,7616],{"class":622},[14,166628,166630],{"id":166629},"_69-集合set","6.9 集合set",[274,166632,166633],{},"集合特点：",[1070,166635,166636,166639,166642],{},[1073,166637,166638],{},"无序。",[1073,166640,166641],{},"元素不重复。",[1073,166643,166644],{},"可以做交集、并集、差集。",[19,166646,166648],{"className":33310,"code":166647,"language":33312,"meta":28,"style":28},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[26,166649,166650,166678],{"__ignoreMap":28},[52,166651,166652,166654,166656,166658,166660,166662,166664,166666,166668,166670,166672,166674,166676],{"class":54,"line":55},[52,166653,166468],{"class":622},[52,166655,2099],{"class":160},[52,166657,7407],{"class":622},[52,166659,3332],{"class":90},[52,166661,15391],{"class":622},[52,166663,3194],{"class":90},[52,166665,15391],{"class":622},[52,166667,3188],{"class":90},[52,166669,15391],{"class":622},[52,166671,3188],{"class":90},[52,166673,15391],{"class":622},[52,166675,3406],{"class":90},[52,166677,4543],{"class":622},[52,166679,166680,166682],{"class":54,"line":69},[52,166681,33347],{"class":90},[52,166683,166684],{"class":622},"(nums)\n",[274,166686,166687],{},"创建空集合：",[19,166689,166691],{"className":33310,"code":166690,"language":33312,"meta":28,"style":28},"s = set()\n",[26,166692,166693],{"__ignoreMap":28},[52,166694,166695,166697,166699,166701],{"class":54,"line":55},[52,166696,13535],{"class":622},[52,166698,2099],{"class":160},[52,166700,1305],{"class":90},[52,166702,4938],{"class":622},[274,166704,11981,166705,166707],{},[26,166706,35391],{}," 是空字典，不是空集合。",[274,166709,166710],{},"集合常用操作：",[19,166712,166714],{"className":33310,"code":166713,"language":33312,"meta":28,"style":28},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[26,166715,166716,166736,166740,166749,166758,166767],{"__ignoreMap":28},[52,166717,166718,166720,166722,166724,166726,166728,166730,166732,166734],{"class":54,"line":55},[52,166719,13535],{"class":622},[52,166721,2099],{"class":160},[52,166723,7407],{"class":622},[52,166725,3332],{"class":90},[52,166727,15391],{"class":622},[52,166729,3194],{"class":90},[52,166731,15391],{"class":622},[52,166733,3188],{"class":90},[52,166735,4543],{"class":622},[52,166737,166738],{"class":54,"line":69},[52,166739,116],{"emptyLinePlaceholder":115},[52,166741,166742,166745,166747],{"class":54,"line":82},[52,166743,166744],{"class":622},"s.add(",[52,166746,3406],{"class":90},[52,166748,170],{"class":622},[52,166750,166751,166754,166756],{"class":54,"line":97},[52,166752,166753],{"class":622},"s.remove(",[52,166755,3194],{"class":90},[52,166757,170],{"class":622},[52,166759,166760,166763,166765],{"class":54,"line":112},[52,166761,166762],{"class":622},"s.discard(",[52,166764,3559],{"class":90},[52,166766,170],{"class":622},[52,166768,166769,166771,166773,166775],{"class":54,"line":119},[52,166770,33347],{"class":90},[52,166772,3121],{"class":622},[52,166774,10314],{"class":90},[52,166776,166777],{"class":622},"(s))\n",[274,166779,166780],{},"交并差：",[19,166782,166784],{"className":33310,"code":166783,"language":33312,"meta":28,"style":28},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[26,166785,166786,166806,166826,166830,166845,166858],{"__ignoreMap":28},[52,166787,166788,166790,166792,166794,166796,166798,166800,166802,166804],{"class":54,"line":55},[52,166789,13875],{"class":622},[52,166791,2099],{"class":160},[52,166793,7407],{"class":622},[52,166795,3332],{"class":90},[52,166797,15391],{"class":622},[52,166799,3194],{"class":90},[52,166801,15391],{"class":622},[52,166803,3188],{"class":90},[52,166805,4543],{"class":622},[52,166807,166808,166810,166812,166814,166816,166818,166820,166822,166824],{"class":54,"line":69},[52,166809,13901],{"class":622},[52,166811,2099],{"class":160},[52,166813,7407],{"class":622},[52,166815,3188],{"class":90},[52,166817,15391],{"class":622},[52,166819,3406],{"class":90},[52,166821,15391],{"class":622},[52,166823,3432],{"class":90},[52,166825,4543],{"class":622},[52,166827,166828],{"class":54,"line":82},[52,166829,116],{"emptyLinePlaceholder":115},[52,166831,166832,166834,166837,166839,166842],{"class":54,"line":97},[52,166833,33347],{"class":90},[52,166835,166836],{"class":622},"(a ",[52,166838,3466],{"class":160},[52,166840,166841],{"class":622}," b)  ",[52,166843,166844],{"class":332},"# 交集\n",[52,166846,166847,166849,166851,166853,166855],{"class":54,"line":112},[52,166848,33347],{"class":90},[52,166850,166836],{"class":622},[52,166852,4033],{"class":160},[52,166854,166841],{"class":622},[52,166856,166857],{"class":332},"# 并集\n",[52,166859,166860,166862,166864,166866,166868],{"class":54,"line":119},[52,166861,33347],{"class":90},[52,166863,166836],{"class":622},[52,166865,3644],{"class":160},[52,166867,166841],{"class":622},[52,166869,166870],{"class":332},"# 差集\n",[14,166872,166874],{"id":166873},"_610-字典dict","6.10 字典dict",[274,166876,166877],{},"字典通过 key-value 保存数据。",[19,166879,166881],{"className":33310,"code":166880,"language":33312,"meta":28,"style":28},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[26,166882,166883,166891,166901,166912,166922],{"__ignoreMap":28},[52,166884,166885,166887,166889],{"class":54,"line":55},[52,166886,151849],{"class":622},[52,166888,2099],{"class":160},[52,166890,18528],{"class":622},[52,166892,166893,166895,166897,166899],{"class":54,"line":69},[52,166894,149388],{"class":62},[52,166896,54368],{"class":622},[52,166898,152256],{"class":62},[52,166900,34398],{"class":622},[52,166902,166903,166906,166908,166910],{"class":54,"line":82},[52,166904,166905],{"class":62},"    \"age\"",[52,166907,54368],{"class":622},[52,166909,3762],{"class":90},[52,166911,34398],{"class":622},[52,166913,166914,166917,166919],{"class":54,"line":97},[52,166915,166916],{"class":62},"    \"score\"",[52,166918,54368],{"class":622},[52,166920,166921],{"class":90},"95\n",[52,166923,166924],{"class":54,"line":112},[52,166925,4543],{"class":622},[274,166927,166928],{},"获取值：",[19,166930,166932],{"className":33310,"code":166931,"language":33312,"meta":28,"style":28},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[26,166933,166934,166945],{"__ignoreMap":28},[52,166935,166936,166938,166941,166943],{"class":54,"line":55},[52,166937,33347],{"class":90},[52,166939,166940],{"class":622},"(student[",[52,166942,65609],{"class":62},[52,166944,7616],{"class":622},[52,166946,166947,166949,166952,166954],{"class":54,"line":69},[52,166948,33347],{"class":90},[52,166950,166951],{"class":622},"(student.get(",[52,166953,65609],{"class":62},[52,166955,33429],{"class":622},[274,166957,18344],{},[19,166959,166961],{"className":33310,"code":166960,"language":33312,"meta":28,"style":28},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[26,166962,166963,166976],{"__ignoreMap":28},[52,166964,166965,166967,166970,166973],{"class":54,"line":55},[52,166966,155227],{"class":622},[52,166968,166969],{"class":62},"\"address\"",[52,166971,166972],{"class":622},"]     ",[52,166974,166975],{"class":332},"# key不存在会报错\n",[52,166977,166978,166981,166983,166985],{"class":54,"line":69},[52,166979,166980],{"class":622},"student.get(",[52,166982,166969],{"class":62},[52,166984,16670],{"class":622},[52,166986,166987],{"class":332},"# key不存在返回None\n",[274,166989,166990],{},"设置默认值：",[19,166992,166994],{"className":33310,"code":166993,"language":33312,"meta":28,"style":28},"print(student.get(\"address\", \"未知\"))\n",[26,166995,166996],{"__ignoreMap":28},[52,166997,166998,167000,167002,167004,167006,167009],{"class":54,"line":55},[52,166999,33347],{"class":90},[52,167001,166951],{"class":622},[52,167003,166969],{"class":62},[52,167005,15391],{"class":622},[52,167007,167008],{"class":62},"\"未知\"",[52,167010,33429],{"class":622},[274,167012,167013],{},"新增和修改：",[19,167015,167017],{"className":33310,"code":167016,"language":33312,"meta":28,"style":28},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[26,167018,167019,167032],{"__ignoreMap":28},[52,167020,167021,167023,167025,167027,167029],{"class":54,"line":55},[52,167022,155227],{"class":622},[52,167024,72053],{"class":62},[52,167026,7402],{"class":622},[52,167028,2099],{"class":160},[52,167030,167031],{"class":90}," 19\n",[52,167033,167034,167036,167038,167040,167042],{"class":54,"line":69},[52,167035,155227],{"class":622},[52,167037,166969],{"class":62},[52,167039,7402],{"class":622},[52,167041,2099],{"class":160},[52,167043,167044],{"class":62}," \"北京\"\n",[274,167046,167047],{},"删除：",[19,167049,167051],{"className":33310,"code":167050,"language":33312,"meta":28,"style":28},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[26,167052,167053,167066,167076],{"__ignoreMap":28},[52,167054,167055,167057,167059,167062,167064],{"class":54,"line":55},[52,167056,157726],{"class":622},[52,167058,2099],{"class":160},[52,167060,167061],{"class":622}," student.pop(",[52,167063,153840],{"class":62},[52,167065,170],{"class":622},[52,167067,167068,167070,167072,167074],{"class":54,"line":69},[52,167069,165751],{"class":160},[52,167071,154517],{"class":622},[52,167073,72053],{"class":62},[52,167075,36178],{"class":622},[52,167077,167078],{"class":54,"line":82},[52,167079,167080],{"class":622},"student.clear()\n",[14,167082,167084],{"id":167083},"_611-字典遍历","6.11 字典遍历",[274,167086,167087],{},"遍历 key：",[19,167089,167091],{"className":33310,"code":167090,"language":33312,"meta":28,"style":28},"for key in student:\n    print(key, student[key])\n",[26,167092,167093,167105],{"__ignoreMap":28},[52,167094,167095,167097,167100,167102],{"class":54,"line":55},[52,167096,5985],{"class":160},[52,167098,167099],{"class":622}," key ",[52,167101,28988],{"class":160},[52,167103,167104],{"class":622}," student:\n",[52,167106,167107,167109],{"class":54,"line":69},[52,167108,34231],{"class":90},[52,167110,167111],{"class":622},"(key, student[key])\n",[274,167113,167114],{},"遍历 value：",[19,167116,167118],{"className":33310,"code":167117,"language":33312,"meta":28,"style":28},"for value in student.values():\n    print(value)\n",[26,167119,167120,167132],{"__ignoreMap":28},[52,167121,167122,167124,167127,167129],{"class":54,"line":55},[52,167123,5985],{"class":160},[52,167125,167126],{"class":622}," value ",[52,167128,28988],{"class":160},[52,167130,167131],{"class":622}," student.values():\n",[52,167133,167134,167136],{"class":54,"line":69},[52,167135,34231],{"class":90},[52,167137,167138],{"class":622},"(value)\n",[274,167140,167141],{},"遍历 key 和 value：",[19,167143,167145],{"className":33310,"code":167144,"language":33312,"meta":28,"style":28},"for key, value in student.items():\n    print(key, value)\n",[26,167146,167147,167159],{"__ignoreMap":28},[52,167148,167149,167151,167154,167156],{"class":54,"line":55},[52,167150,5985],{"class":160},[52,167152,167153],{"class":622}," key, value ",[52,167155,28988],{"class":160},[52,167157,167158],{"class":622}," student.items():\n",[52,167160,167161,167163],{"class":54,"line":69},[52,167162,34231],{"class":90},[52,167164,167165],{"class":622},"(key, value)\n",[14,167167,167169],{"id":167168},"_612-嵌套容器","6.12 嵌套容器",[274,167171,167172],{},"列表中保存字典，是项目中最常见的结构之一。",[19,167174,167176],{"className":33310,"code":167175,"language":33312,"meta":28,"style":28},"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",[26,167177,167178,167186,167214,167242,167270,167274,167278,167288],{"__ignoreMap":28},[52,167179,167180,167182,167184],{"class":54,"line":55},[52,167181,162084],{"class":622},[52,167183,2099],{"class":160},[52,167185,58377],{"class":622},[52,167187,167188,167190,167192,167194,167196,167198,167200,167202,167204,167206,167208,167210,167212],{"class":54,"line":69},[52,167189,150753],{"class":622},[52,167191,65609],{"class":62},[52,167193,54368],{"class":622},[52,167195,152256],{"class":62},[52,167197,15391],{"class":622},[52,167199,72053],{"class":62},[52,167201,54368],{"class":622},[52,167203,3762],{"class":90},[52,167205,15391],{"class":622},[52,167207,153840],{"class":62},[52,167209,54368],{"class":622},[52,167211,4100],{"class":90},[52,167213,7889],{"class":622},[52,167215,167216,167218,167220,167222,167224,167226,167228,167230,167232,167234,167236,167238,167240],{"class":54,"line":82},[52,167217,150753],{"class":622},[52,167219,65609],{"class":62},[52,167221,54368],{"class":622},[52,167223,153304],{"class":62},[52,167225,15391],{"class":622},[52,167227,72053],{"class":62},[52,167229,54368],{"class":622},[52,167231,3737],{"class":90},[52,167233,15391],{"class":622},[52,167235,153840],{"class":62},[52,167237,54368],{"class":622},[52,167239,3923],{"class":90},[52,167241,7889],{"class":622},[52,167243,167244,167246,167248,167250,167252,167254,167256,167258,167260,167262,167264,167266,167268],{"class":54,"line":97},[52,167245,150753],{"class":622},[52,167247,65609],{"class":62},[52,167249,54368],{"class":622},[52,167251,162099],{"class":62},[52,167253,15391],{"class":622},[52,167255,72053],{"class":62},[52,167257,54368],{"class":622},[52,167259,3787],{"class":90},[52,167261,15391],{"class":622},[52,167263,153840],{"class":62},[52,167265,54368],{"class":622},[52,167267,3519],{"class":90},[52,167269,7889],{"class":622},[52,167271,167272],{"class":54,"line":112},[52,167273,36178],{"class":622},[52,167275,167276],{"class":54,"line":119},[52,167277,116],{"emptyLinePlaceholder":115},[52,167279,167280,167282,167284,167286],{"class":54,"line":130},[52,167281,5985],{"class":160},[52,167283,154505],{"class":622},[52,167285,28988],{"class":160},[52,167287,154510],{"class":622},[52,167289,167290,167292,167294,167296,167299,167301],{"class":54,"line":136},[52,167291,34231],{"class":90},[52,167293,166940],{"class":622},[52,167295,65609],{"class":62},[52,167297,167298],{"class":622},"], student[",[52,167300,153840],{"class":62},[52,167302,7616],{"class":622},[274,167304,167305],{},"统计平均分：",[19,167307,167309],{"className":33310,"code":167308,"language":33312,"meta":28,"style":28},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[26,167310,167311,167319,167323,167333,167345,167349,167364],{"__ignoreMap":28},[52,167312,167313,167315,167317],{"class":54,"line":55},[52,167314,159628],{"class":622},[52,167316,2099],{"class":160},[52,167318,50265],{"class":90},[52,167320,167321],{"class":54,"line":69},[52,167322,116],{"emptyLinePlaceholder":115},[52,167324,167325,167327,167329,167331],{"class":54,"line":82},[52,167326,5985],{"class":160},[52,167328,154505],{"class":622},[52,167330,28988],{"class":160},[52,167332,154510],{"class":622},[52,167334,167335,167337,167339,167341,167343],{"class":54,"line":97},[52,167336,161675],{"class":622},[52,167338,12433],{"class":160},[52,167340,154517],{"class":622},[52,167342,153840],{"class":62},[52,167344,36178],{"class":622},[52,167346,167347],{"class":54,"line":112},[52,167348,116],{"emptyLinePlaceholder":115},[52,167350,167351,167353,167355,167357,167359,167361],{"class":54,"line":119},[52,167352,166142],{"class":622},[52,167354,2099],{"class":160},[52,167356,166147],{"class":622},[52,167358,3696],{"class":160},[52,167360,10287],{"class":90},[52,167362,167363],{"class":622},"(students)\n",[52,167365,167366,167368,167370,167372,167374,167376,167378,167380,167382,167384],{"class":54,"line":130},[52,167367,33347],{"class":90},[52,167369,3121],{"class":622},[52,167371,3170],{"class":160},[52,167373,166165],{"class":62},[52,167375,4008],{"class":90},[52,167377,166170],{"class":622},[52,167379,159527],{"class":160},[52,167381,4058],{"class":90},[52,167383,3364],{"class":62},[52,167385,170],{"class":622},[274,167387,167388],{},"查找学生：",[19,167390,167392],{"className":33310,"code":167391,"language":33312,"meta":28,"style":28},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[26,167393,167394,167409,167413,167423,167437,167443,167447,167453],{"__ignoreMap":28},[52,167395,167396,167398,167400,167402,167404,167407],{"class":54,"line":55},[52,167397,114498],{"class":622},[52,167399,2099],{"class":160},[52,167401,63535],{"class":90},[52,167403,3121],{"class":622},[52,167405,167406],{"class":62},"\"请输入学生姓名:\"",[52,167408,170],{"class":622},[52,167410,167411],{"class":54,"line":69},[52,167412,116],{"emptyLinePlaceholder":115},[52,167414,167415,167417,167419,167421],{"class":54,"line":82},[52,167416,5985],{"class":160},[52,167418,154505],{"class":622},[52,167420,28988],{"class":160},[52,167422,154510],{"class":622},[52,167424,167425,167427,167429,167431,167433,167435],{"class":54,"line":97},[52,167426,6060],{"class":160},[52,167428,154517],{"class":622},[52,167430,65609],{"class":62},[52,167432,7402],{"class":622},[52,167434,5909],{"class":160},[52,167436,162800],{"class":622},[52,167438,167439,167441],{"class":54,"line":112},[52,167440,35383],{"class":90},[52,167442,152410],{"class":622},[52,167444,167445],{"class":54,"line":119},[52,167446,34559],{"class":160},[52,167448,167449,167451],{"class":54,"line":130},[52,167450,4668],{"class":160},[52,167452,6698],{"class":622},[52,167454,167455,167457,167459,167462],{"class":54,"line":136},[52,167456,34231],{"class":90},[52,167458,3121],{"class":622},[52,167460,167461],{"class":62},"\"没有找到\"",[52,167463,170],{"class":622},[14,167465,167467],{"id":167466},"_613-容器通用操作","6.13 容器通用操作",[274,167469,167470],{},"长度：",[19,167472,167474],{"className":33310,"code":167473,"language":33312,"meta":28,"style":28},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[26,167475,167476,167495,167505],{"__ignoreMap":28},[52,167477,167478,167480,167483,167485,167487,167489,167491,167493],{"class":54,"line":55},[52,167479,10314],{"class":90},[52,167481,167482],{"class":622},"([",[52,167484,3332],{"class":90},[52,167486,15391],{"class":622},[52,167488,3194],{"class":90},[52,167490,15391],{"class":622},[52,167492,3188],{"class":90},[52,167494,7616],{"class":622},[52,167496,167497,167499,167501,167503],{"class":54,"line":69},[52,167498,10314],{"class":90},[52,167500,3121],{"class":622},[52,167502,158248],{"class":62},[52,167504,170],{"class":622},[52,167506,167507,167509,167512,167514,167516,167518],{"class":54,"line":82},[52,167508,10314],{"class":90},[52,167510,167511],{"class":622},"({",[52,167513,65609],{"class":62},[52,167515,54368],{"class":622},[52,167517,152256],{"class":62},[52,167519,167520],{"class":622},"})\n",[274,167522,167523],{},"最大最小：",[19,167525,167527],{"className":33310,"code":167526,"language":33312,"meta":28,"style":28},"max([1, 2, 3])\nmin([1, 2, 3])\n",[26,167528,167529,167547],{"__ignoreMap":28},[52,167530,167531,167533,167535,167537,167539,167541,167543,167545],{"class":54,"line":55},[52,167532,8971],{"class":90},[52,167534,167482],{"class":622},[52,167536,3332],{"class":90},[52,167538,15391],{"class":622},[52,167540,3194],{"class":90},[52,167542,15391],{"class":622},[52,167544,3188],{"class":90},[52,167546,7616],{"class":622},[52,167548,167549,167552,167554,167556,167558,167560,167562,167564],{"class":54,"line":69},[52,167550,167551],{"class":90},"min",[52,167553,167482],{"class":622},[52,167555,3332],{"class":90},[52,167557,15391],{"class":622},[52,167559,3194],{"class":90},[52,167561,15391],{"class":622},[52,167563,3188],{"class":90},[52,167565,7616],{"class":622},[274,167567,167568],{},"求和：",[19,167570,167572],{"className":33310,"code":167571,"language":33312,"meta":28,"style":28},"sum([1, 2, 3])\n",[26,167573,167574],{"__ignoreMap":28},[52,167575,167576,167579,167581,167583,167585,167587,167589,167591],{"class":54,"line":55},[52,167577,167578],{"class":90},"sum",[52,167580,167482],{"class":622},[52,167582,3332],{"class":90},[52,167584,15391],{"class":622},[52,167586,3194],{"class":90},[52,167588,15391],{"class":622},[52,167590,3188],{"class":90},[52,167592,7616],{"class":622},[274,167594,165839],{},[19,167596,167598],{"className":33310,"code":167597,"language":33312,"meta":28,"style":28},"sorted([3, 1, 2])\n",[26,167599,167600],{"__ignoreMap":28},[52,167601,167602,167605,167607,167609,167611,167613,167615,167617],{"class":54,"line":55},[52,167603,167604],{"class":90},"sorted",[52,167606,167482],{"class":622},[52,167608,3188],{"class":90},[52,167610,15391],{"class":622},[52,167612,3332],{"class":90},[52,167614,15391],{"class":622},[52,167616,3194],{"class":90},[52,167618,7616],{"class":622},[274,167620,167621],{},"类型转换：",[19,167623,167625],{"className":33310,"code":167624,"language":33312,"meta":28,"style":28},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[26,167626,167627,167637,167655],{"__ignoreMap":28},[52,167628,167629,167631,167633,167635],{"class":54,"line":55},[52,167630,156438],{"class":90},[52,167632,3121],{"class":622},[52,167634,158248],{"class":62},[52,167636,170],{"class":622},[52,167638,167639,167641,167643,167645,167647,167649,167651,167653],{"class":54,"line":69},[52,167640,157633],{"class":90},[52,167642,167482],{"class":622},[52,167644,3332],{"class":90},[52,167646,15391],{"class":622},[52,167648,3194],{"class":90},[52,167650,15391],{"class":622},[52,167652,3188],{"class":90},[52,167654,7616],{"class":622},[52,167656,167657,167659,167661,167663,167665,167667,167669,167671,167673,167675],{"class":54,"line":82},[52,167658,157658],{"class":90},[52,167660,167482],{"class":622},[52,167662,3332],{"class":90},[52,167664,15391],{"class":622},[52,167666,3332],{"class":90},[52,167668,15391],{"class":622},[52,167670,3194],{"class":90},[52,167672,15391],{"class":622},[52,167674,3188],{"class":90},[52,167676,7616],{"class":622},[274,167678,167679],{},"成员判断：",[19,167681,167683],{"className":33310,"code":167682,"language":33312,"meta":28,"style":28},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[26,167684,167685,167702,167726],{"__ignoreMap":28},[52,167686,167687,167689,167691,167694,167697,167700],{"class":54,"line":55},[52,167688,33347],{"class":90},[52,167690,3121],{"class":622},[52,167692,167693],{"class":62},"\"a\"",[52,167695,167696],{"class":160}," in",[52,167698,167699],{"class":62}," \"abc\"",[52,167701,170],{"class":622},[52,167703,167704,167706,167708,167710,167712,167714,167716,167718,167720,167722,167724],{"class":54,"line":69},[52,167705,33347],{"class":90},[52,167707,3121],{"class":622},[52,167709,3332],{"class":90},[52,167711,167696],{"class":160},[52,167713,55157],{"class":622},[52,167715,3332],{"class":90},[52,167717,15391],{"class":622},[52,167719,3194],{"class":90},[52,167721,15391],{"class":622},[52,167723,3188],{"class":90},[52,167725,7616],{"class":622},[52,167727,167728,167730,167732,167734,167736,167738,167740,167742,167744],{"class":54,"line":82},[52,167729,33347],{"class":90},[52,167731,3121],{"class":622},[52,167733,65609],{"class":62},[52,167735,167696],{"class":160},[52,167737,7407],{"class":622},[52,167739,65609],{"class":62},[52,167741,54368],{"class":622},[52,167743,152256],{"class":62},[52,167745,167520],{"class":622},[14,167747,167749],{"id":167748},"_614-推导式","6.14 推导式",[274,167751,167752],{},"推导式用于快速生成容器。",[274,167754,167755],{},"列表推导式：",[19,167757,167759],{"className":33310,"code":167758,"language":33312,"meta":28,"style":28},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[26,167760,167761,167788],{"__ignoreMap":28},[52,167762,167763,167765,167767,167770,167772,167774,167776,167778,167780,167782,167784,167786],{"class":54,"line":55},[52,167764,166468],{"class":622},[52,167766,2099],{"class":160},[52,167768,167769],{"class":622}," [i ",[52,167771,5985],{"class":160},[52,167773,12394],{"class":622},[52,167775,28988],{"class":160},[52,167777,35375],{"class":90},[52,167779,3121],{"class":622},[52,167781,3332],{"class":90},[52,167783,15391],{"class":622},[52,167785,3457],{"class":90},[52,167787,100228],{"class":622},[52,167789,167790,167792],{"class":54,"line":69},[52,167791,33347],{"class":90},[52,167793,166684],{"class":622},[274,167795,167796],{},"带条件：",[19,167798,167800],{"className":33310,"code":167799,"language":33312,"meta":28,"style":28},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[26,167801,167802,167843],{"__ignoreMap":28},[52,167803,167804,167807,167809,167811,167813,167815,167817,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841],{"class":54,"line":55},[52,167805,167806],{"class":622},"even_nums ",[52,167808,2099],{"class":160},[52,167810,167769],{"class":622},[52,167812,5985],{"class":160},[52,167814,12394],{"class":622},[52,167816,28988],{"class":160},[52,167818,35375],{"class":90},[52,167820,3121],{"class":622},[52,167822,3332],{"class":90},[52,167824,15391],{"class":622},[52,167826,3450],{"class":90},[52,167828,16670],{"class":622},[52,167830,4509],{"class":160},[52,167832,12394],{"class":622},[52,167834,3441],{"class":160},[52,167836,17711],{"class":90},[52,167838,104479],{"class":160},[52,167840,7052],{"class":90},[52,167842,36178],{"class":622},[52,167844,167845,167847],{"class":54,"line":69},[52,167846,33347],{"class":90},[52,167848,167849],{"class":622},"(even_nums)\n",[274,167851,167852],{},"字典推导式：",[19,167854,167856],{"className":33310,"code":167855,"language":33312,"meta":28,"style":28},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[26,167857,167858,167892],{"__ignoreMap":28},[52,167859,167860,167863,167865,167868,167870,167872,167875,167877,167879,167881,167883,167885,167887,167889],{"class":54,"line":55},[52,167861,167862],{"class":622},"squares ",[52,167864,2099],{"class":160},[52,167866,167867],{"class":622}," {i: i ",[52,167869,13617],{"class":160},[52,167871,17711],{"class":90},[52,167873,167874],{"class":160}," for",[52,167876,12394],{"class":622},[52,167878,28988],{"class":160},[52,167880,35375],{"class":90},[52,167882,3121],{"class":622},[52,167884,3332],{"class":90},[52,167886,15391],{"class":622},[52,167888,3457],{"class":90},[52,167890,167891],{"class":622},")}\n",[52,167893,167894,167896],{"class":54,"line":69},[52,167895,33347],{"class":90},[52,167897,167898],{"class":622},"(squares)\n",[274,167900,167901],{},"集合推导式：",[19,167903,167905],{"className":33310,"code":167904,"language":33312,"meta":28,"style":28},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[26,167906,167907,167928],{"__ignoreMap":28},[52,167908,167909,167912,167914,167917,167919,167921,167923,167926],{"class":54,"line":55},[52,167910,167911],{"class":622},"chars ",[52,167913,2099],{"class":160},[52,167915,167916],{"class":622}," {ch ",[52,167918,5985],{"class":160},[52,167920,162060],{"class":622},[52,167922,28988],{"class":160},[52,167924,167925],{"class":62}," \"hello\"",[52,167927,4543],{"class":622},[52,167929,167930,167932],{"class":54,"line":69},[52,167931,33347],{"class":90},[52,167933,167934],{"class":622},"(chars)\n",[274,167936,167937],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167939,167941],{"id":167940},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[19,167943,167945],{"className":33310,"code":167944,"language":33312,"meta":28,"style":28},"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",[26,167946,167947,167955,167975,167995,168015,168035,168039,168043,168051,168065,168074,168078,168088,168100,168104,168124,168133,168137,168153,168158,168162,168176,168180,168202,168238],{"__ignoreMap":28},[52,167948,167949,167951,167953],{"class":54,"line":55},[52,167950,162084],{"class":622},[52,167952,2099],{"class":160},[52,167954,58377],{"class":622},[52,167956,167957,167959,167961,167963,167965,167967,167969,167971,167973],{"class":54,"line":69},[52,167958,150753],{"class":622},[52,167960,65609],{"class":62},[52,167962,54368],{"class":622},[52,167964,152256],{"class":62},[52,167966,15391],{"class":622},[52,167968,153840],{"class":62},[52,167970,54368],{"class":622},[52,167972,4100],{"class":90},[52,167974,7889],{"class":622},[52,167976,167977,167979,167981,167983,167985,167987,167989,167991,167993],{"class":54,"line":82},[52,167978,150753],{"class":622},[52,167980,65609],{"class":62},[52,167982,54368],{"class":622},[52,167984,153304],{"class":62},[52,167986,15391],{"class":622},[52,167988,153840],{"class":62},[52,167990,54368],{"class":622},[52,167992,3923],{"class":90},[52,167994,7889],{"class":622},[52,167996,167997,167999,168001,168003,168005,168007,168009,168011,168013],{"class":54,"line":97},[52,167998,150753],{"class":622},[52,168000,65609],{"class":62},[52,168002,54368],{"class":622},[52,168004,162099],{"class":62},[52,168006,15391],{"class":622},[52,168008,153840],{"class":62},[52,168010,54368],{"class":622},[52,168012,3519],{"class":90},[52,168014,7889],{"class":622},[52,168016,168017,168019,168021,168023,168025,168027,168029,168031,168033],{"class":54,"line":112},[52,168018,150753],{"class":622},[52,168020,65609],{"class":62},[52,168022,54368],{"class":622},[52,168024,165678],{"class":62},[52,168026,15391],{"class":622},[52,168028,153840],{"class":62},[52,168030,54368],{"class":622},[52,168032,3994],{"class":90},[52,168034,7889],{"class":622},[52,168036,168037],{"class":54,"line":119},[52,168038,36178],{"class":622},[52,168040,168041],{"class":54,"line":130},[52,168042,116],{"emptyLinePlaceholder":115},[52,168044,168045,168047,168049],{"class":54,"line":136},[52,168046,159628],{"class":622},[52,168048,2099],{"class":160},[52,168050,50265],{"class":90},[52,168052,168053,168056,168058,168061,168063],{"class":54,"line":141},[52,168054,168055],{"class":622},"max_student ",[52,168057,2099],{"class":160},[52,168059,168060],{"class":622}," students[",[52,168062,3306],{"class":90},[52,168064,36178],{"class":622},[52,168066,168067,168070,168072],{"class":54,"line":146},[52,168068,168069],{"class":622},"passed ",[52,168071,2099],{"class":160},[52,168073,54769],{"class":622},[52,168075,168076],{"class":54,"line":152},[52,168077,116],{"emptyLinePlaceholder":115},[52,168079,168080,168082,168084,168086],{"class":54,"line":157},[52,168081,5985],{"class":160},[52,168083,154505],{"class":622},[52,168085,28988],{"class":160},[52,168087,154510],{"class":622},[52,168089,168090,168092,168094,168096,168098],{"class":54,"line":173},[52,168091,161675],{"class":622},[52,168093,12433],{"class":160},[52,168095,154517],{"class":622},[52,168097,153840],{"class":62},[52,168099,36178],{"class":622},[52,168101,168102],{"class":54,"line":178},[52,168103,116],{"emptyLinePlaceholder":115},[52,168105,168106,168108,168110,168112,168114,168116,168119,168121],{"class":54,"line":184},[52,168107,6060],{"class":160},[52,168109,154517],{"class":622},[52,168111,153840],{"class":62},[52,168113,7402],{"class":622},[52,168115,4072],{"class":160},[52,168117,168118],{"class":622}," max_student[",[52,168120,153840],{"class":62},[52,168122,168123],{"class":622},"]:\n",[52,168125,168126,168129,168131],{"class":54,"line":189},[52,168127,168128],{"class":622},"        max_student ",[52,168130,2099],{"class":160},[52,168132,154533],{"class":622},[52,168134,168135],{"class":54,"line":201},[52,168136,116],{"emptyLinePlaceholder":115},[52,168138,168139,168141,168143,168145,168147,168149,168151],{"class":54,"line":206},[52,168140,6060],{"class":160},[52,168142,154517],{"class":622},[52,168144,153840],{"class":62},[52,168146,7402],{"class":622},[52,168148,4677],{"class":160},[52,168150,160205],{"class":90},[52,168152,6698],{"class":622},[52,168154,168155],{"class":54,"line":224},[52,168156,168157],{"class":622},"        passed.append(student)\n",[52,168159,168160],{"class":54,"line":229},[52,168161,116],{"emptyLinePlaceholder":115},[52,168163,168164,168166,168168,168170,168172,168174],{"class":54,"line":241},[52,168165,166142],{"class":622},[52,168167,2099],{"class":160},[52,168169,166147],{"class":622},[52,168171,3696],{"class":160},[52,168173,10287],{"class":90},[52,168175,167363],{"class":622},[52,168177,168178],{"class":54,"line":246},[52,168179,116],{"emptyLinePlaceholder":115},[52,168181,168182,168184,168186,168188,168190,168192,168194,168196,168198,168200],{"class":54,"line":252},[52,168183,33347],{"class":90},[52,168185,3121],{"class":622},[52,168187,3170],{"class":160},[52,168189,166165],{"class":62},[52,168191,4008],{"class":90},[52,168193,166170],{"class":622},[52,168195,159527],{"class":160},[52,168197,4058],{"class":90},[52,168199,3364],{"class":62},[52,168201,170],{"class":622},[52,168203,168204,168206,168208,168210,168213,168215,168218,168220,168222,168224,168226,168228,168230,168232,168234,168236],{"class":54,"line":257},[52,168205,33347],{"class":90},[52,168207,3121],{"class":622},[52,168209,3170],{"class":160},[52,168211,168212],{"class":62},"\"最高分学生:",[52,168214,4008],{"class":90},[52,168216,168217],{"class":622},"max_student[",[52,168219,155250],{"class":62},[52,168221,4052],{"class":622},[52,168223,4058],{"class":90},[52,168225,7407],{"class":90},[52,168227,168217],{"class":622},[52,168229,155288],{"class":62},[52,168231,4052],{"class":622},[52,168233,4058],{"class":90},[52,168235,3364],{"class":62},[52,168237,170],{"class":622},[52,168239,168240,168242,168244,168246,168249,168252,168255,168257,168259],{"class":54,"line":266},[52,168241,33347],{"class":90},[52,168243,3121],{"class":622},[52,168245,3170],{"class":160},[52,168247,168248],{"class":62},"\"及格人数:",[52,168250,168251],{"class":90},"{len",[52,168253,168254],{"class":622},"(passed)",[52,168256,4058],{"class":90},[52,168258,3364],{"class":62},[52,168260,170],{"class":622},[14,168262,168264],{"id":168263},"_616-易错点","6.16 易错点",[1070,168266,168267,168270,168273,168276,168282,168291],{},[1073,168268,168269],{},"列表可变，元组和字符串不可变。",[1073,168271,168272],{},"切片结束位置不包含。",[1073,168274,168275],{},"字典通过 key 取值，不是通过索引。",[1073,168277,168278,168279,31319],{},"空集合要用 ",[26,168280,168281],{},"set()",[1073,168283,107286,168284,168287,168288,31319],{},[26,168285,168286],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[26,168289,168290],{},"get()",[1073,168292,168293],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168295,168297],{"id":168296},"_617-本章练习","6.17 本章练习",[1070,168299,168300,168303,168306,168309,168312],{},[1073,168301,168302],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[1073,168304,168305],{},"输入一句话，统计每个字符出现次数。",[1073,168307,168308],{},"使用集合去除列表中的重复元素。",[1073,168310,168311],{},"使用字典保存一个学生的信息，并实现修改成绩。",[1073,168313,168314],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[3015,168316,168317],{},"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":28,"searchDepth":69,"depth":69,"links":168319},[168320,168321,168322,168323,168324,168325,168326,168327,168328,168329,168330,168331,168332,168333,168334,168335,168336],{"id":165300,"depth":69,"text":165301},{"id":165417,"depth":69,"text":165418},{"id":165507,"depth":69,"text":165508},{"id":165631,"depth":69,"text":165632},{"id":165994,"depth":69,"text":165995},{"id":166181,"depth":69,"text":166182},{"id":166300,"depth":69,"text":166301},{"id":166442,"depth":69,"text":166443},{"id":166629,"depth":69,"text":166630},{"id":166873,"depth":69,"text":166874},{"id":167083,"depth":69,"text":167084},{"id":167168,"depth":69,"text":167169},{"id":167466,"depth":69,"text":167467},{"id":167748,"depth":69,"text":167749},{"id":167940,"depth":69,"text":167941},{"id":168263,"depth":69,"text":168264},{"id":168296,"depth":69,"text":168297},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165292,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":168343,"title":168344,"body":168345,"description":3046,"extension":3047,"meta":170517,"navigation":115,"path":170518,"seo":170519,"stem":170520,"__hash__":170521},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":168346,"toc":170492},[168347,168350,168354,168357,168437,168440,168461,168464,168468,168471,168533,168536,168553,168557,168560,168605,168607,168615,168619,168622,168704,168707,168710,168735,168738,168761,168765,168768,168770,168832,168835,168837,168888,168892,168896,168902,169007,169011,169017,169088,169092,169095,169163,169166,169246,169250,169256,169292,169295,169298,169408,169414,169418,169421,169493,169496,169500,169504,169509,169571,169575,169580,169648,169652,169657,169773,169777,169780,169860,169863,169867,169870,169974,169976,169991,169994,169998,170136,170144,170148,170150,170161,170163,170421,170425,170457,170461,170489],[10,168348,168344],{"id":168349},"_7-函数进阶",[14,168351,168353],{"id":168352},"_71-多返回值","7.1 多返回值",[274,168355,168356],{},"Python 函数可以返回多个值，本质上返回的是元组。",[19,168358,168360],{"className":33310,"code":168359,"language":33312,"meta":28,"style":28},"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",[26,168361,168362,168371,168379,168387,168396,168403,168407,168411,168420,168426],{"__ignoreMap":28},[52,168363,168364,168366,168369],{"class":54,"line":55},[52,168365,34879],{"class":160},[52,168367,168368],{"class":58}," get_info",[52,168370,34885],{"class":622},[52,168372,168373,168375,168377],{"class":54,"line":69},[52,168374,154738],{"class":622},[52,168376,2099],{"class":160},[52,168378,151721],{"class":62},[52,168380,168381,168383,168385],{"class":54,"line":82},[52,168382,154754],{"class":622},[52,168384,2099],{"class":160},[52,168386,148919],{"class":90},[52,168388,168389,168391,168393],{"class":54,"line":97},[52,168390,154769],{"class":622},[52,168392,2099],{"class":160},[52,168394,168395],{"class":90}," 95\n",[52,168397,168398,168400],{"class":54,"line":112},[52,168399,7049],{"class":160},[52,168401,168402],{"class":622}," name, age, score\n",[52,168404,168405],{"class":54,"line":119},[52,168406,116],{"emptyLinePlaceholder":115},[52,168408,168409],{"class":54,"line":130},[52,168410,116],{"emptyLinePlaceholder":115},[52,168412,168413,168415,168417],{"class":54,"line":136},[52,168414,163674],{"class":622},[52,168416,2099],{"class":160},[52,168418,168419],{"class":622}," get_info()\n",[52,168421,168422,168424],{"class":54,"line":141},[52,168423,33347],{"class":90},[52,168425,79513],{"class":622},[52,168427,168428,168430,168432,168434],{"class":54,"line":146},[52,168429,33347],{"class":90},[52,168431,3121],{"class":622},[52,168433,106027],{"class":90},[52,168435,168436],{"class":622},"(result))\n",[274,168438,168439],{},"可以直接解包：",[19,168441,168443],{"className":33310,"code":168442,"language":33312,"meta":28,"style":28},"name, age, score = get_info()\nprint(name, age, score)\n",[26,168444,168445,168454],{"__ignoreMap":28},[52,168446,168447,168450,168452],{"class":54,"line":55},[52,168448,168449],{"class":622},"name, age, score ",[52,168451,2099],{"class":160},[52,168453,168419],{"class":622},[52,168455,168456,168458],{"class":54,"line":69},[52,168457,33347],{"class":90},[52,168459,168460],{"class":622},"(name, age, score)\n",[274,168462,168463],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168465,168467],{"id":168466},"_72-位置参数","7.2 位置参数",[274,168469,168470],{},"位置参数按顺序传递。",[19,168472,168474],{"className":33310,"code":168473,"language":33312,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[26,168475,168476,168484,168512,168516,168520],{"__ignoreMap":28},[52,168477,168478,168480,168482],{"class":54,"line":55},[52,168479,34879],{"class":160},[52,168481,151740],{"class":58},[52,168483,151743],{"class":622},[52,168485,168486,168488,168490,168492,168494,168496,168498,168500,168502,168504,168506,168508,168510],{"class":54,"line":69},[52,168487,34231],{"class":90},[52,168489,3121],{"class":622},[52,168491,3170],{"class":160},[52,168493,151754],{"class":62},[52,168495,4008],{"class":90},[52,168497,82738],{"class":622},[52,168499,4058],{"class":90},[52,168501,151763],{"class":62},[52,168503,4008],{"class":90},[52,168505,73149],{"class":622},[52,168507,4058],{"class":90},[52,168509,151772],{"class":62},[52,168511,170],{"class":622},[52,168513,168514],{"class":54,"line":82},[52,168515,116],{"emptyLinePlaceholder":115},[52,168517,168518],{"class":54,"line":97},[52,168519,116],{"emptyLinePlaceholder":115},[52,168521,168522,168525,168527,168529,168531],{"class":54,"line":112},[52,168523,168524],{"class":622},"introduce(",[52,168526,152256],{"class":62},[52,168528,15391],{"class":622},[52,168530,3762],{"class":90},[52,168532,170],{"class":622},[274,168534,168535],{},"顺序错了就会得到错误含义：",[19,168537,168539],{"className":33310,"code":168538,"language":33312,"meta":28,"style":28},"introduce(18, \"小明\")\n",[26,168540,168541],{"__ignoreMap":28},[52,168542,168543,168545,168547,168549,168551],{"class":54,"line":55},[52,168544,168524],{"class":622},[52,168546,3762],{"class":90},[52,168548,15391],{"class":622},[52,168550,152256],{"class":62},[52,168552,170],{"class":622},[14,168554,168556],{"id":168555},"_73-关键字参数","7.3 关键字参数",[274,168558,168559],{},"关键字参数按参数名传递。",[19,168561,168563],{"className":33310,"code":168562,"language":33312,"meta":28,"style":28},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[26,168564,168565,168585],{"__ignoreMap":28},[52,168566,168567,168569,168571,168573,168575,168577,168579,168581,168583],{"class":54,"line":55},[52,168568,168524],{"class":622},[52,168570,82738],{"class":8172},[52,168572,2099],{"class":160},[52,168574,152256],{"class":62},[52,168576,15391],{"class":622},[52,168578,73149],{"class":8172},[52,168580,2099],{"class":160},[52,168582,3762],{"class":90},[52,168584,170],{"class":622},[52,168586,168587,168589,168591,168593,168595,168597,168599,168601,168603],{"class":54,"line":69},[52,168588,168524],{"class":622},[52,168590,73149],{"class":8172},[52,168592,2099],{"class":160},[52,168594,3762],{"class":90},[52,168596,15391],{"class":622},[52,168598,82738],{"class":8172},[52,168600,2099],{"class":160},[52,168602,152256],{"class":62},[52,168604,170],{"class":622},[274,168606,120848],{},[1070,168608,168609,168612],{},[1073,168610,168611],{},"顺序不容易错。",[1073,168613,168614],{},"调用时可读性更强。",[14,168616,168618],{"id":168617},"_74-默认参数","7.4 默认参数",[274,168620,168621],{},"默认参数给参数设置默认值。",[19,168623,168625],{"className":33310,"code":168624,"language":33312,"meta":28,"style":28},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[26,168626,168627,168643,168673,168677,168681,168691],{"__ignoreMap":28},[52,168628,168629,168631,168633,168636,168638,168641],{"class":54,"line":55},[52,168630,34879],{"class":160},[52,168632,124461],{"class":58},[52,168634,168635],{"class":622},"(host, port",[52,168637,2099],{"class":160},[52,168639,168640],{"class":90},"3306",[52,168642,33718],{"class":622},[52,168644,168645,168647,168649,168651,168654,168656,168658,168660,168662,168664,168667,168669,168671],{"class":54,"line":69},[52,168646,34231],{"class":90},[52,168648,3121],{"class":622},[52,168650,3170],{"class":160},[52,168652,168653],{"class":62},"\"连接",[52,168655,4008],{"class":90},[52,168657,30330],{"class":622},[52,168659,4058],{"class":90},[52,168661,3971],{"class":62},[52,168663,4008],{"class":90},[52,168665,168666],{"class":622},"port",[52,168668,4058],{"class":90},[52,168670,3364],{"class":62},[52,168672,170],{"class":622},[52,168674,168675],{"class":54,"line":82},[52,168676,116],{"emptyLinePlaceholder":115},[52,168678,168679],{"class":54,"line":97},[52,168680,116],{"emptyLinePlaceholder":115},[52,168682,168683,168686,168689],{"class":54,"line":112},[52,168684,168685],{"class":622},"connect(",[52,168687,168688],{"class":62},"\"localhost\"",[52,168690,170],{"class":622},[52,168692,168693,168695,168697,168699,168702],{"class":54,"line":119},[52,168694,168685],{"class":622},[52,168696,168688],{"class":62},[52,168698,15391],{"class":622},[52,168700,168701],{"class":90},"6379",[52,168703,170],{"class":622},[274,168705,168706],{},"注意：默认参数必须放在非默认参数后面。",[274,168708,168709],{},"错误：",[19,168711,168713],{"className":33310,"code":168712,"language":33312,"meta":28,"style":28},"def connect(port=3306, host):\n    pass\n",[26,168714,168715,168731],{"__ignoreMap":28},[52,168716,168717,168719,168721,168724,168726,168728],{"class":54,"line":55},[52,168718,34879],{"class":160},[52,168720,124461],{"class":58},[52,168722,168723],{"class":622},"(port",[52,168725,2099],{"class":160},[52,168727,168640],{"class":90},[52,168729,168730],{"class":622},", host):\n",[52,168732,168733],{"class":54,"line":69},[52,168734,151905],{"class":160},[274,168736,168737],{},"正确：",[19,168739,168741],{"className":33310,"code":168740,"language":33312,"meta":28,"style":28},"def connect(host, port=3306):\n    pass\n",[26,168742,168743,168757],{"__ignoreMap":28},[52,168744,168745,168747,168749,168751,168753,168755],{"class":54,"line":55},[52,168746,34879],{"class":160},[52,168748,124461],{"class":58},[52,168750,168635],{"class":622},[52,168752,2099],{"class":160},[52,168754,168640],{"class":90},[52,168756,33718],{"class":622},[52,168758,168759],{"class":54,"line":69},[52,168760,151905],{"class":160},[14,168762,168764],{"id":168763},"_75-默认参数的坑","7.5 默认参数的坑",[274,168766,168767],{},"不要使用可变对象作为默认参数。",[274,168769,159991],{},[19,168771,168773],{"className":33310,"code":168772,"language":33312,"meta":28,"style":28},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[26,168774,168775,168790,168795,168802,168806,168810,168821],{"__ignoreMap":28},[52,168776,168777,168779,168782,168785,168787],{"class":54,"line":55},[52,168778,34879],{"class":160},[52,168780,168781],{"class":58}," add_item",[52,168783,168784],{"class":622},"(item, items",[52,168786,2099],{"class":160},[52,168788,168789],{"class":622},"[]):\n",[52,168791,168792],{"class":54,"line":69},[52,168793,168794],{"class":622},"    items.append(item)\n",[52,168796,168797,168799],{"class":54,"line":82},[52,168798,7049],{"class":160},[52,168800,168801],{"class":622}," items\n",[52,168803,168804],{"class":54,"line":97},[52,168805,116],{"emptyLinePlaceholder":115},[52,168807,168808],{"class":54,"line":112},[52,168809,116],{"emptyLinePlaceholder":115},[52,168811,168812,168814,168817,168819],{"class":54,"line":119},[52,168813,33347],{"class":90},[52,168815,168816],{"class":622},"(add_item(",[52,168818,167693],{"class":62},[52,168820,33429],{"class":622},[52,168822,168823,168825,168827,168830],{"class":54,"line":130},[52,168824,33347],{"class":90},[52,168826,168816],{"class":622},[52,168828,168829],{"class":62},"\"b\"",[52,168831,33429],{"class":622},[274,168833,168834],{},"第二次调用会复用第一次的列表。",[274,168836,158256],{},[19,168838,168840],{"className":33310,"code":168839,"language":33312,"meta":28,"style":28},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[26,168841,168842,168856,168869,168878,168882],{"__ignoreMap":28},[52,168843,168844,168846,168848,168850,168852,168854],{"class":54,"line":55},[52,168845,34879],{"class":160},[52,168847,168781],{"class":58},[52,168849,168784],{"class":622},[52,168851,2099],{"class":160},[52,168853,98614],{"class":90},[52,168855,33718],{"class":622},[52,168857,168858,168860,168863,168865,168867],{"class":54,"line":69},[52,168859,6060],{"class":160},[52,168861,168862],{"class":622}," items ",[52,168864,41859],{"class":160},[52,168866,41865],{"class":90},[52,168868,6698],{"class":622},[52,168870,168871,168874,168876],{"class":54,"line":82},[52,168872,168873],{"class":622},"        items ",[52,168875,2099],{"class":160},[52,168877,54769],{"class":622},[52,168879,168880],{"class":54,"line":97},[52,168881,168794],{"class":622},[52,168883,168884,168886],{"class":54,"line":112},[52,168885,7049],{"class":160},[52,168887,168801],{"class":622},[14,168889,168891],{"id":168890},"_76-不定长参数","7.6 不定长参数",[30,168893,168895],{"id":168894},"_761-args","7.6.1 *args",[274,168897,168898,168901],{},[26,168899,168900],{},"*args"," 接收任意数量的位置参数，得到元组。",[19,168903,168905],{"className":33310,"code":168904,"language":33312,"meta":28,"style":28},"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",[26,168906,168907,168920,168928,168939,168948,168954,168958,168962,168981],{"__ignoreMap":28},[52,168908,168909,168911,168913,168915,168917],{"class":54,"line":55},[52,168910,34879],{"class":160},[52,168912,2018],{"class":58},[52,168914,3121],{"class":622},[52,168916,1095],{"class":160},[52,168918,168919],{"class":622},"args):\n",[52,168921,168922,168924,168926],{"class":54,"line":69},[52,168923,161675],{"class":622},[52,168925,2099],{"class":160},[52,168927,50265],{"class":90},[52,168929,168930,168932,168934,168936],{"class":54,"line":82},[52,168931,6160],{"class":160},[52,168933,158548],{"class":622},[52,168935,28988],{"class":160},[52,168937,168938],{"class":622}," args:\n",[52,168940,168941,168943,168945],{"class":54,"line":97},[52,168942,162350],{"class":622},[52,168944,12433],{"class":160},[52,168946,168947],{"class":622}," num\n",[52,168949,168950,168952],{"class":54,"line":112},[52,168951,7049],{"class":160},[52,168953,164655],{"class":622},[52,168955,168956],{"class":54,"line":119},[52,168957,116],{"emptyLinePlaceholder":115},[52,168959,168960],{"class":54,"line":130},[52,168961,116],{"emptyLinePlaceholder":115},[52,168963,168964,168966,168969,168971,168973,168975,168977,168979],{"class":54,"line":136},[52,168965,33347],{"class":90},[52,168967,168968],{"class":622},"(add(",[52,168970,3332],{"class":90},[52,168972,15391],{"class":622},[52,168974,3194],{"class":90},[52,168976,15391],{"class":622},[52,168978,3188],{"class":90},[52,168980,33429],{"class":622},[52,168982,168983,168985,168987,168989,168991,168993,168995,168997,168999,169001,169003,169005],{"class":54,"line":141},[52,168984,33347],{"class":90},[52,168986,168968],{"class":622},[52,168988,3332],{"class":90},[52,168990,15391],{"class":622},[52,168992,3194],{"class":90},[52,168994,15391],{"class":622},[52,168996,3188],{"class":90},[52,168998,15391],{"class":622},[52,169000,3406],{"class":90},[52,169002,15391],{"class":622},[52,169004,3432],{"class":90},[52,169006,33429],{"class":622},[30,169008,169010],{"id":169009},"_762-kwargs","7.6.2 **kwargs",[274,169012,169013,169016],{},[26,169014,169015],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[19,169018,169020],{"className":33310,"code":169019,"language":33312,"meta":28,"style":28},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[26,169021,169022,169035,169046,169052,169056,169060],{"__ignoreMap":28},[52,169023,169024,169026,169028,169030,169032],{"class":54,"line":55},[52,169025,34879],{"class":160},[52,169027,164313],{"class":58},[52,169029,3121],{"class":622},[52,169031,13617],{"class":160},[52,169033,169034],{"class":622},"kwargs):\n",[52,169036,169037,169039,169041,169043],{"class":54,"line":69},[52,169038,6160],{"class":160},[52,169040,167153],{"class":622},[52,169042,28988],{"class":160},[52,169044,169045],{"class":622}," kwargs.items():\n",[52,169047,169048,169050],{"class":54,"line":82},[52,169049,35383],{"class":90},[52,169051,167165],{"class":622},[52,169053,169054],{"class":54,"line":97},[52,169055,116],{"emptyLinePlaceholder":115},[52,169057,169058],{"class":54,"line":112},[52,169059,116],{"emptyLinePlaceholder":115},[52,169061,169062,169064,169066,169068,169070,169072,169074,169076,169078,169080,169082,169084,169086],{"class":54,"line":119},[52,169063,164378],{"class":622},[52,169065,82738],{"class":8172},[52,169067,2099],{"class":160},[52,169069,152256],{"class":62},[52,169071,15391],{"class":622},[52,169073,73149],{"class":8172},[52,169075,2099],{"class":160},[52,169077,3762],{"class":90},[52,169079,15391],{"class":622},[52,169081,73200],{"class":8172},[52,169083,2099],{"class":160},[52,169085,72198],{"class":62},[52,169087,170],{"class":622},[14,169089,169091],{"id":169090},"_77-参数解包","7.7 参数解包",[274,169093,169094],{},"列表或元组解包为位置参数：",[19,169096,169098],{"className":33310,"code":169097,"language":33312,"meta":28,"style":28},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[26,169099,169100,169109,169124,169128,169132,169152],{"__ignoreMap":28},[52,169101,169102,169104,169106],{"class":54,"line":55},[52,169103,34879],{"class":160},[52,169105,2018],{"class":58},[52,169107,169108],{"class":622},"(a, b, c):\n",[52,169110,169111,169113,169115,169117,169119,169121],{"class":54,"line":69},[52,169112,7049],{"class":160},[52,169114,13825],{"class":622},[52,169116,3593],{"class":160},[52,169118,13838],{"class":622},[52,169120,3593],{"class":160},[52,169122,169123],{"class":622}," c\n",[52,169125,169126],{"class":54,"line":82},[52,169127,116],{"emptyLinePlaceholder":115},[52,169129,169130],{"class":54,"line":97},[52,169131,116],{"emptyLinePlaceholder":115},[52,169133,169134,169136,169138,169140,169142,169144,169146,169148,169150],{"class":54,"line":112},[52,169135,166468],{"class":622},[52,169137,2099],{"class":160},[52,169139,55157],{"class":622},[52,169141,3332],{"class":90},[52,169143,15391],{"class":622},[52,169145,3194],{"class":90},[52,169147,15391],{"class":622},[52,169149,3188],{"class":90},[52,169151,36178],{"class":622},[52,169153,169154,169156,169158,169160],{"class":54,"line":119},[52,169155,33347],{"class":90},[52,169157,168968],{"class":622},[52,169159,1095],{"class":160},[52,169161,169162],{"class":622},"nums))\n",[274,169164,169165],{},"字典解包为关键字参数：",[19,169167,169169],{"className":33310,"code":169168,"language":33312,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[26,169170,169171,169179,169205,169209,169213,169237],{"__ignoreMap":28},[52,169172,169173,169175,169177],{"class":54,"line":55},[52,169174,34879],{"class":160},[52,169176,151740],{"class":58},[52,169178,151743],{"class":622},[52,169180,169181,169183,169185,169187,169189,169191,169193,169195,169197,169199,169201,169203],{"class":54,"line":69},[52,169182,34231],{"class":90},[52,169184,3121],{"class":622},[52,169186,3170],{"class":160},[52,169188,3364],{"class":62},[52,169190,4008],{"class":90},[52,169192,82738],{"class":622},[52,169194,4058],{"class":90},[52,169196,7407],{"class":90},[52,169198,73149],{"class":622},[52,169200,4058],{"class":90},[52,169202,3364],{"class":62},[52,169204,170],{"class":622},[52,169206,169207],{"class":54,"line":82},[52,169208,116],{"emptyLinePlaceholder":115},[52,169210,169211],{"class":54,"line":97},[52,169212,116],{"emptyLinePlaceholder":115},[52,169214,169215,169217,169219,169221,169223,169225,169227,169229,169231,169233,169235],{"class":54,"line":112},[52,169216,119233],{"class":622},[52,169218,2099],{"class":160},[52,169220,7407],{"class":622},[52,169222,65609],{"class":62},[52,169224,54368],{"class":622},[52,169226,152256],{"class":62},[52,169228,15391],{"class":622},[52,169230,72053],{"class":62},[52,169232,54368],{"class":622},[52,169234,3762],{"class":90},[52,169236,4543],{"class":622},[52,169238,169239,169241,169243],{"class":54,"line":119},[52,169240,168524],{"class":622},[52,169242,13617],{"class":160},[52,169244,169245],{"class":622},"info)\n",[14,169247,169249],{"id":169248},"_78-匿名函数lambda","7.8 匿名函数lambda",[274,169251,169252,169255],{},[26,169253,169254],{},"lambda"," 用于定义简单匿名函数。",[19,169257,169259],{"className":33310,"code":169258,"language":33312,"meta":28,"style":28},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[26,169260,169261,169278],{"__ignoreMap":28},[52,169262,169263,169266,169268,169271,169274,169276],{"class":54,"line":55},[52,169264,169265],{"class":622},"add ",[52,169267,2099],{"class":160},[52,169269,169270],{"class":160}," lambda",[52,169272,169273],{"class":622}," a, b: a ",[52,169275,3593],{"class":160},[52,169277,153472],{"class":622},[52,169279,169280,169282,169284,169286,169288,169290],{"class":54,"line":69},[52,169281,33347],{"class":90},[52,169283,168968],{"class":622},[52,169285,3332],{"class":90},[52,169287,15391],{"class":622},[52,169289,3194],{"class":90},[52,169291,33429],{"class":622},[274,169293,169294],{},"常和排序、过滤等函数一起使用。",[274,169296,169297],{},"按分数排序：",[19,169299,169301],{"className":33310,"code":169300,"language":33312,"meta":28,"style":28},"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",[26,169302,169303,169311,169331,169351,169371,169375,169379,169402],{"__ignoreMap":28},[52,169304,169305,169307,169309],{"class":54,"line":55},[52,169306,162084],{"class":622},[52,169308,2099],{"class":160},[52,169310,58377],{"class":622},[52,169312,169313,169315,169317,169319,169321,169323,169325,169327,169329],{"class":54,"line":69},[52,169314,150753],{"class":622},[52,169316,65609],{"class":62},[52,169318,54368],{"class":622},[52,169320,152256],{"class":62},[52,169322,15391],{"class":622},[52,169324,153840],{"class":62},[52,169326,54368],{"class":622},[52,169328,4100],{"class":90},[52,169330,7889],{"class":622},[52,169332,169333,169335,169337,169339,169341,169343,169345,169347,169349],{"class":54,"line":82},[52,169334,150753],{"class":622},[52,169336,65609],{"class":62},[52,169338,54368],{"class":622},[52,169340,153304],{"class":62},[52,169342,15391],{"class":622},[52,169344,153840],{"class":62},[52,169346,54368],{"class":622},[52,169348,3923],{"class":90},[52,169350,7889],{"class":622},[52,169352,169353,169355,169357,169359,169361,169363,169365,169367,169369],{"class":54,"line":97},[52,169354,150753],{"class":622},[52,169356,65609],{"class":62},[52,169358,54368],{"class":622},[52,169360,162099],{"class":62},[52,169362,15391],{"class":622},[52,169364,153840],{"class":62},[52,169366,54368],{"class":622},[52,169368,3519],{"class":90},[52,169370,7889],{"class":622},[52,169372,169373],{"class":54,"line":112},[52,169374,36178],{"class":622},[52,169376,169377],{"class":54,"line":119},[52,169378,116],{"emptyLinePlaceholder":115},[52,169380,169381,169384,169386,169388,169390,169392,169394,169396,169398,169400],{"class":54,"line":130},[52,169382,169383],{"class":622},"students.sort(",[52,169385,156314],{"class":8172},[52,169387,156317],{"class":160},[52,169389,156320],{"class":622},[52,169391,153840],{"class":62},[52,169393,115122],{"class":622},[52,169395,165896],{"class":8172},[52,169397,2099],{"class":160},[52,169399,34408],{"class":90},[52,169401,170],{"class":622},[52,169403,169404,169406],{"class":54,"line":136},[52,169405,33347],{"class":90},[52,169407,167363],{"class":622},[274,169409,169410,169411,169413],{},"如果逻辑复杂，不要硬写 ",[26,169412,169254],{},"，定义普通函数更清晰。",[14,169415,169417],{"id":169416},"_79-函数作为参数","7.9 函数作为参数",[274,169419,169420],{},"函数可以作为参数传给另一个函数。",[19,169422,169424],{"className":33310,"code":169423,"language":33312,"meta":28,"style":28},"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",[26,169425,169426,169434,169444,169448,169452,169462,169469,169473,169477],{"__ignoreMap":28},[52,169427,169428,169430,169432],{"class":54,"line":55},[52,169429,34879],{"class":160},[52,169431,2018],{"class":58},[52,169433,153461],{"class":622},[52,169435,169436,169438,169440,169442],{"class":54,"line":69},[52,169437,7049],{"class":160},[52,169439,13825],{"class":622},[52,169441,3593],{"class":160},[52,169443,153472],{"class":622},[52,169445,169446],{"class":54,"line":82},[52,169447,116],{"emptyLinePlaceholder":115},[52,169449,169450],{"class":54,"line":97},[52,169451,116],{"emptyLinePlaceholder":115},[52,169453,169454,169456,169459],{"class":54,"line":112},[52,169455,34879],{"class":160},[52,169457,169458],{"class":58}," calculate",[52,169460,169461],{"class":622},"(a, b, func):\n",[52,169463,169464,169466],{"class":54,"line":119},[52,169465,7049],{"class":160},[52,169467,169468],{"class":622}," func(a, b)\n",[52,169470,169471],{"class":54,"line":130},[52,169472,116],{"emptyLinePlaceholder":115},[52,169474,169475],{"class":54,"line":136},[52,169476,116],{"emptyLinePlaceholder":115},[52,169478,169479,169481,169484,169486,169488,169490],{"class":54,"line":141},[52,169480,33347],{"class":90},[52,169482,169483],{"class":622},"(calculate(",[52,169485,3559],{"class":90},[52,169487,15391],{"class":622},[52,169489,3812],{"class":90},[52,169491,169492],{"class":622},", add))\n",[274,169494,169495],{},"这种思想在排序、回调、框架中经常出现。",[14,169497,169499],{"id":169498},"_710-mapfiltersorted","7.10 map、filter、sorted",[30,169501,169503],{"id":169502},"_7101-map","7.10.1 map",[274,169505,169506,169508],{},[26,169507,76972],{}," 对每个元素执行函数。",[19,169510,169512],{"className":33310,"code":169511,"language":33312,"meta":28,"style":28},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[26,169513,169514,169538,169561],{"__ignoreMap":28},[52,169515,169516,169518,169520,169522,169524,169526,169528,169530,169532,169534,169536],{"class":54,"line":55},[52,169517,166468],{"class":622},[52,169519,2099],{"class":160},[52,169521,55157],{"class":622},[52,169523,3332],{"class":90},[52,169525,15391],{"class":622},[52,169527,3194],{"class":90},[52,169529,15391],{"class":622},[52,169531,3188],{"class":90},[52,169533,15391],{"class":622},[52,169535,3406],{"class":90},[52,169537,36178],{"class":622},[52,169539,169540,169542,169544,169547,169549,169551,169554,169556,169558],{"class":54,"line":69},[52,169541,163674],{"class":622},[52,169543,2099],{"class":160},[52,169545,169546],{"class":90}," map",[52,169548,3121],{"class":622},[52,169550,169254],{"class":160},[52,169552,169553],{"class":622}," x: x ",[52,169555,1095],{"class":160},[52,169557,17711],{"class":90},[52,169559,169560],{"class":622},", nums)\n",[52,169562,169563,169565,169567,169569],{"class":54,"line":82},[52,169564,33347],{"class":90},[52,169566,3121],{"class":622},[52,169568,156438],{"class":90},[52,169570,168436],{"class":622},[30,169572,169574],{"id":169573},"_7102-filter","7.10.2 filter",[274,169576,169577,169579],{},[26,169578,82979],{}," 保留满足条件的元素。",[19,169581,169583],{"className":33310,"code":169582,"language":33312,"meta":28,"style":28},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[26,169584,169585,169613,169638],{"__ignoreMap":28},[52,169586,169587,169589,169591,169593,169595,169597,169599,169601,169603,169605,169607,169609,169611],{"class":54,"line":55},[52,169588,166468],{"class":622},[52,169590,2099],{"class":160},[52,169592,55157],{"class":622},[52,169594,3332],{"class":90},[52,169596,15391],{"class":622},[52,169598,3194],{"class":90},[52,169600,15391],{"class":622},[52,169602,3188],{"class":90},[52,169604,15391],{"class":622},[52,169606,3406],{"class":90},[52,169608,15391],{"class":622},[52,169610,3432],{"class":90},[52,169612,36178],{"class":622},[52,169614,169615,169617,169619,169622,169624,169626,169628,169630,169632,169634,169636],{"class":54,"line":69},[52,169616,163674],{"class":622},[52,169618,2099],{"class":160},[52,169620,169621],{"class":90}," filter",[52,169623,3121],{"class":622},[52,169625,169254],{"class":160},[52,169627,169553],{"class":622},[52,169629,3441],{"class":160},[52,169631,17711],{"class":90},[52,169633,104479],{"class":160},[52,169635,7052],{"class":90},[52,169637,169560],{"class":622},[52,169639,169640,169642,169644,169646],{"class":54,"line":82},[52,169641,33347],{"class":90},[52,169643,3121],{"class":622},[52,169645,156438],{"class":90},[52,169647,168436],{"class":622},[30,169649,169651],{"id":169650},"_7103-sorted","7.10.3 sorted",[274,169653,169654,169656],{},[26,169655,167604],{}," 返回排序后的新列表。",[19,169658,169660],{"className":33310,"code":169659,"language":33312,"meta":28,"style":28},"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",[26,169661,169662,169670,169690,169710,169730,169734,169738,169767],{"__ignoreMap":28},[52,169663,169664,169666,169668],{"class":54,"line":55},[52,169665,162084],{"class":622},[52,169667,2099],{"class":160},[52,169669,58377],{"class":622},[52,169671,169672,169674,169676,169678,169680,169682,169684,169686,169688],{"class":54,"line":69},[52,169673,150753],{"class":622},[52,169675,65609],{"class":62},[52,169677,54368],{"class":622},[52,169679,152256],{"class":62},[52,169681,15391],{"class":622},[52,169683,153840],{"class":62},[52,169685,54368],{"class":622},[52,169687,4100],{"class":90},[52,169689,7889],{"class":622},[52,169691,169692,169694,169696,169698,169700,169702,169704,169706,169708],{"class":54,"line":82},[52,169693,150753],{"class":622},[52,169695,65609],{"class":62},[52,169697,54368],{"class":622},[52,169699,153304],{"class":62},[52,169701,15391],{"class":622},[52,169703,153840],{"class":62},[52,169705,54368],{"class":622},[52,169707,3923],{"class":90},[52,169709,7889],{"class":622},[52,169711,169712,169714,169716,169718,169720,169722,169724,169726,169728],{"class":54,"line":97},[52,169713,150753],{"class":622},[52,169715,65609],{"class":62},[52,169717,54368],{"class":622},[52,169719,162099],{"class":62},[52,169721,15391],{"class":622},[52,169723,153840],{"class":62},[52,169725,54368],{"class":622},[52,169727,3519],{"class":90},[52,169729,7889],{"class":622},[52,169731,169732],{"class":54,"line":112},[52,169733,36178],{"class":622},[52,169735,169736],{"class":54,"line":119},[52,169737,116],{"emptyLinePlaceholder":115},[52,169739,169740,169742,169744,169746,169749,169751,169753,169755,169757,169759,169761,169763,169765],{"class":54,"line":130},[52,169741,163674],{"class":622},[52,169743,2099],{"class":160},[52,169745,165972],{"class":90},[52,169747,169748],{"class":622},"(students, ",[52,169750,156314],{"class":8172},[52,169752,156317],{"class":160},[52,169754,156320],{"class":622},[52,169756,153840],{"class":62},[52,169758,115122],{"class":622},[52,169760,165896],{"class":8172},[52,169762,2099],{"class":160},[52,169764,34408],{"class":90},[52,169766,170],{"class":622},[52,169768,169769,169771],{"class":54,"line":136},[52,169770,33347],{"class":90},[52,169772,79513],{"class":622},[14,169774,169776],{"id":169775},"_711-闭包入门","7.11 闭包入门",[274,169778,169779],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[19,169781,169783],{"className":33310,"code":169782,"language":33312,"meta":28,"style":28},"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",[26,169784,169785,169795,169805,169816,169820,169827,169831,169835,169849],{"__ignoreMap":28},[52,169786,169787,169789,169792],{"class":54,"line":55},[52,169788,34879],{"class":160},[52,169790,169791],{"class":58}," outer",[52,169793,169794],{"class":622},"(base):\n",[52,169796,169797,169799,169802],{"class":54,"line":69},[52,169798,33733],{"class":160},[52,169800,169801],{"class":58}," inner",[52,169803,169804],{"class":622},"(num):\n",[52,169806,169807,169809,169812,169814],{"class":54,"line":82},[52,169808,17708],{"class":160},[52,169810,169811],{"class":622}," base ",[52,169813,3593],{"class":160},[52,169815,168947],{"class":622},[52,169817,169818],{"class":54,"line":97},[52,169819,116],{"emptyLinePlaceholder":115},[52,169821,169822,169824],{"class":54,"line":112},[52,169823,7049],{"class":160},[52,169825,169826],{"class":622}," inner\n",[52,169828,169829],{"class":54,"line":119},[52,169830,116],{"emptyLinePlaceholder":115},[52,169832,169833],{"class":54,"line":130},[52,169834,116],{"emptyLinePlaceholder":115},[52,169836,169837,169840,169842,169845,169847],{"class":54,"line":136},[52,169838,169839],{"class":622},"add_10 ",[52,169841,2099],{"class":160},[52,169843,169844],{"class":622}," outer(",[52,169846,3559],{"class":90},[52,169848,170],{"class":622},[52,169850,169851,169853,169856,169858],{"class":54,"line":141},[52,169852,33347],{"class":90},[52,169854,169855],{"class":622},"(add_10(",[52,169857,3432],{"class":90},[52,169859,33429],{"class":622},[274,169861,169862],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169864,169866],{"id":169865},"_712-装饰器入门","7.12 装饰器入门",[274,169868,169869],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[19,169871,169873],{"className":33310,"code":169872,"language":33312,"meta":28,"style":28},"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",[26,169874,169875,169884,169893,169904,169909,169920,169924,169931,169935,169939,169944,169952,169962,169966,169970],{"__ignoreMap":28},[52,169876,169877,169879,169881],{"class":54,"line":55},[52,169878,34879],{"class":160},[52,169880,90119],{"class":58},[52,169882,169883],{"class":622},"(func):\n",[52,169885,169886,169888,169891],{"class":54,"line":69},[52,169887,33733],{"class":160},[52,169889,169890],{"class":58}," wrapper",[52,169892,34885],{"class":622},[52,169894,169895,169897,169899,169902],{"class":54,"line":82},[52,169896,35383],{"class":90},[52,169898,3121],{"class":622},[52,169900,169901],{"class":62},"\"函数开始执行\"",[52,169903,170],{"class":622},[52,169905,169906],{"class":54,"line":97},[52,169907,169908],{"class":622},"        func()\n",[52,169910,169911,169913,169915,169918],{"class":54,"line":112},[52,169912,35383],{"class":90},[52,169914,3121],{"class":622},[52,169916,169917],{"class":62},"\"函数执行结束\"",[52,169919,170],{"class":622},[52,169921,169922],{"class":54,"line":119},[52,169923,116],{"emptyLinePlaceholder":115},[52,169925,169926,169928],{"class":54,"line":130},[52,169927,7049],{"class":160},[52,169929,169930],{"class":622}," wrapper\n",[52,169932,169933],{"class":54,"line":136},[52,169934,116],{"emptyLinePlaceholder":115},[52,169936,169937],{"class":54,"line":141},[52,169938,116],{"emptyLinePlaceholder":115},[52,169940,169941],{"class":54,"line":146},[52,169942,169943],{"class":58},"@log\n",[52,169945,169946,169948,169950],{"class":54,"line":152},[52,169947,34879],{"class":160},[52,169949,163364],{"class":58},[52,169951,34885],{"class":622},[52,169953,169954,169956,169958,169960],{"class":54,"line":157},[52,169955,34231],{"class":90},[52,169957,3121],{"class":622},[52,169959,8800],{"class":62},[52,169961,170],{"class":622},[52,169963,169964],{"class":54,"line":173},[52,169965,116],{"emptyLinePlaceholder":115},[52,169967,169968],{"class":54,"line":178},[52,169969,116],{"emptyLinePlaceholder":115},[52,169971,169972],{"class":54,"line":184},[52,169973,163399],{"class":622},[274,169975,160642],{},[19,169977,169979],{"className":33310,"code":169978,"language":33312,"meta":28,"style":28},"say_hello = log(say_hello)\n",[26,169980,169981],{"__ignoreMap":28},[52,169982,169983,169986,169988],{"class":54,"line":55},[52,169984,169985],{"class":622},"say_hello ",[52,169987,2099],{"class":160},[52,169989,169990],{"class":622}," log(say_hello)\n",[274,169992,169993],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169995,169997],{"id":169996},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[19,169999,170001],{"className":33310,"code":170000,"language":33312,"meta":28,"style":28},"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",[26,170002,170003,170011,170028,170038,170057,170067,170074,170078,170084,170088,170092,170096,170104,170114,170118,170122],{"__ignoreMap":28},[52,170004,170005,170007,170009],{"class":54,"line":55},[52,170006,34879],{"class":160},[52,170008,90119],{"class":58},[52,170010,169883],{"class":622},[52,170012,170013,170015,170017,170019,170021,170024,170026],{"class":54,"line":69},[52,170014,33733],{"class":160},[52,170016,169890],{"class":58},[52,170018,3121],{"class":622},[52,170020,1095],{"class":160},[52,170022,170023],{"class":622},"args, ",[52,170025,13617],{"class":160},[52,170027,169034],{"class":622},[52,170029,170030,170032,170034,170036],{"class":54,"line":82},[52,170031,35383],{"class":90},[52,170033,3121],{"class":622},[52,170035,169901],{"class":62},[52,170037,170],{"class":622},[52,170039,170040,170043,170045,170048,170050,170052,170054],{"class":54,"line":97},[52,170041,170042],{"class":622},"        result ",[52,170044,2099],{"class":160},[52,170046,170047],{"class":622}," func(",[52,170049,1095],{"class":160},[52,170051,170023],{"class":622},[52,170053,13617],{"class":160},[52,170055,170056],{"class":622},"kwargs)\n",[52,170058,170059,170061,170063,170065],{"class":54,"line":112},[52,170060,35383],{"class":90},[52,170062,3121],{"class":622},[52,170064,169917],{"class":62},[52,170066,170],{"class":622},[52,170068,170069,170071],{"class":54,"line":119},[52,170070,17708],{"class":160},[52,170072,170073],{"class":622}," result\n",[52,170075,170076],{"class":54,"line":130},[52,170077,116],{"emptyLinePlaceholder":115},[52,170079,170080,170082],{"class":54,"line":136},[52,170081,7049],{"class":160},[52,170083,169930],{"class":622},[52,170085,170086],{"class":54,"line":141},[52,170087,116],{"emptyLinePlaceholder":115},[52,170089,170090],{"class":54,"line":146},[52,170091,116],{"emptyLinePlaceholder":115},[52,170093,170094],{"class":54,"line":152},[52,170095,169943],{"class":58},[52,170097,170098,170100,170102],{"class":54,"line":157},[52,170099,34879],{"class":160},[52,170101,2018],{"class":58},[52,170103,153461],{"class":622},[52,170105,170106,170108,170110,170112],{"class":54,"line":173},[52,170107,7049],{"class":160},[52,170109,13825],{"class":622},[52,170111,3593],{"class":160},[52,170113,153472],{"class":622},[52,170115,170116],{"class":54,"line":178},[52,170117,116],{"emptyLinePlaceholder":115},[52,170119,170120],{"class":54,"line":184},[52,170121,116],{"emptyLinePlaceholder":115},[52,170123,170124,170126,170128,170130,170132,170134],{"class":54,"line":189},[52,170125,33347],{"class":90},[52,170127,168968],{"class":622},[52,170129,3559],{"class":90},[52,170131,15391],{"class":622},[52,170133,3812],{"class":90},[52,170135,33429],{"class":622},[274,170137,170138,170139,103940,170141,170143],{},"这个写法使用 ",[26,170140,168900],{},[26,170142,169015],{}," 接收原函数的所有参数。",[14,170145,170147],{"id":170146},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[274,170149,125660],{},[1070,170151,170152,170155,170158],{},[1073,170153,170154],{},"给定一组学生数据。",[1073,170156,170157],{},"封装函数，根据传入规则筛选学生。",[1073,170159,170160],{},"筛选及格、优秀、未成年学生。",[274,170162,12991],{},[19,170164,170166],{"className":33310,"code":170165,"language":33312,"meta":28,"style":28},"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",[26,170167,170168,170176,170204,170232,170260,170264,170268,170272,170282,170290,170300,170307,170312,170318,170322,170326,170350,170373,170396,170400,170407,170414],{"__ignoreMap":28},[52,170169,170170,170172,170174],{"class":54,"line":55},[52,170171,162084],{"class":622},[52,170173,2099],{"class":160},[52,170175,58377],{"class":622},[52,170177,170178,170180,170182,170184,170186,170188,170190,170192,170194,170196,170198,170200,170202],{"class":54,"line":69},[52,170179,150753],{"class":622},[52,170181,65609],{"class":62},[52,170183,54368],{"class":622},[52,170185,152256],{"class":62},[52,170187,15391],{"class":622},[52,170189,72053],{"class":62},[52,170191,54368],{"class":622},[52,170193,3762],{"class":90},[52,170195,15391],{"class":622},[52,170197,153840],{"class":62},[52,170199,54368],{"class":622},[52,170201,4100],{"class":90},[52,170203,7889],{"class":622},[52,170205,170206,170208,170210,170212,170214,170216,170218,170220,170222,170224,170226,170228,170230],{"class":54,"line":82},[52,170207,150753],{"class":622},[52,170209,65609],{"class":62},[52,170211,54368],{"class":622},[52,170213,153304],{"class":62},[52,170215,15391],{"class":622},[52,170217,72053],{"class":62},[52,170219,54368],{"class":622},[52,170221,3737],{"class":90},[52,170223,15391],{"class":622},[52,170225,153840],{"class":62},[52,170227,54368],{"class":622},[52,170229,3923],{"class":90},[52,170231,7889],{"class":622},[52,170233,170234,170236,170238,170240,170242,170244,170246,170248,170250,170252,170254,170256,170258],{"class":54,"line":97},[52,170235,150753],{"class":622},[52,170237,65609],{"class":62},[52,170239,54368],{"class":622},[52,170241,162099],{"class":62},[52,170243,15391],{"class":622},[52,170245,72053],{"class":62},[52,170247,54368],{"class":622},[52,170249,3787],{"class":90},[52,170251,15391],{"class":622},[52,170253,153840],{"class":62},[52,170255,54368],{"class":622},[52,170257,3994],{"class":90},[52,170259,7889],{"class":622},[52,170261,170262],{"class":54,"line":112},[52,170263,36178],{"class":622},[52,170265,170266],{"class":54,"line":119},[52,170267,116],{"emptyLinePlaceholder":115},[52,170269,170270],{"class":54,"line":130},[52,170271,116],{"emptyLinePlaceholder":115},[52,170273,170274,170276,170279],{"class":54,"line":136},[52,170275,34879],{"class":160},[52,170277,170278],{"class":58}," filter_students",[52,170280,170281],{"class":622},"(students, condition):\n",[52,170283,170284,170286,170288],{"class":54,"line":141},[52,170285,163591],{"class":622},[52,170287,2099],{"class":160},[52,170289,54769],{"class":622},[52,170291,170292,170294,170296,170298],{"class":54,"line":146},[52,170293,6160],{"class":160},[52,170295,154505],{"class":622},[52,170297,28988],{"class":160},[52,170299,154510],{"class":622},[52,170301,170302,170304],{"class":54,"line":152},[52,170303,5458],{"class":160},[52,170305,170306],{"class":622}," condition(student):\n",[52,170308,170309],{"class":54,"line":157},[52,170310,170311],{"class":622},"            result.append(student)\n",[52,170313,170314,170316],{"class":54,"line":173},[52,170315,7049],{"class":160},[52,170317,170073],{"class":622},[52,170319,170320],{"class":54,"line":178},[52,170321,116],{"emptyLinePlaceholder":115},[52,170323,170324],{"class":54,"line":184},[52,170325,116],{"emptyLinePlaceholder":115},[52,170327,170328,170330,170332,170335,170337,170340,170342,170344,170346,170348],{"class":54,"line":189},[52,170329,168069],{"class":622},[52,170331,2099],{"class":160},[52,170333,170334],{"class":622}," filter_students(students, ",[52,170336,169254],{"class":160},[52,170338,170339],{"class":622}," s: s[",[52,170341,153840],{"class":62},[52,170343,7402],{"class":622},[52,170345,4677],{"class":160},[52,170347,160205],{"class":90},[52,170349,170],{"class":622},[52,170351,170352,170355,170357,170359,170361,170363,170365,170367,170369,170371],{"class":54,"line":201},[52,170353,170354],{"class":622},"excellent ",[52,170356,2099],{"class":160},[52,170358,170334],{"class":622},[52,170360,169254],{"class":160},[52,170362,170339],{"class":622},[52,170364,153840],{"class":62},[52,170366,7402],{"class":622},[52,170368,4677],{"class":160},[52,170370,160156],{"class":90},[52,170372,170],{"class":622},[52,170374,170375,170378,170380,170382,170384,170386,170388,170390,170392,170394],{"class":54,"line":206},[52,170376,170377],{"class":622},"under_age ",[52,170379,2099],{"class":160},[52,170381,170334],{"class":622},[52,170383,169254],{"class":160},[52,170385,170339],{"class":622},[52,170387,72053],{"class":62},[52,170389,7402],{"class":622},[52,170391,4022],{"class":160},[52,170393,158653],{"class":90},[52,170395,170],{"class":622},[52,170397,170398],{"class":54,"line":224},[52,170399,116],{"emptyLinePlaceholder":115},[52,170401,170402,170404],{"class":54,"line":229},[52,170403,33347],{"class":90},[52,170405,170406],{"class":622},"(passed)\n",[52,170408,170409,170411],{"class":54,"line":241},[52,170410,33347],{"class":90},[52,170412,170413],{"class":622},"(excellent)\n",[52,170415,170416,170418],{"class":54,"line":246},[52,170417,33347],{"class":90},[52,170419,170420],{"class":622},"(under_age)\n",[14,170422,170424],{"id":170423},"_715-易错点","7.15 易错点",[1070,170426,170427,170430,170438,170443,170454],{},[1073,170428,170429],{},"默认参数不要写可变对象。",[1073,170431,170432,170434,170435,170437],{},[26,170433,168900],{}," 是元组，",[26,170436,169015],{}," 是字典。",[1073,170439,170440,170442],{},[26,170441,169254],{}," 只适合简单表达式。",[1073,170444,170445,103940,170447,170449,170450,170453],{},[26,170446,76972],{},[26,170448,82979],{}," 的结果是迭代器，常用 ",[26,170451,170452],{},"list()"," 转换查看。",[1073,170455,170456],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,170458,170460],{"id":170459},"_716-本章练习","7.16 本章练习",[1070,170462,170463,170470,170476,170481,170486],{},[1073,170464,170465,170466,170469],{},"写函数 ",[26,170467,170468],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[1073,170471,170465,170472,170475],{},[26,170473,170474],{},"print_user(**kwargs)","，输出用户所有字段。",[1073,170477,107286,170478,170480],{},[26,170479,169254],{}," 对学生列表按年龄排序。",[1073,170482,107286,170483,170485],{},[26,170484,82979],{}," 找出成绩不及格的学生。",[1073,170487,170488],{},"写一个装饰器，统计函数执行前后的提示信息。",[3015,170490,170491],{},"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":28,"searchDepth":69,"depth":69,"links":170493},[170494,170495,170496,170497,170498,170499,170503,170504,170505,170506,170511,170512,170513,170514,170515,170516],{"id":168352,"depth":69,"text":168353},{"id":168466,"depth":69,"text":168467},{"id":168555,"depth":69,"text":168556},{"id":168617,"depth":69,"text":168618},{"id":168763,"depth":69,"text":168764},{"id":168890,"depth":69,"text":168891,"children":170500},[170501,170502],{"id":168894,"depth":82,"text":168895},{"id":169009,"depth":82,"text":169010},{"id":169090,"depth":69,"text":169091},{"id":169248,"depth":69,"text":169249},{"id":169416,"depth":69,"text":169417},{"id":169498,"depth":69,"text":169499,"children":170507},[170508,170509,170510],{"id":169502,"depth":82,"text":169503},{"id":169573,"depth":82,"text":169574},{"id":169650,"depth":82,"text":169651},{"id":169775,"depth":69,"text":169776},{"id":169865,"depth":69,"text":169866},{"id":169996,"depth":69,"text":169997},{"id":170146,"depth":69,"text":170147},{"id":170423,"depth":69,"text":170424},{"id":170459,"depth":69,"text":170460},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":168344,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":170523,"title":170524,"body":170525,"description":3046,"extension":3047,"meta":173044,"navigation":115,"path":173045,"seo":173046,"stem":173047,"__hash__":173048},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170526,"toc":173019},[170527,170530,170534,170537,170540,170571,170575,170579,170582,170609,170613,170616,170667,170670,170685,170688,170723,170727,170729,170753,170756,170816,170820,170824,170827,170884,170887,170907,170911,170914,170977,170981,170984,171040,171047,171071,171075,171078,171141,171145,171150,171201,171204,171208,171213,171280,171283,171365,171369,171374,171425,171428,171432,171435,171438,171446,171449,171495,171498,171544,171548,171554,171598,171601,171647,171650,171690,171693,171754,171758,171761,171851,171854,171996,171999,172066,172070,172073,172076,172217,172220,172298,172301,172477,172481,172483,172494,172496,172695,172699,172943,172947,172981,172985,173016],[10,170528,170524],{"id":170529},"_8-文件操作",[14,170531,170533],{"id":170532},"_81-文件操作的意义","8.1 文件操作的意义",[274,170535,170536],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[274,170538,170539],{},"常见文件类型：",[1070,170541,170542,170548,170554,170560,170566],{},[1073,170543,170544,170547],{},[26,170545,170546],{},".txt","：普通文本。",[1073,170549,170550,170553],{},[26,170551,170552],{},".csv","：表格文本。",[1073,170555,170556,170559],{},[26,170557,170558],{},".json","：结构化数据。",[1073,170561,170562,170565],{},[26,170563,170564],{},".log","：日志文件。",[1073,170567,170568,170570],{},[26,170569,148720],{},"：Python 源代码。",[14,170572,170574],{"id":170573},"_82-路径","8.2 路径",[30,170576,170578],{"id":170577},"_821-相对路径","8.2.1 相对路径",[274,170580,170581],{},"相对当前运行目录：",[19,170583,170585],{"className":33310,"code":170584,"language":33312,"meta":28,"style":28},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[26,170586,170587],{"__ignoreMap":28},[52,170588,170589,170591,170593,170595,170597,170599,170601,170603,170605,170607],{"class":54,"line":55},[52,170590,89843],{"class":90},[52,170592,3121],{"class":622},[52,170594,149164],{"class":62},[52,170596,15391],{"class":622},[52,170598,149169],{"class":62},[52,170600,15391],{"class":622},[52,170602,149174],{"class":8172},[52,170604,2099],{"class":160},[52,170606,149179],{"class":62},[52,170608,170],{"class":622},[30,170610,170612],{"id":170611},"_822-绝对路径","8.2.2 绝对路径",[274,170614,170615],{},"从根目录或盘符开始：",[19,170617,170619],{"className":33310,"code":170618,"language":33312,"meta":28,"style":28},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[26,170620,170621,170644],{"__ignoreMap":28},[52,170622,170623,170625,170627,170630,170632,170634,170636,170638,170640,170642],{"class":54,"line":55},[52,170624,89843],{"class":90},[52,170626,3121],{"class":622},[52,170628,170629],{"class":62},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[52,170631,15391],{"class":622},[52,170633,149169],{"class":62},[52,170635,15391],{"class":622},[52,170637,149174],{"class":8172},[52,170639,2099],{"class":160},[52,170641,149179],{"class":62},[52,170643,170],{"class":622},[52,170645,170646,170648,170650,170653,170655,170657,170659,170661,170663,170665],{"class":54,"line":69},[52,170647,89843],{"class":90},[52,170649,3121],{"class":622},[52,170651,170652],{"class":62},"\"D:\u002Fdata\u002Fdata.txt\"",[52,170654,15391],{"class":622},[52,170656,149169],{"class":62},[52,170658,15391],{"class":622},[52,170660,149174],{"class":8172},[52,170662,2099],{"class":160},[52,170664,149179],{"class":62},[52,170666,170],{"class":622},[274,170668,170669],{},"Windows 路径建议写成：",[19,170671,170673],{"className":33310,"code":170672,"language":33312,"meta":28,"style":28},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[26,170674,170675],{"__ignoreMap":28},[52,170676,170677,170680,170682],{"class":54,"line":55},[52,170678,170679],{"class":622},"path ",[52,170681,2099],{"class":160},[52,170683,170684],{"class":62}," \"D:\u002Fdata\u002Fdata.txt\"\n",[274,170686,170687],{},"或原始字符串：",[19,170689,170691],{"className":33310,"code":170690,"language":33312,"meta":28,"style":28},"path = r\"D:\\data\\data.txt\"\n",[26,170692,170693],{"__ignoreMap":28},[52,170694,170695,170697,170699,170701,170703,170706,170709,170712,170714,170716,170718,170721],{"class":54,"line":55},[52,170696,170679],{"class":622},[52,170698,2099],{"class":160},[52,170700,20077],{"class":160},[52,170702,3364],{"class":62},[52,170704,170705],{"class":50908},"D:",[52,170707,170708],{"class":90},"\\d",[52,170710,170711],{"class":50908},"ata",[52,170713,170708],{"class":90},[52,170715,170711],{"class":50908},[52,170717,3670],{"class":90},[52,170719,170720],{"class":50908},"txt",[52,170722,28079],{"class":62},[14,170724,170726],{"id":170725},"_83-open函数","8.3 open函数",[274,170728,8140],{},[19,170730,170732],{"className":33310,"code":170731,"language":33312,"meta":28,"style":28},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[26,170733,170734],{"__ignoreMap":28},[52,170735,170736,170738,170740,170742,170745,170747,170749,170751],{"class":54,"line":55},[52,170737,48286],{"class":8172},[52,170739,16520],{"class":160},[52,170741,149159],{"class":90},[52,170743,170744],{"class":622},"(文件路径, 打开模式, ",[52,170746,149174],{"class":8172},[52,170748,2099],{"class":160},[52,170750,149179],{"class":62},[52,170752,170],{"class":622},[274,170754,170755],{},"常见模式：",[3253,170757,170758,170767],{},[3256,170759,170760],{},[3259,170761,170762,170765],{},[3262,170763,170764],{},"模式",[3262,170766,28814],{},[3299,170768,170769,170778,170787,170796,170806],{},[3259,170770,170771,170775],{},[3304,170772,170773],{},[26,170774,3782],{},[3304,170776,170777],{},"只读，文件不存在会报错",[3259,170779,170780,170784],{},[3304,170781,170782],{},[26,170783,3907],{},[3304,170785,170786],{},"只写，文件不存在会创建，存在会清空",[3259,170788,170789,170793],{},[3304,170790,170791],{},[26,170792,300],{},[3304,170794,170795],{},"追加，文件不存在会创建",[3259,170797,170798,170803],{},[3304,170799,170800],{},[26,170801,170802],{},"rb",[3304,170804,170805],{},"二进制只读",[3259,170807,170808,170813],{},[3304,170809,170810],{},[26,170811,170812],{},"wb",[3304,170814,170815],{},"二进制只写",[14,170817,170819],{"id":170818},"_84-读取文件","8.4 读取文件",[30,170821,170823],{"id":170822},"_841-read","8.4.1 read",[274,170825,170826],{},"一次读取全部内容：",[19,170828,170830],{"className":33310,"code":170829,"language":33312,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[26,170831,170832,170858,170870,170877],{"__ignoreMap":28},[52,170833,170834,170836,170838,170840,170842,170844,170846,170848,170850,170852,170854,170856],{"class":54,"line":55},[52,170835,48286],{"class":8172},[52,170837,16520],{"class":160},[52,170839,149159],{"class":90},[52,170841,3121],{"class":622},[52,170843,149164],{"class":62},[52,170845,15391],{"class":622},[52,170847,149169],{"class":62},[52,170849,15391],{"class":622},[52,170851,149174],{"class":8172},[52,170853,2099],{"class":160},[52,170855,149179],{"class":62},[52,170857,170],{"class":622},[52,170859,170860,170863,170865,170867],{"class":54,"line":69},[52,170861,170862],{"class":622},"content ",[52,170864,2099],{"class":160},[52,170866,150521],{"class":8172},[52,170868,170869],{"class":622},".read()\n",[52,170871,170872,170874],{"class":54,"line":82},[52,170873,33347],{"class":90},[52,170875,170876],{"class":622},"(content)\n",[52,170878,170879,170881],{"class":54,"line":97},[52,170880,48286],{"class":8172},[52,170882,170883],{"class":622},".close()\n",[274,170885,170886],{},"可以指定读取字符数：",[19,170888,170890],{"className":33310,"code":170889,"language":33312,"meta":28,"style":28},"content = file.read(10)\n",[26,170891,170892],{"__ignoreMap":28},[52,170893,170894,170896,170898,170900,170903,170905],{"class":54,"line":55},[52,170895,170862],{"class":622},[52,170897,2099],{"class":160},[52,170899,150521],{"class":8172},[52,170901,170902],{"class":622},".read(",[52,170904,3559],{"class":90},[52,170906,170],{"class":622},[30,170908,170910],{"id":170909},"_842-readline","8.4.2 readline",[274,170912,170913],{},"一次读取一行：",[19,170915,170917],{"className":33310,"code":170916,"language":33312,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[26,170918,170919,170945,170949,170960,170967,170971],{"__ignoreMap":28},[52,170920,170921,170923,170925,170927,170929,170931,170933,170935,170937,170939,170941,170943],{"class":54,"line":55},[52,170922,48286],{"class":8172},[52,170924,16520],{"class":160},[52,170926,149159],{"class":90},[52,170928,3121],{"class":622},[52,170930,149164],{"class":62},[52,170932,15391],{"class":622},[52,170934,149169],{"class":62},[52,170936,15391],{"class":622},[52,170938,149174],{"class":8172},[52,170940,2099],{"class":160},[52,170942,149179],{"class":62},[52,170944,170],{"class":622},[52,170946,170947],{"class":54,"line":69},[52,170948,116],{"emptyLinePlaceholder":115},[52,170950,170951,170953,170955,170957],{"class":54,"line":82},[52,170952,149620],{"class":622},[52,170954,2099],{"class":160},[52,170956,150521],{"class":8172},[52,170958,170959],{"class":622},".readline()\n",[52,170961,170962,170964],{"class":54,"line":97},[52,170963,33347],{"class":90},[52,170965,170966],{"class":622},"(line)\n",[52,170968,170969],{"class":54,"line":112},[52,170970,116],{"emptyLinePlaceholder":115},[52,170972,170973,170975],{"class":54,"line":119},[52,170974,48286],{"class":8172},[52,170976,170883],{"class":622},[30,170978,170980],{"id":170979},"_843-readlines","8.4.3 readlines",[274,170982,170983],{},"读取所有行，返回列表：",[19,170985,170987],{"className":33310,"code":170986,"language":33312,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[26,170988,170989,171015,171027,171034],{"__ignoreMap":28},[52,170990,170991,170993,170995,170997,170999,171001,171003,171005,171007,171009,171011,171013],{"class":54,"line":55},[52,170992,48286],{"class":8172},[52,170994,16520],{"class":160},[52,170996,149159],{"class":90},[52,170998,3121],{"class":622},[52,171000,149164],{"class":62},[52,171002,15391],{"class":622},[52,171004,149169],{"class":62},[52,171006,15391],{"class":622},[52,171008,149174],{"class":8172},[52,171010,2099],{"class":160},[52,171012,149179],{"class":62},[52,171014,170],{"class":622},[52,171016,171017,171020,171022,171024],{"class":54,"line":69},[52,171018,171019],{"class":622},"lines ",[52,171021,2099],{"class":160},[52,171023,150521],{"class":8172},[52,171025,171026],{"class":622},".readlines()\n",[52,171028,171029,171031],{"class":54,"line":82},[52,171030,33347],{"class":90},[52,171032,171033],{"class":622},"(lines)\n",[52,171035,171036,171038],{"class":54,"line":97},[52,171037,48286],{"class":8172},[52,171039,170883],{"class":622},[274,171041,171042,171043,171046],{},"每一行通常带有换行符，可以用 ",[26,171044,171045],{},"strip()"," 去掉：",[19,171048,171050],{"className":33310,"code":171049,"language":33312,"meta":28,"style":28},"for line in lines:\n    print(line.strip())\n",[26,171051,171052,171064],{"__ignoreMap":28},[52,171053,171054,171056,171059,171061],{"class":54,"line":55},[52,171055,5985],{"class":160},[52,171057,171058],{"class":622}," line ",[52,171060,28988],{"class":160},[52,171062,171063],{"class":622}," lines:\n",[52,171065,171066,171068],{"class":54,"line":69},[52,171067,34231],{"class":90},[52,171069,171070],{"class":622},"(line.strip())\n",[30,171072,171074],{"id":171073},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[274,171076,171077],{},"推荐读取大文件时使用：",[19,171079,171081],{"className":33310,"code":171080,"language":33312,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[26,171082,171083,171109,171113,171125,171131,171135],{"__ignoreMap":28},[52,171084,171085,171087,171089,171091,171093,171095,171097,171099,171101,171103,171105,171107],{"class":54,"line":55},[52,171086,48286],{"class":8172},[52,171088,16520],{"class":160},[52,171090,149159],{"class":90},[52,171092,3121],{"class":622},[52,171094,149164],{"class":62},[52,171096,15391],{"class":622},[52,171098,149169],{"class":62},[52,171100,15391],{"class":622},[52,171102,149174],{"class":8172},[52,171104,2099],{"class":160},[52,171106,149179],{"class":62},[52,171108,170],{"class":622},[52,171110,171111],{"class":54,"line":69},[52,171112,116],{"emptyLinePlaceholder":115},[52,171114,171115,171117,171119,171121,171123],{"class":54,"line":82},[52,171116,5985],{"class":160},[52,171118,171058],{"class":622},[52,171120,28988],{"class":160},[52,171122,150521],{"class":8172},[52,171124,6698],{"class":622},[52,171126,171127,171129],{"class":54,"line":97},[52,171128,34231],{"class":90},[52,171130,171070],{"class":622},[52,171132,171133],{"class":54,"line":112},[52,171134,116],{"emptyLinePlaceholder":115},[52,171136,171137,171139],{"class":54,"line":119},[52,171138,48286],{"class":8172},[52,171140,170883],{"class":622},[14,171142,171144],{"id":171143},"_85-with语句","8.5 with语句",[274,171146,171147,171149],{},[26,171148,110753],{}," 会自动关闭文件，推荐使用。",[19,171151,171153],{"className":33310,"code":171152,"language":33312,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[26,171154,171155,171185,171195],{"__ignoreMap":28},[52,171156,171157,171159,171161,171163,171165,171167,171169,171171,171173,171175,171177,171179,171181,171183],{"class":54,"line":55},[52,171158,110753],{"class":160},[52,171160,149159],{"class":90},[52,171162,3121],{"class":622},[52,171164,149164],{"class":62},[52,171166,15391],{"class":622},[52,171168,149169],{"class":62},[52,171170,15391],{"class":622},[52,171172,149174],{"class":8172},[52,171174,2099],{"class":160},[52,171176,149179],{"class":62},[52,171178,16670],{"class":622},[52,171180,34315],{"class":160},[52,171182,150521],{"class":8172},[52,171184,6698],{"class":622},[52,171186,171187,171189,171191,171193],{"class":54,"line":69},[52,171188,149191],{"class":622},[52,171190,2099],{"class":160},[52,171192,150521],{"class":8172},[52,171194,170869],{"class":622},[52,171196,171197,171199],{"class":54,"line":82},[52,171198,34231],{"class":90},[52,171200,170876],{"class":622},[274,171202,171203],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,171205,171207],{"id":171206},"_86-写入文件","8.6 写入文件",[274,171209,171210,171212],{},[26,171211,3907],{}," 模式会清空原文件。",[19,171214,171216],{"className":33310,"code":171215,"language":33312,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[26,171217,171218,171248,171265],{"__ignoreMap":28},[52,171219,171220,171222,171224,171226,171228,171230,171232,171234,171236,171238,171240,171242,171244,171246],{"class":54,"line":55},[52,171221,110753],{"class":160},[52,171223,149159],{"class":90},[52,171225,3121],{"class":622},[52,171227,149164],{"class":62},[52,171229,15391],{"class":622},[52,171231,154344],{"class":62},[52,171233,15391],{"class":622},[52,171235,149174],{"class":8172},[52,171237,2099],{"class":160},[52,171239,149179],{"class":62},[52,171241,16670],{"class":622},[52,171243,34315],{"class":160},[52,171245,150521],{"class":8172},[52,171247,6698],{"class":622},[52,171249,171250,171253,171256,171259,171261,171263],{"class":54,"line":69},[52,171251,171252],{"class":8172},"    file",[52,171254,171255],{"class":622},".write(",[52,171257,171258],{"class":62},"\"hello",[52,171260,158893],{"class":90},[52,171262,3364],{"class":62},[52,171264,170],{"class":622},[52,171266,171267,171269,171271,171274,171276,171278],{"class":54,"line":82},[52,171268,171252],{"class":8172},[52,171270,171255],{"class":622},[52,171272,171273],{"class":62},"\"python",[52,171275,158893],{"class":90},[52,171277,3364],{"class":62},[52,171279,170],{"class":622},[274,171281,171282],{},"写入多行：",[19,171284,171286],{"className":33310,"code":171285,"language":33312,"meta":28,"style":28},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[26,171287,171288,171323,171327,171358],{"__ignoreMap":28},[52,171289,171290,171292,171294,171296,171299,171301,171303,171305,171308,171310,171312,171314,171317,171319,171321],{"class":54,"line":55},[52,171291,171019],{"class":622},[52,171293,2099],{"class":160},[52,171295,55157],{"class":622},[52,171297,171298],{"class":62},"\"小明,18",[52,171300,158893],{"class":90},[52,171302,3364],{"class":62},[52,171304,15391],{"class":622},[52,171306,171307],{"class":62},"\"小红,17",[52,171309,158893],{"class":90},[52,171311,3364],{"class":62},[52,171313,15391],{"class":622},[52,171315,171316],{"class":62},"\"小刚,19",[52,171318,158893],{"class":90},[52,171320,3364],{"class":62},[52,171322,36178],{"class":622},[52,171324,171325],{"class":54,"line":69},[52,171326,116],{"emptyLinePlaceholder":115},[52,171328,171329,171331,171333,171335,171338,171340,171342,171344,171346,171348,171350,171352,171354,171356],{"class":54,"line":82},[52,171330,110753],{"class":160},[52,171332,149159],{"class":90},[52,171334,3121],{"class":622},[52,171336,171337],{"class":62},"\"students.txt\"",[52,171339,15391],{"class":622},[52,171341,154344],{"class":62},[52,171343,15391],{"class":622},[52,171345,149174],{"class":8172},[52,171347,2099],{"class":160},[52,171349,149179],{"class":62},[52,171351,16670],{"class":622},[52,171353,34315],{"class":160},[52,171355,150521],{"class":8172},[52,171357,6698],{"class":622},[52,171359,171360,171362],{"class":54,"line":97},[52,171361,171252],{"class":8172},[52,171363,171364],{"class":622},".writelines(lines)\n",[14,171366,171368],{"id":171367},"_87-追加文件","8.7 追加文件",[274,171370,171371,171373],{},[26,171372,300],{}," 模式不会清空原内容，而是在末尾追加。",[19,171375,171377],{"className":33310,"code":171376,"language":33312,"meta":28,"style":28},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[26,171378,171379,171410],{"__ignoreMap":28},[52,171380,171381,171383,171385,171387,171390,171392,171394,171396,171398,171400,171402,171404,171406,171408],{"class":54,"line":55},[52,171382,110753],{"class":160},[52,171384,149159],{"class":90},[52,171386,3121],{"class":622},[52,171388,171389],{"class":62},"\"log.txt\"",[52,171391,15391],{"class":622},[52,171393,167693],{"class":62},[52,171395,15391],{"class":622},[52,171397,149174],{"class":8172},[52,171399,2099],{"class":160},[52,171401,149179],{"class":62},[52,171403,16670],{"class":622},[52,171405,34315],{"class":160},[52,171407,150521],{"class":8172},[52,171409,6698],{"class":622},[52,171411,171412,171414,171416,171419,171421,171423],{"class":54,"line":69},[52,171413,171252],{"class":8172},[52,171415,171255],{"class":622},[52,171417,171418],{"class":62},"\"程序启动",[52,171420,158893],{"class":90},[52,171422,3364],{"class":62},[52,171424,170],{"class":622},[274,171426,171427],{},"日志类文件常用追加模式。",[14,171429,171431],{"id":171430},"_88-文件编码","8.8 文件编码",[274,171433,171434],{},"编码决定文字如何保存为字节。",[274,171436,171437],{},"常见编码：",[1070,171439,171440,171443],{},[1073,171441,171442],{},"UTF-8：推荐。",[1073,171444,171445],{},"GBK：部分 Windows 中文文件常见。",[274,171447,171448],{},"读取文件乱码时，可以尝试：",[19,171450,171452],{"className":33310,"code":171451,"language":33312,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[26,171453,171454,171485],{"__ignoreMap":28},[52,171455,171456,171458,171460,171462,171464,171466,171468,171470,171472,171474,171477,171479,171481,171483],{"class":54,"line":55},[52,171457,110753],{"class":160},[52,171459,149159],{"class":90},[52,171461,3121],{"class":622},[52,171463,149164],{"class":62},[52,171465,15391],{"class":622},[52,171467,149169],{"class":62},[52,171469,15391],{"class":622},[52,171471,149174],{"class":8172},[52,171473,2099],{"class":160},[52,171475,171476],{"class":62},"\"gbk\"",[52,171478,16670],{"class":622},[52,171480,34315],{"class":160},[52,171482,150521],{"class":8172},[52,171484,6698],{"class":622},[52,171486,171487,171489,171491,171493],{"class":54,"line":69},[52,171488,149191],{"class":622},[52,171490,2099],{"class":160},[52,171492,150521],{"class":8172},[52,171494,170869],{"class":622},[274,171496,171497],{},"写文件时建议统一 UTF-8：",[19,171499,171501],{"className":33310,"code":171500,"language":33312,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[26,171502,171503,171533],{"__ignoreMap":28},[52,171504,171505,171507,171509,171511,171513,171515,171517,171519,171521,171523,171525,171527,171529,171531],{"class":54,"line":55},[52,171506,110753],{"class":160},[52,171508,149159],{"class":90},[52,171510,3121],{"class":622},[52,171512,149164],{"class":62},[52,171514,15391],{"class":622},[52,171516,154344],{"class":62},[52,171518,15391],{"class":622},[52,171520,149174],{"class":8172},[52,171522,2099],{"class":160},[52,171524,149179],{"class":62},[52,171526,16670],{"class":622},[52,171528,34315],{"class":160},[52,171530,150521],{"class":8172},[52,171532,6698],{"class":622},[52,171534,171535,171537,171539,171542],{"class":54,"line":69},[52,171536,171252],{"class":8172},[52,171538,171255],{"class":622},[52,171540,171541],{"class":62},"\"中文内容\"",[52,171543,170],{"class":622},[14,171545,171547],{"id":171546},"_89-pathlib","8.9 pathlib",[274,171549,171550,171553],{},[26,171551,171552],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[19,171555,171557],{"className":33310,"code":171556,"language":33312,"meta":28,"style":28},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[26,171558,171559,171569,171573,171591],{"__ignoreMap":28},[52,171560,171561,171563,171565,171567],{"class":54,"line":55},[52,171562,33669],{"class":160},[52,171564,111231],{"class":622},[52,171566,33324],{"class":160},[52,171568,111236],{"class":622},[52,171570,171571],{"class":54,"line":69},[52,171572,116],{"emptyLinePlaceholder":115},[52,171574,171575,171577,171579,171581,171584,171586,171588],{"class":54,"line":82},[52,171576,170679],{"class":622},[52,171578,2099],{"class":160},[52,171580,111465],{"class":622},[52,171582,171583],{"class":62},"\"data\"",[52,171585,16670],{"class":622},[52,171587,3696],{"class":160},[52,171589,171590],{"class":62}," \"students.txt\"\n",[52,171592,171593,171595],{"class":54,"line":97},[52,171594,33347],{"class":90},[52,171596,171597],{"class":622},"(path)\n",[274,171599,171600],{},"创建目录：",[19,171602,171604],{"className":33310,"code":171603,"language":33312,"meta":28,"style":28},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[26,171605,171606,171616,171620,171633],{"__ignoreMap":28},[52,171607,171608,171610,171612,171614],{"class":54,"line":55},[52,171609,33669],{"class":160},[52,171611,111231],{"class":622},[52,171613,33324],{"class":160},[52,171615,111236],{"class":622},[52,171617,171618],{"class":54,"line":69},[52,171619,116],{"emptyLinePlaceholder":115},[52,171621,171622,171625,171627,171629,171631],{"class":54,"line":82},[52,171623,171624],{"class":622},"data_dir ",[52,171626,2099],{"class":160},[52,171628,111465],{"class":622},[52,171630,171583],{"class":62},[52,171632,170],{"class":622},[52,171634,171635,171638,171641,171643,171645],{"class":54,"line":97},[52,171636,171637],{"class":622},"data_dir.mkdir(",[52,171639,171640],{"class":8172},"exist_ok",[52,171642,2099],{"class":160},[52,171644,34408],{"class":90},[52,171646,170],{"class":622},[274,171648,171649],{},"判断文件是否存在：",[19,171651,171653],{"className":33310,"code":171652,"language":33312,"meta":28,"style":28},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[26,171654,171655,171668,171672,171679],{"__ignoreMap":28},[52,171656,171657,171659,171661,171663,171666],{"class":54,"line":55},[52,171658,170679],{"class":622},[52,171660,2099],{"class":160},[52,171662,111465],{"class":622},[52,171664,171665],{"class":62},"\"data\u002Fstudents.txt\"",[52,171667,170],{"class":622},[52,171669,171670],{"class":54,"line":69},[52,171671,116],{"emptyLinePlaceholder":115},[52,171673,171674,171676],{"class":54,"line":82},[52,171675,4509],{"class":160},[52,171677,171678],{"class":622}," path.exists():\n",[52,171680,171681,171683,171685,171688],{"class":54,"line":97},[52,171682,34231],{"class":90},[52,171684,3121],{"class":622},[52,171686,171687],{"class":62},"\"文件存在\"",[52,171689,170],{"class":622},[274,171691,171692],{},"读写文本：",[19,171694,171696],{"className":33310,"code":171695,"language":33312,"meta":28,"style":28},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[26,171697,171698,171710,171714,171731,171748],{"__ignoreMap":28},[52,171699,171700,171702,171704,171706,171708],{"class":54,"line":55},[52,171701,170679],{"class":622},[52,171703,2099],{"class":160},[52,171705,111465],{"class":622},[52,171707,149164],{"class":62},[52,171709,170],{"class":622},[52,171711,171712],{"class":54,"line":69},[52,171713,116],{"emptyLinePlaceholder":115},[52,171715,171716,171719,171721,171723,171725,171727,171729],{"class":54,"line":82},[52,171717,171718],{"class":622},"path.write_text(",[52,171720,148244],{"class":62},[52,171722,15391],{"class":622},[52,171724,149174],{"class":8172},[52,171726,2099],{"class":160},[52,171728,149179],{"class":62},[52,171730,170],{"class":622},[52,171732,171733,171735,171737,171740,171742,171744,171746],{"class":54,"line":97},[52,171734,170862],{"class":622},[52,171736,2099],{"class":160},[52,171738,171739],{"class":622}," path.read_text(",[52,171741,149174],{"class":8172},[52,171743,2099],{"class":160},[52,171745,149179],{"class":62},[52,171747,170],{"class":622},[52,171749,171750,171752],{"class":54,"line":112},[52,171751,33347],{"class":90},[52,171753,170876],{"class":622},[14,171755,171757],{"id":171756},"_810-json文件","8.10 JSON文件",[274,171759,171760],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[19,171762,171764],{"className":33310,"code":171763,"language":33312,"meta":28,"style":28},"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",[26,171765,171766,171772,171776,171784,171794,171804,171812,171816,171820,171845],{"__ignoreMap":28},[52,171767,171768,171770],{"class":54,"line":55},[52,171769,33324],{"class":160},[52,171771,149459],{"class":622},[52,171773,171774],{"class":54,"line":69},[52,171775,116],{"emptyLinePlaceholder":115},[52,171777,171778,171780,171782],{"class":54,"line":82},[52,171779,151849],{"class":622},[52,171781,2099],{"class":160},[52,171783,18528],{"class":622},[52,171785,171786,171788,171790,171792],{"class":54,"line":97},[52,171787,149388],{"class":62},[52,171789,54368],{"class":622},[52,171791,152256],{"class":62},[52,171793,34398],{"class":622},[52,171795,171796,171798,171800,171802],{"class":54,"line":112},[52,171797,166905],{"class":62},[52,171799,54368],{"class":622},[52,171801,3762],{"class":90},[52,171803,34398],{"class":622},[52,171805,171806,171808,171810],{"class":54,"line":119},[52,171807,166916],{"class":62},[52,171809,54368],{"class":622},[52,171811,166921],{"class":90},[52,171813,171814],{"class":54,"line":130},[52,171815,4543],{"class":622},[52,171817,171818],{"class":54,"line":136},[52,171819,116],{"emptyLinePlaceholder":115},[52,171821,171822,171824,171826,171829,171831,171833,171835,171837,171839,171841,171843],{"class":54,"line":141},[52,171823,158812],{"class":622},[52,171825,2099],{"class":160},[52,171827,171828],{"class":622}," json.dumps(student, ",[52,171830,149505],{"class":8172},[52,171832,2099],{"class":160},[52,171834,36919],{"class":90},[52,171836,15391],{"class":622},[52,171838,154380],{"class":8172},[52,171840,2099],{"class":160},[52,171842,3194],{"class":90},[52,171844,170],{"class":622},[52,171846,171847,171849],{"class":54,"line":146},[52,171848,33347],{"class":90},[52,171850,166439],{"class":622},[274,171852,171853],{},"写入 JSON 文件：",[19,171855,171857],{"className":33310,"code":171856,"language":33312,"meta":28,"style":28},"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",[26,171858,171859,171865,171869,171877,171905,171933,171937,171941,171971],{"__ignoreMap":28},[52,171860,171861,171863],{"class":54,"line":55},[52,171862,33324],{"class":160},[52,171864,149459],{"class":622},[52,171866,171867],{"class":54,"line":69},[52,171868,116],{"emptyLinePlaceholder":115},[52,171870,171871,171873,171875],{"class":54,"line":82},[52,171872,162084],{"class":622},[52,171874,2099],{"class":160},[52,171876,58377],{"class":622},[52,171878,171879,171881,171883,171885,171887,171889,171891,171893,171895,171897,171899,171901,171903],{"class":54,"line":97},[52,171880,150753],{"class":622},[52,171882,65609],{"class":62},[52,171884,54368],{"class":622},[52,171886,152256],{"class":62},[52,171888,15391],{"class":622},[52,171890,72053],{"class":62},[52,171892,54368],{"class":622},[52,171894,3762],{"class":90},[52,171896,15391],{"class":622},[52,171898,153840],{"class":62},[52,171900,54368],{"class":622},[52,171902,4100],{"class":90},[52,171904,7889],{"class":622},[52,171906,171907,171909,171911,171913,171915,171917,171919,171921,171923,171925,171927,171929,171931],{"class":54,"line":112},[52,171908,150753],{"class":622},[52,171910,65609],{"class":62},[52,171912,54368],{"class":622},[52,171914,153304],{"class":62},[52,171916,15391],{"class":622},[52,171918,72053],{"class":62},[52,171920,54368],{"class":622},[52,171922,3737],{"class":90},[52,171924,15391],{"class":622},[52,171926,153840],{"class":62},[52,171928,54368],{"class":622},[52,171930,3923],{"class":90},[52,171932,7889],{"class":622},[52,171934,171935],{"class":54,"line":119},[52,171936,36178],{"class":622},[52,171938,171939],{"class":54,"line":130},[52,171940,116],{"emptyLinePlaceholder":115},[52,171942,171943,171945,171947,171949,171951,171953,171955,171957,171959,171961,171963,171965,171967,171969],{"class":54,"line":136},[52,171944,110753],{"class":160},[52,171946,149159],{"class":90},[52,171948,3121],{"class":622},[52,171950,154199],{"class":62},[52,171952,15391],{"class":622},[52,171954,154344],{"class":62},[52,171956,15391],{"class":622},[52,171958,149174],{"class":8172},[52,171960,2099],{"class":160},[52,171962,149179],{"class":62},[52,171964,16670],{"class":622},[52,171966,34315],{"class":160},[52,171968,150521],{"class":8172},[52,171970,6698],{"class":622},[52,171972,171973,171976,171978,171980,171982,171984,171986,171988,171990,171992,171994],{"class":54,"line":141},[52,171974,171975],{"class":622},"    json.dump(students, ",[52,171977,48286],{"class":8172},[52,171979,15391],{"class":622},[52,171981,149505],{"class":8172},[52,171983,2099],{"class":160},[52,171985,36919],{"class":90},[52,171987,15391],{"class":622},[52,171989,154380],{"class":8172},[52,171991,2099],{"class":160},[52,171993,3194],{"class":90},[52,171995,170],{"class":622},[274,171997,171998],{},"读取 JSON 文件：",[19,172000,172002],{"className":33310,"code":172001,"language":33312,"meta":28,"style":28},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[26,172003,172004,172010,172014,172044,172056,172060],{"__ignoreMap":28},[52,172005,172006,172008],{"class":54,"line":55},[52,172007,33324],{"class":160},[52,172009,149459],{"class":622},[52,172011,172012],{"class":54,"line":69},[52,172013,116],{"emptyLinePlaceholder":115},[52,172015,172016,172018,172020,172022,172024,172026,172028,172030,172032,172034,172036,172038,172040,172042],{"class":54,"line":82},[52,172017,110753],{"class":160},[52,172019,149159],{"class":90},[52,172021,3121],{"class":622},[52,172023,154199],{"class":62},[52,172025,15391],{"class":622},[52,172027,149169],{"class":62},[52,172029,15391],{"class":622},[52,172031,149174],{"class":8172},[52,172033,2099],{"class":160},[52,172035,149179],{"class":62},[52,172037,16670],{"class":622},[52,172039,34315],{"class":160},[52,172041,150521],{"class":8172},[52,172043,6698],{"class":622},[52,172045,172046,172048,172050,172052,172054],{"class":54,"line":97},[52,172047,155405],{"class":622},[52,172049,2099],{"class":160},[52,172051,150532],{"class":622},[52,172053,48286],{"class":8172},[52,172055,170],{"class":622},[52,172057,172058],{"class":54,"line":112},[52,172059,116],{"emptyLinePlaceholder":115},[52,172061,172062,172064],{"class":54,"line":119},[52,172063,33347],{"class":90},[52,172065,167363],{"class":622},[14,172067,172069],{"id":172068},"_811-csv文件","8.11 CSV文件",[274,172071,172072],{},"CSV 是逗号分隔值，常用于表格数据。",[274,172074,172075],{},"写入 CSV：",[19,172077,172079],{"className":33310,"code":172078,"language":33312,"meta":28,"style":28},"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",[26,172080,172081,172088,172092,172100,172118,172134,172150,172154,172158,172198,172212],{"__ignoreMap":28},[52,172082,172083,172085],{"class":54,"line":55},[52,172084,33324],{"class":160},[52,172086,172087],{"class":622}," csv\n",[52,172089,172090],{"class":54,"line":69},[52,172091,116],{"emptyLinePlaceholder":115},[52,172093,172094,172096,172098],{"class":54,"line":82},[52,172095,162084],{"class":622},[52,172097,2099],{"class":160},[52,172099,58377],{"class":622},[52,172101,172102,172105,172107,172109,172111,172113,172116],{"class":54,"line":97},[52,172103,172104],{"class":622},"    [",[52,172106,76027],{"class":62},[52,172108,15391],{"class":622},[52,172110,76060],{"class":62},[52,172112,15391],{"class":622},[52,172114,172115],{"class":62},"\"成绩\"",[52,172117,90764],{"class":622},[52,172119,172120,172122,172124,172126,172128,172130,172132],{"class":54,"line":112},[52,172121,172104],{"class":622},[52,172123,152256],{"class":62},[52,172125,15391],{"class":622},[52,172127,3762],{"class":90},[52,172129,15391],{"class":622},[52,172131,4100],{"class":90},[52,172133,90764],{"class":622},[52,172135,172136,172138,172140,172142,172144,172146,172148],{"class":54,"line":119},[52,172137,172104],{"class":622},[52,172139,153304],{"class":62},[52,172141,15391],{"class":622},[52,172143,3737],{"class":90},[52,172145,15391],{"class":622},[52,172147,3923],{"class":90},[52,172149,90764],{"class":622},[52,172151,172152],{"class":54,"line":130},[52,172153,36178],{"class":622},[52,172155,172156],{"class":54,"line":136},[52,172157,116],{"emptyLinePlaceholder":115},[52,172159,172160,172162,172164,172166,172169,172171,172173,172175,172177,172179,172181,172183,172186,172188,172190,172192,172194,172196],{"class":54,"line":141},[52,172161,110753],{"class":160},[52,172163,149159],{"class":90},[52,172165,3121],{"class":622},[52,172167,172168],{"class":62},"\"students.csv\"",[52,172170,15391],{"class":622},[52,172172,154344],{"class":62},[52,172174,15391],{"class":622},[52,172176,149174],{"class":8172},[52,172178,2099],{"class":160},[52,172180,149179],{"class":62},[52,172182,15391],{"class":622},[52,172184,172185],{"class":8172},"newline",[52,172187,2099],{"class":160},[52,172189,10608],{"class":62},[52,172191,16670],{"class":622},[52,172193,34315],{"class":160},[52,172195,150521],{"class":8172},[52,172197,6698],{"class":622},[52,172199,172200,172203,172205,172208,172210],{"class":54,"line":146},[52,172201,172202],{"class":622},"    writer ",[52,172204,2099],{"class":160},[52,172206,172207],{"class":622}," csv.writer(",[52,172209,48286],{"class":8172},[52,172211,170],{"class":622},[52,172213,172214],{"class":54,"line":152},[52,172215,172216],{"class":622},"    writer.writerows(students)\n",[274,172218,172219],{},"读取 CSV：",[19,172221,172223],{"className":33310,"code":172222,"language":33312,"meta":28,"style":28},"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",[26,172224,172225,172231,172235,172265,172279,172291],{"__ignoreMap":28},[52,172226,172227,172229],{"class":54,"line":55},[52,172228,33324],{"class":160},[52,172230,172087],{"class":622},[52,172232,172233],{"class":54,"line":69},[52,172234,116],{"emptyLinePlaceholder":115},[52,172236,172237,172239,172241,172243,172245,172247,172249,172251,172253,172255,172257,172259,172261,172263],{"class":54,"line":82},[52,172238,110753],{"class":160},[52,172240,149159],{"class":90},[52,172242,3121],{"class":622},[52,172244,172168],{"class":62},[52,172246,15391],{"class":622},[52,172248,149169],{"class":62},[52,172250,15391],{"class":622},[52,172252,149174],{"class":8172},[52,172254,2099],{"class":160},[52,172256,149179],{"class":62},[52,172258,16670],{"class":622},[52,172260,34315],{"class":160},[52,172262,150521],{"class":8172},[52,172264,6698],{"class":622},[52,172266,172267,172270,172272,172275,172277],{"class":54,"line":97},[52,172268,172269],{"class":622},"    reader ",[52,172271,2099],{"class":160},[52,172273,172274],{"class":622}," csv.reader(",[52,172276,48286],{"class":8172},[52,172278,170],{"class":622},[52,172280,172281,172283,172286,172288],{"class":54,"line":112},[52,172282,6160],{"class":160},[52,172284,172285],{"class":622}," row ",[52,172287,28988],{"class":160},[52,172289,172290],{"class":622}," reader:\n",[52,172292,172293,172295],{"class":54,"line":119},[52,172294,35383],{"class":90},[52,172296,172297],{"class":622},"(row)\n",[274,172299,172300],{},"使用字典写入：",[19,172302,172304],{"className":33310,"code":172303,"language":33312,"meta":28,"style":28},"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",[26,172305,172306,172312,172316,172324,172352,172380,172384,172388,172426,172447,172468,172473],{"__ignoreMap":28},[52,172307,172308,172310],{"class":54,"line":55},[52,172309,33324],{"class":160},[52,172311,172087],{"class":622},[52,172313,172314],{"class":54,"line":69},[52,172315,116],{"emptyLinePlaceholder":115},[52,172317,172318,172320,172322],{"class":54,"line":82},[52,172319,162084],{"class":622},[52,172321,2099],{"class":160},[52,172323,58377],{"class":622},[52,172325,172326,172328,172330,172332,172334,172336,172338,172340,172342,172344,172346,172348,172350],{"class":54,"line":97},[52,172327,150753],{"class":622},[52,172329,65609],{"class":62},[52,172331,54368],{"class":622},[52,172333,152256],{"class":62},[52,172335,15391],{"class":622},[52,172337,72053],{"class":62},[52,172339,54368],{"class":622},[52,172341,3762],{"class":90},[52,172343,15391],{"class":622},[52,172345,153840],{"class":62},[52,172347,54368],{"class":622},[52,172349,4100],{"class":90},[52,172351,7889],{"class":622},[52,172353,172354,172356,172358,172360,172362,172364,172366,172368,172370,172372,172374,172376,172378],{"class":54,"line":112},[52,172355,150753],{"class":622},[52,172357,65609],{"class":62},[52,172359,54368],{"class":622},[52,172361,153304],{"class":62},[52,172363,15391],{"class":622},[52,172365,72053],{"class":62},[52,172367,54368],{"class":622},[52,172369,3737],{"class":90},[52,172371,15391],{"class":622},[52,172373,153840],{"class":62},[52,172375,54368],{"class":622},[52,172377,3923],{"class":90},[52,172379,7889],{"class":622},[52,172381,172382],{"class":54,"line":119},[52,172383,36178],{"class":622},[52,172385,172386],{"class":54,"line":130},[52,172387,116],{"emptyLinePlaceholder":115},[52,172389,172390,172392,172394,172396,172398,172400,172402,172404,172406,172408,172410,172412,172414,172416,172418,172420,172422,172424],{"class":54,"line":136},[52,172391,110753],{"class":160},[52,172393,149159],{"class":90},[52,172395,3121],{"class":622},[52,172397,172168],{"class":62},[52,172399,15391],{"class":622},[52,172401,154344],{"class":62},[52,172403,15391],{"class":622},[52,172405,149174],{"class":8172},[52,172407,2099],{"class":160},[52,172409,149179],{"class":62},[52,172411,15391],{"class":622},[52,172413,172185],{"class":8172},[52,172415,2099],{"class":160},[52,172417,10608],{"class":62},[52,172419,16670],{"class":622},[52,172421,34315],{"class":160},[52,172423,150521],{"class":8172},[52,172425,6698],{"class":622},[52,172427,172428,172431,172433,172435,172437,172439,172441,172443,172445],{"class":54,"line":141},[52,172429,172430],{"class":622},"    fieldnames ",[52,172432,2099],{"class":160},[52,172434,55157],{"class":622},[52,172436,65609],{"class":62},[52,172438,15391],{"class":622},[52,172440,72053],{"class":62},[52,172442,15391],{"class":622},[52,172444,153840],{"class":62},[52,172446,36178],{"class":622},[52,172448,172449,172451,172453,172456,172458,172460,172463,172465],{"class":54,"line":146},[52,172450,172202],{"class":622},[52,172452,2099],{"class":160},[52,172454,172455],{"class":622}," csv.DictWriter(",[52,172457,48286],{"class":8172},[52,172459,15391],{"class":622},[52,172461,172462],{"class":8172},"fieldnames",[52,172464,2099],{"class":160},[52,172466,172467],{"class":622},"fieldnames)\n",[52,172469,172470],{"class":54,"line":152},[52,172471,172472],{"class":622},"    writer.writeheader()\n",[52,172474,172475],{"class":54,"line":157},[52,172476,172216],{"class":622},[14,172478,172480],{"id":172479},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[274,172482,125660],{},[1070,172484,172485,172488,172491],{},[1073,172486,172487],{},"读取文本文件。",[1073,172489,172490],{},"统计每个单词出现次数。",[1073,172492,172493],{},"输出出现次数最多的前 10 个单词。",[274,172495,12991],{},[19,172497,172499],{"className":33310,"code":172498,"language":33312,"meta":28,"style":28},"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",[26,172500,172501,172511,172515,172528,172544,172548,172558,172567,172571,172583,172603,172612,172616,172634,172638,172668,172672,172688],{"__ignoreMap":28},[52,172502,172503,172505,172507,172509],{"class":54,"line":55},[52,172504,33669],{"class":160},[52,172506,111231],{"class":622},[52,172508,33324],{"class":160},[52,172510,111236],{"class":622},[52,172512,172513],{"class":54,"line":69},[52,172514,116],{"emptyLinePlaceholder":115},[52,172516,172517,172519,172521,172523,172526],{"class":54,"line":82},[52,172518,170679],{"class":622},[52,172520,2099],{"class":160},[52,172522,111465],{"class":622},[52,172524,172525],{"class":62},"\"article.txt\"",[52,172527,170],{"class":622},[52,172529,172530,172532,172534,172536,172538,172540,172542],{"class":54,"line":97},[52,172531,170862],{"class":622},[52,172533,2099],{"class":160},[52,172535,171739],{"class":622},[52,172537,149174],{"class":8172},[52,172539,2099],{"class":160},[52,172541,149179],{"class":62},[52,172543,170],{"class":622},[52,172545,172546],{"class":54,"line":112},[52,172547,116],{"emptyLinePlaceholder":115},[52,172549,172550,172553,172555],{"class":54,"line":119},[52,172551,172552],{"class":622},"words ",[52,172554,2099],{"class":160},[52,172556,172557],{"class":622}," content.lower().split()\n",[52,172559,172560,172563,172565],{"class":54,"line":130},[52,172561,172562],{"class":622},"counter ",[52,172564,2099],{"class":160},[52,172566,90796],{"class":622},[52,172568,172569],{"class":54,"line":136},[52,172570,116],{"emptyLinePlaceholder":115},[52,172572,172573,172575,172578,172580],{"class":54,"line":141},[52,172574,5985],{"class":160},[52,172576,172577],{"class":622}," word ",[52,172579,28988],{"class":160},[52,172581,172582],{"class":622}," words:\n",[52,172584,172585,172588,172590,172593,172596,172598,172601],{"class":54,"line":146},[52,172586,172587],{"class":622},"    word ",[52,172589,2099],{"class":160},[52,172591,172592],{"class":622}," word.strip(",[52,172594,172595],{"class":62},"\".,!?;:",[52,172597,158863],{"class":90},[52,172599,172600],{"class":62},"'()[]\"",[52,172602,170],{"class":622},[52,172604,172605,172607,172609],{"class":54,"line":152},[52,172606,6060],{"class":160},[52,172608,41862],{"class":160},[52,172610,172611],{"class":622}," word:\n",[52,172613,172614],{"class":54,"line":157},[52,172615,150880],{"class":160},[52,172617,172618,172621,172623,172626,172628,172630,172632],{"class":54,"line":173},[52,172619,172620],{"class":622},"    counter[word] ",[52,172622,2099],{"class":160},[52,172624,172625],{"class":622}," counter.get(word, ",[52,172627,3306],{"class":90},[52,172629,16670],{"class":622},[52,172631,3593],{"class":160},[52,172633,58629],{"class":90},[52,172635,172636],{"class":54,"line":178},[52,172637,116],{"emptyLinePlaceholder":115},[52,172639,172640,172643,172645,172647,172650,172652,172654,172656,172658,172660,172662,172664,172666],{"class":54,"line":184},[52,172641,172642],{"class":622},"items ",[52,172644,2099],{"class":160},[52,172646,165972],{"class":90},[52,172648,172649],{"class":622},"(counter.items(), ",[52,172651,156314],{"class":8172},[52,172653,156317],{"class":160},[52,172655,156320],{"class":622},[52,172657,3332],{"class":90},[52,172659,115122],{"class":622},[52,172661,165896],{"class":8172},[52,172663,2099],{"class":160},[52,172665,34408],{"class":90},[52,172667,170],{"class":622},[52,172669,172670],{"class":54,"line":189},[52,172671,116],{"emptyLinePlaceholder":115},[52,172673,172674,172676,172679,172681,172684,172686],{"class":54,"line":201},[52,172675,5985],{"class":160},[52,172677,172678],{"class":622}," word, count ",[52,172680,28988],{"class":160},[52,172682,172683],{"class":622}," items[:",[52,172685,3559],{"class":90},[52,172687,168123],{"class":622},[52,172689,172690,172692],{"class":54,"line":206},[52,172691,34231],{"class":90},[52,172693,172694],{"class":622},"(word, count)\n",[14,172696,172698],{"id":172697},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[19,172700,172702],{"className":33310,"code":172701,"language":33312,"meta":28,"style":28},"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",[26,172703,172704,172710,172720,172724,172736,172740,172744,172752,172762,172768,172772,172802,172812,172816,172820,172828,172858,172882,172886,172890,172898,172927,172932],{"__ignoreMap":28},[52,172705,172706,172708],{"class":54,"line":55},[52,172707,33324],{"class":160},[52,172709,149459],{"class":622},[52,172711,172712,172714,172716,172718],{"class":54,"line":69},[52,172713,33669],{"class":160},[52,172715,111231],{"class":622},[52,172717,33324],{"class":160},[52,172719,111236],{"class":622},[52,172721,172722],{"class":54,"line":82},[52,172723,116],{"emptyLinePlaceholder":115},[52,172725,172726,172728,172730,172732,172734],{"class":54,"line":97},[52,172727,154192],{"class":90},[52,172729,16520],{"class":160},[52,172731,111465],{"class":622},[52,172733,154199],{"class":62},[52,172735,170],{"class":622},[52,172737,172738],{"class":54,"line":112},[52,172739,116],{"emptyLinePlaceholder":115},[52,172741,172742],{"class":54,"line":119},[52,172743,116],{"emptyLinePlaceholder":115},[52,172745,172746,172748,172750],{"class":54,"line":130},[52,172747,34879],{"class":160},[52,172749,154216],{"class":58},[52,172751,34885],{"class":622},[52,172753,172754,172756,172758,172760],{"class":54,"line":136},[52,172755,6060],{"class":160},[52,172757,41862],{"class":160},[52,172759,154227],{"class":90},[52,172761,154230],{"class":622},[52,172763,172764,172766],{"class":54,"line":141},[52,172765,17708],{"class":160},[52,172767,54769],{"class":622},[52,172769,172770],{"class":54,"line":146},[52,172771,116],{"emptyLinePlaceholder":115},[52,172773,172774,172776,172778,172780,172782,172784,172786,172788,172790,172792,172794,172796,172798,172800],{"class":54,"line":152},[52,172775,37110],{"class":160},[52,172777,149159],{"class":90},[52,172779,3121],{"class":622},[52,172781,154192],{"class":90},[52,172783,15391],{"class":622},[52,172785,149169],{"class":62},[52,172787,15391],{"class":622},[52,172789,149174],{"class":8172},[52,172791,2099],{"class":160},[52,172793,149179],{"class":62},[52,172795,16670],{"class":622},[52,172797,34315],{"class":160},[52,172799,150521],{"class":8172},[52,172801,6698],{"class":622},[52,172803,172804,172806,172808,172810],{"class":54,"line":157},[52,172805,17708],{"class":160},[52,172807,150532],{"class":622},[52,172809,48286],{"class":8172},[52,172811,170],{"class":622},[52,172813,172814],{"class":54,"line":173},[52,172815,116],{"emptyLinePlaceholder":115},[52,172817,172818],{"class":54,"line":178},[52,172819,116],{"emptyLinePlaceholder":115},[52,172821,172822,172824,172826],{"class":54,"line":184},[52,172823,34879],{"class":160},[52,172825,154326],{"class":58},[52,172827,154329],{"class":622},[52,172829,172830,172832,172834,172836,172838,172840,172842,172844,172846,172848,172850,172852,172854,172856],{"class":54,"line":189},[52,172831,37110],{"class":160},[52,172833,149159],{"class":90},[52,172835,3121],{"class":622},[52,172837,154192],{"class":90},[52,172839,15391],{"class":622},[52,172841,154344],{"class":62},[52,172843,15391],{"class":622},[52,172845,149174],{"class":8172},[52,172847,2099],{"class":160},[52,172849,149179],{"class":62},[52,172851,16670],{"class":622},[52,172853,34315],{"class":160},[52,172855,150521],{"class":8172},[52,172857,6698],{"class":622},[52,172859,172860,172862,172864,172866,172868,172870,172872,172874,172876,172878,172880],{"class":54,"line":201},[52,172861,154365],{"class":622},[52,172863,48286],{"class":8172},[52,172865,15391],{"class":622},[52,172867,149505],{"class":8172},[52,172869,2099],{"class":160},[52,172871,36919],{"class":90},[52,172873,15391],{"class":622},[52,172875,154380],{"class":8172},[52,172877,2099],{"class":160},[52,172879,3194],{"class":90},[52,172881,170],{"class":622},[52,172883,172884],{"class":54,"line":206},[52,172885,116],{"emptyLinePlaceholder":115},[52,172887,172888],{"class":54,"line":224},[52,172889,116],{"emptyLinePlaceholder":115},[52,172891,172892,172894,172896],{"class":54,"line":229},[52,172893,162084],{"class":622},[52,172895,2099],{"class":160},[52,172897,155410],{"class":622},[52,172899,172900,172903,172905,172907,172909,172911,172913,172915,172917,172919,172921,172923,172925],{"class":54,"line":241},[52,172901,172902],{"class":622},"students.append({",[52,172904,65609],{"class":62},[52,172906,54368],{"class":622},[52,172908,152256],{"class":62},[52,172910,15391],{"class":622},[52,172912,72053],{"class":62},[52,172914,54368],{"class":622},[52,172916,3762],{"class":90},[52,172918,15391],{"class":622},[52,172920,153840],{"class":62},[52,172922,54368],{"class":622},[52,172924,4100],{"class":90},[52,172926,167520],{"class":622},[52,172928,172929],{"class":54,"line":246},[52,172930,172931],{"class":622},"save_students(students)\n",[52,172933,172934,172936,172938,172941],{"class":54,"line":252},[52,172935,33347],{"class":90},[52,172937,3121],{"class":622},[52,172939,172940],{"class":62},"\"保存成功\"",[52,172942,170],{"class":622},[14,172944,172946],{"id":172945},"_814-易错点","8.14 易错点",[1070,172948,172949,172953,172959,172964,172971,172978],{},[1073,172950,172951,171212],{},[26,172952,3907],{},[1073,172954,172955,172956,31319],{},"读写中文要指定 ",[26,172957,172958],{},"encoding=\"utf-8\"",[1073,172960,172961,172962,31319],{},"打开文件后要关闭，推荐使用 ",[26,172963,110753],{},[1073,172965,172966,172967,172970],{},"读取大文件不要直接 ",[26,172968,172969],{},"read()"," 全部内容。",[1073,172972,172973,172974,172977],{},"Windows 写 CSV 时建议加 ",[26,172975,172976],{},"newline=\"\"","，避免空行。",[1073,172979,172980],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172982,172984],{"id":172983},"_815-本章练习","8.15 本章练习",[1070,172986,172987,172994,172999,173002,173005],{},[1073,172988,172989,172990,172993],{},"写入一个 ",[26,172991,172992],{},"students.txt","，每行保存一个学生姓名。",[1073,172995,107275,172996,172998],{},[26,172997,172992],{}," 并输出所有学生。",[1073,173000,173001],{},"把学生列表保存为 JSON 文件。",[1073,173003,173004],{},"从 JSON 文件读取学生数据，计算平均分。",[1073,173006,173007,173008,173011,173012,173015],{},"写一个日志函数 ",[26,173009,173010],{},"write_log(message)","，每次调用向 ",[26,173013,173014],{},"app.log"," 追加一行。",[3015,173017,173018],{},"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":28,"searchDepth":69,"depth":69,"links":173020},[173021,173022,173026,173027,173033,173034,173035,173036,173037,173038,173039,173040,173041,173042,173043],{"id":170532,"depth":69,"text":170533},{"id":170573,"depth":69,"text":170574,"children":173023},[173024,173025],{"id":170577,"depth":82,"text":170578},{"id":170611,"depth":82,"text":170612},{"id":170725,"depth":69,"text":170726},{"id":170818,"depth":69,"text":170819,"children":173028},[173029,173030,173031,173032],{"id":170822,"depth":82,"text":170823},{"id":170909,"depth":82,"text":170910},{"id":170979,"depth":82,"text":170980},{"id":171073,"depth":82,"text":171074},{"id":171143,"depth":69,"text":171144},{"id":171206,"depth":69,"text":171207},{"id":171367,"depth":69,"text":171368},{"id":171430,"depth":69,"text":171431},{"id":171546,"depth":69,"text":171547},{"id":171756,"depth":69,"text":171757},{"id":172068,"depth":69,"text":172069},{"id":172479,"depth":69,"text":172480},{"id":172697,"depth":69,"text":172698},{"id":172945,"depth":69,"text":172946},{"id":172983,"depth":69,"text":172984},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170524,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":173050,"title":173051,"body":173052,"description":3046,"extension":3047,"meta":175238,"navigation":115,"path":175239,"seo":175240,"stem":175241,"__hash__":175242},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":173053,"toc":175205},[173054,173057,173061,173064,173067,173159,173161,173180,173185,173189,173192,173195,173224,173231,173234,173238,173241,173270,173272,173324,173330,173383,173387,173485,173488,173555,173559,173616,173618,173624,173628,173633,173639,173730,173735,173739,173742,173820,173823,173861,173865,173983,173986,173990,173993,174038,174041,174045,174050,174056,174106,174109,174140,174144,174148,174178,174182,174217,174221,174256,174296,174300,174316,174319,174323,174327,174406,174410,174451,174455,174510,174514,174548,174552,174582,174591,174598,174604,174661,174664,174672,174675,174679,174686,174689,174695,174698,174715,174720,174724,174730,174743,174746,174783,174786,174797,174800,174814,174817,174831,174835,174842,174875,174878,174880,174886,174889,174893,174895,174901,174906,175079,175083,175146,175150,175174,175178,175202],[10,173055,173051],{"id":173056},"_9-异常模块与包",[14,173058,173060],{"id":173059},"_91-什么是异常","9.1 什么是异常",[274,173062,173063],{},"异常是程序运行过程中出现的错误。",[274,173065,173066],{},"常见异常：",[3253,173068,173069,173078],{},[3256,173070,173071],{},[3259,173072,173073,173076],{},[3262,173074,173075],{},"异常",[3262,173077,28814],{},[3299,173079,173080,173090,173100,173109,173119,173129,173139,173149],{},[3259,173081,173082,173087],{},[3304,173083,173084],{},[26,173085,173086],{},"NameError",[3304,173088,173089],{},"使用了未定义变量",[3259,173091,173092,173097],{},[3304,173093,173094],{},[26,173095,173096],{},"TypeError",[3304,173098,173099],{},"类型不匹配",[3259,173101,173102,173106],{},[3304,173103,173104],{},[26,173105,157202],{},[3304,173107,173108],{},"值不合法",[3259,173110,173111,173116],{},[3304,173112,173113],{},[26,173114,173115],{},"IndexError",[3304,173117,173118],{},"列表索引越界",[3259,173120,173121,173126],{},[3304,173122,173123],{},[26,173124,173125],{},"KeyError",[3304,173127,173128],{},"字典 key 不存在",[3259,173130,173131,173136],{},[3304,173132,173133],{},[26,173134,173135],{},"FileNotFoundError",[3304,173137,173138],{},"文件不存在",[3259,173140,173141,173146],{},[3304,173142,173143],{},[26,173144,173145],{},"ZeroDivisionError",[3304,173147,173148],{},"除数为 0",[3259,173150,173151,173156],{},[3304,173152,173153],{},[26,173154,173155],{},"ImportError",[3304,173157,173158],{},"导入失败",[274,173160,18091],{},[19,173162,173164],{"className":33310,"code":173163,"language":33312,"meta":28,"style":28},"num = int(\"abc\")\n",[26,173165,173166],{"__ignoreMap":28},[52,173167,173168,173170,173172,173174,173176,173178],{"class":54,"line":55},[52,173169,158155],{"class":622},[52,173171,2099],{"class":160},[52,173173,5344],{"class":90},[52,173175,3121],{"class":622},[52,173177,158248],{"class":62},[52,173179,170],{"class":622},[274,173181,173182,173183,31319],{},"会触发 ",[26,173184,157202],{},[14,173186,173188],{"id":173187},"_92-为什么要处理异常","9.2 为什么要处理异常",[274,173190,173191],{},"如果不处理异常，程序会直接终止。",[274,173193,173194],{},"例如用户输入年龄：",[19,173196,173198],{"className":33310,"code":173197,"language":33312,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[26,173199,173200,173218],{"__ignoreMap":28},[52,173201,173202,173204,173206,173208,173210,173212,173214,173216],{"class":54,"line":55},[52,173203,148914],{"class":622},[52,173205,2099],{"class":160},[52,173207,5344],{"class":90},[52,173209,3121],{"class":622},[52,173211,56751],{"class":90},[52,173213,3121],{"class":622},[52,173215,154762],{"class":62},[52,173217,33429],{"class":622},[52,173219,173220,173222],{"class":54,"line":69},[52,173221,33347],{"class":90},[52,173223,158129],{"class":622},[274,173225,173226,173227,173230],{},"用户输入 ",[26,173228,173229],{},"abc","，程序就会报错退出。",[274,173232,173233],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,173235,173237],{"id":173236},"_93-try-except","9.3 try except",[274,173239,173240],{},"基础语法：",[19,173242,173244],{"className":33310,"code":173243,"language":33312,"meta":28,"style":28},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[26,173245,173246,173253,173258,173265],{"__ignoreMap":28},[52,173247,173248,173251],{"class":54,"line":55},[52,173249,173250],{"class":160},"try",[52,173252,6698],{"class":622},[52,173254,173255],{"class":54,"line":69},[52,173256,173257],{"class":622},"    可能出错的代码\n",[52,173259,173260,173263],{"class":54,"line":82},[52,173261,173262],{"class":160},"except",[52,173264,6698],{"class":622},[52,173266,173267],{"class":54,"line":97},[52,173268,173269],{"class":622},"    出错后的处理代码\n",[274,173271,18091],{},[19,173273,173275],{"className":33310,"code":173274,"language":33312,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[26,173276,173277,173283,173301,173307,173313],{"__ignoreMap":28},[52,173278,173279,173281],{"class":54,"line":55},[52,173280,173250],{"class":160},[52,173282,6698],{"class":622},[52,173284,173285,173287,173289,173291,173293,173295,173297,173299],{"class":54,"line":69},[52,173286,154754],{"class":622},[52,173288,2099],{"class":160},[52,173290,5344],{"class":90},[52,173292,3121],{"class":622},[52,173294,56751],{"class":90},[52,173296,3121],{"class":622},[52,173298,154762],{"class":62},[52,173300,33429],{"class":622},[52,173302,173303,173305],{"class":54,"line":82},[52,173304,34231],{"class":90},[52,173306,158129],{"class":622},[52,173308,173309,173311],{"class":54,"line":97},[52,173310,173262],{"class":160},[52,173312,6698],{"class":622},[52,173314,173315,173317,173319,173322],{"class":54,"line":112},[52,173316,34231],{"class":90},[52,173318,3121],{"class":622},[52,173320,173321],{"class":62},"\"年龄必须是数字\"",[52,173323,170],{"class":622},[274,173325,173326,173327,173329],{},"不建议裸写 ",[26,173328,173262],{},"，最好指定异常类型。",[19,173331,173333],{"className":33310,"code":173332,"language":33312,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[26,173334,173335,173341,173359,173365,173373],{"__ignoreMap":28},[52,173336,173337,173339],{"class":54,"line":55},[52,173338,173250],{"class":160},[52,173340,6698],{"class":622},[52,173342,173343,173345,173347,173349,173351,173353,173355,173357],{"class":54,"line":69},[52,173344,154754],{"class":622},[52,173346,2099],{"class":160},[52,173348,5344],{"class":90},[52,173350,3121],{"class":622},[52,173352,56751],{"class":90},[52,173354,3121],{"class":622},[52,173356,154762],{"class":62},[52,173358,33429],{"class":622},[52,173360,173361,173363],{"class":54,"line":82},[52,173362,34231],{"class":90},[52,173364,158129],{"class":622},[52,173366,173367,173369,173371],{"class":54,"line":97},[52,173368,173262],{"class":160},[52,173370,154594],{"class":90},[52,173372,6698],{"class":622},[52,173374,173375,173377,173379,173381],{"class":54,"line":112},[52,173376,34231],{"class":90},[52,173378,3121],{"class":622},[52,173380,173321],{"class":62},[52,173382,170],{"class":622},[14,173384,173386],{"id":173385},"_94-捕获多个异常","9.4 捕获多个异常",[19,173388,173390],{"className":33310,"code":173389,"language":33312,"meta":28,"style":28},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[26,173391,173392,173398,173419,173439,173446,173454,173465,173474],{"__ignoreMap":28},[52,173393,173394,173396],{"class":54,"line":55},[52,173395,173250],{"class":160},[52,173397,6698],{"class":622},[52,173399,173400,173403,173405,173407,173409,173411,173413,173415,173417],{"class":54,"line":69},[52,173401,173402],{"class":622},"    nums ",[52,173404,2099],{"class":160},[52,173406,55157],{"class":622},[52,173408,3332],{"class":90},[52,173410,15391],{"class":622},[52,173412,3194],{"class":90},[52,173414,15391],{"class":622},[52,173416,3188],{"class":90},[52,173418,36178],{"class":622},[52,173420,173421,173424,173426,173428,173430,173432,173434,173437],{"class":54,"line":82},[52,173422,173423],{"class":622},"    index ",[52,173425,2099],{"class":160},[52,173427,5344],{"class":90},[52,173429,3121],{"class":622},[52,173431,56751],{"class":90},[52,173433,3121],{"class":622},[52,173435,173436],{"class":62},"\"请输入索引:\"",[52,173438,33429],{"class":622},[52,173440,173441,173443],{"class":54,"line":97},[52,173442,34231],{"class":90},[52,173444,173445],{"class":622},"(nums[index])\n",[52,173447,173448,173450,173452],{"class":54,"line":112},[52,173449,173262],{"class":160},[52,173451,154594],{"class":90},[52,173453,6698],{"class":622},[52,173455,173456,173458,173460,173463],{"class":54,"line":119},[52,173457,34231],{"class":90},[52,173459,3121],{"class":622},[52,173461,173462],{"class":62},"\"索引必须是整数\"",[52,173464,170],{"class":622},[52,173466,173467,173469,173472],{"class":54,"line":130},[52,173468,173262],{"class":160},[52,173470,173471],{"class":90}," IndexError",[52,173473,6698],{"class":622},[52,173475,173476,173478,173480,173483],{"class":54,"line":136},[52,173477,34231],{"class":90},[52,173479,3121],{"class":622},[52,173481,173482],{"class":62},"\"索引越界\"",[52,173484,170],{"class":622},[274,173486,173487],{},"多个异常使用相同处理逻辑：",[19,173489,173491],{"className":33310,"code":173490,"language":33312,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[26,173492,173493,173499,173517,173530,173544],{"__ignoreMap":28},[52,173494,173495,173497],{"class":54,"line":55},[52,173496,173250],{"class":160},[52,173498,6698],{"class":622},[52,173500,173501,173503,173505,173507,173509,173511,173513,173515],{"class":54,"line":69},[52,173502,48525],{"class":622},[52,173504,2099],{"class":160},[52,173506,5344],{"class":90},[52,173508,3121],{"class":622},[52,173510,56751],{"class":90},[52,173512,3121],{"class":622},[52,173514,158164],{"class":62},[52,173516,33429],{"class":622},[52,173518,173519,173521,173523,173525,173527],{"class":54,"line":82},[52,173520,34231],{"class":90},[52,173522,3121],{"class":622},[52,173524,3559],{"class":90},[52,173526,158414],{"class":160},[52,173528,173529],{"class":622}," num)\n",[52,173531,173532,173534,173536,173538,173540,173542],{"class":54,"line":97},[52,173533,173262],{"class":160},[52,173535,4629],{"class":622},[52,173537,157202],{"class":90},[52,173539,15391],{"class":622},[52,173541,173145],{"class":90},[52,173543,33718],{"class":622},[52,173545,173546,173548,173550,173553],{"class":54,"line":112},[52,173547,34231],{"class":90},[52,173549,3121],{"class":622},[52,173551,173552],{"class":62},"\"输入不合法\"",[52,173554,170],{"class":622},[14,173556,173558],{"id":173557},"_95-获取异常信息","9.5 获取异常信息",[19,173560,173562],{"className":33310,"code":173561,"language":33312,"meta":28,"style":28},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[26,173563,173564,173570,173584,173595],{"__ignoreMap":28},[52,173565,173566,173568],{"class":54,"line":55},[52,173567,173250],{"class":160},[52,173569,6698],{"class":622},[52,173571,173572,173574,173576,173578,173580,173582],{"class":54,"line":69},[52,173573,48525],{"class":622},[52,173575,2099],{"class":160},[52,173577,5344],{"class":90},[52,173579,3121],{"class":622},[52,173581,158248],{"class":62},[52,173583,170],{"class":622},[52,173585,173586,173588,173590,173592],{"class":54,"line":82},[52,173587,173262],{"class":160},[52,173589,154594],{"class":90},[52,173591,2039],{"class":160},[52,173593,173594],{"class":622}," e:\n",[52,173596,173597,173599,173601,173603,173606,173608,173610,173612,173614],{"class":54,"line":97},[52,173598,34231],{"class":90},[52,173600,3121],{"class":622},[52,173602,3170],{"class":160},[52,173604,173605],{"class":62},"\"出错了:",[52,173607,4008],{"class":90},[52,173609,3191],{"class":622},[52,173611,4058],{"class":90},[52,173613,3364],{"class":62},[52,173615,170],{"class":622},[274,173617,148825],{},[19,173619,173622],{"className":173620,"code":173621,"language":24,"meta":28},[22],"出错了:invalid literal for int() with base 10: 'abc'\n",[26,173623,173621],{"__ignoreMap":28},[14,173625,173627],{"id":173626},"_96-else和finally","9.6 else和finally",[274,173629,173630,173632],{},[26,173631,4668],{},"：没有异常时执行。",[274,173634,173635,173638],{},[26,173636,173637],{},"finally","：无论是否异常都会执行。",[19,173640,173642],{"className":33310,"code":173641,"language":33312,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[26,173643,173644,173650,173668,173676,173686,173692,173713,173719],{"__ignoreMap":28},[52,173645,173646,173648],{"class":54,"line":55},[52,173647,173250],{"class":160},[52,173649,6698],{"class":622},[52,173651,173652,173654,173656,173658,173660,173662,173664,173666],{"class":54,"line":69},[52,173653,48525],{"class":622},[52,173655,2099],{"class":160},[52,173657,5344],{"class":90},[52,173659,3121],{"class":622},[52,173661,56751],{"class":90},[52,173663,3121],{"class":622},[52,173665,158164],{"class":62},[52,173667,33429],{"class":622},[52,173669,173670,173672,173674],{"class":54,"line":82},[52,173671,173262],{"class":160},[52,173673,154594],{"class":90},[52,173675,6698],{"class":622},[52,173677,173678,173680,173682,173684],{"class":54,"line":97},[52,173679,34231],{"class":90},[52,173681,3121],{"class":622},[52,173683,155582],{"class":62},[52,173685,170],{"class":622},[52,173687,173688,173690],{"class":54,"line":112},[52,173689,4668],{"class":160},[52,173691,6698],{"class":622},[52,173693,173694,173696,173698,173700,173703,173705,173707,173709,173711],{"class":54,"line":119},[52,173695,34231],{"class":90},[52,173697,3121],{"class":622},[52,173699,3170],{"class":160},[52,173701,173702],{"class":62},"\"输入正确:",[52,173704,4008],{"class":90},[52,173706,4636],{"class":622},[52,173708,4058],{"class":90},[52,173710,3364],{"class":62},[52,173712,170],{"class":622},[52,173714,173715,173717],{"class":54,"line":130},[52,173716,173637],{"class":160},[52,173718,6698],{"class":622},[52,173720,173721,173723,173725,173728],{"class":54,"line":136},[52,173722,34231],{"class":90},[52,173724,3121],{"class":622},[52,173726,173727],{"class":62},"\"程序结束\"",[52,173729,170],{"class":622},[274,173731,173732,173734],{},[26,173733,173637],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173736,173738],{"id":173737},"_97-抛出异常","9.7 抛出异常",[274,173740,173741],{},"程序可以主动抛出异常。",[19,173743,173745],{"className":33310,"code":173744,"language":33312,"meta":28,"style":28},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[26,173746,173747,173756,173768,173781,173801,173805,173809],{"__ignoreMap":28},[52,173748,173749,173751,173754],{"class":54,"line":55},[52,173750,34879],{"class":160},[52,173752,173753],{"class":58}," set_age",[52,173755,163783],{"class":622},[52,173757,173758,173760,173762,173764,173766],{"class":54,"line":69},[52,173759,6060],{"class":160},[52,173761,18663],{"class":622},[52,173763,4022],{"class":160},[52,173765,7052],{"class":90},[52,173767,6698],{"class":622},[52,173769,173770,173772,173774,173776,173779],{"class":54,"line":82},[52,173771,106352],{"class":160},[52,173773,154594],{"class":90},[52,173775,3121],{"class":622},[52,173777,173778],{"class":62},"\"年龄不能为负数\"",[52,173780,170],{"class":622},[52,173782,173783,173785,173787,173789,173791,173793,173795,173797,173799],{"class":54,"line":97},[52,173784,34231],{"class":90},[52,173786,3121],{"class":622},[52,173788,3170],{"class":160},[52,173790,164351],{"class":62},[52,173792,4008],{"class":90},[52,173794,73149],{"class":622},[52,173796,4058],{"class":90},[52,173798,3364],{"class":62},[52,173800,170],{"class":622},[52,173802,173803],{"class":54,"line":112},[52,173804,116],{"emptyLinePlaceholder":115},[52,173806,173807],{"class":54,"line":119},[52,173808,116],{"emptyLinePlaceholder":115},[52,173810,173811,173814,173816,173818],{"class":54,"line":130},[52,173812,173813],{"class":622},"set_age(",[52,173815,3644],{"class":160},[52,173817,3332],{"class":90},[52,173819,170],{"class":622},[274,173821,173822],{},"调用者可以捕获：",[19,173824,173826],{"className":33310,"code":173825,"language":33312,"meta":28,"style":28},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[26,173827,173828,173834,173845,173855],{"__ignoreMap":28},[52,173829,173830,173832],{"class":54,"line":55},[52,173831,173250],{"class":160},[52,173833,6698],{"class":622},[52,173835,173836,173839,173841,173843],{"class":54,"line":69},[52,173837,173838],{"class":622},"    set_age(",[52,173840,3644],{"class":160},[52,173842,3332],{"class":90},[52,173844,170],{"class":622},[52,173846,173847,173849,173851,173853],{"class":54,"line":82},[52,173848,173262],{"class":160},[52,173850,154594],{"class":90},[52,173852,2039],{"class":160},[52,173854,173594],{"class":622},[52,173856,173857,173859],{"class":54,"line":97},[52,173858,34231],{"class":90},[52,173860,69928],{"class":622},[14,173862,173864],{"id":173863},"_98-自定义异常","9.8 自定义异常",[19,173866,173868],{"className":33310,"code":173867,"language":33312,"meta":28,"style":28},"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",[26,173869,173870,173884,173888,173892,173896,173904,173914,173925,173935,173939,173943,173949,173966,173977],{"__ignoreMap":28},[52,173871,173872,173874,173877,173879,173882],{"class":54,"line":55},[52,173873,17650],{"class":160},[52,173875,173876],{"class":58}," BalanceNotEnoughError",[52,173878,3121],{"class":622},[52,173880,173881],{"class":90},"Exception",[52,173883,33718],{"class":622},[52,173885,173886],{"class":54,"line":69},[52,173887,151905],{"class":160},[52,173889,173890],{"class":54,"line":82},[52,173891,116],{"emptyLinePlaceholder":115},[52,173893,173894],{"class":54,"line":97},[52,173895,116],{"emptyLinePlaceholder":115},[52,173897,173898,173900,173902],{"class":54,"line":112},[52,173899,34879],{"class":160},[52,173901,152554],{"class":58},[52,173903,165180],{"class":622},[52,173905,173906,173908,173910,173912],{"class":54,"line":119},[52,173907,6060],{"class":160},[52,173909,152510],{"class":622},[52,173911,4072],{"class":160},[52,173913,164957],{"class":622},[52,173915,173916,173918,173921,173923],{"class":54,"line":130},[52,173917,106352],{"class":160},[52,173919,173920],{"class":622}," BalanceNotEnoughError(",[52,173922,152605],{"class":62},[52,173924,170],{"class":622},[52,173926,173927,173929,173931,173933],{"class":54,"line":136},[52,173928,7049],{"class":160},[52,173930,165187],{"class":622},[52,173932,3644],{"class":160},[52,173934,152543],{"class":622},[52,173936,173937],{"class":54,"line":141},[52,173938,116],{"emptyLinePlaceholder":115},[52,173940,173941],{"class":54,"line":146},[52,173942,116],{"emptyLinePlaceholder":115},[52,173944,173945,173947],{"class":54,"line":152},[52,173946,173250],{"class":160},[52,173948,6698],{"class":622},[52,173950,173951,173953,173955,173958,173960,173962,173964],{"class":54,"line":157},[52,173952,164858],{"class":622},[52,173954,2099],{"class":160},[52,173956,173957],{"class":622}," withdraw(",[52,173959,3424],{"class":90},[52,173961,15391],{"class":622},[52,173963,4689],{"class":90},[52,173965,170],{"class":622},[52,173967,173968,173970,173973,173975],{"class":54,"line":173},[52,173969,173262],{"class":160},[52,173971,173972],{"class":622}," BalanceNotEnoughError ",[52,173974,34315],{"class":160},[52,173976,173594],{"class":622},[52,173978,173979,173981],{"class":54,"line":178},[52,173980,34231],{"class":90},[52,173982,69928],{"class":622},[274,173984,173985],{},"入门阶段大多数情况使用内置异常即可。",[14,173987,173989],{"id":173988},"_99-traceback","9.9 traceback",[274,173991,173992],{},"调试时可以输出完整异常堆栈。",[19,173994,173996],{"className":33310,"code":173995,"language":33312,"meta":28,"style":28},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[26,173997,173998,174005,174009,174015,174025,174033],{"__ignoreMap":28},[52,173999,174000,174002],{"class":54,"line":55},[52,174001,33324],{"class":160},[52,174003,174004],{"class":622}," traceback\n",[52,174006,174007],{"class":54,"line":69},[52,174008,116],{"emptyLinePlaceholder":115},[52,174010,174011,174013],{"class":54,"line":82},[52,174012,173250],{"class":160},[52,174014,6698],{"class":622},[52,174016,174017,174019,174021,174023],{"class":54,"line":97},[52,174018,4947],{"class":90},[52,174020,3121],{"class":622},[52,174022,158248],{"class":62},[52,174024,170],{"class":622},[52,174026,174027,174029,174031],{"class":54,"line":112},[52,174028,173262],{"class":160},[52,174030,154594],{"class":90},[52,174032,6698],{"class":622},[52,174034,174035],{"class":54,"line":119},[52,174036,174037],{"class":622},"    traceback.print_exc()\n",[274,174039,174040],{},"日志系统中常把异常堆栈记录到文件。",[14,174042,174044],{"id":174043},"_910-什么是模块","9.10 什么是模块",[274,174046,174047,174048,128351],{},"模块就是一个 ",[26,174049,148720],{},[274,174051,174052,174053,27567],{},"例如创建 ",[26,174054,174055],{},"my_math.py",[19,174057,174059],{"className":33310,"code":174058,"language":33312,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[26,174060,174061,174069,174079,174083,174087,174096],{"__ignoreMap":28},[52,174062,174063,174065,174067],{"class":54,"line":55},[52,174064,34879],{"class":160},[52,174066,2018],{"class":58},[52,174068,153461],{"class":622},[52,174070,174071,174073,174075,174077],{"class":54,"line":69},[52,174072,7049],{"class":160},[52,174074,13825],{"class":622},[52,174076,3593],{"class":160},[52,174078,153472],{"class":622},[52,174080,174081],{"class":54,"line":82},[52,174082,116],{"emptyLinePlaceholder":115},[52,174084,174085],{"class":54,"line":97},[52,174086,116],{"emptyLinePlaceholder":115},[52,174088,174089,174091,174094],{"class":54,"line":112},[52,174090,34879],{"class":160},[52,174092,174093],{"class":58}," sub",[52,174095,153461],{"class":622},[52,174097,174098,174100,174102,174104],{"class":54,"line":119},[52,174099,7049],{"class":160},[52,174101,13825],{"class":622},[52,174103,3644],{"class":160},[52,174105,153472],{"class":622},[274,174107,174108],{},"在另一个文件中导入：",[19,174110,174112],{"className":33310,"code":174111,"language":33312,"meta":28,"style":28},"import my_math\n\nprint(my_math.add(1, 2))\n",[26,174113,174114,174121,174125],{"__ignoreMap":28},[52,174115,174116,174118],{"class":54,"line":55},[52,174117,33324],{"class":160},[52,174119,174120],{"class":622}," my_math\n",[52,174122,174123],{"class":54,"line":69},[52,174124,116],{"emptyLinePlaceholder":115},[52,174126,174127,174129,174132,174134,174136,174138],{"class":54,"line":82},[52,174128,33347],{"class":90},[52,174130,174131],{"class":622},"(my_math.add(",[52,174133,3332],{"class":90},[52,174135,15391],{"class":622},[52,174137,3194],{"class":90},[52,174139,33429],{"class":622},[14,174141,174143],{"id":174142},"_911-import导入","9.11 import导入",[30,174145,174147],{"id":174146},"_9111-导入模块","9.11.1 导入模块",[19,174149,174151],{"className":33310,"code":174150,"language":33312,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\n",[26,174152,174153,174159,174163],{"__ignoreMap":28},[52,174154,174155,174157],{"class":54,"line":55},[52,174156,33324],{"class":160},[52,174158,48260],{"class":622},[52,174160,174161],{"class":54,"line":69},[52,174162,116],{"emptyLinePlaceholder":115},[52,174164,174165,174167,174170,174172,174174,174176],{"class":54,"line":82},[52,174166,33347],{"class":90},[52,174168,174169],{"class":622},"(random.randint(",[52,174171,3332],{"class":90},[52,174173,15391],{"class":622},[52,174175,3559],{"class":90},[52,174177,33429],{"class":622},[30,174179,174181],{"id":174180},"_9112-导入指定内容","9.11.2 导入指定内容",[19,174183,174185],{"className":33310,"code":174184,"language":33312,"meta":28,"style":28},"from random import randint\n\nprint(randint(1, 10))\n",[26,174186,174187,174198,174202],{"__ignoreMap":28},[52,174188,174189,174191,174193,174195],{"class":54,"line":55},[52,174190,33669],{"class":160},[52,174192,60726],{"class":622},[52,174194,33324],{"class":160},[52,174196,174197],{"class":622}," randint\n",[52,174199,174200],{"class":54,"line":69},[52,174201,116],{"emptyLinePlaceholder":115},[52,174203,174204,174206,174209,174211,174213,174215],{"class":54,"line":82},[52,174205,33347],{"class":90},[52,174207,174208],{"class":622},"(randint(",[52,174210,3332],{"class":90},[52,174212,15391],{"class":622},[52,174214,3559],{"class":90},[52,174216,33429],{"class":622},[30,174218,174220],{"id":174219},"_9113-起别名","9.11.3 起别名",[19,174222,174224],{"className":33310,"code":174223,"language":33312,"meta":28,"style":28},"import random as rd\n\nprint(rd.randint(1, 10))\n",[26,174225,174226,174237,174241],{"__ignoreMap":28},[52,174227,174228,174230,174232,174234],{"class":54,"line":55},[52,174229,33324],{"class":160},[52,174231,60726],{"class":622},[52,174233,34315],{"class":160},[52,174235,174236],{"class":622}," rd\n",[52,174238,174239],{"class":54,"line":69},[52,174240,116],{"emptyLinePlaceholder":115},[52,174242,174243,174245,174248,174250,174252,174254],{"class":54,"line":82},[52,174244,33347],{"class":90},[52,174246,174247],{"class":622},"(rd.randint(",[52,174249,3332],{"class":90},[52,174251,15391],{"class":622},[52,174253,3559],{"class":90},[52,174255,33429],{"class":622},[19,174257,174259],{"className":33310,"code":174258,"language":33312,"meta":28,"style":28},"from random import randint as rint\n\nprint(rint(1, 10))\n",[26,174260,174261,174277,174281],{"__ignoreMap":28},[52,174262,174263,174265,174267,174269,174272,174274],{"class":54,"line":55},[52,174264,33669],{"class":160},[52,174266,60726],{"class":622},[52,174268,33324],{"class":160},[52,174270,174271],{"class":622}," randint ",[52,174273,34315],{"class":160},[52,174275,174276],{"class":622}," rint\n",[52,174278,174279],{"class":54,"line":69},[52,174280,116],{"emptyLinePlaceholder":115},[52,174282,174283,174285,174288,174290,174292,174294],{"class":54,"line":82},[52,174284,33347],{"class":90},[52,174286,174287],{"class":622},"(rint(",[52,174289,3332],{"class":90},[52,174291,15391],{"class":622},[52,174293,3559],{"class":90},[52,174295,33429],{"class":622},[30,174297,174299],{"id":174298},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[19,174301,174303],{"className":33310,"code":174302,"language":33312,"meta":28,"style":28},"from random import *\n",[26,174304,174305],{"__ignoreMap":28},[52,174306,174307,174309,174311,174313],{"class":54,"line":55},[52,174308,33669],{"class":160},[52,174310,60726],{"class":622},[52,174312,33324],{"class":160},[52,174314,174315],{"class":160}," *\n",[274,174317,174318],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,174320,174322],{"id":174321},"_912-常用内置模块","9.12 常用内置模块",[30,174324,174326],{"id":174325},"_9121-random","9.12.1 random",[19,174328,174330],{"className":33310,"code":174329,"language":33312,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[26,174331,174332,174338,174342,174356,174375],{"__ignoreMap":28},[52,174333,174334,174336],{"class":54,"line":55},[52,174335,33324],{"class":160},[52,174337,48260],{"class":622},[52,174339,174340],{"class":54,"line":69},[52,174341,116],{"emptyLinePlaceholder":115},[52,174343,174344,174346,174348,174350,174352,174354],{"class":54,"line":82},[52,174345,33347],{"class":90},[52,174347,174169],{"class":622},[52,174349,3332],{"class":90},[52,174351,15391],{"class":622},[52,174353,3559],{"class":90},[52,174355,33429],{"class":622},[52,174357,174358,174360,174363,174365,174367,174369,174371,174373],{"class":54,"line":97},[52,174359,33347],{"class":90},[52,174361,174362],{"class":622},"(random.choice([",[52,174364,152256],{"class":62},[52,174366,15391],{"class":622},[52,174368,153304],{"class":62},[52,174370,15391],{"class":622},[52,174372,162099],{"class":62},[52,174374,36075],{"class":622},[52,174376,174377,174379,174382,174384,174386,174388,174390,174392,174394,174396,174398,174400,174402,174404],{"class":54,"line":112},[52,174378,33347],{"class":90},[52,174380,174381],{"class":622},"(random.sample([",[52,174383,3332],{"class":90},[52,174385,15391],{"class":622},[52,174387,3194],{"class":90},[52,174389,15391],{"class":622},[52,174391,3188],{"class":90},[52,174393,15391],{"class":622},[52,174395,3406],{"class":90},[52,174397,15391],{"class":622},[52,174399,3432],{"class":90},[52,174401,115122],{"class":622},[52,174403,3194],{"class":90},[52,174405,33429],{"class":622},[30,174407,174409],{"id":174408},"_9122-time","9.12.2 time",[19,174411,174413],{"className":33310,"code":174412,"language":33312,"meta":28,"style":28},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[26,174414,174415,174421,174425,174432,174440],{"__ignoreMap":28},[52,174416,174417,174419],{"class":54,"line":55},[52,174418,33324],{"class":160},[52,174420,34761],{"class":622},[52,174422,174423],{"class":54,"line":69},[52,174424,116],{"emptyLinePlaceholder":115},[52,174426,174427,174429],{"class":54,"line":82},[52,174428,33347],{"class":90},[52,174430,174431],{"class":622},"(time.time())\n",[52,174433,174434,174436,174438],{"class":54,"line":97},[52,174435,97999],{"class":622},[52,174437,3332],{"class":90},[52,174439,170],{"class":622},[52,174441,174442,174444,174446,174449],{"class":54,"line":112},[52,174443,33347],{"class":90},[52,174445,3121],{"class":622},[52,174447,174448],{"class":62},"\"1秒后执行\"",[52,174450,170],{"class":622},[30,174452,174454],{"id":174453},"_9123-datetime","9.12.3 datetime",[19,174456,174458],{"className":33310,"code":174457,"language":33312,"meta":28,"style":28},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[26,174459,174460,174472,174476,174486,174493],{"__ignoreMap":28},[52,174461,174462,174464,174467,174469],{"class":54,"line":55},[52,174463,33669],{"class":160},[52,174465,174466],{"class":622}," datetime ",[52,174468,33324],{"class":160},[52,174470,174471],{"class":622}," datetime\n",[52,174473,174474],{"class":54,"line":69},[52,174475,116],{"emptyLinePlaceholder":115},[52,174477,174478,174481,174483],{"class":54,"line":82},[52,174479,174480],{"class":622},"now ",[52,174482,2099],{"class":160},[52,174484,174485],{"class":622}," datetime.now()\n",[52,174487,174488,174490],{"class":54,"line":97},[52,174489,33347],{"class":90},[52,174491,174492],{"class":622},"(now)\n",[52,174494,174495,174497,174500,174503,174505,174508],{"class":54,"line":112},[52,174496,33347],{"class":90},[52,174498,174499],{"class":622},"(now.strftime(",[52,174501,174502],{"class":62},"\"%Y-%m-",[52,174504,159059],{"class":90},[52,174506,174507],{"class":62}," %H:%M:%S\"",[52,174509,33429],{"class":622},[30,174511,174513],{"id":174512},"_9124-os","9.12.4 os",[19,174515,174517],{"className":33310,"code":174516,"language":33312,"meta":28,"style":28},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[26,174518,174519,174525,174529,174536],{"__ignoreMap":28},[52,174520,174521,174523],{"class":54,"line":55},[52,174522,33324],{"class":160},[52,174524,48237],{"class":622},[52,174526,174527],{"class":54,"line":69},[52,174528,116],{"emptyLinePlaceholder":115},[52,174530,174531,174533],{"class":54,"line":82},[52,174532,33347],{"class":90},[52,174534,174535],{"class":622},"(os.getcwd())\n",[52,174537,174538,174540,174543,174546],{"class":54,"line":97},[52,174539,33347],{"class":90},[52,174541,174542],{"class":622},"(os.listdir(",[52,174544,174545],{"class":62},"\".\"",[52,174547,33429],{"class":622},[30,174549,174551],{"id":174550},"_9125-sys","9.12.5 sys",[19,174553,174555],{"className":33310,"code":174554,"language":33312,"meta":28,"style":28},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[26,174556,174557,174564,174568,174575],{"__ignoreMap":28},[52,174558,174559,174561],{"class":54,"line":55},[52,174560,33324],{"class":160},[52,174562,174563],{"class":622}," sys\n",[52,174565,174566],{"class":54,"line":69},[52,174567,116],{"emptyLinePlaceholder":115},[52,174569,174570,174572],{"class":54,"line":82},[52,174571,33347],{"class":90},[52,174573,174574],{"class":622},"(sys.version)\n",[52,174576,174577,174579],{"class":54,"line":97},[52,174578,33347],{"class":90},[52,174580,174581],{"class":622},"(sys.path)\n",[14,174583,174585,174586,174588,174589,3364],{"id":174584},"_913-if-name-main","9.13 if ",[538,174587,82738],{}," == \"",[538,174590,104978],{},[274,174592,174593,174594,174597],{},"模块被直接运行和被导入时，",[26,174595,174596],{},"__name__"," 的值不同。",[274,174599,174600,174601,27567],{},"创建 ",[26,174602,174603],{},"my_module.py",[19,174605,174607],{"className":33310,"code":174606,"language":33312,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[26,174608,174609,174617,174627,174631,174635,174647],{"__ignoreMap":28},[52,174610,174611,174613,174615],{"class":54,"line":55},[52,174612,34879],{"class":160},[52,174614,2018],{"class":58},[52,174616,153461],{"class":622},[52,174618,174619,174621,174623,174625],{"class":54,"line":69},[52,174620,7049],{"class":160},[52,174622,13825],{"class":622},[52,174624,3593],{"class":160},[52,174626,153472],{"class":622},[52,174628,174629],{"class":54,"line":82},[52,174630,116],{"emptyLinePlaceholder":115},[52,174632,174633],{"class":54,"line":97},[52,174634,116],{"emptyLinePlaceholder":115},[52,174636,174637,174639,174641,174643,174645],{"class":54,"line":112},[52,174638,4509],{"class":160},[52,174640,34152],{"class":90},[52,174642,104479],{"class":160},[52,174644,104482],{"class":62},[52,174646,6698],{"class":622},[52,174648,174649,174651,174653,174655,174657,174659],{"class":54,"line":119},[52,174650,34231],{"class":90},[52,174652,168968],{"class":622},[52,174654,3332],{"class":90},[52,174656,15391],{"class":622},[52,174658,3194],{"class":90},[52,174660,33429],{"class":622},[274,174662,174663],{},"作用：",[1070,174665,174666,174669],{},[1073,174667,174668],{},"直接运行该文件时，执行测试代码。",[1073,174670,174671],{},"被其他文件导入时，不执行测试代码。",[274,174673,174674],{},"这是写模块时很常用的习惯。",[14,174676,174678],{"id":174677},"_914-包","9.14 包",[274,174680,174681,174682,174685],{},"包是包含 ",[26,174683,174684],{},"__init__.py"," 的目录，用于组织多个模块。",[274,174687,174688],{},"目录结构：",[19,174690,174693],{"className":174691,"code":174692,"language":24,"meta":28},[22],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[26,174694,174692],{"__ignoreMap":28},[274,174696,174697],{},"导入：",[19,174699,174701],{"className":33310,"code":174700,"language":33312,"meta":28,"style":28},"from utils.file_utils import read_file\n",[26,174702,174703],{"__ignoreMap":28},[52,174704,174705,174707,174710,174712],{"class":54,"line":55},[52,174706,33669],{"class":160},[52,174708,174709],{"class":622}," utils.file_utils ",[52,174711,33324],{"class":160},[52,174713,174714],{"class":622}," read_file\n",[274,174716,174717,174719],{},[26,174718,174684],{}," 可以为空，也可以写包初始化逻辑。",[14,174721,174723],{"id":174722},"_915-第三方包","9.15 第三方包",[274,174725,174726,174727,174729],{},"第三方包通过 ",[26,174728,26783],{}," 安装。",[19,174731,174733],{"className":26774,"code":174732,"language":26776,"meta":28,"style":28},"pip install requests\n",[26,174734,174735],{"__ignoreMap":28},[52,174736,174737,174739,174741],{"class":54,"line":55},[52,174738,26783],{"class":58},[52,174740,76],{"class":62},[52,174742,148466],{"class":62},[274,174744,174745],{},"使用：",[19,174747,174749],{"className":33310,"code":174748,"language":33312,"meta":28,"style":28},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[26,174750,174751,174757,174761,174776],{"__ignoreMap":28},[52,174752,174753,174755],{"class":54,"line":55},[52,174754,33324],{"class":160},[52,174756,148466],{"class":622},[52,174758,174759],{"class":54,"line":69},[52,174760,116],{"emptyLinePlaceholder":115},[52,174762,174763,174766,174768,174771,174774],{"class":54,"line":82},[52,174764,174765],{"class":622},"response ",[52,174767,2099],{"class":160},[52,174769,174770],{"class":622}," requests.get(",[52,174772,174773],{"class":62},"\"https:\u002F\u002Fwww.example.com\"",[52,174775,170],{"class":622},[52,174777,174778,174780],{"class":54,"line":97},[52,174779,33347],{"class":90},[52,174781,174782],{"class":622},"(response.status_code)\n",[274,174784,174785],{},"查看已安装包：",[19,174787,174789],{"className":26774,"code":174788,"language":26776,"meta":28,"style":28},"pip list\n",[26,174790,174791],{"__ignoreMap":28},[52,174792,174793,174795],{"class":54,"line":55},[52,174794,26783],{"class":58},[52,174796,528],{"class":62},[274,174798,174799],{},"导出项目依赖：",[19,174801,174802],{"className":26774,"code":148661,"language":26776,"meta":28,"style":28},[26,174803,174804],{"__ignoreMap":28},[52,174805,174806,174808,174810,174812],{"class":54,"line":55},[52,174807,26783],{"class":58},[52,174809,148670],{"class":62},[52,174811,29165],{"class":160},[52,174813,148675],{"class":62},[274,174815,174816],{},"安装项目依赖：",[19,174818,174819],{"className":26774,"code":148681,"language":26776,"meta":28,"style":28},[26,174820,174821],{"__ignoreMap":28},[52,174822,174823,174825,174827,174829],{"class":54,"line":55},[52,174824,26783],{"class":58},[52,174826,76],{"class":62},[52,174828,1221],{"class":90},[52,174830,148675],{"class":62},[14,174832,174834],{"id":174833},"_916-模块搜索路径","9.16 模块搜索路径",[274,174836,174837,174838,174841],{},"Python 导入模块时会在 ",[26,174839,174840],{},"sys.path"," 中查找。",[19,174843,174845],{"className":33310,"code":174844,"language":33312,"meta":28,"style":28},"import sys\n\nfor path in sys.path:\n    print(path)\n",[26,174846,174847,174853,174857,174869],{"__ignoreMap":28},[52,174848,174849,174851],{"class":54,"line":55},[52,174850,33324],{"class":160},[52,174852,174563],{"class":622},[52,174854,174855],{"class":54,"line":69},[52,174856,116],{"emptyLinePlaceholder":115},[52,174858,174859,174861,174864,174866],{"class":54,"line":82},[52,174860,5985],{"class":160},[52,174862,174863],{"class":622}," path ",[52,174865,28988],{"class":160},[52,174867,174868],{"class":622}," sys.path:\n",[52,174870,174871,174873],{"class":54,"line":97},[52,174872,34231],{"class":90},[52,174874,171597],{"class":622},[274,174876,174877],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[274,174879,159991],{},[19,174881,174884],{"className":174882,"code":174883,"language":24,"meta":28},[22],"random.py\njson.py\ntime.py\n",[26,174885,174883],{"__ignoreMap":28},[274,174887,174888],{},"这些文件名可能导致导入异常。",[14,174890,174892],{"id":174891},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[274,174894,174688],{},[19,174896,174899],{"className":174897,"code":174898,"language":24,"meta":28},[22],"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",[26,174900,174898],{"__ignoreMap":28},[274,174902,174903,27567],{},[26,174904,174905],{},"utils\u002Ffile_utils.py",[19,174907,174909],{"className":33310,"code":174908,"language":33312,"meta":28,"style":28},"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",[26,174910,174911,174917,174927,174931,174935,174945,174955,174963,174969,174973,175000,175010,175014,175018,175028,175054],{"__ignoreMap":28},[52,174912,174913,174915],{"class":54,"line":55},[52,174914,33324],{"class":160},[52,174916,149459],{"class":622},[52,174918,174919,174921,174923,174925],{"class":54,"line":69},[52,174920,33669],{"class":160},[52,174922,111231],{"class":622},[52,174924,33324],{"class":160},[52,174926,111236],{"class":622},[52,174928,174929],{"class":54,"line":82},[52,174930,116],{"emptyLinePlaceholder":115},[52,174932,174933],{"class":54,"line":97},[52,174934,116],{"emptyLinePlaceholder":115},[52,174936,174937,174939,174942],{"class":54,"line":112},[52,174938,34879],{"class":160},[52,174940,174941],{"class":58}," read_json",[52,174943,174944],{"class":622},"(path):\n",[52,174946,174947,174950,174952],{"class":54,"line":119},[52,174948,174949],{"class":622},"    path ",[52,174951,2099],{"class":160},[52,174953,174954],{"class":622}," Path(path)\n",[52,174956,174957,174959,174961],{"class":54,"line":130},[52,174958,6060],{"class":160},[52,174960,41862],{"class":160},[52,174962,171678],{"class":622},[52,174964,174965,174967],{"class":54,"line":136},[52,174966,17708],{"class":160},[52,174968,54769],{"class":622},[52,174970,174971],{"class":54,"line":141},[52,174972,116],{"emptyLinePlaceholder":115},[52,174974,174975,174977,174979,174982,174984,174986,174988,174990,174992,174994,174996,174998],{"class":54,"line":146},[52,174976,37110],{"class":160},[52,174978,149159],{"class":90},[52,174980,174981],{"class":622},"(path, ",[52,174983,149169],{"class":62},[52,174985,15391],{"class":622},[52,174987,149174],{"class":8172},[52,174989,2099],{"class":160},[52,174991,149179],{"class":62},[52,174993,16670],{"class":622},[52,174995,34315],{"class":160},[52,174997,150521],{"class":8172},[52,174999,6698],{"class":622},[52,175001,175002,175004,175006,175008],{"class":54,"line":152},[52,175003,17708],{"class":160},[52,175005,150532],{"class":622},[52,175007,48286],{"class":8172},[52,175009,170],{"class":622},[52,175011,175012],{"class":54,"line":157},[52,175013,116],{"emptyLinePlaceholder":115},[52,175015,175016],{"class":54,"line":173},[52,175017,116],{"emptyLinePlaceholder":115},[52,175019,175020,175022,175025],{"class":54,"line":178},[52,175021,34879],{"class":160},[52,175023,175024],{"class":58}," write_json",[52,175026,175027],{"class":622},"(path, data):\n",[52,175029,175030,175032,175034,175036,175038,175040,175042,175044,175046,175048,175050,175052],{"class":54,"line":184},[52,175031,37110],{"class":160},[52,175033,149159],{"class":90},[52,175035,174981],{"class":622},[52,175037,154344],{"class":62},[52,175039,15391],{"class":622},[52,175041,149174],{"class":8172},[52,175043,2099],{"class":160},[52,175045,149179],{"class":62},[52,175047,16670],{"class":622},[52,175049,34315],{"class":160},[52,175051,150521],{"class":8172},[52,175053,6698],{"class":622},[52,175055,175056,175059,175061,175063,175065,175067,175069,175071,175073,175075,175077],{"class":54,"line":189},[52,175057,175058],{"class":622},"        json.dump(data, ",[52,175060,48286],{"class":8172},[52,175062,15391],{"class":622},[52,175064,149505],{"class":8172},[52,175066,2099],{"class":160},[52,175068,36919],{"class":90},[52,175070,15391],{"class":622},[52,175072,154380],{"class":8172},[52,175074,2099],{"class":160},[52,175076,3194],{"class":90},[52,175078,170],{"class":622},[274,175080,175081,27567],{},[26,175082,156975],{},[19,175084,175086],{"className":33310,"code":175085,"language":33312,"meta":28,"style":28},"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",[26,175087,175088,175099,175103,175116,175136],{"__ignoreMap":28},[52,175089,175090,175092,175094,175096],{"class":54,"line":55},[52,175091,33669],{"class":160},[52,175093,174709],{"class":622},[52,175095,33324],{"class":160},[52,175097,175098],{"class":622}," read_json, write_json\n",[52,175100,175101],{"class":54,"line":69},[52,175102,116],{"emptyLinePlaceholder":115},[52,175104,175105,175107,175109,175112,175114],{"class":54,"line":82},[52,175106,162084],{"class":622},[52,175108,2099],{"class":160},[52,175110,175111],{"class":622}," read_json(",[52,175113,154199],{"class":62},[52,175115,170],{"class":622},[52,175117,175118,175120,175122,175124,175126,175128,175130,175132,175134],{"class":54,"line":97},[52,175119,172902],{"class":622},[52,175121,65609],{"class":62},[52,175123,54368],{"class":622},[52,175125,152256],{"class":62},[52,175127,15391],{"class":622},[52,175129,153840],{"class":62},[52,175131,54368],{"class":622},[52,175133,4100],{"class":90},[52,175135,167520],{"class":622},[52,175137,175138,175141,175143],{"class":54,"line":112},[52,175139,175140],{"class":622},"write_json(",[52,175142,154199],{"class":62},[52,175144,175145],{"class":622},", students)\n",[14,175147,175149],{"id":175148},"_918-易错点","9.18 易错点",[1070,175151,175152,175155,175160,175165,175168,175171],{},[1073,175153,175154],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[1073,175156,175157,175158,31319],{},"能指定异常类型就不要裸写 ",[26,175159,173262],{},[1073,175161,175162,175164],{},[26,175163,173637],{}," 无论是否出错都会执行。",[1073,175166,175167],{},"模块文件名不要和标准库重名。",[1073,175169,175170],{},"导入自己写的模块时，要注意运行目录。",[1073,175172,175173],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,175175,175177],{"id":175176},"_919-本章练习","9.19 本章练习",[1070,175179,175180,175183,175186,175192,175199],{},[1073,175181,175182],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[1073,175184,175185],{},"写函数读取文件，如果文件不存在则返回空字符串。",[1073,175187,174600,175188,175191],{},[26,175189,175190],{},"math_utils.py","，实现加减乘除函数并导入使用。",[1073,175193,175194,175195,175198],{},"创建一个 ",[26,175196,175197],{},"utils"," 包，把 JSON 读写函数放进去。",[1073,175200,175201],{},"写一个程序，捕获除零异常和输入格式异常。",[3015,175203,175204],{},"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":28,"searchDepth":69,"depth":69,"links":175206},[175207,175208,175209,175210,175211,175212,175213,175214,175215,175216,175217,175223,175230,175232,175233,175234,175235,175236,175237],{"id":173059,"depth":69,"text":173060},{"id":173187,"depth":69,"text":173188},{"id":173236,"depth":69,"text":173237},{"id":173385,"depth":69,"text":173386},{"id":173557,"depth":69,"text":173558},{"id":173626,"depth":69,"text":173627},{"id":173737,"depth":69,"text":173738},{"id":173863,"depth":69,"text":173864},{"id":173988,"depth":69,"text":173989},{"id":174043,"depth":69,"text":174044},{"id":174142,"depth":69,"text":174143,"children":175218},[175219,175220,175221,175222],{"id":174146,"depth":82,"text":174147},{"id":174180,"depth":82,"text":174181},{"id":174219,"depth":82,"text":174220},{"id":174298,"depth":82,"text":174299},{"id":174321,"depth":69,"text":174322,"children":175224},[175225,175226,175227,175228,175229],{"id":174325,"depth":82,"text":174326},{"id":174408,"depth":82,"text":174409},{"id":174453,"depth":82,"text":174454},{"id":174512,"depth":82,"text":174513},{"id":174550,"depth":82,"text":174551},{"id":174584,"depth":69,"text":175231},"9.13 if name == \"main\"",{"id":174677,"depth":69,"text":174678},{"id":174722,"depth":69,"text":174723},{"id":174833,"depth":69,"text":174834},{"id":174891,"depth":69,"text":174892},{"id":175148,"depth":69,"text":175149},{"id":175176,"depth":69,"text":175177},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":173051,"description":3046},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":175244,"title":175245,"body":175246,"description":175409,"extension":3047,"meta":175410,"navigation":115,"path":175411,"seo":175412,"stem":175413,"__hash__":175414},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":175247,"toc":175404},[175248,175251,175254,175257,175268,175270,175344,175347,175350,175353,175356,175359,175362,175365,175368,175371,175374],[10,175249,175245],{"id":175250},"python教程",[274,175252,175253],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[274,175255,175256],{},"建议学习环境：",[1070,175258,175259,175262,175265],{},[1073,175260,175261],{},"Python 版本：Python 3.10 及以上。",[1073,175263,175264],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[1073,175266,175267],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,175269,119997],{"id":119997},[1070,175271,175272,175278,175284,175290,175296,175302,175308,175314,175320,175326,175332,175338],{},[1073,175273,175274],{},[300,175275,175277],{"href":175276},".\u002Fch1-Python","Python环境与第一个程序",[1073,175279,175280],{},[300,175281,175283],{"href":175282},".\u002Fch2","基础语法、变量与字符串",[1073,175285,175286],{},[300,175287,175289],{"href":175288},".\u002Fch3","判断语句",[1073,175291,175292],{},[300,175293,175295],{"href":175294},".\u002Fch4","循环语句",[1073,175297,175298],{},[300,175299,175301],{"href":175300},".\u002Fch5","函数基础",[1073,175303,175304],{},[300,175305,175307],{"href":175306},".\u002Fch6","数据容器",[1073,175309,175310],{},[300,175311,175313],{"href":175312},".\u002Fch7","函数进阶",[1073,175315,175316],{},[300,175317,175319],{"href":175318},".\u002Fch8","文件操作",[1073,175321,175322],{},[300,175323,175325],{"href":175324},".\u002Fch9","异常、模块与包",[1073,175327,175328],{},[300,175329,175331],{"href":175330},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[1073,175333,175334],{},[300,175335,175337],{"href":175336},".\u002Fch11","面向对象基础",[1073,175339,175340],{},[300,175341,175343],{"href":175342},".\u002Fch12","综合案例与复习路线",[14,175345,175346],{"id":175346},"学习路线",[274,175348,175349],{},"第一阶段：能运行程序。",[274,175351,175352],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[274,175354,175355],{},"第二阶段：能组织数据。",[274,175357,175358],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[274,175360,175361],{},"第三阶段：能封装逻辑。",[274,175363,175364],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[274,175366,175367],{},"第四阶段：能做小项目。",[274,175369,175370],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,175372,175373],{"id":175373},"参考资料",[1070,175375,175376,175383,175390,175397],{},[1073,175377,175378,175379],{},"黑马程序员 Python 入门教程推荐：",[300,175380,175381],{"href":175381,"rel":175382},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[304],[1073,175384,175385,175386],{},"Python 官方中文教程：",[300,175387,175388],{"href":175388,"rel":175389},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[304],[1073,175391,175392,175393],{},"Python 标准库文档：",[300,175394,175395],{"href":175395,"rel":175396},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[304],[1073,175398,175399,175400],{},"pyecharts 文档：",[300,175401,175402],{"href":175402,"rel":175403},"https:\u002F\u002Fpyecharts.org\u002F",[304],{"title":28,"searchDepth":69,"depth":69,"links":175405},[175406,175407,175408],{"id":119997,"depth":69,"text":119997},{"id":175346,"depth":69,"text":175346},{"id":175373,"depth":69,"text":175373},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":26331},"\u002Fwiki\u002F2024-10-10-python",{"title":175245,"description":175409},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331462318]